@puku-ai/sdk 4.0.0 → 4.0.2
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/README.md +29 -10
- package/dist/index.d.ts +26 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/vendor/_vendor/partial-json-parser/parser.d.ts +2 -0
- package/dist/vendor/_vendor/partial-json-parser/parser.js +223 -0
- package/dist/vendor/_vendor/partial-json-parser/parser.js.map +1 -0
- package/dist/vendor/api-promise.d.ts +2 -0
- package/dist/vendor/api-promise.js +3 -0
- package/dist/vendor/api-promise.js.map +1 -0
- package/dist/vendor/client.d.ts +399 -0
- package/dist/vendor/client.js +976 -0
- package/dist/vendor/client.js.map +1 -0
- package/dist/vendor/core/api-promise.d.ts +49 -0
- package/dist/vendor/core/api-promise.js +77 -0
- package/dist/vendor/core/api-promise.js.map +1 -0
- package/dist/vendor/core/api.d.ts +10 -0
- package/dist/vendor/core/api.js +2 -0
- package/dist/vendor/core/api.js.map +1 -0
- package/dist/vendor/core/credentials.d.ts +130 -0
- package/dist/vendor/core/credentials.js +274 -0
- package/dist/vendor/core/credentials.js.map +1 -0
- package/dist/vendor/core/error.d.ts +82 -0
- package/dist/vendor/core/error.js +140 -0
- package/dist/vendor/core/error.js.map +1 -0
- package/dist/vendor/core/middleware.d.ts +153 -0
- package/dist/vendor/core/middleware.js +168 -0
- package/dist/vendor/core/middleware.js.map +1 -0
- package/dist/vendor/core/pagination.d.ts +121 -0
- package/dist/vendor/core/pagination.js +207 -0
- package/dist/vendor/core/pagination.js.map +1 -0
- package/dist/vendor/core/resource.d.ts +5 -0
- package/dist/vendor/core/resource.js +8 -0
- package/dist/vendor/core/resource.js.map +1 -0
- package/dist/vendor/core/streaming.d.ts +41 -0
- package/dist/vendor/core/streaming.js +342 -0
- package/dist/vendor/core/streaming.js.map +1 -0
- package/dist/vendor/core/uploads.d.ts +2 -0
- package/dist/vendor/core/uploads.js +2 -0
- package/dist/vendor/core/uploads.js.map +1 -0
- package/dist/vendor/error.d.ts +2 -0
- package/dist/vendor/error.js +3 -0
- package/dist/vendor/error.js.map +1 -0
- package/dist/vendor/helpers/beta/environments.d.ts +22 -0
- package/dist/vendor/helpers/beta/environments.js +23 -0
- package/dist/vendor/helpers/beta/environments.js.map +1 -0
- package/dist/vendor/helpers/beta/json-schema.d.ts +36 -0
- package/dist/vendor/helpers/beta/json-schema.js +53 -0
- package/dist/vendor/helpers/beta/json-schema.js.map +1 -0
- package/dist/vendor/helpers/beta/mcp.d.ts +302 -0
- package/dist/vendor/helpers/beta/mcp.js +406 -0
- package/dist/vendor/helpers/beta/mcp.js.map +1 -0
- package/dist/vendor/helpers/beta/memory.d.ts +10 -0
- package/dist/vendor/helpers/beta/memory.js +15 -0
- package/dist/vendor/helpers/beta/memory.js.map +1 -0
- package/dist/vendor/helpers/beta/standard-schema.d.ts +44 -0
- package/dist/vendor/helpers/beta/standard-schema.js +54 -0
- package/dist/vendor/helpers/beta/standard-schema.js.map +1 -0
- package/dist/vendor/helpers/beta/zod.d.ts +32 -0
- package/dist/vendor/helpers/beta/zod.js +52 -0
- package/dist/vendor/helpers/beta/zod.js.map +1 -0
- package/dist/vendor/helpers/index.d.ts +2 -0
- package/dist/vendor/helpers/index.js +3 -0
- package/dist/vendor/helpers/index.js.map +1 -0
- package/dist/vendor/helpers/json-schema.d.ts +17 -0
- package/dist/vendor/helpers/json-schema.js +34 -0
- package/dist/vendor/helpers/json-schema.js.map +1 -0
- package/dist/vendor/helpers/zod.d.ts +12 -0
- package/dist/vendor/helpers/zod.js +42 -0
- package/dist/vendor/helpers/zod.js.map +1 -0
- package/dist/vendor/index.d.ts +16 -0
- package/dist/vendor/index.js +23 -0
- package/dist/vendor/index.js.map +1 -0
- package/dist/vendor/internal/builtin-types.d.ts +72 -0
- package/dist/vendor/internal/builtin-types.js +3 -0
- package/dist/vendor/internal/builtin-types.js.map +1 -0
- package/dist/vendor/internal/constants.d.ts +4 -0
- package/dist/vendor/internal/constants.js +10 -0
- package/dist/vendor/internal/constants.js.map +1 -0
- package/dist/vendor/internal/decoders/jsonl.d.ts +9 -0
- package/dist/vendor/internal/decoders/jsonl.js +37 -0
- package/dist/vendor/internal/decoders/jsonl.js.map +1 -0
- package/dist/vendor/internal/decoders/line.d.ts +16 -0
- package/dist/vendor/internal/decoders/line.js +105 -0
- package/dist/vendor/internal/decoders/line.js.map +1 -0
- package/dist/vendor/internal/detect-platform.d.ts +14 -0
- package/dist/vendor/internal/detect-platform.js +155 -0
- package/dist/vendor/internal/detect-platform.js.map +1 -0
- package/dist/vendor/internal/errors.d.ts +2 -0
- package/dist/vendor/internal/errors.js +38 -0
- package/dist/vendor/internal/errors.js.map +1 -0
- package/dist/vendor/internal/file-store.d.ts +135 -0
- package/dist/vendor/internal/file-store.js +529 -0
- package/dist/vendor/internal/file-store.js.map +1 -0
- package/dist/vendor/internal/headers.d.ts +28 -0
- package/dist/vendor/internal/headers.js +114 -0
- package/dist/vendor/internal/headers.js.map +1 -0
- package/dist/vendor/internal/message-stream-utils.d.ts +9 -0
- package/dist/vendor/internal/message-stream-utils.js +30 -0
- package/dist/vendor/internal/message-stream-utils.js.map +1 -0
- package/dist/vendor/internal/node.browser.d.ts +8 -0
- package/dist/vendor/internal/node.browser.js +19 -0
- package/dist/vendor/internal/node.browser.js.map +1 -0
- package/dist/vendor/internal/node.d.ts +13 -0
- package/dist/vendor/internal/node.js +14 -0
- package/dist/vendor/internal/node.js.map +1 -0
- package/dist/vendor/internal/parse.d.ts +17 -0
- package/dist/vendor/internal/parse.js +62 -0
- package/dist/vendor/internal/parse.js.map +1 -0
- package/dist/vendor/internal/qs/formats.d.ts +6 -0
- package/dist/vendor/internal/qs/formats.js +9 -0
- package/dist/vendor/internal/qs/formats.js.map +1 -0
- package/dist/vendor/internal/qs/index.d.ts +9 -0
- package/dist/vendor/internal/qs/index.js +10 -0
- package/dist/vendor/internal/qs/index.js.map +1 -0
- package/dist/vendor/internal/qs/stringify.d.ts +2 -0
- package/dist/vendor/internal/qs/stringify.js +274 -0
- package/dist/vendor/internal/qs/stringify.js.map +1 -0
- package/dist/vendor/internal/qs/types.d.ts +56 -0
- package/dist/vendor/internal/qs/types.js +2 -0
- package/dist/vendor/internal/qs/types.js.map +1 -0
- package/dist/vendor/internal/qs/utils.d.ts +14 -0
- package/dist/vendor/internal/qs/utils.js +217 -0
- package/dist/vendor/internal/qs/utils.js.map +1 -0
- package/dist/vendor/internal/request-options.d.ts +126 -0
- package/dist/vendor/internal/request-options.js +27 -0
- package/dist/vendor/internal/request-options.js.map +1 -0
- package/dist/vendor/internal/request-signal.d.ts +3 -0
- package/dist/vendor/internal/request-signal.js +45 -0
- package/dist/vendor/internal/request-signal.js.map +1 -0
- package/dist/vendor/internal/shim-types.d.ts +16 -0
- package/dist/vendor/internal/shim-types.js +3 -0
- package/dist/vendor/internal/shim-types.js.map +1 -0
- package/dist/vendor/internal/shims.d.ts +25 -0
- package/dist/vendor/internal/shims.js +85 -0
- package/dist/vendor/internal/shims.js.map +1 -0
- package/dist/vendor/internal/stainless-helper-header.d.ts +59 -0
- package/dist/vendor/internal/stainless-helper-header.js +83 -0
- package/dist/vendor/internal/stainless-helper-header.js.map +1 -0
- package/dist/vendor/internal/stream-utils.d.ts +7 -0
- package/dist/vendor/internal/stream-utils.js +35 -0
- package/dist/vendor/internal/stream-utils.js.map +1 -0
- package/dist/vendor/internal/to-file.d.ts +44 -0
- package/dist/vendor/internal/to-file.js +93 -0
- package/dist/vendor/internal/to-file.js.map +1 -0
- package/dist/vendor/internal/types.d.ts +62 -0
- package/dist/vendor/internal/types.js +3 -0
- package/dist/vendor/internal/types.js.map +1 -0
- package/dist/vendor/internal/uploads.d.ts +41 -0
- package/dist/vendor/internal/uploads.js +139 -0
- package/dist/vendor/internal/uploads.js.map +1 -0
- package/dist/vendor/internal/utils/abort.d.ts +11 -0
- package/dist/vendor/internal/utils/abort.js +22 -0
- package/dist/vendor/internal/utils/abort.js.map +1 -0
- package/dist/vendor/internal/utils/async-queue.d.ts +30 -0
- package/dist/vendor/internal/utils/async-queue.js +66 -0
- package/dist/vendor/internal/utils/async-queue.js.map +1 -0
- package/dist/vendor/internal/utils/backoff.d.ts +22 -0
- package/dist/vendor/internal/utils/backoff.js +36 -0
- package/dist/vendor/internal/utils/backoff.js.map +1 -0
- package/dist/vendor/internal/utils/base64.d.ts +2 -0
- package/dist/vendor/internal/utils/base64.js +33 -0
- package/dist/vendor/internal/utils/base64.js.map +1 -0
- package/dist/vendor/internal/utils/bytes.d.ts +3 -0
- package/dist/vendor/internal/utils/bytes.js +26 -0
- package/dist/vendor/internal/utils/bytes.js.map +1 -0
- package/dist/vendor/internal/utils/env.d.ts +8 -0
- package/dist/vendor/internal/utils/env.js +18 -0
- package/dist/vendor/internal/utils/env.js.map +1 -0
- package/dist/vendor/internal/utils/log.d.ts +46 -0
- package/dist/vendor/internal/utils/log.js +105 -0
- package/dist/vendor/internal/utils/log.js.map +1 -0
- package/dist/vendor/internal/utils/path.d.ts +14 -0
- package/dist/vendor/internal/utils/path.js +74 -0
- package/dist/vendor/internal/utils/path.js.map +1 -0
- package/dist/vendor/internal/utils/promise.d.ts +10 -0
- package/dist/vendor/internal/utils/promise.js +15 -0
- package/dist/vendor/internal/utils/promise.js.map +1 -0
- package/dist/vendor/internal/utils/query.d.ts +1 -0
- package/dist/vendor/internal/utils/query.js +6 -0
- package/dist/vendor/internal/utils/query.js.map +1 -0
- package/dist/vendor/internal/utils/sleep.d.ts +9 -0
- package/dist/vendor/internal/utils/sleep.js +24 -0
- package/dist/vendor/internal/utils/sleep.js.map +1 -0
- package/dist/vendor/internal/utils/time.d.ts +2 -0
- package/dist/vendor/internal/utils/time.js +5 -0
- package/dist/vendor/internal/utils/time.js.map +1 -0
- package/dist/vendor/internal/utils/uuid.d.ts +4 -0
- package/dist/vendor/internal/utils/uuid.js +15 -0
- package/dist/vendor/internal/utils/uuid.js.map +1 -0
- package/dist/vendor/internal/utils/values.d.ts +24 -0
- package/dist/vendor/internal/utils/values.js +106 -0
- package/dist/vendor/internal/utils/values.js.map +1 -0
- package/dist/vendor/internal/utils.d.ts +7 -0
- package/dist/vendor/internal/utils.js +9 -0
- package/dist/vendor/internal/utils.js.map +1 -0
- package/dist/vendor/lib/BetaMessageStream.d.ts +123 -0
- package/dist/vendor/lib/BetaMessageStream.js +662 -0
- package/dist/vendor/lib/BetaMessageStream.js.map +1 -0
- package/dist/vendor/lib/MessageStream.d.ts +122 -0
- package/dist/vendor/lib/MessageStream.js +609 -0
- package/dist/vendor/lib/MessageStream.js.map +1 -0
- package/dist/vendor/lib/beta-parser.d.ts +36 -0
- package/dist/vendor/lib/beta-parser.js +75 -0
- package/dist/vendor/lib/beta-parser.js.map +1 -0
- package/dist/vendor/lib/credentials/credential-chain.d.ts +38 -0
- package/dist/vendor/lib/credentials/credential-chain.js +208 -0
- package/dist/vendor/lib/credentials/credential-chain.js.map +1 -0
- package/dist/vendor/lib/credentials/identity-token.d.ts +10 -0
- package/dist/vendor/lib/credentials/identity-token.js +35 -0
- package/dist/vendor/lib/credentials/identity-token.js.map +1 -0
- package/dist/vendor/lib/credentials/oidc-federation.d.ts +39 -0
- package/dist/vendor/lib/credentials/oidc-federation.js +79 -0
- package/dist/vendor/lib/credentials/oidc-federation.js.map +1 -0
- package/dist/vendor/lib/credentials/token-cache.d.ts +53 -0
- package/dist/vendor/lib/credentials/token-cache.js +110 -0
- package/dist/vendor/lib/credentials/token-cache.js.map +1 -0
- package/dist/vendor/lib/credentials/types.d.ts +95 -0
- package/dist/vendor/lib/credentials/types.js +226 -0
- package/dist/vendor/lib/credentials/types.js.map +1 -0
- package/dist/vendor/lib/credentials/user-oauth.d.ts +20 -0
- package/dist/vendor/lib/credentials/user-oauth.js +94 -0
- package/dist/vendor/lib/credentials/user-oauth.js.map +1 -0
- package/dist/vendor/lib/credentials.d.ts +3 -0
- package/dist/vendor/lib/credentials.js +3 -0
- package/dist/vendor/lib/credentials.js.map +1 -0
- package/dist/vendor/lib/environments/index.d.ts +3 -0
- package/dist/vendor/lib/environments/index.js +4 -0
- package/dist/vendor/lib/environments/index.js.map +1 -0
- package/dist/vendor/lib/environments/poller.d.ts +94 -0
- package/dist/vendor/lib/environments/poller.js +218 -0
- package/dist/vendor/lib/environments/poller.js.map +1 -0
- package/dist/vendor/lib/environments/worker.d.ts +226 -0
- package/dist/vendor/lib/environments/worker.js +572 -0
- package/dist/vendor/lib/environments/worker.js.map +1 -0
- package/dist/vendor/lib/helper-client.d.ts +30 -0
- package/dist/vendor/lib/helper-client.js +55 -0
- package/dist/vendor/lib/helper-client.js.map +1 -0
- package/dist/vendor/lib/middleware.d.ts +97 -0
- package/dist/vendor/lib/middleware.js +775 -0
- package/dist/vendor/lib/middleware.js.map +1 -0
- package/dist/vendor/lib/parser.d.ts +31 -0
- package/dist/vendor/lib/parser.js +62 -0
- package/dist/vendor/lib/parser.js.map +1 -0
- package/dist/vendor/lib/sessions/accumulate.d.ts +22 -0
- package/dist/vendor/lib/sessions/accumulate.js +42 -0
- package/dist/vendor/lib/sessions/accumulate.js.map +1 -0
- package/dist/vendor/lib/standard-schema.d.ts +130 -0
- package/dist/vendor/lib/standard-schema.js +41 -0
- package/dist/vendor/lib/standard-schema.js.map +1 -0
- package/dist/vendor/lib/tools/BetaRunnableTool.d.ts +48 -0
- package/dist/vendor/lib/tools/BetaRunnableTool.js +26 -0
- package/dist/vendor/lib/tools/BetaRunnableTool.js.map +1 -0
- package/dist/vendor/lib/tools/BetaToolRunner.d.ts +160 -0
- package/dist/vendor/lib/tools/BetaToolRunner.js +497 -0
- package/dist/vendor/lib/tools/BetaToolRunner.js.map +1 -0
- package/dist/vendor/lib/tools/CompactionControl.d.ts +29 -0
- package/dist/vendor/lib/tools/CompactionControl.js +25 -0
- package/dist/vendor/lib/tools/CompactionControl.js.map +1 -0
- package/dist/vendor/lib/tools/SessionToolRunner.d.ts +178 -0
- package/dist/vendor/lib/tools/SessionToolRunner.js +737 -0
- package/dist/vendor/lib/tools/SessionToolRunner.js.map +1 -0
- package/dist/vendor/lib/tools/ToolError.d.ts +32 -0
- package/dist/vendor/lib/tools/ToolError.js +43 -0
- package/dist/vendor/lib/tools/ToolError.js.map +1 -0
- package/dist/vendor/lib/transform-json-schema.d.ts +2 -0
- package/dist/vendor/lib/transform-json-schema.js +111 -0
- package/dist/vendor/lib/transform-json-schema.js.map +1 -0
- package/dist/vendor/pagination.d.ts +2 -0
- package/dist/vendor/pagination.js +3 -0
- package/dist/vendor/pagination.js.map +1 -0
- package/dist/vendor/resource.d.ts +2 -0
- package/dist/vendor/resource.js +3 -0
- package/dist/vendor/resource.js.map +1 -0
- package/dist/vendor/resources/beta/agents/agents.d.ts +1128 -0
- package/dist/vendor/resources/beta/agents/agents.js +123 -0
- package/dist/vendor/resources/beta/agents/agents.js.map +1 -0
- package/dist/vendor/resources/beta/agents/index.d.ts +2 -0
- package/dist/vendor/resources/beta/agents/index.js +4 -0
- package/dist/vendor/resources/beta/agents/index.js.map +1 -0
- package/dist/vendor/resources/beta/agents/versions.d.ts +32 -0
- package/dist/vendor/resources/beta/agents/versions.js +32 -0
- package/dist/vendor/resources/beta/agents/versions.js.map +1 -0
- package/dist/vendor/resources/beta/agents.d.ts +1 -0
- package/dist/vendor/resources/beta/agents.js +3 -0
- package/dist/vendor/resources/beta/agents.js.map +1 -0
- package/dist/vendor/resources/beta/beta.d.ts +131 -0
- package/dist/vendor/resources/beta/beta.js +69 -0
- package/dist/vendor/resources/beta/beta.js.map +1 -0
- package/dist/vendor/resources/beta/deployment-runs.d.ts +305 -0
- package/dist/vendor/resources/beta/deployment-runs.js +51 -0
- package/dist/vendor/resources/beta/deployment-runs.js.map +1 -0
- package/dist/vendor/resources/beta/deployments.d.ts +698 -0
- package/dist/vendor/resources/beta/deployments.js +192 -0
- package/dist/vendor/resources/beta/deployments.js.map +1 -0
- package/dist/vendor/resources/beta/dreams.d.ts +335 -0
- package/dist/vendor/resources/beta/dreams.js +112 -0
- package/dist/vendor/resources/beta/dreams.js.map +1 -0
- package/dist/vendor/resources/beta/environments/environments.d.ts +432 -0
- package/dist/vendor/resources/beta/environments/environments.js +142 -0
- package/dist/vendor/resources/beta/environments/environments.js.map +1 -0
- package/dist/vendor/resources/beta/environments/index.d.ts +2 -0
- package/dist/vendor/resources/beta/environments/index.js +4 -0
- package/dist/vendor/resources/beta/environments/index.js.map +1 -0
- package/dist/vendor/resources/beta/environments/work.d.ts +500 -0
- package/dist/vendor/resources/beta/environments/work.js +251 -0
- package/dist/vendor/resources/beta/environments/work.js.map +1 -0
- package/dist/vendor/resources/beta/environments.d.ts +1 -0
- package/dist/vendor/resources/beta/environments.js +3 -0
- package/dist/vendor/resources/beta/environments.js.map +1 -0
- package/dist/vendor/resources/beta/files.d.ts +190 -0
- package/dist/vendor/resources/beta/files.js +120 -0
- package/dist/vendor/resources/beta/files.js.map +1 -0
- package/dist/vendor/resources/beta/index.d.ts +17 -0
- package/dist/vendor/resources/beta/index.js +19 -0
- package/dist/vendor/resources/beta/index.js.map +1 -0
- package/dist/vendor/resources/beta/memory-stores/index.d.ts +3 -0
- package/dist/vendor/resources/beta/memory-stores/index.js +5 -0
- package/dist/vendor/resources/beta/memory-stores/index.js.map +1 -0
- package/dist/vendor/resources/beta/memory-stores/memories.d.ts +346 -0
- package/dist/vendor/resources/beta/memory-stores/memories.js +126 -0
- package/dist/vendor/resources/beta/memory-stores/memories.js.map +1 -0
- package/dist/vendor/resources/beta/memory-stores/memory-stores.d.ts +230 -0
- package/dist/vendor/resources/beta/memory-stores/memory-stores.js +137 -0
- package/dist/vendor/resources/beta/memory-stores/memory-stores.js.map +1 -0
- package/dist/vendor/resources/beta/memory-stores/memory-versions.d.ts +252 -0
- package/dist/vendor/resources/beta/memory-stores/memory-versions.js +77 -0
- package/dist/vendor/resources/beta/memory-stores/memory-versions.js.map +1 -0
- package/dist/vendor/resources/beta/memory-stores.d.ts +1 -0
- package/dist/vendor/resources/beta/memory-stores.js +3 -0
- package/dist/vendor/resources/beta/memory-stores.js.map +1 -0
- package/dist/vendor/resources/beta/messages/batches.d.ts +685 -0
- package/dist/vendor/resources/beta/messages/batches.js +203 -0
- package/dist/vendor/resources/beta/messages/batches.js.map +1 -0
- package/dist/vendor/resources/beta/messages/index.d.ts +3 -0
- package/dist/vendor/resources/beta/messages/index.js +5 -0
- package/dist/vendor/resources/beta/messages/index.js.map +1 -0
- package/dist/vendor/resources/beta/messages/messages.d.ts +5376 -0
- package/dist/vendor/resources/beta/messages/messages.js +158 -0
- package/dist/vendor/resources/beta/messages/messages.js.map +1 -0
- package/dist/vendor/resources/beta/messages.d.ts +1 -0
- package/dist/vendor/resources/beta/messages.js +3 -0
- package/dist/vendor/resources/beta/messages.js.map +1 -0
- package/dist/vendor/resources/beta/models.d.ts +217 -0
- package/dist/vendor/resources/beta/models.js +56 -0
- package/dist/vendor/resources/beta/models.js.map +1 -0
- package/dist/vendor/resources/beta/organization/api-keys.d.ts +176 -0
- package/dist/vendor/resources/beta/organization/api-keys.js +52 -0
- package/dist/vendor/resources/beta/organization/api-keys.js.map +1 -0
- package/dist/vendor/resources/beta/organization/compliance-settings.d.ts +73 -0
- package/dist/vendor/resources/beta/organization/compliance-settings.js +48 -0
- package/dist/vendor/resources/beta/organization/compliance-settings.js.map +1 -0
- package/dist/vendor/resources/beta/organization/external-keys.d.ts +271 -0
- package/dist/vendor/resources/beta/organization/external-keys.js +115 -0
- package/dist/vendor/resources/beta/organization/external-keys.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation/federation.d.ts +13 -0
- package/dist/vendor/resources/beta/organization/federation/federation.js +13 -0
- package/dist/vendor/resources/beta/organization/federation/federation.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation/index.d.ts +3 -0
- package/dist/vendor/resources/beta/organization/federation/index.js +5 -0
- package/dist/vendor/resources/beta/organization/federation/index.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation/issuers.d.ts +352 -0
- package/dist/vendor/resources/beta/organization/federation/issuers.js +165 -0
- package/dist/vendor/resources/beta/organization/federation/issuers.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation/rules/index.d.ts +2 -0
- package/dist/vendor/resources/beta/organization/federation/rules/index.js +4 -0
- package/dist/vendor/resources/beta/organization/federation/rules/index.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation/rules/rules.d.ts +467 -0
- package/dist/vendor/resources/beta/organization/federation/rules/rules.js +190 -0
- package/dist/vendor/resources/beta/organization/federation/rules/rules.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation/rules/workspaces.d.ts +123 -0
- package/dist/vendor/resources/beta/organization/federation/rules/workspaces.js +110 -0
- package/dist/vendor/resources/beta/organization/federation/rules/workspaces.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation/rules.d.ts +1 -0
- package/dist/vendor/resources/beta/organization/federation/rules.js +3 -0
- package/dist/vendor/resources/beta/organization/federation/rules.js.map +1 -0
- package/dist/vendor/resources/beta/organization/federation.d.ts +1 -0
- package/dist/vendor/resources/beta/organization/federation.js +3 -0
- package/dist/vendor/resources/beta/organization/federation.js.map +1 -0
- package/dist/vendor/resources/beta/organization/index.d.ts +10 -0
- package/dist/vendor/resources/beta/organization/index.js +12 -0
- package/dist/vendor/resources/beta/organization/index.js.map +1 -0
- package/dist/vendor/resources/beta/organization/invites.d.ts +161 -0
- package/dist/vendor/resources/beta/organization/invites.js +72 -0
- package/dist/vendor/resources/beta/organization/invites.js.map +1 -0
- package/dist/vendor/resources/beta/organization/organization.d.ts +72 -0
- package/dist/vendor/resources/beta/organization/organization.js +54 -0
- package/dist/vendor/resources/beta/organization/organization.js.map +1 -0
- package/dist/vendor/resources/beta/organization/rate-limits.d.ts +76 -0
- package/dist/vendor/resources/beta/organization/rate-limits.js +27 -0
- package/dist/vendor/resources/beta/organization/rate-limits.js.map +1 -0
- package/dist/vendor/resources/beta/organization/service-accounts/index.d.ts +2 -0
- package/dist/vendor/resources/beta/organization/service-accounts/index.js +4 -0
- package/dist/vendor/resources/beta/organization/service-accounts/index.js.map +1 -0
- package/dist/vendor/resources/beta/organization/service-accounts/service-accounts.d.ts +257 -0
- package/dist/vendor/resources/beta/organization/service-accounts/service-accounts.js +166 -0
- package/dist/vendor/resources/beta/organization/service-accounts/service-accounts.js.map +1 -0
- package/dist/vendor/resources/beta/organization/service-accounts/workspaces.d.ts +140 -0
- package/dist/vendor/resources/beta/organization/service-accounts/workspaces.js +121 -0
- package/dist/vendor/resources/beta/organization/service-accounts/workspaces.js.map +1 -0
- package/dist/vendor/resources/beta/organization/service-accounts.d.ts +1 -0
- package/dist/vendor/resources/beta/organization/service-accounts.js +3 -0
- package/dist/vendor/resources/beta/organization/service-accounts.js.map +1 -0
- package/dist/vendor/resources/beta/organization/users.d.ts +123 -0
- package/dist/vendor/resources/beta/organization/users.js +63 -0
- package/dist/vendor/resources/beta/organization/users.js.map +1 -0
- package/dist/vendor/resources/beta/organization/workspaces/index.d.ts +4 -0
- package/dist/vendor/resources/beta/organization/workspaces/index.js +6 -0
- package/dist/vendor/resources/beta/organization/workspaces/index.js.map +1 -0
- package/dist/vendor/resources/beta/organization/workspaces/members.d.ts +134 -0
- package/dist/vendor/resources/beta/organization/workspaces/members.js +98 -0
- package/dist/vendor/resources/beta/organization/workspaces/members.js.map +1 -0
- package/dist/vendor/resources/beta/organization/workspaces/rate-limits.d.ts +82 -0
- package/dist/vendor/resources/beta/organization/workspaces/rate-limits.js +30 -0
- package/dist/vendor/resources/beta/organization/workspaces/rate-limits.js.map +1 -0
- package/dist/vendor/resources/beta/organization/workspaces/service-accounts.d.ts +209 -0
- package/dist/vendor/resources/beta/organization/workspaces/service-accounts.js +185 -0
- package/dist/vendor/resources/beta/organization/workspaces/service-accounts.js.map +1 -0
- package/dist/vendor/resources/beta/organization/workspaces/workspaces.d.ts +302 -0
- package/dist/vendor/resources/beta/organization/workspaces/workspaces.js +104 -0
- package/dist/vendor/resources/beta/organization/workspaces/workspaces.js.map +1 -0
- package/dist/vendor/resources/beta/organization/workspaces.d.ts +1 -0
- package/dist/vendor/resources/beta/organization/workspaces.js +3 -0
- package/dist/vendor/resources/beta/organization/workspaces.js.map +1 -0
- package/dist/vendor/resources/beta/organization.d.ts +1 -0
- package/dist/vendor/resources/beta/organization.js +3 -0
- package/dist/vendor/resources/beta/organization.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/events.d.ts +1513 -0
- package/dist/vendor/resources/beta/sessions/events.js +115 -0
- package/dist/vendor/resources/beta/sessions/events.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/index.d.ts +4 -0
- package/dist/vendor/resources/beta/sessions/index.js +6 -0
- package/dist/vendor/resources/beta/sessions/index.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/resources.d.ts +227 -0
- package/dist/vendor/resources/beta/sessions/resources.js +128 -0
- package/dist/vendor/resources/beta/sessions/resources.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/sessions.d.ts +866 -0
- package/dist/vendor/resources/beta/sessions/sessions.js +150 -0
- package/dist/vendor/resources/beta/sessions/sessions.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/threads/events.d.ts +77 -0
- package/dist/vendor/resources/beta/sessions/threads/events.js +57 -0
- package/dist/vendor/resources/beta/sessions/threads/events.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/threads/index.d.ts +2 -0
- package/dist/vendor/resources/beta/sessions/threads/index.js +4 -0
- package/dist/vendor/resources/beta/sessions/threads/index.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/threads/threads.d.ts +195 -0
- package/dist/vendor/resources/beta/sessions/threads/threads.js +80 -0
- package/dist/vendor/resources/beta/sessions/threads/threads.js.map +1 -0
- package/dist/vendor/resources/beta/sessions/threads.d.ts +1 -0
- package/dist/vendor/resources/beta/sessions/threads.js +3 -0
- package/dist/vendor/resources/beta/sessions/threads.js.map +1 -0
- package/dist/vendor/resources/beta/sessions.d.ts +1 -0
- package/dist/vendor/resources/beta/sessions.js +3 -0
- package/dist/vendor/resources/beta/sessions.js.map +1 -0
- package/dist/vendor/resources/beta/skills/index.d.ts +2 -0
- package/dist/vendor/resources/beta/skills/index.js +4 -0
- package/dist/vendor/resources/beta/skills/index.js.map +1 -0
- package/dist/vendor/resources/beta/skills/skills.d.ts +178 -0
- package/dist/vendor/resources/beta/skills/skills.js +96 -0
- package/dist/vendor/resources/beta/skills/skills.js.map +1 -0
- package/dist/vendor/resources/beta/skills/versions.d.ts +181 -0
- package/dist/vendor/resources/beta/skills/versions.js +125 -0
- package/dist/vendor/resources/beta/skills/versions.js.map +1 -0
- package/dist/vendor/resources/beta/skills.d.ts +1 -0
- package/dist/vendor/resources/beta/skills.js +3 -0
- package/dist/vendor/resources/beta/skills.js.map +1 -0
- package/dist/vendor/resources/beta/tunnels/certificates.d.ts +162 -0
- package/dist/vendor/resources/beta/tunnels/certificates.js +125 -0
- package/dist/vendor/resources/beta/tunnels/certificates.js.map +1 -0
- package/dist/vendor/resources/beta/tunnels/index.d.ts +2 -0
- package/dist/vendor/resources/beta/tunnels/index.js +4 -0
- package/dist/vendor/resources/beta/tunnels/index.js.map +1 -0
- package/dist/vendor/resources/beta/tunnels/tunnels.d.ts +211 -0
- package/dist/vendor/resources/beta/tunnels/tunnels.js +173 -0
- package/dist/vendor/resources/beta/tunnels/tunnels.js.map +1 -0
- package/dist/vendor/resources/beta/tunnels.d.ts +1 -0
- package/dist/vendor/resources/beta/tunnels.js +3 -0
- package/dist/vendor/resources/beta/tunnels.js.map +1 -0
- package/dist/vendor/resources/beta/user-profiles.d.ts +244 -0
- package/dist/vendor/resources/beta/user-profiles.js +114 -0
- package/dist/vendor/resources/beta/user-profiles.js.map +1 -0
- package/dist/vendor/resources/beta/vaults/credentials.d.ts +715 -0
- package/dist/vendor/resources/beta/vaults/credentials.js +173 -0
- package/dist/vendor/resources/beta/vaults/credentials.js.map +1 -0
- package/dist/vendor/resources/beta/vaults/index.d.ts +2 -0
- package/dist/vendor/resources/beta/vaults/index.js +4 -0
- package/dist/vendor/resources/beta/vaults/index.js.map +1 -0
- package/dist/vendor/resources/beta/vaults/vaults.d.ts +191 -0
- package/dist/vendor/resources/beta/vaults/vaults.js +141 -0
- package/dist/vendor/resources/beta/vaults/vaults.js.map +1 -0
- package/dist/vendor/resources/beta/vaults.d.ts +1 -0
- package/dist/vendor/resources/beta/vaults.js +3 -0
- package/dist/vendor/resources/beta/vaults.js.map +1 -0
- package/dist/vendor/resources/beta/webhooks.d.ts +464 -0
- package/dist/vendor/resources/beta/webhooks.js +29 -0
- package/dist/vendor/resources/beta/webhooks.js.map +1 -0
- package/dist/vendor/resources/beta.d.ts +1 -0
- package/dist/vendor/resources/beta.js +3 -0
- package/dist/vendor/resources/beta.js.map +1 -0
- package/dist/vendor/resources/completions.d.ts +172 -0
- package/dist/vendor/resources/completions.js +19 -0
- package/dist/vendor/resources/completions.js.map +1 -0
- package/dist/vendor/resources/files.d.ts +104 -0
- package/dist/vendor/resources/files.js +48 -0
- package/dist/vendor/resources/files.js.map +1 -0
- package/dist/vendor/resources/index.d.ts +7 -0
- package/dist/vendor/resources/index.js +9 -0
- package/dist/vendor/resources/index.js.map +1 -0
- package/dist/vendor/resources/messages/batches.d.ts +312 -0
- package/dist/vendor/resources/messages/batches.js +157 -0
- package/dist/vendor/resources/messages/batches.js.map +1 -0
- package/dist/vendor/resources/messages/index.d.ts +2 -0
- package/dist/vendor/resources/messages/index.js +4 -0
- package/dist/vendor/resources/messages/index.js.map +1 -0
- package/dist/vendor/resources/messages/messages.d.ts +3886 -0
- package/dist/vendor/resources/messages/messages.js +130 -0
- package/dist/vendor/resources/messages/messages.js.map +1 -0
- package/dist/vendor/resources/messages.d.ts +1 -0
- package/dist/vendor/resources/messages.js +3 -0
- package/dist/vendor/resources/messages.js.map +1 -0
- package/dist/vendor/resources/models.d.ts +196 -0
- package/dist/vendor/resources/models.js +41 -0
- package/dist/vendor/resources/models.js.map +1 -0
- package/dist/vendor/resources/shared.d.ts +43 -0
- package/dist/vendor/resources/shared.js +3 -0
- package/dist/vendor/resources/shared.js.map +1 -0
- package/dist/vendor/resources/skills/index.d.ts +2 -0
- package/dist/vendor/resources/skills/index.js +4 -0
- package/dist/vendor/resources/skills/index.js.map +1 -0
- package/dist/vendor/resources/skills/skills.d.ts +128 -0
- package/dist/vendor/resources/skills/skills.js +36 -0
- package/dist/vendor/resources/skills/skills.js.map +1 -0
- package/dist/vendor/resources/skills/versions.d.ts +103 -0
- package/dist/vendor/resources/skills/versions.js +37 -0
- package/dist/vendor/resources/skills/versions.js.map +1 -0
- package/dist/vendor/resources/skills.d.ts +1 -0
- package/dist/vendor/resources/skills.js +3 -0
- package/dist/vendor/resources/skills.js.map +1 -0
- package/dist/vendor/resources/top-level.d.ts +1 -0
- package/dist/vendor/resources/top-level.js +3 -0
- package/dist/vendor/resources/top-level.js.map +1 -0
- package/dist/vendor/resources.d.ts +1 -0
- package/dist/vendor/resources.js +2 -0
- package/dist/vendor/resources.js.map +1 -0
- package/dist/vendor/streaming.d.ts +2 -0
- package/dist/vendor/streaming.js +3 -0
- package/dist/vendor/streaming.js.map +1 -0
- package/dist/vendor/tools/agent-toolset/fs-util.d.ts +74 -0
- package/dist/vendor/tools/agent-toolset/fs-util.js +184 -0
- package/dist/vendor/tools/agent-toolset/fs-util.js.map +1 -0
- package/dist/vendor/tools/agent-toolset/memories.d.ts +172 -0
- package/dist/vendor/tools/agent-toolset/memories.js +910 -0
- package/dist/vendor/tools/agent-toolset/memories.js.map +1 -0
- package/dist/vendor/tools/agent-toolset/node.browser.d.ts +80 -0
- package/dist/vendor/tools/agent-toolset/node.browser.js +129 -0
- package/dist/vendor/tools/agent-toolset/node.browser.js.map +1 -0
- package/dist/vendor/tools/agent-toolset/node.d.ts +191 -0
- package/dist/vendor/tools/agent-toolset/node.js +886 -0
- package/dist/vendor/tools/agent-toolset/node.js.map +1 -0
- package/dist/vendor/tools/agent-toolset/skills.d.ts +73 -0
- package/dist/vendor/tools/agent-toolset/skills.js +320 -0
- package/dist/vendor/tools/agent-toolset/skills.js.map +1 -0
- package/dist/vendor/tools/agent-toolset/sync-interval.d.ts +18 -0
- package/dist/vendor/tools/agent-toolset/sync-interval.js +25 -0
- package/dist/vendor/tools/agent-toolset/sync-interval.js.map +1 -0
- package/dist/vendor/tools/memory/node.browser.d.ts +26 -0
- package/dist/vendor/tools/memory/node.browser.js +44 -0
- package/dist/vendor/tools/memory/node.browser.js.map +1 -0
- package/dist/vendor/tools/memory/node.d.ts +17 -0
- package/dist/vendor/tools/memory/node.js +327 -0
- package/dist/vendor/tools/memory/node.js.map +1 -0
- package/dist/vendor/uploads.d.ts +2 -0
- package/dist/vendor/uploads.js +3 -0
- package/dist/vendor/uploads.js.map +1 -0
- package/dist/vendor/version.d.ts +1 -0
- package/dist/vendor/version.js +2 -0
- package/dist/vendor/version.js.map +1 -0
- package/package.json +7 -14
- package/sdk.cjs +6 -6
- package/sdk.cjs.map +18 -18
- package/sdk.d.ts +10 -10
- package/sdk.mjs +21 -21
- package/sdk.mjs.map +18 -18
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { PukuAI } from '../../client';
|
|
2
|
+
import type { BetaSelfHostedWork } from '../../resources/beta/environments/work';
|
|
3
|
+
import type { BetaToolRunnerRequestOptions } from '../tools/BetaToolRunner';
|
|
4
|
+
export { is4xx, isFatal4xx, isStatus, jitter } from '../../internal/utils/backoff';
|
|
5
|
+
export declare const POLL_BLOCK_MS = 999;
|
|
6
|
+
export interface WorkPollerOptions {
|
|
7
|
+
client: PukuAI;
|
|
8
|
+
environmentId: string;
|
|
9
|
+
/**
|
|
10
|
+
* The environment key — the single credential for the self-hosted runner. It
|
|
11
|
+
* authenticates the work-poll calls here and every per-session call the
|
|
12
|
+
* consumer makes afterwards.
|
|
13
|
+
*/
|
|
14
|
+
environmentKey: string;
|
|
15
|
+
workerId?: string;
|
|
16
|
+
/** External abort signal. Aborting it ends the iteration. */
|
|
17
|
+
signal?: AbortSignal;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the poller posts `work.stop` itself after the consumer's loop body
|
|
20
|
+
* returns. Defaults to `true`. Set `false` when the consumer already owns the
|
|
21
|
+
* stop (e.g. {@link EnvironmentWorker} force-stops every item) so the work
|
|
22
|
+
* item is not stopped twice.
|
|
23
|
+
*
|
|
24
|
+
* Orthogonal to {@link WorkPollerOptions.drain}: `autoStop` is a per-item
|
|
25
|
+
* lifecycle flag (does the poller `work.stop` each item), `drain` controls
|
|
26
|
+
* loop termination (does the poller return when the queue is empty). They are
|
|
27
|
+
* not two names for the same thing — `EnvironmentWorker.run` uses
|
|
28
|
+
* `autoStop: false` with `drain` defaulting `false`.
|
|
29
|
+
*/
|
|
30
|
+
autoStop?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* When `true`, the poller returns (ends iteration) as soon as the work queue
|
|
33
|
+
* is empty instead of long-polling forever. Defaults to `false` (long-poll
|
|
34
|
+
* until aborted). Pair with `blockMs: null` for a single non-blocking pass
|
|
35
|
+
* over whatever is already queued.
|
|
36
|
+
*/
|
|
37
|
+
drain?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Block timeout in milliseconds passed through to `work.poll` — the server
|
|
40
|
+
* long-polls up to this long for an item before returning empty. Defaults to
|
|
41
|
+
* {@link POLL_BLOCK_MS} (the API cap, 999). Pass `null` to omit it entirely
|
|
42
|
+
* for a non-blocking single poll (useful with {@link WorkPollerOptions.drain}).
|
|
43
|
+
*/
|
|
44
|
+
blockMs?: number | null;
|
|
45
|
+
/**
|
|
46
|
+
* Reclaim unacknowledged work items older than this many milliseconds, passed
|
|
47
|
+
* through to `work.poll`'s `reclaim_older_than_ms`. Defaults to `undefined`
|
|
48
|
+
* (omitted — the server applies its own default).
|
|
49
|
+
*/
|
|
50
|
+
reclaimOlderThanMs?: number | null;
|
|
51
|
+
/**
|
|
52
|
+
* Extra per-request options merged into the poll/ack/stop calls. Custom
|
|
53
|
+
* `headers` (e.g. a proxy's auth/routing headers) are layered on top of the
|
|
54
|
+
* environment-key auth + helper telemetry headers; the poller owns the abort
|
|
55
|
+
* signal, so a `signal` here is ignored.
|
|
56
|
+
*/
|
|
57
|
+
requestOptions?: BetaToolRunnerRequestOptions;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Async-iterable that long-polls a self-hosted environment for work, ack's
|
|
61
|
+
* each item, yields the {@link BetaSelfHostedWork} item, and posts `stop` after
|
|
62
|
+
* the consumer's loop body returns (or when the consumer `break`s).
|
|
63
|
+
*
|
|
64
|
+
* A yielded item may carry a per-item `secret` payload (populated only by the
|
|
65
|
+
* poll response); the poller passes it through untouched — consumers such as
|
|
66
|
+
* {@link EnvironmentWorker} extract the sessions token it carries and prefer
|
|
67
|
+
* that over the environment key for the item's downstream calls. Treat it as
|
|
68
|
+
* opaque and never log it.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* for await (const work of client.beta.environments.work.poller({
|
|
73
|
+
* environmentId,
|
|
74
|
+
* environmentKey,
|
|
75
|
+
* })) {
|
|
76
|
+
* // ...service the work...
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export declare class WorkPoller implements AsyncIterable<BetaSelfHostedWork> {
|
|
81
|
+
#private;
|
|
82
|
+
readonly client: PukuAI;
|
|
83
|
+
readonly environmentId: string;
|
|
84
|
+
readonly environmentKey: string;
|
|
85
|
+
readonly workerId: string;
|
|
86
|
+
constructor(opts: WorkPollerOptions);
|
|
87
|
+
/** Read-only view of this iterator's abort signal. */
|
|
88
|
+
get signal(): AbortSignal;
|
|
89
|
+
/** Abort the iterator. The current `for await` will exit cleanly. */
|
|
90
|
+
abort(): void;
|
|
91
|
+
[Symbol.asyncIterator](): AsyncIterator<BetaSelfHostedWork>;
|
|
92
|
+
}
|
|
93
|
+
/** Exponential poll backoff: 1s, 2s, 4s … clamped to a 60s cap. */
|
|
94
|
+
export declare function backoff(attempt: number): number;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { PukuError } from '../../core/error.js';
|
|
2
|
+
import { loggerFor } from '../../internal/utils/log.js';
|
|
3
|
+
import { sleep } from '../../internal/utils/sleep.js';
|
|
4
|
+
import { uuid4 } from '../../internal/utils/uuid.js';
|
|
5
|
+
import { linkAbort } from '../../internal/utils/abort.js';
|
|
6
|
+
import { buildHeaders } from '../../internal/headers.js';
|
|
7
|
+
import { applyJitter, backoff as expBackoff, isFatal4xx, isStatus, jitter, } from '../../internal/utils/backoff.js';
|
|
8
|
+
import { copyClientForHelper } from '../helper-client.js';
|
|
9
|
+
export { is4xx, isFatal4xx, isStatus, jitter } from '../../internal/utils/backoff.js';
|
|
10
|
+
// API caps block_ms at 999; rely on client-side jitter between empty polls.
|
|
11
|
+
export const POLL_BLOCK_MS = 999;
|
|
12
|
+
const POLL_BACKOFF_BASE_MS = 1000;
|
|
13
|
+
const POLL_BACKOFF_CAP_MS = 60_000;
|
|
14
|
+
const IDLE_REPORT_INTERVAL_MS = 300_000;
|
|
15
|
+
/**
|
|
16
|
+
* Async-iterable that long-polls a self-hosted environment for work, ack's
|
|
17
|
+
* each item, yields the {@link BetaSelfHostedWork} item, and posts `stop` after
|
|
18
|
+
* the consumer's loop body returns (or when the consumer `break`s).
|
|
19
|
+
*
|
|
20
|
+
* A yielded item may carry a per-item `secret` payload (populated only by the
|
|
21
|
+
* poll response); the poller passes it through untouched — consumers such as
|
|
22
|
+
* {@link EnvironmentWorker} extract the sessions token it carries and prefer
|
|
23
|
+
* that over the environment key for the item's downstream calls. Treat it as
|
|
24
|
+
* opaque and never log it.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* for await (const work of client.beta.environments.work.poller({
|
|
29
|
+
* environmentId,
|
|
30
|
+
* environmentKey,
|
|
31
|
+
* })) {
|
|
32
|
+
* // ...service the work...
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export class WorkPoller {
|
|
37
|
+
client;
|
|
38
|
+
environmentId;
|
|
39
|
+
environmentKey;
|
|
40
|
+
workerId;
|
|
41
|
+
// Sub-client scoped to the environment key. Every poll / ack / stop call
|
|
42
|
+
// is routed through this so the parent's `X-Api-Key` never lands on the
|
|
43
|
+
// wire alongside the bearer credential. The helper-telemetry header is
|
|
44
|
+
// attached as a default on this client; per-call plumbing is unnecessary.
|
|
45
|
+
#runnerClient;
|
|
46
|
+
#consumed = false;
|
|
47
|
+
#controller;
|
|
48
|
+
#detachExternal;
|
|
49
|
+
#autoStop;
|
|
50
|
+
#drain;
|
|
51
|
+
#blockMs;
|
|
52
|
+
#reclaimOlderThanMs;
|
|
53
|
+
#requestOpts;
|
|
54
|
+
constructor(opts) {
|
|
55
|
+
this.client = opts.client;
|
|
56
|
+
this.environmentId = opts.environmentId;
|
|
57
|
+
this.environmentKey = opts.environmentKey;
|
|
58
|
+
this.workerId = opts.workerId ?? defaultWorkerId();
|
|
59
|
+
this.#runnerClient = copyClientForHelper(opts.client, {
|
|
60
|
+
authToken: opts.environmentKey,
|
|
61
|
+
helper: 'environments-work-poller',
|
|
62
|
+
});
|
|
63
|
+
this.#autoStop = opts.autoStop ?? true;
|
|
64
|
+
this.#drain = opts.drain ?? false;
|
|
65
|
+
// `undefined` => default to the API cap; an explicit `null` => omit
|
|
66
|
+
// `block_ms` for a non-blocking poll.
|
|
67
|
+
this.#blockMs = opts.blockMs === undefined ? POLL_BLOCK_MS : opts.blockMs;
|
|
68
|
+
this.#reclaimOlderThanMs = opts.reclaimOlderThanMs ?? null;
|
|
69
|
+
this.#requestOpts = opts.requestOptions;
|
|
70
|
+
this.#controller = new AbortController();
|
|
71
|
+
this.#detachExternal = linkAbort(opts.signal, this.#controller);
|
|
72
|
+
}
|
|
73
|
+
/** Read-only view of this iterator's abort signal. */
|
|
74
|
+
get signal() {
|
|
75
|
+
return this.#controller.signal;
|
|
76
|
+
}
|
|
77
|
+
/** Abort the iterator. The current `for await` will exit cleanly. */
|
|
78
|
+
abort() {
|
|
79
|
+
this.#controller.abort();
|
|
80
|
+
}
|
|
81
|
+
async *[Symbol.asyncIterator]() {
|
|
82
|
+
if (this.#consumed) {
|
|
83
|
+
throw new PukuError('Cannot iterate over a consumed WorkPoller');
|
|
84
|
+
}
|
|
85
|
+
this.#consumed = true;
|
|
86
|
+
const log = loggerFor(this.client);
|
|
87
|
+
log.info('poller starting', {
|
|
88
|
+
component: 'work-poller',
|
|
89
|
+
environment_id: this.environmentId,
|
|
90
|
+
});
|
|
91
|
+
const idle = new IdleLog(log, this.environmentId);
|
|
92
|
+
try {
|
|
93
|
+
let attempt = 0;
|
|
94
|
+
while (!this.#controller.signal.aborted) {
|
|
95
|
+
let work;
|
|
96
|
+
try {
|
|
97
|
+
work = await this.#runnerClient.beta.environments.work.poll(this.environmentId, {
|
|
98
|
+
'PukuAI-Worker-ID': this.workerId,
|
|
99
|
+
...(this.#blockMs !== null ? { block_ms: this.#blockMs } : {}),
|
|
100
|
+
...(this.#reclaimOlderThanMs !== null ?
|
|
101
|
+
{ reclaim_older_than_ms: this.#reclaimOlderThanMs }
|
|
102
|
+
: {}),
|
|
103
|
+
}, { headers: buildHeaders([this.#requestOpts?.headers]), signal: this.#controller.signal });
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
if (this.#controller.signal.aborted)
|
|
107
|
+
return;
|
|
108
|
+
// A bad environment key / missing environment never recovers — surface
|
|
109
|
+
// it instead of spinning forever at the backoff cap.
|
|
110
|
+
if (isFatal4xx(e)) {
|
|
111
|
+
log.error('poll failed permanently, stopping poller', { error: String(e) });
|
|
112
|
+
throw e;
|
|
113
|
+
}
|
|
114
|
+
// Jittered exponential backoff so a fleet of pollers doesn't retry in
|
|
115
|
+
// lockstep after a shared outage.
|
|
116
|
+
const wait = applyJitter(backoff(attempt));
|
|
117
|
+
log.warn('poll failed, backing off', { error: String(e), backoff_ms: wait });
|
|
118
|
+
attempt++;
|
|
119
|
+
await sleep(wait, this.#controller.signal);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
attempt = 0;
|
|
123
|
+
if (work == null) {
|
|
124
|
+
// Queue empty: either return now (drain) or wait and poll again.
|
|
125
|
+
if (this.#drain)
|
|
126
|
+
return;
|
|
127
|
+
idle.onEmptyPoll();
|
|
128
|
+
await sleep(jitter(1000, 3000), this.#controller.signal);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
idle.onClaim();
|
|
132
|
+
log.info('claimed work', {
|
|
133
|
+
component: 'work-poller',
|
|
134
|
+
environment_id: this.environmentId,
|
|
135
|
+
work_id: work.id,
|
|
136
|
+
work_type: work.data.type,
|
|
137
|
+
});
|
|
138
|
+
try {
|
|
139
|
+
await this.#runnerClient.beta.environments.work.ack(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([this.#requestOpts?.headers]), signal: this.#controller.signal });
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
log.error('ack failed', { work_id: work.id, error: String(e) });
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
yield work;
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
// Post-handler stop. Runs whether the consumer body returned
|
|
150
|
+
// normally, threw, or `break`d out of the loop — unless the consumer
|
|
151
|
+
// owns the stop itself (`autoStop: false`).
|
|
152
|
+
if (this.#autoStop) {
|
|
153
|
+
try {
|
|
154
|
+
await this.#runnerClient.beta.environments.work.stop(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([this.#requestOpts?.headers]) });
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
if (!isStatus(e, 409))
|
|
158
|
+
log.warn('stop failed', { work_id: work.id, error: String(e) });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
// Detach from the external signal so the consumer can drop their
|
|
166
|
+
// signal reference without leaking this iterator instance.
|
|
167
|
+
this.#detachExternal();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/** Exponential poll backoff: 1s, 2s, 4s … clamped to a 60s cap. */
|
|
172
|
+
export function backoff(attempt) {
|
|
173
|
+
return expBackoff(attempt, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Keeps an idle poll loop visible in the logs without an INFO line per poll:
|
|
177
|
+
* the first empty poll after start-up or after a claim logs at INFO and later
|
|
178
|
+
* ones at DEBUG, with an INFO reminder every `IDLE_REPORT_INTERVAL_MS` while
|
|
179
|
+
* the loop stays idle.
|
|
180
|
+
*/
|
|
181
|
+
class IdleLog {
|
|
182
|
+
#log;
|
|
183
|
+
#environmentId;
|
|
184
|
+
#idleSince;
|
|
185
|
+
#lastReport = 0;
|
|
186
|
+
constructor(log, environmentId) {
|
|
187
|
+
this.#log = log;
|
|
188
|
+
this.#environmentId = environmentId;
|
|
189
|
+
}
|
|
190
|
+
onEmptyPoll() {
|
|
191
|
+
const now = Date.now();
|
|
192
|
+
const fields = { component: 'work-poller', environment_id: this.#environmentId };
|
|
193
|
+
if (this.#idleSince === undefined) {
|
|
194
|
+
this.#idleSince = this.#lastReport = now;
|
|
195
|
+
this.#log.info('idle; polling for work', fields);
|
|
196
|
+
}
|
|
197
|
+
else if (now - this.#lastReport >= IDLE_REPORT_INTERVAL_MS) {
|
|
198
|
+
this.#lastReport = now;
|
|
199
|
+
this.#log.info(`still polling; idle for ${Math.round((now - this.#idleSince) / 1000)}s`, fields);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
this.#log.debug('poll returned no work', fields);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
onClaim() {
|
|
206
|
+
this.#idleSince = undefined;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function defaultWorkerId() {
|
|
210
|
+
// The API documents the worker id as a *unique* identifier for Redis consumer
|
|
211
|
+
// groups, so the fallback must be unique even when several pollers share a
|
|
212
|
+
// host. Prefix with the hostname when one is exposed for readability, but rely
|
|
213
|
+
// on the uuid for uniqueness.
|
|
214
|
+
const env = globalThis.process?.env;
|
|
215
|
+
const host = env?.['HOSTNAME'];
|
|
216
|
+
return host ? `${host}-${uuid4()}` : uuid4();
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=poller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../../../src/vendor/lib/environments/poller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import type { PukuAI } from '../../client';
|
|
2
|
+
import type { BetaRunnableTool } from '../tools/BetaRunnableTool';
|
|
3
|
+
import type { BetaToolRunnerRequestOptions } from '../tools/BetaToolRunner';
|
|
4
|
+
import type { AgentToolContext, MemoryDeleteMode } from '../../tools/agent-toolset/node';
|
|
5
|
+
/**
|
|
6
|
+
* Either a fixed tool array or a factory invoked once per claimed session with
|
|
7
|
+
* that session's {@link AgentToolContext} — use the factory form to bind
|
|
8
|
+
* `betaAgentToolset20260401` (or any tool that needs the workdir / session
|
|
9
|
+
* id) to the right session.
|
|
10
|
+
*/
|
|
11
|
+
export type EnvironmentWorkerTools = Array<BetaRunnableTool> | ((ctx: AgentToolContext) => Array<BetaRunnableTool>);
|
|
12
|
+
export interface EnvironmentWorkerOptions {
|
|
13
|
+
client: PukuAI;
|
|
14
|
+
/**
|
|
15
|
+
* The self-hosted environment to poll for work. Required by
|
|
16
|
+
* {@link EnvironmentWorker.run}; not used by {@link EnvironmentWorker.handleItem}.
|
|
17
|
+
*/
|
|
18
|
+
environmentId?: string;
|
|
19
|
+
/**
|
|
20
|
+
* The environment key — the worker's standing credential: polling always
|
|
21
|
+
* uses it, and per-session calls fall back to it when a claimed item's
|
|
22
|
+
* `secret` doesn't yield a sessions token. Required by
|
|
23
|
+
* {@link EnvironmentWorker.run}; falls back to `PUKU_ENVIRONMENT_KEY` in
|
|
24
|
+
* {@link EnvironmentWorker.handleItem}.
|
|
25
|
+
*/
|
|
26
|
+
environmentKey?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Tools to expose to each claimed session. Defaults to
|
|
29
|
+
* `betaAgentToolset20260401(ctx)` (the standard `agent_toolset_20260401` set
|
|
30
|
+
* bound to the per-session {@link AgentToolContext}).
|
|
31
|
+
*
|
|
32
|
+
* A `run` that blocks the event loop synchronously also stalls the lease
|
|
33
|
+
* heartbeat, and the worker can lose the lease; keep tools non-blocking (see
|
|
34
|
+
* {@link BetaRunnableTool.run}).
|
|
35
|
+
*/
|
|
36
|
+
tools?: EnvironmentWorkerTools;
|
|
37
|
+
/** Base directory for the per-session {@link AgentToolContext}. Defaults to `process.cwd()`. */
|
|
38
|
+
workdir?: string;
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated No longer accepted: the file tools are always confined to
|
|
41
|
+
* `workdir` plus `allowedRoots`, which is neither behavior this flag used to
|
|
42
|
+
* select, so passing either value throws. Remove it; list extra directories
|
|
43
|
+
* in {@link AgentToolContext.allowedRoots}. The property is removed in a
|
|
44
|
+
* future release.
|
|
45
|
+
*/
|
|
46
|
+
unrestrictedPaths?: boolean;
|
|
47
|
+
/** Forwarded to the per-session {@link AgentToolContext} (`maxFileBytes`). */
|
|
48
|
+
maxFileBytes?: number | null;
|
|
49
|
+
/** Forwarded to {@link SessionToolRunner} (`maxIdleMs`). */
|
|
50
|
+
maxIdleMs?: number;
|
|
51
|
+
/**
|
|
52
|
+
* How often (milliseconds) to sync the session's attached memory stores back
|
|
53
|
+
* while it runs — checked after each dispatched tool call, plus one final
|
|
54
|
+
* sync when the session ends cleanly. Defaults to
|
|
55
|
+
* `DEFAULT_MEMORY_SYNC_INTERVAL_MS` (15s); the constructor throws for
|
|
56
|
+
* values below `MIN_MEMORY_SYNC_INTERVAL_MS` (5s). Every teardown also runs
|
|
57
|
+
* a push-only flush of changed files; that flush and the final sync are
|
|
58
|
+
* each bounded by `MEMORY_FLUSH_TIMEOUT_MS`, and a warning is logged when
|
|
59
|
+
* either bound cuts work off. `null` disables memory download and sync
|
|
60
|
+
* entirely. Memory stores are only touched for work items whose `secret`
|
|
61
|
+
* carries a `sessions_token`; while sync is enabled, an item without one
|
|
62
|
+
* fails when its session has memory stores attached, because those stores
|
|
63
|
+
* cannot be mounted without the token. With `null` the same item runs,
|
|
64
|
+
* without memory, and nothing is logged — turning sync off is the
|
|
65
|
+
* operator's explicit choice.
|
|
66
|
+
*/
|
|
67
|
+
memorySyncIntervalMs?: number | null;
|
|
68
|
+
/**
|
|
69
|
+
* Whether local file deletions may delete on the server — see
|
|
70
|
+
* {@link MemoryDeleteMode}. Uploads and pulls are unaffected.
|
|
71
|
+
* Defaults to `"enabled"`.
|
|
72
|
+
*/
|
|
73
|
+
memorySyncDeletions?: MemoryDeleteMode;
|
|
74
|
+
/** Forwarded to the {@link WorkPoller}. */
|
|
75
|
+
workerId?: string;
|
|
76
|
+
/** External abort signal; aborting it ends the run. */
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
/**
|
|
79
|
+
* Extra per-request options merged into every call this worker issues — the
|
|
80
|
+
* work poll/ack/heartbeat/stop control-plane calls and the per-session
|
|
81
|
+
* SessionToolRunner's stream/list/send. Mirrors what
|
|
82
|
+
* `client.beta.messages.toolRunner` accepts: custom `headers` (e.g. a proxy's
|
|
83
|
+
* auth/routing headers) reach all of them. The worker owns the abort signals,
|
|
84
|
+
* so a `signal` here is ignored — use {@link EnvironmentWorkerOptions.signal}.
|
|
85
|
+
*/
|
|
86
|
+
requestOptions?: BetaToolRunnerRequestOptions;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Options for {@link EnvironmentWorker.handleItem}. Every field falls back to the
|
|
90
|
+
* matching `PUKU_*` environment variable — the ones the
|
|
91
|
+
* `ant worker poll --on-work` command sets for the process it spawns — when not
|
|
92
|
+
* passed explicitly.
|
|
93
|
+
*/
|
|
94
|
+
export interface HandleItemOptions {
|
|
95
|
+
/** Work item id. Falls back to `PUKU_WORK_ID`. */
|
|
96
|
+
workId?: string;
|
|
97
|
+
/** Self-hosted environment id. Falls back to `PUKU_ENVIRONMENT_ID`. */
|
|
98
|
+
environmentId?: string;
|
|
99
|
+
/** Session id. Falls back to `PUKU_SESSION_ID`. */
|
|
100
|
+
sessionId?: string;
|
|
101
|
+
/**
|
|
102
|
+
* The environment key used to authenticate every per-session call. Resolution
|
|
103
|
+
* order: this option, then the worker's own `environmentKey`, then
|
|
104
|
+
* `PUKU_ENVIRONMENT_KEY`.
|
|
105
|
+
*/
|
|
106
|
+
environmentKey?: string;
|
|
107
|
+
/**
|
|
108
|
+
* The work item's per-item `secret` payload from the poll response. Falls
|
|
109
|
+
* back to `PUKU_WORK_SECRET`. Unlike the others it is optional — when
|
|
110
|
+
* present, the sessions token extracted from it is preferred as the Bearer
|
|
111
|
+
* credential for this item's heartbeat / force-stop / skill-download /
|
|
112
|
+
* session calls; when absent (or undecodable) those calls use the
|
|
113
|
+
* environment key.
|
|
114
|
+
*/
|
|
115
|
+
workSecret?: string;
|
|
116
|
+
/** External abort signal; aborting it ends the run. Defaults to the constructor's signal. */
|
|
117
|
+
signal?: AbortSignal;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Extract the per-item sessions token from a work item's `secret` payload.
|
|
121
|
+
*
|
|
122
|
+
* The `secret` the poll response populates is not itself a credential: it is a
|
|
123
|
+
* URL-safe base64 JSON payload matching {@link BetaWorkSecret} — the
|
|
124
|
+
* `sessions_token` (the bearer for this item's work lifecycle and
|
|
125
|
+
* session-level calls) plus fields this worker does not consume. Returns the
|
|
126
|
+
* sessions token, or `null` (meaning: fall back to the environment key) when
|
|
127
|
+
* the payload is missing, doesn't decode, or carries no token. Never log the
|
|
128
|
+
* payload or anything extracted from it.
|
|
129
|
+
*/
|
|
130
|
+
export declare function sessionsTokenFromSecret(secret: string | null | undefined): string | null;
|
|
131
|
+
/**
|
|
132
|
+
* The self-hosted environment runner, composed from the control-plane
|
|
133
|
+
* {@link WorkPoller} and the per-session {@link SessionToolRunner}.
|
|
134
|
+
*
|
|
135
|
+
* For each claimed `session` work item it: builds the per-session
|
|
136
|
+
* {@link AgentToolContext}, downloads the session agent's skills
|
|
137
|
+
* (`setupSkills`), then runs a {@link SessionToolRunner} for the session
|
|
138
|
+
* while heartbeating the work-item lease on the same event loop; on exit it
|
|
139
|
+
* force-stops the work item (unless the lease was lost, in which case the item
|
|
140
|
+
* is left to whoever holds it now), cleans up the downloaded skills, and loops
|
|
141
|
+
* to the next one. The lease heartbeat reports `state === "stopping"` / a lost
|
|
142
|
+
* lease back into the run by aborting the session runner.
|
|
143
|
+
*
|
|
144
|
+
* The `environmentKey` is the worker's standing credential. When a claimed
|
|
145
|
+
* work item carries a per-item `secret` (a short-lived payload the poll
|
|
146
|
+
* response may populate), the sessions token extracted from it is preferred
|
|
147
|
+
* over the environment key for that item's heartbeat / force-stop /
|
|
148
|
+
* skill-download / session calls; polling itself always uses the environment
|
|
149
|
+
* key, and items without a usable secret fall back to it entirely.
|
|
150
|
+
*
|
|
151
|
+
* Use {@link EnvironmentWorker.handleItem} if you already hold a claimed work
|
|
152
|
+
* item (e.g. a `worker poll --on-work` script handed one to a fresh process) and
|
|
153
|
+
* just want the per-item flow without the poll loop — with no arguments it reads
|
|
154
|
+
* the `PUKU_*` env vars that command sets.
|
|
155
|
+
*
|
|
156
|
+
* Construct it via `client.beta.environments.work.worker({ ... })` (or
|
|
157
|
+
* `new EnvironmentWorker({ client, ... })` directly).
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* // Long-running daemon: poll for work, serve each session, loop.
|
|
162
|
+
* await client.beta.environments.work
|
|
163
|
+
* .worker({ environmentId, environmentKey, workdir: '/workspace' })
|
|
164
|
+
* .run(AbortSignal.timeout(60 * 60_000));
|
|
165
|
+
*
|
|
166
|
+
* // Already-claimed item (e.g. inside `ant worker poll --on-work ...`):
|
|
167
|
+
* await client.beta.environments.work.worker({ workdir: '/workspace' }).handleItem();
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
export declare class EnvironmentWorker {
|
|
171
|
+
#private;
|
|
172
|
+
readonly client: PukuAI;
|
|
173
|
+
readonly environmentId: string | undefined;
|
|
174
|
+
readonly environmentKey: string | undefined;
|
|
175
|
+
readonly tools: EnvironmentWorkerTools | undefined;
|
|
176
|
+
readonly workdir: string;
|
|
177
|
+
/** @deprecated Never set; see {@link EnvironmentWorkerOptions.unrestrictedPaths}. */
|
|
178
|
+
readonly unrestrictedPaths: boolean | undefined;
|
|
179
|
+
readonly maxFileBytes: number | null | undefined;
|
|
180
|
+
readonly maxIdleMs: number | undefined;
|
|
181
|
+
readonly memorySyncIntervalMs: number | null | undefined;
|
|
182
|
+
readonly memorySyncDeletions: MemoryDeleteMode;
|
|
183
|
+
readonly workerId: string | undefined;
|
|
184
|
+
readonly requestOptions: BetaToolRunnerRequestOptions | undefined;
|
|
185
|
+
constructor(opts: Omit<EnvironmentWorkerOptions, 'unrestrictedPaths'>);
|
|
186
|
+
/** @deprecated `unrestrictedPaths` is no longer accepted — see {@link EnvironmentWorkerOptions.unrestrictedPaths}. */
|
|
187
|
+
constructor(opts: Omit<EnvironmentWorkerOptions, 'unrestrictedPaths'> & {
|
|
188
|
+
unrestrictedPaths: boolean;
|
|
189
|
+
});
|
|
190
|
+
/**
|
|
191
|
+
* Poll the environment and service each claimed session until the supplied
|
|
192
|
+
* signal (or the one passed to the constructor) aborts. Throws if
|
|
193
|
+
* `environmentId` / `environmentKey` were not provided to the constructor.
|
|
194
|
+
*/
|
|
195
|
+
run(signal?: AbortSignal): Promise<void>;
|
|
196
|
+
/**
|
|
197
|
+
* Service a single, already-claimed work item without the poll loop: build the
|
|
198
|
+
* per-session {@link AgentToolContext} (workdir from this worker's options),
|
|
199
|
+
* download the session agent's skills (`setupSkills`), run a
|
|
200
|
+
* {@link SessionToolRunner} for the session while heartbeating the work-item
|
|
201
|
+
* lease, and force-stop the work item on exit (whether the runner finishes
|
|
202
|
+
* normally, throws, or the control plane signals shutdown). The one
|
|
203
|
+
* exception is a lost lease: the item then belongs to the queue or another
|
|
204
|
+
* worker and is left alone.
|
|
205
|
+
*
|
|
206
|
+
* Use this when something else does the claiming — e.g. a `worker poll
|
|
207
|
+
* --on-work` script that hands an already-claimed item to a fresh process. The
|
|
208
|
+
* work id / environment id / session id each fall back to `PUKU_WORK_ID` /
|
|
209
|
+
* `PUKU_ENVIRONMENT_ID` / `PUKU_SESSION_ID` (the env vars that
|
|
210
|
+
* command sets) when not passed; the environment key resolves from this
|
|
211
|
+
* option, then the worker's own `environmentKey`, then
|
|
212
|
+
* `PUKU_ENVIRONMENT_KEY`. With no arguments inside that command it just
|
|
213
|
+
* works. Throws a clear error naming the first of the four required values
|
|
214
|
+
* still missing after resolution. Throws `SessionMemoryError` when the
|
|
215
|
+
* session has memory stores attached but they cannot be mounted — the work
|
|
216
|
+
* item carried no sessions token (unless `memorySyncIntervalMs` turned
|
|
217
|
+
* memory off), or a store failed to download.
|
|
218
|
+
*
|
|
219
|
+
* `workSecret` is the work item's per-item `secret` payload from the poll
|
|
220
|
+
* response, falling back to `PUKU_WORK_SECRET`; unlike the others it is
|
|
221
|
+
* optional — when present, the sessions token extracted from it is preferred
|
|
222
|
+
* as the Bearer credential for this item's heartbeat / force-stop / session
|
|
223
|
+
* calls; when absent (or undecodable) those calls use the environment key.
|
|
224
|
+
*/
|
|
225
|
+
handleItem(opts?: HandleItemOptions): Promise<void>;
|
|
226
|
+
}
|