@anthropic-ai/sdk 0.125.0 → 0.127.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 +88 -0
- package/client.d.mts +12 -11
- package/client.d.mts.map +1 -1
- package/client.d.ts +12 -11
- package/client.d.ts.map +1 -1
- package/client.js +865 -845
- package/client.js.map +1 -1
- package/client.mjs +866 -840
- package/client.mjs.map +1 -1
- package/core/api-promise.js +71 -68
- package/core/api-promise.js.map +1 -1
- package/core/api-promise.mjs +71 -64
- package/core/api-promise.mjs.map +1 -1
- package/core/error.js +5 -2
- package/core/error.js.map +1 -1
- package/core/error.mjs +5 -2
- package/core/error.mjs.map +1 -1
- package/core/pagination.js +56 -50
- package/core/pagination.js.map +1 -1
- package/core/pagination.mjs +56 -41
- package/core/pagination.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/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/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/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 +2 -2
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs +3 -3
- package/internal/parse.mjs.map +1 -1
- package/internal/shim-types.js +0 -6
- package/internal/shim-types.js.map +1 -1
- package/internal/shim-types.mjs +0 -6
- package/internal/shim-types.mjs.map +1 -1
- package/internal/shims.d.mts +3 -3
- package/internal/shims.d.mts.map +1 -1
- package/internal/shims.d.ts +3 -3
- package/internal/shims.d.ts.map +1 -1
- package/internal/shims.js +0 -6
- package/internal/shims.js.map +1 -1
- package/internal/shims.mjs +0 -6
- 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/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/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/log.d.mts +7 -12
- package/internal/utils/log.d.mts.map +1 -1
- package/internal/utils/log.d.ts +7 -12
- package/internal/utils/log.d.ts.map +1 -1
- package/internal/utils/log.js +12 -0
- package/internal/utils/log.js.map +1 -1
- package/internal/utils/log.mjs +11 -0
- package/internal/utils/log.mjs.map +1 -1
- package/lib/BetaMessageStream.d.mts.map +1 -1
- package/lib/BetaMessageStream.d.ts.map +1 -1
- package/lib/BetaMessageStream.js +595 -590
- package/lib/BetaMessageStream.js.map +1 -1
- package/lib/BetaMessageStream.mjs +595 -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/beta-parser.d.mts +1 -3
- package/lib/beta-parser.d.mts.map +1 -1
- package/lib/beta-parser.d.ts +1 -3
- package/lib/beta-parser.d.ts.map +1 -1
- package/lib/beta-parser.js.map +1 -1
- package/lib/beta-parser.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.js +375 -369
- package/lib/environments/worker.js.map +1 -1
- package/lib/environments/worker.mjs +374 -329
- package/lib/environments/worker.mjs.map +1 -1
- package/lib/internal/stub.d.mts +2 -0
- package/lib/internal/stub.d.mts.map +1 -0
- package/lib/internal/stub.d.ts +2 -0
- package/lib/internal/stub.d.ts.map +1 -0
- package/lib/internal/stub.js +6 -0
- package/lib/internal/stub.js.map +1 -0
- package/lib/internal/stub.mjs +3 -0
- package/lib/internal/stub.mjs.map +1 -0
- package/lib/internal/types.d.mts +5 -0
- package/lib/internal/types.d.mts.map +1 -0
- package/lib/internal/types.d.ts +5 -0
- package/lib/internal/types.d.ts.map +1 -0
- package/lib/internal/types.js +3 -0
- package/lib/internal/types.js.map +1 -0
- package/lib/internal/types.mjs +2 -0
- package/lib/internal/types.mjs.map +1 -0
- package/lib/middleware.js +6 -1
- package/lib/middleware.js.map +1 -1
- package/lib/middleware.mjs +6 -1
- package/lib/middleware.mjs.map +1 -1
- package/lib/parser.d.mts +1 -3
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts +1 -3
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs.map +1 -1
- package/lib/tools/BetaToolRunner.d.mts +21 -6
- package/lib/tools/BetaToolRunner.d.mts.map +1 -1
- package/lib/tools/BetaToolRunner.d.ts +21 -6
- package/lib/tools/BetaToolRunner.d.ts.map +1 -1
- package/lib/tools/BetaToolRunner.js +415 -310
- package/lib/tools/BetaToolRunner.js.map +1 -1
- package/lib/tools/BetaToolRunner.mjs +414 -303
- 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/lib/transform-json-schema.js +7 -5
- package/lib/transform-json-schema.js.map +1 -1
- package/lib/transform-json-schema.mjs +7 -5
- package/lib/transform-json-schema.mjs.map +1 -1
- package/package.json +4 -3
- package/resources/beta/agents/agents.js +135 -132
- package/resources/beta/agents/agents.js.map +1 -1
- package/resources/beta/agents/agents.mjs +135 -132
- package/resources/beta/agents/agents.mjs.map +1 -1
- package/resources/beta/beta.d.mts +5 -5
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +5 -5
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js +39 -36
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs +39 -36
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/deployment-runs.d.mts +4 -0
- package/resources/beta/deployment-runs.d.mts.map +1 -1
- package/resources/beta/deployment-runs.d.ts +4 -0
- package/resources/beta/deployment-runs.d.ts.map +1 -1
- package/resources/beta/deployments.d.mts +5 -0
- package/resources/beta/deployments.d.mts.map +1 -1
- package/resources/beta/deployments.d.ts +5 -0
- package/resources/beta/deployments.d.ts.map +1 -1
- package/resources/beta/dreams.d.mts +19 -28
- package/resources/beta/dreams.d.mts.map +1 -1
- package/resources/beta/dreams.d.ts +19 -28
- package/resources/beta/dreams.d.ts.map +1 -1
- package/resources/beta/environments/environments.js +157 -154
- package/resources/beta/environments/environments.js.map +1 -1
- package/resources/beta/environments/environments.mjs +157 -154
- package/resources/beta/environments/environments.mjs.map +1 -1
- package/resources/beta/environments/work.js +255 -252
- package/resources/beta/environments/work.js.map +1 -1
- package/resources/beta/environments/work.mjs +255 -252
- package/resources/beta/environments/work.mjs.map +1 -1
- package/resources/beta/index.d.mts +2 -2
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +2 -2
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/memory-stores/memories.d.mts +6 -0
- package/resources/beta/memory-stores/memories.d.mts.map +1 -1
- package/resources/beta/memory-stores/memories.d.ts +6 -0
- package/resources/beta/memory-stores/memories.d.ts.map +1 -1
- package/resources/beta/memory-stores/memory-stores.js +150 -147
- package/resources/beta/memory-stores/memory-stores.js.map +1 -1
- package/resources/beta/memory-stores/memory-stores.mjs +150 -147
- package/resources/beta/memory-stores/memory-stores.mjs.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.mts +7 -0
- package/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.ts +7 -0
- package/resources/beta/memory-stores/memory-versions.d.ts.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/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.map +1 -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 -110
- package/resources/beta/messages/messages.js.map +1 -1
- package/resources/beta/messages/messages.mjs +113 -110
- package/resources/beta/messages/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/organization/federation/federation.js +11 -8
- package/resources/beta/organization/federation/federation.js.map +1 -1
- package/resources/beta/organization/federation/federation.mjs +11 -8
- package/resources/beta/organization/federation/federation.mjs.map +1 -1
- package/resources/beta/organization/federation/rules/rules.js +187 -184
- package/resources/beta/organization/federation/rules/rules.js.map +1 -1
- package/resources/beta/organization/federation/rules/rules.mjs +187 -184
- package/resources/beta/organization/federation/rules/rules.mjs.map +1 -1
- package/resources/beta/organization/index.d.mts +1 -1
- package/resources/beta/organization/index.d.mts.map +1 -1
- package/resources/beta/organization/index.d.ts +1 -1
- package/resources/beta/organization/index.d.ts.map +1 -1
- package/resources/beta/organization/index.js.map +1 -1
- package/resources/beta/organization/index.mjs.map +1 -1
- package/resources/beta/organization/organization.d.mts +2 -2
- package/resources/beta/organization/organization.d.mts.map +1 -1
- package/resources/beta/organization/organization.d.ts +2 -2
- package/resources/beta/organization/organization.d.ts.map +1 -1
- package/resources/beta/organization/organization.js +38 -35
- package/resources/beta/organization/organization.js.map +1 -1
- package/resources/beta/organization/organization.mjs +38 -35
- package/resources/beta/organization/organization.mjs.map +1 -1
- package/resources/beta/organization/rate-limits.d.mts +87 -5
- package/resources/beta/organization/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/rate-limits.d.ts +87 -5
- package/resources/beta/organization/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.js +163 -160
- package/resources/beta/organization/service-accounts/service-accounts.js.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.mjs +163 -160
- package/resources/beta/organization/service-accounts/service-accounts.mjs.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.mts +9 -4
- package/resources/beta/organization/workspaces/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.ts +9 -4
- package/resources/beta/organization/workspaces/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.js.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.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 -94
- package/resources/beta/organization/workspaces/workspaces.js.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.mjs +97 -94
- package/resources/beta/organization/workspaces/workspaces.mjs.map +1 -1
- package/resources/beta/sessions/events.d.mts +12 -21
- package/resources/beta/sessions/events.d.mts.map +1 -1
- package/resources/beta/sessions/events.d.ts +12 -21
- package/resources/beta/sessions/events.d.ts.map +1 -1
- package/resources/beta/sessions/events.js +118 -115
- package/resources/beta/sessions/events.js.map +1 -1
- package/resources/beta/sessions/events.mjs +118 -115
- package/resources/beta/sessions/events.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/sessions.d.mts +8 -2
- package/resources/beta/sessions/sessions.d.mts.map +1 -1
- package/resources/beta/sessions/sessions.d.ts +8 -2
- package/resources/beta/sessions/sessions.d.ts.map +1 -1
- package/resources/beta/sessions/sessions.js +161 -158
- package/resources/beta/sessions/sessions.js.map +1 -1
- package/resources/beta/sessions/sessions.mjs +161 -158
- package/resources/beta/sessions/sessions.mjs.map +1 -1
- package/resources/beta/sessions/threads/threads.js +86 -83
- package/resources/beta/sessions/threads/threads.js.map +1 -1
- package/resources/beta/sessions/threads/threads.mjs +86 -83
- package/resources/beta/sessions/threads/threads.mjs.map +1 -1
- package/resources/beta/skills/skills.js +104 -101
- package/resources/beta/skills/skills.js.map +1 -1
- package/resources/beta/skills/skills.mjs +104 -101
- package/resources/beta/skills/skills.mjs.map +1 -1
- package/resources/beta/tunnels/certificates.d.mts +2 -2
- package/resources/beta/tunnels/certificates.d.ts +2 -2
- package/resources/beta/tunnels/tunnels.js +188 -185
- package/resources/beta/tunnels/tunnels.js.map +1 -1
- package/resources/beta/tunnels/tunnels.mjs +188 -185
- package/resources/beta/tunnels/tunnels.mjs.map +1 -1
- package/resources/beta/user-profiles.d.mts +45 -0
- package/resources/beta/user-profiles.d.mts.map +1 -1
- package/resources/beta/user-profiles.d.ts +45 -0
- package/resources/beta/user-profiles.d.ts.map +1 -1
- package/resources/beta/user-profiles.js +25 -10
- package/resources/beta/user-profiles.js.map +1 -1
- package/resources/beta/user-profiles.mjs +25 -10
- package/resources/beta/user-profiles.mjs.map +1 -1
- package/resources/beta/vaults/credentials.d.mts +19 -19
- package/resources/beta/vaults/credentials.d.mts.map +1 -1
- package/resources/beta/vaults/credentials.d.ts +19 -19
- package/resources/beta/vaults/credentials.d.ts.map +1 -1
- package/resources/beta/vaults/vaults.js +156 -153
- package/resources/beta/vaults/vaults.js.map +1 -1
- package/resources/beta/vaults/vaults.mjs +156 -153
- package/resources/beta/vaults/vaults.mjs.map +1 -1
- package/resources/completions.d.mts +1 -1
- package/resources/completions.d.ts +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.map +1 -1
- package/resources/index.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.map +1 -1
- package/resources/messages/index.mjs.map +1 -1
- package/resources/messages/messages.d.mts +100 -63
- package/resources/messages/messages.d.mts.map +1 -1
- package/resources/messages/messages.d.ts +100 -63
- package/resources/messages/messages.d.ts.map +1 -1
- package/resources/messages/messages.js +115 -112
- package/resources/messages/messages.js.map +1 -1
- package/resources/messages/messages.mjs +115 -112
- package/resources/messages/messages.mjs.map +1 -1
- package/resources/skills/skills.js +88 -85
- package/resources/skills/skills.js.map +1 -1
- package/resources/skills/skills.mjs +88 -85
- package/resources/skills/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 +95 -72
- package/src/internal/node.browser.ts +7 -7
- package/src/internal/parse.ts +8 -11
- package/src/internal/shims.ts +4 -3
- package/src/internal/utils/bytes.ts +1 -1
- package/src/internal/utils/log.ts +16 -2
- package/src/lib/BetaMessageStream.ts +7 -5
- package/src/lib/beta-parser.ts +1 -3
- package/src/lib/internal/stub.ts +2 -0
- package/src/lib/internal/types.ts +2 -0
- package/src/lib/middleware.ts +6 -1
- package/src/lib/parser.ts +1 -3
- package/src/lib/tools/BetaToolRunner.ts +157 -24
- package/src/lib/transform-json-schema.ts +8 -6
- package/src/resources/beta/beta.ts +24 -1
- package/src/resources/beta/deployment-runs.ts +4 -0
- package/src/resources/beta/deployments.ts +5 -0
- package/src/resources/beta/dreams.ts +19 -28
- package/src/resources/beta/index.ts +11 -0
- package/src/resources/beta/memory-stores/memories.ts +6 -0
- package/src/resources/beta/memory-stores/memory-versions.ts +7 -0
- package/src/resources/beta/messages/batches.ts +13 -1
- package/src/resources/beta/messages/index.ts +10 -0
- package/src/resources/beta/messages/messages.ts +289 -100
- package/src/resources/beta/models.ts +25 -0
- package/src/resources/beta/organization/index.ts +6 -0
- package/src/resources/beta/organization/organization.ts +12 -0
- package/src/resources/beta/organization/rate-limits.ts +112 -4
- package/src/resources/beta/organization/workspaces/rate-limits.ts +16 -4
- package/src/resources/beta/organization/workspaces/workspaces.ts +3 -3
- package/src/resources/beta/sessions/events.ts +12 -21
- package/src/resources/beta/sessions/resources.ts +0 -3
- package/src/resources/beta/sessions/sessions.ts +8 -2
- package/src/resources/beta/tunnels/certificates.ts +2 -2
- package/src/resources/beta/user-profiles.ts +75 -10
- package/src/resources/beta/vaults/credentials.ts +19 -19
- package/src/resources/completions.ts +1 -1
- package/src/resources/index.ts +6 -0
- package/src/resources/messages/index.ts +6 -0
- package/src/resources/messages/messages.ts +128 -62
- 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
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_checkAndCompact, _BetaToolRunner_generateToolResponse;
|
|
1
|
+
var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_stream, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_compaction, _BetaToolRunner_turnPaused, _BetaToolRunner_checkAndCompact, _BetaToolRunner_send, _BetaToolRunner_compact, _BetaToolRunner_compactAfterFinalTurn, _BetaToolRunner_generateToolResponse;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "../../internal/tslib.mjs";
|
|
3
3
|
import { ToolError } from "./ToolError.mjs";
|
|
4
4
|
import { AnthropicError } from "../../core/error.mjs";
|
|
5
5
|
import { buildHeaders } from "../../internal/headers.mjs";
|
|
6
6
|
import { promiseWithResolvers } from "../../internal/utils/promise.mjs";
|
|
7
7
|
import { checkNever } from "../../internal/utils/values.mjs";
|
|
8
|
+
import { loggerFor } from "../../internal/utils/log.mjs";
|
|
8
9
|
import { DEFAULT_SUMMARY_PROMPT, DEFAULT_TOKEN_THRESHOLD } from "./CompactionControl.mjs";
|
|
9
10
|
import { collectStainlessHelpers, helperHeader, STAINLESS_HELPER_HEADER, } from "../../internal/stainless-helper-header.mjs";
|
|
10
11
|
/**
|
|
@@ -13,343 +14,453 @@ import { collectStainlessHelpers, helperHeader, STAINLESS_HELPER_HEADER, } from
|
|
|
13
14
|
* A ToolRunner is an async iterable that yields either BetaMessage or BetaMessageStream objects
|
|
14
15
|
* depending on the streaming configuration.
|
|
15
16
|
*/
|
|
16
|
-
export
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
tokensUsed = totalInputTokens + message.usage.output_tokens;
|
|
17
|
+
export var BetaToolRunner = /* @__PURE__ */ (() => {
|
|
18
|
+
/**
|
|
19
|
+
* A ToolRunner handles the automatic conversation loop between the assistant and tools.
|
|
20
|
+
*
|
|
21
|
+
* A ToolRunner is an async iterable that yields either BetaMessage or BetaMessageStream objects
|
|
22
|
+
* depending on the streaming configuration.
|
|
23
|
+
*/
|
|
24
|
+
class BetaToolRunner {
|
|
25
|
+
constructor(client, params, options) {
|
|
26
|
+
_BetaToolRunner_instances.add(this);
|
|
27
|
+
this.client = client;
|
|
28
|
+
/** Whether the async iterator has been consumed */
|
|
29
|
+
_BetaToolRunner_consumed.set(this, false);
|
|
30
|
+
/** Whether parameters have been mutated since the last API call */
|
|
31
|
+
_BetaToolRunner_mutated.set(this, false);
|
|
32
|
+
/** Current state containing the request parameters */
|
|
33
|
+
_BetaToolRunner_state.set(this, void 0);
|
|
34
|
+
_BetaToolRunner_options.set(this, void 0);
|
|
35
|
+
/** Promise for the last message received from the assistant */
|
|
36
|
+
_BetaToolRunner_message.set(this, void 0);
|
|
37
|
+
/** The stream of the request in progress, when streaming */
|
|
38
|
+
_BetaToolRunner_stream.set(this, void 0);
|
|
39
|
+
/** Cached tool response to avoid redundant executions */
|
|
40
|
+
_BetaToolRunner_toolResponse.set(this, void 0);
|
|
41
|
+
/** Promise resolvers for waiting on completion */
|
|
42
|
+
_BetaToolRunner_completion.set(this, void 0);
|
|
43
|
+
/** Number of iterations (API requests) made so far */
|
|
44
|
+
_BetaToolRunner_iterationCount.set(this, 0);
|
|
45
|
+
/** A compaction scheduled with `compactBeforeNextTurn()`, in flight until its response has been handled */
|
|
46
|
+
_BetaToolRunner_compaction.set(this, { status: 'idle' });
|
|
47
|
+
/** Whether the last turn was paused; a scheduled compaction waits for it to be resumed */
|
|
48
|
+
_BetaToolRunner_turnPaused.set(this, false);
|
|
49
|
+
rejectCompactionParam(params);
|
|
50
|
+
__classPrivateFieldSet(this, _BetaToolRunner_state, {
|
|
51
|
+
params: {
|
|
52
|
+
// You can't clone the entire params since there are functions as handlers.
|
|
53
|
+
// You also don't really need to clone params.messages, but it probably will prevent a foot gun
|
|
54
|
+
// somewhere.
|
|
55
|
+
...params,
|
|
56
|
+
messages: structuredClone(params.messages),
|
|
57
|
+
},
|
|
58
|
+
}, "f");
|
|
59
|
+
// structuredClone drops symbol-keyed properties, so collect helper marks
|
|
60
|
+
// from the original params here — the create()-side collector won't see
|
|
61
|
+
// them on the cloned messages.
|
|
62
|
+
const collected = collectStainlessHelpers(params.tools, params.messages);
|
|
63
|
+
__classPrivateFieldSet(this, _BetaToolRunner_options, {
|
|
64
|
+
...options,
|
|
65
|
+
headers: buildHeaders([
|
|
66
|
+
helperHeader('BetaToolRunner'),
|
|
67
|
+
collected.length ? { [STAINLESS_HELPER_HEADER]: collected.join(', ') } : undefined,
|
|
68
|
+
options?.headers,
|
|
69
|
+
]),
|
|
70
|
+
}, "f");
|
|
71
|
+
__classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
|
|
72
|
+
if (params.compactionControl?.enabled) {
|
|
73
|
+
console.warn('Anthropic: The `compactionControl` parameter is deprecated and will be removed in a future version. ' +
|
|
74
|
+
'Use server-side compaction instead by passing `edits: [{ type: "compact_20260112" }]` in the params passed to `toolRunner()`. ' +
|
|
75
|
+
'See https://platform.claude.com/docs/en/build-with-claude/compaction');
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
}
|
|
78
|
+
async *[(_BetaToolRunner_consumed = new WeakMap(), _BetaToolRunner_mutated = new WeakMap(), _BetaToolRunner_state = new WeakMap(), _BetaToolRunner_options = new WeakMap(), _BetaToolRunner_message = new WeakMap(), _BetaToolRunner_stream = new WeakMap(), _BetaToolRunner_toolResponse = new WeakMap(), _BetaToolRunner_completion = new WeakMap(), _BetaToolRunner_iterationCount = new WeakMap(), _BetaToolRunner_compaction = new WeakMap(), _BetaToolRunner_turnPaused = new WeakMap(), _BetaToolRunner_instances = new WeakSet(), _BetaToolRunner_checkAndCompact = async function _BetaToolRunner_checkAndCompact() {
|
|
79
|
+
const compactionControl = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.compactionControl;
|
|
80
|
+
if (!compactionControl || !compactionControl.enabled) {
|
|
79
81
|
return false;
|
|
80
82
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (messages[messages.length - 1].role === 'assistant') {
|
|
90
|
-
// Remove tool_use blocks from the last message to avoid 400 error
|
|
91
|
-
// (tool_use requires tool_result, which we don't have yet)
|
|
92
|
-
const lastMessage = messages[messages.length - 1];
|
|
93
|
-
if (Array.isArray(lastMessage.content)) {
|
|
94
|
-
const nonToolBlocks = lastMessage.content.filter((block) => block.type !== 'tool_use');
|
|
95
|
-
if (nonToolBlocks.length === 0) {
|
|
96
|
-
// If all blocks were tool_use, just remove the message entirely
|
|
97
|
-
messages.pop();
|
|
83
|
+
let tokensUsed = 0;
|
|
84
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_message, "f") !== undefined) {
|
|
85
|
+
try {
|
|
86
|
+
const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
|
|
87
|
+
const totalInputTokens = message.usage.input_tokens +
|
|
88
|
+
(message.usage.cache_creation_input_tokens ?? 0) +
|
|
89
|
+
(message.usage.cache_read_input_tokens ?? 0);
|
|
90
|
+
tokensUsed = totalInputTokens + message.usage.output_tokens;
|
|
98
91
|
}
|
|
99
|
-
|
|
100
|
-
|
|
92
|
+
catch {
|
|
93
|
+
// If we can't get the message, skip compaction
|
|
94
|
+
return false;
|
|
101
95
|
}
|
|
102
96
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}, {
|
|
120
|
-
signal: __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal,
|
|
121
|
-
headers: buildHeaders([__classPrivateFieldGet(this, _BetaToolRunner_options, "f").headers, helperHeader('compaction')]),
|
|
122
|
-
});
|
|
123
|
-
if (response.content[0]?.type !== 'text') {
|
|
124
|
-
throw new AnthropicError('Expected text response for compaction');
|
|
125
|
-
}
|
|
126
|
-
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [
|
|
127
|
-
{
|
|
128
|
-
role: 'user',
|
|
129
|
-
content: response.content,
|
|
130
|
-
},
|
|
131
|
-
];
|
|
132
|
-
return true;
|
|
133
|
-
}, Symbol.asyncIterator)]() {
|
|
134
|
-
var _a;
|
|
135
|
-
if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
|
|
136
|
-
throw new AnthropicError('Cannot iterate over a consumed stream');
|
|
137
|
-
}
|
|
138
|
-
__classPrivateFieldSet(this, _BetaToolRunner_consumed, true, "f");
|
|
139
|
-
__classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
|
|
140
|
-
__classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
|
|
141
|
-
try {
|
|
142
|
-
while (true) {
|
|
143
|
-
let stream;
|
|
144
|
-
try {
|
|
145
|
-
if (__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations &&
|
|
146
|
-
__classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations) {
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
149
|
-
__classPrivateFieldSet(this, _BetaToolRunner_mutated, false, "f");
|
|
150
|
-
__classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
|
|
151
|
-
__classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f"), _a++, _a), "f");
|
|
152
|
-
__classPrivateFieldSet(this, _BetaToolRunner_message, undefined, "f");
|
|
153
|
-
const { max_iterations, compactionControl, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
|
|
154
|
-
if (params.stream) {
|
|
155
|
-
stream = this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f"));
|
|
156
|
-
__classPrivateFieldSet(this, _BetaToolRunner_message, stream.finalMessage(), "f");
|
|
157
|
-
// Make sure that this promise doesn't throw before we get the option to do something about it.
|
|
158
|
-
// Error will be caught when we call await this.#message ultimately
|
|
159
|
-
__classPrivateFieldGet(this, _BetaToolRunner_message, "f").catch(() => { });
|
|
160
|
-
yield stream;
|
|
97
|
+
const threshold = compactionControl.contextTokenThreshold ?? DEFAULT_TOKEN_THRESHOLD;
|
|
98
|
+
if (tokensUsed < threshold) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const model = compactionControl.model ?? __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.model;
|
|
102
|
+
const summaryPrompt = compactionControl.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;
|
|
103
|
+
const messages = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages;
|
|
104
|
+
if (messages[messages.length - 1].role === 'assistant') {
|
|
105
|
+
// Remove tool_use blocks from the last message to avoid 400 error
|
|
106
|
+
// (tool_use requires tool_result, which we don't have yet)
|
|
107
|
+
const lastMessage = messages[messages.length - 1];
|
|
108
|
+
if (Array.isArray(lastMessage.content)) {
|
|
109
|
+
const nonToolBlocks = lastMessage.content.filter((block) => block.type !== 'tool_use');
|
|
110
|
+
if (nonToolBlocks.length === 0) {
|
|
111
|
+
// If all blocks were tool_use, just remove the message entirely
|
|
112
|
+
messages.pop();
|
|
161
113
|
}
|
|
162
114
|
else {
|
|
163
|
-
|
|
164
|
-
yield __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
|
|
115
|
+
lastMessage.content = nonToolBlocks;
|
|
165
116
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const response = await this.client.beta.messages.create({
|
|
120
|
+
model,
|
|
121
|
+
messages: [
|
|
122
|
+
...messages,
|
|
123
|
+
{
|
|
124
|
+
role: 'user',
|
|
125
|
+
content: [
|
|
126
|
+
{
|
|
127
|
+
type: 'text',
|
|
128
|
+
text: summaryPrompt,
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
max_tokens: __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_tokens,
|
|
134
|
+
}, {
|
|
135
|
+
signal: __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal,
|
|
136
|
+
headers: buildHeaders([__classPrivateFieldGet(this, _BetaToolRunner_options, "f").headers, helperHeader('compaction')]),
|
|
137
|
+
});
|
|
138
|
+
if (response.content[0]?.type !== 'text') {
|
|
139
|
+
throw new AnthropicError('Expected text response for compaction');
|
|
140
|
+
}
|
|
141
|
+
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [
|
|
142
|
+
{
|
|
143
|
+
role: 'user',
|
|
144
|
+
content: response.content,
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
return true;
|
|
148
|
+
}, Symbol.asyncIterator)]() {
|
|
149
|
+
var _a;
|
|
150
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
|
|
151
|
+
throw new AnthropicError('Cannot iterate over a consumed stream');
|
|
152
|
+
}
|
|
153
|
+
__classPrivateFieldSet(this, _BetaToolRunner_consumed, true, "f");
|
|
154
|
+
__classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
|
|
155
|
+
__classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
|
|
156
|
+
try {
|
|
157
|
+
while (true) {
|
|
158
|
+
try {
|
|
159
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations &&
|
|
160
|
+
__classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations) {
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
// The API can't compact a conversation that ends mid-turn, so a paused turn is resumed first.
|
|
164
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === 'scheduled' && !__classPrivateFieldGet(this, _BetaToolRunner_turnPaused, "f")) {
|
|
165
|
+
yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
__classPrivateFieldSet(this, _BetaToolRunner_mutated, false, "f");
|
|
169
|
+
__classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
|
|
170
|
+
__classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f"), _a++, _a), "f");
|
|
171
|
+
__classPrivateFieldSet(this, _BetaToolRunner_message, undefined, "f");
|
|
172
|
+
const { max_iterations, compactionControl, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
|
|
173
|
+
yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, params);
|
|
174
|
+
const isCompacted = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_checkAndCompact).call(this);
|
|
175
|
+
if (!isCompacted) {
|
|
176
|
+
if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
|
|
177
|
+
const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
|
|
178
|
+
const nextStep = determineNextStepFromStopReason(message.stop_reason);
|
|
179
|
+
__classPrivateFieldSet(this, _BetaToolRunner_turnPaused, nextStep === 'resume', "f");
|
|
180
|
+
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push({ role: message.role, content: message.content });
|
|
181
|
+
// Container-bound server tools reject a follow-up request that omits the container the
|
|
182
|
+
// previous turn ran in, so carry its id forward unless the caller pinned one themselves.
|
|
183
|
+
const { container } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
|
|
184
|
+
if (message.container) {
|
|
185
|
+
if (container == null) {
|
|
186
|
+
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = message.container.id;
|
|
187
|
+
}
|
|
188
|
+
else if (typeof container === 'object' && container.id == null) {
|
|
189
|
+
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = { ...container, id: message.container.id };
|
|
190
|
+
}
|
|
178
191
|
}
|
|
179
|
-
|
|
180
|
-
__classPrivateFieldGet(this,
|
|
192
|
+
if (nextStep === 'stop') {
|
|
193
|
+
yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
if (nextStep === 'resume') {
|
|
197
|
+
continue;
|
|
181
198
|
}
|
|
182
199
|
}
|
|
183
|
-
|
|
184
|
-
|
|
200
|
+
else {
|
|
201
|
+
// The caller has taken over the history, so the last response no longer says how it ends.
|
|
202
|
+
__classPrivateFieldSet(this, _BetaToolRunner_turnPaused, false, "f");
|
|
185
203
|
}
|
|
186
|
-
|
|
187
|
-
|
|
204
|
+
const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1));
|
|
205
|
+
if (toolMessage) {
|
|
206
|
+
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage);
|
|
207
|
+
}
|
|
208
|
+
else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
|
|
209
|
+
yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this);
|
|
210
|
+
break;
|
|
188
211
|
}
|
|
189
|
-
}
|
|
190
|
-
const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1));
|
|
191
|
-
if (toolMessage) {
|
|
192
|
-
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage);
|
|
193
|
-
}
|
|
194
|
-
else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
|
|
195
|
-
break;
|
|
196
212
|
}
|
|
197
213
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
stream.abort();
|
|
214
|
+
finally {
|
|
215
|
+
__classPrivateFieldGet(this, _BetaToolRunner_stream, "f")?.abort();
|
|
216
|
+
__classPrivateFieldSet(this, _BetaToolRunner_stream, undefined, "f");
|
|
202
217
|
}
|
|
203
218
|
}
|
|
219
|
+
if (!__classPrivateFieldGet(this, _BetaToolRunner_message, "f")) {
|
|
220
|
+
throw new AnthropicError('ToolRunner concluded without a message from the server');
|
|
221
|
+
}
|
|
222
|
+
__classPrivateFieldGet(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"));
|
|
204
223
|
}
|
|
205
|
-
|
|
206
|
-
|
|
224
|
+
catch (error) {
|
|
225
|
+
__classPrivateFieldSet(this, _BetaToolRunner_consumed, false, "f");
|
|
226
|
+
// Silence unhandled promise errors
|
|
227
|
+
__classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise.catch(() => { });
|
|
228
|
+
__classPrivateFieldGet(this, _BetaToolRunner_completion, "f").reject(error);
|
|
229
|
+
__classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
|
|
230
|
+
throw error;
|
|
207
231
|
}
|
|
208
|
-
__classPrivateFieldGet(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"));
|
|
209
232
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
__classPrivateFieldGet(this,
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
233
|
+
setMessagesParams(paramsOrMutator) {
|
|
234
|
+
const params = typeof paramsOrMutator === 'function' ? paramsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params) : paramsOrMutator;
|
|
235
|
+
rejectCompactionParam(params);
|
|
236
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== 'idle') {
|
|
237
|
+
rejectCompactionEdit(params);
|
|
238
|
+
}
|
|
239
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === 'in_flight' && params.messages !== __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages) {
|
|
240
|
+
throw new AnthropicError("Message params can't be changed while the conversation is being compacted, because the compaction " +
|
|
241
|
+
'response is about to replace them. Change them after this iteration instead.');
|
|
242
|
+
}
|
|
243
|
+
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = params;
|
|
244
|
+
__classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
|
|
245
|
+
// Invalidate cached tool response since parameters changed
|
|
246
|
+
__classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
|
|
217
247
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
248
|
+
setRequestOptions(optionsOrMutator) {
|
|
249
|
+
if (typeof optionsOrMutator === 'function') {
|
|
250
|
+
__classPrivateFieldSet(this, _BetaToolRunner_options, optionsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
__classPrivateFieldSet(this, _BetaToolRunner_options, { ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"), ...optionsOrMutator }, "f");
|
|
254
|
+
}
|
|
222
255
|
}
|
|
223
|
-
|
|
224
|
-
|
|
256
|
+
/**
|
|
257
|
+
* Get the tool response for the last message from the assistant.
|
|
258
|
+
* Avoids redundant tool executions by caching results.
|
|
259
|
+
*
|
|
260
|
+
* @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* const toolResponse = await runner.generateToolResponse();
|
|
264
|
+
* if (toolResponse) {
|
|
265
|
+
* console.log('Tool results:', toolResponse.content);
|
|
266
|
+
* }
|
|
267
|
+
*/
|
|
268
|
+
async generateToolResponse(signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) {
|
|
269
|
+
const message = (await __classPrivateFieldGet(this, _BetaToolRunner_message, "f")) ?? this.params.messages.at(-1);
|
|
270
|
+
if (!message) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
return __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message, signal);
|
|
225
274
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
275
|
+
/**
|
|
276
|
+
* Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and
|
|
277
|
+
* will wait for an instance to start and go to completion.
|
|
278
|
+
*
|
|
279
|
+
* @returns A promise that resolves to the final BetaMessage when the iterator completes
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* // Start consuming the iterator
|
|
283
|
+
* for await (const message of runner) {
|
|
284
|
+
* console.log('Message:', message.content);
|
|
285
|
+
* }
|
|
286
|
+
*
|
|
287
|
+
* // Meanwhile, wait for completion from another part of the code
|
|
288
|
+
* const finalMessage = await runner.done();
|
|
289
|
+
* console.log('Final response:', finalMessage.content);
|
|
290
|
+
*/
|
|
291
|
+
done() {
|
|
292
|
+
return __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise;
|
|
233
293
|
}
|
|
234
|
-
|
|
235
|
-
|
|
294
|
+
/**
|
|
295
|
+
* Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream:
|
|
296
|
+
* * If the iterator has not been consumed, consume the entire iterator and return the final message from the
|
|
297
|
+
* assistant.
|
|
298
|
+
* * If the iterator has been consumed, waits for it to complete and returns the final message.
|
|
299
|
+
*
|
|
300
|
+
* @returns A promise that resolves to the final BetaMessage from the conversation
|
|
301
|
+
* @throws {AnthropicError} If no messages were processed during the conversation
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* const finalMessage = await runner.runUntilDone();
|
|
305
|
+
* console.log('Final response:', finalMessage.content);
|
|
306
|
+
*/
|
|
307
|
+
async runUntilDone() {
|
|
308
|
+
// If not yet consumed, start consuming and wait for completion
|
|
309
|
+
if (!__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
|
|
310
|
+
for await (const _ of this) {
|
|
311
|
+
// Iterator naturally populates this.#message
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// If consumed but not completed, wait for completion
|
|
315
|
+
return this.done();
|
|
236
316
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
*/
|
|
250
|
-
async generateToolResponse(signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) {
|
|
251
|
-
const message = (await __classPrivateFieldGet(this, _BetaToolRunner_message, "f")) ?? this.params.messages.at(-1);
|
|
252
|
-
if (!message) {
|
|
253
|
-
return null;
|
|
317
|
+
/**
|
|
318
|
+
* Get the current parameters being used by the ToolRunner.
|
|
319
|
+
*
|
|
320
|
+
* @returns A readonly view of the current ToolRunnerParams
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* const currentParams = runner.params;
|
|
324
|
+
* console.log('Current model:', currentParams.model);
|
|
325
|
+
* console.log('Message count:', currentParams.messages.length);
|
|
326
|
+
*/
|
|
327
|
+
get params() {
|
|
328
|
+
return __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
|
|
254
329
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
330
|
+
/**
|
|
331
|
+
* Add one or more messages to the conversation history.
|
|
332
|
+
*
|
|
333
|
+
* @param messages - One or more BetaMessageParam objects to add to the conversation
|
|
334
|
+
*
|
|
335
|
+
* @example
|
|
336
|
+
* runner.pushMessages(
|
|
337
|
+
* { role: 'user', content: 'Also, what about the weather in NYC?' }
|
|
338
|
+
* );
|
|
339
|
+
*
|
|
340
|
+
* @example
|
|
341
|
+
* // Adding multiple messages
|
|
342
|
+
* runner.pushMessages(
|
|
343
|
+
* { role: 'user', content: 'What about NYC?' },
|
|
344
|
+
* { role: 'user', content: 'And Boston?' }
|
|
345
|
+
* );
|
|
346
|
+
*/
|
|
347
|
+
pushMessages(...messages) {
|
|
348
|
+
this.setMessagesParams((params) => ({
|
|
349
|
+
...params,
|
|
350
|
+
messages: [...params.messages, ...messages],
|
|
351
|
+
}));
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Schedule a compaction of the conversation. Once the current turn has finished, including any tool
|
|
355
|
+
* calls, the runner requests a summary and replaces the message history with the compaction response,
|
|
356
|
+
* which is yielded like any other message. Requires the `compact-2026-09-04` beta.
|
|
357
|
+
*
|
|
358
|
+
* @param compaction - The config to send, as `messages.create()` takes it. Defaults to `{ type: 'summarize' }`
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* for await (const message of runner) {
|
|
362
|
+
* if (message.usage.input_tokens > 100_000) {
|
|
363
|
+
* runner.compactBeforeNextTurn();
|
|
364
|
+
* }
|
|
365
|
+
* }
|
|
366
|
+
*/
|
|
367
|
+
compactBeforeNextTurn(compaction) {
|
|
368
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === 'in_flight') {
|
|
369
|
+
return;
|
|
294
370
|
}
|
|
371
|
+
rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params);
|
|
372
|
+
__classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'scheduled', config: compaction ?? { type: 'summarize' } }, "f");
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone()
|
|
376
|
+
* This allows using `await runner` instead of `await runner.runUntilDone()`
|
|
377
|
+
*/
|
|
378
|
+
then(onfulfilled, onrejected) {
|
|
379
|
+
return this.runUntilDone().then(onfulfilled, onrejected);
|
|
295
380
|
}
|
|
296
|
-
// If consumed but not completed, wait for completion
|
|
297
|
-
return this.done();
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Get the current parameters being used by the ToolRunner.
|
|
301
|
-
*
|
|
302
|
-
* @returns A readonly view of the current ToolRunnerParams
|
|
303
|
-
*
|
|
304
|
-
* @example
|
|
305
|
-
* const currentParams = runner.params;
|
|
306
|
-
* console.log('Current model:', currentParams.model);
|
|
307
|
-
* console.log('Message count:', currentParams.messages.length);
|
|
308
|
-
*/
|
|
309
|
-
get params() {
|
|
310
|
-
return __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Add one or more messages to the conversation history.
|
|
314
|
-
*
|
|
315
|
-
* @param messages - One or more BetaMessageParam objects to add to the conversation
|
|
316
|
-
*
|
|
317
|
-
* @example
|
|
318
|
-
* runner.pushMessages(
|
|
319
|
-
* { role: 'user', content: 'Also, what about the weather in NYC?' }
|
|
320
|
-
* );
|
|
321
|
-
*
|
|
322
|
-
* @example
|
|
323
|
-
* // Adding multiple messages
|
|
324
|
-
* runner.pushMessages(
|
|
325
|
-
* { role: 'user', content: 'What about NYC?' },
|
|
326
|
-
* { role: 'user', content: 'And Boston?' }
|
|
327
|
-
* );
|
|
328
|
-
*/
|
|
329
|
-
pushMessages(...messages) {
|
|
330
|
-
this.setMessagesParams((params) => ({
|
|
331
|
-
...params,
|
|
332
|
-
messages: [...params.messages, ...messages],
|
|
333
|
-
}));
|
|
334
381
|
}
|
|
382
|
+
_BetaToolRunner_send =
|
|
335
383
|
/**
|
|
336
|
-
*
|
|
337
|
-
*
|
|
384
|
+
* Sends one request and yields its message, or its stream when streaming. `#message` and `#stream` are set
|
|
385
|
+
* before the yield, so they are there while the caller handles the item; the loop aborts the stream at the
|
|
386
|
+
* end of the iteration.
|
|
338
387
|
*/
|
|
339
|
-
|
|
340
|
-
|
|
388
|
+
async function* _BetaToolRunner_send(params) {
|
|
389
|
+
if (params.stream) {
|
|
390
|
+
__classPrivateFieldSet(this, _BetaToolRunner_stream, this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
|
|
391
|
+
__classPrivateFieldSet(this, _BetaToolRunner_message, __classPrivateFieldGet(this, _BetaToolRunner_stream, "f").finalMessage(), "f");
|
|
392
|
+
// Make sure that this promise doesn't throw before we get the option to do something about it.
|
|
393
|
+
// Error will be caught when we call await this.#message ultimately
|
|
394
|
+
__classPrivateFieldGet(this, _BetaToolRunner_message, "f").catch(() => { });
|
|
395
|
+
yield __classPrivateFieldGet(this, _BetaToolRunner_stream, "f");
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
__classPrivateFieldSet(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
|
|
399
|
+
yield __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
|
|
400
|
+
}
|
|
401
|
+
}, _BetaToolRunner_compact = async function* _BetaToolRunner_compact(compaction) {
|
|
402
|
+
rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params);
|
|
403
|
+
// The API refuses `compaction` alongside `context_management`; later requests keep it.
|
|
404
|
+
const { max_iterations, compactionControl, context_management, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
|
|
405
|
+
__classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'in_flight' }, "f");
|
|
406
|
+
__classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, "f");
|
|
407
|
+
const lastMessage = __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
|
|
408
|
+
try {
|
|
409
|
+
yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, { ...params, compaction });
|
|
410
|
+
const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
|
|
411
|
+
if (message.content.some((block) => block.type === 'compaction' && block.content)) {
|
|
412
|
+
// The response has to be sent back as it came, first, replacing the messages it summarizes.
|
|
413
|
+
__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [{ role: message.role, content: message.content }];
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
loggerFor(this.client).warn('Compaction produced no summary; keeping the conversation as it is.');
|
|
417
|
+
// If the run ends here, `done()` resolves to the last real message rather than this response.
|
|
418
|
+
__classPrivateFieldSet(this, _BetaToolRunner_message, lastMessage, "f");
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
finally {
|
|
422
|
+
__classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'idle' }, "f");
|
|
423
|
+
}
|
|
424
|
+
}, _BetaToolRunner_compactAfterFinalTurn = async function* _BetaToolRunner_compactAfterFinalTurn() {
|
|
425
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== 'scheduled') {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
const lastContent = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1)?.content;
|
|
429
|
+
if (Array.isArray(lastContent) && lastContent.some((block) => block.type === 'tool_use')) {
|
|
430
|
+
// A turn that was cut short can end with tool calls that are never run, and the API can't
|
|
431
|
+
// compact a conversation whose last turn has an unanswered tool call.
|
|
432
|
+
loggerFor(this.client).warn('The pending compaction was skipped because the last turn ended with tool calls that were not run. ' +
|
|
433
|
+
'Call `compactBeforeNextTurn()` again if you continue the conversation.');
|
|
434
|
+
__classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: 'idle' }, "f");
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config);
|
|
438
|
+
}, _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse(lastMessage, signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) {
|
|
439
|
+
if (__classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f") !== undefined) {
|
|
440
|
+
return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
|
|
441
|
+
}
|
|
442
|
+
__classPrivateFieldSet(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params, lastMessage, {
|
|
443
|
+
...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"),
|
|
444
|
+
signal,
|
|
445
|
+
}), "f");
|
|
446
|
+
return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
|
|
447
|
+
};
|
|
448
|
+
return BetaToolRunner;
|
|
449
|
+
})();
|
|
450
|
+
function rejectCompactionParam(params) {
|
|
451
|
+
if ('compaction' in params && params.compaction != null) {
|
|
452
|
+
throw new AnthropicError('`compaction` cannot be set on a tool runner: every request in the loop would compact again. ' +
|
|
453
|
+
'Call `runner.compactBeforeNextTurn()` when the conversation should be compacted instead.');
|
|
341
454
|
}
|
|
342
455
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
456
|
+
function rejectCompactionEdit(params) {
|
|
457
|
+
// The compaction request is sent without `context_management`, so the API can't refuse the pair there:
|
|
458
|
+
// it would run and bill the compaction, then refuse the next request.
|
|
459
|
+
if (params.context_management?.edits?.some((edit) => edit.type.startsWith('compact_'))) {
|
|
460
|
+
throw new AnthropicError("`compactBeforeNextTurn()` can't be used while `context_management` has a compaction edit, " +
|
|
461
|
+
"because the API doesn't accept a compaction block together with one. Remove the edit first.");
|
|
346
462
|
}
|
|
347
|
-
|
|
348
|
-
...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"),
|
|
349
|
-
signal,
|
|
350
|
-
}), "f");
|
|
351
|
-
return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
|
|
352
|
-
};
|
|
463
|
+
}
|
|
353
464
|
async function generateToolResponse(params, lastMessage = params.messages.at(-1), requestOptions) {
|
|
354
465
|
// Only process if the last message is from the assistant and has tool use blocks
|
|
355
466
|
if (!lastMessage ||
|