=18.0.0"
}
},
+ "node_modules/@aws-sdk/client-bedrock-agentcore": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agentcore/-/client-bedrock-agentcore-3.848.0.tgz",
+ "integrity": "sha512-6ZElm2avzRkW+BHnkl433JJkO+xXW9u0+evAPiipzeFJ2GrGBAWTj3ABxiHd155fYGJOy/vyZOaBYRfbgPGfOg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/credential-provider-node": "3.848.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/eventstream-serde-browser": "^4.0.4",
+ "@smithy/eventstream-serde-config-resolver": "^4.1.2",
+ "@smithy/eventstream-serde-node": "^4.0.4",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-stream": "^4.2.3",
+ "@smithy/util-utf8": "^4.0.0",
+ "@types/uuid": "^9.0.1",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agentcore-control/-/client-bedrock-agentcore-control-3.848.0.tgz",
+ "integrity": "sha512-mePD3XiAHt1Jc2d0A6wJa00IXGiHEIJKobYpSwmR18w5O47reOVf2PANkTC2t9nQ7LwfZQ5VI5eYLfpI2Gn3DA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/credential-provider-node": "3.848.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "@smithy/util-waiter": "^4.0.6",
+ "@types/uuid": "^9.0.1",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/client-sso": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.848.0.tgz",
+ "integrity": "sha512-mD+gOwoeZQvbecVLGoCmY6pS7kg02BHesbtIxUj+PeBqYoZV5uLvjUOmuGfw1SfoSobKvS11urxC9S7zxU/Maw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/core": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.846.0.tgz",
+ "integrity": "sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/xml-builder": "3.821.0",
+ "@smithy/core": "^3.7.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/signature-v4": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-utf8": "^4.0.0",
+ "fast-xml-parser": "5.2.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.846.0.tgz",
+ "integrity": "sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.846.0.tgz",
+ "integrity": "sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-stream": "^4.2.3",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.848.0.tgz",
+ "integrity": "sha512-r6KWOG+En2xujuMhgZu7dzOZV3/M5U/5+PXrG8dLQ3rdPRB3vgp5tc56KMqLwm/EXKRzAOSuw/UE4HfNOAB8Hw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/credential-provider-env": "3.846.0",
+ "@aws-sdk/credential-provider-http": "3.846.0",
+ "@aws-sdk/credential-provider-process": "3.846.0",
+ "@aws-sdk/credential-provider-sso": "3.848.0",
+ "@aws-sdk/credential-provider-web-identity": "3.848.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.848.0.tgz",
+ "integrity": "sha512-AblNesOqdzrfyASBCo1xW3uweiSro4Kft9/htdxLeCVU1KVOnFWA5P937MNahViRmIQm2sPBCqL8ZG0u9lnh5g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.846.0",
+ "@aws-sdk/credential-provider-http": "3.846.0",
+ "@aws-sdk/credential-provider-ini": "3.848.0",
+ "@aws-sdk/credential-provider-process": "3.846.0",
+ "@aws-sdk/credential-provider-sso": "3.848.0",
+ "@aws-sdk/credential-provider-web-identity": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.846.0.tgz",
+ "integrity": "sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.848.0.tgz",
+ "integrity": "sha512-pozlDXOwJZL0e7w+dqXLgzVDB7oCx4WvtY0sk6l4i07uFliWF/exupb6pIehFWvTUcOvn5aFTTqcQaEzAD5Wsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.848.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/token-providers": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.848.0.tgz",
+ "integrity": "sha512-D1fRpwPxtVDhcSc/D71exa2gYweV+ocp4D3brF0PgFd//JR3XahZ9W24rVnTQwYEcK9auiBZB89Ltv+WbWN8qw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz",
+ "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz",
+ "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz",
+ "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.848.0.tgz",
+ "integrity": "sha512-rjMuqSWJEf169/ByxvBqfdei1iaduAnfolTshsZxwcmLIUtbYrFUmts0HrLQqsAG8feGPpDLHA272oPl+NTCCA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@smithy/core": "^3.7.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/nested-clients": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.848.0.tgz",
+ "integrity": "sha512-joLsyyo9u61jnZuyYzo1z7kmS7VgWRAkzSGESVzQHfOA1H2PYeUFek6vLT4+c9xMGrX/Z6B0tkRdzfdOPiatLg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz",
+ "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-config-provider": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/token-providers": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.848.0.tgz",
+ "integrity": "sha512-oNPyM4+Di2Umu0JJRFSxDcKQ35+Chl/rAwD47/bS0cDPI8yrao83mLXLeDqpRPHyQW4sXlP763FZcuAibC0+mg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/types": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz",
+ "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz",
+ "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-endpoints": "^3.0.6",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz",
+ "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.848.0.tgz",
+ "integrity": "sha512-Zz1ft9NiLqbzNj/M0jVNxaoxI2F4tGXN0ZbZIj+KJ+PbJo+w5+Jo6d0UDAtbj3AEd79pjcCaP4OA9NTVzItUdw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@aws-sdk/xml-builder": {
+ "version": "3.821.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz",
+ "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/@smithy/util-utf8": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz",
+ "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/fast-xml-parser": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
+ "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "strnum": "^2.1.0"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control/node_modules/strnum": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
+ "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/client-sso": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.848.0.tgz",
+ "integrity": "sha512-mD+gOwoeZQvbecVLGoCmY6pS7kg02BHesbtIxUj+PeBqYoZV5uLvjUOmuGfw1SfoSobKvS11urxC9S7zxU/Maw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/core": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.846.0.tgz",
+ "integrity": "sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/xml-builder": "3.821.0",
+ "@smithy/core": "^3.7.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/signature-v4": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-utf8": "^4.0.0",
+ "fast-xml-parser": "5.2.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.846.0.tgz",
+ "integrity": "sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.846.0.tgz",
+ "integrity": "sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-stream": "^4.2.3",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.848.0.tgz",
+ "integrity": "sha512-r6KWOG+En2xujuMhgZu7dzOZV3/M5U/5+PXrG8dLQ3rdPRB3vgp5tc56KMqLwm/EXKRzAOSuw/UE4HfNOAB8Hw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/credential-provider-env": "3.846.0",
+ "@aws-sdk/credential-provider-http": "3.846.0",
+ "@aws-sdk/credential-provider-process": "3.846.0",
+ "@aws-sdk/credential-provider-sso": "3.848.0",
+ "@aws-sdk/credential-provider-web-identity": "3.848.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.848.0.tgz",
+ "integrity": "sha512-AblNesOqdzrfyASBCo1xW3uweiSro4Kft9/htdxLeCVU1KVOnFWA5P937MNahViRmIQm2sPBCqL8ZG0u9lnh5g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.846.0",
+ "@aws-sdk/credential-provider-http": "3.846.0",
+ "@aws-sdk/credential-provider-ini": "3.848.0",
+ "@aws-sdk/credential-provider-process": "3.846.0",
+ "@aws-sdk/credential-provider-sso": "3.848.0",
+ "@aws-sdk/credential-provider-web-identity": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.846.0.tgz",
+ "integrity": "sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.848.0.tgz",
+ "integrity": "sha512-pozlDXOwJZL0e7w+dqXLgzVDB7oCx4WvtY0sk6l4i07uFliWF/exupb6pIehFWvTUcOvn5aFTTqcQaEzAD5Wsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.848.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/token-providers": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.848.0.tgz",
+ "integrity": "sha512-D1fRpwPxtVDhcSc/D71exa2gYweV+ocp4D3brF0PgFd//JR3XahZ9W24rVnTQwYEcK9auiBZB89Ltv+WbWN8qw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz",
+ "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz",
+ "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz",
+ "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.848.0.tgz",
+ "integrity": "sha512-rjMuqSWJEf169/ByxvBqfdei1iaduAnfolTshsZxwcmLIUtbYrFUmts0HrLQqsAG8feGPpDLHA272oPl+NTCCA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@smithy/core": "^3.7.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/nested-clients": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.848.0.tgz",
+ "integrity": "sha512-joLsyyo9u61jnZuyYzo1z7kmS7VgWRAkzSGESVzQHfOA1H2PYeUFek6vLT4+c9xMGrX/Z6B0tkRdzfdOPiatLg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz",
+ "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-config-provider": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/token-providers": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.848.0.tgz",
+ "integrity": "sha512-oNPyM4+Di2Umu0JJRFSxDcKQ35+Chl/rAwD47/bS0cDPI8yrao83mLXLeDqpRPHyQW4sXlP763FZcuAibC0+mg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/types": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz",
+ "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz",
+ "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-endpoints": "^3.0.6",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz",
+ "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.848.0.tgz",
+ "integrity": "sha512-Zz1ft9NiLqbzNj/M0jVNxaoxI2F4tGXN0ZbZIj+KJ+PbJo+w5+Jo6d0UDAtbj3AEd79pjcCaP4OA9NTVzItUdw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@aws-sdk/xml-builder": {
+ "version": "3.821.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz",
+ "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/@smithy/util-utf8": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz",
+ "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/fast-xml-parser": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
+ "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "strnum": "^2.1.0"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore/node_modules/strnum": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
+ "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/@aws-sdk/client-bedrock-runtime": {
"version": "3.808.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.808.0.tgz",
@@ -13137,12 +14204,12 @@
}
},
"node_modules/@smithy/abort-controller": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz",
- "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz",
+ "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13175,15 +14242,15 @@
}
},
"node_modules/@smithy/config-resolver": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.2.tgz",
- "integrity": "sha512-7r6mZGwb5LmLJ+zPtkLoznf2EtwEuSWdtid10pjGl/7HefCE4mueOkrfki8JCUm99W6UfP47/r3tbxx9CfBN5A==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz",
+ "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.1.1",
- "@smithy/types": "^4.2.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
"@smithy/util-config-provider": "^4.0.0",
- "@smithy/util-middleware": "^4.0.2",
+ "@smithy/util-middleware": "^4.0.4",
"tslib": "^2.6.2"
},
"engines": {
@@ -13191,17 +14258,18 @@
}
},
"node_modules/@smithy/core": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.3.2.tgz",
- "integrity": "sha512-GlLv+syoWolhtjX12XplL9BXBu10cjjD8iQC69fiKTrVNOB3Fjt8CVI9ccm6G3bLbMNe1gzrLD7yyMkYo4hchw==",
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.7.1.tgz",
+ "integrity": "sha512-ExRCsHnXFtBPnM7MkfKBPcBBdHw1h/QS/cbNw4ho95qnyNHvnpmGbR39MIAv9KggTr5qSPxRSEL+hRXlyGyGQw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-serde": "^4.0.4",
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/types": "^4.2.0",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-base64": "^4.0.0",
"@smithy/util-body-length-browser": "^4.0.0",
- "@smithy/util-middleware": "^4.0.2",
- "@smithy/util-stream": "^4.2.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-stream": "^4.2.3",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -13223,15 +14291,15 @@
}
},
"node_modules/@smithy/credential-provider-imds": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.4.tgz",
- "integrity": "sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz",
+ "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.1.1",
- "@smithy/property-provider": "^4.0.2",
- "@smithy/types": "^4.2.0",
- "@smithy/url-parser": "^4.0.2",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
"tslib": "^2.6.2"
},
"engines": {
@@ -13239,13 +14307,13 @@
}
},
"node_modules/@smithy/eventstream-codec": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz",
- "integrity": "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz",
+ "integrity": "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==",
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/crc32": "5.2.0",
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"@smithy/util-hex-encoding": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -13266,13 +14334,13 @@
}
},
"node_modules/@smithy/eventstream-serde-browser": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz",
- "integrity": "sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz",
+ "integrity": "sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/eventstream-serde-universal": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/eventstream-serde-universal": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13280,12 +14348,12 @@
}
},
"node_modules/@smithy/eventstream-serde-config-resolver": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz",
- "integrity": "sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz",
+ "integrity": "sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13293,13 +14361,13 @@
}
},
"node_modules/@smithy/eventstream-serde-node": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz",
- "integrity": "sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz",
+ "integrity": "sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/eventstream-serde-universal": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/eventstream-serde-universal": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13307,13 +14375,13 @@
}
},
"node_modules/@smithy/eventstream-serde-universal": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz",
- "integrity": "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz",
+ "integrity": "sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/eventstream-codec": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/eventstream-codec": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13321,14 +14389,14 @@
}
},
"node_modules/@smithy/fetch-http-handler": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz",
- "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz",
+ "integrity": "sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/querystring-builder": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/querystring-builder": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"@smithy/util-base64": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -13352,12 +14420,12 @@
}
},
"node_modules/@smithy/hash-node": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz",
- "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz",
+ "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"@smithy/util-buffer-from": "^4.0.0",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
@@ -13407,12 +14475,12 @@
}
},
"node_modules/@smithy/invalid-dependency": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz",
- "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz",
+ "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13459,13 +14527,13 @@
}
},
"node_modules/@smithy/middleware-content-length": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz",
- "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz",
+ "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/types": "^4.2.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13473,18 +14541,18 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.5.tgz",
- "integrity": "sha512-WlpC9KVkajQf7RaGwi3n6lhHZzYTgm2PyX/2JjcwSHG417gFloNmYqN8rzDRXjT527/ZxZuvCsqq1gWZPW8lag==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.16.tgz",
+ "integrity": "sha512-plpa50PIGLqzMR2ANKAw2yOW5YKS626KYKqae3atwucbz4Ve4uQ9K9BEZxDLIFmCu7hKLcrq2zmj4a+PfmUV5w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.3.2",
- "@smithy/middleware-serde": "^4.0.4",
- "@smithy/node-config-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.0.2",
- "@smithy/types": "^4.2.0",
- "@smithy/url-parser": "^4.0.2",
- "@smithy/util-middleware": "^4.0.2",
+ "@smithy/core": "^3.7.1",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-middleware": "^4.0.4",
"tslib": "^2.6.2"
},
"engines": {
@@ -13492,18 +14560,18 @@
}
},
"node_modules/@smithy/middleware-retry": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.6.tgz",
- "integrity": "sha512-bl8q95nvCf7d22spxsBfs2giUDFf7prWLAxF5tmfgGBYHbUNW+OfnwMnabC15GMLA2AoE4HOtQR18a59lx6Blw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/node-config-provider": "^4.1.1",
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/service-error-classification": "^4.0.3",
- "@smithy/smithy-client": "^4.2.5",
- "@smithy/types": "^4.2.0",
- "@smithy/util-middleware": "^4.0.2",
- "@smithy/util-retry": "^4.0.3",
+ "version": "4.1.17",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.17.tgz",
+ "integrity": "sha512-gsCimeG6BApj0SBecwa1Be+Z+JOJe46iy3B3m3A8jKJHf7eIihP76Is4LwLrbJ1ygoS7Vg73lfqzejmLOrazUA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/service-error-classification": "^4.0.6",
+ "@smithy/smithy-client": "^4.4.8",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
"tslib": "^2.6.2",
"uuid": "^9.0.1"
},
@@ -13512,13 +14580,13 @@
}
},
"node_modules/@smithy/middleware-serde": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.4.tgz",
- "integrity": "sha512-CaLvBtz+Xgs7eOwoinTXhZ02/9u8b28RT8lQAaDh7Q59nygeYYp1UiJjwl6zsay+lp0qVT/S7qLVI5RgcxjyfQ==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz",
+ "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/types": "^4.2.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13526,12 +14594,12 @@
}
},
"node_modules/@smithy/middleware-stack": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz",
- "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz",
+ "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13539,14 +14607,14 @@
}
},
"node_modules/@smithy/node-config-provider": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.1.tgz",
- "integrity": "sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz",
+ "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/property-provider": "^4.0.2",
- "@smithy/shared-ini-file-loader": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13554,15 +14622,15 @@
}
},
"node_modules/@smithy/node-http-handler": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz",
- "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz",
+ "integrity": "sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/abort-controller": "^4.0.2",
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/querystring-builder": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/abort-controller": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/querystring-builder": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13570,12 +14638,12 @@
}
},
"node_modules/@smithy/property-provider": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz",
- "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz",
+ "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13583,12 +14651,12 @@
}
},
"node_modules/@smithy/protocol-http": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz",
- "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz",
+ "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13596,12 +14664,12 @@
}
},
"node_modules/@smithy/querystring-builder": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz",
- "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz",
+ "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"@smithy/util-uri-escape": "^4.0.0",
"tslib": "^2.6.2"
},
@@ -13610,12 +14678,12 @@
}
},
"node_modules/@smithy/querystring-parser": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz",
- "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz",
+ "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13623,24 +14691,24 @@
}
},
"node_modules/@smithy/service-error-classification": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz",
- "integrity": "sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz",
+ "integrity": "sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0"
+ "@smithy/types": "^4.3.1"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@smithy/shared-ini-file-loader": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz",
- "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz",
+ "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13648,16 +14716,16 @@
}
},
"node_modules/@smithy/signature-v4": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.0.tgz",
- "integrity": "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz",
+ "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/is-array-buffer": "^4.0.0",
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/types": "^4.2.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
"@smithy/util-hex-encoding": "^4.0.0",
- "@smithy/util-middleware": "^4.0.2",
+ "@smithy/util-middleware": "^4.0.4",
"@smithy/util-uri-escape": "^4.0.0",
"@smithy/util-utf8": "^4.0.0",
"tslib": "^2.6.2"
@@ -13692,17 +14760,17 @@
}
},
"node_modules/@smithy/smithy-client": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.5.tgz",
- "integrity": "sha512-T3gA/TShe52Ln0ywWGVoDiqRvaxqvrU0CKRRmzT71/I1rRBD8mY85rvMMME6vw5RpBLJC9ADmXSLmpohF7RRhA==",
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.8.tgz",
+ "integrity": "sha512-pcW691/lx7V54gE+dDGC26nxz8nrvnvRSCJaIYD6XLPpOInEZeKdV/SpSux+wqeQ4Ine7LJQu8uxMvobTIBK0w==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^3.3.2",
- "@smithy/middleware-endpoint": "^4.1.5",
- "@smithy/middleware-stack": "^4.0.2",
- "@smithy/protocol-http": "^5.1.0",
- "@smithy/types": "^4.2.0",
- "@smithy/util-stream": "^4.2.0",
+ "@smithy/core": "^3.7.1",
+ "@smithy/middleware-endpoint": "^4.1.16",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-stream": "^4.2.3",
"tslib": "^2.6.2"
},
"engines": {
@@ -13710,9 +14778,9 @@
}
},
"node_modules/@smithy/types": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz",
- "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz",
+ "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -13722,13 +14790,13 @@
}
},
"node_modules/@smithy/url-parser": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz",
- "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz",
+ "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/querystring-parser": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/querystring-parser": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13812,14 +14880,14 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.13.tgz",
- "integrity": "sha512-HCLfXAyTEpVWLuyxDABg8UQukeRwChL1UErpSQ4KJK2ZoadmXuQY68pTL9KcuEtasTkIjnzyLUL9vhLdJ3VFHQ==",
+ "version": "4.0.24",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.24.tgz",
+ "integrity": "sha512-UkQNgaQ+bidw1MgdgPO1z1k95W/v8Ej/5o/T/Is8PiVUYPspl/ZxV6WO/8DrzZQu5ULnmpB9CDdMSRwgRc21AA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/property-provider": "^4.0.2",
- "@smithy/smithy-client": "^4.2.5",
- "@smithy/types": "^4.2.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/smithy-client": "^4.4.8",
+ "@smithy/types": "^4.3.1",
"bowser": "^2.11.0",
"tslib": "^2.6.2"
},
@@ -13828,17 +14896,17 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.13.tgz",
- "integrity": "sha512-lu8E2RyzKzzFbNu4ICmY/2HltMZlJxMNg3saJ+r8I9vWbWbwdX7GOWUJdP4fbjEOm6aa52mnnd+uIRrT3dNEyA==",
+ "version": "4.0.24",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.24.tgz",
+ "integrity": "sha512-phvGi/15Z4MpuQibTLOYIumvLdXb+XIJu8TA55voGgboln85jytA3wiD7CkUE8SNcWqkkb+uptZKPiuFouX/7g==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/config-resolver": "^4.1.2",
- "@smithy/credential-provider-imds": "^4.0.4",
- "@smithy/node-config-provider": "^4.1.1",
- "@smithy/property-provider": "^4.0.2",
- "@smithy/smithy-client": "^4.2.5",
- "@smithy/types": "^4.2.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/smithy-client": "^4.4.8",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13846,13 +14914,13 @@
}
},
"node_modules/@smithy/util-endpoints": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.4.tgz",
- "integrity": "sha512-VfFATC1bmZLV2858B/O1NpMcL32wYo8DPPhHxYxDCodDl3f3mSZ5oJheW1IF91A0EeAADz2WsakM/hGGPGNKLg==",
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz",
+ "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^4.1.1",
- "@smithy/types": "^4.2.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13872,12 +14940,12 @@
}
},
"node_modules/@smithy/util-middleware": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz",
- "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz",
+ "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^4.2.0",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13885,13 +14953,13 @@
}
},
"node_modules/@smithy/util-retry": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.3.tgz",
- "integrity": "sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz",
+ "integrity": "sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/service-error-classification": "^4.0.3",
- "@smithy/types": "^4.2.0",
+ "@smithy/service-error-classification": "^4.0.6",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -13899,14 +14967,14 @@
}
},
"node_modules/@smithy/util-stream": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz",
- "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz",
+ "integrity": "sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/fetch-http-handler": "^5.0.2",
- "@smithy/node-http-handler": "^4.0.4",
- "@smithy/types": "^4.2.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/types": "^4.3.1",
"@smithy/util-base64": "^4.0.0",
"@smithy/util-buffer-from": "^4.0.0",
"@smithy/util-hex-encoding": "^4.0.0",
@@ -13993,13 +15061,13 @@
}
},
"node_modules/@smithy/util-waiter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.3.tgz",
- "integrity": "sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.6.tgz",
+ "integrity": "sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==",
"license": "Apache-2.0",
"dependencies": {
- "@smithy/abort-controller": "^4.0.2",
- "@smithy/types": "^4.2.0",
+ "@smithy/abort-controller": "^4.0.4",
+ "@smithy/types": "^4.3.1",
"tslib": "^2.6.2"
},
"engines": {
@@ -34730,6 +35798,8 @@
"@aws-cdk/aws-lambda-python-alpha": "^2.154.1-alpha.0",
"@aws-sdk/client-bedrock-agent": "^3.755.0",
"@aws-sdk/client-bedrock-agent-runtime": "^3.755.0",
+ "@aws-sdk/client-bedrock-agentcore": "^3.755.0",
+ "@aws-sdk/client-bedrock-agentcore-control": "^3.755.0",
"@aws-sdk/client-bedrock-runtime": "^3.755.0",
"@aws-sdk/client-dynamodb": "^3.755.0",
"@aws-sdk/client-kendra": "^3.755.0",
@@ -34804,6 +35874,7 @@
"dependencies": {
"@aws-amplify/ui-react": "^6.1.12",
"@aws-crypto/sha256-js": "^5.2.0",
+ "@aws-sdk/client-bedrock-agentcore": "^3.755.0",
"@aws-sdk/client-cognito-identity": "^3.755.0",
"@aws-sdk/client-kendra": "^3.755.0",
"@aws-sdk/client-lambda": "^3.755.0",
diff --git a/packages/cdk/.eslintrc.cjs b/packages/cdk/.eslintrc.cjs
index e3461b171..71f92c755 100644
--- a/packages/cdk/.eslintrc.cjs
+++ b/packages/cdk/.eslintrc.cjs
@@ -5,7 +5,7 @@ module.exports = {
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
],
- ignorePatterns: ['cdk.out', '.eslintrc.cjs'],
+ ignorePatterns: ['cdk.out', '.eslintrc.cjs', 'custom-resources/**', 'dist'],
parser: '@typescript-eslint/parser',
parserOptions: {
project: './tsconfig.json',
diff --git a/packages/cdk/.gitignore b/packages/cdk/.gitignore
index 53ee0de10..ee0357ea7 100644
--- a/packages/cdk/.gitignore
+++ b/packages/cdk/.gitignore
@@ -1,5 +1,4 @@
*.js
-!jest.config.js
*.d.ts
node_modules
**/__pycache__/**
@@ -7,4 +6,4 @@ node_modules
# CDK asset staging directory
.cdk.staging
cdk.out
-!custom-resources/*.js
+!custom-resources/**/*.js
diff --git a/packages/cdk/cdk.json b/packages/cdk/cdk.json
index 846abfd64..ef84f40b5 100644
--- a/packages/cdk/cdk.json
+++ b/packages/cdk/cdk.json
@@ -62,6 +62,8 @@
"inlineAgents": false,
"mcpEnabled": false,
"flows": [],
+ "createGenericAgentCoreRuntime": false,
+ "agentCoreExternalRuntimes": [],
"allowedIpV4AddressRanges": null,
"allowedIpV6AddressRanges": null,
"allowedCountryCodes": null,
diff --git a/packages/cdk/custom-resources/agent-core-runtime/.gitignore b/packages/cdk/custom-resources/agent-core-runtime/.gitignore
new file mode 100644
index 000000000..9cf4150d3
--- /dev/null
+++ b/packages/cdk/custom-resources/agent-core-runtime/.gitignore
@@ -0,0 +1,28 @@
+# TypeScript compilation outputs
+*.js
+*.d.ts
+*.js.map
+
+# Dependencies
+node_modules/
+
+# Logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Coverage directory used by tools like istanbul
+coverage/
+
+# Editor directories and files
+.vscode/
+.idea/
+*.swp
+*.swo
\ No newline at end of file
diff --git a/packages/cdk/custom-resources/agent-core-runtime/index.ts b/packages/cdk/custom-resources/agent-core-runtime/index.ts
new file mode 100644
index 000000000..d896f9039
--- /dev/null
+++ b/packages/cdk/custom-resources/agent-core-runtime/index.ts
@@ -0,0 +1,301 @@
+import {
+ BedrockAgentCoreControlClient,
+ CreateAgentRuntimeCommand,
+ UpdateAgentRuntimeCommand,
+ DeleteAgentRuntimeCommand,
+ CreateAgentRuntimeRequest,
+ UpdateAgentRuntimeRequest,
+} from '@aws-sdk/client-bedrock-agentcore-control';
+
+// Types for Custom Resource
+interface CloudFormationCustomResourceEvent {
+ RequestType: 'Create' | 'Update' | 'Delete';
+ ResponseURL: string;
+ StackId: string;
+ RequestId: string;
+ ResourceType: string;
+ LogicalResourceId: string;
+ ResourceProperties: {
+ AgentCoreRuntimeName: string;
+ RoleArn: string;
+ NetworkMode: string;
+ ServerProtocol: string;
+ CustomConfig: Record
;
+ };
+ PhysicalResourceId?: string;
+}
+
+interface AgentCoreRuntimeConfig {
+ name: string;
+ roleArn: string;
+ networkMode: string;
+ serverProtocol: string;
+ containerImageUri: string;
+ environmentVariables?: Record;
+}
+
+interface CustomResourceResponse {
+ PhysicalResourceId: string;
+ Data?: {
+ AgentCoreRuntimeId: string;
+ AgentCoreRuntimeArn: string;
+ };
+}
+
+/**
+ * Create AgentCore Runtime using AWS SDK
+ */
+async function createAgentRuntime(
+ client: BedrockAgentCoreControlClient,
+ config: AgentCoreRuntimeConfig
+): Promise<{ agentRuntimeId: string; agentRuntimeArn: string }> {
+ console.log(`Creating AgentCore Runtime: ${config.name}`);
+
+ if (!config.containerImageUri) {
+ throw new Error('containerImageUri is required for AgentCore Runtime');
+ }
+ if (!config.serverProtocol) {
+ throw new Error('serverProtocol is required for AgentCore Runtime');
+ }
+
+ const createParams: CreateAgentRuntimeRequest = {
+ agentRuntimeName: config.name,
+ agentRuntimeArtifact: {
+ containerConfiguration: {
+ containerUri: config.containerImageUri,
+ },
+ },
+ roleArn: config.roleArn,
+ networkConfiguration: {
+ networkMode: (config.networkMode === 'DEFAULT'
+ ? 'PUBLIC'
+ : config.networkMode) as any,
+ },
+ protocolConfiguration: {
+ serverProtocol: config.serverProtocol as any,
+ },
+ ...(config.environmentVariables && {
+ environmentVariables: config.environmentVariables,
+ }),
+ };
+
+ console.log('Create parameters:', JSON.stringify(createParams, null, 2));
+
+ const command = new CreateAgentRuntimeCommand(createParams);
+ const response = await client.send(command);
+
+ if (!response.agentRuntimeId || !response.agentRuntimeArn) {
+ throw new Error(
+ 'Failed to create AgentCore Runtime - missing ID or ARN in response'
+ );
+ }
+
+ console.log(
+ `Successfully created AgentCore Runtime: ${response.agentRuntimeId}`
+ );
+
+ return {
+ agentRuntimeId: response.agentRuntimeId,
+ agentRuntimeArn: response.agentRuntimeArn,
+ };
+}
+
+/**
+ * Update AgentCore Runtime using AWS SDK
+ */
+async function updateAgentRuntime(
+ client: BedrockAgentCoreControlClient,
+ agentRuntimeId: string,
+ config: AgentCoreRuntimeConfig
+): Promise<{ agentRuntimeId: string; agentRuntimeArn: string }> {
+ console.log(`Updating AgentCore Runtime: ${agentRuntimeId}`);
+
+ if (!config.containerImageUri) {
+ throw new Error(
+ 'containerImageUri is required for AgentCore Runtime update'
+ );
+ }
+ if (!config.serverProtocol) {
+ throw new Error('serverProtocol is required for AgentCore Runtime update');
+ }
+
+ const updateParams: UpdateAgentRuntimeRequest = {
+ agentRuntimeId,
+ agentRuntimeArtifact: {
+ containerConfiguration: {
+ containerUri: config.containerImageUri,
+ },
+ },
+ roleArn: config.roleArn,
+ networkConfiguration: {
+ networkMode: (config.networkMode === 'DEFAULT'
+ ? 'PUBLIC'
+ : config.networkMode) as any,
+ },
+ protocolConfiguration: {
+ serverProtocol: config.serverProtocol as any,
+ },
+ ...(config.environmentVariables && {
+ environmentVariables: config.environmentVariables,
+ }),
+ };
+
+ console.log('Update parameters:', JSON.stringify(updateParams, null, 2));
+
+ const command = new UpdateAgentRuntimeCommand(updateParams);
+ const response = await client.send(command);
+
+ console.log(`Successfully updated AgentCore Runtime: ${agentRuntimeId}`);
+
+ return {
+ agentRuntimeId,
+ agentRuntimeArn:
+ response.agentRuntimeArn ||
+ `arn:aws:bedrock-agentcore:${process.env.AWS_REGION}:${process.env.AWS_ACCOUNT_ID}:runtime/${agentRuntimeId}`,
+ };
+}
+
+/**
+ * Delete AgentCore Runtime using AWS SDK
+ */
+async function deleteAgentRuntime(
+ client: BedrockAgentCoreControlClient,
+ agentRuntimeId: string
+): Promise {
+ console.log(`Deleting AgentCore Runtime: ${agentRuntimeId}`);
+
+ try {
+ const deleteParams = { agentRuntimeId };
+ const command = new DeleteAgentRuntimeCommand(deleteParams);
+ await client.send(command);
+ console.log(`Successfully deleted AgentCore Runtime: ${agentRuntimeId}`);
+ } catch (error: any) {
+ console.log(`Delete error for AgentCore Runtime ${agentRuntimeId}:`, error);
+
+ // Simplified error handling: Only handle resource not found
+ if (
+ error.name === 'ResourceNotFoundException' ||
+ error.message?.includes('not found') ||
+ error.message?.includes('does not exist')
+ ) {
+ console.log(
+ `AgentCore Runtime ${agentRuntimeId} already deleted or not found`
+ );
+ return; // Success case
+ }
+
+ // For all other errors, let them bubble up
+ // CloudFormation will handle resource abandonment as designed
+ throw error;
+ }
+}
+
+/**
+ * Main Lambda handler for CustomResource using Provider Framework
+ */
+export async function handler(
+ event: CloudFormationCustomResourceEvent
+): Promise {
+ console.log('Received event:', JSON.stringify(event, null, 2));
+
+ const { RequestType, ResourceProperties, PhysicalResourceId } = event;
+ const {
+ AgentCoreRuntimeName: agentRuntimeName,
+ CustomConfig: customConfig = {},
+ RoleArn: roleArn,
+ NetworkMode: networkMode,
+ ServerProtocol: serverProtocol,
+ } = ResourceProperties;
+
+ // Extract configuration
+ const config: AgentCoreRuntimeConfig = {
+ name: agentRuntimeName,
+ roleArn,
+ networkMode,
+ serverProtocol,
+ containerImageUri: (customConfig as any).containerImageUri,
+ environmentVariables: (customConfig as any).environmentVariables,
+ };
+
+ const client = new BedrockAgentCoreControlClient({
+ region: process.env.AWS_REGION,
+ });
+
+ try {
+ switch (RequestType) {
+ case 'Create': {
+ const { agentRuntimeId, agentRuntimeArn } = await createAgentRuntime(
+ client,
+ config
+ );
+
+ return {
+ PhysicalResourceId: agentRuntimeId,
+ Data: {
+ AgentCoreRuntimeId: agentRuntimeId,
+ AgentCoreRuntimeArn: agentRuntimeArn,
+ },
+ };
+ }
+
+ case 'Update': {
+ if (!PhysicalResourceId) {
+ throw new Error('PhysicalResourceId is required for Update');
+ }
+
+ const { agentRuntimeId, agentRuntimeArn } = await updateAgentRuntime(
+ client,
+ PhysicalResourceId,
+ config
+ );
+
+ return {
+ PhysicalResourceId: agentRuntimeId,
+ Data: {
+ AgentCoreRuntimeId: agentRuntimeId,
+ AgentCoreRuntimeArn: agentRuntimeArn,
+ },
+ };
+ }
+
+ case 'Delete': {
+ console.log(
+ `Processing Delete request for PhysicalResourceId: ${PhysicalResourceId}`
+ );
+
+ // Simple validation: Only process if we have a valid resource ID
+ if (
+ !PhysicalResourceId ||
+ PhysicalResourceId === 'deleted' ||
+ PhysicalResourceId === 'failed'
+ ) {
+ console.log(`No valid resource to delete: ${PhysicalResourceId}`);
+ return {
+ PhysicalResourceId: PhysicalResourceId || 'deleted',
+ };
+ }
+
+ // Simple delete operation - let errors bubble up naturally
+ await deleteAgentRuntime(client, PhysicalResourceId);
+
+ return {
+ PhysicalResourceId: PhysicalResourceId,
+ };
+ }
+
+ default:
+ throw new Error(`Unknown request type: ${RequestType}`);
+ }
+ } catch (error) {
+ console.error('Error processing request:', error);
+ console.log('Request details:', {
+ RequestType,
+ PhysicalResourceId,
+ LogicalResourceId: event.LogicalResourceId,
+ });
+
+ // Simple error handling: Re-throw the error
+ // Provider Framework will handle CloudFormation response
+ throw error;
+ }
+}
diff --git a/packages/cdk/custom-resources/agent-core-runtime/package-lock.json b/packages/cdk/custom-resources/agent-core-runtime/package-lock.json
new file mode 100644
index 000000000..014820610
--- /dev/null
+++ b/packages/cdk/custom-resources/agent-core-runtime/package-lock.json
@@ -0,0 +1,1318 @@
+{
+ "name": "agent-core-runtime-custom-resource",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "agent-core-runtime-custom-resource",
+ "version": "1.0.0",
+ "dependencies": {
+ "@aws-sdk/client-bedrock-agentcore-control": "^3.755.0"
+ },
+ "devDependencies": {
+ "@types/node": "^20.0.0",
+ "typescript": "^5.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
+ "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-js": "^5.2.0",
+ "@aws-crypto/supports-web-crypto": "^5.2.0",
+ "@aws-crypto/util": "^5.2.0",
+ "@aws-sdk/types": "^3.222.0",
+ "@aws-sdk/util-locate-window": "^3.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
+ "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
+ "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
+ "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/util": "^5.2.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/supports-web-crypto": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
+ "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-crypto/util": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
+ "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "^3.222.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
+ "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
+ "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-agentcore-control": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-agentcore-control/-/client-bedrock-agentcore-control-3.848.0.tgz",
+ "integrity": "sha512-mePD3XiAHt1Jc2d0A6wJa00IXGiHEIJKobYpSwmR18w5O47reOVf2PANkTC2t9nQ7LwfZQ5VI5eYLfpI2Gn3DA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/credential-provider-node": "3.848.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "@smithy/util-waiter": "^4.0.6",
+ "@types/uuid": "^9.0.1",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.848.0.tgz",
+ "integrity": "sha512-mD+gOwoeZQvbecVLGoCmY6pS7kg02BHesbtIxUj+PeBqYoZV5uLvjUOmuGfw1SfoSobKvS11urxC9S7zxU/Maw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/core": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.846.0.tgz",
+ "integrity": "sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/xml-builder": "3.821.0",
+ "@smithy/core": "^3.7.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/signature-v4": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-utf8": "^4.0.0",
+ "fast-xml-parser": "5.2.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.846.0.tgz",
+ "integrity": "sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.846.0.tgz",
+ "integrity": "sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-stream": "^4.2.3",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.848.0.tgz",
+ "integrity": "sha512-r6KWOG+En2xujuMhgZu7dzOZV3/M5U/5+PXrG8dLQ3rdPRB3vgp5tc56KMqLwm/EXKRzAOSuw/UE4HfNOAB8Hw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/credential-provider-env": "3.846.0",
+ "@aws-sdk/credential-provider-http": "3.846.0",
+ "@aws-sdk/credential-provider-process": "3.846.0",
+ "@aws-sdk/credential-provider-sso": "3.848.0",
+ "@aws-sdk/credential-provider-web-identity": "3.848.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.848.0.tgz",
+ "integrity": "sha512-AblNesOqdzrfyASBCo1xW3uweiSro4Kft9/htdxLeCVU1KVOnFWA5P937MNahViRmIQm2sPBCqL8ZG0u9lnh5g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.846.0",
+ "@aws-sdk/credential-provider-http": "3.846.0",
+ "@aws-sdk/credential-provider-ini": "3.848.0",
+ "@aws-sdk/credential-provider-process": "3.846.0",
+ "@aws-sdk/credential-provider-sso": "3.848.0",
+ "@aws-sdk/credential-provider-web-identity": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.846.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.846.0.tgz",
+ "integrity": "sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.848.0.tgz",
+ "integrity": "sha512-pozlDXOwJZL0e7w+dqXLgzVDB7oCx4WvtY0sk6l4i07uFliWF/exupb6pIehFWvTUcOvn5aFTTqcQaEzAD5Wsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.848.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/token-providers": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.848.0.tgz",
+ "integrity": "sha512-D1fRpwPxtVDhcSc/D71exa2gYweV+ocp4D3brF0PgFd//JR3XahZ9W24rVnTQwYEcK9auiBZB89Ltv+WbWN8qw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz",
+ "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz",
+ "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz",
+ "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.848.0.tgz",
+ "integrity": "sha512-rjMuqSWJEf169/ByxvBqfdei1iaduAnfolTshsZxwcmLIUtbYrFUmts0HrLQqsAG8feGPpDLHA272oPl+NTCCA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@smithy/core": "^3.7.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/nested-clients": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.848.0.tgz",
+ "integrity": "sha512-joLsyyo9u61jnZuyYzo1z7kmS7VgWRAkzSGESVzQHfOA1H2PYeUFek6vLT4+c9xMGrX/Z6B0tkRdzfdOPiatLg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/middleware-host-header": "3.840.0",
+ "@aws-sdk/middleware-logger": "3.840.0",
+ "@aws-sdk/middleware-recursion-detection": "3.840.0",
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/region-config-resolver": "3.840.0",
+ "@aws-sdk/types": "3.840.0",
+ "@aws-sdk/util-endpoints": "3.848.0",
+ "@aws-sdk/util-user-agent-browser": "3.840.0",
+ "@aws-sdk/util-user-agent-node": "3.848.0",
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/core": "^3.7.0",
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/hash-node": "^4.0.4",
+ "@smithy/invalid-dependency": "^4.0.4",
+ "@smithy/middleware-content-length": "^4.0.4",
+ "@smithy/middleware-endpoint": "^4.1.15",
+ "@smithy/middleware-retry": "^4.1.16",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/smithy-client": "^4.4.7",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.23",
+ "@smithy/util-defaults-mode-node": "^4.0.23",
+ "@smithy/util-endpoints": "^3.0.6",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz",
+ "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-config-provider": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/token-providers": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.848.0.tgz",
+ "integrity": "sha512-oNPyM4+Di2Umu0JJRFSxDcKQ35+Chl/rAwD47/bS0cDPI8yrao83mLXLeDqpRPHyQW4sXlP763FZcuAibC0+mg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.846.0",
+ "@aws-sdk/nested-clients": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/types": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz",
+ "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.848.0.tgz",
+ "integrity": "sha512-fY/NuFFCq/78liHvRyFKr+aqq1aA/uuVSANjzr5Ym8c+9Z3HRPE9OrExAHoMrZ6zC8tHerQwlsXYYH5XZ7H+ww==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-endpoints": "^3.0.6",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-locate-window": {
+ "version": "3.804.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz",
+ "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.840.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz",
+ "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/types": "^4.3.1",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.848.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.848.0.tgz",
+ "integrity": "sha512-Zz1ft9NiLqbzNj/M0jVNxaoxI2F4tGXN0ZbZIj+KJ+PbJo+w5+Jo6d0UDAtbj3AEd79pjcCaP4OA9NTVzItUdw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-user-agent": "3.848.0",
+ "@aws-sdk/types": "3.840.0",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-sdk/xml-builder": {
+ "version": "3.821.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz",
+ "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/abort-controller": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz",
+ "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/config-resolver": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz",
+ "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-config-provider": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/core": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.7.1.tgz",
+ "integrity": "sha512-ExRCsHnXFtBPnM7MkfKBPcBBdHw1h/QS/cbNw4ho95qnyNHvnpmGbR39MIAv9KggTr5qSPxRSEL+hRXlyGyGQw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-stream": "^4.2.3",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/credential-provider-imds": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz",
+ "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/fetch-http-handler": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz",
+ "integrity": "sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/querystring-builder": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-base64": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/hash-node": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz",
+ "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-buffer-from": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/invalid-dependency": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz",
+ "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/is-array-buffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz",
+ "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-content-length": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz",
+ "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-endpoint": {
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.16.tgz",
+ "integrity": "sha512-plpa50PIGLqzMR2ANKAw2yOW5YKS626KYKqae3atwucbz4Ve4uQ9K9BEZxDLIFmCu7hKLcrq2zmj4a+PfmUV5w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/core": "^3.7.1",
+ "@smithy/middleware-serde": "^4.0.8",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "@smithy/url-parser": "^4.0.4",
+ "@smithy/util-middleware": "^4.0.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-retry": {
+ "version": "4.1.17",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.17.tgz",
+ "integrity": "sha512-gsCimeG6BApj0SBecwa1Be+Z+JOJe46iy3B3m3A8jKJHf7eIihP76Is4LwLrbJ1ygoS7Vg73lfqzejmLOrazUA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/service-error-classification": "^4.0.6",
+ "@smithy/smithy-client": "^4.4.8",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-retry": "^4.0.6",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-serde": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz",
+ "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-stack": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz",
+ "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/node-config-provider": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz",
+ "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/shared-ini-file-loader": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/node-http-handler": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz",
+ "integrity": "sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/querystring-builder": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/property-provider": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz",
+ "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/protocol-http": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz",
+ "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-builder": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz",
+ "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-uri-escape": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-parser": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz",
+ "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/service-error-classification": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz",
+ "integrity": "sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/shared-ini-file-loader": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz",
+ "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/signature-v4": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz",
+ "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^4.0.0",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-hex-encoding": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.4",
+ "@smithy/util-uri-escape": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/smithy-client": {
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.8.tgz",
+ "integrity": "sha512-pcW691/lx7V54gE+dDGC26nxz8nrvnvRSCJaIYD6XLPpOInEZeKdV/SpSux+wqeQ4Ine7LJQu8uxMvobTIBK0w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/core": "^3.7.1",
+ "@smithy/middleware-endpoint": "^4.1.16",
+ "@smithy/middleware-stack": "^4.0.4",
+ "@smithy/protocol-http": "^5.1.2",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-stream": "^4.2.3",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/types": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz",
+ "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/url-parser": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz",
+ "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-base64": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz",
+ "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-browser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz",
+ "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-node": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz",
+ "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-buffer-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz",
+ "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-config-provider": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz",
+ "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "4.0.24",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.24.tgz",
+ "integrity": "sha512-UkQNgaQ+bidw1MgdgPO1z1k95W/v8Ej/5o/T/Is8PiVUYPspl/ZxV6WO/8DrzZQu5ULnmpB9CDdMSRwgRc21AA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/smithy-client": "^4.4.8",
+ "@smithy/types": "^4.3.1",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-node": {
+ "version": "4.0.24",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.24.tgz",
+ "integrity": "sha512-phvGi/15Z4MpuQibTLOYIumvLdXb+XIJu8TA55voGgboln85jytA3wiD7CkUE8SNcWqkkb+uptZKPiuFouX/7g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^4.1.4",
+ "@smithy/credential-provider-imds": "^4.0.6",
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/property-provider": "^4.0.4",
+ "@smithy/smithy-client": "^4.4.8",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-endpoints": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz",
+ "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.3",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-hex-encoding": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz",
+ "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-middleware": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz",
+ "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-retry": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz",
+ "integrity": "sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/service-error-classification": "^4.0.6",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-stream": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz",
+ "integrity": "sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^5.1.0",
+ "@smithy/node-http-handler": "^4.1.0",
+ "@smithy/types": "^4.3.1",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-buffer-from": "^4.0.0",
+ "@smithy/util-hex-encoding": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-uri-escape": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz",
+ "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-utf8": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz",
+ "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-waiter": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.6.tgz",
+ "integrity": "sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^4.0.4",
+ "@smithy/types": "^4.3.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.19.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz",
+ "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@types/uuid": {
+ "version": "9.0.8",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz",
+ "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==",
+ "license": "MIT"
+ },
+ "node_modules/bowser": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
+ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
+ "license": "MIT"
+ },
+ "node_modules/fast-xml-parser": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
+ "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "strnum": "^2.1.0"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
+ "node_modules/strnum": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
+ "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ }
+ }
+}
diff --git a/packages/cdk/custom-resources/agent-core-runtime/package.json b/packages/cdk/custom-resources/agent-core-runtime/package.json
new file mode 100644
index 000000000..543d08278
--- /dev/null
+++ b/packages/cdk/custom-resources/agent-core-runtime/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "agent-core-runtime-custom-resource",
+ "private": true,
+ "version": "1.0.0",
+ "description": "CustomResource for managing AWS Bedrock AgentCore Runtimes",
+ "main": "index.js",
+ "scripts": {
+ "build": "tsc",
+ "clean": "rm -rf dist *.js *.d.ts",
+ "prebuild": "npm run clean"
+ },
+ "dependencies": {
+ "@aws-sdk/client-bedrock-agentcore-control": "^3.755.0"
+ },
+ "devDependencies": {
+ "@types/node": "^20.0.0",
+ "typescript": "^5.0.0"
+ }
+}
diff --git a/packages/cdk/custom-resources/agent-core-runtime/tsconfig.json b/packages/cdk/custom-resources/agent-core-runtime/tsconfig.json
new file mode 100644
index 000000000..deaa5c919
--- /dev/null
+++ b/packages/cdk/custom-resources/agent-core-runtime/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "module": "commonjs",
+ "lib": ["ES2020"],
+ "outDir": "./",
+ "rootDir": "./",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "declaration": true,
+ "declarationMap": false,
+ "sourceMap": false,
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["*.ts"],
+ "exclude": ["node_modules", "**/*.test.ts", "**/*.spec.ts"]
+}
diff --git a/packages/cdk/custom-resources/oss-index.js b/packages/cdk/custom-resources/opensearch-index/oss-index.js
similarity index 100%
rename from packages/cdk/custom-resources/oss-index.js
rename to packages/cdk/custom-resources/opensearch-index/oss-index.js
diff --git a/packages/cdk/custom-resources/package-lock.json b/packages/cdk/custom-resources/opensearch-index/package-lock.json
similarity index 99%
rename from packages/cdk/custom-resources/package-lock.json
rename to packages/cdk/custom-resources/opensearch-index/package-lock.json
index 1deb8db18..dfc87a4b0 100644
--- a/packages/cdk/custom-resources/package-lock.json
+++ b/packages/cdk/custom-resources/opensearch-index/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "custom-resources",
+ "name": "opensearch-index",
"lockfileVersion": 3,
"requires": true,
"packages": {
diff --git a/packages/cdk/custom-resources/package.json b/packages/cdk/custom-resources/opensearch-index/package.json
similarity index 100%
rename from packages/cdk/custom-resources/package.json
rename to packages/cdk/custom-resources/opensearch-index/package.json
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/.dockerignore b/packages/cdk/lambda-python/generic-agent-core-runtime/.dockerignore
new file mode 100644
index 000000000..b7be024ec
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/.dockerignore
@@ -0,0 +1,89 @@
+# Git
+.git
+.gitignore
+.gitattributes
+
+
+# CI
+.codeclimate.yml
+.travis.yml
+.taskcluster.yml
+
+# Docker
+docker-compose.yml
+Dockerfile
+.docker
+.dockerignore
+
+# Byte-compiled / optimized / DLL files
+**/__pycache__/
+**/*.py[cod]
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Virtual environment
+.env
+.venv/
+venv/
+
+# PyCharm
+.idea
+
+# Python mode for VIM
+.ropeproject
+**/.ropeproject
+
+# Vim swap files
+**/*.swp
+
+# VS Code
+.vscode/
\ No newline at end of file
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/.gitignore b/packages/cdk/lambda-python/generic-agent-core-runtime/.gitignore
new file mode 100644
index 000000000..393290e4f
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/.gitignore
@@ -0,0 +1,66 @@
+# Environment variables
+.env
+
+# Python
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# Virtual environments
+.venv/
+venv/
+ENV/
+env/
+
+# UV
+.uv/
+
+# IDE
+.vscode/
+.idea/
+*.swp
+*.swo
+
+# OS
+.DS_Store
+Thumbs.db
+
+# Logs
+*.log
+logs/
+
+# Temporary files
+tmp/
+temp/
+.tmp/
+
+# Docker
+.dockerignore
+
+# AWS
+.aws/
+
+# Browser automation
+screenshots/
+.browser_automation/
+
+# RSS feeds storage
+strands_rss_feeds/
\ No newline at end of file
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/.python-version b/packages/cdk/lambda-python/generic-agent-core-runtime/.python-version
new file mode 100644
index 000000000..24ee5b1be
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/.python-version
@@ -0,0 +1 @@
+3.13
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/Dockerfile b/packages/cdk/lambda-python/generic-agent-core-runtime/Dockerfile
new file mode 100644
index 000000000..db5df47fd
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/Dockerfile
@@ -0,0 +1,31 @@
+# Use ARM64 base image for Bedrock AgentCore compatibility
+FROM --platform=linux/arm64 public.ecr.aws/docker/library/python:3.13
+
+WORKDIR /var/task
+
+# Environment variables for UV package manager
+ENV UV_NO_CACHE=1
+ENV UV_NO_MANAGED_PYTHON=1
+ENV UV_PYTHON=/usr/local/bin/python
+ENV UV_INSTALL_DIR=/usr/local/bin
+ENV UV_PROJECT_ENVIRONMENT=/tmp/.venv
+
+# Install system dependencies
+RUN apt-get update -y && apt-get install curl nodejs npm graphviz -y
+RUN curl -LsSf https://astral.sh/uv/install.sh | sh
+
+# Copy dependency files
+COPY pyproject.toml .python-version uv.lock ./
+
+# Install Python dependencies
+RUN uv sync
+
+# Copy application files
+COPY app.py mcp.json ./
+COPY src/ ./src/
+
+# Expose port 8080 as required by AgentCore
+EXPOSE 8080
+
+# Start the application with OpenTelemetry instrumentation
+CMD ["uv", "run", "opentelemetry-instrument", "python", "app.py"]
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/app.py b/packages/cdk/lambda-python/generic-agent-core-runtime/app.py
new file mode 100644
index 000000000..bf62811ed
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/app.py
@@ -0,0 +1,95 @@
+"""Main FastAPI application for Generic AgentCore Runtime."""
+
+import json
+import logging
+import traceback
+from fastapi import FastAPI, Request
+from fastapi.responses import StreamingResponse
+from src.agent import AgentManager
+from src.utils import create_ws_directory, clean_ws_directory, create_error_response
+from src.types import AgentCoreRequest
+
+# Configure root logger
+logging.basicConfig(
+ level=logging.INFO,
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
+)
+logger = logging.getLogger(__name__)
+
+
+# Initialize FastAPI app
+app = FastAPI(
+ title="Generic AgentCore Runtime",
+ description="AWS Bedrock AgentCore Runtime with Strands Agent and MCP support",
+ version="1.0.0",
+)
+
+# Initialize agent manager
+agent_manager = AgentManager()
+
+
+@app.get("/ping")
+async def ping():
+ """Health check endpoint required by AgentCore"""
+ return {"status": "healthy", "service": "generic-agent-core-runtime"}
+
+
+@app.post("/invocations")
+async def invocations(request: Request):
+ """Main invocation endpoint required by AgentCore
+
+ Expects request with messages, system_prompt, prompt, and model
+ """
+ # Get session info from headers
+ headers = dict(request.headers)
+ session_id = headers.get("x-amzn-bedrock-agentcore-runtime-session-id")
+ trace_id = headers.get("x-amzn-trace-id")
+ logger.info(f"New invocation: {session_id} {trace_id}")
+
+ # Set session info in agent manager
+ agent_manager.set_session_info(session_id, trace_id)
+
+ # Ensure workspace directory exists
+ create_ws_directory()
+
+ try:
+ # Read and parse request body
+ body = await request.body()
+ body_str = body.decode()
+ request_data = json.loads(body_str)
+
+ # Handle input field if present (AWS Lambda integration format)
+ if "input" in request_data and isinstance(request_data["input"], dict):
+ request_data = request_data["input"]
+
+ # Extract required fields
+ messages = request_data.get("messages", [])
+ system_prompt = request_data.get("system_prompt")
+ prompt = request_data.get("prompt", [])
+ model_info = request_data.get("model", {})
+
+ # Return streaming response
+ async def generate():
+ try:
+ async for chunk in agent_manager.process_request_streaming(
+ messages=messages,
+ system_prompt=system_prompt,
+ prompt=prompt,
+ model_info=model_info
+ ):
+ yield chunk
+ finally:
+ clean_ws_directory()
+
+ return StreamingResponse(generate(), media_type="text/event-stream")
+ except Exception as e:
+ logger.error(f"Error processing request: {e}")
+ logger.error(traceback.format_exc())
+ return create_error_response(str(e))
+ finally:
+ clean_ws_directory()
+
+
+if __name__ == "__main__":
+ import uvicorn
+ uvicorn.run(app, host="0.0.0.0", port=8080, log_level="warning", access_log=False)
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/docker-compose.yml b/packages/cdk/lambda-python/generic-agent-core-runtime/docker-compose.yml
new file mode 100644
index 000000000..ced5ded50
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/docker-compose.yml
@@ -0,0 +1,63 @@
+version: '3.8'
+
+services:
+ generic-agent-core-runtime:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ ports:
+ - '8080:8080'
+ environment:
+ # AWS credentials (use your local credentials or set these)
+ - AWS_REGION=us-east-1
+ - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
+ - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
+ - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}
+
+ # Optional: S3 bucket for file uploads (set if you want to test file uploads)
+ - FILE_BUCKET=${FILE_BUCKET:-test-bucket}
+
+ # Agent Core Runtime specific
+ - PYTHONUNBUFFERED=1
+ - LOG_LEVEL=INFO
+
+ # Code Interpreter settings (optional)
+ - CODE_INTERPRETER_REGION=${AWS_REGION:-us-east-1}
+
+ # Browser tool settings (optional)
+ - STRANDS_BROWSER_HEADLESS=true
+ - STRANDS_BROWSER_WIDTH=1280
+ - STRANDS_BROWSER_HEIGHT=800
+ - DISPLAY=:99
+ - CHROMIUM_PATH=/usr/bin/chromium
+ volumes:
+ # Mount source code for development (optional - remove for production)
+ - ./src:/var/task/src:ro
+ - ./app.py:/var/task/app.py:ro
+ - ./mcp.json:/var/task/mcp.json:ro
+
+ # Mount AWS credentials (optional - if using local AWS credentials)
+ - ~/.aws:/root/.aws:ro
+ healthcheck:
+ test: ['CMD', 'curl', '-f', 'http://localhost:8080/ping']
+ interval: 30s
+ timeout: 10s
+ retries: 3
+ start_period: 40s
+ restart: unless-stopped
+
+ # Optional: Add a simple test client
+ test-client:
+ image: curlimages/curl:latest
+ depends_on:
+ - generic-agent-core-runtime
+ command: >
+ sh -c "
+ echo 'Waiting for service to be ready...' &&
+ sleep 10 &&
+ echo 'Testing health endpoint...' &&
+ curl -f http://generic-agent-core-runtime:8080/ping &&
+ echo 'Health check passed!'
+ "
+ profiles:
+ - test
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/mcp.json b/packages/cdk/lambda-python/generic-agent-core-runtime/mcp.json
new file mode 100644
index 000000000..6eadc70af
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/mcp.json
@@ -0,0 +1,37 @@
+{
+ "_comment": "Generic AgentCore Runtime Configuration",
+ "_agentcore_requirements": {
+ "platform": "linux/arm64",
+ "port": 8080,
+ "endpoints": {
+ "/ping": "GET - Health check endpoint",
+ "/invocations": "POST - Main inference endpoint"
+ },
+ "aws_credentials": "Required for Bedrock model access and S3 operations"
+ },
+ "mcpServers": {
+ "time": {
+ "command": "uvx",
+ "args": ["mcp-server-time"]
+ },
+ "awslabs.aws-documentation-mcp-server": {
+ "command": "uvx",
+ "args": ["awslabs.aws-documentation-mcp-server@latest"]
+ },
+ "awslabs.cdk-mcp-server": {
+ "command": "uvx",
+ "args": ["awslabs.cdk-mcp-server@latest"]
+ },
+ "awslabs.aws-diagram-mcp-server": {
+ "command": "uvx",
+ "args": ["awslabs.aws-diagram-mcp-server@latest"]
+ },
+ "awslabs.nova-canvas-mcp-server": {
+ "command": "uvx",
+ "args": ["awslabs.nova-canvas-mcp-server@latest"],
+ "env": {
+ "AWS_REGION": "us-east-1"
+ }
+ }
+ }
+}
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/pyproject.toml b/packages/cdk/lambda-python/generic-agent-core-runtime/pyproject.toml
new file mode 100644
index 000000000..2e774648d
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/pyproject.toml
@@ -0,0 +1,14 @@
+[project]
+name = "generic-agent-core-runtime"
+version = "0.0.1"
+requires-python = ">=3.12"
+dependencies = [
+ "strands-agents>=1.0",
+ "strands-agents-tools[agent_core_code_interpreter,agent_core_browser]",
+ "boto3",
+ "mcp",
+ "fastapi",
+ "uvicorn",
+ "pydantic",
+ "aws-opentelemetry-distro>=0.10.1",
+]
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/src/__init__.py b/packages/cdk/lambda-python/generic-agent-core-runtime/src/__init__.py
new file mode 100644
index 000000000..1d7b16040
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/src/__init__.py
@@ -0,0 +1 @@
+# Empty init file for src package
\ No newline at end of file
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/src/agent.py b/packages/cdk/lambda-python/generic-agent-core-runtime/src/agent.py
new file mode 100644
index 000000000..d335b1c8d
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/src/agent.py
@@ -0,0 +1,84 @@
+"""Agent management for the agent core runtime."""
+
+import boto3
+import json
+import logging
+from strands.models import BedrockModel
+from strands import Agent as StrandsAgent
+from typing import List, Dict, Union, Any, Optional, AsyncGenerator
+from .config import get_system_prompt, extract_model_info
+from .tools import ToolManager
+from .utils import (
+ create_empty_response,
+ create_error_response,
+ process_messages,
+ process_prompt
+)
+from .types import ModelInfo, Message
+
+logger = logging.getLogger(__name__)
+
+
+class AgentManager:
+ """Manages Strands agent creation and execution."""
+
+ def __init__(self):
+ self.tool_manager = ToolManager()
+
+ def set_session_info(self, session_id: str, trace_id: str):
+ """Set session and trace IDs"""
+ self.tool_manager.set_session_info(session_id, trace_id)
+
+ async def process_request_streaming(
+ self,
+ messages: Union[List[Message], List[Dict[str, Any]]],
+ system_prompt: Optional[str],
+ prompt: Union[str, List[Dict[str, Any]]],
+ model_info: ModelInfo,
+ ) -> AsyncGenerator[str, None]:
+ """Process a request and yield streaming responses as raw events"""
+ try:
+ # Get model info
+ model_id, region = extract_model_info(model_info)
+
+ # Combine system prompts
+ combined_system_prompt = get_system_prompt(system_prompt)
+
+ # Get all tools
+ tools = self.tool_manager.get_all_tools()
+
+ # Create boto3 session and Bedrock model
+ session = boto3.Session(region_name=region)
+ bedrock_model = BedrockModel(
+ model_id=model_id,
+ boto_session=session,
+ cache_prompt="default",
+ cache_tools="default",
+ )
+
+ # Process messages and prompt using utility functions
+ processed_messages = process_messages(messages)
+ processed_prompt = process_prompt(prompt)
+
+ # Create Strands agent and stream response
+ agent = StrandsAgent(
+ system_prompt=combined_system_prompt,
+ messages=processed_messages,
+ model=bedrock_model,
+ tools=tools,
+ )
+
+ async for event in agent.stream_async(processed_prompt):
+ if "event" in event:
+ yield json.dumps(event, ensure_ascii=False) + "\n"
+
+ except Exception as e:
+ logger.error(f"Error processing agent request: {e}")
+ error_event = {
+ "event": {
+ "internalServerException": {
+ "message": f"An error occurred while processing your request: {str(e)}",
+ }
+ }
+ }
+ yield json.dumps(error_event, ensure_ascii=False) + "\n"
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/src/config.py b/packages/cdk/lambda-python/generic-agent-core-runtime/src/config.py
new file mode 100644
index 000000000..b6b6c1c77
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/src/config.py
@@ -0,0 +1,75 @@
+"""Configuration and environment setup for the agent core runtime."""
+
+import os
+import logging
+from typing import Dict, Any
+
+# Configure root logger
+logging.basicConfig(
+ level=logging.INFO,
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
+)
+logger = logging.getLogger(__name__)
+
+WORKSPACE_DIR = "/tmp/ws"
+
+FIXED_SYSTEM_PROMPT = f"""## About File Output
+- You are running on AWS Bedrock AgentCore. Therefore, when writing files, always write them under `{WORKSPACE_DIR}`.
+- Similarly, if you need a workspace, please use the `{WORKSPACE_DIR}` directory. Do not ask the user about their current workspace. It's always `{WORKSPACE_DIR}`.
+- Also, users cannot directly access files written under `{WORKSPACE_DIR}`. So when submitting these files to users, *always upload them to S3 using the `upload_file_to_s3_and_retrieve_s3_url` tool and provide the S3 URL*. The S3 URL must be included in the final output.
+- If the output file is an image file, the S3 URL output must be in Markdown format.
+"""
+
+
+def get_aws_credentials() -> Dict[str, str]:
+ """Get AWS credentials from environment or IAM role"""
+ credentials = {}
+
+ if "AWS_ACCESS_KEY_ID" in os.environ:
+ credentials["AWS_ACCESS_KEY_ID"] = os.environ["AWS_ACCESS_KEY_ID"]
+ if "AWS_SECRET_ACCESS_KEY" in os.environ:
+ credentials["AWS_SECRET_ACCESS_KEY"] = os.environ["AWS_SECRET_ACCESS_KEY"]
+ if "AWS_SESSION_TOKEN" in os.environ:
+ credentials["AWS_SESSION_TOKEN"] = os.environ["AWS_SESSION_TOKEN"]
+
+ credentials["AWS_REGION"] = os.environ.get("AWS_REGION", "us-east-1")
+
+ return credentials
+
+
+def get_uv_environment() -> Dict[str, str]:
+ """Get UV environment with AWS credentials"""
+ aws_creds = get_aws_credentials()
+ return {
+ "UV_NO_CACHE": "1",
+ "UV_PYTHON": "/usr/local/bin/python",
+ "UV_TOOL_DIR": "/tmp/.uv/tool",
+ "UV_TOOL_BIN_DIR": "/tmp/.uv/tool/bin",
+ "UV_PROJECT_ENVIRONMENT": "/tmp/.venv",
+ "npm_config_cache": "/tmp/.npm",
+ **aws_creds,
+ }
+
+
+def get_system_prompt(user_system_prompt: str = None) -> str:
+ """Combine user system prompt with fixed system prompt"""
+ if user_system_prompt:
+ return f"{user_system_prompt}\n{FIXED_SYSTEM_PROMPT}"
+ else:
+ return FIXED_SYSTEM_PROMPT
+
+
+def extract_model_info(model_info: Any) -> tuple[str, str]:
+ """Extract model ID and region from model info"""
+ aws_creds = get_aws_credentials()
+
+ if isinstance(model_info, str):
+ model_id = model_info
+ region = aws_creds.get("AWS_REGION", "us-east-1")
+ else:
+ model_id = model_info.get(
+ "modelId", "us.anthropic.claude-3-5-sonnet-20241022-v2:0"
+ )
+ region = model_info.get("region", aws_creds.get("AWS_REGION", "us-east-1"))
+
+ return model_id, region
\ No newline at end of file
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/src/tools.py b/packages/cdk/lambda-python/generic-agent-core-runtime/src/tools.py
new file mode 100644
index 000000000..b0101f6bf
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/src/tools.py
@@ -0,0 +1,150 @@
+"""Tool management for the agent core runtime."""
+
+import os
+import boto3
+import json
+import logging
+from strands import tool
+from strands.tools.mcp import MCPClient
+from mcp import stdio_client, StdioServerParameters
+from typing import List, Any
+from .config import get_uv_environment, get_aws_credentials, WORKSPACE_DIR
+
+# Import strands-agents code interpreter tool
+try:
+ from strands_tools.code_interpreter import AgentCoreCodeInterpreter
+ CODE_INTERPRETER_AVAILABLE = True
+except ImportError as e:
+ CODE_INTERPRETER_AVAILABLE = False
+ logger = logging.getLogger(__name__)
+ logger.warning(f"Strands code interpreter tool not available: {e}")
+ AgentCoreCodeInterpreter = None
+
+logger = logging.getLogger(__name__)
+
+
+class ToolManager:
+ """Manages tools including MCP tools and built-in tools."""
+
+ def __init__(self):
+ self.mcp_tools = None
+ self.session_id = None
+ self.trace_id = None
+
+ def set_session_info(self, session_id: str, trace_id: str):
+ """Set session and trace IDs for tool operations"""
+ self.session_id = session_id
+ self.trace_id = trace_id
+
+ def load_mcp_tools(self) -> List[Any]:
+ """Load MCP tools from mcp.json"""
+ if self.mcp_tools is not None:
+ return self.mcp_tools
+
+ try:
+ with open("mcp.json", "r") as f:
+ mcp_json = json.loads(f.read())
+
+ if "mcpServers" not in mcp_json:
+ logger.warning("mcpServers not defined in mcp.json")
+ self.mcp_tools = []
+ return self.mcp_tools
+
+ mcp_servers = mcp_json["mcpServers"]
+ mcp_clients = []
+ uv_env = get_uv_environment()
+
+ for server_name, server in mcp_servers.items():
+ try:
+ client = MCPClient(
+ lambda: stdio_client(
+ StdioServerParameters(
+ command=server["command"],
+ args=server.get("args", []),
+ env={**uv_env, **server.get("env", {})},
+ )
+ )
+ )
+ client.start()
+ mcp_clients.append(client)
+ except Exception as e:
+ logger.error(f"Error creating MCP client for {server_name}: {e}")
+
+ # Flatten the tools
+ self.mcp_tools = sum([c.list_tools_sync() for c in mcp_clients], [])
+ logger.info(f"Loaded {len(self.mcp_tools)} MCP tools")
+ return self.mcp_tools
+ except Exception as e:
+ logger.error(f"Error loading MCP tools: {e}")
+ self.mcp_tools = []
+ return self.mcp_tools
+
+ def get_upload_tool(self):
+ """Get the S3 upload tool with session context"""
+ session_id = self.session_id
+ trace_id = self.trace_id
+
+ @tool
+ def upload_file_to_s3_and_retrieve_s3_url(filepath: str) -> str:
+ """Upload the file at /tmp/ws/* and retrieve the s3 path
+
+ Args:
+ filepath: The path to the uploading file
+ """
+ bucket = os.environ.get("FILE_BUCKET")
+ if not bucket:
+ # For local testing, provide a fallback message
+ logger.warning(
+ "FILE_BUCKET environment variable not set. Using local file path for testing."
+ )
+ return f"Local file path (S3 upload skipped): {filepath}"
+
+ aws_creds = get_aws_credentials()
+ region = aws_creds.get("AWS_REGION", "us-east-1")
+
+ if not filepath.startswith(WORKSPACE_DIR):
+ raise ValueError(
+ f"{filepath} does not appear to be a file under the {WORKSPACE_DIR} directory. Files to be uploaded must exist under {WORKSPACE_DIR}."
+ )
+
+ try:
+ filename = os.path.basename(filepath)
+ key = f"agentcore/{trace_id}/{filename}"
+
+ s3 = boto3.client("s3", region_name=region)
+ s3.upload_file(filepath, bucket, key)
+
+ return f"https://{bucket}.s3.{region}.amazonaws.com/{key}"
+ except Exception as e:
+ logger.error(f"Error uploading file to S3: {e}")
+ # For local testing, provide a fallback
+ return f"Error uploading to S3: {str(e)}. Local file path: {filepath}"
+
+ return upload_file_to_s3_and_retrieve_s3_url
+
+ def get_code_interpreter_tool(self) -> List[Any]:
+ """Get code interpreter tool if available"""
+ code_interpreter_tools = []
+
+ if CODE_INTERPRETER_AVAILABLE and AgentCoreCodeInterpreter:
+ try:
+ aws_creds = get_aws_credentials()
+ region = aws_creds.get("AWS_REGION", "us-east-1")
+ code_interpreter = AgentCoreCodeInterpreter(region=region)
+ code_interpreter_tools.append(code_interpreter.code_interpreter)
+ logger.info("Added code_interpreter tool (AgentCoreCodeInterpreter)")
+ except Exception as e:
+ logger.warning(f"Failed to initialize AgentCoreCodeInterpreter: {e}")
+
+ return code_interpreter_tools
+
+ def get_all_tools(self) -> List[Any]:
+ """Get all available tools (MCP + built-in + code interpreter)"""
+ mcp_tools = self.load_mcp_tools()
+ upload_tool = self.get_upload_tool()
+ code_interpreter_tools = self.get_code_interpreter_tool()
+
+ all_tools = mcp_tools + [upload_tool] + code_interpreter_tools
+ logger.info(f"Total tools loaded: {len(all_tools)} (MCP: {len(mcp_tools)}, Built-in: 1, Code Interpreter: {len(code_interpreter_tools)})")
+
+ return all_tools
\ No newline at end of file
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/src/types.py b/packages/cdk/lambda-python/generic-agent-core-runtime/src/types.py
new file mode 100644
index 000000000..53446c00a
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/src/types.py
@@ -0,0 +1,17 @@
+"""Data models for the agent core runtime."""
+
+from strands.types.content import Message
+from pydantic import BaseModel
+from typing import List, Dict, Any, Optional, Union
+
+
+class ModelInfo(BaseModel):
+ modelId: str
+ region: str = "us-east-1"
+
+
+class AgentCoreRequest(BaseModel):
+ messages: Union[List[Message], List[Dict[str, Any]]] = []
+ system_prompt: Optional[str] = None
+ prompt: Union[str, List[Dict[str, Any]]] = ""
+ model: ModelInfo = {}
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/src/utils.py b/packages/cdk/lambda-python/generic-agent-core-runtime/src/utils.py
new file mode 100644
index 000000000..79c91c0bb
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/src/utils.py
@@ -0,0 +1,135 @@
+"""Utility functions for the agent core runtime."""
+
+import base64
+import os
+import shutil
+import pathlib
+import logging
+from uuid import uuid4
+from typing import List, Dict, Union, Any
+from strands.types.content import ContentBlock
+from .config import WORKSPACE_DIR
+
+logger = logging.getLogger(__name__)
+
+
+def create_id() -> str:
+ """Generate a unique session ID"""
+ return str(uuid4())
+
+
+def create_ws_directory():
+ """Create workspace directory if it doesn't exist"""
+ logger.info("Create ws directory")
+ pathlib.Path(WORKSPACE_DIR).mkdir(exist_ok=True)
+
+
+def clean_ws_directory():
+ """Clean up workspace directory"""
+ logger.info("Clean ws directory...")
+ if os.path.exists(WORKSPACE_DIR):
+ shutil.rmtree(WORKSPACE_DIR)
+
+
+def create_error_response(error_message: str) -> dict:
+ """Create a standardized error response"""
+ return {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": f"An error occurred while processing your request: {error_message}",
+ }
+ ],
+ }
+ }
+
+
+def create_empty_response() -> dict:
+ """Create a response for when no message is generated"""
+ return {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "I apologize, but I couldn't generate a response. Please try again.",
+ }
+ ],
+ }
+ }
+
+
+# Base64 conversion utilities
+
+def decode_base64_string(value: Any) -> bytes:
+ """Convert base64 string or bytes to bytes"""
+ if isinstance(value, bytes):
+ return value
+ elif isinstance(value, str):
+ return base64.b64decode(value + "==") # add padding
+ else:
+ raise ValueError(f"Invalid value type: {type(value)}")
+
+
+def convert_content_block_bytes(block: Dict[str, Any]) -> Dict[str, Any]:
+ """Convert base64 strings to bytes in a content block"""
+ block = block.copy()
+
+ # Handle image, document, and video blocks
+ for media_type in ["image", "document", "video"]:
+ if media_type in block:
+ media_data = block[media_type]
+ if "source" in media_data and "bytes" in media_data["source"]:
+ media_data["source"]["bytes"] = decode_base64_string(
+ media_data["source"]["bytes"]
+ )
+
+ return block
+
+
+def process_content_blocks(
+ content_blocks: List[Union[Dict[str, Any], str]]
+) -> List[ContentBlock]:
+ """Process content blocks and convert base64 strings to bytes for Strands"""
+ processed_blocks = []
+
+ for block in content_blocks:
+ if isinstance(block, str):
+ processed_blocks.append(ContentBlock(text=block))
+ elif isinstance(block, dict):
+ if "text" in block:
+ processed_blocks.append(ContentBlock(text=block["text"]))
+ else:
+ # Convert base64 bytes and create ContentBlock
+ converted_block = convert_content_block_bytes(block)
+ processed_blocks.append(ContentBlock(**converted_block))
+
+ return processed_blocks
+
+
+def process_messages(messages: Union[List[Any], List[Dict[str, Any]]]) -> List[Any]:
+ """Process messages and convert base64 strings to bytes if needed"""
+ if not messages or not isinstance(messages[0], dict):
+ return messages
+
+ # Import Message here to avoid circular imports
+ from .types import Message
+
+ processed_messages = []
+ for message in messages:
+ msg = message.copy()
+ if "content" in msg and isinstance(msg["content"], list):
+ msg["content"] = [
+ convert_content_block_bytes(block) if isinstance(block, dict) else block
+ for block in msg["content"]
+ ]
+ processed_messages.append(Message(**msg))
+
+ return processed_messages
+
+
+def process_prompt(prompt: Union[str, List[Dict[str, Any]]]) -> Union[str, List[ContentBlock]]:
+ """Process prompt and convert base64 strings to bytes if needed"""
+ if isinstance(prompt, list):
+ return process_content_blocks(prompt)
+ return prompt
\ No newline at end of file
diff --git a/packages/cdk/lambda-python/generic-agent-core-runtime/uv.lock b/packages/cdk/lambda-python/generic-agent-core-runtime/uv.lock
new file mode 100644
index 000000000..7cd055b82
--- /dev/null
+++ b/packages/cdk/lambda-python/generic-agent-core-runtime/uv.lock
@@ -0,0 +1,2151 @@
+version = 1
+requires-python = ">=3.12"
+resolution-markers = [
+ "python_full_version >= '3.13'",
+ "python_full_version < '3.13'",
+]
+
+[[package]]
+name = "annotated-types"
+version = "0.7.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
+]
+
+[[package]]
+name = "anyio"
+version = "4.9.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "idna" },
+ { name = "sniffio" },
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 },
+]
+
+[[package]]
+name = "asgiref"
+version = "3.9.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/90/61/0aa957eec22ff70b830b22ff91f825e70e1ef732c06666a805730f28b36b/asgiref-3.9.1.tar.gz", hash = "sha256:a5ab6582236218e5ef1648f242fd9f10626cfd4de8dc377db215d5d5098e3142", size = 36870 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7c/3c/0464dcada90d5da0e71018c04a140ad6349558afb30b3051b4264cc5b965/asgiref-3.9.1-py3-none-any.whl", hash = "sha256:f3bba7092a48005b5f5bacd747d36ee4a5a61f4a269a6df590b43144355ebd2c", size = 23790 },
+]
+
+[[package]]
+name = "attrs"
+version = "25.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 },
+]
+
+[[package]]
+name = "aws-opentelemetry-distro"
+version = "0.10.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-distro" },
+ { name = "opentelemetry-exporter-otlp-proto-common" },
+ { name = "opentelemetry-exporter-otlp-proto-grpc" },
+ { name = "opentelemetry-exporter-otlp-proto-http" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-aio-pika" },
+ { name = "opentelemetry-instrumentation-aiohttp-client" },
+ { name = "opentelemetry-instrumentation-aiopg" },
+ { name = "opentelemetry-instrumentation-asgi" },
+ { name = "opentelemetry-instrumentation-asyncpg" },
+ { name = "opentelemetry-instrumentation-aws-lambda" },
+ { name = "opentelemetry-instrumentation-boto" },
+ { name = "opentelemetry-instrumentation-boto3sqs" },
+ { name = "opentelemetry-instrumentation-botocore" },
+ { name = "opentelemetry-instrumentation-cassandra" },
+ { name = "opentelemetry-instrumentation-celery" },
+ { name = "opentelemetry-instrumentation-confluent-kafka" },
+ { name = "opentelemetry-instrumentation-dbapi" },
+ { name = "opentelemetry-instrumentation-django" },
+ { name = "opentelemetry-instrumentation-elasticsearch" },
+ { name = "opentelemetry-instrumentation-falcon" },
+ { name = "opentelemetry-instrumentation-fastapi" },
+ { name = "opentelemetry-instrumentation-flask" },
+ { name = "opentelemetry-instrumentation-grpc" },
+ { name = "opentelemetry-instrumentation-httpx" },
+ { name = "opentelemetry-instrumentation-jinja2" },
+ { name = "opentelemetry-instrumentation-kafka-python" },
+ { name = "opentelemetry-instrumentation-logging" },
+ { name = "opentelemetry-instrumentation-mysql" },
+ { name = "opentelemetry-instrumentation-mysqlclient" },
+ { name = "opentelemetry-instrumentation-pika" },
+ { name = "opentelemetry-instrumentation-psycopg2" },
+ { name = "opentelemetry-instrumentation-pymemcache" },
+ { name = "opentelemetry-instrumentation-pymongo" },
+ { name = "opentelemetry-instrumentation-pymysql" },
+ { name = "opentelemetry-instrumentation-pyramid" },
+ { name = "opentelemetry-instrumentation-redis" },
+ { name = "opentelemetry-instrumentation-remoulade" },
+ { name = "opentelemetry-instrumentation-requests" },
+ { name = "opentelemetry-instrumentation-sqlalchemy" },
+ { name = "opentelemetry-instrumentation-sqlite3" },
+ { name = "opentelemetry-instrumentation-starlette" },
+ { name = "opentelemetry-instrumentation-system-metrics" },
+ { name = "opentelemetry-instrumentation-tornado" },
+ { name = "opentelemetry-instrumentation-tortoiseorm" },
+ { name = "opentelemetry-instrumentation-urllib" },
+ { name = "opentelemetry-instrumentation-urllib3" },
+ { name = "opentelemetry-instrumentation-wsgi" },
+ { name = "opentelemetry-processor-baggage" },
+ { name = "opentelemetry-propagator-aws-xray" },
+ { name = "opentelemetry-propagator-b3" },
+ { name = "opentelemetry-propagator-jaeger" },
+ { name = "opentelemetry-propagator-ot-trace" },
+ { name = "opentelemetry-sdk" },
+ { name = "opentelemetry-sdk-extension-aws" },
+]
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f8/bb/1f85f78fedd24a7dcc038eb4b7e30ee1b0b71acae03d6075171c917e0cce/aws_opentelemetry_distro-0.10.0-py3-none-any.whl", hash = "sha256:102edd8a6fcf059bd9bb97aa8bfb3053097b01e690bbc56a81840f07c30e0ff2", size = 98899 },
+]
+
+[[package]]
+name = "aws-requests-auth"
+version = "0.4.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/54/b2/455c0bfcbd772dafd4c9e93c4b713e36790abf9ccbca9b8e661968b29798/aws-requests-auth-0.4.3.tar.gz", hash = "sha256:33593372018b960a31dbbe236f89421678b885c35f0b6a7abfae35bb77e069b2", size = 10096 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/af/11/5dc8be418e1d54bed15eaf3a7461797e5ebb9e6a34869ad750561f35fa5b/aws_requests_auth-0.4.3-py2.py3-none-any.whl", hash = "sha256:646bc37d62140ea1c709d20148f5d43197e6bd2d63909eb36fa4bb2345759977", size = 6838 },
+]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.13.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "soupsieve" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 },
+]
+
+[[package]]
+name = "boto3"
+version = "1.39.9"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "botocore" },
+ { name = "jmespath" },
+ { name = "s3transfer" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9b/e5/7a0e98d88212b532fbf4b6fb6ace997c522a1b88d39d76d41b0f5ed14796/boto3-1.39.9.tar.gz", hash = "sha256:e3d3a6b617e1575e7ec854c820a882ab2e189a0421e74dc0dca2c9e13d4370a5", size = 111851 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0b/82/faf1b3bab5a94c3a3cf9ddc8e04eee2bdc29d5b8da42d7cda905c505e311/boto3-1.39.9-py3-none-any.whl", hash = "sha256:5bc85e9fdec4e21ef5ca2c22b4d51a3e32b53f3da36ce51f5a3ea4dbde07b132", size = 139887 },
+]
+
+[[package]]
+name = "botocore"
+version = "1.39.9"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "jmespath" },
+ { name = "python-dateutil" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/4d/d3/fd0a230e320a6e23932887fa6e508b90ccad2c1be77d4e88855cfad9cbe7/botocore-1.39.9.tar.gz", hash = "sha256:02f141c2849e4589a79feea245ce4ecc478d48b7865572445af8aae3b041772d", size = 14215273 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/07/2d/951352b2a14e70144c1a4dff611472a6213b8dbdb7996c0029caa48c80e3/botocore-1.39.9-py3-none-any.whl", hash = "sha256:a9691cbe03a3bc8b2720b3c36e5c5a2eecace6acd72bfb1107f00e75edaec4f3", size = 13874123 },
+]
+
+[[package]]
+name = "certifi"
+version = "2025.7.14"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722 },
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.4.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936 },
+ { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790 },
+ { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924 },
+ { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626 },
+ { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567 },
+ { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957 },
+ { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408 },
+ { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399 },
+ { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815 },
+ { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537 },
+ { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565 },
+ { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357 },
+ { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776 },
+ { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 },
+ { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 },
+ { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 },
+ { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 },
+ { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 },
+ { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 },
+ { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 },
+ { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 },
+ { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 },
+ { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 },
+ { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 },
+ { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 },
+ { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 },
+ { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 },
+]
+
+[[package]]
+name = "click"
+version = "8.2.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215 },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
+]
+
+[[package]]
+name = "deprecated"
+version = "1.2.18"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998 },
+]
+
+[[package]]
+name = "dill"
+version = "0.4.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668 },
+]
+
+[[package]]
+name = "docstring-parser"
+version = "0.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896 },
+]
+
+[[package]]
+name = "fastapi"
+version = "0.116.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pydantic" },
+ { name = "starlette" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/78/d7/6c8b3bfe33eeffa208183ec037fee0cce9f7f024089ab1c5d12ef04bd27c/fastapi-0.116.1.tar.gz", hash = "sha256:ed52cbf946abfd70c5a0dccb24673f0670deeb517a88b3544d03c2a6bf283143", size = 296485 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e5/47/d63c60f59a59467fda0f93f46335c9d18526d7071f025cb5b89d5353ea42/fastapi-0.116.1-py3-none-any.whl", hash = "sha256:c46ac7c312df840f0c9e220f7964bada936781bc4e2e6eb71f1c4d7553786565", size = 95631 },
+]
+
+[[package]]
+name = "generic-agent-core-runtime"
+version = "0.0.1"
+source = { virtual = "." }
+dependencies = [
+ { name = "aws-opentelemetry-distro" },
+ { name = "boto3" },
+ { name = "fastapi" },
+ { name = "mcp" },
+ { name = "pydantic" },
+ { name = "strands-agents" },
+ { name = "strands-agents-tools" },
+ { name = "uvicorn" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "aws-opentelemetry-distro" },
+ { name = "boto3" },
+ { name = "fastapi" },
+ { name = "mcp" },
+ { name = "pydantic" },
+ { name = "strands-agents", specifier = ">=1.0" },
+ { name = "strands-agents-tools" },
+ { name = "uvicorn" },
+]
+
+[[package]]
+name = "googleapis-common-protos"
+version = "1.70.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "protobuf" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/39/24/33db22342cf4a2ea27c9955e6713140fedd51e8b141b5ce5260897020f1a/googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257", size = 145903 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/86/f1/62a193f0227cf15a920390abe675f386dec35f7ae3ffe6da582d3ade42c7/googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8", size = 294530 },
+]
+
+[[package]]
+name = "grpcio"
+version = "1.73.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/79/e8/b43b851537da2e2f03fa8be1aef207e5cbfb1a2e014fbb6b40d24c177cd3/grpcio-1.73.1.tar.gz", hash = "sha256:7fce2cd1c0c1116cf3850564ebfc3264fba75d3c74a7414373f1238ea365ef87", size = 12730355 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b8/41/456caf570c55d5ac26f4c1f2db1f2ac1467d5bf3bcd660cba3e0a25b195f/grpcio-1.73.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:921b25618b084e75d424a9f8e6403bfeb7abef074bb6c3174701e0f2542debcf", size = 5334621 },
+ { url = "https://files.pythonhosted.org/packages/2a/c2/9a15e179e49f235bb5e63b01590658c03747a43c9775e20c4e13ca04f4c4/grpcio-1.73.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:277b426a0ed341e8447fbf6c1d6b68c952adddf585ea4685aa563de0f03df887", size = 10601131 },
+ { url = "https://files.pythonhosted.org/packages/0c/1d/1d39e90ef6348a0964caa7c5c4d05f3bae2c51ab429eb7d2e21198ac9b6d/grpcio-1.73.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:96c112333309493c10e118d92f04594f9055774757f5d101b39f8150f8c25582", size = 5759268 },
+ { url = "https://files.pythonhosted.org/packages/8a/2b/2dfe9ae43de75616177bc576df4c36d6401e0959833b2e5b2d58d50c1f6b/grpcio-1.73.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f48e862aed925ae987eb7084409a80985de75243389dc9d9c271dd711e589918", size = 6409791 },
+ { url = "https://files.pythonhosted.org/packages/6e/66/e8fe779b23b5a26d1b6949e5c70bc0a5fd08f61a6ec5ac7760d589229511/grpcio-1.73.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83a6c2cce218e28f5040429835fa34a29319071079e3169f9543c3fbeff166d2", size = 6003728 },
+ { url = "https://files.pythonhosted.org/packages/a9/39/57a18fcef567784108c4fc3f5441cb9938ae5a51378505aafe81e8e15ecc/grpcio-1.73.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:65b0458a10b100d815a8426b1442bd17001fdb77ea13665b2f7dc9e8587fdc6b", size = 6103364 },
+ { url = "https://files.pythonhosted.org/packages/c5/46/28919d2aa038712fc399d02fa83e998abd8c1f46c2680c5689deca06d1b2/grpcio-1.73.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0a9f3ea8dce9eae9d7cb36827200133a72b37a63896e0e61a9d5ec7d61a59ab1", size = 6749194 },
+ { url = "https://files.pythonhosted.org/packages/3d/56/3898526f1fad588c5d19a29ea0a3a4996fb4fa7d7c02dc1be0c9fd188b62/grpcio-1.73.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:de18769aea47f18e782bf6819a37c1c528914bfd5683b8782b9da356506190c8", size = 6283902 },
+ { url = "https://files.pythonhosted.org/packages/dc/64/18b77b89c5870d8ea91818feb0c3ffb5b31b48d1b0ee3e0f0d539730fea3/grpcio-1.73.1-cp312-cp312-win32.whl", hash = "sha256:24e06a5319e33041e322d32c62b1e728f18ab8c9dbc91729a3d9f9e3ed336642", size = 3668687 },
+ { url = "https://files.pythonhosted.org/packages/3c/52/302448ca6e52f2a77166b2e2ed75f5d08feca4f2145faf75cb768cccb25b/grpcio-1.73.1-cp312-cp312-win_amd64.whl", hash = "sha256:303c8135d8ab176f8038c14cc10d698ae1db9c480f2b2823f7a987aa2a4c5646", size = 4334887 },
+ { url = "https://files.pythonhosted.org/packages/37/bf/4ca20d1acbefabcaba633ab17f4244cbbe8eca877df01517207bd6655914/grpcio-1.73.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:b310824ab5092cf74750ebd8a8a8981c1810cb2b363210e70d06ef37ad80d4f9", size = 5335615 },
+ { url = "https://files.pythonhosted.org/packages/75/ed/45c345f284abec5d4f6d77cbca9c52c39b554397eb7de7d2fcf440bcd049/grpcio-1.73.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:8f5a6df3fba31a3485096ac85b2e34b9666ffb0590df0cd044f58694e6a1f6b5", size = 10595497 },
+ { url = "https://files.pythonhosted.org/packages/a4/75/bff2c2728018f546d812b755455014bc718f8cdcbf5c84f1f6e5494443a8/grpcio-1.73.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:052e28fe9c41357da42250a91926a3e2f74c046575c070b69659467ca5aa976b", size = 5765321 },
+ { url = "https://files.pythonhosted.org/packages/70/3b/14e43158d3b81a38251b1d231dfb45a9b492d872102a919fbf7ba4ac20cd/grpcio-1.73.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c0bf15f629b1497436596b1cbddddfa3234273490229ca29561209778ebe182", size = 6415436 },
+ { url = "https://files.pythonhosted.org/packages/e5/3f/81d9650ca40b54338336fd360f36773be8cb6c07c036e751d8996eb96598/grpcio-1.73.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ab860d5bfa788c5a021fba264802e2593688cd965d1374d31d2b1a34cacd854", size = 6007012 },
+ { url = "https://files.pythonhosted.org/packages/55/f4/59edf5af68d684d0f4f7ad9462a418ac517201c238551529098c9aa28cb0/grpcio-1.73.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:ad1d958c31cc91ab050bd8a91355480b8e0683e21176522bacea225ce51163f2", size = 6105209 },
+ { url = "https://files.pythonhosted.org/packages/e4/a8/700d034d5d0786a5ba14bfa9ce974ed4c976936c2748c2bd87aa50f69b36/grpcio-1.73.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f43ffb3bd415c57224c7427bfb9e6c46a0b6e998754bfa0d00f408e1873dcbb5", size = 6753655 },
+ { url = "https://files.pythonhosted.org/packages/1f/29/efbd4ac837c23bc48e34bbaf32bd429f0dc9ad7f80721cdb4622144c118c/grpcio-1.73.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:686231cdd03a8a8055f798b2b54b19428cdf18fa1549bee92249b43607c42668", size = 6287288 },
+ { url = "https://files.pythonhosted.org/packages/d8/61/c6045d2ce16624bbe18b5d169c1a5ce4d6c3a47bc9d0e5c4fa6a50ed1239/grpcio-1.73.1-cp313-cp313-win32.whl", hash = "sha256:89018866a096e2ce21e05eabed1567479713ebe57b1db7cbb0f1e3b896793ba4", size = 3668151 },
+ { url = "https://files.pythonhosted.org/packages/c2/d7/77ac689216daee10de318db5aa1b88d159432dc76a130948a56b3aa671a2/grpcio-1.73.1-cp313-cp313-win_amd64.whl", hash = "sha256:4a68f8c9966b94dff693670a5cf2b54888a48a5011c5d9ce2295a1a1465ee84f", size = 4335747 },
+]
+
+[[package]]
+name = "h11"
+version = "0.16.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 },
+]
+
+[[package]]
+name = "html5lib"
+version = "1.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+ { name = "webencodings" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ac/b6/b55c3f49042f1df3dcd422b7f224f939892ee94f22abcf503a9b7339eaf2/html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f", size = 272215 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173 },
+]
+
+[[package]]
+name = "httpcore"
+version = "1.0.9"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "h11" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 },
+]
+
+[[package]]
+name = "httpx"
+version = "0.28.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "certifi" },
+ { name = "httpcore" },
+ { name = "idna" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
+]
+
+[[package]]
+name = "httpx-sse"
+version = "0.4.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6e/fa/66bd985dd0b7c109a3bcb89272ee0bfb7e2b4d06309ad7b38ff866734b2a/httpx_sse-0.4.1.tar.gz", hash = "sha256:8f44d34414bc7b21bf3602713005c5df4917884f76072479b21f68befa4ea26e", size = 12998 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/25/0a/6269e3473b09aed2dab8aa1a600c70f31f00ae1349bee30658f7e358a159/httpx_sse-0.4.1-py3-none-any.whl", hash = "sha256:cba42174344c3a5b06f255ce65b350880f962d99ead85e776f23c6618a377a37", size = 8054 },
+]
+
+[[package]]
+name = "idna"
+version = "3.10"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
+]
+
+[[package]]
+name = "importlib-metadata"
+version = "8.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "zipp" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/33/08/c1395a292bb23fd03bdf572a1357c5a733d3eecbab877641ceacab23db6e/importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580", size = 55767 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/79/9d/0fb148dc4d6fa4a7dd1d8378168d9b4cd8d4560a6fbf6f0121c5fc34eb68/importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e", size = 26971 },
+]
+
+[[package]]
+name = "jmespath"
+version = "1.0.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256 },
+]
+
+[[package]]
+name = "jsonschema"
+version = "4.25.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "jsonschema-specifications" },
+ { name = "referencing" },
+ { name = "rpds-py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d5/00/a297a868e9d0784450faa7365c2172a7d6110c763e30ba861867c32ae6a9/jsonschema-4.25.0.tar.gz", hash = "sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f", size = 356830 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fe/54/c86cd8e011fe98803d7e382fd67c0df5ceab8d2b7ad8c5a81524f791551c/jsonschema-4.25.0-py3-none-any.whl", hash = "sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716", size = 89184 },
+]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2025.4.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "referencing" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437 },
+]
+
+[[package]]
+name = "lxml"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c5/ed/60eb6fa2923602fba988d9ca7c5cdbd7cf25faa795162ed538b527a35411/lxml-6.0.0.tar.gz", hash = "sha256:032e65120339d44cdc3efc326c9f660f5f7205f3a535c1fdbf898b29ea01fb72", size = 4096938 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/89/c3/d01d735c298d7e0ddcedf6f028bf556577e5ab4f4da45175ecd909c79378/lxml-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78718d8454a6e928470d511bf8ac93f469283a45c354995f7d19e77292f26108", size = 8429515 },
+ { url = "https://files.pythonhosted.org/packages/06/37/0e3eae3043d366b73da55a86274a590bae76dc45aa004b7042e6f97803b1/lxml-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:84ef591495ffd3f9dcabffd6391db7bb70d7230b5c35ef5148354a134f56f2be", size = 4601387 },
+ { url = "https://files.pythonhosted.org/packages/a3/28/e1a9a881e6d6e29dda13d633885d13acb0058f65e95da67841c8dd02b4a8/lxml-6.0.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:2930aa001a3776c3e2601cb8e0a15d21b8270528d89cc308be4843ade546b9ab", size = 5228928 },
+ { url = "https://files.pythonhosted.org/packages/9a/55/2cb24ea48aa30c99f805921c1c7860c1f45c0e811e44ee4e6a155668de06/lxml-6.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:219e0431ea8006e15005767f0351e3f7f9143e793e58519dc97fe9e07fae5563", size = 4952289 },
+ { url = "https://files.pythonhosted.org/packages/31/c0/b25d9528df296b9a3306ba21ff982fc5b698c45ab78b94d18c2d6ae71fd9/lxml-6.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bd5913b4972681ffc9718bc2d4c53cde39ef81415e1671ff93e9aa30b46595e7", size = 5111310 },
+ { url = "https://files.pythonhosted.org/packages/e9/af/681a8b3e4f668bea6e6514cbcb297beb6de2b641e70f09d3d78655f4f44c/lxml-6.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:390240baeb9f415a82eefc2e13285016f9c8b5ad71ec80574ae8fa9605093cd7", size = 5025457 },
+ { url = "https://files.pythonhosted.org/packages/99/b6/3a7971aa05b7be7dfebc7ab57262ec527775c2c3c5b2f43675cac0458cad/lxml-6.0.0-cp312-cp312-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d6e200909a119626744dd81bae409fc44134389e03fbf1d68ed2a55a2fb10991", size = 5657016 },
+ { url = "https://files.pythonhosted.org/packages/69/f8/693b1a10a891197143c0673fcce5b75fc69132afa81a36e4568c12c8faba/lxml-6.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ca50bd612438258a91b5b3788c6621c1f05c8c478e7951899f492be42defc0da", size = 5257565 },
+ { url = "https://files.pythonhosted.org/packages/a8/96/e08ff98f2c6426c98c8964513c5dab8d6eb81dadcd0af6f0c538ada78d33/lxml-6.0.0-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:c24b8efd9c0f62bad0439283c2c795ef916c5a6b75f03c17799775c7ae3c0c9e", size = 4713390 },
+ { url = "https://files.pythonhosted.org/packages/a8/83/6184aba6cc94d7413959f6f8f54807dc318fdcd4985c347fe3ea6937f772/lxml-6.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:afd27d8629ae94c5d863e32ab0e1d5590371d296b87dae0a751fb22bf3685741", size = 5066103 },
+ { url = "https://files.pythonhosted.org/packages/ee/01/8bf1f4035852d0ff2e36a4d9aacdbcc57e93a6cd35a54e05fa984cdf73ab/lxml-6.0.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:54c4855eabd9fc29707d30141be99e5cd1102e7d2258d2892314cf4c110726c3", size = 4791428 },
+ { url = "https://files.pythonhosted.org/packages/29/31/c0267d03b16954a85ed6b065116b621d37f559553d9339c7dcc4943a76f1/lxml-6.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c907516d49f77f6cd8ead1322198bdfd902003c3c330c77a1c5f3cc32a0e4d16", size = 5678523 },
+ { url = "https://files.pythonhosted.org/packages/5c/f7/5495829a864bc5f8b0798d2b52a807c89966523140f3d6fa3a58ab6720ea/lxml-6.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36531f81c8214e293097cd2b7873f178997dae33d3667caaae8bdfb9666b76c0", size = 5281290 },
+ { url = "https://files.pythonhosted.org/packages/79/56/6b8edb79d9ed294ccc4e881f4db1023af56ba451909b9ce79f2a2cd7c532/lxml-6.0.0-cp312-cp312-win32.whl", hash = "sha256:690b20e3388a7ec98e899fd54c924e50ba6693874aa65ef9cb53de7f7de9d64a", size = 3613495 },
+ { url = "https://files.pythonhosted.org/packages/0b/1e/cc32034b40ad6af80b6fd9b66301fc0f180f300002e5c3eb5a6110a93317/lxml-6.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:310b719b695b3dd442cdfbbe64936b2f2e231bb91d998e99e6f0daf991a3eba3", size = 4014711 },
+ { url = "https://files.pythonhosted.org/packages/55/10/dc8e5290ae4c94bdc1a4c55865be7e1f31dfd857a88b21cbba68b5fea61b/lxml-6.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:8cb26f51c82d77483cdcd2b4a53cda55bbee29b3c2f3ddeb47182a2a9064e4eb", size = 3674431 },
+ { url = "https://files.pythonhosted.org/packages/79/21/6e7c060822a3c954ff085e5e1b94b4a25757c06529eac91e550f3f5cd8b8/lxml-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6da7cd4f405fd7db56e51e96bff0865b9853ae70df0e6720624049da76bde2da", size = 8414372 },
+ { url = "https://files.pythonhosted.org/packages/a4/f6/051b1607a459db670fc3a244fa4f06f101a8adf86cda263d1a56b3a4f9d5/lxml-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b34339898bb556a2351a1830f88f751679f343eabf9cf05841c95b165152c9e7", size = 4593940 },
+ { url = "https://files.pythonhosted.org/packages/8e/74/dd595d92a40bda3c687d70d4487b2c7eff93fd63b568acd64fedd2ba00fe/lxml-6.0.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:51a5e4c61a4541bd1cd3ba74766d0c9b6c12d6a1a4964ef60026832aac8e79b3", size = 5214329 },
+ { url = "https://files.pythonhosted.org/packages/52/46/3572761efc1bd45fcafb44a63b3b0feeb5b3f0066886821e94b0254f9253/lxml-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d18a25b19ca7307045581b18b3ec9ead2b1db5ccd8719c291f0cd0a5cec6cb81", size = 4947559 },
+ { url = "https://files.pythonhosted.org/packages/94/8a/5e40de920e67c4f2eef9151097deb9b52d86c95762d8ee238134aff2125d/lxml-6.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d4f0c66df4386b75d2ab1e20a489f30dc7fd9a06a896d64980541506086be1f1", size = 5102143 },
+ { url = "https://files.pythonhosted.org/packages/7c/4b/20555bdd75d57945bdabfbc45fdb1a36a1a0ff9eae4653e951b2b79c9209/lxml-6.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f4b481b6cc3a897adb4279216695150bbe7a44c03daba3c894f49d2037e0a24", size = 5021931 },
+ { url = "https://files.pythonhosted.org/packages/b6/6e/cf03b412f3763d4ca23b25e70c96a74cfece64cec3addf1c4ec639586b13/lxml-6.0.0-cp313-cp313-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a78d6c9168f5bcb20971bf3329c2b83078611fbe1f807baadc64afc70523b3a", size = 5645469 },
+ { url = "https://files.pythonhosted.org/packages/d4/dd/39c8507c16db6031f8c1ddf70ed95dbb0a6d466a40002a3522c128aba472/lxml-6.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae06fbab4f1bb7db4f7c8ca9897dc8db4447d1a2b9bee78474ad403437bcc29", size = 5247467 },
+ { url = "https://files.pythonhosted.org/packages/4d/56/732d49def0631ad633844cfb2664563c830173a98d5efd9b172e89a4800d/lxml-6.0.0-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:1fa377b827ca2023244a06554c6e7dc6828a10aaf74ca41965c5d8a4925aebb4", size = 4720601 },
+ { url = "https://files.pythonhosted.org/packages/8f/7f/6b956fab95fa73462bca25d1ea7fc8274ddf68fb8e60b78d56c03b65278e/lxml-6.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1676b56d48048a62ef77a250428d1f31f610763636e0784ba67a9740823988ca", size = 5060227 },
+ { url = "https://files.pythonhosted.org/packages/97/06/e851ac2924447e8b15a294855caf3d543424364a143c001014d22c8ca94c/lxml-6.0.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:0e32698462aacc5c1cf6bdfebc9c781821b7e74c79f13e5ffc8bfe27c42b1abf", size = 4790637 },
+ { url = "https://files.pythonhosted.org/packages/06/d4/fd216f3cd6625022c25b336c7570d11f4a43adbaf0a56106d3d496f727a7/lxml-6.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4d6036c3a296707357efb375cfc24bb64cd955b9ec731abf11ebb1e40063949f", size = 5662049 },
+ { url = "https://files.pythonhosted.org/packages/52/03/0e764ce00b95e008d76b99d432f1807f3574fb2945b496a17807a1645dbd/lxml-6.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7488a43033c958637b1a08cddc9188eb06d3ad36582cebc7d4815980b47e27ef", size = 5272430 },
+ { url = "https://files.pythonhosted.org/packages/5f/01/d48cc141bc47bc1644d20fe97bbd5e8afb30415ec94f146f2f76d0d9d098/lxml-6.0.0-cp313-cp313-win32.whl", hash = "sha256:5fcd7d3b1d8ecb91445bd71b9c88bdbeae528fefee4f379895becfc72298d181", size = 3612896 },
+ { url = "https://files.pythonhosted.org/packages/f4/87/6456b9541d186ee7d4cb53bf1b9a0d7f3b1068532676940fdd594ac90865/lxml-6.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:2f34687222b78fff795feeb799a7d44eca2477c3d9d3a46ce17d51a4f383e32e", size = 4013132 },
+ { url = "https://files.pythonhosted.org/packages/b7/42/85b3aa8f06ca0d24962f8100f001828e1f1f1a38c954c16e71154ed7d53a/lxml-6.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:21db1ec5525780fd07251636eb5f7acb84003e9382c72c18c542a87c416ade03", size = 3672642 },
+]
+
+[[package]]
+name = "markdown-it-py"
+version = "3.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mdurl" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
+]
+
+[[package]]
+name = "markdownify"
+version = "1.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "beautifulsoup4" },
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2f/78/c48fed23c7aebc2c16049062e72de1da3220c274de59d28c942acdc9ffb2/markdownify-1.1.0.tar.gz", hash = "sha256:449c0bbbf1401c5112379619524f33b63490a8fa479456d41de9dc9e37560ebd", size = 17127 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/64/11/b751af7ad41b254a802cf52f7bc1fca7cabe2388132f2ce60a1a6b9b9622/markdownify-1.1.0-py3-none-any.whl", hash = "sha256:32a5a08e9af02c8a6528942224c91b933b4bd2c7d078f9012943776fc313eeef", size = 13901 },
+]
+
+[[package]]
+name = "mcp"
+version = "1.12.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "httpx" },
+ { name = "httpx-sse" },
+ { name = "jsonschema" },
+ { name = "pydantic" },
+ { name = "pydantic-settings" },
+ { name = "python-multipart" },
+ { name = "pywin32", marker = "sys_platform == 'win32'" },
+ { name = "sse-starlette" },
+ { name = "starlette" },
+ { name = "uvicorn", marker = "sys_platform != 'emscripten'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/45/94/caa0f4754e2437f7033068989f13fee784856f95870c786b0b5c2c0f511e/mcp-1.12.0.tar.gz", hash = "sha256:853f6b17a3f31ea6e2f278c2ec7d3b38457bc80c7c2c675260dd7f04a6fd0e70", size = 424678 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ed/da/c7eaab6a58f1034de115b7902141ad8f81b4f3bbf7dc0cc267594947a4d7/mcp-1.12.0-py3-none-any.whl", hash = "sha256:19a498b2bf273283e463b4dd1ed83f791fbba5c25bfa16b8b34cfd5571673e7f", size = 158470 },
+]
+
+[[package]]
+name = "mdurl"
+version = "0.1.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
+]
+
+[[package]]
+name = "mpmath"
+version = "1.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 },
+]
+
+[[package]]
+name = "opentelemetry-api"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deprecated" },
+ { name = "importlib-metadata" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9a/8d/1f5a45fbcb9a7d87809d460f09dc3399e3fbd31d7f3e14888345e9d29951/opentelemetry_api-1.33.1.tar.gz", hash = "sha256:1c6055fc0a2d3f23a50c7e17e16ef75ad489345fd3df1f8b8af7c0bbf8a109e8", size = 65002 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/05/44/4c45a34def3506122ae61ad684139f0bbc4e00c39555d4f7e20e0e001c8a/opentelemetry_api-1.33.1-py3-none-any.whl", hash = "sha256:4db83ebcf7ea93e64637ec6ee6fabee45c5cbe4abd9cf3da95c43828ddb50b83", size = 65771 },
+]
+
+[[package]]
+name = "opentelemetry-distro"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-sdk" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/dd/0b/0012cb5947c255d6755cb91e3b9fd9bb1876b7e14d5ab67131c030fd90b2/opentelemetry_distro-0.54b1.tar.gz", hash = "sha256:61d6b97bb7a245fddbb829345bb4ad18be39eb52f770fab89a127107fca3149f", size = 2593 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/12/b1/5f008a2909d59c02c7b88aa595502d438ca21c15e88edd7620c697a56ce8/opentelemetry_distro-0.54b1-py3-none-any.whl", hash = "sha256:009486513b32b703e275bb2f9ccaf5791676bbf5e2dcfdd90201ddc8f56f122b", size = 3348 },
+]
+
+[[package]]
+name = "opentelemetry-exporter-otlp-proto-common"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-proto" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7a/18/a1ec9dcb6713a48b4bdd10f1c1e4d5d2489d3912b80d2bcc059a9a842836/opentelemetry_exporter_otlp_proto_common-1.33.1.tar.gz", hash = "sha256:c57b3fa2d0595a21c4ed586f74f948d259d9949b58258f11edb398f246bec131", size = 20828 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/09/52/9bcb17e2c29c1194a28e521b9d3f2ced09028934c3c52a8205884c94b2df/opentelemetry_exporter_otlp_proto_common-1.33.1-py3-none-any.whl", hash = "sha256:b81c1de1ad349785e601d02715b2d29d6818aed2c809c20219f3d1f20b038c36", size = 18839 },
+]
+
+[[package]]
+name = "opentelemetry-exporter-otlp-proto-grpc"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deprecated" },
+ { name = "googleapis-common-protos" },
+ { name = "grpcio" },
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-exporter-otlp-proto-common" },
+ { name = "opentelemetry-proto" },
+ { name = "opentelemetry-sdk" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d8/5f/75ef5a2a917bd0e6e7b83d3fb04c99236ee958f6352ba3019ea9109ae1a6/opentelemetry_exporter_otlp_proto_grpc-1.33.1.tar.gz", hash = "sha256:345696af8dc19785fac268c8063f3dc3d5e274c774b308c634f39d9c21955728", size = 22556 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ba/ec/6047e230bb6d092c304511315b13893b1c9d9260044dd1228c9d48b6ae0e/opentelemetry_exporter_otlp_proto_grpc-1.33.1-py3-none-any.whl", hash = "sha256:7e8da32c7552b756e75b4f9e9c768a61eb47dee60b6550b37af541858d669ce1", size = 18591 },
+]
+
+[[package]]
+name = "opentelemetry-exporter-otlp-proto-http"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deprecated" },
+ { name = "googleapis-common-protos" },
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-exporter-otlp-proto-common" },
+ { name = "opentelemetry-proto" },
+ { name = "opentelemetry-sdk" },
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/60/48/e4314ac0ed2ad043c07693d08c9c4bf5633857f5b72f2fefc64fd2b114f6/opentelemetry_exporter_otlp_proto_http-1.33.1.tar.gz", hash = "sha256:46622d964a441acb46f463ebdc26929d9dec9efb2e54ef06acdc7305e8593c38", size = 15353 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/63/ba/5a4ad007588016fe37f8d36bf08f325fe684494cc1e88ca8fa064a4c8f57/opentelemetry_exporter_otlp_proto_http-1.33.1-py3-none-any.whl", hash = "sha256:ebd6c523b89a2ecba0549adb92537cc2bf647b4ee61afbbd5a4c6535aa3da7cf", size = 17733 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "packaging" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c3/fd/5756aea3fdc5651b572d8aef7d94d22a0a36e49c8b12fcb78cb905ba8896/opentelemetry_instrumentation-0.54b1.tar.gz", hash = "sha256:7658bf2ff914b02f246ec14779b66671508125c0e4227361e56b5ebf6cef0aec", size = 28436 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/89/0790abc5d9c4fc74bd3e03cb87afe2c820b1d1a112a723c1163ef32453ee/opentelemetry_instrumentation-0.54b1-py3-none-any.whl", hash = "sha256:a4ae45f4a90c78d7006c51524f57cd5aa1231aef031eae905ee34d5423f5b198", size = 31019 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-aio-pika"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/79/e7/b92741e7dc1c38d512fcd0c3d6b3270cbbe3f3965f4280810c3f48688b1f/opentelemetry_instrumentation_aio_pika-0.54b1.tar.gz", hash = "sha256:a1b9f2d2735f1e9808bac263776f445c446c19580c3a24d0ecc02e289b55b21d", size = 10092 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4b/46/b77e99e0e3a4f473e8a38e46d12269a5ef28ed0f7d52306a06c6b82f2aff/opentelemetry_instrumentation_aio_pika-0.54b1-py3-none-any.whl", hash = "sha256:c1d1a52296937e54a8c69878434c86bdc038d53c1eba6f133c0e63f479484990", size = 13462 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-aiohttp-client"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/04/fe/535efdb090543cb8e23149271c3ef27e37d3862865c52e2b2b58f7b5cb8d/opentelemetry_instrumentation_aiohttp_client-0.54b1.tar.gz", hash = "sha256:c51c643a5587b9efce6c4cae0f5e2202a25fac69caa89643465f57d5d8ba3789", size = 13643 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e5/de/07f25301d57bb83f29ee1eb5503871bddc132d4362ff9897c605e8c54c04/opentelemetry_instrumentation_aiohttp_client-0.54b1-py3-none-any.whl", hash = "sha256:d9b53c04865e8a4c984c1330e4f1d5570bc28543833a4718cbe4265091ee0e71", size = 11661 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-aiopg"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-dbapi" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/48/4b/ef14e66e9b7b8bf859844c08d78bbb921c7ec41e2008bd657942a15a5797/opentelemetry_instrumentation_aiopg-0.54b1.tar.gz", hash = "sha256:d00a6845bb8f8d45e81d42bc8ba38df88bb7efdc2cd0e572968dc5359f5b8355", size = 11808 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f2/eb/1b7d0ff786ec1734766b082ebceea729c33b5f7d986816411fb8feb74373/opentelemetry_instrumentation_aiopg-0.54b1-py3-none-any.whl", hash = "sha256:1d162793c4dee9db469d89c962f161801027abc55002eeb23c076ab5f1f334d4", size = 12455 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-asgi"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "asgiref" },
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/20/f7/a3377f9771947f4d3d59c96841d3909274f446c030dbe8e4af871695ddee/opentelemetry_instrumentation_asgi-0.54b1.tar.gz", hash = "sha256:ab4df9776b5f6d56a78413c2e8bbe44c90694c67c844a1297865dc1bd926ed3c", size = 24230 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/20/24/7a6f0ae79cae49927f528ecee2db55a5bddd87b550e310ce03451eae7491/opentelemetry_instrumentation_asgi-0.54b1-py3-none-any.whl", hash = "sha256:84674e822b89af563b283a5283c2ebb9ed585d1b80a1c27fb3ac20b562e9f9fc", size = 16338 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-asyncpg"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b2/66/d2e2ccbb13cf6d6f6c7c8d907021e9bd8b56585c59e28d99ebc74138c3d1/opentelemetry_instrumentation_asyncpg-0.54b1.tar.gz", hash = "sha256:58e50de68b40221c2d6e22d626e5d03d9d6b950ba59504a5fc060c95cdc7c4fb", size = 8717 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f0/93/c17ef16b63d6e073f875bfe4624b9711269a3d208ee11cdfc5cc1b3537d8/opentelemetry_instrumentation_asyncpg-0.54b1-py3-none-any.whl", hash = "sha256:2348843f0c6f0cefb0badc974cbeae244ee89c57e1ae2a587e5f641c23e16fdc", size = 10062 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-aws-lambda"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-propagator-aws-xray" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/77/fd/57a1360203efa8410637679b00b61603782dd84ca9c0b3619192c07e0d1f/opentelemetry_instrumentation_aws_lambda-0.54b1.tar.gz", hash = "sha256:c40f011581abf3cd28d8833fb6218bac75eec3adda7774ff2685f41b279a9fdd", size = 17904 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/77/f3/c08fee6ae3f2d2b461ee7e7c2b3ac8de52281b236f3593146ba456cd0db7/opentelemetry_instrumentation_aws_lambda-0.54b1-py3-none-any.whl", hash = "sha256:51bc4301b9733fcda616d68197ee5f15108175a217f5fd8db349d53ba14cc172", size = 12484 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-boto"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/4b/b5/5b777b6b1f3ce586141485584a52f0fdd3d63398011b0d02feb822f46f0a/opentelemetry_instrumentation_boto-0.54b1.tar.gz", hash = "sha256:83407a5f6f69cd0bebff802da0d228eb13196a1de713b43e1348b77f80033c6a", size = 9716 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4a/5e/8f8bfb5fa1c51aa66b6af7e4a64d9be9dc9aba6ff2d8c0f405204a5069ea/opentelemetry_instrumentation_boto-0.54b1-py3-none-any.whl", hash = "sha256:b52b1216bee095858bcd0d992360911b6e870acc4f4c9090f8ca1081d9fdede6", size = 10146 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-boto3sqs"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/be/44/232d566fb06a640f386ce2bdd271e64ecaaae9bdcc5c68f84f2552c5e585/opentelemetry_instrumentation_boto3sqs-0.54b1.tar.gz", hash = "sha256:c8bf67bc836bb66da6a1b000e6c1b07229481c75731ea6a0ed0b59b256e035b9", size = 11715 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/df/db/62ebd5d172eb3997038f24a238792b5ebe604bc70dbda1cba91c3d36a655/opentelemetry_instrumentation_boto3sqs-0.54b1-py3-none-any.whl", hash = "sha256:40ae98fe53584e5b1d61725fc8e153a1be2d6b308f65f56deb4f276a23b43cf4", size = 11672 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-botocore"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-propagator-aws-xray" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/72/c9/88127b0714881e6801e4921bca445de634b0b3568e607ccc4a606f711ea7/opentelemetry_instrumentation_botocore-0.54b1.tar.gz", hash = "sha256:54f7b0b48398dfc8b8e98deec89df5b4c8c359d803a0d6c8ce4bd972d50c03dd", size = 110252 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5a/0e/22e35a74e6566feacd8a80f5899242920765f134c0edbb0b943ddb369c0e/opentelemetry_instrumentation_botocore-0.54b1-py3-none-any.whl", hash = "sha256:74d3a36d5bab8447669b25f915a3db6c37ae14a5faa198500471d5b1bbd1902f", size = 35461 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-cassandra"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/26/fb/9a405a3fed8389603bbcd63a74ea303d55992c2c7e9abdc8daeba1945fa9/opentelemetry_instrumentation_cassandra-0.54b1.tar.gz", hash = "sha256:f9a79c0139888eaedb58bb50da42709c7bc6ead9b9f5263164873e4275cefbce", size = 7581 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/48/ca/e726bfd5dc40eef7961aa5a7a5e7238eb407c84bd709cb531abd09c62302/opentelemetry_instrumentation_cassandra-0.54b1-py3-none-any.whl", hash = "sha256:81b8d963a02ea43ea4a9d00c88cd0b01dda69daf914d6e4984b2e98b1e8fdeb7", size = 8899 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-celery"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7c/71/4ac353874e0f7ca93591e1a74b7a290dec2027733bbb31bd76da3a74f97f/opentelemetry_instrumentation_celery-0.54b1.tar.gz", hash = "sha256:f2bd019afe9286214083ae2db95ed24adf9a0aa2e943177462d64ceb8380d78e", size = 14778 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2f/be/90e2b7d26915639cfcdf6e200b309c9d64027ff752c56145bc149cd67d68/opentelemetry_instrumentation_celery-0.54b1-py3-none-any.whl", hash = "sha256:892ec6bf829a0d60cf3bffd1a8bb6fd8055f1194167b4e132e33321de8e05c24", size = 13809 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-confluent-kafka"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/50/a8/472ddb40f8caab693de4a5c2084b1513b67f879060e5e46cfb2f96bc0872/opentelemetry_instrumentation_confluent_kafka-0.54b1.tar.gz", hash = "sha256:1e378b5c88170c7fcd23b07054a61d2af7a7ec5af1aba120446514ef27b7ad82", size = 11615 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5e/9e/107e45d5eb41961a187c28eb4d0da02d133d371dfdd149b1f7ef96e78926/opentelemetry_instrumentation_confluent_kafka-0.54b1-py3-none-any.whl", hash = "sha256:9dc896233a973705e1ac25950ababe23322338f4cd3fff0ccd509759aeb2e802", size = 12624 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-dbapi"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7b/b7/b74e2c7c858cde8909516cbe77cb0e841167d38795c90df524d84440e1f1/opentelemetry_instrumentation_dbapi-0.54b1.tar.gz", hash = "sha256:69421c36994114040d197f7e846c01869d663084c6c2025e85b2d6cfce2f8299", size = 14145 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/83/6a/98d409ae5ca60ae4e41295a42256d81bb96bd5a7a386ca0343e27494d53d/opentelemetry_instrumentation_dbapi-0.54b1-py3-none-any.whl", hash = "sha256:21bc20cd878a78bf44bab686e9679cef1eed77e53c754c0a09f0ca49f5fd0283", size = 12450 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-django"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-wsgi" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ac/93/8d194bda118fc4c369b9a3091c39eec384137b46f33421272359883c53d9/opentelemetry_instrumentation_django-0.54b1.tar.gz", hash = "sha256:38414f989f60e9dba82928e13f6a20a26baf5cc700f1d891f27e0703ca577802", size = 24866 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e9/75/1b0ae1b8b7d6a85d5d54e8092c84b18669bd5da6f5ceb3410047674db3c0/opentelemetry_instrumentation_django-0.54b1-py3-none-any.whl", hash = "sha256:462fbd577991021f56152df21ca1fdcd7c4abdc10dd44254a44d515b8e3d61ca", size = 19541 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-elasticsearch"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/31/8b/e7d57ab4aab2d63e2094001e0301d848ec83b86ee428e538101922cd27ed/opentelemetry_instrumentation_elasticsearch-0.54b1.tar.gz", hash = "sha256:d5b6996919679c91e5791457de24d9ff6472887a4e1426b8f2345c52f6ba6f10", size = 14379 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e6/bd/4919e716190454895c895c37745bbf22d59231d864862a9bc4ac68f4c8d8/opentelemetry_instrumentation_elasticsearch-0.54b1-py3-none-any.whl", hash = "sha256:9f5c968954d72f15e133d06760294f13886d98c4da626374168094035f6dec50", size = 12607 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-falcon"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-wsgi" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+ { name = "packaging" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/1a/7d/73df17199014ea57ae71bb128a5155ea4d81d86d0b61d4c852cec485ccb1/opentelemetry_instrumentation_falcon-0.54b1.tar.gz", hash = "sha256:06e72aac39fd4ac65555a8cb056428d7c4366bb1fafa65e60474d6e3d6c3eada", size = 17176 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2e/40/65a3cecd312ac380477ff44306c737b6a3d0cb7ec1ec28e09aacdc8904ac/opentelemetry_instrumentation_falcon-0.54b1-py3-none-any.whl", hash = "sha256:6eaf3bf714a6e3398a5ddc132c3e77de851331ee00989302f88a4d4ce829e679", size = 14206 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-fastapi"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-asgi" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/98/3b/9a262cdc1a4defef0e52afebdde3e8add658cc6f922e39e9dcee0da98349/opentelemetry_instrumentation_fastapi-0.54b1.tar.gz", hash = "sha256:1fcad19cef0db7092339b571a59e6f3045c9b58b7fd4670183f7addc459d78df", size = 19325 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/df/9c/6b2b0f9d6c5dea7528ae0bf4e461dd765b0ae35f13919cd452970bb0d0b3/opentelemetry_instrumentation_fastapi-0.54b1-py3-none-any.whl", hash = "sha256:fb247781cfa75fd09d3d8713c65e4a02bd1e869b00e2c322cc516d4b5429860c", size = 12125 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-flask"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-wsgi" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+ { name = "packaging" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b1/b8/d46dcb20889713a355de418a0d31d552089bf4454e1baf48c7b6b3fb6035/opentelemetry_instrumentation_flask-0.54b1.tar.gz", hash = "sha256:683f9963f06d065fc07ceaffa106df1f6f20075318530328f69fde39dfb1192f", size = 19221 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/85/aaaed416e9ee7d5c4ab98b3dba3d66675f44cfdcbf5d683e144a10fafad0/opentelemetry_instrumentation_flask-0.54b1-py3-none-any.whl", hash = "sha256:1f9d44b8ca9bc7d52e2aeb539bc64a88d6fc04f2f67c1ffb278148c99cc8ec6a", size = 14626 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-grpc"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/95/7a/a2e879f5b39d77091181c944064bf99e11646a58242f1e8efa829646bcb1/opentelemetry_instrumentation_grpc-0.54b1.tar.gz", hash = "sha256:4198aab2a380b2807a50112892f9b8a50772169a3722fa99634ef70c6c017ea2", size = 30926 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/86/51/22ca8af0b9f78029657957f33604813c07dde18fb035dd37a60e2a4070d8/opentelemetry_instrumentation_grpc-0.54b1-py3-none-any.whl", hash = "sha256:c01114c5c147c216f9144da065d4a84bffb2a43b3cb05763b40ec744bbf5206e", size = 27112 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-httpx"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9f/64/65b2e599c5043a5dbd14c251d48dec4947e2ec8713f601df197ea9b51246/opentelemetry_instrumentation_httpx-0.54b1.tar.gz", hash = "sha256:37e1cd0190f98508d960ec1667c9f148f8c8ad9a6cab127b57c9ad92c37493c3", size = 17734 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f1/63/f92e93b613b51344a979dc6674641f2c0d24b031f6a08557304398962e41/opentelemetry_instrumentation_httpx-0.54b1-py3-none-any.whl", hash = "sha256:99b8e43ebf1d945ca298d84d32298ba26d1c3431738cea9f69a26c442661745f", size = 14129 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-jinja2"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f7/9d/48836360719cfc0aaa892440b42d2fc3cf83bb84d4f92cda0ad9af7dd598/opentelemetry_instrumentation_jinja2-0.54b1.tar.gz", hash = "sha256:21e435e2029e876e9c91277fb88e9cf235211f96973c64e494b8be7551c7b3e1", size = 8468 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a2/d4/213e701c74541f860bfc89211ab54b7c9d3c89576dc461bed14d6f1d0e2f/opentelemetry_instrumentation_jinja2-0.54b1-py3-none-any.whl", hash = "sha256:bcefb00e177c3481a0f735ffe96589ee40ba6b603092c19fca7b03fcb5c72a19", size = 9428 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-kafka-python"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b2/1c/232ffeb76dd519d82c6b0f1b28dc33f6583f3a90b35dd3360179d46e0c72/opentelemetry_instrumentation_kafka_python-0.54b1.tar.gz", hash = "sha256:8b3f18be44939a270ca55b8017c5f822b94bdc1372b59a49464b990c715d0ba4", size = 10535 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0d/88/9998fac3940d818100f0b3b1b67992481df233516d4d0a14fce43d6dcbc8/opentelemetry_instrumentation_kafka_python-0.54b1-py3-none-any.whl", hash = "sha256:ab53ed8af3281a337feb5c1fa01059d5af99ec7aa84f2b360627a20fed385ab7", size = 11502 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-logging"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d9/5b/88ed39f22e8c6eb4f6192ab9a62adaa115579fcbcadb3f0241ee645eea56/opentelemetry_instrumentation_logging-0.54b1.tar.gz", hash = "sha256:893a3cbfda893b64ff71b81991894e2fd6a9267ba85bb6c251f51c0419fbe8fa", size = 9976 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/96/0c/b441fb30d860f25040eaed61e89d68f4d9ee31873159ed18cbc1b92eba56/opentelemetry_instrumentation_logging-0.54b1-py3-none-any.whl", hash = "sha256:01a4cec54348f13941707d857b850b0febf9d49f45d0fcf0673866e079d7357b", size = 12579 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-mysql"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-dbapi" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/1e/6e/8b203e0f0afb994a2b8734d37d4ffe8a70cd45202bf021c3a531d7b1cb9d/opentelemetry_instrumentation_mysql-0.54b1.tar.gz", hash = "sha256:de3a9367886523f30bd04b51edcf8d0777de7eac4a2467f52478231f51405b49", size = 9390 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c9/18/aeae1a3cc4dd17f4338d105592a8e6cba572ef9d94089649d4b8a0d7b4dc/opentelemetry_instrumentation_mysql-0.54b1-py3-none-any.whl", hash = "sha256:07cd8c3003b439e0626e2b77f2b7f28f73c75879e28d9260f8d9a9600fb85fc2", size = 10100 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-mysqlclient"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-dbapi" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a3/c6/27ac94688611cb51d20d83855b1dbd8610009f8ccf73e0fdca40648b4db4/opentelemetry_instrumentation_mysqlclient-0.54b1.tar.gz", hash = "sha256:c14abdc5e19015ab7d6aa23ce96122c4f966fac629489eaa614e28da84e94d88", size = 9330 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d6/4d/9d8a5e571c370331c771467a4c51bb2da5ced1c2601bd2990c2a2bdc0caa/opentelemetry_instrumentation_mysqlclient-0.54b1-py3-none-any.whl", hash = "sha256:462972e140586e00a5c0f0025585b2decfd0c4d7189cd42e2f786ca8e9fdab27", size = 10125 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-pika"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "packaging" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5d/8b/e7510900b383a2aaaec728034d8353d9112ce6fb75df1b53094185deae10/opentelemetry_instrumentation_pika-0.54b1.tar.gz", hash = "sha256:b8e20202233fee5aca35bd58db431bdcfeeddd85f83067800ab494c234479f51", size = 12993 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ce/68/c1dd5a8fcf3e98644ff3d1dfc3db9a7ac65a9ae964011c139343756b1e24/opentelemetry_instrumentation_pika-0.54b1-py3-none-any.whl", hash = "sha256:3098ba31cdf3b390deb18c9eb824fccff9b8a2d51878fdcc7b69f1e6218963dc", size = 13661 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-psycopg2"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-dbapi" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c0/09/dd6e55a852c87ee6402d745486d7d2e32577e728781bc1c89812d2645f48/opentelemetry_instrumentation_psycopg2-0.54b1.tar.gz", hash = "sha256:6e899baf7b6687320491b25d5ceadde5c614a95fb379da8e2a513d430f28102f", size = 10663 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1c/d0/4915e34533c26f319ba9b5346c0d1aa48d099bb29719674dbace3e4d643b/opentelemetry_instrumentation_psycopg2-0.54b1-py3-none-any.whl", hash = "sha256:2f493b180c2028bcab2ecaff8bd25560dd92a538bba8b9510411f182dd2a075e", size = 10709 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-pymemcache"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/4c/58/66b4eb77a1279816b108d41b852f5ae02c69c8442522fb37539c119ff056/opentelemetry_instrumentation_pymemcache-0.54b1.tar.gz", hash = "sha256:03a272e3a416a633f83ee5b494a346d37fbe8249271bbf5e02686c354ae810a9", size = 10606 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8b/91/678a2215292ce4cdfb28e282bef97e63bb497b42e2d677a24db7b979474d/opentelemetry_instrumentation_pymemcache-0.54b1-py3-none-any.whl", hash = "sha256:d752ccc03214cb079733d8d811ba9e624a7b6c76454ce96e30edccfed1f75f91", size = 9685 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-pymongo"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/71/4c/e214f98f6d0885cd1a4e09740fc68d59dfb5e108c310c0003415eb593a47/opentelemetry_instrumentation_pymongo-0.54b1.tar.gz", hash = "sha256:75cbcfe499009d535e508b869825113fc0888d4d60c544d4337ef65eb4d299f0", size = 9614 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f1/f4/b4504705ce678ac6118e4c5226b566d940aa4f7baf8e6c585abad36d1197/opentelemetry_instrumentation_pymongo-0.54b1-py3-none-any.whl", hash = "sha256:2331f4f0cbd5a5053edebb956b4dd288d60eb8971d9b6d5927f0753d0651161e", size = 11314 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-pymysql"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-dbapi" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2e/f5/f6f3f593c6f95994470eea001960c4891ead94d6583698862d2c1c2eb046/opentelemetry_instrumentation_pymysql-0.54b1.tar.gz", hash = "sha256:c22501ee104c34b70e37e5cdc59d74ffb833d473ac3ecfe899b707bf194e914b", size = 9208 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d9/2f/e7a0e6555757cb14c54a4e923f0ba0a0ed9833cfae0fe8334e698d6a2767/opentelemetry_instrumentation_pymysql-0.54b1-py3-none-any.whl", hash = "sha256:54cb13c6ab559cf14e6de94f778e286d8bc89a2262cff59ee3566a41c6ab5dd1", size = 9984 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-pyramid"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-wsgi" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/cb/be/488a87bf48049c260da15ecc5ebec0e99287aaabf0a9e94d759066b84872/opentelemetry_instrumentation_pyramid-0.54b1.tar.gz", hash = "sha256:c68d46de5cbf1e804b2b730f7f60bf87f0bc9735e3d21b8359d35705ff8457b3", size = 15046 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7d/eb/456f9a79c0e3ac26036a0d262235b9cde3a085b88c8ec17e1f062b2d2327/opentelemetry_instrumentation_pyramid-0.54b1-py3-none-any.whl", hash = "sha256:11b7f210ff45b754db30f7522bb2e27be902ddea38a59cc16c08e16dd8061f42", size = 13999 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-redis"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c2/01/fad85231c3518bf6349a7ef483ef06a27100da8d1b7531dec9d8d09b94d8/opentelemetry_instrumentation_redis-0.54b1.tar.gz", hash = "sha256:89024c4752147d528e8c51fff0034193e628da339848cda78afe0cf4eb0c7ccb", size = 13908 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c0/c1/78f18965f16e34a8fecc5b10c52aca1243e75a512a0a0320556a69583f36/opentelemetry_instrumentation_redis-0.54b1-py3-none-any.whl", hash = "sha256:e98992bd38e93081158f9947a1a8eea51d96e8bfe5054894a5b8d1d82117c0c8", size = 14924 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-remoulade"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e4/f5/d360444cd559f67a6d6f2467ca3f036db1894d3ba8c4a82a2c443eae674f/opentelemetry_instrumentation_remoulade-0.54b1.tar.gz", hash = "sha256:0c2f5571985375c55532402238dafb09d0e6b4b8c2a3c18925ef461bb3896c96", size = 8131 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6b/35/0a17505193fd93e16d26d18a0605a9dedb5bdde9c4aed56f391160ed657b/opentelemetry_instrumentation_remoulade-0.54b1-py3-none-any.whl", hash = "sha256:5d50d298a1d456e1008166d0a20cb7ccada93b502b99cf74f344fb6d1df947c9", size = 10130 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-requests"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e7/45/116da84930d3dc2f5cdd876283ca96e9b96547bccee7eaa0bd01ce6bf046/opentelemetry_instrumentation_requests-0.54b1.tar.gz", hash = "sha256:3eca5d697c5564af04c6a1dd23b6a3ffbaf11e64887c6051655cee03998f4654", size = 15148 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2b/b1/6e33d2c3d3cc9e3ae20a9a77625ec81a509a0e5d7fa87e09e7f879468990/opentelemetry_instrumentation_requests-0.54b1-py3-none-any.whl", hash = "sha256:a0c4cd5d946224f336d6bd73cdabdecc6f80d5c39208f84eb96eb15f16cd41a0", size = 12968 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-sqlalchemy"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "packaging" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ac/33/78a25ae4233d42058bb0b363ba4fea7d7210e53c24e5e31f16d5cf6cf957/opentelemetry_instrumentation_sqlalchemy-0.54b1.tar.gz", hash = "sha256:97839acf1c9b96ded857fca57a09b86a56cf8d9eb6d706b7ceaee9352a460e03", size = 14620 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c7/2b/1c954885815614ef5c1e8c7bbf57a5275e64cd6fb5946b65e17162a34037/opentelemetry_instrumentation_sqlalchemy-0.54b1-py3-none-any.whl", hash = "sha256:d2ca5edb4c7ecef120d51aad6793b7da1cc80207ccfd31c437ee18f098e7c4c4", size = 14169 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-sqlite3"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-dbapi" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f3/07/cae18dbc2ba1997a382e63f1ee7527dff9557675c2802709ca8a011341c4/opentelemetry_instrumentation_sqlite3-0.54b1.tar.gz", hash = "sha256:e32ec80a2f50df035bf16de142527157b98a60a3863ddcb6aa20beae8a64a24d", size = 7929 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/45/8a/7a6b6b1cabc65e237ebbfd10429997579eaa4281c169429c28eb5a60e177/opentelemetry_instrumentation_sqlite3-0.54b1-py3-none-any.whl", hash = "sha256:756c8f51a3b738f4cd52556b2146a6e2e6a33516b494aa4dbb7478702af4a475", size = 9342 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-starlette"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-instrumentation-asgi" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f9/43/c8095007bcc800a5465ebe50b097ab0da8b1d973f9afdcea04d98d2cb81d/opentelemetry_instrumentation_starlette-0.54b1.tar.gz", hash = "sha256:04f5902185166ad0a96bbc5cc184983bdf535ac92b1edc7a6093e9d14efa00d1", size = 14492 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/27/1d/9215d1696a428bbc0c46b8fc7c0189693ba5cdd9032f1dbeff04e9526828/opentelemetry_instrumentation_starlette-0.54b1-py3-none-any.whl", hash = "sha256:533e730308b5e6e99ab2a219c891f8e08ef5e67db76a148cc2f6c4fd5b6bcc0e", size = 11740 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-system-metrics"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "psutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/10/cc/0db64253beac5a58dca621114f1be8c95af3ec8ac31785fb28b6ed82021e/opentelemetry_instrumentation_system_metrics-0.54b1.tar.gz", hash = "sha256:2846ba1019e1672fb605eff3d3af198fa1b8f1540ece70da82a2d20d9b95779b", size = 15007 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f5/fd/e9bd23fd734bbdc028e7ebe3d25855381b696ceca214f80ad7fe74e9079c/opentelemetry_instrumentation_system_metrics-0.54b1-py3-none-any.whl", hash = "sha256:1b6f23cc8cf18b525bdb285c3664b521ce81b1e82c4f3db6a82210b8c37af1e4", size = 13093 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-threading"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a0/bd/561245292e7cc78ac7a0a75537873aea87440cb9493d41371421b3308c2b/opentelemetry_instrumentation_threading-0.54b1.tar.gz", hash = "sha256:3a081085b59675baf7bd93126a681903e6304a5f283df5eaecdd44bcb66df578", size = 8774 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/81/10/d87ec07d69546adaad525ba5d40d27324a45cba29097d9854a53d9af5047/opentelemetry_instrumentation_threading-0.54b1-py3-none-any.whl", hash = "sha256:bc229e6cd3f2b29fafe0a8dd3141f452e16fcb4906bca4fbf52609f99fb1eb42", size = 9314 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-tornado"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/61/61/9da044c2ae3cea9a4f0e4cf28bbc1a5aaf7052c2b00ad9f305a107da9110/opentelemetry_instrumentation_tornado-0.54b1.tar.gz", hash = "sha256:73a5ba0f915688907dd4640653d3970167715c42a5ef4a948bbcf93ad9682b8d", size = 17089 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2f/70/858aabf04ef24f409995c032c06c9a96e7c8bb9a257c9981b7fb380b7458/opentelemetry_instrumentation_tornado-0.54b1-py3-none-any.whl", hash = "sha256:3f4773cb3adfd6fdd592f182a72be85ca6cf01500a9973ac17947ce81d9872ee", size = 15327 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-tortoiseorm"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/55/ec/c1c2916e9448ea2c5fde2700bf6577d42db5a2ed0fda856e388d34e42872/opentelemetry_instrumentation_tortoiseorm-0.54b1.tar.gz", hash = "sha256:f9ffe00bcdfa895dfa1a512f4fde186ebd816a4636afd26a7716f258b4c7e3f9", size = 8263 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/86/e0/81eb1ec3cbe436030c32ada365f6fcf9e034c882d8c3060dfe35ffdfabc0/opentelemetry_instrumentation_tortoiseorm-0.54b1-py3-none-any.whl", hash = "sha256:0335efcd4f5e240efecc36f909939dbc6fb8c9b0733dc3f0615a39c3f6544c7e", size = 10158 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-urllib"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a7/52/47ecbce59d47e4543286ab88753efe1903f40a80c05397407375b4e600c2/opentelemetry_instrumentation_urllib-0.54b1.tar.gz", hash = "sha256:99943400b6814ebf072735e0fb42dc5c74705f30b64ebed3778f0e7c6e16d63e", size = 13788 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/62/2a/d8c9876d80d89f728c89439a880eaccedab3ffe1cc83b2c49abf17b81038/opentelemetry_instrumentation_urllib-0.54b1-py3-none-any.whl", hash = "sha256:94744470733f61f3dd282be7868e93f5bc277f07a0aeda7c836c913cbcf4f416", size = 12625 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-urllib3"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ed/6f/76a46806cd21002cac1bfd087f5e4674b195ab31ab44c773ca534b6bb546/opentelemetry_instrumentation_urllib3-0.54b1.tar.gz", hash = "sha256:0d30ba3b230e4100cfadaad29174bf7bceac70e812e4f5204e681e4b55a74cd9", size = 15697 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ff/7a/d75bec41edb6deaf1d2859bab66a84c8ba03e822e7eafdb245da205e53f6/opentelemetry_instrumentation_urllib3-0.54b1-py3-none-any.whl", hash = "sha256:e87958c297ddd36d30e1c9069f34a9690e845e4ccc2662dd80e99ed976d4c03e", size = 13123 },
+]
+
+[[package]]
+name = "opentelemetry-instrumentation-wsgi"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "opentelemetry-util-http" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a9/0f/442eba02bd277fae2f5eb3ac5f8dd5f8cc52ddbe080506748871b91a63ab/opentelemetry_instrumentation_wsgi-0.54b1.tar.gz", hash = "sha256:261ad737e0058812aaae6bb7d6e0fa7344de62464c5df30c82bea180e735b903", size = 18244 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/aa/2f/075156d123e589d6728cc4c1a43d0335fa16e8f4a9f723a4af9267d91169/opentelemetry_instrumentation_wsgi-0.54b1-py3-none-any.whl", hash = "sha256:6d99dca32ce232251cd321bf86e8c9d0a60c5f088bcbe5ad55d12a2006fe056e", size = 14378 },
+]
+
+[[package]]
+name = "opentelemetry-processor-baggage"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-sdk" },
+ { name = "wrapt" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9b/47/6ebc196ca33a79e6e8839d33ebf1b9a7d88646f48b12c5687e5a90300879/opentelemetry_processor_baggage-0.54b1.tar.gz", hash = "sha256:d3ec2a99fb8b88ca1153cf9b1b8eae76bd2bb518fb900f758a8d24e439276055", size = 7579 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b0/9f/db3a2e7162dc73f012b440c5600acaab301170cffe8d8ccce5e069bc4176/opentelemetry_processor_baggage-0.54b1-py3-none-any.whl", hash = "sha256:1502475016c90b68642c9377803fd77b7f295d0b33e0d3449ba113b405de2b49", size = 8877 },
+]
+
+[[package]]
+name = "opentelemetry-propagator-aws-xray"
+version = "1.0.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/32/13/310a7f3c789eb9bb51f8ee9b88fb4b9f4f1e7191c8c96c7ea6f15eaa99b5/opentelemetry-propagator-aws-xray-1.0.1.tar.gz", hash = "sha256:6e8be667bbcf17c3d81d70b2a7cdec0b11257ff64d3829ffe75b810ba1b49f86", size = 8932 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/24/2b1694b9452ac7ab3567dcb80902f7c5c8a39962751d5a4c54a357caa49e/opentelemetry_propagator_aws_xray-1.0.1-py3-none-any.whl", hash = "sha256:49267a1d72b3f04880ac75e24f9ef38fe323e2f3156c4531e0e00c71c0829c0f", size = 10812 },
+]
+
+[[package]]
+name = "opentelemetry-propagator-b3"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deprecated" },
+ { name = "opentelemetry-api" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/1c/b4/4fe00e8c63175e35c310ac4e5091b3c22a468a6098e8a5eacd8b991d6989/opentelemetry_propagator_b3-1.33.1.tar.gz", hash = "sha256:46bbe76d95ac7e1f50b263230aa1ce86445120f10c7008d66cb08266468561a3", size = 9618 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/67/4a/16676216b5b8db95a6bdeb529bf17603e14c70ac15fcadca8de2bd135c65/opentelemetry_propagator_b3-1.33.1-py3-none-any.whl", hash = "sha256:5c65708fbecb317ab4f1880e81f7bb0bf48caa2e1d52fe31f89d1cb86172a69c", size = 8936 },
+]
+
+[[package]]
+name = "opentelemetry-propagator-jaeger"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/7c/28/2be617ef9bf804f65864d17eef13af582992d529c61d58a8a17d711b918a/opentelemetry_propagator_jaeger-1.33.1.tar.gz", hash = "sha256:b4cd3f123a720db872401e2179f7384c70922a6b9bab2873f003419be82bb5e3", size = 8676 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/66/24/a20343cfa49b38192ca6e314294b50a76d427c7dcbfd1a3ddb19706fed71/opentelemetry_propagator_jaeger-1.33.1-py3-none-any.whl", hash = "sha256:d5cfd139b245b32b45edda478b7be1fc52ecc93a199aa6ed7fd074086d81d083", size = 8778 },
+]
+
+[[package]]
+name = "opentelemetry-propagator-ot-trace"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-sdk" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/01/a3/b1bc6a7dc4aa7467b7d4537452a4fb089cb82246138fed6a3272e9ec2de9/opentelemetry_propagator_ot_trace-0.54b1.tar.gz", hash = "sha256:ce6bbebe9a3e57d8abada605b3ef296d363c764bb9a075677ea6f7aed7ddf8e6", size = 5026 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/db/62/cab99d81b9de2f74e80cf5deac45c31ec110d65a6d9b043152cffe2e3edd/opentelemetry_propagator_ot_trace-0.54b1-py3-none-any.whl", hash = "sha256:3c7885bdee37b28562e17cd8cb72747102fdccd9d4e557f5b4afb109092db829", size = 4769 },
+]
+
+[[package]]
+name = "opentelemetry-proto"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "protobuf" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f6/dc/791f3d60a1ad8235930de23eea735ae1084be1c6f96fdadf38710662a7e5/opentelemetry_proto-1.33.1.tar.gz", hash = "sha256:9627b0a5c90753bf3920c398908307063e4458b287bb890e5c1d6fa11ad50b68", size = 34363 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c4/29/48609f4c875c2b6c80930073c82dd1cafd36b6782244c01394007b528960/opentelemetry_proto-1.33.1-py3-none-any.whl", hash = "sha256:243d285d9f29663fc7ea91a7171fcc1ccbbfff43b48df0774fd64a37d98eda70", size = 55854 },
+]
+
+[[package]]
+name = "opentelemetry-sdk"
+version = "1.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-semantic-conventions" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/67/12/909b98a7d9b110cce4b28d49b2e311797cffdce180371f35eba13a72dd00/opentelemetry_sdk-1.33.1.tar.gz", hash = "sha256:85b9fcf7c3d23506fbc9692fd210b8b025a1920535feec50bd54ce203d57a531", size = 161885 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/df/8e/ae2d0742041e0bd7fe0d2dcc5e7cce51dcf7d3961a26072d5b43cc8fa2a7/opentelemetry_sdk-1.33.1-py3-none-any.whl", hash = "sha256:19ea73d9a01be29cacaa5d6c8ce0adc0b7f7b4d58cc52f923e4413609f670112", size = 118950 },
+]
+
+[[package]]
+name = "opentelemetry-sdk-extension-aws"
+version = "2.0.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "opentelemetry-sdk" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/85/86/52a95a0128b5aeb9db76e3ee6f9aeb6f2417ad24da28747318cbdf11c43d/opentelemetry_sdk_extension_aws-2.0.2.tar.gz", hash = "sha256:9faa9bdf480d1c5c53151dabee75735c94dbde09e4762c68ff5c7bd4aa3408f3", size = 16014 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2d/6c/c85409f89ebe33d0998391f6e68ae0f2353a8e526450aad8b177ed5a26d3/opentelemetry_sdk_extension_aws-2.0.2-py3-none-any.whl", hash = "sha256:4c6e4b9fec01a4a9cfeac5272ce5aae6bc80e080a6bae1e52098746f53a7b32d", size = 18652 },
+]
+
+[[package]]
+name = "opentelemetry-semantic-conventions"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deprecated" },
+ { name = "opentelemetry-api" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5b/2c/d7990fc1ffc82889d466e7cd680788ace44a26789809924813b164344393/opentelemetry_semantic_conventions-0.54b1.tar.gz", hash = "sha256:d1cecedae15d19bdaafca1e56b29a66aa286f50b5d08f036a145c7f3e9ef9cee", size = 118642 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0a/80/08b1698c52ff76d96ba440bf15edc2f4bc0a279868778928e947c1004bdd/opentelemetry_semantic_conventions-0.54b1-py3-none-any.whl", hash = "sha256:29dab644a7e435b58d3a3918b58c333c92686236b30f7891d5e51f02933ca60d", size = 194938 },
+]
+
+[[package]]
+name = "opentelemetry-util-http"
+version = "0.54b1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a8/9f/1d8a1d1f34b9f62f2b940b388bf07b8167a8067e70870055bd05db354e5c/opentelemetry_util_http-0.54b1.tar.gz", hash = "sha256:f0b66868c19fbaf9c9d4e11f4a7599fa15d5ea50b884967a26ccd9d72c7c9d15", size = 8044 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a4/ef/c5aa08abca6894792beed4c0405e85205b35b8e73d653571c9ff13a8e34e/opentelemetry_util_http-0.54b1-py3-none-any.whl", hash = "sha256:b1c91883f980344a1c3c486cffd47ae5c9c1dd7323f9cbe9fdb7cadb401c87c9", size = 7301 },
+]
+
+[[package]]
+name = "packaging"
+version = "25.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 },
+]
+
+[[package]]
+name = "pillow"
+version = "11.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800 },
+ { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296 },
+ { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726 },
+ { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652 },
+ { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787 },
+ { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236 },
+ { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950 },
+ { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358 },
+ { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079 },
+ { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324 },
+ { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067 },
+ { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328 },
+ { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652 },
+ { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443 },
+ { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474 },
+ { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038 },
+ { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407 },
+ { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094 },
+ { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503 },
+ { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574 },
+ { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060 },
+ { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407 },
+ { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841 },
+ { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450 },
+ { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055 },
+ { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110 },
+ { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547 },
+ { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554 },
+ { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132 },
+ { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001 },
+ { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814 },
+ { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124 },
+ { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186 },
+ { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546 },
+ { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102 },
+ { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803 },
+ { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520 },
+ { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116 },
+ { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597 },
+ { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246 },
+ { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336 },
+ { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699 },
+ { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789 },
+ { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386 },
+ { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911 },
+ { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383 },
+ { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385 },
+ { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129 },
+ { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580 },
+ { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860 },
+ { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694 },
+ { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888 },
+ { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330 },
+ { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089 },
+ { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206 },
+ { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370 },
+ { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500 },
+ { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835 },
+]
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.51"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "wcwidth" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810 },
+]
+
+[[package]]
+name = "protobuf"
+version = "5.29.5"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/43/29/d09e70352e4e88c9c7a198d5645d7277811448d76c23b00345670f7c8a38/protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84", size = 425226 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5f/11/6e40e9fc5bba02988a214c07cf324595789ca7820160bfd1f8be96e48539/protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079", size = 422963 },
+ { url = "https://files.pythonhosted.org/packages/81/7f/73cefb093e1a2a7c3ffd839e6f9fcafb7a427d300c7f8aef9c64405d8ac6/protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc", size = 434818 },
+ { url = "https://files.pythonhosted.org/packages/dd/73/10e1661c21f139f2c6ad9b23040ff36fee624310dc28fba20d33fdae124c/protobuf-5.29.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e38c5add5a311f2a6eb0340716ef9b039c1dfa428b28f25a7838ac329204a671", size = 418091 },
+ { url = "https://files.pythonhosted.org/packages/6c/04/98f6f8cf5b07ab1294c13f34b4e69b3722bb609c5b701d6c169828f9f8aa/protobuf-5.29.5-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:fa18533a299d7ab6c55a238bf8629311439995f2e7eca5caaff08663606e9015", size = 319824 },
+ { url = "https://files.pythonhosted.org/packages/85/e4/07c80521879c2d15f321465ac24c70efe2381378c00bf5e56a0f4fbac8cd/protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:63848923da3325e1bf7e9003d680ce6e14b07e55d0473253a690c3a8b8fd6e61", size = 319942 },
+ { url = "https://files.pythonhosted.org/packages/7e/cc/7e77861000a0691aeea8f4566e5d3aa716f2b1dece4a24439437e41d3d25/protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5", size = 172823 },
+]
+
+[[package]]
+name = "psutil"
+version = "7.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 },
+ { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 },
+ { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 },
+ { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 },
+ { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 },
+ { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 },
+ { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 },
+]
+
+[[package]]
+name = "pydantic"
+version = "2.11.7"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "annotated-types" },
+ { name = "pydantic-core" },
+ { name = "typing-extensions" },
+ { name = "typing-inspection" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782 },
+]
+
+[[package]]
+name = "pydantic-core"
+version = "2.33.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000 },
+ { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996 },
+ { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957 },
+ { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199 },
+ { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296 },
+ { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109 },
+ { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028 },
+ { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044 },
+ { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881 },
+ { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034 },
+ { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187 },
+ { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628 },
+ { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866 },
+ { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894 },
+ { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688 },
+ { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808 },
+ { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580 },
+ { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859 },
+ { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810 },
+ { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498 },
+ { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611 },
+ { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924 },
+ { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196 },
+ { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389 },
+ { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223 },
+ { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473 },
+ { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269 },
+ { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921 },
+ { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162 },
+ { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560 },
+ { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777 },
+]
+
+[[package]]
+name = "pydantic-settings"
+version = "2.10.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pydantic" },
+ { name = "python-dotenv" },
+ { name = "typing-inspection" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/68/85/1ea668bbab3c50071ca613c6ab30047fb36ab0da1b92fa8f17bbc38fd36c/pydantic_settings-2.10.1.tar.gz", hash = "sha256:06f0062169818d0f5524420a360d632d5857b83cffd4d42fe29597807a1614ee", size = 172583 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/58/f0/427018098906416f580e3cf1366d3b1abfb408a0652e9f31600c24a1903c/pydantic_settings-2.10.1-py3-none-any.whl", hash = "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796", size = 45235 },
+]
+
+[[package]]
+name = "pygments"
+version = "2.19.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 },
+]
+
+[[package]]
+name = "pyjwt"
+version = "2.10.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
+]
+
+[[package]]
+name = "python-dotenv"
+version = "1.1.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556 },
+]
+
+[[package]]
+name = "python-multipart"
+version = "0.0.20"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/87/f44d7c9f274c7ee665a29b885ec97089ec5dc034c7f3fafa03da9e39a09e/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13", size = 37158 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546 },
+]
+
+[[package]]
+name = "pywin32"
+version = "311"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543 },
+ { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040 },
+ { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102 },
+ { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700 },
+ { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700 },
+ { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318 },
+ { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714 },
+ { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800 },
+ { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540 },
+]
+
+[[package]]
+name = "readabilipy"
+version = "0.3.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "beautifulsoup4" },
+ { name = "html5lib" },
+ { name = "lxml" },
+ { name = "regex" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b8/e4/260a202516886c2e0cc6e6ae96d1f491792d829098886d9529a2439fbe8e/readabilipy-0.3.0.tar.gz", hash = "sha256:e13313771216953935ac031db4234bdb9725413534bfb3c19dbd6caab0887ae0", size = 35491 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/dd/46/8a640c6de1a6c6af971f858b2fb178ca5e1db91f223d8ba5f40efe1491e5/readabilipy-0.3.0-py3-none-any.whl", hash = "sha256:d106da0fad11d5fdfcde21f5c5385556bfa8ff0258483037d39ea6b1d6db3943", size = 22158 },
+]
+
+[[package]]
+name = "referencing"
+version = "0.36.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "rpds-py" },
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 },
+]
+
+[[package]]
+name = "regex"
+version = "2024.11.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ba/30/9a87ce8336b172cc232a0db89a3af97929d06c11ceaa19d97d84fa90a8f8/regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", size = 483781 },
+ { url = "https://files.pythonhosted.org/packages/01/e8/00008ad4ff4be8b1844786ba6636035f7ef926db5686e4c0f98093612add/regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", size = 288455 },
+ { url = "https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", size = 284759 },
+ { url = "https://files.pythonhosted.org/packages/94/2b/701a4b0585cb05472a4da28ee28fdfe155f3638f5e1ec92306d924e5faf0/regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", size = 794976 },
+ { url = "https://files.pythonhosted.org/packages/4b/bf/fa87e563bf5fee75db8915f7352e1887b1249126a1be4813837f5dbec965/regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", size = 833077 },
+ { url = "https://files.pythonhosted.org/packages/a1/56/7295e6bad94b047f4d0834e4779491b81216583c00c288252ef625c01d23/regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", size = 823160 },
+ { url = "https://files.pythonhosted.org/packages/fb/13/e3b075031a738c9598c51cfbc4c7879e26729c53aa9cca59211c44235314/regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", size = 796896 },
+ { url = "https://files.pythonhosted.org/packages/24/56/0b3f1b66d592be6efec23a795b37732682520b47c53da5a32c33ed7d84e3/regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", size = 783997 },
+ { url = "https://files.pythonhosted.org/packages/f9/a1/eb378dada8b91c0e4c5f08ffb56f25fcae47bf52ad18f9b2f33b83e6d498/regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", size = 781725 },
+ { url = "https://files.pythonhosted.org/packages/83/f2/033e7dec0cfd6dda93390089864732a3409246ffe8b042e9554afa9bff4e/regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", size = 789481 },
+ { url = "https://files.pythonhosted.org/packages/83/23/15d4552ea28990a74e7696780c438aadd73a20318c47e527b47a4a5a596d/regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", size = 852896 },
+ { url = "https://files.pythonhosted.org/packages/e3/39/ed4416bc90deedbfdada2568b2cb0bc1fdb98efe11f5378d9892b2a88f8f/regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", size = 860138 },
+ { url = "https://files.pythonhosted.org/packages/93/2d/dd56bb76bd8e95bbce684326302f287455b56242a4f9c61f1bc76e28360e/regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", size = 787692 },
+ { url = "https://files.pythonhosted.org/packages/0b/55/31877a249ab7a5156758246b9c59539abbeba22461b7d8adc9e8475ff73e/regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", size = 262135 },
+ { url = "https://files.pythonhosted.org/packages/38/ec/ad2d7de49a600cdb8dd78434a1aeffe28b9d6fc42eb36afab4a27ad23384/regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", size = 273567 },
+ { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 },
+ { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 },
+ { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 },
+ { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 },
+ { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 },
+ { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 },
+ { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 },
+ { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 },
+ { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 },
+ { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 },
+ { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 },
+ { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 },
+ { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 },
+ { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 },
+ { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 },
+]
+
+[[package]]
+name = "requests"
+version = "2.32.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "charset-normalizer" },
+ { name = "idna" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847 },
+]
+
+[[package]]
+name = "rich"
+version = "14.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markdown-it-py" },
+ { name = "pygments" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 },
+]
+
+[[package]]
+name = "rpds-py"
+version = "0.26.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933 },
+ { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447 },
+ { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711 },
+ { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865 },
+ { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763 },
+ { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651 },
+ { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079 },
+ { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379 },
+ { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033 },
+ { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639 },
+ { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105 },
+ { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272 },
+ { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995 },
+ { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198 },
+ { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917 },
+ { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073 },
+ { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214 },
+ { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113 },
+ { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189 },
+ { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998 },
+ { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903 },
+ { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785 },
+ { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329 },
+ { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875 },
+ { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636 },
+ { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663 },
+ { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428 },
+ { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571 },
+ { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475 },
+ { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692 },
+ { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415 },
+ { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783 },
+ { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844 },
+ { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105 },
+ { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440 },
+ { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759 },
+ { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032 },
+ { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416 },
+ { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049 },
+ { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428 },
+ { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524 },
+ { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292 },
+ { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334 },
+ { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875 },
+ { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993 },
+ { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683 },
+ { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825 },
+ { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292 },
+ { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435 },
+ { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410 },
+ { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724 },
+ { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285 },
+ { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459 },
+ { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083 },
+ { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291 },
+ { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445 },
+ { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206 },
+ { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330 },
+ { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254 },
+ { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094 },
+ { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889 },
+ { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301 },
+ { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891 },
+ { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044 },
+ { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774 },
+ { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886 },
+ { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027 },
+ { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821 },
+]
+
+[[package]]
+name = "s3transfer"
+version = "0.13.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "botocore" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/6d/05/d52bf1e65044b4e5e27d4e63e8d1579dbdec54fce685908ae09bc3720030/s3transfer-0.13.1.tar.gz", hash = "sha256:c3fdba22ba1bd367922f27ec8032d6a1cf5f10c934fb5d68cf60fd5a23d936cf", size = 150589 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6d/4f/d073e09df851cfa251ef7840007d04db3293a0482ce607d2b993926089be/s3transfer-0.13.1-py3-none-any.whl", hash = "sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724", size = 85308 },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
+]
+
+[[package]]
+name = "slack-bolt"
+version = "1.23.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "slack-sdk" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a5/c9/7421458765061cb98e01a12d6cadc273ee35e75856b0073ec7c3efa5cf46/slack_bolt-1.23.0.tar.gz", hash = "sha256:3d2c3eb13131407a94f925eb22b180d352c2d97b808303ef92b7a46d6508c843", size = 130659 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c8/48/6f435d702a680307488c7d8d3bd6e12552bbf2ff3e0eb67ccb7d0850d122/slack_bolt-1.23.0-py2.py3-none-any.whl", hash = "sha256:6d6ae39d80c964c362505ae4e587eed2b26dbc3a9f0cb76af1150c30fb670488", size = 229691 },
+]
+
+[[package]]
+name = "slack-sdk"
+version = "3.36.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/73/1e/bbf7fdd00306f097ddb839c23628b7e271128cc8f584b9cae8f704b3924e/slack_sdk-3.36.0.tar.gz", hash = "sha256:8586022bdbdf9f8f8d32f394540436c53b1e7c8da9d21e1eab4560ba70cfcffa", size = 233382 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/70/9a/380d20856d9ea39fbc4d3bb66f076b0d72035ebe873eb05fc88ebee4125f/slack_sdk-3.36.0-py2.py3-none-any.whl", hash = "sha256:6c96887d7175fc1b0b2777b73bb65f39b5b8bee9bd8acfec071d64014f9e2d10", size = 293949 },
+]
+
+[[package]]
+name = "sniffio"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 },
+]
+
+[[package]]
+name = "soupsieve"
+version = "2.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 },
+]
+
+[[package]]
+name = "sse-starlette"
+version = "2.4.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/07/3e/eae74d8d33e3262bae0a7e023bb43d8bdd27980aa3557333f4632611151f/sse_starlette-2.4.1.tar.gz", hash = "sha256:7c8a800a1ca343e9165fc06bbda45c78e4c6166320707ae30b416c42da070926", size = 18635 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/f1/6c7eaa8187ba789a6dd6d74430307478d2a91c23a5452ab339b6fbe15a08/sse_starlette-2.4.1-py3-none-any.whl", hash = "sha256:08b77ea898ab1a13a428b2b6f73cfe6d0e607a7b4e15b9bb23e4a37b087fd39a", size = 10824 },
+]
+
+[[package]]
+name = "starlette"
+version = "0.47.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/04/57/d062573f391d062710d4088fa1369428c38d51460ab6fedff920efef932e/starlette-0.47.2.tar.gz", hash = "sha256:6ae9aa5db235e4846decc1e7b79c4f346adf41e9777aebeb49dfd09bbd7023d8", size = 2583948 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984 },
+]
+
+[[package]]
+name = "strands-agents"
+version = "1.0.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "boto3" },
+ { name = "botocore" },
+ { name = "docstring-parser" },
+ { name = "mcp" },
+ { name = "opentelemetry-api" },
+ { name = "opentelemetry-instrumentation-threading" },
+ { name = "opentelemetry-sdk" },
+ { name = "pydantic" },
+ { name = "typing-extensions" },
+ { name = "watchdog" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/fa/60/a1aae1e7bdf3a314d53f2d1184970e9d1bf3d33e42c8dd10b1f5661f03ac/strands_agents-1.0.1.tar.gz", hash = "sha256:cead5d738bbaaaa2b39fddd68a63a7bc03b015ac0530447f4956800a5678917a", size = 226442 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/81/06cc04f1ed4ec23104d3af29ba76192441620f60eae85795181dcacb8f0a/strands_agents-1.0.1-py3-none-any.whl", hash = "sha256:e28b066165466095848e3df69f6a87b63089728d7f905373279d9515969d5a73", size = 162872 },
+]
+
+[[package]]
+name = "strands-agents-tools"
+version = "0.2.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "aws-requests-auth" },
+ { name = "botocore" },
+ { name = "dill" },
+ { name = "markdownify" },
+ { name = "pillow" },
+ { name = "prompt-toolkit" },
+ { name = "pyjwt" },
+ { name = "readabilipy" },
+ { name = "rich" },
+ { name = "slack-bolt" },
+ { name = "strands-agents" },
+ { name = "sympy" },
+ { name = "tenacity" },
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
+ { name = "watchdog" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f3/0e/de478364b47def72172ccb09639a7a65de8e10602f05cca2b7b17cfc0e15/strands_agents_tools-0.2.1.tar.gz", hash = "sha256:9bae05e3510478f8898cfcfd8bad7e044fcf9473ad484d5e4b04a79e1832e2ea", size = 321499 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7b/47/340dfce9f5bdd9bd6cbb8dbdfbf09ce2257fc43256bbacfc3b410bfccaa8/strands_agents_tools-0.2.1-py3-none-any.whl", hash = "sha256:5e1dd85d8db07d226b8f4b60e932123a8c7ddebc3dbe5afc7e4a2aafb641dcaa", size = 229183 },
+]
+
+[[package]]
+name = "sympy"
+version = "1.14.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mpmath" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353 },
+]
+
+[[package]]
+name = "tenacity"
+version = "9.1.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0a/d4/2b0cd0fe285e14b36db076e78c93766ff1d529d70408bd1d2a5a84f1d929/tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", size = 48036 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e5/30/643397144bfbfec6f6ef821f36f33e57d35946c44a2352d3c9f0ae847619/tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138", size = 28248 },
+]
+
+[[package]]
+name = "typing-extensions"
+version = "4.14.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906 },
+]
+
+[[package]]
+name = "typing-inspection"
+version = "0.4.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552 },
+]
+
+[[package]]
+name = "tzdata"
+version = "2025.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 },
+]
+
+[[package]]
+name = "urllib3"
+version = "2.5.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 },
+]
+
+[[package]]
+name = "uvicorn"
+version = "0.35.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "h11" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406 },
+]
+
+[[package]]
+name = "watchdog"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471 },
+ { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449 },
+ { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054 },
+ { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480 },
+ { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451 },
+ { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057 },
+ { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079 },
+ { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078 },
+ { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076 },
+ { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077 },
+ { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078 },
+ { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077 },
+ { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078 },
+ { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065 },
+ { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070 },
+ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067 },
+]
+
+[[package]]
+name = "wcwidth"
+version = "0.2.13"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 },
+]
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 },
+]
+
+[[package]]
+name = "wrapt"
+version = "1.17.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799 },
+ { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821 },
+ { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919 },
+ { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721 },
+ { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899 },
+ { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222 },
+ { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707 },
+ { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685 },
+ { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567 },
+ { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672 },
+ { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865 },
+ { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800 },
+ { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824 },
+ { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920 },
+ { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690 },
+ { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861 },
+ { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174 },
+ { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721 },
+ { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763 },
+ { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585 },
+ { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676 },
+ { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871 },
+ { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312 },
+ { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062 },
+ { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155 },
+ { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471 },
+ { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208 },
+ { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339 },
+ { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232 },
+ { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476 },
+ { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377 },
+ { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986 },
+ { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750 },
+ { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594 },
+]
+
+[[package]]
+name = "zipp"
+version = "3.23.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276 },
+]
diff --git a/packages/cdk/lambda/getFileDownloadSignedUrl.ts b/packages/cdk/lambda/getFileDownloadSignedUrl.ts
index 5b4888f84..90d11ad0c 100644
--- a/packages/cdk/lambda/getFileDownloadSignedUrl.ts
+++ b/packages/cdk/lambda/getFileDownloadSignedUrl.ts
@@ -13,6 +13,7 @@ export const handler = async (
const req = event.queryStringParameters as GetFileDownloadSignedUrlRequest;
// We pass `s3Type` parameter since Knowledge Base may need to reference S3 in a different account
+ // default and agentcore currently reside in same account and region is specifed in request
const client =
req.s3Type === 'knowledgeBase'
? await initKnowledgeBaseS3Client({
diff --git a/packages/cdk/lib/agent-core-stack.ts b/packages/cdk/lib/agent-core-stack.ts
new file mode 100644
index 000000000..86c105649
--- /dev/null
+++ b/packages/cdk/lib/agent-core-stack.ts
@@ -0,0 +1,65 @@
+import { Stack, StackProps, CfnOutput } from 'aws-cdk-lib';
+import { Construct } from 'constructs';
+import { GenericAgentCore } from './construct/generic-agent-core';
+import { ProcessedStackInput } from './stack-input';
+import { BucketInfo } from 'generative-ai-use-cases';
+
+export interface AgentCoreStackProps extends StackProps {
+ readonly params: ProcessedStackInput;
+}
+
+export class AgentCoreStack extends Stack {
+ public readonly genericAgentCore?: GenericAgentCore;
+
+ constructor(scope: Construct, id: string, props: AgentCoreStackProps) {
+ super(scope, id, props);
+
+ const params = props.params;
+
+ // Deploy Generic AgentCore Runtime if enabled
+ if (params.createGenericAgentCoreRuntime) {
+ this.genericAgentCore = new GenericAgentCore(this, 'GenericAgentCore', {
+ env: params.env,
+ });
+
+ // Output the runtime ARN for cross-stack reference
+ new CfnOutput(this, 'GenericAgentCoreRuntimeArn', {
+ value: this.genericAgentCore.deployedGenericRuntimeArn || '',
+ exportName: `${this.stackName}-GenericAgentCoreRuntimeArn`,
+ });
+
+ new CfnOutput(this, 'GenericAgentCoreRuntimeName', {
+ value: this.genericAgentCore.getGenericRuntimeConfig().name,
+ exportName: `${this.stackName}-GenericAgentCoreRuntimeName`,
+ });
+ }
+ }
+
+ /**
+ * Get the deployed generic runtime ARN
+ */
+ public get deployedGenericRuntimeArn(): string | undefined {
+ return this.genericAgentCore?.deployedGenericRuntimeArn;
+ }
+
+ /**
+ * Get the generic runtime configuration
+ */
+ public getGenericRuntimeConfig() {
+ return this.genericAgentCore?.getGenericRuntimeConfig();
+ }
+
+ /**
+ * Get the file bucket for Agent Core Runtime
+ */
+ public get fileBucket() {
+ return this.genericAgentCore?.fileBucket;
+ }
+
+ /**
+ * Get the file bucket information (bucket name and region)
+ */
+ public get fileBucketInfo(): BucketInfo | undefined {
+ return this.genericAgentCore?.fileBucketInfo;
+ }
+}
diff --git a/packages/cdk/lib/construct/agent-core.ts b/packages/cdk/lib/construct/agent-core.ts
new file mode 100644
index 000000000..7b2ae2af9
--- /dev/null
+++ b/packages/cdk/lib/construct/agent-core.ts
@@ -0,0 +1,53 @@
+import { Construct } from 'constructs';
+import { IdentityPool } from 'aws-cdk-lib/aws-cognito-identitypool';
+import { Effect, Policy, PolicyStatement } from 'aws-cdk-lib/aws-iam';
+import { AgentCoreConfiguration } from 'generative-ai-use-cases';
+
+export interface AgentCoreProps {
+ readonly agentCoreExternalRuntimes: AgentCoreConfiguration[];
+ readonly idPool: IdentityPool;
+ readonly genericRuntimeArn?: string; // ARN from the separate AgentCore stack
+ readonly genericRuntimeName?: string; // Name from the separate AgentCore stack
+}
+
+export class AgentCore extends Construct {
+ private readonly _genericRuntimeArn?: string;
+ private readonly _genericRuntimeName?: string;
+
+ constructor(scope: Construct, id: string, props: AgentCoreProps) {
+ super(scope, id);
+
+ this._genericRuntimeArn = props.genericRuntimeArn;
+ this._genericRuntimeName = props.genericRuntimeName;
+
+ // Grant invoke permissions to identity pool
+ this.grantInvokePermissions(props.idPool, props.agentCoreExternalRuntimes);
+ }
+
+ /**
+ * Grant invoke permissions to identity pool for all runtimes
+ */
+ private grantInvokePermissions(
+ idPool: IdentityPool,
+ externalRuntimes: AgentCoreConfiguration[]
+ ): void {
+ const resources = [
+ ...(this._genericRuntimeArn ? [this._genericRuntimeArn + '*'] : []),
+ ...externalRuntimes.map((runtime) => runtime.arn + '*'),
+ ];
+
+ if (resources.length > 0) {
+ idPool.authenticatedRole.attachInlinePolicy(
+ new Policy(this, 'AgentCoreRuntimePolicy', {
+ statements: [
+ new PolicyStatement({
+ effect: Effect.ALLOW,
+ actions: ['bedrock-agentcore:InvokeAgentRuntime'],
+ resources: resources,
+ }),
+ ],
+ })
+ );
+ }
+ }
+}
diff --git a/packages/cdk/lib/construct/api.ts b/packages/cdk/lib/construct/api.ts
index 1e840a696..80e38020c 100644
--- a/packages/cdk/lib/construct/api.ts
+++ b/packages/cdk/lib/construct/api.ts
@@ -44,6 +44,7 @@ export interface BackendApiProps {
readonly crossAccountBedrockRoleArn?: string | null;
readonly allowedIpV4AddressRanges?: string[] | null;
readonly allowedIpV6AddressRanges?: string[] | null;
+ readonly additionalS3Buckets?: Bucket[];
// Resource
readonly userPool: UserPool;
@@ -420,11 +421,13 @@ export class Api extends Construct {
timeout: Duration.minutes(15),
environment: {
CROSS_ACCOUNT_BEDROCK_ROLE_ARN: crossAccountBedrockRoleArn ?? '',
+ MODEL_REGION: modelRegion,
},
}
);
// Grant S3 read permissions with source IP condition
if (getFileDownloadSignedUrlFunction.role) {
+ // Default bucket permissions
allowS3AccessWithSourceIpCondition(
fileBucket.bucketName,
getFileDownloadSignedUrlFunction.role,
@@ -434,6 +437,21 @@ export class Api extends Construct {
ipv6: props.allowedIpV6AddressRanges,
}
);
+
+ // Additional buckets permissions (AgentCore, external buckets, etc.)
+ if (props.additionalS3Buckets) {
+ props.additionalS3Buckets.forEach((bucket) => {
+ allowS3AccessWithSourceIpCondition(
+ bucket.bucketName,
+ getFileDownloadSignedUrlFunction.role!,
+ 'read',
+ {
+ ipv4: props.allowedIpV4AddressRanges,
+ ipv6: props.allowedIpV6AddressRanges,
+ }
+ );
+ });
+ }
}
// If SageMaker Endpoint exists, grant permission
diff --git a/packages/cdk/lib/construct/generic-agent-core.ts b/packages/cdk/lib/construct/generic-agent-core.ts
new file mode 100644
index 000000000..c32f798ee
--- /dev/null
+++ b/packages/cdk/lib/construct/generic-agent-core.ts
@@ -0,0 +1,505 @@
+import { Construct } from 'constructs';
+import {
+ Effect,
+ PolicyStatement,
+ Role,
+ ServicePrincipal,
+ ManagedPolicy,
+} from 'aws-cdk-lib/aws-iam';
+import { CustomResource, Duration, Stack, RemovalPolicy } from 'aws-cdk-lib';
+import { Provider } from 'aws-cdk-lib/custom-resources';
+import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
+import { Repository } from 'aws-cdk-lib/aws-ecr';
+import { DockerImageAsset, Platform } from 'aws-cdk-lib/aws-ecr-assets';
+import {
+ Bucket,
+ BlockPublicAccess,
+ BucketEncryption,
+} from 'aws-cdk-lib/aws-s3';
+import { BucketInfo } from 'generative-ai-use-cases';
+import * as path from 'path';
+import { LAMBDA_RUNTIME_NODEJS } from '../../consts';
+
+export interface AgentCoreRuntimeConfig {
+ name: string;
+ instructions?: string;
+ memorySize?: number;
+ customRuntimeConfig?: Record;
+ dockerPath?: string; // Docker file path of AgentCore Runtime
+ networkMode?: string; // PUBLIC
+ serverProtocol?: string; // HTTP, MCP
+ environmentVariables?: Record;
+}
+
+export interface GenericAgentCoreProps {
+ // Add any specific configuration props if needed
+ env: string;
+}
+
+// UUID for Agent Core Runtime
+const AGENT_CORE_RUNTIME_UUID = 'B8F5E892-3A1C-4D2F-9B7E-6C8A5F9D2E1B';
+
+export class GenericAgentCore extends Construct {
+ private _deployedGenericRuntimeArn?: string;
+ private _ecrRepository?: Repository;
+ private _imageUri?: string;
+ private readonly genericRuntimeConfig: AgentCoreRuntimeConfig;
+ private readonly _fileBucket: Bucket;
+
+ constructor(scope: Construct, id: string, props: GenericAgentCoreProps) {
+ super(scope, id);
+
+ const { env } = props;
+
+ // Create dedicated S3 bucket for Agent Core Runtime
+ this._fileBucket = new Bucket(this, 'AgentCoreFileBucket', {
+ blockPublicAccess: BlockPublicAccess.BLOCK_ALL,
+ encryption: BucketEncryption.S3_MANAGED,
+ removalPolicy: RemovalPolicy.DESTROY,
+ autoDeleteObjects: true,
+ });
+
+ // Default configuration for Generic AgentCore Runtime
+ this.genericRuntimeConfig = {
+ name: `GenericAgentCoreRuntime${env}`,
+ instructions: 'You are a helpful assistant powered by AWS Bedrock.',
+ memorySize: 2048,
+ dockerPath: 'lambda-python/generic-agent-core-runtime',
+ networkMode: 'PUBLIC',
+ serverProtocol: 'HTTP',
+ environmentVariables: {
+ FILE_BUCKET: this._fileBucket.bucketName,
+ },
+ };
+
+ // Deploy generic AgentCore Runtime
+ const result = this.deployGenericRuntime();
+ this._ecrRepository = result.repository;
+ this._imageUri = result.imageUri;
+ }
+
+ /**
+ * Deploy the generic AgentCore Runtime
+ */
+ private deployGenericRuntime(): { repository: Repository; imageUri: string } {
+ const dockerImageAsset = this.createDockerImageAsset();
+ const { customResourceRole, agentCoreRuntimeRole } = this.createIamRoles();
+ const customResourceProvider =
+ this.createCustomResourceProvider(customResourceRole);
+
+ const customResource = this.createAgentCoreRuntime(
+ 'GenericAgentCoreRuntime',
+ this.genericRuntimeConfig,
+ agentCoreRuntimeRole,
+ customResourceProvider,
+ dockerImageAsset.imageUri
+ );
+
+ // Get the actual runtime ARN and ID from CustomResource response
+ this._deployedGenericRuntimeArn = customResource.getAttString(
+ 'AgentCoreRuntimeArn'
+ );
+
+ return dockerImageAsset;
+ }
+
+ /**
+ * Create Docker image asset for the MCP API
+ */
+ private createDockerImageAsset(): {
+ repository: Repository;
+ imageUri: string;
+ } {
+ const dockerPath =
+ this.genericRuntimeConfig.dockerPath ||
+ 'lambda-python/generic-agent-core-runtime';
+ const pathName = dockerPath.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase();
+
+ const repository = new Repository(this, 'AgentCoreRuntimeRepository', {
+ repositoryName: `${pathName}-${Stack.of(this).stackName.toLowerCase()}`,
+ imageScanOnPush: true,
+ removalPolicy: RemovalPolicy.DESTROY,
+ });
+
+ const dockerAsset = new DockerImageAsset(
+ this,
+ 'AgentCoreRuntimeDockerAsset',
+ {
+ directory: path.join(__dirname, `../../${dockerPath}`),
+ platform: Platform.LINUX_ARM64, // AgentCore for ARM platform
+ }
+ );
+
+ return {
+ repository,
+ imageUri: dockerAsset.imageUri,
+ };
+ }
+
+ /**
+ * Create IAM roles for AgentCore operations
+ */
+ private createIamRoles(): {
+ customResourceRole: Role;
+ agentCoreRuntimeRole: Role;
+ } {
+ const customResourceRole = this.createCustomResourceRole();
+ const agentCoreRuntimeRole = this.createAgentCoreRuntimeRole();
+
+ return { customResourceRole, agentCoreRuntimeRole };
+ }
+
+ /**
+ * Create IAM role for Custom Resource operations
+ */
+ private createCustomResourceRole(): Role {
+ const role = new Role(this, 'AgentCoreCustomResourceRole', {
+ assumedBy: new ServicePrincipal('lambda.amazonaws.com'),
+ managedPolicies: [
+ ManagedPolicy.fromAwsManagedPolicyName(
+ 'service-role/AWSLambdaBasicExecutionRole'
+ ),
+ ],
+ });
+
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'BedrockAgentCorePermissions',
+ effect: Effect.ALLOW,
+ actions: ['bedrock-agentcore:*'],
+ resources: ['*'],
+ })
+ );
+
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'IAMPassRolePermissions',
+ effect: Effect.ALLOW,
+ actions: ['iam:PassRole'],
+ resources: ['*'],
+ conditions: {
+ StringEquals: {
+ 'iam:PassedToService': 'bedrock-agentcore.amazonaws.com',
+ },
+ },
+ })
+ );
+
+ return role;
+ }
+
+ /**
+ * Create IAM role for AgentCore Runtime execution with comprehensive permissions
+ */
+ private createAgentCoreRuntimeRole(): Role {
+ const role = new Role(this, 'AgentCoreRuntimeRole', {
+ assumedBy: new ServicePrincipal('bedrock-agentcore.amazonaws.com', {
+ conditions: {
+ StringEquals: {
+ 'aws:SourceAccount': Stack.of(this).account,
+ },
+ ArnLike: {
+ 'aws:SourceArn': `arn:aws:bedrock-agentcore:${Stack.of(this).region}:${Stack.of(this).account}:*`,
+ },
+ },
+ }),
+ managedPolicies: [
+ ManagedPolicy.fromAwsManagedPolicyName(
+ 'service-role/AWSLambdaBasicExecutionRole'
+ ),
+ ],
+ });
+
+ // Bedrock
+
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'BedrockPermissions',
+ effect: Effect.ALLOW,
+ actions: [
+ 'bedrock:InvokeModel',
+ 'bedrock:InvokeModelWithResponseStream',
+ ],
+ resources: ['*'],
+ })
+ );
+
+ // ECR
+
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'ECRImageAccess',
+ effect: Effect.ALLOW,
+ actions: ['ecr:BatchGetImage', 'ecr:GetDownloadUrlForLayer'],
+ resources: [
+ `arn:aws:ecr:${Stack.of(this).region}:${Stack.of(this).account}:repository/*`,
+ ],
+ })
+ );
+
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'ECRTokenAccess',
+ effect: Effect.ALLOW,
+ actions: ['ecr:GetAuthorizationToken'],
+ resources: ['*'],
+ })
+ );
+
+ // Logging
+
+ const logGroupArn = `arn:aws:logs:${Stack.of(this).region}:${Stack.of(this).account}:log-group:/aws/bedrock-agentcore/runtimes/*`;
+
+ role.addToPolicy(
+ new PolicyStatement({
+ effect: Effect.ALLOW,
+ actions: ['logs:DescribeLogStreams', 'logs:CreateLogGroup'],
+ resources: [logGroupArn],
+ })
+ );
+
+ role.addToPolicy(
+ new PolicyStatement({
+ effect: Effect.ALLOW,
+ actions: ['logs:DescribeLogGroups'],
+ resources: [
+ `arn:aws:logs:${Stack.of(this).region}:${Stack.of(this).account}:log-group:*`,
+ ],
+ })
+ );
+
+ role.addToPolicy(
+ new PolicyStatement({
+ effect: Effect.ALLOW,
+ actions: ['logs:CreateLogStream', 'logs:PutLogEvents'],
+ resources: [`${logGroupArn}:log-stream:*`],
+ })
+ );
+
+ // Monitoring
+ role.addToPolicy(
+ new PolicyStatement({
+ effect: Effect.ALLOW,
+ actions: [
+ 'xray:PutTraceSegments',
+ 'xray:PutTelemetryRecords',
+ 'xray:GetSamplingRules',
+ 'xray:GetSamplingTargets',
+ ],
+ resources: ['*'],
+ })
+ );
+
+ role.addToPolicy(
+ new PolicyStatement({
+ effect: Effect.ALLOW,
+ actions: ['cloudwatch:PutMetricData'],
+ resources: ['*'],
+ conditions: {
+ StringEquals: {
+ 'cloudwatch:namespace': 'bedrock-agentcore',
+ },
+ },
+ })
+ );
+
+ // Workload
+
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'GetAgentAccessToken',
+ effect: Effect.ALLOW,
+ actions: [
+ 'bedrock-agentcore:GetWorkloadAccessToken',
+ 'bedrock-agentcore:GetWorkloadAccessTokenForJWT',
+ 'bedrock-agentcore:GetWorkloadAccessTokenForUserId',
+ ],
+ resources: [
+ `arn:aws:bedrock-agentcore:${Stack.of(this).region}:${Stack.of(this).account}:workload-identity-directory/default`,
+ `arn:aws:bedrock-agentcore:${Stack.of(this).region}:${Stack.of(this).account}:workload-identity-directory/default/workload-identity/*`,
+ ],
+ })
+ );
+
+ // S3 File Bucket Access
+ this._fileBucket.grantReadWrite(role);
+
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'S3BucketAccess',
+ effect: Effect.ALLOW,
+ actions: [
+ 's3:GetObject',
+ 's3:PutObject',
+ 's3:ListBucket',
+ 's3:DeleteObject',
+ ],
+ resources: [
+ this._fileBucket.bucketArn,
+ `${this._fileBucket.bucketArn}/*`,
+ ],
+ })
+ );
+
+ // Tools
+ role.addToPolicy(
+ new PolicyStatement({
+ sid: 'Tools',
+ effect: Effect.ALLOW,
+ actions: [
+ 'bedrock-agentcore:CreateCodeInterpreter',
+ 'bedrock-agentcore:StartCodeInterpreterSession',
+ 'bedrock-agentcore:InvokeCodeInterpreter',
+ 'bedrock-agentcore:StopCodeInterpreterSession',
+ 'bedrock-agentcore:DeleteCodeInterpreter',
+ 'bedrock-agentcore:ListCodeInterpreters',
+ 'bedrock-agentcore:GetCodeInterpreter',
+ 'bedrock-agentcore:GetCodeInterpreterSession',
+ 'bedrock-agentcore:ListCodeInterpreterSessions',
+ ],
+ resources: ['*'],
+ })
+ );
+
+ return role;
+ }
+
+ /**
+ * Get or create a singleton NodejsFunction using unique ID pattern
+ */
+ private getOrCreateSingletonFunction(
+ uniqueId: string,
+ functionName: string,
+ entry: string,
+ role: Role
+ ): NodejsFunction {
+ const stack = Stack.of(this);
+ const singletonId = `Singleton-${uniqueId}`;
+
+ // Try to find existing function in the stack scope
+ const existingConstruct = stack.node.tryFindChild(singletonId);
+
+ if (existingConstruct && existingConstruct instanceof NodejsFunction) {
+ // Reuse existing function
+ return existingConstruct;
+ }
+
+ // Create new NodejsFunction
+ return new NodejsFunction(stack, singletonId, {
+ functionName: `${functionName}-${Stack.of(this).stackName}-${uniqueId.slice(0, 8)}`,
+ description: `${functionName} CustomResource Lambda Function (Singleton)`,
+ runtime: LAMBDA_RUNTIME_NODEJS,
+ entry,
+ handler: 'handler',
+ timeout: Duration.minutes(10),
+ role,
+ environment: {
+ AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
+ },
+ bundling: {
+ minify: false,
+ target: 'es2020',
+ nodeModules: ['@aws-sdk/client-bedrock-agentcore-control'],
+ },
+ });
+ }
+
+ /**
+ * Create Custom Resource provider with custom singleton logic
+ */
+ private createCustomResourceProvider(customResourceRole: Role): Provider {
+ const lambdaFunction = this.getOrCreateSingletonFunction(
+ AGENT_CORE_RUNTIME_UUID,
+ 'AgentCoreRuntime',
+ path.join(
+ __dirname,
+ '../../custom-resources/agent-core-runtime/index.ts'
+ ),
+ customResourceRole
+ );
+
+ return new Provider(this, 'AgentCoreRuntimeProvider', {
+ onEventHandler: lambdaFunction,
+ });
+ }
+
+ /**
+ * Create individual AgentCore Runtime using Custom Resource
+ */
+ private createAgentCoreRuntime(
+ id: string,
+ config: AgentCoreRuntimeConfig,
+ agentCoreRuntimeRole: Role,
+ customResourceProvider: Provider,
+ imageUri: string
+ ): CustomResource {
+ if (!imageUri) {
+ throw new Error(
+ `AgentCore Runtime '${config.name}' requires imageUri to be provided`
+ );
+ }
+
+ const customConfig = { ...config.customRuntimeConfig };
+ customConfig.containerImageUri = imageUri;
+
+ if (config.environmentVariables) {
+ customConfig.environmentVariables = config.environmentVariables;
+ }
+
+ return new CustomResource(this, id, {
+ serviceToken: customResourceProvider.serviceToken,
+ properties: {
+ AgentCoreRuntimeName: config.name,
+ RoleArn: agentCoreRuntimeRole.roleArn,
+ NetworkMode: config.networkMode || 'PUBLIC',
+ ServerProtocol: config.serverProtocol || 'HTTP',
+ CustomConfig: customConfig,
+ },
+ });
+ }
+
+ /**
+ * Get ECR repository
+ */
+ public get ecrRepository(): Repository | undefined {
+ return this._ecrRepository;
+ }
+
+ /**
+ * Get MCP API image URI
+ */
+ public get imageUri(): string | undefined {
+ return this._imageUri;
+ }
+
+ /**
+ * Get deployed generic runtime ARN
+ */
+ public get deployedGenericRuntimeArn(): string | undefined {
+ return this._deployedGenericRuntimeArn;
+ }
+
+ /**
+ * Get the generic runtime configuration
+ */
+ public getGenericRuntimeConfig(): AgentCoreRuntimeConfig {
+ return { ...this.genericRuntimeConfig };
+ }
+
+ /**
+ * Get the file bucket for Agent Core Runtime
+ */
+ public get fileBucket(): Bucket {
+ return this._fileBucket;
+ }
+
+ /**
+ * Get the file bucket information (bucket name and region)
+ */
+ public get fileBucketInfo(): BucketInfo {
+ return {
+ bucketName: this._fileBucket.bucketName,
+ region: Stack.of(this).region,
+ };
+ }
+}
diff --git a/packages/cdk/lib/construct/index.ts b/packages/cdk/lib/construct/index.ts
index 80b0ca64b..2ca33a66a 100644
--- a/packages/cdk/lib/construct/index.ts
+++ b/packages/cdk/lib/construct/index.ts
@@ -10,3 +10,5 @@ export * from './rag-knowledge-base';
export * from './guardrail';
export * from './speech-to-speech';
export * from './mcp-api';
+export * from './agent-core';
+export * from './generic-agent-core';
diff --git a/packages/cdk/lib/construct/web.ts b/packages/cdk/lib/construct/web.ts
index f5a50a86b..96b71358a 100644
--- a/packages/cdk/lib/construct/web.ts
+++ b/packages/cdk/lib/construct/web.ts
@@ -17,6 +17,7 @@ import { ARecord, HostedZone, RecordTarget } from 'aws-cdk-lib/aws-route53';
import { CloudFrontTarget } from 'aws-cdk-lib/aws-route53-targets';
import { ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
import {
+ AgentCoreConfiguration,
Flow,
HiddenUseCases,
ModelConfiguration,
@@ -58,6 +59,10 @@ export interface WebProps {
readonly speechToSpeechModelIds: ModelConfiguration[];
readonly mcpEnabled: boolean;
readonly mcpEndpoint: string | null;
+ readonly agentCoreEnabled: boolean;
+ readonly agentCoreGenericRuntime?: AgentCoreConfiguration;
+ readonly agentCoreExternalRuntimes: AgentCoreConfiguration[];
+ readonly agentCoreRegion?: string;
}
export class Web extends Construct {
@@ -264,6 +269,13 @@ export class Web extends Construct {
),
VITE_APP_MCP_ENABLED: props.mcpEnabled.toString(),
VITE_APP_MCP_ENDPOINT: props.mcpEndpoint ?? '',
+ VITE_APP_AGENT_CORE_ENABLED: props.agentCoreEnabled.toString(),
+ VITE_APP_AGENT_CORE_GENERIC_RUNTIME: JSON.stringify(
+ props.agentCoreGenericRuntime
+ ),
+ VITE_APP_AGENT_CORE_EXTERNAL_RUNTIMES: JSON.stringify(
+ props.agentCoreExternalRuntimes
+ ),
},
});
// Enhance computing resources
diff --git a/packages/cdk/lib/create-stacks.ts b/packages/cdk/lib/create-stacks.ts
index 9f8da7a81..c011f1aae 100644
--- a/packages/cdk/lib/create-stacks.ts
+++ b/packages/cdk/lib/create-stacks.ts
@@ -6,6 +6,7 @@ import { DashboardStack } from './dashboard-stack';
import { AgentStack } from './agent-stack';
import { RagKnowledgeBaseStack } from './rag-knowledge-base-stack';
import { GuardrailStack } from './guardrail-stack';
+import { AgentCoreStack } from './agent-core-stack';
import { ProcessedStackInput } from './stack-input';
import { VideoTmpBucketStack } from './video-tmp-bucket-stack';
@@ -81,6 +82,18 @@ export const createStacks = (app: cdk.App, params: ProcessedStackInput) => {
})
: null;
+ // Agent Core Runtime
+ const agentCoreStack = params.createGenericAgentCoreRuntime
+ ? new AgentCoreStack(app, `AgentCoreStack${params.env}`, {
+ env: {
+ account: params.account,
+ region: params.agentCoreRegion,
+ },
+ params: params,
+ crossRegionReferences: true,
+ })
+ : null;
+
// Create S3 Bucket for each unique region for StartAsyncInvoke in video generation
// because the S3 Bucket must be in the same region as Bedrock Runtime
const videoModelRegions = [
@@ -125,6 +138,8 @@ export const createStacks = (app: cdk.App, params: ProcessedStackInput) => {
ragKnowledgeBaseStack?.dataSourceBucketName,
// Agent
agents: agentStack?.agents,
+ // Agent Core
+ agentCoreStack: agentCoreStack || undefined,
// Video Generation
videoBucketRegionMap,
// Guardrail
@@ -166,6 +181,7 @@ export const createStacks = (app: cdk.App, params: ProcessedStackInput) => {
ragKnowledgeBaseStack,
agentStack,
guardrail,
+ agentCoreStack,
generativeAiUseCasesStack,
dashboardStack,
};
diff --git a/packages/cdk/lib/generative-ai-use-cases-stack.ts b/packages/cdk/lib/generative-ai-use-cases-stack.ts
index fbe81dd24..d7cd1d978 100644
--- a/packages/cdk/lib/generative-ai-use-cases-stack.ts
+++ b/packages/cdk/lib/generative-ai-use-cases-stack.ts
@@ -11,6 +11,7 @@ import {
CommonWebAcl,
SpeechToSpeech,
McpApi,
+ AgentCore,
} from './construct';
import { CfnWebACLAssociation } from 'aws-cdk-lib/aws-wafv2';
import * as cognito from 'aws-cdk-lib/aws-cognito';
@@ -19,6 +20,7 @@ import { Agent } from 'generative-ai-use-cases';
import { UseCaseBuilder } from './construct/use-case-builder';
import { ProcessedStackInput } from './stack-input';
import { allowS3AccessWithSourceIpCondition } from './utils/s3-access-policy';
+import { AgentCoreStack } from './agent-core-stack';
export interface GenerativeAiUseCasesStackProps extends StackProps {
readonly params: ProcessedStackInput;
@@ -27,6 +29,8 @@ export interface GenerativeAiUseCasesStackProps extends StackProps {
readonly knowledgeBaseDataSourceBucketName?: string;
// Agent
readonly agents?: Agent[];
+ // Agent Core
+ readonly agentCoreStack?: AgentCoreStack;
// Video Generation
readonly videoBucketRegionMap: Record;
// Guardrail
@@ -80,6 +84,9 @@ export class GenerativeAiUseCasesStack extends Stack {
crossAccountBedrockRoleArn: params.crossAccountBedrockRoleArn,
allowedIpV4AddressRanges: params.allowedIpV4AddressRanges,
allowedIpV6AddressRanges: params.allowedIpV6AddressRanges,
+ additionalS3Buckets: props.agentCoreStack?.fileBucket
+ ? [props.agentCoreStack.fileBucket]
+ : undefined,
userPool: auth.userPool,
idPool: auth.idPool,
userPoolClient: auth.client,
@@ -133,6 +140,26 @@ export class GenerativeAiUseCasesStack extends Stack {
mcpEndpoint = mcpApi.endpoint;
}
+ // AgentCore Runtime (External runtimes and permissions only)
+ let genericRuntimeArn: string | undefined;
+ let genericRuntimeName: string | undefined;
+
+ // Get generic runtime info from AgentCore stack if it exists
+ if (props.agentCoreStack) {
+ genericRuntimeArn = props.agentCoreStack.deployedGenericRuntimeArn;
+ genericRuntimeName = props.agentCoreStack.getGenericRuntimeConfig()?.name;
+ }
+
+ // Create AgentCore construct for external runtimes and permissions
+ if (params.agentCoreExternalRuntimes.length > 0 || genericRuntimeArn) {
+ new AgentCore(this, 'AgentCore', {
+ agentCoreExternalRuntimes: params.agentCoreExternalRuntimes,
+ idPool: auth.idPool,
+ genericRuntimeArn,
+ genericRuntimeName,
+ });
+ }
+
// Web Frontend
const web = new Web(this, 'Api', {
// Auth
@@ -167,6 +194,17 @@ export class GenerativeAiUseCasesStack extends Stack {
speechToSpeechModelIds: params.speechToSpeechModelIds,
mcpEnabled: params.mcpEnabled,
mcpEndpoint,
+ agentCoreEnabled:
+ params.createGenericAgentCoreRuntime ||
+ params.agentCoreExternalRuntimes.length > 0,
+ agentCoreGenericRuntime: genericRuntimeArn
+ ? {
+ name: genericRuntimeName || 'GenericAgentCoreRuntime',
+ arn: genericRuntimeArn,
+ }
+ : undefined,
+ agentCoreExternalRuntimes: params.agentCoreExternalRuntimes,
+ agentCoreRegion: params.agentCoreRegion,
// Frontend
hiddenUseCases: params.hiddenUseCases,
// Custom Domain
@@ -383,6 +421,26 @@ export class GenerativeAiUseCasesStack extends Stack {
value: mcpEndpoint ?? '',
});
+ new CfnOutput(this, 'AgentCoreEnabled', {
+ value: (
+ params.createGenericAgentCoreRuntime ||
+ params.agentCoreExternalRuntimes.length > 0
+ ).toString(),
+ });
+
+ new CfnOutput(this, 'AgentCoreGenericRuntime', {
+ value: genericRuntimeArn
+ ? JSON.stringify({
+ name: genericRuntimeName || 'GenericAgentCoreRuntime',
+ arn: genericRuntimeArn,
+ })
+ : 'null',
+ });
+
+ new CfnOutput(this, 'AgentCoreExternalRuntimes', {
+ value: JSON.stringify(params.agentCoreExternalRuntimes),
+ });
+
this.userPool = auth.userPool;
this.userPoolClient = auth.client;
diff --git a/packages/cdk/lib/rag-knowledge-base-stack.ts b/packages/cdk/lib/rag-knowledge-base-stack.ts
index 9f98662ad..d74ec839f 100644
--- a/packages/cdk/lib/rag-knowledge-base-stack.ts
+++ b/packages/cdk/lib/rag-knowledge-base-stack.ts
@@ -102,7 +102,7 @@ class OpenSearchServerlessIndex extends Construct {
'OpenSearchServerlessIndex',
{
runtime: LAMBDA_RUNTIME_NODEJS,
- code: lambda.Code.fromAsset('custom-resources'),
+ code: lambda.Code.fromAsset('custom-resources/opensearch-index'),
handler: 'oss-index.handler',
uuid: UUID,
lambdaPurpose: 'OpenSearchServerlessIndex',
diff --git a/packages/cdk/lib/stack-input.ts b/packages/cdk/lib/stack-input.ts
index 638f74a05..23b3422be 100644
--- a/packages/cdk/lib/stack-input.ts
+++ b/packages/cdk/lib/stack-input.ts
@@ -136,6 +136,17 @@ const baseStackInputSchema = z.object({
)
.default([]),
inlineAgents: z.boolean().default(false),
+ // Agent Core Runtime
+ createGenericAgentCoreRuntime: z.boolean().default(false),
+ agentCoreRegion: z.string().nullish(),
+ agentCoreExternalRuntimes: z
+ .array(
+ z.object({
+ name: z.string(),
+ arn: z.string(),
+ })
+ )
+ .default([]),
// MCP
mcpEnabled: z.boolean().default(false),
// Guardrail
@@ -206,6 +217,8 @@ export const processedStackInputSchema = baseStackInputSchema.extend({
region: z.string(),
})
),
+ // Processed agentCoreRegion (null -> modelRegion)
+ agentCoreRegion: z.string(),
});
export type StackInput = z.infer;
diff --git a/packages/cdk/package.json b/packages/cdk/package.json
index 997c4fbea..096a6fc3c 100644
--- a/packages/cdk/package.json
+++ b/packages/cdk/package.json
@@ -9,7 +9,7 @@
"cdk": "cdk",
"lint": "eslint . --ext ts --report-unused-disable-directives --max-warnings 0",
"lambda-build-dryrun": "tsc --noEmit --skipLibCheck",
- "postinstall": "npm ci --prefix custom-resources"
+ "postinstall": "npm ci --prefix custom-resources/agent-core-runtime && npm ci --prefix custom-resources/opensearch-index"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.137",
@@ -29,6 +29,8 @@
"@aws-cdk/aws-lambda-python-alpha": "^2.154.1-alpha.0",
"@aws-sdk/client-bedrock-agent": "^3.755.0",
"@aws-sdk/client-bedrock-agent-runtime": "^3.755.0",
+ "@aws-sdk/client-bedrock-agentcore": "^3.755.0",
+ "@aws-sdk/client-bedrock-agentcore-control": "^3.755.0",
"@aws-sdk/client-bedrock-runtime": "^3.755.0",
"@aws-sdk/client-dynamodb": "^3.755.0",
"@aws-sdk/client-kendra": "^3.755.0",
@@ -41,6 +43,7 @@
"@aws-sdk/lib-dynamodb": "^3.755.0",
"@aws-sdk/s3-request-presigner": "^3.755.0",
"@aws-solutions-constructs/aws-cloudfront-s3": "^2.68.0",
+ "@smithy/node-http-handler": "^4.0.4",
"aws-amplify": "^6.14.2",
"aws-cdk-lib": "^2.154.1",
"aws-jwt-verify": "^4.0.0",
@@ -48,7 +51,6 @@
"deploy-time-build": "^0.3.17",
"node-html-parser": "^6.1.13",
"sanitize-html": "^2.13.0",
- "@smithy/node-http-handler": "^4.0.4",
"source-map-support": "^0.5.21",
"upsert-slr": "^1.0.4",
"ws": "^8.18.0",
diff --git a/packages/cdk/parameter.ts b/packages/cdk/parameter.ts
index c1b03ad67..0be2be67a 100644
--- a/packages/cdk/parameter.ts
+++ b/packages/cdk/parameter.ts
@@ -71,5 +71,7 @@ export const getParams = (app: cdk.App): ProcessedStackInput => {
params.speechToSpeechModelIds,
params.modelRegion
),
+ // Process agentCoreRegion: null -> modelRegion
+ agentCoreRegion: params.agentCoreRegion || params.modelRegion,
};
};
diff --git a/packages/cdk/test/__snapshots__/generative-ai-use-cases.test.ts.snap b/packages/cdk/test/__snapshots__/generative-ai-use-cases.test.ts.snap
index cac6bcf5c..d392a2c4a 100644
--- a/packages/cdk/test/__snapshots__/generative-ai-use-cases.test.ts.snap
+++ b/packages/cdk/test/__snapshots__/generative-ai-use-cases.test.ts.snap
@@ -1928,6 +1928,26 @@ exports[`GenerativeAiUseCases matches the snapshot 5`] = `
],
},
},
+ "AgentCoreEnabled": {
+ "Value": "true",
+ },
+ "AgentCoreExternalRuntimes": {
+ "Value": "[]",
+ },
+ "AgentCoreGenericRuntime": {
+ "Value": {
+ "Fn::Join": [
+ "",
+ [
+ "{"name":"GenericAgentCoreRuntime","arn":"",
+ {
+ "Fn::ImportValue": "AgentCoreStack:ExportsOutputFnGetAttGenericAgentCoreGenericAgentCoreRuntimeD3EBAAF7AgentCoreRuntimeArn010E372F",
+ },
+ ""}",
+ ],
+ ],
+ },
+ },
"AgentEnabled": {
"Value": "true",
},
@@ -11537,6 +11557,7 @@ exports[`GenerativeAiUseCases matches the snapshot 5`] = `
"Environment": {
"Variables": {
"CROSS_ACCOUNT_BEDROCK_ROLE_ARN": "",
+ "MODEL_REGION": "us-east-1",
},
},
"Handler": "index.handler",
@@ -11623,6 +11644,39 @@ exports[`GenerativeAiUseCases matches the snapshot 5`] = `
},
],
},
+ {
+ "Action": [
+ "s3:GetBucket*",
+ "s3:GetObject*",
+ "s3:List*",
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:aws:s3:::",
+ {
+ "Fn::ImportValue": "AgentCoreStack:ExportsOutputRefGenericAgentCoreAgentCoreFileBucket0430DA423298A79F",
+ },
+ ],
+ ],
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:aws:s3:::",
+ {
+ "Fn::ImportValue": "AgentCoreStack:ExportsOutputRefGenericAgentCoreAgentCoreFileBucket0430DA423298A79F",
+ },
+ "/*",
+ ],
+ ],
+ },
+ ],
+ },
{
"Action": [
"s3:GetBucket*",
@@ -13603,6 +13657,39 @@ exports[`GenerativeAiUseCases matches the snapshot 5`] = `
"Type": "AWS::IAM::Policy",
"UpdateReplacePolicy": "Delete",
},
+ "AgentCoreAgentCoreRuntimePolicyA2A56192": {
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "bedrock-agentcore:InvokeAgentRuntime",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::ImportValue": "AgentCoreStack:ExportsOutputFnGetAttGenericAgentCoreGenericAgentCoreRuntimeD3EBAAF7AgentCoreRuntimeArn010E372F",
+ },
+ "*",
+ ],
+ ],
+ },
+ },
+ ],
+ "Version": "2012-10-17",
+ },
+ "PolicyName": "AgentCoreAgentCoreRuntimePolicyA2A56192",
+ "Roles": [
+ {
+ "Ref": "AuthIdentityPoolAuthenticatedRole09311B20",
+ },
+ ],
+ },
+ "Type": "AWS::IAM::Policy",
+ "UpdateReplacePolicy": "Delete",
+ },
"ApiBuildWeb746ABF13": {
"DeletionPolicy": "Delete",
"Properties": {
@@ -13622,6 +13709,20 @@ exports[`GenerativeAiUseCases matches the snapshot 5`] = `
"destinationBucketName": "cdk-hnb659fds-assets-123456890123-us-east-1",
"environment": {
"NODE_OPTIONS": "--max-old-space-size=4096",
+ "VITE_APP_AGENT_CORE_ENABLED": "true",
+ "VITE_APP_AGENT_CORE_EXTERNAL_RUNTIMES": "[]",
+ "VITE_APP_AGENT_CORE_GENERIC_RUNTIME": {
+ "Fn::Join": [
+ "",
+ [
+ "{"name":"GenericAgentCoreRuntime","arn":"",
+ {
+ "Fn::ImportValue": "AgentCoreStack:ExportsOutputFnGetAttGenericAgentCoreGenericAgentCoreRuntimeD3EBAAF7AgentCoreRuntimeArn010E372F",
+ },
+ ""}",
+ ],
+ ],
+ },
"VITE_APP_AGENT_ENABLED": "true",
"VITE_APP_AGENT_NAMES": "["SearchEngine","CodeInterpreter"]",
"VITE_APP_API_ENDPOINT": {
diff --git a/packages/cdk/test/generative-ai-use-cases.test.ts b/packages/cdk/test/generative-ai-use-cases.test.ts
index 3c9c6343c..e6bda520d 100644
--- a/packages/cdk/test/generative-ai-use-cases.test.ts
+++ b/packages/cdk/test/generative-ai-use-cases.test.ts
@@ -51,6 +51,9 @@ describe('GenerativeAiUseCases', () => {
searchApiKey: 'XXXXXX',
agents: [],
flows: [],
+ createGenericAgentCoreRuntime: true,
+ agentCoreRegion: 'us-east-1',
+ agentCoreExternalRuntimes: [],
allowedIpV4AddressRanges: null,
allowedIpV6AddressRanges: null,
allowedCountryCodes: ['JP'],
diff --git a/packages/cdk/tsconfig.json b/packages/cdk/tsconfig.json
index aefc51650..997b238cb 100644
--- a/packages/cdk/tsconfig.json
+++ b/packages/cdk/tsconfig.json
@@ -5,6 +5,7 @@
"module": "commonjs",
"lib": ["es2020", "dom"],
"declaration": true,
+ "outDir": "./dist",
// Strict type checking settings
"strict": true,
@@ -27,11 +28,12 @@
// Other settings
"experimentalDecorators": true,
"esModuleInterop": true,
+ "skipLibCheck": true,
// Type definition file settings
"typeRoots": ["../../node_modules/@types"],
"types": ["jest", "node"]
},
// Exclude files and directories
- "exclude": ["node_modules", "cdk.out"]
+ "exclude": ["node_modules", "cdk.out", "custom-resources/**", "dist"]
}
diff --git a/packages/common/src/application/model.ts b/packages/common/src/application/model.ts
index 338fef199..d4f344658 100644
--- a/packages/common/src/application/model.ts
+++ b/packages/common/src/application/model.ts
@@ -38,7 +38,7 @@ export const modelMetadata: Record = {
displayName: 'Claude 3.5 Sonnet v2',
},
'anthropic.claude-3-5-haiku-20241022-v1:0': {
- flags: MODEL_FEATURE.TEXT_DOC_IMAGE,
+ flags: MODEL_FEATURE.TEXT_DOC,
displayName: 'Claude 3.5 Haiku',
},
'anthropic.claude-3-5-sonnet-20240620-v1:0': {
@@ -81,7 +81,7 @@ export const modelMetadata: Record = {
displayName: 'Claude 3.5 Sonnet v2',
},
'us.anthropic.claude-3-5-haiku-20241022-v1:0': {
- flags: MODEL_FEATURE.TEXT_DOC_IMAGE,
+ flags: MODEL_FEATURE.TEXT_DOC,
displayName: 'Claude 3.5 Haiku',
},
'us.anthropic.claude-3-5-sonnet-20240620-v1:0': {
diff --git a/packages/types/src/agent-core.d.ts b/packages/types/src/agent-core.d.ts
new file mode 100644
index 000000000..93126d0c1
--- /dev/null
+++ b/packages/types/src/agent-core.d.ts
@@ -0,0 +1,295 @@
+import { Model } from './message';
+
+export type AgentCoreConfiguration = {
+ name: string;
+ arn: string;
+};
+
+// AgentCore Runtime Request (compatible with Strands)
+export type AgentCoreRequest = StrandsRequest;
+
+export type AgentCoreStreamResponse = StrandsStreamEvent;
+
+// ===
+// Strands type definition
+// https://github.com/strands-agents/sdk-python/blob/main/src/strands/types
+// ===
+
+// Strands Agent(...) parameter
+export type StrandsRequest = {
+ systemPrompt: string;
+ prompt: StrandsContentBlock[];
+ messages: StrandsMessage[];
+ model: Model;
+};
+
+// Strands format response
+export type StrandsResponse = {
+ message?: StrandsMessage;
+};
+
+export type StrandsStreamResponse = {
+ event: StrandsStreamEvent;
+};
+
+// Content
+
+// Strands role type (system is not included)
+export type StrandsRole = 'user' | 'assistant';
+
+// Strands format message
+export type StrandsMessage = {
+ role: StrandsRole;
+ content: StrandsContentBlock[];
+};
+
+// Content blocks based on the Python SDK structure
+// Each content block is a dictionary with specific keys, not a discriminated union with a type field
+
+// Text content block
+export type StrandsTextBlock = {
+ text: string;
+};
+
+// Image content block
+export type StrandsImageBlock = {
+ image: {
+ format?: 'png' | 'jpeg' | 'gif' | 'webp';
+ source?: {
+ bytes: string; // base64 encoded string. Converted to bytes in backend
+ };
+ };
+};
+
+// Document content block
+export type StrandsDocumentBlock = {
+ document: {
+ // Document properties
+ format?:
+ | 'pdf'
+ | 'csv'
+ | 'doc'
+ | 'docx'
+ | 'xls'
+ | 'xlsx'
+ | 'html'
+ | 'txt'
+ | 'md';
+ name?: string;
+ source?: {
+ bytes: string; // base64 encoded string. Converted to bytes in backend
+ };
+ };
+};
+
+// Video content block
+export type StrandsVideoBlock = {
+ video: {
+ format?:
+ | 'flv'
+ | 'mkv'
+ | 'mov'
+ | 'mpeg'
+ | 'mpg'
+ | 'mp4'
+ | 'three_gp'
+ | 'webm'
+ | 'wmv';
+ source?: {
+ bytes: string; // base64 encoded string. Converted to bytes in backend
+ };
+ };
+};
+
+// Tool use content block
+export type StrandsToolUseBlock = {
+ toolUse: {
+ name: string;
+ input: Record;
+ };
+};
+
+// Tool result content block
+export type StrandsToolResultBlock = {
+ toolResult: {
+ content: StrandsContentBlock[];
+ };
+};
+
+// Guard content block
+export type StrandsGuardContentBlock = {
+ guardContent: {
+ // Guard content properties
+ content?: string;
+ };
+};
+
+// Cache point content block
+export type StrandsCachePointBlock = {
+ cachePoint: {
+ // Cache point properties
+ id?: string;
+ };
+};
+
+// Reasoning content block
+export type StrandsReasoningContentBlock = {
+ reasoningContent: {
+ // Reasoning content properties
+ content?: string;
+ };
+};
+
+// Citations content block
+export type StrandsCitationsContentBlock = {
+ citationsContent: {
+ // Citations content properties
+ citations?: any[];
+ };
+};
+
+// Union type for all content blocks
+export type StrandsContentBlock =
+ | StrandsTextBlock
+ | StrandsImageBlock
+ | StrandsDocumentBlock
+ | StrandsVideoBlock
+ | StrandsToolUseBlock
+ | StrandsToolResultBlock
+ | StrandsGuardContentBlock
+ | StrandsCachePointBlock
+ | StrandsReasoningContentBlock
+ | StrandsCitationsContentBlock;
+
+// Streaming
+
+// Supporting types for streaming events
+export type StrandsStopReason =
+ | 'end_turn'
+ | 'max_tokens'
+ | 'stop_sequence'
+ | 'tool_use';
+
+export type StrandsUsage = {
+ inputTokens: number;
+ outputTokens: number;
+ totalTokens: number;
+ cacheReadInputTokens?: number;
+ cacheWriteInputTokens?: number;
+};
+
+export type StrandsMetrics = {
+ latencyMs?: number;
+ [key: string]: any;
+};
+
+export type StrandsTrace = {
+ [key: string]: any;
+};
+
+// Content block start information
+export type StrandsContentBlockStart = StrandsContentBlock;
+
+// Message start event
+export type StrandsMessageStartEvent = {
+ role: StrandsRole;
+};
+
+// Content block start event
+export type StrandsContentBlockStartEvent = {
+ contentBlockIndex?: number;
+ start: StrandsContentBlockStart;
+};
+
+// Content block delta types
+export type StrandsContentBlockDeltaText = {
+ text: string;
+};
+
+export type StrandsContentBlockDeltaToolUse = {
+ input: string;
+};
+
+export type StrandsReasoningContentBlockDelta = {
+ redactedContent?: Uint8Array;
+ signature?: string;
+ text?: string;
+};
+
+export type StrandsContentBlockDelta = {
+ reasoningContent?: StrandsReasoningContentBlockDelta;
+ text?: string;
+ toolUse?: StrandsContentBlockDeltaToolUse;
+};
+
+// Content block delta event
+export type StrandsContentBlockDeltaEvent = {
+ contentBlockIndex?: number;
+ delta: StrandsContentBlockDelta;
+};
+
+// Content block stop event
+export type StrandsContentBlockStopEvent = {
+ contentBlockIndex?: number;
+};
+
+// Message stop event
+export type StrandsMessageStopEvent = {
+ additionalModelResponseFields?: any;
+ stopReason: StrandsStopReason;
+};
+
+// Metadata event
+export type StrandsMetadataEvent = {
+ metrics?: StrandsMetrics;
+ trace?: StrandsTrace;
+ usage: StrandsUsage;
+};
+
+// Exception event base
+export type StrandsExceptionEvent = {
+ message: string;
+};
+
+// Model stream error event
+export type StrandsModelStreamErrorEvent = StrandsExceptionEvent & {
+ originalMessage: string;
+ originalStatusCode: number;
+};
+
+// Redact content event
+export type StrandsRedactContentEvent = {
+ redactUserContentMessage?: string;
+ redactAssistantContentMessage?: string;
+};
+
+// Main stream event type (matches the Python StreamEvent TypedDict)
+export type StrandsStreamEvent = {
+ contentBlockDelta?: StrandsContentBlockDeltaEvent;
+ contentBlockStart?: StrandsContentBlockStartEvent;
+ contentBlockStop?: StrandsContentBlockStopEvent;
+ internalServerException?: StrandsExceptionEvent;
+ messageStart?: StrandsMessageStartEvent;
+ messageStop?: StrandsMessageStopEvent;
+ metadata?: StrandsMetadataEvent;
+ modelStreamErrorException?: StrandsModelStreamErrorEvent;
+ redactContent?: StrandsRedactContentEvent;
+ serviceUnavailableException?: StrandsExceptionEvent;
+ throttlingException?: StrandsExceptionEvent;
+ validationException?: StrandsExceptionEvent;
+};
+
+// Helper type to determine which event type is present
+export type StrandsStreamEventType =
+ | 'contentBlockDelta'
+ | 'contentBlockStart'
+ | 'contentBlockStop'
+ | 'internalServerException'
+ | 'messageStart'
+ | 'messageStop'
+ | 'metadata'
+ | 'modelStreamErrorException'
+ | 'redactContent'
+ | 'serviceUnavailableException'
+ | 'throttlingException'
+ | 'validationException';
diff --git a/packages/types/src/index.d.ts b/packages/types/src/index.d.ts
index cc3a2c55a..fd6cc4568 100644
--- a/packages/types/src/index.d.ts
+++ b/packages/types/src/index.d.ts
@@ -18,3 +18,4 @@ export * from './share';
export * from './speech-to-speech';
export * from './stat';
export * from './mcp';
+export * from './agent-core';
diff --git a/packages/types/src/protocol.d.ts b/packages/types/src/protocol.d.ts
index 83dfce854..837f42148 100644
--- a/packages/types/src/protocol.d.ts
+++ b/packages/types/src/protocol.d.ts
@@ -133,7 +133,12 @@ export type RetrieveKnowledgeBaseRequest = {
export type RetrieveKnowledgeBaseResponse = RetrieveCommandOutputKnowledgeBase;
-export type S3Type = 'default' | 'knowledgeBase';
+export type S3Type = 'default' | 'knowledgeBase' | 'agentcore';
+
+export type BucketInfo = {
+ bucketName: string;
+ region: string;
+};
export type GetFileDownloadSignedUrlRequest = {
bucketName: string;
diff --git a/packages/web/package.json b/packages/web/package.json
index 5ba5e2780..e4773a0d9 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -13,6 +13,7 @@
"dependencies": {
"@aws-amplify/ui-react": "^6.1.12",
"@aws-crypto/sha256-js": "^5.2.0",
+ "@aws-sdk/client-bedrock-agentcore": "^3.755.0",
"@aws-sdk/client-cognito-identity": "^3.755.0",
"@aws-sdk/client-kendra": "^3.755.0",
"@aws-sdk/client-lambda": "^3.755.0",
diff --git a/packages/web/public/locales/translation/en.yaml b/packages/web/public/locales/translation/en.yaml
index 44039b3c1..722951c1f 100644
--- a/packages/web/public/locales/translation/en.yaml
+++ b/packages/web/public/locales/translation/en.yaml
@@ -1,6 +1,9 @@
agent:
drop_files: Drop files to upload
title: Agent Chat
+agent_core:
+ start_conversation: Start a conversation with AgentCore
+ title: AgentCore
auth:
loading: Loading...
login: Login
@@ -441,7 +444,9 @@ generateText:
landing:
alert:
description: >-
- This is an environment used for internal demos by SA. When giving demos to customers, please use the one deployed in your own AWS account as a rule. Do not input customer data or use it for business purposes.
+ This is an environment used for internal demos by SA. When giving demos to
+ customers, please use the one deployed in your own AWS account as a rule.
+ Do not input customer data or use it for business purposes.
title: About GenU Demo Environment
demo:
agent:
@@ -483,7 +488,8 @@ landing:
music, photography, trendy smartphone, city background
mcp:
content: >-
- Please research about Amazon Bedrock security. Is user input used for model training?
+ Please research about Amazon Bedrock security. Is user input used for
+ model training?
rag:
content: >-
Please provide an overview of Amazon Nova Canvas and explain its key
@@ -527,6 +533,9 @@ landing:
execute actions or reference the vector database of Knowledge Bases for
Amazon Bedrock.
title: Agent Chat
+ agent_core:
+ description: AgentCore Chat is a feature that utilizes various Agents created with Bedrock AgentCore.
+ title: AgentCore
chat:
description: >-
You can have interactive dialogues with an LLM in a chat format. It can
@@ -560,12 +569,16 @@ landing:
title: Image Generation
mcp_chat:
description: >-
- MCP Chat is a chat function that seamlessly integrates Bedrock's LLM models with external data and external tools through the Model Context Protocol (MCP). You can freely add tools by editing the mcp.json file. Leveraging Strands Agents as an MCP agent.
+ MCP Chat is a chat function that seamlessly integrates Bedrock's LLM
+ models with external data and external tools through the Model Context
+ Protocol (MCP). You can freely add tools by editing the mcp.json file.
+ Leveraging Strands Agents as an MCP agent.
title: MCP Chat
meeting-minutes:
description: >-
- Automatically generate meeting minutes from audio recordings or real-time transcription.
- No need to write prompts - choose from near-original transcription, newspaper style, or FAQ format.
+ Automatically generate meeting minutes from audio recordings or
+ real-time transcription. No need to write prompts - choose from
+ near-original transcription, newspaper style, or FAQ format.
title: Meeting Minutes Generation
rag_chat:
description_kb: >-
@@ -833,7 +846,9 @@ summarize:
transcribe:
detailed_parameters: Detailed parameters
direct_input: Direct Input
- direct_input_instruction: Please enter the source text for meeting minutes directly in the "Transcript" area below.
+ direct_input_instruction: >-
+ Please enter the source text for meeting minutes directly in the
+ "Transcript" area below.
direct_input_placeholder: Please enter the source text for meeting minutes here...
file_upload: File Upload
max_speakers: Max Speakers
@@ -842,7 +857,10 @@ transcribe:
result_placeholder: Speech recognition results will be displayed here
screen_audio: Screen Audio
screen_audio_error: 'Screen Audio Error:'
- screen_audio_notice: 'For Windows: Select "Entire Screen" tab and turn ON "Share system audio". For Mac: Select "Chrome Tab" and turn ON "Also share tab audio". Chrome and Edge work. Firefox does not work.'
+ screen_audio_notice: >-
+ For Windows: Select "Entire Screen" tab and turn ON "Share system
+ audio". For Mac: Select "Chrome Tab" and turn ON "Also share tab
+ audio". Chrome and Edge work. Firefox does not work.
select_input_method: Please select from microphone input or file upload
speaker_names: Speaker names (comma separated)
speaker_recognition: Speaker recognition
diff --git a/packages/web/public/locales/translation/ja.yaml b/packages/web/public/locales/translation/ja.yaml
index 1c8a4058c..750d085a5 100644
--- a/packages/web/public/locales/translation/ja.yaml
+++ b/packages/web/public/locales/translation/ja.yaml
@@ -1,6 +1,9 @@
agent:
drop_files: ファイルをドロップしてアップロード
title: Agent チャット
+agent_core:
+ start_conversation: AgentCore と会話を始める
+ title: AgentCore
auth:
loading: 読み込み中...
login: ログイン
@@ -351,7 +354,8 @@ generateText:
landing:
alert:
description: >-
- こちらは SA が内部デモのために利用する環境です。カスタマーにデモをする場合は、原則自分の AWS アカウントにデプロイしたものを利用してください。カスタマーのデータの入力や業務利用をしてはいけません。
+ こちらは SA が内部デモのために利用する環境です。カスタマーにデモをする場合は、原則自分の AWS
+ アカウントにデプロイしたものを利用してください。カスタマーのデータの入力や業務利用をしてはいけません。
title: GenU デモ環境について
demo:
agent:
@@ -378,8 +382,7 @@ landing:
スマホ広告のデザイン案を出力してください。
可愛い、おしゃれ、使いやすい、POPカルチャー、親しみやすい、若者向け、音楽、写真、流行のスマホ、背景が街
mcp:
- content: >-
- Amazon Bedrock のセキュリティについて調べてください。ユーザーの入力はモデルの学習に使われますか?
+ content: Amazon Bedrock のセキュリティについて調べてください。ユーザーの入力はモデルの学習に使われますか?
rag:
content: Claude のパラメータを説明し、その設定方法も教えてください。
summarize:
@@ -412,6 +415,9 @@ landing:
Agent チャットユースケースでは Agents for Amazon Bedrock を利用してアクションを実行させたり、Knowledge
Bases for Amazon Bedrock のベクトルデータベースを参照することが可能です。
title: Agent チャット
+ agent_core:
+ description: AgentCore チャットは Bedrock AgentCore で作成したさまざまな Agent を利用する機能です
+ title: AgentCore
chat:
description: >-
LLM
@@ -439,7 +445,9 @@ landing:
title: 画像生成
mcp_chat:
description: >-
- MCP チャットは Model Context Protocol (MCP) を通じて、Bedrock の LLM モデルと外部データや外部ツールをシームレスに連携させるチャット機能です。mcp.json を編集することで、自由にツールを追加できます。MCP のエージェントとして Strands Agents を活用しています。
+ MCP チャットは Model Context Protocol (MCP) を通じて、Bedrock の LLM
+ モデルと外部データや外部ツールをシームレスに連携させるチャット機能です。mcp.json を編集することで、自由にツールを追加できます。MCP
+ のエージェントとして Strands Agents を活用しています。
title: MCP チャット
meeting-minutes:
description: >-
@@ -680,7 +688,10 @@ transcribe:
result_placeholder: 音声認識結果がここに表示されます
screen_audio: スクリーン音声
screen_audio_error: 'スクリーン音声エラー:'
- screen_audio_notice: 'Windows の場合:「画面全体」タブより、「システム音声も共有する」を ON にしてください。 Mac の場合:「Chrome Tab」から、「Also share tab audio」を ON にしてください。 Chrome と Edge は動作します。Firefox は動作しません。'
+ screen_audio_notice: >-
+ Windows の場合:「画面全体」タブより、「システム音声も共有する」を ON にしてください。 Mac の場合:「Chrome
+ Tab」から、「Also share tab audio」を ON にしてください。 Chrome と Edge は動作します。Firefox
+ は動作しません。
select_input_method: マイク入力 or ファイルアップロードから選択してください
speaker_names: 話し手の名前(カンマ区切り)
speaker_recognition: 話者認識
diff --git a/packages/web/src/App.tsx b/packages/web/src/App.tsx
index 414f7f65f..994a60f2f 100644
--- a/packages/web/src/App.tsx
+++ b/packages/web/src/App.tsx
@@ -44,6 +44,8 @@ const ragKnowledgeBaseEnabled: boolean =
const agentEnabled: boolean = import.meta.env.VITE_APP_AGENT_ENABLED === 'true';
const inlineAgents: boolean = import.meta.env.VITE_APP_INLINE_AGENTS === 'true';
const mcpEnabled: boolean = import.meta.env.VITE_APP_MCP_ENABLED === 'true';
+const agentCoreEnabled: boolean =
+ import.meta.env.VITE_APP_AGENT_CORE_ENABLED === 'true';
const {
visionEnabled,
imageGenModelIds,
@@ -137,6 +139,15 @@ const App: React.FC = () => {
sub: 'Experimental',
}
: null,
+ agentCoreEnabled
+ ? {
+ label: t('agent_core.title'),
+ to: '/agent-core',
+ icon: ,
+ display: 'usecase' as const,
+ sub: 'Experimental',
+ }
+ : null,
flowChatEnabled
? {
label: t('navigation.flowChat'),
diff --git a/packages/web/src/hooks/useAgentCore.ts b/packages/web/src/hooks/useAgentCore.ts
new file mode 100644
index 000000000..da9bf591f
--- /dev/null
+++ b/packages/web/src/hooks/useAgentCore.ts
@@ -0,0 +1,140 @@
+import useChat from './useChat';
+import useAgentCoreApi, { AgentCoreRuntimeRequest } from './useAgentCoreApi';
+import {
+ AgentCoreConfiguration,
+ UnrecordedMessage,
+} from 'generative-ai-use-cases';
+import { findModelByModelId } from './useModel';
+
+// Get environment variables for separated generic and external runtimes
+const agentCoreEnabled = import.meta.env.VITE_APP_AGENT_CORE_ENABLED === 'true';
+
+// Generic runtime (deployed by CDK)
+const agentCoreGenericRuntime =
+ import.meta.env.VITE_APP_AGENT_CORE_GENERIC_RUNTIME !== 'null'
+ ? (JSON.parse(
+ import.meta.env.VITE_APP_AGENT_CORE_GENERIC_RUNTIME || 'null'
+ ) as AgentCoreConfiguration | null)
+ : null;
+
+// External runtimes (pre-defined)
+const agentCoreExternalRuntimes = JSON.parse(
+ import.meta.env.VITE_APP_AGENT_CORE_EXTERNAL_RUNTIMES || '[]'
+) as AgentCoreConfiguration[];
+
+const useAgentCore = (id: string) => {
+ const {
+ getModelId,
+ setModelId,
+ init,
+ getCurrentSystemContext,
+ updateSystemContext,
+ rawMessages,
+ messages,
+ isEmpty,
+ clear,
+ } = useChat(id);
+
+ const { postMessage, loading } = useAgentCoreApi(id);
+
+ const invokeAgentRuntime = async (
+ agentRuntimeArn: string,
+ sessionId: string,
+ userPrompt: string,
+ qualifier = 'DEFAULT',
+ files?: File[]
+ ) => {
+ const model = findModelByModelId(getModelId());
+
+ // Get previous messages for context, excluding:
+ // 1. System messages (will be sent as system_prompt)
+ // 2. Empty assistant messages
+ const previousMessages = rawMessages
+ .filter((msg) => {
+ // Exclude system messages
+ if (msg.role === 'system') return false;
+ // Exclude empty assistant messages
+ if (msg.role === 'assistant' && msg.content.trim() === '') return false;
+
+ return true;
+ })
+ .map(
+ (msg): UnrecordedMessage => ({
+ role: msg.role,
+ content: msg.content,
+ trace: msg.trace,
+ extraData: msg.extraData,
+ llmType: msg.llmType,
+ metadata: msg.metadata,
+ })
+ );
+
+ const request: AgentCoreRuntimeRequest = {
+ agentRuntimeArn,
+ sessionId,
+ qualifier,
+ system_prompt:
+ getCurrentSystemContext() || 'You are a helpful assistant.',
+ prompt: userPrompt,
+ previousMessages, // Pass the raw messages to be converted in useAgentCoreApi
+ model,
+ files, // Pass the uploaded files - they will be converted to Strands format in useAgentCoreApi
+ };
+
+ await postMessage(request);
+ };
+
+ const isAgentCoreEnabled = () => {
+ return (
+ agentCoreEnabled &&
+ (!!agentCoreGenericRuntime || agentCoreExternalRuntimes.length > 0)
+ );
+ };
+
+ const getGenericRuntime = () => {
+ return agentCoreGenericRuntime;
+ };
+
+ const getExternalRuntimes = () => {
+ return agentCoreExternalRuntimes;
+ };
+
+ const getAllAvailableRuntimes = (): AgentCoreConfiguration[] => {
+ const allRuntimes: AgentCoreConfiguration[] = [];
+
+ // Add generic runtime if available
+ if (agentCoreGenericRuntime) {
+ allRuntimes.push(agentCoreGenericRuntime);
+ }
+
+ // Add external runtimes
+ allRuntimes.push(...agentCoreExternalRuntimes);
+
+ return allRuntimes;
+ };
+
+ const getAllAvailableRuntimeArns = (): string[] => {
+ return getAllAvailableRuntimes().map((runtime) => runtime.arn);
+ };
+
+ return {
+ getModelId,
+ setModelId,
+ init,
+ getCurrentSystemContext,
+ updateSystemContext,
+ rawMessages,
+ messages,
+ isEmpty,
+ clear,
+ loading,
+ invokeAgentRuntime,
+ isAgentCoreEnabled,
+ getGenericRuntime,
+ getExternalRuntimes,
+ getAllAvailableRuntimes,
+ getAllAvailableRuntimeArns,
+ };
+};
+
+export { useAgentCore };
diff --git a/packages/web/src/hooks/useAgentCoreApi.ts b/packages/web/src/hooks/useAgentCoreApi.ts
new file mode 100644
index 000000000..54a90579a
--- /dev/null
+++ b/packages/web/src/hooks/useAgentCoreApi.ts
@@ -0,0 +1,291 @@
+import { useCallback } from 'react';
+import useChat from './useChat';
+import useChatApi from './useChatApi';
+import {
+ BedrockAgentCoreClient,
+ InvokeAgentRuntimeCommand,
+ InvokeAgentRuntimeCommandInput,
+} from '@aws-sdk/client-bedrock-agentcore';
+import { fromCognitoIdentityPool } from '@aws-sdk/credential-provider-cognito-identity';
+import { fetchAuthSession } from 'aws-amplify/auth';
+import { CognitoIdentityClient } from '@aws-sdk/client-cognito-identity';
+import {
+ AgentCoreRequest,
+ Model,
+ UnrecordedMessage,
+ StrandsContentBlock,
+} from 'generative-ai-use-cases';
+import {
+ StrandsStreamProcessor,
+ convertToStrandsFormat,
+ convertFilesToStrandsContentBlocks,
+} from '../utils/strandsUtils';
+import { getRegionFromArn } from '../utils/arnUtils';
+
+// Get environment variables
+const region = import.meta.env.VITE_APP_REGION as string;
+const modelRegion = import.meta.env.VITE_APP_MODEL_REGION as string;
+const identityPoolId = import.meta.env.VITE_APP_IDENTITY_POOL_ID as string;
+const userPoolId = import.meta.env.VITE_APP_USER_POOL_ID as string;
+
+// Define simplified request interface for the hook
+export interface AgentCoreRuntimeRequest {
+ agentRuntimeArn: string;
+ sessionId?: string;
+ qualifier?: string;
+ system_prompt?: string; // Keep this name for backward compatibility with useAgentCore
+ prompt: string; // User prompt as string
+ previousMessages?: UnrecordedMessage[]; // Raw messages that will be converted to Strands format
+ model: Model;
+ files?: File[]; // Added support for file uploads
+}
+
+const useAgentCoreApi = (id: string) => {
+ const {
+ loading,
+ setLoading,
+ pushMessage,
+ popMessage,
+ createChatIfNotExist,
+ addChunkToAssistantMessage,
+ addMessageIdsToUnrecordedMessages,
+ replaceMessages,
+ setPredictedTitle,
+ } = useChat(id);
+ const { createMessages } = useChatApi();
+
+ // Create a stream processor instance that maintains state across chunks
+ const streamProcessor = useCallback(() => new StrandsStreamProcessor(), []);
+
+ // Process a chunk of Strands event data and add it to the assistant message
+ const processChunk = useCallback(
+ (eventText: string, model: Model, processor: StrandsStreamProcessor) => {
+ const processed = processor.processEvent(eventText);
+
+ if (processed) {
+ if (processed.text || processed.trace || processed.metadata) {
+ addChunkToAssistantMessage(
+ processed.text || '',
+ processed.trace || undefined,
+ model,
+ processed.metadata
+ );
+ }
+ }
+ },
+ [addChunkToAssistantMessage]
+ );
+
+ // Convert messages to Strands format
+ const convertMessagesToStrandsFormat = useCallback(
+ (messages: UnrecordedMessage[]) => {
+ return convertToStrandsFormat(messages);
+ },
+ []
+ );
+
+ const postMessage = useCallback(
+ async (req: AgentCoreRuntimeRequest) => {
+ setLoading(true);
+ let isFirstChunk = true;
+
+ // Create a new stream processor for this request
+ const processor = streamProcessor();
+
+ try {
+ pushMessage('user', req.prompt);
+ pushMessage('assistant', 'Thinking...');
+
+ // Get the ID token from the authenticated user
+ const token = (await fetchAuthSession()).tokens?.idToken?.toString();
+ if (!token) {
+ throw new Error('User is not authenticated');
+ }
+
+ const clientRegion = getRegionFromArn(req.agentRuntimeArn) || region;
+
+ // Create the Cognito Identity client
+ const cognito = new CognitoIdentityClient({ region });
+ const providerName = `cognito-idp.${region}.amazonaws.com/${userPoolId}`;
+
+ // Create the BedrockAgentCore client with the determined region
+ const client = new BedrockAgentCoreClient({
+ region: clientRegion,
+ credentials: fromCognitoIdentityPool({
+ client: cognito,
+ identityPoolId,
+ logins: {
+ [providerName]: token,
+ },
+ }),
+ });
+
+ // Convert previous messages to Strands format if provided
+ const strandsMessages = req.previousMessages
+ ? convertMessagesToStrandsFormat(req.previousMessages)
+ : [];
+
+ // Process files if provided and convert them to Strands content blocks
+ const promptBlocks: StrandsContentBlock[] = [{ text: req.prompt }];
+
+ if (req.files && req.files.length > 0) {
+ try {
+ const fileContentBlocks = await convertFilesToStrandsContentBlocks(
+ req.files
+ );
+ promptBlocks.push(...fileContentBlocks);
+ } catch (error) {
+ console.error(
+ 'Error converting files to Strands content blocks:',
+ error
+ );
+ }
+ }
+
+ // Create the request with the exact schema: messages, systemPrompt, prompt, model
+ const agentCoreRequest: AgentCoreRequest = {
+ messages: strandsMessages,
+ systemPrompt: req.system_prompt || '',
+ prompt: promptBlocks,
+ model: {
+ type: 'bedrock',
+ modelId:
+ req.model.modelId ||
+ 'us.anthropic.claude-3-5-sonnet-20241022-v2:0',
+ region: req.model.region || modelRegion,
+ },
+ };
+
+ const commandInput: InvokeAgentRuntimeCommandInput = {
+ agentRuntimeArn: req.agentRuntimeArn,
+ ...(req.sessionId ? { runtimeSessionId: req.sessionId } : {}),
+ qualifier: req.qualifier || 'DEFAULT',
+ payload: JSON.stringify(agentCoreRequest),
+ };
+
+ const command = new InvokeAgentRuntimeCommand(commandInput);
+ const response = await client.send(command);
+
+ // Handle streaming response
+ const responseWithStream = response as unknown as {
+ response?: ReadableStream | AsyncIterable;
+ contentType?: string;
+ };
+
+ let buffer = '';
+
+ if (responseWithStream.response) {
+ const stream = responseWithStream.response;
+
+ if (Symbol.asyncIterator in stream) {
+ // Handle as async iterable
+ for await (const chunk of stream as AsyncIterable) {
+ if (isFirstChunk) {
+ popMessage(); // Remove loading message
+ pushMessage('assistant', '');
+ isFirstChunk = false;
+ }
+
+ const chunkText = new TextDecoder('utf-8').decode(chunk);
+ buffer += chunkText;
+
+ // Process complete lines
+ const lines = buffer.split('\n');
+ buffer = lines.pop() || '';
+
+ for (const line of lines) {
+ if (line.trim()) {
+ let processedText = line;
+
+ // Handle SSE format: "data: "
+ if (line.startsWith('data: ')) {
+ processedText = line.substring(6);
+ }
+
+ if (processedText.trim()) {
+ processChunk(processedText, req.model, processor);
+ }
+ }
+ }
+ }
+
+ // Process any remaining buffer content
+ if (buffer.trim()) {
+ let processedText = buffer;
+ if (buffer.startsWith('data: ')) {
+ processedText = buffer.substring(6);
+ }
+ if (processedText.trim()) {
+ processChunk(processedText, req.model, processor);
+ }
+ }
+ } else {
+ // Fallback: treat as single response
+ if (isFirstChunk) {
+ popMessage();
+ pushMessage('assistant', '');
+ isFirstChunk = false;
+ }
+ processChunk(
+ JSON.stringify(response, null, 2),
+ req.model,
+ processor
+ );
+ }
+ } else {
+ // Fallback: if no response stream, stringify the entire response
+ if (isFirstChunk) {
+ popMessage();
+ pushMessage('assistant', '');
+ isFirstChunk = false;
+ }
+ processChunk(JSON.stringify(response, null, 2), req.model, processor);
+ }
+
+ // Save chat history
+ const chatId = await createChatIfNotExist();
+ await setPredictedTitle();
+ const toBeRecordedMessages = addMessageIdsToUnrecordedMessages();
+ const { messages } = await createMessages(chatId, {
+ messages: toBeRecordedMessages,
+ });
+ replaceMessages(messages);
+ } catch (error) {
+ console.error('Error invoking AgentCore Runtime:', error);
+ const errorMessage =
+ error instanceof Error ? error.message : 'Unknown error occurred';
+ // processChunk(`Error: ${errorMessage}`, req.model, processor);
+ addChunkToAssistantMessage(
+ errorMessage,
+ undefined,
+ req.model,
+ undefined
+ );
+ } finally {
+ setLoading(false);
+ }
+ },
+ [
+ setLoading,
+ streamProcessor,
+ pushMessage,
+ convertMessagesToStrandsFormat,
+ createChatIfNotExist,
+ setPredictedTitle,
+ addMessageIdsToUnrecordedMessages,
+ createMessages,
+ replaceMessages,
+ popMessage,
+ processChunk,
+ addChunkToAssistantMessage,
+ ]
+ );
+
+ return {
+ loading,
+ postMessage,
+ convertMessagesToStrandsFormat,
+ };
+};
+
+export default useAgentCoreApi;
diff --git a/packages/web/src/hooks/useChat.ts b/packages/web/src/hooks/useChat.ts
index 2befbbca3..26b33bd5a 100644
--- a/packages/web/src/hooks/useChat.ts
+++ b/packages/web/src/hooks/useChat.ts
@@ -128,7 +128,8 @@ const useChatState = create<{
id: string,
chunk: string,
trace?: string,
- model?: Model
+ model?: Model,
+ metadata?: Metadata
) => void;
addMessageIdsToUnrecordedMessages: (id: string) => ToBeRecordedMessage[];
replaceMessages: (id: string, messages: RecordedMessage[]) => void;
@@ -392,14 +393,30 @@ const useChatState = create<{
) => {
set((state) => {
const newChats = produce(state.chats, (draft) => {
- let traceInlineMessage: string | undefined = undefined;
+ const oldAssistantMessage = draft[id].messages.pop()!;
// If the received trace is a code block, do not display it as an inline message
+ let traceInlineMessage: string | undefined = undefined;
if (trace && !isExactlyCodeBlock(trace.trim())) {
traceInlineMessage = trace.trim();
}
- const oldAssistantMessage = draft[id].messages.pop()!;
+ // If new metadata came when old metadata exist, add up numbers
+ if (metadata && oldAssistantMessage.metadata) {
+ metadata.usage.inputTokens +=
+ oldAssistantMessage.metadata.usage.inputTokens || 0;
+ metadata.usage.outputTokens +=
+ oldAssistantMessage.metadata.usage.outputTokens || 0;
+ metadata.usage.totalTokens +=
+ oldAssistantMessage.metadata.usage.totalTokens || 0;
+ metadata.usage.cacheReadInputTokens =
+ (metadata.usage.cacheReadInputTokens || 0) +
+ (oldAssistantMessage.metadata.usage.cacheReadInputTokens || 0);
+ metadata.usage.cacheWriteInputTokens =
+ (metadata.usage.cacheWriteInputTokens || 0) +
+ (oldAssistantMessage.metadata.usage.cacheWriteInputTokens || 0);
+ }
+
const newAssistantMessage: ShownMessage = {
...oldAssistantMessage,
role: 'assistant',
@@ -1188,9 +1205,10 @@ const useChat = (id: string, chatId?: string) => {
addChunkToAssistantMessage: (
chunk: string,
trace?: string,
- model?: Model
+ model?: Model,
+ metadata?: Metadata
) => {
- addChunkToAssistantMessage(id, chunk, trace, model);
+ addChunkToAssistantMessage(id, chunk, trace, model, metadata);
},
addMessageIdsToUnrecordedMessages: () => {
return addMessageIdsToUnrecordedMessages(id);
diff --git a/packages/web/src/main.tsx b/packages/web/src/main.tsx
index 5fbec4ef4..f417f2293 100644
--- a/packages/web/src/main.tsx
+++ b/packages/web/src/main.tsx
@@ -31,6 +31,7 @@ import AgentChatPage from './pages/AgentChatPage.tsx';
import FlowChatPage from './pages/FlowChatPage';
import VoiceChatPage from './pages/VoiceChatPage';
import McpChatPage from './pages/McpChatPage';
+import AgentCorePage from './pages/AgentCorePage.tsx';
import { MODELS } from './hooks/useModel';
import { Authenticator } from '@aws-amplify/ui-react';
import UseCaseBuilderEditPage from './pages/useCaseBuilder/UseCaseBuilderEditPage.tsx';
@@ -53,6 +54,8 @@ const samlAuthEnabled: boolean =
const agentEnabled: boolean = import.meta.env.VITE_APP_AGENT_ENABLED === 'true';
const inlineAgents: boolean = import.meta.env.VITE_APP_INLINE_AGENTS === 'true';
const mcpEnabled: boolean = import.meta.env.VITE_APP_MCP_ENABLED === 'true';
+const agentCoreEnabled: boolean =
+ import.meta.env.VITE_APP_AGENT_CORE_ENABLED === 'true';
const {
visionEnabled,
imageGenModelIds,
@@ -199,6 +202,12 @@ const routes: RouteObject[] = [
element: ,
}
: null,
+ agentCoreEnabled
+ ? {
+ path: '/agent-core',
+ element: ,
+ }
+ : null,
{
path: '*',
element: ,
diff --git a/packages/web/src/pages/AgentCorePage.tsx b/packages/web/src/pages/AgentCorePage.tsx
new file mode 100644
index 000000000..4e65e0627
--- /dev/null
+++ b/packages/web/src/pages/AgentCorePage.tsx
@@ -0,0 +1,343 @@
+import React, { useCallback, useEffect, useMemo, useState } from 'react';
+import { useLocation } from 'react-router-dom';
+import InputChatContent from '../components/InputChatContent';
+import ChatMessage from '../components/ChatMessage';
+import Select from '../components/Select';
+import ScrollTopBottom from '../components/ScrollTopBottom';
+import useFollow from '../hooks/useFollow';
+import { create } from 'zustand';
+import BedrockIcon from '../assets/bedrock.svg?react';
+import { v4 as uuidv4 } from 'uuid';
+import useFiles from '../hooks/useFiles';
+import { FileLimit } from 'generative-ai-use-cases';
+import { useTranslation } from 'react-i18next';
+import { useAgentCore } from '../hooks/useAgentCore';
+import { MODELS } from '../hooks/useModel';
+
+// Define file limits for the chat interface
+const fileLimit: FileLimit = {
+ accept: {
+ doc: [
+ '.csv',
+ '.doc',
+ '.docx',
+ '.html',
+ '.md',
+ '.pdf',
+ '.txt',
+ '.xls',
+ '.xlsx',
+ '.yaml',
+ '.json',
+ ],
+ image: ['.jpg', '.jpeg', '.png', '.gif', '.webp'],
+ video: [],
+ },
+ maxFileCount: 5,
+ maxFileSizeMB: 10,
+ maxImageFileCount: 5,
+ maxImageFileSizeMB: 5,
+ maxVideoFileCount: 0,
+ maxVideoFileSizeMB: 0,
+};
+
+// State management with zustand
+type StateType = {
+ content: string;
+ inputSystemContext: string;
+ setContent: (c: string) => void;
+ setInputSystemContext: (c: string) => void;
+};
+
+const useAgentCorePageState = create((set) => {
+ return {
+ content: '',
+ inputSystemContext: '',
+ setContent: (s: string) => {
+ set(() => ({
+ content: s,
+ }));
+ },
+ setInputSystemContext: (s: string) => {
+ set(() => ({
+ inputSystemContext: s,
+ }));
+ },
+ };
+});
+
+const AgentCorePage: React.FC = () => {
+ const { t } = useTranslation();
+ const pageTitle = t('agent_core.title', 'AgentCore');
+ const { pathname } = useLocation();
+ const { content, setContent } = useAgentCorePageState();
+
+ // Use a fixed ID for Agent Core Runtime similar to MCP
+ const fixedId = '/agent-core';
+ const {
+ messages,
+ isEmpty,
+ clear,
+ loading,
+ invokeAgentRuntime,
+ getGenericRuntime,
+ getAllAvailableRuntimes,
+ getModelId,
+ setModelId,
+ } = useAgentCore(fixedId);
+
+ const { scrollableContainer, setFollowing } = useFollow();
+
+ // Get runtimes
+ const allAvailableRuntimes = getAllAvailableRuntimes();
+ const genericRuntime = getGenericRuntime();
+
+ // Get models from MODELS like ChatPage does
+ const { modelIds: availableModels, modelDisplayName } = MODELS;
+ const modelId = getModelId();
+
+ const [selectedArn, setSelectedArn] = useState('');
+ const [sessionId] = useState(uuidv4());
+ const [isOver, setIsOver] = useState(false);
+ const [writing, setWriting] = useState(false);
+
+ const { clear: clearFiles, uploadFiles, uploadedFiles } = useFiles(pathname);
+
+ // Set the first available ARN as default if none is selected
+ useEffect(() => {
+ if (allAvailableRuntimes.length > 0 && !selectedArn) {
+ setSelectedArn(allAvailableRuntimes[0].arn);
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [allAvailableRuntimes]);
+
+ // Initialize system context and model ID only once on mount
+ useEffect(() => {
+ const _modelId = !modelId ? availableModels[0] : modelId;
+ setModelId(_modelId);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [availableModels]);
+
+ // Accept file types based on model
+ const accept = useMemo(() => {
+ if (!modelId) return [];
+ const feature = MODELS.modelMetadata[modelId];
+ return [
+ ...(feature.flags.doc ? fileLimit.accept.doc : []),
+ ...(feature.flags.image ? fileLimit.accept.image : []),
+ ...(feature.flags.video ? fileLimit.accept.video : []),
+ ];
+ }, [modelId]);
+
+ // File upload enabled
+ const fileUpload = useMemo(() => {
+ return accept.length > 0;
+ }, [accept]);
+
+ // Handle sending a message
+ const onSend = useCallback(() => {
+ if (!content || !selectedArn || loading) return;
+
+ setFollowing(true);
+ setWriting(true);
+
+ try {
+ // Get uploaded files from the useFiles hook
+ const uploadedFileObjects = uploadedFiles.filter(
+ (file) => !file.errorMessages.length && !file.uploading
+ );
+ const filesToSend =
+ uploadedFileObjects.length > 0
+ ? uploadedFileObjects.map((uploadedFile) => uploadedFile.file)
+ : undefined;
+
+ // Invoke agent runtime with content and files
+ invokeAgentRuntime(
+ selectedArn,
+ sessionId,
+ content,
+ 'DEFAULT',
+ filesToSend
+ );
+ setContent('');
+ clearFiles();
+ } catch (error) {
+ console.error('Error sending message:', error);
+ setWriting(false);
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [
+ content,
+ selectedArn,
+ loading,
+ setFollowing,
+ invokeAgentRuntime,
+ sessionId,
+ clearFiles,
+ uploadedFiles,
+ ]);
+
+ // Handle reset
+ const onReset = useCallback(() => {
+ clear();
+ setContent('');
+ clearFiles();
+ }, [clear, clearFiles, setContent]);
+
+ // Handle stop generation
+ const onStop = useCallback(() => {
+ setWriting(false);
+ // Note: AgentCore doesn't have a direct forceToStop method, so we just update the UI state
+ }, []);
+
+ // Handle drag and drop for files
+ const handleDragOver = (event: React.DragEvent) => {
+ event.preventDefault();
+ setIsOver(true);
+ };
+
+ const handleDragLeave = (event: React.DragEvent) => {
+ event.preventDefault();
+ setIsOver(false);
+ };
+
+ const handleDrop = (event: React.DragEvent) => {
+ event.preventDefault();
+ setIsOver(false);
+ if (event.dataTransfer.files) {
+ uploadFiles(Array.from(event.dataTransfer.files), fileLimit, accept);
+ }
+ };
+
+ // Prepare runtime options
+ const runtimeOptions = useMemo(() => {
+ return allAvailableRuntimes.map((runtime) => {
+ const isGeneric = genericRuntime && runtime.arn === genericRuntime.arn;
+ const typeLabel = isGeneric ? '[Generic]' : '[External]';
+ return {
+ value: runtime.arn,
+ label: `${runtime.name} ${typeLabel}`,
+ };
+ });
+ }, [allAvailableRuntimes, genericRuntime]);
+
+ // Prepare model options
+ const modelOptions = useMemo(() => {
+ return availableModels.map((m) => {
+ return { value: m, label: modelDisplayName(m) };
+ });
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [availableModels]);
+
+ const showingMessages = useMemo(() => {
+ return messages;
+ }, [messages]);
+
+ return (
+ <>
+
+
+ {pageTitle}
+
+
+ {/* File Drop Overlay */}
+ {isOver && fileUpload && (
+
+
+
+ {t('chat.drop_files', 'Drop files here')}
+
+
+
+ )}
+
+ {/* Selection Controls */}
+
+ {/* AgentCore Runtime Selection */}
+
+
+
+
+ {/* Model Selection */}
+
+
+
+
+
+ {/* Empty State */}
+ {isEmpty && (
+
+
+
+ {t(
+ 'agent_core.start_conversation',
+ 'Start a conversation with AgentCore'
+ )}
+
+
+ )}
+
+ {/* Chat Messages */}
+ {!isEmpty && (
+
+ {showingMessages.map((message, idx) => (
+
+ {idx === 0 && (
+
+ )}
+
+
+
+ ))}
+
+ )}
+
+ {/* Scroll Controls */}
+
+
+
+
+ {/* Input Area */}
+
+ {
+ if (!loading) {
+ onSend();
+ } else {
+ onStop();
+ }
+ }}
+ onReset={onReset}
+ fileUpload={fileUpload}
+ fileLimit={fileLimit}
+ accept={accept}
+ canStop={writing}
+ />
+
+
+ >
+ );
+};
+
+export default AgentCorePage;
diff --git a/packages/web/src/pages/LandingPage.tsx b/packages/web/src/pages/LandingPage.tsx
index 755e57035..15473a0b8 100644
--- a/packages/web/src/pages/LandingPage.tsx
+++ b/packages/web/src/pages/LandingPage.tsx
@@ -47,6 +47,8 @@ const ragEnabled: boolean = import.meta.env.VITE_APP_RAG_ENABLED === 'true';
const ragKnowledgeBaseEnabled: boolean =
import.meta.env.VITE_APP_RAG_KNOWLEDGE_BASE_ENABLED === 'true';
const agentEnabled: boolean = import.meta.env.VITE_APP_AGENT_ENABLED === 'true';
+const agentCoreEnabled: boolean =
+ import.meta.env.VITE_APP_AGENT_CORE_ENABLED === 'true';
const inlineAgents: boolean = import.meta.env.VITE_APP_INLINE_AGENTS === 'true';
const mcpEnabled: boolean = import.meta.env.VITE_APP_MCP_ENABLED === 'true';
const {
@@ -98,6 +100,10 @@ const LandingPage: React.FC = () => {
}
};
+ const demoAgentCore = () => {
+ navigate(`/agent-core`);
+ };
+
const demoMcp = () => {
const params: McpPageQueryParams = {
content: t('landing.demo.mcp.content'),
@@ -324,6 +330,14 @@ const LandingPage: React.FC = () => {
description={t('landing.use_cases.agent_chat.description')}
/>
)}
+ {agentCoreEnabled && (
+ }
+ description={t('landing.use_cases.agent_core.description')}
+ />
+ )}
{mcpEnabled && (
{
+ if (!arn || typeof arn !== 'string') {
+ return null;
+ }
+
+ const arnParts = arn.split(':');
+
+ // ARN must have at least 6 parts: arn:partition:service:region:account-id:resource
+ if (arnParts.length < 6 || arnParts[0] !== 'arn') {
+ return null;
+ }
+
+ return {
+ partition: arnParts[1],
+ service: arnParts[2],
+ region: arnParts[3],
+ accountId: arnParts[4],
+ resource: arnParts.slice(5).join(':'), // Resource can contain colons
+ };
+};
+
+/**
+ * Extract region from AWS ARN
+ *
+ * @param arn - AWS ARN string
+ * @returns Region string or null if invalid ARN
+ */
+export const getRegionFromArn = (arn: string): string | null => {
+ const parsed = parseArn(arn);
+ return parsed?.region || null;
+};
+
+/**
+ * Extract service from AWS ARN
+ *
+ * @param arn - AWS ARN string
+ * @returns Service string or null if invalid ARN
+ */
+export const getServiceFromArn = (arn: string): string | null => {
+ const parsed = parseArn(arn);
+ return parsed?.service || null;
+};
+
+/**
+ * Validate if ARN is for a specific AWS service
+ *
+ * @param arn - AWS ARN string
+ * @param service - Expected service name
+ * @returns True if ARN is for the specified service
+ */
+export const isArnForService = (arn: string, service: string): boolean => {
+ const parsed = parseArn(arn);
+ return parsed?.service === service;
+};
+
+/**
+ * Validate if ARN is for Bedrock Agent Core
+ *
+ * @param arn - AWS ARN string
+ * @returns True if ARN is for Bedrock Agent Core
+ */
+export const isBedrockAgentCoreArn = (arn: string): boolean => {
+ return isArnForService(arn, 'bedrock-agentcore');
+};
+
+/**
+ * Get runtime ID from Bedrock Agent Core ARN
+ *
+ * @param arn - Bedrock Agent Core ARN
+ * @returns Runtime ID or null if invalid
+ */
+export const getAgentCoreRuntimeIdFromArn = (arn: string): string | null => {
+ if (!isBedrockAgentCoreArn(arn)) {
+ return null;
+ }
+
+ const parsed = parseArn(arn);
+ if (!parsed) {
+ return null;
+ }
+
+ // Resource format: runtime/runtime-id
+ const resourceParts = parsed.resource.split('/');
+ if (resourceParts.length >= 2 && resourceParts[0] === 'runtime') {
+ return resourceParts.slice(1).join('/'); // Runtime ID can contain slashes
+ }
+
+ return null;
+};
diff --git a/packages/web/src/utils/strandsUtils.ts b/packages/web/src/utils/strandsUtils.ts
new file mode 100644
index 000000000..1797fdaa4
--- /dev/null
+++ b/packages/web/src/utils/strandsUtils.ts
@@ -0,0 +1,434 @@
+/**
+ * Utility functions for converting between Strands and GenU formats
+ */
+
+import {
+ ExtraData,
+ Metadata,
+ StrandsContentBlock,
+ StrandsMessage,
+ StrandsRole,
+ StrandsStreamEvent,
+ UnrecordedMessage,
+ UploadedFileType,
+} from 'generative-ai-use-cases';
+
+/**
+ * Convert GenU messages to Strands format
+ */
+export const convertToStrandsFormat = (
+ messages: UnrecordedMessage[],
+ uploadedFiles?: UploadedFileType[],
+ base64Cache?: Record
+): StrandsMessage[] => {
+ console.log('convertToStrandsFormat', uploadedFiles, base64Cache);
+ return messages.map((message) => {
+ const contentBlocks: StrandsContentBlock[] = [];
+
+ // Add text content if present
+ if (message.content && message.content.trim()) {
+ contentBlocks.push({ text: message.content });
+ }
+
+ // Convert extraData to Strands content blocks
+ if (message.extraData) {
+ for (const data of message.extraData) {
+ const contentBlock = convertExtraDataToStrandsContentBlock(
+ data,
+ uploadedFiles,
+ base64Cache
+ );
+ if (contentBlock) {
+ contentBlocks.push(contentBlock);
+ }
+ }
+ }
+
+ // Ensure at least one content block exists
+ if (contentBlocks.length === 0) {
+ contentBlocks.push({ text: message.content || '' });
+ }
+
+ return {
+ role: message.role as StrandsRole,
+ content: contentBlocks,
+ };
+ });
+};
+
+/**
+ * Convert ExtraData to Strands content block
+ */
+const convertExtraDataToStrandsContentBlock = (
+ data: ExtraData,
+ uploadedFiles?: UploadedFileType[],
+ base64Cache?: Record
+): StrandsContentBlock | null => {
+ let base64Data: string | undefined;
+
+ // Get base64 data based on source type
+ if (data.source.type === 'base64') {
+ base64Data = data.source.data;
+ } else if (data.source.type === 's3') {
+ // Try to find base64 data from uploadedFiles or base64Cache
+ base64Data =
+ uploadedFiles
+ ?.find((uploadedFile) => uploadedFile.s3Url === data.source.data)
+ ?.base64EncodedData?.replace(/^data:(.*,)?/, '') ??
+ base64Cache?.[data.source.data]?.replace(/^data:(.*,)?/, '');
+ }
+
+ if (!base64Data) {
+ console.warn('No base64 data found for extraData:', data);
+ return null;
+ }
+
+ // Convert based on data type
+ switch (data.type) {
+ case 'image':
+ return {
+ image: {
+ format: getImageFormatFromMimeType(data.source.mediaType),
+ source: {
+ bytes: base64Data,
+ },
+ },
+ };
+
+ case 'file':
+ return {
+ document: {
+ format: getDocumentFormatFromMimeType(data.source.mediaType),
+ name: data.name,
+ source: {
+ bytes: base64Data,
+ },
+ },
+ };
+
+ case 'video':
+ return {
+ video: {
+ format: getVideoFormatFromMimeType(data.source.mediaType),
+ source: {
+ bytes: base64Data,
+ },
+ },
+ };
+
+ default:
+ console.warn('Unsupported extraData type:', data.type);
+ return null;
+ }
+};
+
+/**
+ * Extract image format from MIME type
+ */
+const getImageFormatFromMimeType = (
+ mimeType: string
+): 'png' | 'jpeg' | 'gif' | 'webp' | undefined => {
+ const formatMap: Record = {
+ 'image/png': 'png',
+ 'image/jpeg': 'jpeg',
+ 'image/jpg': 'jpeg',
+ 'image/gif': 'gif',
+ 'image/webp': 'webp',
+ };
+ return formatMap[mimeType.toLowerCase()];
+};
+
+/**
+ * Extract document format from MIME type
+ */
+const getDocumentFormatFromMimeType = (
+ mimeType: string
+):
+ | 'pdf'
+ | 'csv'
+ | 'doc'
+ | 'docx'
+ | 'xls'
+ | 'xlsx'
+ | 'html'
+ | 'txt'
+ | 'md'
+ | undefined => {
+ const formatMap: Record<
+ string,
+ 'pdf' | 'csv' | 'doc' | 'docx' | 'xls' | 'xlsx' | 'html' | 'txt' | 'md'
+ > = {
+ 'application/pdf': 'pdf',
+ 'text/csv': 'csv',
+ 'application/msword': 'doc',
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
+ 'docx',
+ 'application/vnd.ms-excel': 'xls',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',
+ 'text/html': 'html',
+ 'text/plain': 'txt',
+ 'text/markdown': 'md',
+ };
+ return formatMap[mimeType.toLowerCase()];
+};
+
+/**
+ * Extract video format from MIME type
+ */
+const getVideoFormatFromMimeType = (
+ mimeType: string
+):
+ | 'flv'
+ | 'mkv'
+ | 'mov'
+ | 'mpeg'
+ | 'mpg'
+ | 'mp4'
+ | 'three_gp'
+ | 'webm'
+ | 'wmv'
+ | undefined => {
+ const formatMap: Record<
+ string,
+ 'flv' | 'mkv' | 'mov' | 'mpeg' | 'mpg' | 'mp4' | 'three_gp' | 'webm' | 'wmv'
+ > = {
+ 'video/x-flv': 'flv',
+ 'video/x-matroska': 'mkv',
+ 'video/quicktime': 'mov',
+ 'video/mpeg': 'mpeg',
+ 'video/mp4': 'mp4',
+ 'video/3gpp': 'three_gp',
+ 'video/webm': 'webm',
+ 'video/x-ms-wmv': 'wmv',
+ };
+ return formatMap[mimeType.toLowerCase()];
+};
+
+/**
+ * Convert File objects to Strands content blocks
+ */
+export const convertFilesToStrandsContentBlocks = async (
+ files: File[]
+): Promise => {
+ console.log('convertFilesToStrandsContentBlocks', files);
+ const contentBlocks: StrandsContentBlock[] = [];
+
+ for (const file of files) {
+ try {
+ const base64Data = await fileToBase64(file);
+ const contentBlock = await convertFileToStrandsContentBlock(
+ file,
+ base64Data
+ );
+ if (contentBlock) {
+ contentBlocks.push(contentBlock);
+ }
+ } catch (error) {
+ console.error('Error converting file to Strands content block:', error);
+ }
+ }
+
+ return contentBlocks;
+};
+
+/**
+ * Convert a single File to base64 string
+ */
+const fileToBase64 = (file: File): Promise => {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onload = () => {
+ const result = reader.result as string;
+ // Remove the data URL prefix (e.g., "data:image/png;base64,")
+ const base64Data = result.split(',')[1];
+ resolve(base64Data);
+ };
+ reader.onerror = reject;
+ reader.readAsDataURL(file);
+ });
+};
+
+/**
+ * Convert a single File to Strands content block
+ */
+const convertFileToStrandsContentBlock = async (
+ file: File,
+ base64Data: string
+): Promise => {
+ const mimeType = file.type;
+ const fileName = file.name.replace(/[^a-zA-Z0-9\s\-()[\]]/g, 'X');
+
+ // Determine file type based on MIME type
+ if (mimeType.startsWith('image/')) {
+ return {
+ image: {
+ format: getImageFormatFromMimeType(mimeType),
+ source: {
+ bytes: base64Data,
+ },
+ },
+ };
+ } else if (mimeType.startsWith('video/')) {
+ return {
+ video: {
+ format: getVideoFormatFromMimeType(mimeType),
+ source: {
+ bytes: base64Data,
+ },
+ },
+ };
+ } else {
+ // Treat as document
+ return {
+ document: {
+ format: getDocumentFormatFromMimeType(mimeType),
+ name: fileName,
+ source: {
+ bytes: base64Data,
+ },
+ },
+ };
+ }
+};
+
+/**
+ * Content block types for state tracking
+ */
+type ContentBlockType = 'text' | 'toolUse' | 'reasoning' | null;
+
+/**
+ * Stateful stream processor for Strands events
+ */
+export class StrandsStreamProcessor {
+ private currentContentBlockType: ContentBlockType = null;
+ private toolUseBuffer: string = '';
+
+ /**
+ * Process a streaming event and return formatted content
+ */
+ processEvent(
+ eventText: string
+ ): { text: string; trace?: string; metadata?: Metadata } | null {
+ try {
+ const parsedEvent = JSON.parse(eventText);
+ const streamEvent = parsedEvent.event as StrandsStreamEvent;
+
+ if (!streamEvent) return null;
+
+ // Handle message start event
+ if (streamEvent.messageStart) {
+ this.reset();
+ return null;
+ }
+
+ // Handle content block start event
+ if (streamEvent.contentBlockStart) {
+ const start = streamEvent.contentBlockStart.start;
+
+ if ('text' in start && start.text) {
+ this.currentContentBlockType = 'text';
+ return { text: start.text };
+ } else if ('toolUse' in start && start.toolUse) {
+ this.currentContentBlockType = 'toolUse';
+ this.toolUseBuffer = '';
+ return { text: '', trace: `\`\`\`${start.toolUse.name}\n` };
+ }
+ }
+
+ // Handle content block delta event (incremental updates)
+ if (streamEvent.contentBlockDelta) {
+ const delta = streamEvent.contentBlockDelta.delta;
+
+ if (delta.text) {
+ this.currentContentBlockType = 'text';
+ return { text: delta.text };
+ } else if (delta.toolUse) {
+ this.currentContentBlockType = 'toolUse';
+ this.toolUseBuffer += delta.toolUse.input;
+ return { text: '', trace: delta.toolUse.input };
+ } else if (delta.reasoningContent?.text) {
+ this.currentContentBlockType = 'reasoning';
+ return { text: '', trace: delta.reasoningContent.text };
+ }
+ }
+
+ // Handle content block stop event
+ if (streamEvent.contentBlockStop) {
+ if (this.currentContentBlockType === 'text') {
+ // Close the text block
+ const result = { text: '\n' };
+ this.currentContentBlockType = null;
+ return result;
+ } else if (this.currentContentBlockType === 'toolUse') {
+ // Close the tool use block
+ const result = { text: '', trace: `\n\`\`\`\n` };
+ this.currentContentBlockType = null;
+ return result;
+ }
+ this.currentContentBlockType = null;
+ return null;
+ }
+
+ // Handle message stop event
+ if (streamEvent.messageStop) {
+ this.reset();
+ return null;
+ }
+
+ // Handle metadata event
+ if (streamEvent.metadata) {
+ return {
+ text: '',
+ metadata: {
+ usage: {
+ inputTokens: streamEvent.metadata.usage.inputTokens,
+ outputTokens: streamEvent.metadata.usage.outputTokens,
+ totalTokens: streamEvent.metadata.usage.totalTokens,
+ cacheReadInputTokens:
+ streamEvent.metadata.usage.cacheReadInputTokens,
+ cacheWriteInputTokens:
+ streamEvent.metadata.usage.cacheWriteInputTokens,
+ },
+ },
+ };
+ }
+
+ // Handle error events
+ const errorEvent =
+ streamEvent.internalServerException ||
+ streamEvent.modelStreamErrorException ||
+ streamEvent.serviceUnavailableException ||
+ streamEvent.throttlingException ||
+ streamEvent.validationException;
+
+ if (errorEvent) {
+ return {
+ text: `Error: ${errorEvent.message || 'An error occurred'}`,
+ };
+ }
+
+ // Handle redact content event
+ if (streamEvent.redactContent) {
+ if (streamEvent.redactContent.redactAssistantContentMessage) {
+ return {
+ text: streamEvent.redactContent.redactAssistantContentMessage,
+ };
+ }
+ return null;
+ }
+
+ return null;
+ } catch (error) {
+ console.error('Error processing stream event:', error);
+ return null;
+ }
+ }
+
+ /**
+ * Reset the processor state
+ */
+ reset(): void {
+ this.currentContentBlockType = null;
+ this.toolUseBuffer = '';
+ }
+}
diff --git a/packages/web/src/vite-env.d.ts b/packages/web/src/vite-env.d.ts
index d3707dbff..f0b263c6e 100644
--- a/packages/web/src/vite-env.d.ts
+++ b/packages/web/src/vite-env.d.ts
@@ -32,6 +32,9 @@ interface ImportMetaEnv {
readonly VITE_APP_SPEECH_TO_SPEECH_MODEL_IDS: string;
readonly VITE_APP_MCP_ENABLED: string;
readonly VITE_APP_MCP_ENDPOINT: string;
+ readonly VITE_APP_AGENT_CORE_ENABLED: string;
+ readonly VITE_APP_AGENT_CORE_GENERIC_RUNTIME: string;
+ readonly VITE_APP_AGENT_CORE_EXTERNAL_RUNTIMES: string;
}
interface ImportMeta {
diff --git a/setup-env.sh b/setup-env.sh
index be904c828..934c7f3a8 100755
--- a/setup-env.sh
+++ b/setup-env.sh
@@ -52,3 +52,6 @@ export VITE_APP_SPEECH_TO_SPEECH_EVENT_API_ENDPOINT=$(extract_value "$stack_outp
export VITE_APP_SPEECH_TO_SPEECH_MODEL_IDS=$(extract_value "$stack_output" SpeechToSpeechModelIds)
export VITE_APP_MCP_ENABLED=$(extract_value "$stack_output" McpEnabled)
export VITE_APP_MCP_ENDPOINT=$(extract_value "$stack_output" McpEndpoint)
+export VITE_APP_AGENT_CORE_ENABLED=$(extract_value "$stack_output" AgentCoreEnabled)
+export VITE_APP_AGENT_CORE_GENERIC_RUNTIME=$(extract_value "$stack_output" AgentCoreGenericRuntime)
+export VITE_APP_AGENT_CORE_EXTERNAL_RUNTIMES=$(extract_value "$stack_output" AgentCoreExternalRuntimes)
diff --git a/web_devw_win.ps1 b/web_devw_win.ps1
index bdd627d77..09d17e306 100644
--- a/web_devw_win.ps1
+++ b/web_devw_win.ps1
@@ -85,5 +85,8 @@ $env:VITE_APP_SPEECH_TO_SPEECH_EVENT_API_ENDPOINT = Extract-Value $stack_output
$env:VITE_APP_SPEECH_TO_SPEECH_MODEL_IDS = Extract-Value $stack_output "SpeechToSpeechModelIds"
$env:VITE_APP_MCP_ENABLED = Extract-Value $stack_output "McpEnabled"
$env:VITE_APP_MCP_ENDPOINT = Extract-Value $stack_output "McpEndpoint"
+$env:VITE_APP_AGENT_CORE_ENABLED = Extract-Value $stack_output "AgentCoreEnabled"
+$env:VITE_APP_AGENT_CORE_GENERIC_RUNTIME = Extract-Value $stack_output "AgentCoreGenericRuntime"
+$env:VITE_APP_AGENT_CORE_EXTERNAL_RUNTIMES = Extract-Value $stack_output "AgentCoreExternalRuntimes"
npm -w packages/web run dev