diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md
index 55f07b785d..fa9df0ab4f 100644
--- a/THIRD_PARTY_LICENSES.md
+++ b/THIRD_PARTY_LICENSES.md
@@ -3,7 +3,7 @@ https://www.npmjs.com/package/generate-license-file
 
 The following npm package may be included in this product:
 
- - pdfjs-dist@4.9.155
+ - pdfjs-dist@4.10.38
 
 This package contains the following license:
 
@@ -1098,9 +1098,11 @@ Apache License
 
 The following npm packages may be included in this product:
 
+ - @grpc/grpc-js@1.12.5
+ - @grpc/proto-loader@0.7.13
  - detect-libc@2.0.3
- - docker-modem@5.0.3
- - dockerode@4.0.2
+ - docker-modem@5.0.5
+ - dockerode@4.0.3
 
 These packages each contain the following license:
 
@@ -2828,7 +2830,7 @@ The following npm packages may be included in this product:
  - @types/node-fetch@2.6.12
  - @types/node@16.9.1
  - @types/node@18.19.69
- - @types/node@22.10.4
+ - @types/node@22.10.5
  - @types/turndown@5.0.5
  - @types/uuid@9.0.8
  - @types/yauzl@2.10.3
@@ -6909,6 +6911,7 @@ THE SOFTWARE.
 
 The following npm packages may be included in this product:
 
+ - lodash.camelcase@4.3.0
  - lodash.get@4.4.2
  - lodash.includes@4.3.0
  - lodash.isinteger@4.0.4
@@ -8754,6 +8757,36 @@ SOFTWARE.
 
 -----------
 
+The following npm package may be included in this product:
+
+ - @js-sdsl/ordered-map@4.4.2
+
+This package contains the following license:
+
+MIT License
+
+Copyright (c) 2021 Zilong Yao
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+-----------
+
 The following npm package may be included in this product:
 
  - simple-xml-to-json@1.2.3
@@ -8906,7 +8939,7 @@ SOFTWARE.
 
 The following npm package may be included in this product:
 
- - fast-content-type-parse@2.0.0
+ - fast-content-type-parse@2.0.1
 
 This package contains the following license:
 
@@ -8969,7 +9002,7 @@ SOFTWARE.
 
 The following npm package may be included in this product:
 
- - @modelcontextprotocol/sdk@1.0.4
+ - @modelcontextprotocol/sdk@1.1.0
 
 This package contains the following license:
 
@@ -10410,7 +10443,7 @@ THE SOFTWARE.
 The following npm packages may be included in this product:
 
  - @octokit/auth-token@5.1.1
- - @octokit/core@6.1.2
+ - @octokit/core@6.1.3
  - @octokit/request-error@6.1.6
 
 These packages each contain the following license:
@@ -10627,6 +10660,7 @@ THE SOFTWARE.
 
 The following npm packages may be included in this product:
 
+ - uuid@10.0.0
  - uuid@8.3.2
  - uuid@9.0.1
 
diff --git a/docs/package.json b/docs/package.json
index f0695e8e76..8ea329dc06 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -22,11 +22,11 @@
   "devDependencies": {
     "@astrojs/check": "^0.9.4",
     "@astrojs/starlight": "^0.30.3",
-    "astro": "^5.1.1",
+    "astro": "^5.1.2",
     "rehype-mermaid": "^3.0.0",
     "starlight-blog": "^0.16.1",
     "starlight-links-validator": "^0.14.1",
-    "starlight-package-managers": "^0.8.1",
+    "starlight-package-managers": "^0.9.0",
     "typescript": "5.7.2",
     "zx": "^8.3.0"
   }
diff --git a/docs/yarn.lock b/docs/yarn.lock
index 0321c6565c..0d8570a362 100644
--- a/docs/yarn.lock
+++ b/docs/yarn.lock
@@ -918,61 +918,61 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz#c82f04a09ba481e13857d6f2516e072aaa51b7f4"
   integrity sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==
 
-"@shikijs/core@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.25.1.tgz#77d5af5e759c7b12abb00785a8e2ef64fe949b2f"
-  integrity sha512-0j5k3ZkLTQViOuNzPVyWGoW1zgH3kiFdUT/JOCkTm7TU74mz+dF+NID+YoiCBzHQxgsDpcGYPjKDJRcuVLSt4A==
-  dependencies:
-    "@shikijs/engine-javascript" "1.25.1"
-    "@shikijs/engine-oniguruma" "1.25.1"
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+"@shikijs/core@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.26.1.tgz#ba7399bee73148575277780c9fe4df656d582a65"
+  integrity sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==
+  dependencies:
+    "@shikijs/engine-javascript" "1.26.1"
+    "@shikijs/engine-oniguruma" "1.26.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     "@types/hast" "^3.0.4"
     hast-util-to-html "^9.0.4"
 
-"@shikijs/engine-javascript@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.25.1.tgz#ebae27e6949a9d3aa46a86b596a762933db4a2ea"
-  integrity sha512-zQ7UWKnRCfD/Q1M+XOSyjsbhpE0qv8LUnmn82HYCeOsgAHgUZGEDIQ63bbuK3kU5sQg+2CtI+dPfOqD/mjSY9w==
+"@shikijs/engine-javascript@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.26.1.tgz#0881250e4a39a52b49cb50600f41bb19e429dcdb"
+  integrity sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==
   dependencies:
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     oniguruma-to-es "0.10.0"
 
-"@shikijs/engine-oniguruma@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.25.1.tgz#537221149f47fd71f64a503203c4bd3fd037fa02"
-  integrity sha512-iKPMh3H+0USHtWfZ1irfMTH6tGmIUFSnqt3E2K8BgI1VEsqiPh0RYkG2WTwzNiM1/WHN4FzYx/nrKR7PDHiRyw==
+"@shikijs/engine-oniguruma@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.1.tgz#f9de733e2473e693b3d10bff32bb9761746c1d71"
+  integrity sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==
   dependencies:
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
 
-"@shikijs/langs@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-1.25.1.tgz#1c0b7822d41929351b31409d2932952495a4fae3"
-  integrity sha512-hdYjq9aRJplAzGe2qF51PR9IDgEoyGb4IkXvr3Ts6lEdg4Z8M/kdknKRo2EIuv3IR/aKkJXTlBQRM+wr3t20Ew==
+"@shikijs/langs@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-1.26.1.tgz#5365530e04715b21e40242eb331291712bdf7306"
+  integrity sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==
   dependencies:
-    "@shikijs/types" "1.25.1"
+    "@shikijs/types" "1.26.1"
 
-"@shikijs/themes@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-1.25.1.tgz#7b38ad054632521e883bcf44fb96181151dea5a9"
-  integrity sha512-JO0lDn4LgGqg5QKvgich5ScUmC2okK+LxM9a3iLUH7YMeI2c8UGXThuJv6sZduS7pdJbYQHPrvWq9t/V4GhpbQ==
+"@shikijs/themes@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-1.26.1.tgz#6f6ee538dc1383b8a971464c5cecda06b1a6db0d"
+  integrity sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==
   dependencies:
-    "@shikijs/types" "1.25.1"
+    "@shikijs/types" "1.26.1"
 
-"@shikijs/types@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.25.1.tgz#b080fc9e2622b0e4b2ec0ff4bc0628a37f7fc102"
-  integrity sha512-dceqFUoO95eY4tpOj3OGq8wE8EgJ4ey6Me1HQEu5UbwIYszFndEll/bjlB8Kp9wl4fx3uM7n4+y9XCYuDBmcXA==
+"@shikijs/types@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.26.1.tgz#b5ece69e21000f53d65d15ddae33d9ad9c3763ad"
+  integrity sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==
   dependencies:
-    "@shikijs/vscode-textmate" "^9.3.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     "@types/hast" "^3.0.4"
 
-"@shikijs/vscode-textmate@^9.3.1":
-  version "9.3.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-9.3.1.tgz#afda31f8f42cab70a26f3603f52eae3f1c35d2f7"
-  integrity sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==
+"@shikijs/vscode-textmate@^10.0.1":
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz#d06d45b67ac5e9b0088e3f67ebd3f25c6c3d711a"
+  integrity sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==
 
 "@types/acorn@^4.0.0":
   version "4.0.6"
@@ -1272,9 +1272,9 @@
     "@types/unist" "*"
 
 "@types/node@*", "@types/node@>=20":
-  version "22.10.4"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.4.tgz#da36bebcc4b124f3d62bfde1cd1dafd7763949c1"
-  integrity sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==
+  version "22.10.5"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.5.tgz#95af89a3fb74a2bb41ef9927f206e6472026e48b"
+  integrity sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==
   dependencies:
     undici-types "~6.20.0"
 
@@ -1495,7 +1495,7 @@ astro-remote@^0.3.3:
     marked-smartypants "^1.1.6"
     ultrahtml "^1.5.3"
 
-astro@^5.1.1:
+astro@^5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/astro/-/astro-5.1.2.tgz#6ced3ff8b04adf4602bbf28dceeddb2043deaf20"
   integrity sha512-+U5lXPEJZ6cQx0botGbPhzN6XGWRgDtXgy/RUkpTmUj18LW6pbzYo0O0k3hFWOazlI039bZ+4P2e/oSNlKzm0Q==
@@ -2706,9 +2706,9 @@ hast-util-select@^6.0.2:
     zwitch "^2.0.0"
 
 hast-util-to-estree@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz#f2afe5e869ddf0cf690c75f9fc699f3180b51b19"
-  integrity sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.1.tgz#b7f0b247d9f62127bb5db34e3a86c93d17279071"
+  integrity sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==
   dependencies:
     "@types/estree" "^1.0.0"
     "@types/estree-jsx" "^1.0.0"
@@ -2723,7 +2723,7 @@ hast-util-to-estree@^3.0.0:
     mdast-util-mdxjs-esm "^2.0.0"
     property-information "^6.0.0"
     space-separated-tokens "^2.0.0"
-    style-to-object "^0.4.0"
+    style-to-object "^1.0.0"
     unist-util-position "^5.0.0"
     zwitch "^2.0.0"
 
@@ -2852,11 +2852,6 @@ import-meta-resolve@^4.1.0:
   resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706"
   integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==
 
-inline-style-parser@0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
-  integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
-
 inline-style-parser@0.2.4:
   version "0.2.4"
   resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22"
@@ -3168,9 +3163,9 @@ mdast-util-directive@^3.0.0:
     unist-util-visit-parents "^6.0.0"
 
 mdast-util-find-and-replace@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0"
-  integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df"
+  integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==
   dependencies:
     "@types/mdast" "^4.0.0"
     escape-string-regexp "^5.0.0"
@@ -4486,17 +4481,17 @@ sharp@^0.33.3:
     "@img/sharp-win32-x64" "0.33.5"
 
 shiki@^1.22.2, shiki@^1.23.1:
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.25.1.tgz#0f3907b0f9deebadfb6a1f248804d8791522d7e3"
-  integrity sha512-/1boRvNYwRW3GLG9Y6dXdnZ/Ha+J5T/5y3hV7TGQUcDSBM185D3FCbXlz2eTGNKG2iWCbWqo+P0yhGKZ4/CUrw==
-  dependencies:
-    "@shikijs/core" "1.25.1"
-    "@shikijs/engine-javascript" "1.25.1"
-    "@shikijs/engine-oniguruma" "1.25.1"
-    "@shikijs/langs" "1.25.1"
-    "@shikijs/themes" "1.25.1"
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.26.1.tgz#eedb5f192a4d980a3e8bdd850ee390eef05cc386"
+  integrity sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==
+  dependencies:
+    "@shikijs/core" "1.26.1"
+    "@shikijs/engine-javascript" "1.26.1"
+    "@shikijs/engine-oniguruma" "1.26.1"
+    "@shikijs/langs" "1.26.1"
+    "@shikijs/themes" "1.26.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     "@types/hast" "^3.0.4"
 
 simple-swizzle@^0.2.2:
@@ -4574,10 +4569,10 @@ starlight-links-validator@^0.14.1:
     picomatch "^4.0.2"
     unist-util-visit "^5.0.0"
 
-starlight-package-managers@^0.8.1:
-  version "0.8.1"
-  resolved "https://registry.yarnpkg.com/starlight-package-managers/-/starlight-package-managers-0.8.1.tgz#62c5327481f2f3856f70e1a54ea67dd8fdeb9755"
-  integrity sha512-a+zGIOdbN7B4T/VaszuvW8585Aau4LSU8HlVCmBCJJwxkrGAUC9lRya4y0md5tOAFyW/gfhUNJZM8qqyMNTe7Q==
+starlight-package-managers@^0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/starlight-package-managers/-/starlight-package-managers-0.9.0.tgz#7c78aeb87124ced9f8918c40f72de8bf9bb1e644"
+  integrity sha512-iDChnj8hCUYH2s5hFMnpEiCYHUAuVivh2jvFgFJvUmViEEOdA24ZXrUhQhA/qg2KULCgn17F2cKWf3vhvIcl0w==
 
 stream-replace-string@^2.0.0:
   version "2.0.0"
@@ -4634,13 +4629,6 @@ strnum@^1.0.5:
   resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
   integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
 
-style-to-object@^0.4.0:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec"
-  integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==
-  dependencies:
-    inline-style-parser "0.1.1"
-
 style-to-object@^1.0.0:
   version "1.0.8"
   resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292"
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 6655205786..6a568cba50 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -53,12 +53,12 @@
         "@anthropic-ai/sdk": "^0.33.1",
         "@azure/identity": "^4.5.0",
         "@inquirer/prompts": "^7.2.1",
-        "@modelcontextprotocol/sdk": "^1.0.4",
+        "@modelcontextprotocol/sdk": "^1.1.0",
         "@octokit/plugin-paginate-rest": "^11.3.6",
         "@octokit/plugin-retry": "^7.1.2",
         "@octokit/plugin-throttling": "^9.3.2",
         "@octokit/rest": "^21.0.2",
-        "dockerode": "^4.0.2",
+        "dockerode": "^4.0.3",
         "es-toolkit": "^1.31.0",
         "gpt-tokenizer": "^2.8.1",
         "html-to-text": "^9.0.5",
@@ -95,7 +95,7 @@
         "@types/dockerode": "^3.3.32",
         "@types/fs-extra": "^11.0.4",
         "@types/memorystream": "^0.3.4",
-        "@types/node": "^22.10.2",
+        "@types/node": "^22.10.5",
         "@types/papaparse": "^5.3.15",
         "@types/prompts": "^2.4.9",
         "@types/replace-ext": "^2.0.2",
@@ -111,7 +111,7 @@
         "memorystream": "^0.3.1",
         "node-sarif-builder": "^3.2.0",
         "octokit": "^4.0.3",
-        "openai": "^4.77.0",
+        "openai": "^4.77.3",
         "pretty-bytes": "^6.1.1",
         "replace-ext": "^2.0.0",
         "ws": "^8.18.0",
diff --git a/packages/cli/src/run.ts b/packages/cli/src/run.ts
index 769288c8f9..aa261ad078 100644
--- a/packages/cli/src/run.ts
+++ b/packages/cli/src/run.ts
@@ -141,6 +141,7 @@ export async function runScriptInternal(
         TraceOptions &
         CancellationOptions & {
             cli?: boolean
+            workspaceFiles?: WorkspaceFile[]
             infoCb?: (partialResponse: { text: string }) => void
             partialCb?: (progress: ChatCompletionsProgressReport) => void
         }
@@ -148,6 +149,7 @@ export async function runScriptInternal(
     const { trace = new MarkdownTrace(), infoCb, partialCb } = options || {}
 
     let result: GenerationResult
+    const workspaceFiles = options.workspaceFiles
     const excludedFiles = options.excludedFiles
     const excludeGitIgnore = !!options.excludeGitIgnore
     const out = options.out
@@ -261,6 +263,7 @@ export async function runScriptInternal(
     if (!script) throw new Error(`script ${scriptId} not found`)
     const fragment: Fragment = {
         files: Array.from(resolvedFiles),
+        workspaceFiles,
     }
     const vars = Array.isArray(options.vars)
         ? parseOptionsVars(options.vars, process.env)
diff --git a/packages/cli/src/server.ts b/packages/cli/src/server.ts
index e83f4ebcfd..2f11bd557d 100644
--- a/packages/cli/src/server.ts
+++ b/packages/cli/src/server.ts
@@ -428,35 +428,35 @@ export async function startServer(options: {
 
     // Create an HTTP server to handle basic requests.
     const httpServer = http.createServer(async (req, res) => {
-        const { url } = req
+        const { url, method } = req
         const route = url?.replace(/\?.*$/, "")
         res.setHeader("Cache-Control", "no-store")
-        if (route === "/") {
+        if (method === "GET" && route === "/") {
             res.setHeader("Content-Type", "text/html")
             res.setHeader("Cache-Control", "no-store")
             res.statusCode = 200
             const filePath = join(__dirname, "index.html")
             const stream = createReadStream(filePath)
             stream.pipe(res)
-        } else if (route === "/built/markdown.css") {
+        } else if (method === "GET" && route === "/built/markdown.css") {
             res.setHeader("Content-Type", "text/css")
             res.statusCode = 200
             const filePath = join(__dirname, "markdown.css")
             const stream = createReadStream(filePath)
             stream.pipe(res)
-        } else if (route === "/built/web.mjs") {
+        } else if (method === "GET" && route === "/built/web.mjs") {
             res.setHeader("Content-Type", "application/javascript")
             res.statusCode = 200
             const filePath = join(__dirname, "web.mjs")
             const stream = createReadStream(filePath)
             stream.pipe(res)
-        } else if (route === "/built/web.mjs.map") {
+        } else if (method === "GET" && route === "/built/web.mjs.map") {
             res.setHeader("Content-Type", "text/json")
             res.statusCode = 200
             const filePath = join(__dirname, "web.mjs.map")
             const stream = createReadStream(filePath)
             stream.pipe(res)
-        } else if (route === "/favicon.svg") {
+        } else if (method === "GET" && route === "/favicon.svg") {
             res.setHeader("Content-Type", "image/svg+xml")
             res.statusCode = 200
             const filePath = join(__dirname, "favicon.svg")
@@ -471,12 +471,14 @@ export async function startServer(options: {
                 return
             }
             let response: ResponseStatus
-            if (route === "/api/version") response = serverVersion()
-            else if (route === "/api/scripts") {
+            if (method === "GET" && route === "/api/version")
+                response = serverVersion()
+            else if (method === "GET" && route === "/api/scripts") {
                 response = await scriptList()
-            } else if (route === "/api/env") {
+            } else if (method === "GET" && route === "/api/env") {
                 response = await serverEnv()
             }
+
             if (response === undefined) {
                 console.debug(`404: ${url}`)
                 res.statusCode = 404
diff --git a/packages/core/package.json b/packages/core/package.json
index 8f06d913c3..f5a08a33b3 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -24,11 +24,12 @@
     "@elastic/micro-jq": "^1.8.0",
     "@huggingface/jinja": "^0.3.2",
     "@huggingface/transformers": "^3.2.4",
-    "@modelcontextprotocol/sdk": "^1.0.4",
+    "@modelcontextprotocol/sdk": "^1.1.0",
     "@octokit/plugin-paginate-rest": "^11.3.6",
     "@octokit/plugin-retry": "^7.1.2",
     "@octokit/plugin-throttling": "^9.3.2",
     "@octokit/rest": "^21.0.2",
+    "@smithy/util-base64": "^3.0.0",
     "@tidyjs/tidy": "^2.5.2",
     "@types/diff": "^6.0.0",
     "@types/html-escaper": "^3.0.2",
@@ -38,7 +39,7 @@
     "@types/json-schema-generator": "^2.0.3",
     "@types/mime-types": "^2.1.4",
     "@types/mustache": "^4.2.5",
-    "@types/node": "^22.10.2",
+    "@types/node": "^22.10.5",
     "@types/object-inspect": "^1.13.0",
     "@types/semver": "^7.5.8",
     "@types/shell-quote": "^1.7.5",
@@ -60,7 +61,7 @@
     "html-to-text": "^9.0.5",
     "https-proxy-agent": "^7.0.6",
     "ignore": "^7.0.0",
-    "inflection": "^3.0.0",
+    "inflection": "^3.0.1",
     "ini": "^5.0.0",
     "jimp": "^1.6.0",
     "json-schema-generator": "^2.0.6",
@@ -75,7 +76,7 @@
     "minisearch": "^7.1.1",
     "mustache": "^4.2.0",
     "object-inspect": "^1.13.3",
-    "openai": "^4.77.0",
+    "openai": "^4.77.3",
     "p-limit": "^6.2.0",
     "parse-diff": "^0.11.1",
     "prettier": "^3.4.2",
diff --git a/packages/core/src/base64.ts b/packages/core/src/base64.ts
new file mode 100644
index 0000000000..f22be805ca
--- /dev/null
+++ b/packages/core/src/base64.ts
@@ -0,0 +1,4 @@
+import { fromBase64 as _fromBase64, toBase64 as _toBase64 } from "@smithy/util-base64";
+
+export const fromBase64 = _fromBase64;
+export const toBase64 = _toBase64;
\ No newline at end of file
diff --git a/packages/core/src/binary.ts b/packages/core/src/binary.ts
new file mode 100644
index 0000000000..387fbbe07e
--- /dev/null
+++ b/packages/core/src/binary.ts
@@ -0,0 +1,47 @@
+import { DOCX_MIME_TYPE, PDF_MIME_TYPE, XLSX_MIME_TYPE } from "./constants"
+
+/**
+ * Determines if a given MIME type is binary.
+ * Checks against common and additional specified binary types.
+ * @param mimeType - The MIME type to check.
+ * @returns boolean - True if the MIME type is binary, otherwise false.
+ */
+export function isBinaryMimeType(mimeType: string) {
+    return (
+        /^(image|audio|video)\//.test(mimeType) || // Common binary types
+        BINARY_MIME_TYPES.includes(mimeType) // Additional specified binary types
+    )
+}
+
+// List of known binary MIME types
+const BINARY_MIME_TYPES = [
+    // Documents
+    "application/pdf",
+    "application/msword",
+    "application/vnd.ms-excel",
+    "application/vnd.ms-powerpoint",
+    "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .docx
+    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xlsx
+    "application/vnd.openxmlformats-officedocument.presentationml.presentation", // .pptx
+
+    // Archives
+    "application/zip",
+    "application/x-rar-compressed",
+    "application/x-7z-compressed",
+    "application/x-tar",
+    "application/x-bzip",
+    "application/x-bzip2",
+    "application/x-gzip",
+
+    // Executables and binaries
+    "application/octet-stream", // General binary type (often default for unknown binary files)
+    "application/x-msdownload", // Executables
+    "application/x-shockwave-flash", // SWF
+    "application/java-archive", // JAR (Java)
+
+    // Others
+    "application/vnd.google-earth.kml+xml", // KML (though XML based, often treated as binary in context of HTTP)
+    "application/vnd.android.package-archive", // APK (Android package)
+    "application/x-iso9660-image", // ISO images
+    "application/vnd.apple.installer+xml", // Apple Installer Package (though XML, often handled as binary)
+]
\ No newline at end of file
diff --git a/packages/core/src/file.ts b/packages/core/src/file.ts
index 5ddd110280..9c4d04bad1 100644
--- a/packages/core/src/file.ts
+++ b/packages/core/src/file.ts
@@ -7,10 +7,10 @@
 import { DOCXTryParse } from "./docx"
 import { readText } from "./fs"
 import { lookupMime } from "./mime"
-import { isBinaryMimeType } from "./parser"
+import { isBinaryMimeType } from "./binary"
 import { createFetch } from "./fetch"
 import { fileTypeFromBuffer } from "file-type"
-import { toBase64 } from "./util"
+import { fromBase64, toBase64 } from "./base64"
 import { host } from "./host"
 import { TraceOptions } from "./trace"
 import { parsePdf } from "./pdf"
@@ -18,9 +18,12 @@ import { XLSXParse } from "./xlsx"
 import { CSVToMarkdown, CSVTryParse } from "./csv"
 import {
     CSV_REGEX,
+    DOCX_MIME_TYPE,
     DOCX_REGEX,
     HTTPS_REGEX,
+    PDF_MIME_TYPE,
     PDF_REGEX,
+    XLSX_MIME_TYPE,
     XLSX_REGEX,
 } from "./constants"
 import { UrlAdapter, defaultUrlAdapters } from "./urlAdapters"
@@ -37,8 +40,23 @@ export async function resolveFileContent(
     options?: TraceOptions
 ) {
     const { trace } = options || {}
-    const { filename } = file
 
+    // decode known files
+    if (file.encoding === "base64") {
+        const bytes = fromBase64(file.content)
+        if (file.type === PDF_MIME_TYPE) {
+            const { content } = await parsePdf(bytes, options)
+            delete file.encoding
+            file.content = content
+        } else if (file.type === XLSX_MIME_TYPE) {
+            const sheets = await XLSXParse(bytes)
+            delete file.encoding
+            file.content = JSON.stringify(sheets, null, 2)
+        }
+        return file
+    }
+
+    const { filename } = file
     // If file content is already available or filename is missing, return the file as is.
     if (file.content) return file
     if (!filename) return file
@@ -68,32 +86,43 @@ export async function resolveFileContent(
         trace?.itemValue(`status`, `${resp.status}, ${resp.statusText}`)
 
         // Set file content based on response and adapter type
-        if (resp.ok)
+        if (resp.ok) {
+            file.type = resp.headers.get("Content-Type")
             file.content =
                 adapter?.contentType === "application/json"
                     ? adapter.adapter(await resp.json())
                     : await resp.text()
+        }
     }
     // Handle PDF files
     else if (PDF_REGEX.test(filename)) {
         const { content } = await parsePdf(filename, options)
+        file.type = PDF_MIME_TYPE
         file.content = content
     }
     // Handle DOCX files
     else if (DOCX_REGEX.test(filename)) {
+        file.type = DOCX_MIME_TYPE
         file.content = await DOCXTryParse(filename, options)
     }
     // Handle XLSX files
     else if (XLSX_REGEX.test(filename)) {
         const bytes = await host.readFile(filename)
         const sheets = await XLSXParse(bytes)
+        file.type = XLSX_MIME_TYPE
         file.content = JSON.stringify(sheets, null, 2)
     }
     // Handle other file types
     else {
-        const mime = lookupMime(filename)
+        const mime = file.type || lookupMime(filename)
         const isBinary = isBinaryMimeType(mime)
+        file.type = mime
         if (!isBinary) file.content = await readText(filename)
+        else {
+            const bytes: Uint8Array = await host.readFile(filename)
+            file.encoding = "base64"
+            file.content = toBase64(bytes)
+        }
     }
 
     return file
diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts
index cd53f3f57e..13f0ff27c9 100644
--- a/packages/core/src/generation.ts
+++ b/packages/core/src/generation.ts
@@ -11,6 +11,7 @@ import { GenerationStats } from "./usage"
 // Represents a code fragment with associated files
 export interface Fragment {
     files: string[] // Array of file paths or names
+    workspaceFiles?: WorkspaceFile[] // Array of workspace files
 }
 
 // Options for configuring the generation process, extending multiple other options
diff --git a/packages/core/src/parser.ts b/packages/core/src/parser.ts
index 2f087b8c3d..e549c5418f 100644
--- a/packages/core/src/parser.ts
+++ b/packages/core/src/parser.ts
@@ -22,52 +22,6 @@ export function stringToPos(str: string): CharPosition {
     return [str.replace(/[^\n]/g, "").length, str.replace(/[^]*\n/, "").length]
 }
 
-/**
- * Determines if a given MIME type is binary.
- * Checks against common and additional specified binary types.
- * @param mimeType - The MIME type to check.
- * @returns boolean - True if the MIME type is binary, otherwise false.
- */
-export function isBinaryMimeType(mimeType: string) {
-    return (
-        /^(image|audio|video)\//.test(mimeType) || // Common binary types
-        BINARY_MIME_TYPES.includes(mimeType) // Additional specified binary types
-    )
-}
-
-// List of known binary MIME types
-const BINARY_MIME_TYPES = [
-    // Documents
-    PDF_MIME_TYPE,
-    "application/msword",
-    "application/vnd.ms-excel",
-    "application/vnd.ms-powerpoint",
-    DOCX_MIME_TYPE, // .docx
-    XLSX_MIME_TYPE, // .xlsx
-    "application/vnd.openxmlformats-officedocument.presentationml.presentation", // .pptx
-
-    // Archives
-    "application/zip",
-    "application/x-rar-compressed",
-    "application/x-7z-compressed",
-    "application/x-tar",
-    "application/x-bzip",
-    "application/x-bzip2",
-    "application/x-gzip",
-
-    // Executables and binaries
-    "application/octet-stream", // General binary type (often default for unknown binary files)
-    "application/x-msdownload", // Executables
-    "application/x-shockwave-flash", // SWF
-    "application/java-archive", // JAR (Java)
-
-    // Others
-    "application/vnd.google-earth.kml+xml", // KML (though XML based, often treated as binary in context of HTTP)
-    "application/vnd.android.package-archive", // APK (Android package)
-    "application/x-iso9660-image", // ISO images
-    "application/vnd.apple.installer+xml", // Apple Installer Package (though XML, often handled as binary)
-]
-
 /**
  * Parses a project based on provided script files.
  * Initializes a project, reads scripts, and updates with parsed templates.
diff --git a/packages/core/src/pdf.ts b/packages/core/src/pdf.ts
index 5641083f11..9e30e6fe49 100644
--- a/packages/core/src/pdf.ts
+++ b/packages/core/src/pdf.ts
@@ -222,11 +222,17 @@ function PDFPagesToString(pages: PDFPage[]) {
  * @returns A promise resolving to the parsed pages and concatenated content
  */
 export async function parsePdf(
-    filename: string,
+    filenameOrBuffer: string | Uint8Array,
     options?: ParsePDFOptions & TraceOptions
 ): Promise<{ pages: PDFPage[]; content: string }> {
     const { filter } = options || {}
-    let { pages, ok } = await PDFTryParse(filename, undefined, options)
+    const filename =
+        typeof filenameOrBuffer === "string" ? filenameOrBuffer : undefined
+    const bytes =
+        typeof filenameOrBuffer === "string"
+            ? undefined
+            : (filenameOrBuffer as Uint8Array)
+    let { pages, ok } = await PDFTryParse(filename, bytes, options)
     if (!ok) return { pages: [], content: "" }
 
     // Apply filter if provided
diff --git a/packages/core/src/promptrunner.ts b/packages/core/src/promptrunner.ts
index f91b740425..0d46370f0a 100644
--- a/packages/core/src/promptrunner.ts
+++ b/packages/core/src/promptrunner.ts
@@ -24,7 +24,7 @@ import { resolveLanguageModel } from "./lm"
  * @param project The project context.
  * @param trace The markdown trace for logging.
  * @param template The prompt script template.
- * @param frag The fragment containing files and metadata.
+ * @param fragment The fragment containing files and metadata.
  * @param vars The user-provided variables.
  * @returns An object containing resolved variables.
  */
@@ -32,15 +32,14 @@ async function resolveExpansionVars(
     project: Project,
     trace: MarkdownTrace,
     template: PromptScript,
-    frag: Fragment,
+    fragment: Fragment,
     vars: Record<string, string | number | boolean | object>
 ) {
     const root = runtimeHost.projectFolder()
 
     const files: WorkspaceFile[] = []
-    const fr = frag
     const templateFiles = arrayify(template.files)
-    const referenceFiles = fr.files.slice(0)
+    const referenceFiles = fragment.files.slice(0)
     const filenames = await expandFiles(
         referenceFiles?.length ? referenceFiles : templateFiles
     )
@@ -54,6 +53,14 @@ async function resolveExpansionVars(
         files.push(file)
     }
 
+    if (fragment.workspaceFiles?.length)
+        for (const wf of fragment.workspaceFiles) {
+            if (!files.find((f) => f.filename === wf.filename)) {
+                await resolveFileContent(wf)
+                files.push(wf)
+            }
+        }
+
     // Parse and obtain attributes from prompt parameters
     const attrs = parsePromptParameters(project, template, vars)
     const secrets: Record<string, string> = {}
diff --git a/packages/core/src/types/prompt_template.d.ts b/packages/core/src/types/prompt_template.d.ts
index 6f23f4bbfe..bc36749c78 100644
--- a/packages/core/src/types/prompt_template.d.ts
+++ b/packages/core/src/types/prompt_template.d.ts
@@ -539,6 +539,16 @@ interface WorkspaceFile {
      */
     filename: string
 
+    /**
+     * Content mime-type if known
+     */
+    type?: string
+
+    /**
+     * Encoding of the content
+     */
+    encoding?: 'base64'
+
     /**
      * Content of the file.
      */
diff --git a/packages/core/src/util.ts b/packages/core/src/util.ts
index 97b7f3378f..5e1037b9ad 100644
--- a/packages/core/src/util.ts
+++ b/packages/core/src/util.ts
@@ -133,34 +133,6 @@ export function utf8Decode(buf: Uint8Array) {
     return host.createUTF8Decoder().decode(buf)
 }
 
-// this will take lower 8 bits from each character
-export function stringToUint8Array(input: string) {
-    const len = input.length
-    const res = new Uint8Array(len)
-    for (let i = 0; i < len; ++i) res[i] = input.charCodeAt(i) & 0xff
-    return res
-}
-
-export function uint8ArrayToString(input: ArrayLike<number>) {
-    const len = input.length
-    let res = ""
-    for (let i = 0; i < len; ++i) res += String.fromCharCode(input[i])
-    return res
-}
-
-declare var Buffer: any
-export function fromBase64(encoded: string): Uint8Array {
-    if (typeof Buffer == "function" && typeof Buffer.from == "function")
-        return new Uint8Array(Buffer.from(encoded, "base64"))
-    else return stringToUint8Array(atob(encoded))
-}
-
-export function toBase64(data: Uint8Array): string {
-    if (typeof Buffer == "function" && typeof Buffer.from == "function")
-        return Buffer.from(data).toString("base64")
-    else return btoa(uint8ArrayToString(data))
-}
-
 export function dotGenaiscriptPath(...segments: string[]) {
     return host.resolvePath(
         host.projectFolder(),
diff --git a/packages/core/src/zip.ts b/packages/core/src/zip.ts
index b7ee22cd67..adbc96ec53 100644
--- a/packages/core/src/zip.ts
+++ b/packages/core/src/zip.ts
@@ -1,8 +1,9 @@
 import { unzipSync } from "fflate"
 import { lookupMime } from "./mime"
-import { isBinaryMimeType } from "./parser"
+import { isBinaryMimeType } from "./binary"
 import { host } from "./host"
 import { isGlobMatch } from "./glob"
+import { toBase64 } from "./base64"
 
 export async function unzip(
     data: Uint8Array,
@@ -20,7 +21,11 @@ export async function unzip(
     return Object.entries(res).map(([filename, data]) => {
         const mime = lookupMime(filename)
         if (isBinaryMimeType(mime))
-            return <WorkspaceFile>{ filename } // TODO bytes support
+            return <WorkspaceFile>{
+                filename,
+                encoding: "base64",
+                content: toBase64(data),
+            } // bytes support
         else return <WorkspaceFile>{ filename, content: decoder.decode(data) }
     })
 }
diff --git a/packages/sample/package.json b/packages/sample/package.json
index 8f277bc602..2194c9a2d3 100644
--- a/packages/sample/package.json
+++ b/packages/sample/package.json
@@ -21,7 +21,7 @@
     "@azure/identity": "^4.5.0",
     "@azure/storage-blob": "^12.26.0",
     "@huggingface/transformers": "^3.2.4",
-    "@modelcontextprotocol/sdk": "^1.0.4",
+    "@modelcontextprotocol/sdk": "^1.1.0",
     "@tidyjs/tidy": "^2.5.2",
     "p-all": "^5.0.0",
     "vectorstore": "^0.0.4",
diff --git a/packages/web/package.json b/packages/web/package.json
index 5c6db74636..f1bdf00368 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -14,7 +14,7 @@
         "@types/marked": "^6.0.0",
         "@types/react": "^19.0.2",
         "@types/react-dom": "^19.0.2",
-        "@vscode-elements/elements": "^1.9.0",
+        "@vscode-elements/elements": "^1.9.1",
         "@vscode-elements/react-elements": "^0.8.0",
         "@vscode-elements/webview-playground": "^1.3.0",
         "clsx": "^2.1.1",
diff --git a/packages/web/src/App.tsx b/packages/web/src/App.tsx
index d76a06947b..74f2e18f98 100644
--- a/packages/web/src/App.tsx
+++ b/packages/web/src/App.tsx
@@ -53,6 +53,8 @@ import prettyBytes from "pretty-bytes"
 import { renderMessagesToMarkdown } from "../../core/src/chatrender"
 import { stringify as YAMLStringify } from "yaml"
 import { fenceMD } from "../../core/src/mkmd"
+import { isBinaryMimeType } from "../../core/src/binary"
+import { toBase64 } from "../../core/src/base64"
 
 const urlParams = new URLSearchParams(window.location.hash)
 const apiKey = urlParams.get("api-key")
@@ -92,6 +94,7 @@ class RunClient extends EventTarget {
     constructor(
         readonly script: string,
         readonly files: string[],
+        readonly workspaceFiles: WorkspaceFile[],
         readonly options: any
     ) {
         super()
@@ -109,7 +112,10 @@ class RunClient extends EventTarget {
                         runId: this.runId,
                         script,
                         files: this.files,
-                        options: this.options,
+                        options: {
+                            ...(this.options || {}),
+                            workspaceFiles: this.workspaceFiles,
+                        },
                     } satisfies PromptScriptStart)
                 )
             },
@@ -323,7 +329,13 @@ const RunnerContext = createContext<{
 } | null>(null)
 
 function RunnerProvider({ children }: { children: React.ReactNode }) {
-    const { scriptid, files = [], options, parameters } = useApi()
+    const {
+        scriptid,
+        files = [],
+        importedFiles = [],
+        options,
+        parameters,
+    } = useApi()
     const [runner, setRunner] = useState<RunClient | undefined>(undefined)
 
     useEffect(() => {
@@ -331,12 +343,32 @@ function RunnerProvider({ children }: { children: React.ReactNode }) {
         setRunner(undefined)
     }, [scriptid])
 
-    const run = () => {
+    const run = async () => {
         runner?.close()
         if (!scriptid) return
 
-        console.log(`run: start ${scriptid}`, { files, parameters, options })
-        const client = new RunClient(scriptid, files.slice(0), {
+        console.log(`run: start ${scriptid}`, {
+            files,
+            importedFiles,
+            parameters,
+            options,
+        })
+        const workspaceFiles = await Promise.all(
+            importedFiles.map(async (f) => {
+                const binary = isBinaryMimeType(f.type)
+                const buffer = binary
+                    ? new Uint8Array(await f.arrayBuffer())
+                    : undefined
+                const content = buffer ? toBase64(buffer) : await f.text()
+                return {
+                    filename: f.path || f.relativePath,
+                    type: f.type,
+                    encoding: binary ? "base64" : undefined,
+                    content,
+                } satisfies WorkspaceFile
+            })
+        )
+        const client = new RunClient(scriptid, files.slice(0), workspaceFiles, {
             parameters,
             ...options,
         })
@@ -863,17 +895,6 @@ function toStringList(...token: (string | undefined | null)[]) {
     return md
 }
 
-function ScriptFormHelper() {
-    const script = useScript()
-    return (
-        <VscodeFormHelper>
-            {script
-                ? toStringList(script.title, script.description)
-                : `Select a GenAIScript to run`}
-        </VscodeFormHelper>
-    )
-}
-
 function FilesDropZone() {
     const { acceptedFiles, isDragActive, getRootProps, getInputProps } =
         useDropzone()
@@ -883,65 +904,46 @@ function FilesDropZone() {
 
     return (
         <>
-            <VscodeFormContainer>
-                <VscodeFormGroup>
-                    <VscodeLabel>Files</VscodeLabel>
-                    <VscodeMultiSelect
-                        onChange={(e) => {
-                            e.preventDefault()
-                            const target = e.target as HTMLSelectElement
-                            const value = target.value as string
-                            setImportedFiles(
-                                acceptedFiles.filter((f) => f.path === value)
-                            )
-                        }}
-                    >
-                        {acceptedFiles.map((file) => (
-                            <VscodeOption
-                                key={file.path}
-                                value={file.path}
-                                selected
-                            >
-                                {file.name} ({prettyBytes(file.size)})
-                            </VscodeOption>
-                        ))}
-                    </VscodeMultiSelect>
-                </VscodeFormGroup>
-                <VscodeFormGroup
-                    style={{
-                        cursor: "pointer",
+            <VscodeFormGroup>
+                <VscodeLabel>Files</VscodeLabel>
+                <VscodeMultiSelect
+                    onChange={(e) => {
+                        e.preventDefault()
+                        const target = e.target as HTMLSelectElement
+                        const value = target.value as string
+                        setImportedFiles(
+                            acceptedFiles.filter((f) => f.path === value)
+                        )
                     }}
-                    {...getRootProps({ className: "dropzone" })}
                 >
-                    <input {...getInputProps()} />
-                    <VscodeFormHelper>
-                        {isDragActive
-                            ? `Drop the files here ...`
-                            : `Drag 'n' drop some files here, or click to select files`}
-                    </VscodeFormHelper>
-                </VscodeFormGroup>
-            </VscodeFormContainer>
+                    {acceptedFiles.map((file) => (
+                        <VscodeOption
+                            key={file.path}
+                            value={file.path}
+                            selected
+                        >
+                            {file.name} ({prettyBytes(file.size)})
+                        </VscodeOption>
+                    ))}
+                </VscodeMultiSelect>
+            </VscodeFormGroup>
+            <VscodeFormGroup
+                style={{
+                    cursor: "pointer",
+                }}
+                {...getRootProps({ className: "dropzone" })}
+            >
+                <input {...getInputProps()} />
+                <VscodeFormHelper>
+                    {isDragActive
+                        ? `Drop the files here ...`
+                        : `Drag 'n' drop some files here, or click to select files`}
+                </VscodeFormHelper>
+            </VscodeFormGroup>
         </>
     )
 }
 
-function FilesForm() {
-    const { files, importedFiles } = useApi()
-
-    const n = (files?.length || 0) + (importedFiles?.length || 0)
-    return (
-        <VscodeCollapsible title="Files">
-            {n > 0 && (
-                <VscodeBadge variant="counter" slot="decorations">
-                    {n}
-                </VscodeBadge>
-            )}
-            <GlobsForm />
-            <FilesDropZone />
-        </VscodeCollapsible>
-    )
-}
-
 function GlobsForm() {
     const { files = [], setFiles } = useApi()
     return (
@@ -964,6 +966,7 @@ function GlobsForm() {
 function ScriptSelect() {
     const scripts = useScripts()
     const { scriptid, setScriptid } = useApi()
+    const script = useScript()
 
     return (
         <VscodeFormGroup>
@@ -972,6 +975,7 @@ function ScriptSelect() {
             </VscodeLabel>
             <VscodeSingleSelect
                 value={scriptid}
+                required={true}
                 combobox
                 filter="fuzzy"
                 onChange={(e) => {
@@ -989,7 +993,11 @@ function ScriptSelect() {
                     </VscodeOption>
                 ))}
             </VscodeSingleSelect>
-            <ScriptFormHelper />
+            {script && (
+                <VscodeFormHelper>
+                    {toStringList(script.title, script.description)}
+                </VscodeFormHelper>
+            )}
         </VscodeFormGroup>
     )
 }
@@ -999,6 +1007,7 @@ function ScriptForm() {
         <VscodeCollapsible open title="Script">
             <VscodeFormContainer>
                 <ScriptSelect />
+                <FilesDropZone />
                 <RunButton />
             </VscodeFormContainer>
         </VscodeCollapsible>
@@ -1133,7 +1142,6 @@ function RunForm() {
     return (
         <form onSubmit={handleSubmit}>
             <ScriptForm />
-            <FilesForm />
             <PromptParametersForm />
             <ModelConnectionOptionsForm />
         </form>
diff --git a/slides/yarn.lock b/slides/yarn.lock
index 9a9864f57c..cc8a2376e3 100644
--- a/slides/yarn.lock
+++ b/slides/yarn.lock
@@ -872,102 +872,102 @@
   resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz#c82f04a09ba481e13857d6f2516e072aaa51b7f4"
   integrity sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==
 
-"@shikijs/core@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.25.1.tgz#77d5af5e759c7b12abb00785a8e2ef64fe949b2f"
-  integrity sha512-0j5k3ZkLTQViOuNzPVyWGoW1zgH3kiFdUT/JOCkTm7TU74mz+dF+NID+YoiCBzHQxgsDpcGYPjKDJRcuVLSt4A==
-  dependencies:
-    "@shikijs/engine-javascript" "1.25.1"
-    "@shikijs/engine-oniguruma" "1.25.1"
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+"@shikijs/core@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.26.1.tgz#ba7399bee73148575277780c9fe4df656d582a65"
+  integrity sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==
+  dependencies:
+    "@shikijs/engine-javascript" "1.26.1"
+    "@shikijs/engine-oniguruma" "1.26.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     "@types/hast" "^3.0.4"
     hast-util-to-html "^9.0.4"
 
-"@shikijs/engine-javascript@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.25.1.tgz#ebae27e6949a9d3aa46a86b596a762933db4a2ea"
-  integrity sha512-zQ7UWKnRCfD/Q1M+XOSyjsbhpE0qv8LUnmn82HYCeOsgAHgUZGEDIQ63bbuK3kU5sQg+2CtI+dPfOqD/mjSY9w==
+"@shikijs/engine-javascript@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.26.1.tgz#0881250e4a39a52b49cb50600f41bb19e429dcdb"
+  integrity sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==
   dependencies:
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     oniguruma-to-es "0.10.0"
 
-"@shikijs/engine-oniguruma@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.25.1.tgz#537221149f47fd71f64a503203c4bd3fd037fa02"
-  integrity sha512-iKPMh3H+0USHtWfZ1irfMTH6tGmIUFSnqt3E2K8BgI1VEsqiPh0RYkG2WTwzNiM1/WHN4FzYx/nrKR7PDHiRyw==
+"@shikijs/engine-oniguruma@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.1.tgz#f9de733e2473e693b3d10bff32bb9761746c1d71"
+  integrity sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==
   dependencies:
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
 
-"@shikijs/langs@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-1.25.1.tgz#1c0b7822d41929351b31409d2932952495a4fae3"
-  integrity sha512-hdYjq9aRJplAzGe2qF51PR9IDgEoyGb4IkXvr3Ts6lEdg4Z8M/kdknKRo2EIuv3IR/aKkJXTlBQRM+wr3t20Ew==
+"@shikijs/langs@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-1.26.1.tgz#5365530e04715b21e40242eb331291712bdf7306"
+  integrity sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==
   dependencies:
-    "@shikijs/types" "1.25.1"
+    "@shikijs/types" "1.26.1"
 
 "@shikijs/markdown-it@^1.24.2":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/markdown-it/-/markdown-it-1.25.1.tgz#7f5e58d0fda82f54b6a7a2e8081116347c1533c5"
-  integrity sha512-KcZnJKitGvCKXhnVhOIxaobAp6TYe27M0uriWfLeCsOF4d4bkQ6dnwfJLEPtRV90tFqCZ+qzHbNrIc+ArroU9w==
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/markdown-it/-/markdown-it-1.26.1.tgz#62a196f1dd8238eba9b6ad85e95b102cb25e6878"
+  integrity sha512-+1WSmaD1ANN0x15ud4oMw5RFgFdyT0FpU9OoE7MUbiaU9+pRtAjIx0viTVsbhBzJEG1oVUBzK1Wc6Wz7toiTZg==
   dependencies:
     markdown-it "^14.1.0"
-    shiki "1.25.1"
+    shiki "1.26.1"
 
 "@shikijs/monaco@^1.24.2":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/monaco/-/monaco-1.25.1.tgz#00e4470a5f9aff5af53b385b1add9f315b679dbc"
-  integrity sha512-heWxO6vCu78ZGE2m62com4Ry/xiFcJiJtSwlaBYHlG3aCBZP3Qph2SVFkxRUPgQSuGr1LO5EhOclPBaNrr8MnA==
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/monaco/-/monaco-1.26.1.tgz#2c30aa570c6b178e4757a300b5c473eb0ed8a278"
+  integrity sha512-lwBbVrmGIXgyD9Kdv00Ds66I6E4/PORDyPQ2GplFzZOHGq3tLo2Z44WK4BQCBMoAft+OPjqZS0oOzZwEGYaXLA==
   dependencies:
-    "@shikijs/core" "1.25.1"
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+    "@shikijs/core" "1.26.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
 
-"@shikijs/themes@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-1.25.1.tgz#7b38ad054632521e883bcf44fb96181151dea5a9"
-  integrity sha512-JO0lDn4LgGqg5QKvgich5ScUmC2okK+LxM9a3iLUH7YMeI2c8UGXThuJv6sZduS7pdJbYQHPrvWq9t/V4GhpbQ==
+"@shikijs/themes@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-1.26.1.tgz#6f6ee538dc1383b8a971464c5cecda06b1a6db0d"
+  integrity sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==
   dependencies:
-    "@shikijs/types" "1.25.1"
+    "@shikijs/types" "1.26.1"
 
 "@shikijs/twoslash@", "@shikijs/twoslash@^1.24.2":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/twoslash/-/twoslash-1.25.1.tgz#97276af8de46547ca544c62947571d5fbec5cac2"
-  integrity sha512-nLfPRX4dsqZKJF0Lq+QKl1eyKRk5pBdRDwORozcv1q1F8OVOS5I8Rb3GoWd9BVv/nrWcpxg4rBT59JJ3MrqXDQ==
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/twoslash/-/twoslash-1.26.1.tgz#3f8b7658dcacddbbc357c13afbc8cb59ffa89aa7"
+  integrity sha512-jgRt6c6y+rXVfpcLIAY8luCKDiadhozrLS1+xjXA6WcZ/5wCAB2oj+ubue+14UZkg2yLJaH0X7N8N2J7/X1YJQ==
   dependencies:
-    "@shikijs/core" "1.25.1"
-    "@shikijs/types" "1.25.1"
+    "@shikijs/core" "1.26.1"
+    "@shikijs/types" "1.26.1"
     twoslash "^0.2.12"
 
-"@shikijs/types@1.25.1":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.25.1.tgz#b080fc9e2622b0e4b2ec0ff4bc0628a37f7fc102"
-  integrity sha512-dceqFUoO95eY4tpOj3OGq8wE8EgJ4ey6Me1HQEu5UbwIYszFndEll/bjlB8Kp9wl4fx3uM7n4+y9XCYuDBmcXA==
+"@shikijs/types@1.26.1":
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.26.1.tgz#b5ece69e21000f53d65d15ddae33d9ad9c3763ad"
+  integrity sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==
   dependencies:
-    "@shikijs/vscode-textmate" "^9.3.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     "@types/hast" "^3.0.4"
 
 "@shikijs/vitepress-twoslash@^1.24.2":
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/vitepress-twoslash/-/vitepress-twoslash-1.25.1.tgz#50a3a0bfe150aea76e0db68c7604d55a1fdd59f6"
-  integrity sha512-f2MJWlk+nSZqXm+meFOCL7mItWSTMk/Y0Ytz5pUnwfZBHN5JO+LUOQT+Uhu3ONtiAHi3MdK0mrG2T5jOptHNUg==
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/vitepress-twoslash/-/vitepress-twoslash-1.26.1.tgz#3606f6e2982b55e252da670dab1eca9ddbe7b0db"
+  integrity sha512-doNqlJ+oOkC98cgiJSFJ3T/RZMBTiutQ3xw8EB8Xr6Qbk1/5Tfg+eOpI/2h2HTHdEafC2jzkgWK/l7Te1u5aWA==
   dependencies:
     "@shikijs/twoslash" ""
     floating-vue "^5.2.2"
     mdast-util-from-markdown "^2.0.2"
     mdast-util-gfm "^3.0.0"
     mdast-util-to-hast "^13.2.0"
-    shiki "1.25.1"
+    shiki "1.26.1"
     twoslash "^0.2.12"
     twoslash-vue "^0.2.12"
     vue "^3.5.13"
 
-"@shikijs/vscode-textmate@^9.3.1":
-  version "9.3.1"
-  resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-9.3.1.tgz#afda31f8f42cab70a26f3603f52eae3f1c35d2f7"
-  integrity sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==
+"@shikijs/vscode-textmate@^10.0.1":
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz#d06d45b67ac5e9b0088e3f67ebd3f25c6c3d711a"
+  integrity sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==
 
 "@sindresorhus/is@^5.2.0":
   version "5.6.0"
@@ -1441,9 +1441,9 @@
   integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
 
 "@types/node@*", "@types/node@>=20":
-  version "22.10.4"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.4.tgz#da36bebcc4b124f3d62bfde1cd1dafd7763949c1"
-  integrity sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==
+  version "22.10.5"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.5.tgz#95af89a3fb74a2bb41ef9927f206e6472026e48b"
+  integrity sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==
   dependencies:
     undici-types "~6.20.0"
 
@@ -3675,9 +3675,9 @@ marked@^13.0.2:
   integrity sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==
 
 mdast-util-find-and-replace@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0"
-  integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df"
+  integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==
   dependencies:
     "@types/mdast" "^4.0.0"
     escape-string-regexp "^5.0.0"
@@ -4680,18 +4680,18 @@ shiki-magic-move@^0.5.2:
     diff-match-patch-es "^0.1.1"
     ohash "^1.1.4"
 
-shiki@1.25.1, shiki@^1.24.2:
-  version "1.25.1"
-  resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.25.1.tgz#0f3907b0f9deebadfb6a1f248804d8791522d7e3"
-  integrity sha512-/1boRvNYwRW3GLG9Y6dXdnZ/Ha+J5T/5y3hV7TGQUcDSBM185D3FCbXlz2eTGNKG2iWCbWqo+P0yhGKZ4/CUrw==
-  dependencies:
-    "@shikijs/core" "1.25.1"
-    "@shikijs/engine-javascript" "1.25.1"
-    "@shikijs/engine-oniguruma" "1.25.1"
-    "@shikijs/langs" "1.25.1"
-    "@shikijs/themes" "1.25.1"
-    "@shikijs/types" "1.25.1"
-    "@shikijs/vscode-textmate" "^9.3.1"
+shiki@1.26.1, shiki@^1.24.2:
+  version "1.26.1"
+  resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.26.1.tgz#eedb5f192a4d980a3e8bdd850ee390eef05cc386"
+  integrity sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==
+  dependencies:
+    "@shikijs/core" "1.26.1"
+    "@shikijs/engine-javascript" "1.26.1"
+    "@shikijs/engine-oniguruma" "1.26.1"
+    "@shikijs/langs" "1.26.1"
+    "@shikijs/themes" "1.26.1"
+    "@shikijs/types" "1.26.1"
+    "@shikijs/vscode-textmate" "^10.0.1"
     "@types/hast" "^3.0.4"
 
 signal-exit@^4.1.0:
diff --git a/yarn.lock b/yarn.lock
index b8bad4254d..ca36838944 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1159,6 +1159,24 @@
   resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz#8249de9b7e22fcb3ceb5e66090c30a1d5492b81a"
   integrity sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==
 
+"@grpc/grpc-js@^1.11.1":
+  version "1.12.5"
+  resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.5.tgz#0064a28fe9b1ec54ac27e1c9bf70720aa01285e8"
+  integrity sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==
+  dependencies:
+    "@grpc/proto-loader" "^0.7.13"
+    "@js-sdsl/ordered-map" "^4.4.2"
+
+"@grpc/proto-loader@^0.7.13":
+  version "0.7.13"
+  resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf"
+  integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==
+  dependencies:
+    lodash.camelcase "^4.3.0"
+    long "^5.0.0"
+    protobufjs "^7.2.5"
+    yargs "^17.7.2"
+
 "@huggingface/jinja@^0.2.2":
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.2.2.tgz#faeb205a9d6995089bef52655ddd8245d3190627"
@@ -1741,6 +1759,11 @@
   resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
   integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
 
+"@js-sdsl/ordered-map@^4.4.2":
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c"
+  integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==
+
 "@lit-labs/ssr-dom-shim@^1.2.0":
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz#2f3a8f1d688935c704dbc89132394a41029acbb8"
@@ -1804,10 +1827,10 @@
   resolved "https://registry.yarnpkg.com/@mixmark-io/domino/-/domino-2.2.0.tgz#4e8ec69bf1afeb7a14f0628b7e2c0f35bdb336c3"
   integrity sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==
 
-"@modelcontextprotocol/sdk@^1.0.4":
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.0.4.tgz#34ad1edd3db7dd7154e782312dfb29d2d0c11d21"
-  integrity sha512-C+jw1lF6HSGzs7EZpzHbXfzz9rj9him4BaoumlTciW/IDDgIpweF/qiCWKlP02QKg5PPcgY6xY2WCt5y2tpYow==
+"@modelcontextprotocol/sdk@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.1.0.tgz#9343ee9c53ac4138608572c2eb34db78752d8664"
+  integrity sha512-o5PIPz0vc1bJYXS0oLvRr8yUOzYtxEFL1rWP4aiO8qLslCksmbKhONy6CTpq0WPuIXUt2YuXoRtVA2EcLix3fw==
   dependencies:
     content-type "^1.0.5"
     raw-body "^3.0.0"
@@ -1939,13 +1962,13 @@
     universal-user-agent "^7.0.0"
 
 "@octokit/auth-oauth-device@^7.0.0", "@octokit/auth-oauth-device@^7.0.1":
-  version "7.1.1"
-  resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.1.tgz#7b4f8f97cbcadbe9894d48cde4406dbdef39875a"
-  integrity sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg==
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.2.tgz#bd79003e780467f18b0ccf4ad488151769edf41b"
+  integrity sha512-gTOIzDeV36OhVfxCl69FmvJix7tJIiU6dlxuzLVAzle7fYfO8UDyddr9B+o4CFQVaMBLMGZ9ak2CWMYcGeZnPw==
   dependencies:
-    "@octokit/oauth-methods" "^5.0.0"
-    "@octokit/request" "^9.0.0"
-    "@octokit/types" "^13.0.0"
+    "@octokit/oauth-methods" "^5.1.3"
+    "@octokit/request" "^9.1.4"
+    "@octokit/types" "^13.6.2"
     universal-user-agent "^7.0.0"
 
 "@octokit/auth-oauth-user@^5.0.1", "@octokit/auth-oauth-user@^5.1.0":
@@ -1973,15 +1996,15 @@
     "@octokit/types" "^13.0.0"
 
 "@octokit/core@^6.0.0", "@octokit/core@^6.1.2":
-  version "6.1.2"
-  resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.2.tgz#20442d0a97c411612da206411e356014d1d1bd17"
-  integrity sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==
+  version "6.1.3"
+  resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.3.tgz#280d3bb66c702297baac0a202219dd66611286e4"
+  integrity sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==
   dependencies:
     "@octokit/auth-token" "^5.0.0"
-    "@octokit/graphql" "^8.0.0"
-    "@octokit/request" "^9.0.0"
-    "@octokit/request-error" "^6.0.1"
-    "@octokit/types" "^13.0.0"
+    "@octokit/graphql" "^8.1.2"
+    "@octokit/request" "^9.1.4"
+    "@octokit/request-error" "^6.1.6"
+    "@octokit/types" "^13.6.2"
     before-after-hook "^3.0.2"
     universal-user-agent "^7.0.0"
 
@@ -1993,7 +2016,7 @@
     "@octokit/types" "^13.6.2"
     universal-user-agent "^7.0.2"
 
-"@octokit/graphql@^8.0.0":
+"@octokit/graphql@^8.1.2":
   version "8.1.2"
   resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.1.2.tgz#98b9072b22e0471b782d52ed0da08e2b2de52b17"
   integrity sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==
@@ -2021,7 +2044,7 @@
   resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz#0e17c2225eb66b58ec902d02b6f1315ffe9ff04b"
   integrity sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA==
 
-"@octokit/oauth-methods@^5.0.0":
+"@octokit/oauth-methods@^5.0.0", "@octokit/oauth-methods@^5.1.3":
   version "5.1.3"
   resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-5.1.3.tgz#d2083e7cfcc16f7c6c67141795a299538712eba8"
   integrity sha512-M+bDBi5H8FnH0xhCTg0m9hvcnppdDnxUqbZyOkxlLblKpLAR+eT2nbDPvJDp0eLrvJWA1I8OX0KHf/sBMQARRA==
@@ -2895,9 +2918,9 @@
   integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==
 
 "@types/aws-lambda@^8.10.83":
-  version "8.10.146"
-  resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.146.tgz#05f9968d8cd9719a0a86526baf889c25761f60b8"
-  integrity sha512-3BaDXYTh0e6UCJYL/jwV/3+GRslSc08toAiZSmleYtkAUyV5rtvdPYxrG/88uqvTuT6sb27WE9OS90ZNTIuQ0g==
+  version "8.10.147"
+  resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.147.tgz#dc5c89aa32f47a9b35e52c32630545c83afa6f2f"
+  integrity sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==
 
 "@types/d3-array@*":
   version "3.2.1"
@@ -3291,10 +3314,10 @@
     "@types/node" "*"
     form-data "^4.0.0"
 
-"@types/node@*", "@types/node@>=13.7.0", "@types/node@>=20", "@types/node@^22.10.2":
-  version "22.10.4"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.4.tgz#da36bebcc4b124f3d62bfde1cd1dafd7763949c1"
-  integrity sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==
+"@types/node@*", "@types/node@>=13.7.0", "@types/node@>=20", "@types/node@^22.10.5":
+  version "22.10.5"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.5.tgz#95af89a3fb74a2bb41ef9927f206e6472026e48b"
+  integrity sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==
   dependencies:
     undici-types "~6.20.0"
 
@@ -3368,9 +3391,9 @@
   integrity sha512-+UE8GAGRPbJVQDdxi16dgadcBfQ+KG2vgZhV1+3A1XmHbmwcdwhCUwIdy+d3pAGrbvgRoVSjeI9vOWyq376Yzw==
 
 "@types/ssh2@*":
-  version "1.15.1"
-  resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-1.15.1.tgz#4db4b6864abca09eb299fe5354fa591add412223"
-  integrity sha512-ZIbEqKAsi5gj35y4P4vkJYly642wIbY6PqoN0xiyQGshKUGXR9WQjF/iF9mXBQ8uBKy3ezfsCkcoHKhd0BzuDA==
+  version "1.15.3"
+  resolved "https://registry.yarnpkg.com/@types/ssh2/-/ssh2-1.15.3.tgz#dc67c0336d04e1f3b5ae500b0c1455676ab49193"
+  integrity sha512-pUhXytp7aRAj1AKCQpdKNKGb32e53MUGPu186U9cm8mbX6kxF0UcngI/RVoKvJTWdHqDFiNrSDiPR/JZWexcCQ==
   dependencies:
     "@types/node" "^18.11.18"
 
@@ -3423,10 +3446,10 @@
   resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd"
   integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==
 
-"@vscode-elements/elements@^1.8.0", "@vscode-elements/elements@^1.9.0":
-  version "1.9.0"
-  resolved "https://registry.yarnpkg.com/@vscode-elements/elements/-/elements-1.9.0.tgz#8b3b1366656a98446fa334a08e2268469c68a01f"
-  integrity sha512-OjoACdO2elyZ8qVxaClN/JUODejusYC1YVOU6ekHULdWuVoU1nAXRh31Smm89M+Z7UezaAH2mXIP9aZ3q4nnjA==
+"@vscode-elements/elements@^1.8.0", "@vscode-elements/elements@^1.9.1":
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/@vscode-elements/elements/-/elements-1.9.1.tgz#cc6d405a93577969b3f98fbc36b1d8eacd560c91"
+  integrity sha512-OqNqE6vD4gbmu8L5UBAHuiU/cclLDsEb1gikJvuzEY7jVQOU0jFR70gFdk/aQikWFcKzVMoXqgO+lIKPSK0IUw==
   dependencies:
     lit "^3.2.1"
 
@@ -3814,9 +3837,9 @@ balanced-match@^1.0.0:
   integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
 
 bare-events@^2.0.0, bare-events@^2.2.0:
-  version "2.5.0"
-  resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.0.tgz#305b511e262ffd8b9d5616b056464f8e1b3329cc"
-  integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.1.tgz#052a96e3fc0e87cd9f226199d7f8a80cd87b6d21"
+  integrity sha512-Bw2PgKSrZ3uCuSV9WQ998c/GTJTd+9bWj97n7aDQMP8dP/exAZQlJeswPty0ISy+HZD+9Ex+C7CCnc9Q5QJFmQ==
 
 bare-fs@^2.1.1:
   version "2.3.5"
@@ -4886,24 +4909,28 @@ dir-glob@^3.0.1:
   dependencies:
     path-type "^4.0.0"
 
-docker-modem@^5.0.3:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-5.0.3.tgz#50c06f11285289f58112b5c4c4d89824541c41d0"
-  integrity sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==
+docker-modem@^5.0.5:
+  version "5.0.5"
+  resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-5.0.5.tgz#5c0d3fa3b4c778098d965be20c887c14fa995a2f"
+  integrity sha512-Cxw8uEcvNTRmsQuGqzzfiCnfGgf96tVJItLh8taOX0miTcIBALKH5TckCSuZbpbjP7uhAl81dOL9sxfa6HgCIg==
   dependencies:
     debug "^4.1.1"
     readable-stream "^3.5.0"
     split-ca "^1.0.1"
     ssh2 "^1.15.0"
 
-dockerode@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-4.0.2.tgz#dedc8529a1db3ac46d186f5912389899bc309f7d"
-  integrity sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==
+dockerode@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-4.0.3.tgz#509227f46782302650447fd495d44b9e3b439e4f"
+  integrity sha512-QSXJFcBQNaGZO6U3qWW4B7p8yRIJn/dWmvL2AQWfO/bjptBBO6QYdVkYSYFz9qoivP2jsOHZfmXMAfrK0BMKyg==
   dependencies:
     "@balena/dockerignore" "^1.0.2"
-    docker-modem "^5.0.3"
+    "@grpc/grpc-js" "^1.11.1"
+    "@grpc/proto-loader" "^0.7.13"
+    docker-modem "^5.0.5"
+    protobufjs "^7.3.2"
     tar-fs "~2.0.1"
+    uuid "^10.0.0"
 
 dom-serializer@^2.0.0:
   version "2.0.0"
@@ -5345,9 +5372,9 @@ extsprintf@^1.2.0:
   integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
 
 fast-content-type-parse@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-2.0.0.tgz#dea7bfd385e4f18e69f37d309431a4b48470fece"
-  integrity sha512-fCqg/6Sps8tqk8p+kqyKqYfOF0VjPNYrqpLiqNl0RBKmD80B080AJWVV6EkSkscjToNExcXg1+Mfzftrx6+iSA==
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz#c236124534ee2cb427c8d8e5ba35a4856947847b"
+  integrity sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==
 
 fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
   version "3.1.3"
@@ -6222,7 +6249,7 @@ indent-string@^4.0.0:
   resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
   integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
 
-inflection@^3.0.0:
+inflection@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/inflection/-/inflection-3.0.1.tgz#b1ec2fb8ab0887725d29ad6934810011eb508fa0"
   integrity sha512-EpyF+TLa3xZPClbkp9pDJZtJFYPHouWuFYsfAQI8AfjnaPVOpmRV6GSzCs+QGelj2eZ7oQllcK23aI1vHhPVVg==
@@ -6965,6 +6992,11 @@ lodash-es@4.17.21, lodash-es@^4.17.21:
   resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
   integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
 
+lodash.camelcase@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+  integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
+
 lodash.get@^4.4.2:
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
@@ -7180,9 +7212,9 @@ mathjs@^14.0.1:
     typed-function "^4.2.1"
 
 mdast-util-find-and-replace@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0"
-  integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df"
+  integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==
   dependencies:
     "@types/mdast" "^4.0.0"
     escape-string-regexp "^5.0.0"
@@ -8231,10 +8263,10 @@ openai@^3.2.1:
     axios "^0.26.0"
     form-data "^4.0.0"
 
-openai@^4.77.0:
-  version "4.77.0"
-  resolved "https://registry.yarnpkg.com/openai/-/openai-4.77.0.tgz#228f2d43ffa79ae9d8b5d4155e965da82e5ac330"
-  integrity sha512-WWacavtns/7pCUkOWvQIjyOfcdr9X+9n9Vvb0zFeKVDAqwCMDHB+iSr24SVaBAhplvSG6JrRXFpcNM9gWhOGIw==
+openai@^4.77.3:
+  version "4.77.3"
+  resolved "https://registry.yarnpkg.com/openai/-/openai-4.77.3.tgz#10f6906f2f737a98b656b745a6b710e595ba2e4d"
+  integrity sha512-wLDy4+KWHz31HRFMW2+9KQuVuT2QWhs0z94w1Gm1h2Ut9vIHr9/rHZggbykZEfyiaJRVgw8ZS9K6AylDWzvPYw==
   dependencies:
     "@types/node" "^18.11.18"
     "@types/node-fetch" "^2.6.4"
@@ -8737,7 +8769,7 @@ protobufjs@^6.8.8:
     "@types/node" ">=13.7.0"
     long "^4.0.0"
 
-protobufjs@^7.2.4:
+protobufjs@^7.2.4, protobufjs@^7.2.5, protobufjs@^7.3.2:
   version "7.4.0"
   resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a"
   integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==
@@ -8988,13 +9020,15 @@ regenerator-runtime@^0.14.0:
   integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
 
 regexp.prototype.flags@^1.5.3:
-  version "1.5.3"
-  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42"
-  integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==
+  version "1.5.4"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19"
+  integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==
   dependencies:
-    call-bind "^1.0.7"
+    call-bind "^1.0.8"
     define-properties "^1.2.1"
     es-errors "^1.3.0"
+    get-proto "^1.0.1"
+    gopd "^1.2.0"
     set-function-name "^2.0.2"
 
 rehype-highlight@^7.0.1:
@@ -10438,6 +10472,11 @@ util@^0.12.5:
     is-typed-array "^1.1.3"
     which-typed-array "^1.1.2"
 
+uuid@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294"
+  integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==
+
 uuid@^3.3.2:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"