Repository: stateful/vscode-runme
Pull request #1763 (2024-10-29 16:49:49)

Rewire stdio for non-interactive
As @jlewi summarized in https://github.com/stateful/runme/issues/684:

> * Interactive terminals multiplex stdout and stderr and show the multiplexed stream in the Cell output window
> * non-interactive terminals don't multiplex stdout/stderr and only stdout is sent to the cell output window
> * non-interactive terminals don't multiple stdout & stderr because this could interfere with 3rd party renders
>   
>   * For example imagine a CLI is emitting a JSON table to stdout and also sending errors to stderr
>   * If you multiple stdout & stderr you no longer have a stream of valid JSON
>   * So a 3rd party renderer for JSON would break if you multiplexed stdout and stderr
> * So the proposed fix for non-interactive terminals is to send stderr to the vscode integrated terminal in the bottom panel

This PR aligns the user experience with the above. Todos:

- [x] Add/fix tests
- [x] Test dagger integration continues to work
- [x] Test cloud resource integration continues to work
- [x] Finalize stderr "color" if any, it's a less alarming terminal-yellow right now

Btw, this PR does not solve how to include `stderr` into the serialized notebook, as per:

> and for `non-interactive` we could probably do:
> 
> * `stateful.runme/output-items`
> * `application/vnd.code.notebook.stdout`
> * perhaps a third with `application/vnd.code.notebook.stderr`

We'll handle this in a separate PR (cc @jlewi).

sourishkrout: @jlewi, here's a demo. You should be able to run it locally. Merging it still requires more work, though.

https://github.com/user-attachments/assets/89ee635f-5860-408a-8ee5-bc88ea465a9e


jlewi: The UX looks great. One question I have for non-interactive cells, if I wanted to programmatically access stderr in order to send it to Foyle, where would I tap into it.

Consider the following example
1. We use gcloud to fetch logs from Cloud Logging
2. We use a custom renderer to render logs in a rich way
3. gcloud fails with an error because the query is wrong

In this case what I'd like to happen is
1. We send a request to Foyle with the stderr containing the error message about the logging query
2. Foyle returns a corrected command which is inserted as a ghost cell.





sourishkrout: I see, @jlewi. We could employ the same strategy for `non-interactive`, which is already being used for `interactive`, where we create a single output with multiple items (different media types). This is how we render Gists with serialized output whereas the notebook shows a terminal.

For `interactive`, we have the following:
- `stateful.runme/terminal`
- `application/vnd.code.notebook.stdout`

and for `non-interactive` we could probably do:
- `stateful.runme/output-items`
- `application/vnd.code.notebook.stdout`
- perhaps a third with `application/vnd.code.notebook.stderr`

Or combine stdout+stderr into a single item.

Patch:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 96b7b98c..6a263796 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -234,7 +234,7 @@ open coverage/lcov-report/index.html
 
 We use WebdriverIO to run e2e tests on the VS Code extension:
 
-```sh {"id":"01HF7VQMH8ESX1EFV4PX19FXW0","name":"test:e2e"}
+```sh {"id":"01HF7VQMH8ESX1EFV4PX19FXW0","name":"test:e2e","promptEnv":"never"}
 export NODE_OPTIONS="--import=./specifier-register.mjs --max-old-space-size=8192"
 npx wdio run ./tests/e2e/wdio.conf.ts
 ```
diff --git a/package-lock.json b/package-lock.json
index 48902554..8a9ede68 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,27 +1,27 @@
 {
   "name": "runme",
-  "version": "3.10.0-edge.0",
+  "version": "3.10.1",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "runme",
-      "version": "3.10.0-edge.0",
+      "version": "3.10.1",
       "hasInstallScript": true,
       "license": "Apache-2.0",
       "dependencies": {
         "@apollo/client": "^3.11.10",
-        "@aws-sdk/client-ec2": "^3.687.0",
-        "@aws-sdk/client-eks": "^3.688.0",
-        "@aws-sdk/credential-providers": "^3.687.0",
+        "@aws-sdk/client-ec2": "^3.701.0",
+        "@aws-sdk/client-eks": "^3.699.0",
+        "@aws-sdk/credential-providers": "^3.699.0",
         "@buf/grpc_grpc.community_timostamm-protobuf-ts": "^2.9.4-20240904201038-e0425cfebb28.4",
         "@buf/jlewi_foyle.bufbuild_es": "^1.10.0-20241018224331-ac296bc95724.1",
         "@buf/jlewi_foyle.connectrpc_es": "^1.5.0-20241018224331-ac296bc95724.1",
         "@buf/stateful_runme.community_timostamm-protobuf-ts": "^2.9.4-20241021161352-11c142f88aee.4",
         "@connectrpc/connect": "^1.4.0",
         "@connectrpc/connect-node": "^1.6.1",
-        "@google-cloud/compute": "^4.1.0",
-        "@google-cloud/container": "^5.18.0",
+        "@google-cloud/compute": "^4.8.0",
+        "@google-cloud/container": "^5.19.0",
         "@google-cloud/run": "^1.4.0",
         "@kubernetes/client-node": "^0.22.2",
         "@protobuf-ts/grpc-transport": "^2.9.1",
@@ -56,7 +56,7 @@
         "ulidx": "^2.4.1",
         "uuid": "^11.0.3",
         "vscode-telemetry": "^2.0.0",
-        "yaml": "^2.6.0",
+        "yaml": "^2.6.1",
         "zod": "^3.23.8"
       },
       "devDependencies": {
@@ -80,17 +80,17 @@
         "@wdio/local-runner": "^8.40.6",
         "@wdio/mocha-framework": "^8.40.6",
         "@wdio/spec-reporter": "^8.40.6",
-        "chromedriver": "^130.0.4",
+        "chromedriver": "^131.0.1",
         "comment-json": "^4.2.5",
         "eslint": "^8.57.1",
         "eslint-config-prettier": "^9.0.0",
         "eslint-import-resolver-typescript": "^3.6.3",
         "eslint-plugin-import": "^2.31.0",
-        "eslint-plugin-unicorn": "^56.0.0",
+        "eslint-plugin-unicorn": "^56.0.1",
         "eslint-plugin-unused-imports": "^4.1.4",
         "expect-webdriverio": "^4.15.4",
         "fork-ts-checker-webpack-plugin": "^9.0.0",
-        "husky": "^9.1.6",
+        "husky": "^9.1.7",
         "msw": "^2.6.0",
         "npm-run-all": "^4.1.5",
         "prettier": "^3.3.3",
@@ -476,49 +476,50 @@
       }
     },
     "node_modules/@aws-sdk/client-cognito-identity": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.687.0.tgz",
-      "integrity": "sha512-jcQTioloSed+Jc3snjrgpWejkOm8t3Zt+jWrApw3ejN8qBtpFCH43M7q/CSDVZ9RS1IjX+KRWoBFnrDOnbuw0Q==",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.699.0.tgz",
+      "integrity": "sha512-9tFt+we6AIvj/f1+nrLHuCWcQmyfux5gcBSOy9d9+zIG56YxGEX7S9TaZnybogpVV8A0BYWml36WvIHS9QjIpA==",
+      "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.687.0",
-        "@aws-sdk/client-sts": "3.687.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/credential-provider-node": "3.687.0",
-        "@aws-sdk/middleware-host-header": "3.686.0",
-        "@aws-sdk/middleware-logger": "3.686.0",
-        "@aws-sdk/middleware-recursion-detection": "3.686.0",
-        "@aws-sdk/middleware-user-agent": "3.687.0",
-        "@aws-sdk/region-config-resolver": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-endpoints": "3.686.0",
-        "@aws-sdk/util-user-agent-browser": "3.686.0",
-        "@aws-sdk/util-user-agent-node": "3.687.0",
-        "@smithy/config-resolver": "^3.0.10",
-        "@smithy/core": "^2.5.1",
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/hash-node": "^3.0.8",
-        "@smithy/invalid-dependency": "^3.0.8",
-        "@smithy/middleware-content-length": "^3.0.10",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/middleware-retry": "^3.0.25",
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/middleware-stack": "^3.0.8",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
+        "@aws-sdk/client-sso-oidc": "3.699.0",
+        "@aws-sdk/client-sts": "3.699.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.699.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.25",
-        "@smithy/util-defaults-mode-node": "^3.0.25",
-        "@smithy/util-endpoints": "^2.1.4",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-retry": "^3.0.8",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -527,52 +528,53 @@
       }
     },
     "node_modules/@aws-sdk/client-ec2": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.687.0.tgz",
-      "integrity": "sha512-cE9BsLzAprNWKMXDotgfhhCnnnflg724HZ23vapx9smUhB5SgCr6MaZeTAutPKUtraowzC/7Idb8nURb93urAQ==",
+      "version": "3.701.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.701.0.tgz",
+      "integrity": "sha512-JTGunZM2UGO/F5WaA16IwhwMMaIsEEoLER0CkehPEnSIt8Y3Qn5j28rJfpI7TRBcFkRW8kEfbHJHPILg62oMiw==",
+      "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.687.0",
-        "@aws-sdk/client-sts": "3.687.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/credential-provider-node": "3.687.0",
-        "@aws-sdk/middleware-host-header": "3.686.0",
-        "@aws-sdk/middleware-logger": "3.686.0",
-        "@aws-sdk/middleware-recursion-detection": "3.686.0",
-        "@aws-sdk/middleware-sdk-ec2": "3.686.0",
-        "@aws-sdk/middleware-user-agent": "3.687.0",
-        "@aws-sdk/region-config-resolver": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-endpoints": "3.686.0",
-        "@aws-sdk/util-user-agent-browser": "3.686.0",
-        "@aws-sdk/util-user-agent-node": "3.687.0",
-        "@smithy/config-resolver": "^3.0.10",
-        "@smithy/core": "^2.5.1",
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/hash-node": "^3.0.8",
-        "@smithy/invalid-dependency": "^3.0.8",
-        "@smithy/middleware-content-length": "^3.0.10",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/middleware-retry": "^3.0.25",
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/middleware-stack": "^3.0.8",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
+        "@aws-sdk/client-sso-oidc": "3.699.0",
+        "@aws-sdk/client-sts": "3.699.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.699.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-sdk-ec2": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.25",
-        "@smithy/util-defaults-mode-node": "^3.0.25",
-        "@smithy/util-endpoints": "^2.1.4",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-retry": "^3.0.8",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
-        "@smithy/util-waiter": "^3.1.7",
+        "@smithy/util-waiter": "^3.1.9",
         "@types/uuid": "^9.0.1",
         "tslib": "^2.6.2",
         "uuid": "^9.0.1"
@@ -600,51 +602,52 @@
       }
     },
     "node_modules/@aws-sdk/client-eks": {
-      "version": "3.688.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-eks/-/client-eks-3.688.0.tgz",
-      "integrity": "sha512-+/B2c64GPnJhesOFniE7u0i55FrTfztrgK0bGUKs1zmcz5xnj45/+Hco7ixUGfwYc3+z2aFLwTNUwsUn1iWVIQ==",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-eks/-/client-eks-3.699.0.tgz",
+      "integrity": "sha512-BN3FcMjjR2zNpoLkGc/nUgYupKnNWFT7cfbwxK7fBh6lEHMAqXIYTPSmcBFfh1bKouxR7/ae+XUBSMBVhO/wUA==",
+      "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.687.0",
-        "@aws-sdk/client-sts": "3.687.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/credential-provider-node": "3.687.0",
-        "@aws-sdk/middleware-host-header": "3.686.0",
-        "@aws-sdk/middleware-logger": "3.686.0",
-        "@aws-sdk/middleware-recursion-detection": "3.686.0",
-        "@aws-sdk/middleware-user-agent": "3.687.0",
-        "@aws-sdk/region-config-resolver": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-endpoints": "3.686.0",
-        "@aws-sdk/util-user-agent-browser": "3.686.0",
-        "@aws-sdk/util-user-agent-node": "3.687.0",
-        "@smithy/config-resolver": "^3.0.10",
-        "@smithy/core": "^2.5.1",
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/hash-node": "^3.0.8",
-        "@smithy/invalid-dependency": "^3.0.8",
-        "@smithy/middleware-content-length": "^3.0.10",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/middleware-retry": "^3.0.25",
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/middleware-stack": "^3.0.8",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
+        "@aws-sdk/client-sso-oidc": "3.699.0",
+        "@aws-sdk/client-sts": "3.699.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.699.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.25",
-        "@smithy/util-defaults-mode-node": "^3.0.25",
-        "@smithy/util-endpoints": "^2.1.4",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-retry": "^3.0.8",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
-        "@smithy/util-waiter": "^3.1.7",
+        "@smithy/util-waiter": "^3.1.9",
         "@types/uuid": "^9.0.1",
         "tslib": "^2.6.2",
         "uuid": "^9.0.1"
@@ -672,46 +675,47 @@
       }
     },
     "node_modules/@aws-sdk/client-sso": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.687.0.tgz",
-      "integrity": "sha512-dfj0y9fQyX4kFill/ZG0BqBTLQILKlL7+O5M4F9xlsh2WNuV2St6WtcOg14Y1j5UODPJiJs//pO+mD1lihT5Kw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz",
+      "integrity": "sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==",
+      "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/middleware-host-header": "3.686.0",
-        "@aws-sdk/middleware-logger": "3.686.0",
-        "@aws-sdk/middleware-recursion-detection": "3.686.0",
-        "@aws-sdk/middleware-user-agent": "3.687.0",
-        "@aws-sdk/region-config-resolver": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-endpoints": "3.686.0",
-        "@aws-sdk/util-user-agent-browser": "3.686.0",
-        "@aws-sdk/util-user-agent-node": "3.687.0",
-        "@smithy/config-resolver": "^3.0.10",
-        "@smithy/core": "^2.5.1",
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/hash-node": "^3.0.8",
-        "@smithy/invalid-dependency": "^3.0.8",
-        "@smithy/middleware-content-length": "^3.0.10",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/middleware-retry": "^3.0.25",
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/middleware-stack": "^3.0.8",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.25",
-        "@smithy/util-defaults-mode-node": "^3.0.25",
-        "@smithy/util-endpoints": "^2.1.4",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-retry": "^3.0.8",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -720,47 +724,48 @@
       }
     },
     "node_modules/@aws-sdk/client-sso-oidc": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.687.0.tgz",
-      "integrity": "sha512-Rdd8kLeTeh+L5ZuG4WQnWgYgdv7NorytKdZsGjiag1D8Wv3PcJvPqqWdgnI0Og717BSXVoaTYaN34FyqFYSx6Q==",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.699.0.tgz",
+      "integrity": "sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw==",
+      "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/credential-provider-node": "3.687.0",
-        "@aws-sdk/middleware-host-header": "3.686.0",
-        "@aws-sdk/middleware-logger": "3.686.0",
-        "@aws-sdk/middleware-recursion-detection": "3.686.0",
-        "@aws-sdk/middleware-user-agent": "3.687.0",
-        "@aws-sdk/region-config-resolver": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-endpoints": "3.686.0",
-        "@aws-sdk/util-user-agent-browser": "3.686.0",
-        "@aws-sdk/util-user-agent-node": "3.687.0",
-        "@smithy/config-resolver": "^3.0.10",
-        "@smithy/core": "^2.5.1",
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/hash-node": "^3.0.8",
-        "@smithy/invalid-dependency": "^3.0.8",
-        "@smithy/middleware-content-length": "^3.0.10",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/middleware-retry": "^3.0.25",
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/middleware-stack": "^3.0.8",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.699.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.25",
-        "@smithy/util-defaults-mode-node": "^3.0.25",
-        "@smithy/util-endpoints": "^2.1.4",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-retry": "^3.0.8",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -768,52 +773,53 @@
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.687.0"
+        "@aws-sdk/client-sts": "^3.699.0"
       }
     },
     "node_modules/@aws-sdk/client-sts": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.687.0.tgz",
-      "integrity": "sha512-SQjDH8O4XCTtouuCVYggB0cCCrIaTzUZIkgJUpOsIEJBLlTbNOb/BZqUShAQw2o9vxr2rCeOGjAQOYPysW/Pmg==",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.699.0.tgz",
+      "integrity": "sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg==",
+      "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.687.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/credential-provider-node": "3.687.0",
-        "@aws-sdk/middleware-host-header": "3.686.0",
-        "@aws-sdk/middleware-logger": "3.686.0",
-        "@aws-sdk/middleware-recursion-detection": "3.686.0",
-        "@aws-sdk/middleware-user-agent": "3.687.0",
-        "@aws-sdk/region-config-resolver": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-endpoints": "3.686.0",
-        "@aws-sdk/util-user-agent-browser": "3.686.0",
-        "@aws-sdk/util-user-agent-node": "3.687.0",
-        "@smithy/config-resolver": "^3.0.10",
-        "@smithy/core": "^2.5.1",
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/hash-node": "^3.0.8",
-        "@smithy/invalid-dependency": "^3.0.8",
-        "@smithy/middleware-content-length": "^3.0.10",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/middleware-retry": "^3.0.25",
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/middleware-stack": "^3.0.8",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
+        "@aws-sdk/client-sso-oidc": "3.699.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.699.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.25",
-        "@smithy/util-defaults-mode-node": "^3.0.25",
-        "@smithy/util-endpoints": "^2.1.4",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-retry": "^3.0.8",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -822,19 +828,20 @@
       }
     },
     "node_modules/@aws-sdk/core": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.686.0.tgz",
-      "integrity": "sha512-Xt3DV4DnAT3v2WURwzTxWQK34Ew+iiLzoUoguvLaZrVMFOqMMrwVjP+sizqIaHp1j7rGmFcN5I8saXnsDLuQLA==",
-      "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/core": "^2.5.1",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/signature-v4": "^4.2.0",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/util-middleware": "^3.0.8",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.696.0.tgz",
+      "integrity": "sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/core": "^2.5.3",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/signature-v4": "^4.2.2",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-middleware": "^3.0.10",
         "fast-xml-parser": "4.4.1",
         "tslib": "^2.6.2"
       },
@@ -843,14 +850,15 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-cognito-identity": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.687.0.tgz",
-      "integrity": "sha512-hJq9ytoj2q/Jonc7mox/b0HT+j4NeMRuU184DkXRJbvIvwwB+oMt12221kThLezMhwIYfXEteZ7GEId7Hn8Y8g==",
-      "dependencies": {
-        "@aws-sdk/client-cognito-identity": "3.687.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/types": "^3.6.0",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.699.0.tgz",
+      "integrity": "sha512-iuaTnudaBfEET+o444sDwf71Awe6UiZfH+ipUPmswAi2jZDwdFF1nxMKDEKL8/LV5WpXsdKSfwgS0RQeupURew==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/client-cognito-identity": "3.699.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -858,14 +866,15 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-env": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.686.0.tgz",
-      "integrity": "sha512-osD7lPO8OREkgxPiTWmA1i6XEmOth1uW9HWWj/+A2YGCj1G/t2sHu931w4Qj9NWHYZtbTTXQYVRg+TErALV7nQ==",
-      "dependencies": {
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/types": "^3.6.0",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.696.0.tgz",
+      "integrity": "sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -873,19 +882,20 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-http": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.686.0.tgz",
-      "integrity": "sha512-xyGAD/f3vR/wssUiZrNFWQWXZvI4zRm2wpHhoHA1cC2fbRMNFYtFn365yw6dU7l00ZLcdFB1H119AYIUZS7xbw==",
-      "dependencies": {
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/util-stream": "^3.2.1",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.696.0.tgz",
+      "integrity": "sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-stream": "^3.3.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -893,46 +903,48 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-ini": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.687.0.tgz",
-      "integrity": "sha512-6d5ZJeZch+ZosJccksN0PuXv7OSnYEmanGCnbhUqmUSz9uaVX6knZZfHCZJRgNcfSqg9QC0zsFA/51W5HCUqSQ==",
-      "dependencies": {
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/credential-provider-env": "3.686.0",
-        "@aws-sdk/credential-provider-http": "3.686.0",
-        "@aws-sdk/credential-provider-process": "3.686.0",
-        "@aws-sdk/credential-provider-sso": "3.687.0",
-        "@aws-sdk/credential-provider-web-identity": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/credential-provider-imds": "^3.2.4",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/shared-ini-file-loader": "^3.1.8",
-        "@smithy/types": "^3.6.0",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.699.0.tgz",
+      "integrity": "sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-env": "3.696.0",
+        "@aws-sdk/credential-provider-http": "3.696.0",
+        "@aws-sdk/credential-provider-process": "3.696.0",
+        "@aws-sdk/credential-provider-sso": "3.699.0",
+        "@aws-sdk/credential-provider-web-identity": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/credential-provider-imds": "^3.2.6",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/shared-ini-file-loader": "^3.1.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.687.0"
+        "@aws-sdk/client-sts": "^3.699.0"
       }
     },
     "node_modules/@aws-sdk/credential-provider-node": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.687.0.tgz",
-      "integrity": "sha512-Pqld8Nx11NYaBUrVk3bYiGGpLCxkz8iTONlpQWoVWFhSOzlO7zloNOaYbD2XgFjjqhjlKzE91drs/f41uGeCTA==",
-      "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.686.0",
-        "@aws-sdk/credential-provider-http": "3.686.0",
-        "@aws-sdk/credential-provider-ini": "3.687.0",
-        "@aws-sdk/credential-provider-process": "3.686.0",
-        "@aws-sdk/credential-provider-sso": "3.687.0",
-        "@aws-sdk/credential-provider-web-identity": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/credential-provider-imds": "^3.2.4",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/shared-ini-file-loader": "^3.1.8",
-        "@smithy/types": "^3.6.0",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.699.0.tgz",
+      "integrity": "sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/credential-provider-env": "3.696.0",
+        "@aws-sdk/credential-provider-http": "3.696.0",
+        "@aws-sdk/credential-provider-ini": "3.699.0",
+        "@aws-sdk/credential-provider-process": "3.696.0",
+        "@aws-sdk/credential-provider-sso": "3.699.0",
+        "@aws-sdk/credential-provider-web-identity": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/credential-provider-imds": "^3.2.6",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/shared-ini-file-loader": "^3.1.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -940,15 +952,16 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-process": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.686.0.tgz",
-      "integrity": "sha512-sXqaAgyzMOc+dm4CnzAR5Q6S9OWVHyZjLfW6IQkmGjqeQXmZl24c4E82+w64C+CTkJrFLzH1VNOYp1Hy5gE6Qw==",
-      "dependencies": {
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/shared-ini-file-loader": "^3.1.8",
-        "@smithy/types": "^3.6.0",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz",
+      "integrity": "sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/shared-ini-file-loader": "^3.1.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -956,17 +969,18 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-sso": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.687.0.tgz",
-      "integrity": "sha512-N1YCoE7DovIRF2ReyRrA4PZzF0WNi4ObPwdQQkVxhvSm7PwjbWxrfq7rpYB+6YB1Uq3QPzgVwUFONE36rdpxUQ==",
-      "dependencies": {
-        "@aws-sdk/client-sso": "3.687.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/token-providers": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/shared-ini-file-loader": "^3.1.8",
-        "@smithy/types": "^3.6.0",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.699.0.tgz",
+      "integrity": "sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/client-sso": "3.696.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/token-providers": "3.699.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/shared-ini-file-loader": "^3.1.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -974,44 +988,46 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-web-identity": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.686.0.tgz",
-      "integrity": "sha512-40UqCpPxyHCXDP7CGd9JIOZDgDZf+u1OyLaGBpjQJlz1HYuEsIWnnbTe29Yg3Ah/Zc3g4NBWcUdlGVotlnpnDg==",
-      "dependencies": {
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/types": "^3.6.0",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz",
+      "integrity": "sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.686.0"
+        "@aws-sdk/client-sts": "^3.696.0"
       }
     },
     "node_modules/@aws-sdk/credential-providers": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.687.0.tgz",
-      "integrity": "sha512-3aKlmKaOplpanOycmoigbTrQsqtxpzhpfquCey51aHf9GYp2yYyYF1YOgkXpE3qm3w6eiEN1asjJ2gqoECUuPA==",
-      "dependencies": {
-        "@aws-sdk/client-cognito-identity": "3.687.0",
-        "@aws-sdk/client-sso": "3.687.0",
-        "@aws-sdk/client-sts": "3.687.0",
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/credential-provider-cognito-identity": "3.687.0",
-        "@aws-sdk/credential-provider-env": "3.686.0",
-        "@aws-sdk/credential-provider-http": "3.686.0",
-        "@aws-sdk/credential-provider-ini": "3.687.0",
-        "@aws-sdk/credential-provider-node": "3.687.0",
-        "@aws-sdk/credential-provider-process": "3.686.0",
-        "@aws-sdk/credential-provider-sso": "3.687.0",
-        "@aws-sdk/credential-provider-web-identity": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/credential-provider-imds": "^3.2.4",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/types": "^3.6.0",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.699.0.tgz",
+      "integrity": "sha512-jBjOntl9zN9Nvb0jmbMGRbiTzemDz64ij7W6BDavxBJRZpRoNeN0QCz6RolkCyXnyUJjo5mF2unY2wnv00A+LQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/client-cognito-identity": "3.699.0",
+        "@aws-sdk/client-sso": "3.696.0",
+        "@aws-sdk/client-sts": "3.699.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-cognito-identity": "3.699.0",
+        "@aws-sdk/credential-provider-env": "3.696.0",
+        "@aws-sdk/credential-provider-http": "3.696.0",
+        "@aws-sdk/credential-provider-ini": "3.699.0",
+        "@aws-sdk/credential-provider-node": "3.699.0",
+        "@aws-sdk/credential-provider-process": "3.696.0",
+        "@aws-sdk/credential-provider-sso": "3.699.0",
+        "@aws-sdk/credential-provider-web-identity": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/credential-provider-imds": "^3.2.6",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1019,13 +1035,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-host-header": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.686.0.tgz",
-      "integrity": "sha512-+Yc6rO02z+yhFbHmRZGvEw1vmzf/ifS9a4aBjJGeVVU+ZxaUvnk+IUZWrj4YQopUQ+bSujmMUzJLXSkbDq7yuw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz",
+      "integrity": "sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/types": "^3.6.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1033,12 +1050,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-logger": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.686.0.tgz",
-      "integrity": "sha512-cX43ODfA2+SPdX7VRxu6gXk4t4bdVJ9pkktbfnkE5t27OlwNfvSGGhnHrQL8xTOFeyQ+3T+oowf26gf1OI+vIg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.696.0.tgz",
+      "integrity": "sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/types": "^3.6.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1046,13 +1064,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-recursion-detection": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.686.0.tgz",
-      "integrity": "sha512-jF9hQ162xLgp9zZ/3w5RUNhmwVnXDBlABEUX8jCgzaFpaa742qR/KKtjjZQ6jMbQnP+8fOCSXFAVNMU+s6v81w==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.696.0.tgz",
+      "integrity": "sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/types": "^3.6.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1060,17 +1079,18 @@
       }
     },
     "node_modules/@aws-sdk/middleware-sdk-ec2": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.686.0.tgz",
-      "integrity": "sha512-R2URZuKKKnqG1gHP4ErzLtei4TbP2BspCiIn2NLaUmM1TJ25a8wi6ObHD6k7IOIHOm6Kir01YVWr4y6kklhEWA==",
-      "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-format-url": "3.686.0",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/signature-v4": "^4.2.0",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.696.0.tgz",
+      "integrity": "sha512-HVMpblaaTQ1Ysku2nR6+N22aEgT7CDot+vsFutHNJCBPl+eEON5exp7IvsFC7sFCWmSfnMHTHtmmj5YIYHO1gQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-format-url": "3.696.0",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/signature-v4": "^4.2.2",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1078,16 +1098,17 @@
       }
     },
     "node_modules/@aws-sdk/middleware-user-agent": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.687.0.tgz",
-      "integrity": "sha512-nUgsKiEinyA50CaDXojAkOasAU3Apdg7Qox6IjNUC4ZjgOu7QWsCDB5N28AYMUt06cNYeYQdfMX1aEzG85a1Mg==",
-      "dependencies": {
-        "@aws-sdk/core": "3.686.0",
-        "@aws-sdk/types": "3.686.0",
-        "@aws-sdk/util-endpoints": "3.686.0",
-        "@smithy/core": "^2.5.1",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/types": "^3.6.0",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.696.0.tgz",
+      "integrity": "sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@smithy/core": "^2.5.3",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1095,15 +1116,16 @@
       }
     },
     "node_modules/@aws-sdk/region-config-resolver": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.686.0.tgz",
-      "integrity": "sha512-6zXD3bSD8tcsMAVVwO1gO7rI1uy2fCD3czgawuPGPopeLiPpo6/3FoUWCQzk2nvEhj7p9Z4BbjwZGSlRkVrXTw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.696.0.tgz",
+      "integrity": "sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/types": "^3.6.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.8",
+        "@smithy/util-middleware": "^3.0.10",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1111,29 +1133,31 @@
       }
     },
     "node_modules/@aws-sdk/token-providers": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.686.0.tgz",
-      "integrity": "sha512-9oL4kTCSePFmyKPskibeiOXV6qavPZ63/kXM9Wh9V6dTSvBtLeNnMxqGvENGKJcTdIgtoqyqA6ET9u0PJ5IRIg==",
-      "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/property-provider": "^3.1.7",
-        "@smithy/shared-ini-file-loader": "^3.1.8",
-        "@smithy/types": "^3.6.0",
+      "version": "3.699.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.699.0.tgz",
+      "integrity": "sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/property-provider": "^3.1.9",
+        "@smithy/shared-ini-file-loader": "^3.1.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sso-oidc": "^3.686.0"
+        "@aws-sdk/client-sso-oidc": "^3.699.0"
       }
     },
     "node_modules/@aws-sdk/types": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.686.0.tgz",
-      "integrity": "sha512-xFnrb3wxOoJcW2Xrh63ZgFo5buIu9DF7bOHnwoUxHdNpUXicUh0AHw85TjXxyxIAd0d1psY/DU7QHoNI3OswgQ==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz",
+      "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1141,13 +1165,14 @@
       }
     },
     "node_modules/@aws-sdk/util-endpoints": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.686.0.tgz",
-      "integrity": "sha512-7msZE2oYl+6QYeeRBjlDgxQUhq/XRky3cXE0FqLFs2muLS7XSuQEXkpOXB3R782ygAP6JX0kmBxPTLurRTikZg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.696.0.tgz",
+      "integrity": "sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/types": "^3.6.0",
-        "@smithy/util-endpoints": "^2.1.4",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-endpoints": "^2.1.6",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1155,13 +1180,14 @@
       }
     },
     "node_modules/@aws-sdk/util-format-url": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.686.0.tgz",
-      "integrity": "sha512-9doB6O4FAlnWZrvnFDUxTtSFtuL8kUqxlP00HTiDgL1uDJZ8e0S4gqjKR+9+N5goFtxGi7IJeNsDEz2H7imvgw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.696.0.tgz",
+      "integrity": "sha512-R6yK1LozUD1GdAZRPhNsIow6VNFJUTyyoIar1OCWaknlucBMcq7musF3DN3TlORBwfFMj5buHc2ET9OtMtzvuA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/querystring-builder": "^3.0.8",
-        "@smithy/types": "^3.6.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/querystring-builder": "^3.0.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1180,25 +1206,27 @@
       }
     },
     "node_modules/@aws-sdk/util-user-agent-browser": {
-      "version": "3.686.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.686.0.tgz",
-      "integrity": "sha512-YiQXeGYZegF1b7B2GOR61orhgv79qmI0z7+Agm3NXLO6hGfVV3kFUJbXnjtH1BgWo5hbZYW7HQ2omGb3dnb6Lg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.696.0.tgz",
+      "integrity": "sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/types": "^3.6.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
         "bowser": "^2.11.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@aws-sdk/util-user-agent-node": {
-      "version": "3.687.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.687.0.tgz",
-      "integrity": "sha512-idkP6ojSTZ4ek1pJ8wIN7r9U3KR5dn0IkJn3KQBXQ58LWjkRqLtft2vxzdsktWwhPKjjmIKl1S0kbvqLawf8XQ==",
-      "dependencies": {
-        "@aws-sdk/middleware-user-agent": "3.687.0",
-        "@aws-sdk/types": "3.686.0",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/types": "^3.6.0",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.696.0.tgz",
+      "integrity": "sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -3189,9 +3217,9 @@
       }
     },
     "node_modules/@google-cloud/compute": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/@google-cloud/compute/-/compute-4.7.0.tgz",
-      "integrity": "sha512-1UExR08o2XXKdOV8FIK6kcrNb65KVAnv045huJQV6OBiJ+uxubBWm4XxbPaWcT3TvvKGyYSMHG1Qx9/IiwpI1w==",
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/@google-cloud/compute/-/compute-4.8.0.tgz",
+      "integrity": "sha512-IRksfwU9xggPZ6GIKJLa3BSvqL7iHXjkkIvwptg1hXuedSuTpDZlyfhWVTgcNfetAMPmpW/1XXOtFsImvraWUQ==",
       "dependencies": {
         "google-gax": "^4.0.3"
       },
@@ -3200,10 +3228,9 @@
       }
     },
     "node_modules/@google-cloud/container": {
-      "version": "5.18.0",
-      "resolved": "https://registry.npmjs.org/@google-cloud/container/-/container-5.18.0.tgz",
-      "integrity": "sha512-3xDVQ0XKdlf8yJH2uCVqngHUbSAXxnvZthbZ7/N9VV1DFvkWXruIKi3yEtQPro65hU7gXqjw+1fyhAp8TfYVPw==",
-      "license": "Apache-2.0",
+      "version": "5.19.0",
+      "resolved": "https://registry.npmjs.org/@google-cloud/container/-/container-5.19.0.tgz",
+      "integrity": "sha512-1gPAZbID65XVpQhi7nmE8BednUuxomsphc6wrkzjkq3AQqMKhnqj8Uhn4hfJgT26DSQ5IPPS9PVECS2HHV13EA==",
       "dependencies": {
         "google-gax": "^4.0.3"
       },
@@ -3323,49 +3350,6 @@
         "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
       }
     },
-    "node_modules/@graphql-codegen/client-preset/node_modules/@graphql-codegen/typescript": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.1.tgz",
-      "integrity": "sha512-+o5LOT71K9hdO4lDVnRGkkET5RdlKvxlQGug8dZgRGrhE2/xoPBsKfLhg9AoJGYMauNZxKj3blABQxHOKEku6Q==",
-      "dev": true,
-      "dependencies": {
-        "@graphql-codegen/plugin-helpers": "^5.1.0",
-        "@graphql-codegen/schema-ast": "^4.0.2",
-        "@graphql-codegen/visitor-plugin-common": "5.5.0",
-        "auto-bind": "~4.0.0",
-        "tslib": "~2.6.0"
-      },
-      "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
-      }
-    },
-    "node_modules/@graphql-codegen/client-preset/node_modules/@graphql-codegen/visitor-plugin-common": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.5.0.tgz",
-      "integrity": "sha512-FSkxe/o4qKbpK+ipIT/jxZLYH0+3+XdIrJWsKlCW9wwJMF9mEJLJtzZNcxHSjz7+Eny6SUElAT2dqZ5XByxkog==",
-      "dev": true,
-      "dependencies": {
-        "@graphql-codegen/plugin-helpers": "^5.1.0",
-        "@graphql-tools/optimize": "^2.0.0",
-        "@graphql-tools/relay-operation-optimizer": "^7.0.0",
-        "@graphql-tools/utils": "^10.0.0",
-        "auto-bind": "~4.0.0",
-        "change-case-all": "1.0.15",
-        "dependency-graph": "^0.11.0",
-        "graphql-tag": "^2.11.0",
-        "parse-filepath": "^1.0.2",
-        "tslib": "~2.6.0"
-      },
-      "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
-      }
-    },
     "node_modules/@graphql-codegen/core": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.2.tgz",
@@ -3400,30 +3384,6 @@
         "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
       }
     },
-    "node_modules/@graphql-codegen/gql-tag-operations/node_modules/@graphql-codegen/visitor-plugin-common": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.5.0.tgz",
-      "integrity": "sha512-FSkxe/o4qKbpK+ipIT/jxZLYH0+3+XdIrJWsKlCW9wwJMF9mEJLJtzZNcxHSjz7+Eny6SUElAT2dqZ5XByxkog==",
-      "dev": true,
-      "dependencies": {
-        "@graphql-codegen/plugin-helpers": "^5.1.0",
-        "@graphql-tools/optimize": "^2.0.0",
-        "@graphql-tools/relay-operation-optimizer": "^7.0.0",
-        "@graphql-tools/utils": "^10.0.0",
-        "auto-bind": "~4.0.0",
-        "change-case-all": "1.0.15",
-        "dependency-graph": "^0.11.0",
-        "graphql-tag": "^2.11.0",
-        "parse-filepath": "^1.0.2",
-        "tslib": "~2.6.0"
-      },
-      "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
-      }
-    },
     "node_modules/@graphql-codegen/plugin-helpers": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.0.tgz",
@@ -3477,30 +3437,6 @@
         "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
       }
     },
-    "node_modules/@graphql-codegen/typed-document-node/node_modules/@graphql-codegen/visitor-plugin-common": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.5.0.tgz",
-      "integrity": "sha512-FSkxe/o4qKbpK+ipIT/jxZLYH0+3+XdIrJWsKlCW9wwJMF9mEJLJtzZNcxHSjz7+Eny6SUElAT2dqZ5XByxkog==",
-      "dev": true,
-      "dependencies": {
-        "@graphql-codegen/plugin-helpers": "^5.1.0",
-        "@graphql-tools/optimize": "^2.0.0",
-        "@graphql-tools/relay-operation-optimizer": "^7.0.0",
-        "@graphql-tools/utils": "^10.0.0",
-        "auto-bind": "~4.0.0",
-        "change-case-all": "1.0.15",
-        "dependency-graph": "^0.11.0",
-        "graphql-tag": "^2.11.0",
-        "parse-filepath": "^1.0.2",
-        "tslib": "~2.6.0"
-      },
-      "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
-      }
-    },
     "node_modules/@graphql-codegen/typescript": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.1.tgz",
@@ -3539,49 +3475,6 @@
         "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
       }
     },
-    "node_modules/@graphql-codegen/typescript-operations/node_modules/@graphql-codegen/typescript": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.1.tgz",
-      "integrity": "sha512-+o5LOT71K9hdO4lDVnRGkkET5RdlKvxlQGug8dZgRGrhE2/xoPBsKfLhg9AoJGYMauNZxKj3blABQxHOKEku6Q==",
-      "dev": true,
-      "dependencies": {
-        "@graphql-codegen/plugin-helpers": "^5.1.0",
-        "@graphql-codegen/schema-ast": "^4.0.2",
-        "@graphql-codegen/visitor-plugin-common": "5.5.0",
-        "auto-bind": "~4.0.0",
-        "tslib": "~2.6.0"
-      },
-      "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
-      }
-    },
-    "node_modules/@graphql-codegen/typescript-operations/node_modules/@graphql-codegen/visitor-plugin-common": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.5.0.tgz",
-      "integrity": "sha512-FSkxe/o4qKbpK+ipIT/jxZLYH0+3+XdIrJWsKlCW9wwJMF9mEJLJtzZNcxHSjz7+Eny6SUElAT2dqZ5XByxkog==",
-      "dev": true,
-      "dependencies": {
-        "@graphql-codegen/plugin-helpers": "^5.1.0",
-        "@graphql-tools/optimize": "^2.0.0",
-        "@graphql-tools/relay-operation-optimizer": "^7.0.0",
-        "@graphql-tools/utils": "^10.0.0",
-        "auto-bind": "~4.0.0",
-        "change-case-all": "1.0.15",
-        "dependency-graph": "^0.11.0",
-        "graphql-tag": "^2.11.0",
-        "parse-filepath": "^1.0.2",
-        "tslib": "~2.6.0"
-      },
-      "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
-      }
-    },
     "node_modules/@graphql-codegen/visitor-plugin-common": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.5.0.tgz",
@@ -6124,11 +6017,12 @@
       }
     },
     "node_modules/@smithy/abort-controller": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz",
-      "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz",
+      "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6136,14 +6030,15 @@
       }
     },
     "node_modules/@smithy/config-resolver": {
-      "version": "3.0.10",
-      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.10.tgz",
-      "integrity": "sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==",
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.12.tgz",
+      "integrity": "sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/types": "^3.6.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.8",
+        "@smithy/util-middleware": "^3.0.10",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6151,16 +6046,17 @@
       }
     },
     "node_modules/@smithy/core": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.1.tgz",
-      "integrity": "sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==",
+      "version": "2.5.4",
+      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.4.tgz",
+      "integrity": "sha512-iFh2Ymn2sCziBRLPuOOxRPkuCx/2gBdXtBGuCUFLUe6bWYjKnhHyIPqGeNkLZ5Aco/5GjebRTBFiWID3sDbrKw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/types": "^3.6.0",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-body-length-browser": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-stream": "^3.2.1",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-stream": "^3.3.1",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -6169,14 +6065,15 @@
       }
     },
     "node_modules/@smithy/credential-provider-imds": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.5.tgz",
-      "integrity": "sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==",
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.7.tgz",
+      "integrity": "sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/property-provider": "^3.1.8",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/property-provider": "^3.1.10",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6184,23 +6081,25 @@
       }
     },
     "node_modules/@smithy/fetch-http-handler": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz",
-      "integrity": "sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz",
+      "integrity": "sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/querystring-builder": "^3.0.8",
-        "@smithy/types": "^3.6.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/querystring-builder": "^3.0.10",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-base64": "^3.0.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@smithy/hash-node": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.8.tgz",
-      "integrity": "sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.10.tgz",
+      "integrity": "sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-buffer-from": "^3.0.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
@@ -6210,11 +6109,12 @@
       }
     },
     "node_modules/@smithy/invalid-dependency": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.8.tgz",
-      "integrity": "sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.10.tgz",
+      "integrity": "sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       }
     },
@@ -6230,12 +6130,13 @@
       }
     },
     "node_modules/@smithy/middleware-content-length": {
-      "version": "3.0.10",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.10.tgz",
-      "integrity": "sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==",
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.12.tgz",
+      "integrity": "sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/types": "^3.6.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6243,17 +6144,18 @@
       }
     },
     "node_modules/@smithy/middleware-endpoint": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.1.tgz",
-      "integrity": "sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==",
-      "dependencies": {
-        "@smithy/core": "^2.5.1",
-        "@smithy/middleware-serde": "^3.0.8",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/shared-ini-file-loader": "^3.1.9",
-        "@smithy/types": "^3.6.0",
-        "@smithy/url-parser": "^3.0.8",
-        "@smithy/util-middleware": "^3.0.8",
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.4.tgz",
+      "integrity": "sha512-TybiW2LA3kYVd3e+lWhINVu1o26KJbBwOpADnf0L4x/35vLVica77XVR5hvV9+kWeTGeSJ3IHTcYxbRxlbwhsg==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@smithy/core": "^2.5.4",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/shared-ini-file-loader": "^3.1.11",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
+        "@smithy/util-middleware": "^3.0.10",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6261,17 +6163,18 @@
       }
     },
     "node_modules/@smithy/middleware-retry": {
-      "version": "3.0.25",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.25.tgz",
-      "integrity": "sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==",
-      "dependencies": {
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/service-error-classification": "^3.0.8",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
-        "@smithy/util-middleware": "^3.0.8",
-        "@smithy/util-retry": "^3.0.8",
+      "version": "3.0.28",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.28.tgz",
+      "integrity": "sha512-vK2eDfvIXG1U64FEUhYxoZ1JSj4XFbYWkK36iz02i3pFwWiDz1Q7jKhGTBCwx/7KqJNk4VS7d7cDLXFOvP7M+g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/service-error-classification": "^3.0.10",
+        "@smithy/smithy-client": "^3.4.5",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "tslib": "^2.6.2",
         "uuid": "^9.0.1"
       },
@@ -6292,11 +6195,12 @@
       }
     },
     "node_modules/@smithy/middleware-serde": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.8.tgz",
-      "integrity": "sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz",
+      "integrity": "sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6304,11 +6208,12 @@
       }
     },
     "node_modules/@smithy/middleware-stack": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.8.tgz",
-      "integrity": "sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz",
+      "integrity": "sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6316,13 +6221,14 @@
       }
     },
     "node_modules/@smithy/node-config-provider": {
-      "version": "3.1.9",
-      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.9.tgz",
-      "integrity": "sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==",
+      "version": "3.1.11",
+      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz",
+      "integrity": "sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/property-provider": "^3.1.8",
-        "@smithy/shared-ini-file-loader": "^3.1.9",
-        "@smithy/types": "^3.6.0",
+        "@smithy/property-provider": "^3.1.10",
+        "@smithy/shared-ini-file-loader": "^3.1.11",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6330,14 +6236,15 @@
       }
     },
     "node_modules/@smithy/node-http-handler": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz",
-      "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz",
+      "integrity": "sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/abort-controller": "^3.1.6",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/querystring-builder": "^3.0.8",
-        "@smithy/types": "^3.6.0",
+        "@smithy/abort-controller": "^3.1.8",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/querystring-builder": "^3.0.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6345,11 +6252,12 @@
       }
     },
     "node_modules/@smithy/property-provider": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.8.tgz",
-      "integrity": "sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==",
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.10.tgz",
+      "integrity": "sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6357,12 +6265,12 @@
       }
     },
     "node_modules/@smithy/protocol-http": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz",
-      "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==",
+      "version": "4.1.7",
+      "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.7.tgz",
+      "integrity": "sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6370,11 +6278,12 @@
       }
     },
     "node_modules/@smithy/querystring-builder": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.8.tgz",
-      "integrity": "sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz",
+      "integrity": "sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-uri-escape": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -6383,11 +6292,12 @@
       }
     },
     "node_modules/@smithy/querystring-parser": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.8.tgz",
-      "integrity": "sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz",
+      "integrity": "sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6395,22 +6305,24 @@
       }
     },
     "node_modules/@smithy/service-error-classification": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.8.tgz",
-      "integrity": "sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.10.tgz",
+      "integrity": "sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0"
+        "@smithy/types": "^3.7.1"
       },
       "engines": {
         "node": ">=16.0.0"
       }
     },
     "node_modules/@smithy/shared-ini-file-loader": {
-      "version": "3.1.9",
-      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.9.tgz",
-      "integrity": "sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==",
+      "version": "3.1.11",
+      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz",
+      "integrity": "sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6418,16 +6330,16 @@
       }
     },
     "node_modules/@smithy/signature-v4": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz",
-      "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.3.tgz",
+      "integrity": "sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@smithy/is-array-buffer": "^3.0.0",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/types": "^3.6.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-hex-encoding": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.8",
+        "@smithy/util-middleware": "^3.0.10",
         "@smithy/util-uri-escape": "^3.0.0",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
@@ -6437,16 +6349,17 @@
       }
     },
     "node_modules/@smithy/smithy-client": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.2.tgz",
-      "integrity": "sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==",
-      "dependencies": {
-        "@smithy/core": "^2.5.1",
-        "@smithy/middleware-endpoint": "^3.2.1",
-        "@smithy/middleware-stack": "^3.0.8",
-        "@smithy/protocol-http": "^4.1.5",
-        "@smithy/types": "^3.6.0",
-        "@smithy/util-stream": "^3.2.1",
+      "version": "3.4.5",
+      "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.5.tgz",
+      "integrity": "sha512-k0sybYT9zlP79sIKd1XGm4TmK0AS1nA2bzDHXx7m0nGi3RQ8dxxQUs4CPkSmQTKAo+KF9aINU3KzpGIpV7UoMw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@smithy/core": "^2.5.4",
+        "@smithy/middleware-endpoint": "^3.2.4",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-stream": "^3.3.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6454,9 +6367,9 @@
       }
     },
     "node_modules/@smithy/types": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.6.0.tgz",
-      "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==",
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz",
+      "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==",
       "license": "Apache-2.0",
       "dependencies": {
         "tslib": "^2.6.2"
@@ -6466,12 +6379,13 @@
       }
     },
     "node_modules/@smithy/url-parser": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.8.tgz",
-      "integrity": "sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.10.tgz",
+      "integrity": "sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/querystring-parser": "^3.0.8",
-        "@smithy/types": "^3.6.0",
+        "@smithy/querystring-parser": "^3.0.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       }
     },
@@ -6531,13 +6445,14 @@
       }
     },
     "node_modules/@smithy/util-defaults-mode-browser": {
-      "version": "3.0.25",
-      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.25.tgz",
-      "integrity": "sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==",
+      "version": "3.0.28",
+      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.28.tgz",
+      "integrity": "sha512-6bzwAbZpHRFVJsOztmov5PGDmJYsbNSoIEfHSJJyFLzfBGCCChiO3od9k7E/TLgrCsIifdAbB9nqbVbyE7wRUw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/property-provider": "^3.1.8",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
+        "@smithy/property-provider": "^3.1.10",
+        "@smithy/smithy-client": "^3.4.5",
+        "@smithy/types": "^3.7.1",
         "bowser": "^2.11.0",
         "tslib": "^2.6.2"
       },
@@ -6546,16 +6461,17 @@
       }
     },
     "node_modules/@smithy/util-defaults-mode-node": {
-      "version": "3.0.25",
-      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.25.tgz",
-      "integrity": "sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==",
-      "dependencies": {
-        "@smithy/config-resolver": "^3.0.10",
-        "@smithy/credential-provider-imds": "^3.2.5",
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/property-provider": "^3.1.8",
-        "@smithy/smithy-client": "^3.4.2",
-        "@smithy/types": "^3.6.0",
+      "version": "3.0.28",
+      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.28.tgz",
+      "integrity": "sha512-78ENJDorV1CjOQselGmm3+z7Yqjj5HWCbjzh0Ixuq736dh1oEnD9sAttSBNSLlpZsX8VQnmERqA2fEFlmqWn8w==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/credential-provider-imds": "^3.2.7",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/property-provider": "^3.1.10",
+        "@smithy/smithy-client": "^3.4.5",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6563,12 +6479,13 @@
       }
     },
     "node_modules/@smithy/util-endpoints": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.4.tgz",
-      "integrity": "sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==",
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.6.tgz",
+      "integrity": "sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/node-config-provider": "^3.1.9",
-        "@smithy/types": "^3.6.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6587,12 +6504,12 @@
       }
     },
     "node_modules/@smithy/util-middleware": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.8.tgz",
-      "integrity": "sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.10.tgz",
+      "integrity": "sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.6.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6600,12 +6517,13 @@
       }
     },
     "node_modules/@smithy/util-retry": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.8.tgz",
-      "integrity": "sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.10.tgz",
+      "integrity": "sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/service-error-classification": "^3.0.8",
-        "@smithy/types": "^3.6.0",
+        "@smithy/service-error-classification": "^3.0.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -6613,13 +6531,14 @@
       }
     },
     "node_modules/@smithy/util-stream": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.2.1.tgz",
-      "integrity": "sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.1.tgz",
+      "integrity": "sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/fetch-http-handler": "^4.0.0",
-        "@smithy/node-http-handler": "^3.2.5",
-        "@smithy/types": "^3.6.0",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-buffer-from": "^3.0.0",
         "@smithy/util-hex-encoding": "^3.0.0",
@@ -6654,12 +6573,13 @@
       }
     },
     "node_modules/@smithy/util-waiter": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.7.tgz",
-      "integrity": "sha512-d5yGlQtmN/z5eoTtIYgkvOw27US2Ous4VycnXatyoImIF9tzlcpnKqQ/V7qhvJmb2p6xZne1NopCLakdTnkBBQ==",
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.9.tgz",
+      "integrity": "sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/abort-controller": "^3.1.6",
-        "@smithy/types": "^3.6.0",
+        "@smithy/abort-controller": "^3.1.8",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -10531,11 +10451,12 @@
       }
     },
     "node_modules/chromedriver": {
-      "version": "130.0.4",
-      "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-130.0.4.tgz",
-      "integrity": "sha512-lpR+PWXszij1k4Ig3t338Zvll9HtCTiwoLM7n4pCCswALHxzmgwaaIFBh3rt9+5wRk9D07oFblrazrBxwaYYAQ==",
+      "version": "131.0.1",
+      "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-131.0.1.tgz",
+      "integrity": "sha512-LHRh+oaNU1WowJjAkWsviN8pTzQYJDbv/FvJyrQ7XhjKdIzVh/s3GV1iU7IjMTsxIQnBsTjx+9jWjzCWIXC7ug==",
       "dev": true,
       "hasInstallScript": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "@testim/chrome-version": "^1.1.4",
         "axios": "^1.7.4",
@@ -11119,9 +11040,9 @@
       }
     },
     "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "dependencies": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",
@@ -12367,9 +12288,9 @@
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "56.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.0.tgz",
-      "integrity": "sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==",
+      "version": "56.0.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz",
+      "integrity": "sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==",
       "dev": true,
       "dependencies": {
         "@babel/helper-validator-identifier": "^7.24.7",
@@ -14650,9 +14571,9 @@
       }
     },
     "node_modules/husky": {
-      "version": "9.1.6",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz",
-      "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==",
+      "version": "9.1.7",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
+      "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
       "dev": true,
       "bin": {
         "husky": "bin.js"
@@ -17367,9 +17288,9 @@
       "dev": true
     },
     "node_modules/npm-run-all/node_modules/cross-spawn": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "version": "6.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
+      "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
       "dev": true,
       "dependencies": {
         "nice-try": "^1.0.4",
@@ -23308,10 +23229,9 @@
       "dev": true
     },
     "node_modules/yaml": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
-      "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
-      "license": "ISC",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
+      "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
       "bin": {
         "yaml": "bin.mjs"
       },
diff --git a/package.json b/package.json
index a407eeea..0c596c33 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "runme",
-  "version": "3.10.0-edge.0",
+  "version": "3.10.1",
   "publisher": "stateful",
   "displayName": "Runme Notebooks for DevOps",
   "description": "Notebooks for DevOps written in Markdown. Runnable, configurable commands/code and embedded terminals. Integrated with cloud consoles, containers and pipelines.",
@@ -77,6 +77,15 @@
           }
         }
       },
+      "OpenTerminalOnStartup": {
+        "enabled": false,
+        "conditions": {
+          "enabledForExtensions": {
+            "stateful.platform": false,
+            "stateful.runme": true
+          }
+        }
+      },
       "NewTreeProvider": {
         "enabled": false,
         "conditions": {
@@ -1317,17 +1326,17 @@
     "@wdio/local-runner": "^8.40.6",
     "@wdio/mocha-framework": "^8.40.6",
     "@wdio/spec-reporter": "^8.40.6",
-    "chromedriver": "^130.0.4",
+    "chromedriver": "^131.0.1",
     "comment-json": "^4.2.5",
     "eslint": "^8.57.1",
     "eslint-config-prettier": "^9.0.0",
     "eslint-import-resolver-typescript": "^3.6.3",
     "eslint-plugin-import": "^2.31.0",
-    "eslint-plugin-unicorn": "^56.0.0",
+    "eslint-plugin-unicorn": "^56.0.1",
     "eslint-plugin-unused-imports": "^4.1.4",
     "expect-webdriverio": "^4.15.4",
     "fork-ts-checker-webpack-plugin": "^9.0.0",
-    "husky": "^9.1.6",
+    "husky": "^9.1.7",
     "msw": "^2.6.0",
     "npm-run-all": "^4.1.5",
     "prettier": "^3.3.3",
@@ -1347,17 +1356,17 @@
   },
   "dependencies": {
     "@apollo/client": "^3.11.10",
-    "@aws-sdk/client-ec2": "^3.687.0",
-    "@aws-sdk/client-eks": "^3.688.0",
-    "@aws-sdk/credential-providers": "^3.687.0",
+    "@aws-sdk/client-ec2": "^3.701.0",
+    "@aws-sdk/client-eks": "^3.699.0",
+    "@aws-sdk/credential-providers": "^3.699.0",
     "@buf/grpc_grpc.community_timostamm-protobuf-ts": "^2.9.4-20240904201038-e0425cfebb28.4",
     "@buf/jlewi_foyle.bufbuild_es": "^1.10.0-20241018224331-ac296bc95724.1",
     "@buf/jlewi_foyle.connectrpc_es": "^1.5.0-20241018224331-ac296bc95724.1",
     "@buf/stateful_runme.community_timostamm-protobuf-ts": "^2.9.4-20241021161352-11c142f88aee.4",
     "@connectrpc/connect": "^1.4.0",
     "@connectrpc/connect-node": "^1.6.1",
-    "@google-cloud/compute": "^4.1.0",
-    "@google-cloud/container": "^5.18.0",
+    "@google-cloud/compute": "^4.8.0",
+    "@google-cloud/container": "^5.19.0",
     "@google-cloud/run": "^1.4.0",
     "@kubernetes/client-node": "^0.22.2",
     "@protobuf-ts/grpc-transport": "^2.9.1",
@@ -1392,7 +1401,7 @@
     "ulidx": "^2.4.1",
     "uuid": "^11.0.3",
     "vscode-telemetry": "^2.0.0",
-    "yaml": "^2.6.0",
+    "yaml": "^2.6.1",
     "zod": "^3.23.8"
   }
 }
diff --git a/src/client/components/configuration/annotations.ts b/src/client/components/configuration/annotations.ts
index 82d8dfd6..914b6728 100644
--- a/src/client/components/configuration/annotations.ts
+++ b/src/client/components/configuration/annotations.ts
@@ -57,7 +57,10 @@ export class Annotations extends LitElement {
       description: 'Run cell inside terminal to allow for interactive input.',
     },
     closeTerminalOnSuccess: {
-      description: 'Hide terminal after cell successful execution.',
+      description: 'Hide terminal panel after cell successful execution.',
+    },
+    openTerminalOnError: {
+      description: 'open terminal panel after cell execution error.',
     },
     promptEnv: {
       description: 'Prompt user input for exported environment variables.',
diff --git a/src/extension/cell.ts b/src/extension/cell.ts
index d296043b..943d2ff2 100644
--- a/src/extension/cell.ts
+++ b/src/extension/cell.ts
@@ -224,7 +224,6 @@ export class NotebookCellOutputManager {
         return new NotebookCellOutput([NotebookCellOutputItem.json(json, OutputType.vercel)])
       }
 
-      case OutputType.outputItems:
       case OutputType.terminal: {
         const terminalState = this.terminalState
         if (!terminalState) {
@@ -276,24 +275,32 @@ export class NotebookCellOutputManager {
               'runme.dev/id': cellId,
             },
           )
-        } else {
-          const terminalStateBase64 = terminalState.serialize()
-          const json: CellOutputPayload<OutputType.outputItems> = {
-            type: OutputType.outputItems,
-            output: {
-              content: terminalStateBase64,
-              mime: 'text/plain',
-              id: cellId,
-            },
-          }
+        }
+      }
+
+      case OutputType.outputItems: {
+        const terminalState = this.terminalState
+        if (!terminalState) {
+          return
+        }
 
-          return new NotebookCellOutput([
-            NotebookCellOutputItem.json(json, OutputType.outputItems),
-            NotebookCellOutputItem.stdout(
-              Buffer.from(terminalStateBase64, 'base64').toString('utf-8'),
-            ),
-          ])
+        const { 'runme.dev/id': cellId } = getAnnotations(cell)
+        const terminalStateBase64 = terminalState.serialize()
+        const json: CellOutputPayload<OutputType.outputItems> = {
+          type: OutputType.outputItems,
+          output: {
+            content: terminalStateBase64,
+            mime: 'text/plain',
+            id: cellId!,
+          },
         }
+
+        return new NotebookCellOutput([
+          NotebookCellOutputItem.json(json, OutputType.outputItems),
+          NotebookCellOutputItem.stdout(
+            Buffer.from(terminalStateBase64, 'base64').toString('utf-8'),
+          ),
+        ])
       }
 
       case OutputType.github: {
@@ -631,7 +638,7 @@ export class NotebookCellOutputManager {
         const terminalOutput = this.terminalState?.outputType
 
         if (terminalOutput) {
-          this.terminalEnabled = this.hasOutputTypeUnsafe(terminalOutput)
+          this.terminalEnabled = this.hasOutputTypeUnsafe(OutputType.terminal)
         }
 
         if (!((await mutater?.()) ?? true)) {
diff --git a/src/extension/executors/runner/index.ts b/src/extension/executors/runner/index.ts
index 8143ac03..2470255c 100644
--- a/src/extension/executors/runner/index.ts
+++ b/src/extension/executors/runner/index.ts
@@ -10,7 +10,17 @@ import {
   TextDocument,
   window,
 } from 'vscode'
-import { Subject, debounceTime } from 'rxjs'
+import {
+  Observable,
+  debounceTime,
+  map,
+  filter,
+  from,
+  scan,
+  withLatestFrom,
+  Subscription,
+  takeLast,
+} from 'rxjs'
 import { RpcError } from '@protobuf-ts/runtime-rpc'
 
 import getLogger from '../../logger'
@@ -32,7 +42,7 @@ import {
 } from '../../../utils/configuration'
 import { ITerminalState } from '../../terminal/terminalState'
 import { toggleTerminal } from '../../commands'
-import { closeTerminalByEnvID } from '../task'
+import { closeTerminalByEnvID, openTerminalByEnvID } from '../task'
 import {
   getCellProgram,
   getNotebookSkipPromptEnvSetting,
@@ -86,6 +96,7 @@ export const executeRunner: IKernelRunner = async ({
     mimeType: cellMimeType,
     background,
     closeTerminalOnSuccess,
+    openTerminalOnError,
   } = getAnnotations(exec.cell)
   // enforce background tasks as singleton instances
   // to do this,
@@ -131,13 +142,24 @@ export const executeRunner: IKernelRunner = async ({
 
   let terminalState: ITerminalState | undefined
 
-  const writeToTerminalStdout = (data: string | Uint8Array) => {
-    postClientMessage(messaging, ClientMessages.terminalStdout, {
-      'runme.dev/id': cellId,
-      data,
-    })
+  let writeToTerminalStdout: (data: string | Uint8Array) => void
 
-    terminalState?.write(data)
+  if (interactive) {
+    // receives both stdout+stderr via tty
+    writeToTerminalStdout = (data: string | Uint8Array) => {
+      postClientMessage(messaging, ClientMessages.terminalStdout, {
+        'runme.dev/id': cellId,
+        data,
+      })
+
+      terminalState?.write(data)
+    }
+    program.onDidWrite(writeToTerminalStdout)
+  } else {
+    writeToTerminalStdout = (data: string | Uint8Array) => {
+      terminalState?.write(data)
+    }
+    program.onStdoutRaw(writeToTerminalStdout)
   }
 
   program.onDidErr((data) =>
@@ -209,14 +231,10 @@ export const executeRunner: IKernelRunner = async ({
     writeToTerminalStdout(`\x1B[7m * \x1B[0m ${text}`)
   })
 
-  program.onDidWrite(writeToTerminalStdout)
-
-  if (interactive) {
-    program.registerTerminalWindow('vscode')
-    await program.setActiveTerminalWindow('vscode')
-  }
+  program.registerTerminalWindow('vscode')
+  await program.setActiveTerminalWindow('vscode')
 
-  let revealNotebookTerminal = isNotebookTerminalEnabledForCell(exec.cell)
+  const revealNotebookTerminal = isNotebookTerminalEnabledForCell(exec.cell)
 
   terminalState = await kernel.registerCellTerminalState(
     exec.cell,
@@ -230,142 +248,163 @@ export const executeRunner: IKernelRunner = async ({
       await program.setActiveTerminalWindow('notebook')
     }
 
+    // allow for additional outputs, such as dagger
     const t = OutputType[execKey as keyof typeof OutputType]
     if (t) {
-      outputs.showOutput(t)
+      await outputs.showOutput(t)
     }
 
     await outputs.showTerminal()
   } else {
-    const output: Buffer[] = []
-    const outputItems$ = new Subject<NotebookCellOutputItem>()
-
-    // adapted from `shellExecutor` in `shell.ts`
-    const _handleOutput = async (data: Uint8Array) => {
-      mimeType = mimeType || (await program.mimeType) || CELL_MIME_TYPE_DEFAULT
-      output.push(Buffer.from(data))
-      if (MIME_TYPES_WITH_CUSTOM_RENDERERS.includes(mimeType)) {
-        outputItems$.complete()
-        return
-      }
-
-      const item = new NotebookCellOutputItem(Buffer.concat(output), mimeType)
-      outputItems$.next(item)
-    }
+    const mime = program.mimeType.then((mime) => mimeType || mime || CELL_MIME_TYPE_DEFAULT)
+    const mime$ = from(mime)
+    const raw$ = new Observable<Uint8Array>((observer) => {
+      program.onStdoutRaw((data) => observer.next(data))
+      program.onDidClose(() => observer.complete())
+    }).pipe(
+      scan((acc, data) => {
+        const combined = new Uint8Array(acc.length + data.length)
+        combined.set(acc)
+        combined.set(data, acc.length)
+        return combined
+      }, new Uint8Array()),
+    )
 
     // debounce by 0.5s because human preception likely isn't as fast
-    const sub = outputItems$.pipe(debounceTime(500)).subscribe({
-      next: (item) => outputs.replaceOutputs([new NotebookCellOutput([item])]),
-      complete: async () => {
-        const isCustomRenderer = MIME_TYPES_WITH_CUSTOM_RENDERERS.includes(mimeType || '')
-        return isCustomRenderer && (await outputs.showTerminal())
-      },
-    })
-    context.subscriptions.push({ dispose: () => sub.unsubscribe() })
+    let item$ = raw$.pipe(debounceTime(500)).pipe(
+      withLatestFrom(mime$),
+      map(([item, mime]) => new NotebookCellOutputItem(Buffer.from(item), mime)),
+    )
+
+    const isCustomMime = (mime: string) => {
+      return MIME_TYPES_WITH_CUSTOM_RENDERERS.includes(mime)
+    }
 
-    program.onStdoutRaw(_handleOutput)
-    program.onStderrRaw(_handleOutput)
-    program.onDidClose(() => outputItems$.complete())
+    let subs: Subscription[] = [
+      // render vanilla mime types, eg PNG/SVG
+      item$
+        .pipe(
+          filter((item) => {
+            return !isCustomMime(item.mime)
+          }),
+        )
+        .subscribe({
+          next: (item) => outputs.replaceOutputs([new NotebookCellOutput([item])]),
+        }),
+      // render custom mime type for text/plain to show copy buttons etc
+      item$
+        .pipe(
+          filter((item) => {
+            return isCustomMime(item.mime)
+          }),
+          takeLast(1),
+        )
+        .subscribe({
+          next: () => outputs.showOutput(OutputType.outputItems),
+        }),
+    ]
+
+    context.subscriptions.push({ dispose: () => subs.forEach((s) => s.unsubscribe()) })
   }
 
-  if (!interactive) {
-    exec.token.onCancellationRequested(() => {
-      program.close()
-    })
-  } else {
-    await outputs.replaceOutputs([])
-
-    const cellText = runningCell.getText()
-    const RUNME_ID = getCellRunmeId(exec.cell)
-    const taskExecution = new Task(
-      { type: 'shell', name: `Runme Task (${RUNME_ID})` },
-      TaskScope.Workspace,
-      (cellText.length > LABEL_LIMIT ? `${cellText.slice(0, LABEL_LIMIT)}...` : cellText) +
-        ` (RUNME_ID: ${RUNME_ID})`,
-      'exec',
-      new CustomExecution(async () => program),
-    )
+  const cellText = runningCell.getText()
+  const RUNME_ID = getCellRunmeId(exec.cell)
+  const taskExecution = new Task(
+    { type: 'shell', name: `Runme Task (${RUNME_ID})` },
+    TaskScope.Workspace,
+    (cellText.length > LABEL_LIMIT ? `${cellText.slice(0, LABEL_LIMIT)}...` : cellText) +
+      ` (RUNME_ID: ${RUNME_ID})`,
+    'exec',
+    new CustomExecution(async () => program),
+  )
 
-    taskExecution.isBackground = background
-    taskExecution.presentationOptions = {
-      focus: revealNotebookTerminal ? false : true,
-      reveal: revealNotebookTerminal
+  taskExecution.isBackground = background
+  taskExecution.presentationOptions = {
+    focus: false,
+    reveal: interactive
+      ? TaskRevealKind.Never
+      : background
         ? TaskRevealKind.Never
-        : background
-          ? TaskRevealKind.Never
-          : TaskRevealKind.Always,
-      panel: background ? TaskPanelKind.Dedicated : TaskPanelKind.Shared,
-    }
+        : TaskRevealKind.Silent,
+    panel: background ? TaskPanelKind.Dedicated : TaskPanelKind.Shared,
+  }
 
-    const execution = await tasks.executeTask(taskExecution)
+  const execution = await tasks.executeTask(taskExecution)
 
-    context.subscriptions.push({
-      dispose: () => execution.terminate(),
-    })
+  context.subscriptions.push({
+    dispose: () => execution.terminate(),
+  })
 
-    exec.token.onCancellationRequested(() => {
-      try {
-        // runs `program.close()` implicitly
-        execution.terminate()
-      } catch (err: any) {
-        log.error(`Failed to terminate task: ${(err as Error).message}`)
-        throw new Error(err)
-      }
-    })
+  exec.token.onCancellationRequested(() => {
+    try {
+      // runs `program.close()` implicitly
+      execution.terminate()
+    } catch (err: any) {
+      log.error(`Failed to terminate task: ${(err as Error).message}`)
+      throw new Error(err)
+    }
+  })
 
-    tasks.onDidStartTaskProcess((e) => {
-      const taskId = (e.execution as any)['_id']
-      const executionId = (execution as any)['_id']
+  tasks.onDidStartTaskProcess((e) => {
+    const taskId = (e.execution as any)['_id']
+    const executionId = (execution as any)['_id']
 
-      if (taskId !== executionId) {
-        return
-      }
+    if (taskId !== executionId) {
+      return
+    }
 
-      const terminal = getTerminalByCell(exec.cell)
-      if (!terminal) {
-        return
-      }
+    const terminal = getTerminalByCell(exec.cell)
+    if (!terminal) {
+      return
+    }
 
-      terminal.runnerSession = program
-      kernel.registerTerminal(terminal, executionId, RUNME_ID)
+    terminal.runnerSession = program
+    kernel.registerTerminal(terminal, executionId, RUNME_ID)
 
-      // proxy pid value
-      Object.defineProperty(terminal, 'processId', {
-        get: function () {
-          return program.pid
-        },
-      })
+    // proxy pid value
+    Object.defineProperty(terminal, 'processId', {
+      get: function () {
+        return program.pid
+      },
     })
+  })
 
-    tasks.onDidEndTaskProcess((e) => {
-      const taskId = (e.execution as any)['_id']
-      const executionId = (execution as any)['_id']
+  tasks.onDidEndTaskProcess((e) => {
+    const taskId = (e.execution as any)['_id']
+    const executionId = (execution as any)['_id']
 
+    /**
+     * ignore if
+     */
+    if (
       /**
-       * ignore if
+       * VS Code is running a different task
        */
-      if (
-        /**
-         * VS Code is running a different task
-         */
-        taskId !== executionId ||
-        /**
-         * we don't have an exit code
-         */
-        typeof e.exitCode === 'undefined'
-      ) {
-        return
-      }
-
+      taskId !== executionId ||
       /**
-       * only close terminal if execution passed and desired by user
+       * we don't have an exit code
        */
-      const closeIt = getCloseTerminalOnSuccess() && closeTerminalOnSuccess
-      if (e.exitCode === 0 && closeIt && !background) {
-        closeTerminalByEnvID(RUNME_ID)
-      }
-    })
-  }
+      typeof e.exitCode === 'undefined'
+    ) {
+      return
+    }
+
+    /**
+     * only close terminal if execution passed and desired by user
+     */
+    const closeIt = interactive && getCloseTerminalOnSuccess() && closeTerminalOnSuccess
+    if (e.exitCode === 0 && closeIt && !background) {
+      closeTerminalByEnvID(RUNME_ID)
+    }
+
+    /**
+     * open non-interactive terminal if execution exited with non-zero
+     */
+    const openIt = !interactive && openTerminalOnError
+    if (e.exitCode !== 0 && openIt && !background) {
+      openTerminalByEnvID(RUNME_ID)
+    }
+  })
 
   if (program.numTerminalWindows === 0) {
     await program.run()
@@ -618,10 +657,12 @@ export function prepareCommandSeq(cellText: string, languageId: string): string[
     return cellText ? cellText.split('\n') : []
   }
 
-  return cellText.split('\n').map((l) => {
+  const isHeredoc = cellText.indexOf('<<') !== -1
+
+  return cellText.split('\n').map((l: string) => {
     const stripped = l.trimStart()
 
-    if (stripped.startsWith('$')) {
+    if (stripped.startsWith('$') && !isHeredoc) {
       return stripped.slice(1).trimStart()
     }
 
diff --git a/src/extension/executors/task.ts b/src/extension/executors/task.ts
index 12cd394c..ab3d501e 100644
--- a/src/extension/executors/task.ts
+++ b/src/extension/executors/task.ts
@@ -44,6 +44,13 @@ export function closeTerminalByEnvID(id: string, kill?: boolean) {
   }
 }
 
+export function openTerminalByEnvID(id: string) {
+  const terminal = window.terminals.find((t) => getTerminalRunmeId(t) === id)
+  if (terminal) {
+    terminal.show()
+  }
+}
+
 export const taskExecutor: IKernelExecutor = async (executor) => {
   const { context, exec, doc } = executor
   const { interactive: isInteractive, promptEnv } = getAnnotations(exec.cell)
diff --git a/src/extension/extension.ts b/src/extension/extension.ts
index 95305a49..4e2e4385 100644
--- a/src/extension/extension.ts
+++ b/src/extension/extension.ts
@@ -556,6 +556,9 @@ export class RunmeExtension {
     // only ever enabled in hosted playground
     if (features.isOnInContextState(FeatureName.HostedPlayground)) {
       await features.addTrustedDomains()
+    }
+
+    if (features.isOnInContextState(FeatureName.OpenTerminalOnStartup)) {
       await features.autoOpenTerminal()
     }
   }
diff --git a/src/extension/features/autoOpenTerminal.ts b/src/extension/features/autoOpenTerminal.ts
index c78746af..eac0bea3 100644
--- a/src/extension/features/autoOpenTerminal.ts
+++ b/src/extension/features/autoOpenTerminal.ts
@@ -6,12 +6,12 @@ import ContextState from '../contextState'
 import { isOnInContextState } from '.'
 
 export async function autoOpenTerminal() {
-  if (!isOnInContextState(FeatureName.HostedPlayground)) {
+  if (!isOnInContextState(FeatureName.OpenTerminalOnStartup)) {
     return
   }
 
-  if (!ContextState.getKey<boolean>(`${FeatureName.HostedPlayground}.autoOpenTerminal`)) {
+  if (!ContextState.getKey<boolean>(`${FeatureName.OpenTerminalOnStartup}.autoOpenTerminal`)) {
     await commands.executeCommand('workbench.action.terminal.new')
-    await ContextState.addKey(`${FeatureName.HostedPlayground}.autoOpenTerminal`, true)
+    await ContextState.addKey(`${FeatureName.OpenTerminalOnStartup}.autoOpenTerminal`, true)
   }
 }
diff --git a/src/extension/provider/background.ts b/src/extension/provider/background.ts
index cc73d299..ed5a32f0 100644
--- a/src/extension/provider/background.ts
+++ b/src/extension/provider/background.ts
@@ -43,6 +43,15 @@ export class ToggleTerminalProvider
     )
     item.command = 'runme.toggleTerminal'
 
+    const { interactive } = getAnnotations(cell)
+    if (!interactive) {
+      const terminal = getTerminalByCell(cell)
+      if (!terminal) {
+        return undefined
+      }
+      item.command = 'runme.openIntegratedTerminal'
+    }
+
     return item
   }
 
diff --git a/src/extension/runner/index.ts b/src/extension/runner/index.ts
index 70d7051f..0ace38e4 100644
--- a/src/extension/runner/index.ts
+++ b/src/extension/runner/index.ts
@@ -143,12 +143,12 @@ export interface IRunnerProgramSession extends IRunnerChild, Pseudoterminal {
 
   /**
    * Implementers should **still call `onDidWrite`** to stay compatible with
-   * VSCode pseudoterminal interface
+   * VS Code pseudoterminal interface
    */
   readonly onStdoutRaw: Event<Uint8Array>
   /**
    * Implementers should **still call `onDidErr`** to stay compatible with
-   * VSCode pseudoterminal interface
+   * VS Code pseudoterminal interface
    */
   readonly onStderrRaw: Event<Uint8Array>
 
@@ -432,6 +432,11 @@ export class GrpcRunnerProgramSession implements IRunnerProgramSession {
         // TODO: web compat
         const stderr = Buffer.from(data).toString('utf-8')
         this._onDidErr.fire(stderr)
+
+        // onDidErr is **not** part of VS Code's PTY interface
+        // for non-interactive we deliberately write stderr to the PTY
+        const yellowStderr = `\x1b[33m${stderr}\x1b[0m`
+        this._onDidWrite.fire(yellowStderr)
       }),
     )
 
@@ -660,7 +665,7 @@ export class GrpcRunnerProgramSession implements IRunnerProgramSession {
   /**
    * Manually closed by the user
    *
-   * Implemented for compatibility with VSCode's `Pseudoterminal` interface;
+   * Implemented for compatibility with VS Code's `Pseudoterminal` interface;
    * please use `_close` internally
    */
   close() {
@@ -700,7 +705,7 @@ export class GrpcRunnerProgramSession implements IRunnerProgramSession {
     //
     // if(terminalWindow === 'vscode' && this.initialized) {
     //   if (terminalWindowState.hasSetDimensions) {
-    //     // VSCode terminal window calls `setDimensions` only when focused - this
+    //     // VS Code terminal window calls `setDimensions` only when focused - this
     //     // can be conveniently used to set the active window to the terminal
     //     this._setActiveTerminalWindow(terminalWindow)
     //   } else {
diff --git a/src/schema.ts b/src/schema.ts
index 83b28b1e..2dfb8748 100644
--- a/src/schema.ts
+++ b/src/schema.ts
@@ -54,6 +54,7 @@ export const AnnotationSchema = {
   background: boolify(false),
   interactive: boolify(true),
   closeTerminalOnSuccess: boolify(true),
+  openTerminalOnError: boolify(true),
   promptEnv: z.preprocess((subject) => {
     if (typeof subject === 'string') {
       subject = cleanAnnotation(subject, ',')
@@ -120,6 +121,7 @@ export const SafeCellAnnotationsSchema = z.object({
   background: falseyBoolean(false),
   interactive: falseyBoolean(true),
   closeTerminalOnSuccess: falseyBoolean(true),
+  openTerminalOnError: falseyBoolean(true),
 })
 
 export const SafeNotebookAnnotationsSchema = z.object({
diff --git a/src/types.ts b/src/types.ts
index fc656028..bbb04b46 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -96,6 +96,7 @@ export namespace Serializer {
     background?: string
     interactive?: string
     closeTerminalOnSuccess?: string
+    openTerminalOnError?: string
     mimeType?: string
     promptEnv?: string
     category?: string
@@ -773,6 +774,7 @@ export enum FeatureName {
   RequireStatefulAuth = 'RequireStatefulAuth',
   CopySelectionToClipboard = 'CopySelectionToClipboard',
   NewTreeProvider = 'NewTreeProvider',
+  OpenTerminalOnStartup = 'OpenTerminalOnStartup',
   HostedPlayground = 'HostedPlayground',
   RecommendExtension = 'RecommendExtension',
 }
diff --git a/src/utils/configuration.ts b/src/utils/configuration.ts
index 7de8b1bd..0e4f5f16 100644
--- a/src/utils/configuration.ts
+++ b/src/utils/configuration.ts
@@ -299,11 +299,13 @@ const getNotebookTerminalConfigurations = (metadata: Serializer.Metadata) => {
 const isNotebookTerminalEnabledForCell = (cell: NotebookCell): boolean => {
   const { interactive, background } = getAnnotations(cell)
 
-  return interactive
-    ? background
+  if (interactive) {
+    return background
       ? isNotebookTerminalFeatureEnabled('backgroundTask')
       : isNotebookTerminalFeatureEnabled('interactive')
-    : isNotebookTerminalFeatureEnabled('nonInteractive')
+  }
+
+  return false
 }
 
 const getCloseTerminalOnSuccess = () => {


Test patch:
diff --git a/tests/extension/executors/runner.test.ts b/tests/extension/executors/runner.test.ts
index 23f121c5..2d6c304d 100644
--- a/tests/extension/executors/runner.test.ts
+++ b/tests/extension/executors/runner.test.ts
@@ -282,6 +282,14 @@ suite('prepareCmdSeq', () => {
       'echo 4',
     ])
   })
+
+  test('should not remove leading dollar signs from heredoc', () => {
+    const heredoc = `Foo="bar"
+cat << EOF
+$Foo
+EOF`
+    expect(prepareCommandSeq(heredoc, 'sh')).toStrictEqual(heredoc.split('\n'))
+  })
 })
 
 suite('promptVariablesAsync function', () => {
diff --git a/tests/extension/provider/annotations.test.ts b/tests/extension/provider/annotations.test.ts
index 9eb0e704..6793437e 100644
--- a/tests/extension/provider/annotations.test.ts
+++ b/tests/extension/provider/annotations.test.ts
@@ -20,6 +20,7 @@ vi.mock('../../../src/extension/utils', () => ({
         background: false,
         interactive: true,
         closeTerminalOnSuccess: true,
+        openTerminalOnError: true,
         mimeType: 'text/plain',
         name: 'npm-install',
         'runme.dev/id': '01HGVC6M8Y76XAGAY6MQ06F5XS',
diff --git a/tests/extension/provider/background.test.ts b/tests/extension/provider/background.test.ts
index 1b9034dc..3582742e 100644
--- a/tests/extension/provider/background.test.ts
+++ b/tests/extension/provider/background.test.ts
@@ -32,17 +32,36 @@ describe('ShowTerminalProvider', () => {
     expect(await p.provideCellStatusBarItems({} as any)).toBe(undefined)
   })
 
-  it('show if no terminal state', async () => {
-    const kernel = {
-      getTerminalState: vi.fn().mockResolvedValue({}),
-    } as any
+  describe('show if terminal state present', () => {
+    it('show with toggleTerminal if interactive', async () => {
+      vi.mocked(getAnnotations).mockReturnValue({ interactive: true } as any)
+      const kernel = {
+        getTerminalState: vi.fn().mockResolvedValue({}),
+      } as any
+
+      const p = new ToggleTerminalProvider(kernel)
+
+      expect(await p.provideCellStatusBarItems({} as any)).toEqual({
+        alignment: 2,
+        command: 'runme.toggleTerminal',
+        label: '$(terminal) Terminal',
+      })
+    })
 
-    const p = new ToggleTerminalProvider(kernel)
+    it('show with toggleTerminal if interactive', async () => {
+      vi.mocked(getAnnotations).mockReturnValue({ interactive: false } as any)
+      vi.mocked(getTerminalByCell).mockReturnValue({} as any)
+      const kernel = {
+        getTerminalState: vi.fn().mockResolvedValue({}),
+      } as any
 
-    expect(await p.provideCellStatusBarItems({} as any)).toEqual({
-      alignment: 2,
-      command: 'runme.toggleTerminal',
-      label: '$(terminal) Terminal',
+      const p = new ToggleTerminalProvider(kernel)
+
+      expect(await p.provideCellStatusBarItems({} as any)).toEqual({
+        alignment: 2,
+        command: 'runme.openIntegratedTerminal',
+        label: '$(terminal) Terminal',
+      })
     })
   })
 })
diff --git a/tests/extension/provider/notebook.test.ts b/tests/extension/provider/notebook.test.ts
index 848788b5..55c59845 100644
--- a/tests/extension/provider/notebook.test.ts
+++ b/tests/extension/provider/notebook.test.ts
@@ -16,6 +16,7 @@ vi.mock('../../../src/extension/utils', () => ({
     background: false,
     interactive: true,
     closeTerminalOnSuccess: true,
+    openTerminalOnError: true,
     mimeType: 'text/plain',
     name: 'npm-install',
     'runme.dev/id': '01HGVC6M8Y76XAGAY6MQ06F5XS',
diff --git a/tests/extension/provider/sessionOutputs.test.ts b/tests/extension/provider/sessionOutputs.test.ts
index 4b1130ae..0dfb2efc 100644
--- a/tests/extension/provider/sessionOutputs.test.ts
+++ b/tests/extension/provider/sessionOutputs.test.ts
@@ -16,6 +16,7 @@ vi.mock('../../../src/extension/utils', () => ({
     background: false,
     interactive: true,
     closeTerminalOnSuccess: true,
+    openTerminalOnError: true,
     mimeType: 'text/plain',
     name: 'npm-install',
     'runme.dev/id': '01HGVC6M8Y76XAGAY6MQ06F5XS',
diff --git a/tests/extension/schema.test.ts b/tests/extension/schema.test.ts
index f635339c..363fb154 100644
--- a/tests/extension/schema.test.ts
+++ b/tests/extension/schema.test.ts
@@ -98,11 +98,13 @@ suite('AnnotationSchema', () => {
         background: false,
         interactive: true,
         closeTerminalOnSuccess: true,
+        openTerminalOnError: true,
       }
       const parseResult = SafeCellAnnotationsSchema.safeParse({
         background: 'invalid',
         interactive: 'invalid',
         closeTerminalOnSuccess: 'invalid',
+        openTerminalOnError: 'invalid',
       })
 
       expect(parseResult.success).toBeTruthy()
@@ -117,9 +119,17 @@ suite('AnnotationSchema', () => {
       const parseResult = SafeCellAnnotationsSchema.safeParse({})
       expect(parseResult.success).toBeTruthy()
       if (parseResult.success) {
-        const { background, closeTerminalOnSuccess, interactive, mimeType, name } = parseResult.data
+        const {
+          background,
+          closeTerminalOnSuccess,
+          openTerminalOnError,
+          interactive,
+          mimeType,
+          name,
+        } = parseResult.data
         expect(background).toBeFalsy()
         expect(closeTerminalOnSuccess).toBeTruthy()
+        expect(openTerminalOnError).toBeTruthy()
         expect(interactive).toBeTruthy()
         expect(mimeType).toBeUndefined()
         expect(name).toBe('')
@@ -133,6 +143,7 @@ suite('AnnotationSchema', () => {
         background: 'invalid',
         interactive: 'invalid',
         closeTerminalOnSuccess: 'invalid',
+        openTerminalOnError: 'invalid',
       }
       const parseResult = CellAnnotationsSchema.safeParse(input) as SafeParseError<any>
       expect(parseResult.success).toBeFalsy()
@@ -141,6 +152,7 @@ suite('AnnotationSchema', () => {
         background: ['expected a boolean value'],
         interactive: ['expected a boolean value'],
         closeTerminalOnSuccess: ['expected a boolean value'],
+        openTerminalOnError: ['expected a boolean value'],
       })
     })
 
@@ -148,9 +160,17 @@ suite('AnnotationSchema', () => {
       const parseResult = SafeCellAnnotationsSchema.safeParse({})
       expect(parseResult.success).toBeTruthy()
       if (parseResult.success) {
-        const { background, closeTerminalOnSuccess, interactive, mimeType, name } = parseResult.data
+        const {
+          background,
+          closeTerminalOnSuccess,
+          openTerminalOnError,
+          interactive,
+          mimeType,
+          name,
+        } = parseResult.data
         expect(background).toBeFalsy()
         expect(closeTerminalOnSuccess).toBeTruthy()
+        expect(openTerminalOnError).toBeTruthy()
         expect(interactive).toBeTruthy()
         expect(mimeType).toBeUndefined()
         expect(name).toBe('')
diff --git a/tests/extension/utils.test.ts b/tests/extension/utils.test.ts
index 9ae388cd..9eb896b6 100644
--- a/tests/extension/utils.test.ts
+++ b/tests/extension/utils.test.ts
@@ -339,6 +339,7 @@ suite('#getAnnotations', () => {
     expect(d).toStrictEqual(<CellAnnotations>{
       background: false,
       closeTerminalOnSuccess: true,
+      openTerminalOnError: true,
       cwd: '',
       interactive: true,
       name: 'command-123',
@@ -363,6 +364,7 @@ suite('#getAnnotations', () => {
       id: undefined,
       background: false,
       closeTerminalOnSuccess: true,
+      openTerminalOnError: true,
       cwd: '',
       interactive: true,
       name: 'echo-hello',
@@ -532,6 +534,7 @@ suite('validateAnnotations', () => {
         background: 'invalid',
         interactive: 'invalid',
         closeTerminalOnSuccess: 'invalid',
+        openTerminalOnError: 'invalid',
         promptEnv: 'invalid',
         mimeType: 'application/',
       },
@@ -539,7 +542,7 @@ suite('validateAnnotations', () => {
     }
     const result = validateAnnotations(cell)
     expect(result.hasErrors).toBe(true)
-    expect(result.errors && Object.entries(result.errors).length).toBe(4)
+    expect(result.errors && Object.entries(result.errors).length).toBe(5)
   })
 
   test('it should pass for valid annotations values', () => {
@@ -548,6 +551,7 @@ suite('validateAnnotations', () => {
         background: false,
         interactive: true,
         closeTerminalOnSuccess: true,
+        openTerminalOnError: true,
         promptEnv: false,
         mimeType: 'text/plain',
       },