diff --git a/README.md b/README.md index d688bf4c..a1b74869 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ DSH Desktop packages the local DeepSeek Harness web experience as a desktop application. It launches a local Harness instance automatically, manages a random loopback port, persists profiles, plugins, and sessions, and opens the full interface as soon as Harness is ready. Project workspaces are added and managed entirely in the Harness interface. > [!IMPORTANT] -> DSH Desktop is currently an early preview and depends on the rapidly evolving `@deepseek-ai/dsh@0.1.0-rc.8`. macOS releases are code-signed and notarized by Apple; current installers are distributed through the official website. +> DSH Desktop is currently an early preview and depends on the rapidly evolving `@deepseek-ai/dsh@0.1.1-rc.1`. macOS releases are code-signed and notarized by Apple; current installers are distributed through the official website. ## Download @@ -155,7 +155,7 @@ build/ Application icon assets ## Upstream version and patches -The project currently pins `@deepseek-ai/dsh@0.1.0-rc.8`. The initial provider list and desktop preset-transfer surface are captured with [`patch-package`](https://github.com/ds300/patch-package) under [`patches/`](patches/) rather than relying on untracked changes in `node_modules`. +The project currently pins `@deepseek-ai/dsh@0.1.1-rc.1`. The initial provider list and desktop preset-transfer surface are captured with [`patch-package`](https://github.com/ds300/patch-package) under [`patches/`](patches/) rather than relying on untracked changes in `node_modules`. When upgrading DSH: diff --git a/README.zh.md b/README.zh.md index 878d5157..4d191f6d 100644 --- a/README.zh.md +++ b/README.zh.md @@ -25,7 +25,7 @@ DSH Desktop 把 DeepSeek Harness 的本地 Web 体验封装为桌面应用:应用会自动启动本地 Harness、管理随机回环端口、持久化 Profile/插件/会话,并在 Harness 就绪后直接进入完整界面。项目工作区在 Harness 界面中统一添加和管理。 > [!IMPORTANT] -> DSH Desktop 当前处于早期预览阶段,并依赖仍在快速迭代的 `@deepseek-ai/dsh@0.1.0-rc.8`。macOS 正式包已完成代码签名并通过 Apple 公证,当前安装包统一通过官网分发。 +> DSH Desktop 当前处于早期预览阶段,并依赖仍在快速迭代的 `@deepseek-ai/dsh@0.1.1-rc.1`。macOS 正式包已完成代码签名并通过 Apple 公证,当前安装包统一通过官网分发。 ## 下载安装 @@ -155,7 +155,7 @@ build/ 应用图标资源 ## 上游版本与补丁 -项目当前固定依赖 `@deepseek-ai/dsh@0.1.0-rc.8`。首启 Provider 列表与桌面端 Preset 导入导出界面由 [`patch-package`](https://github.com/ds300/patch-package) 固化在 [`patches/`](patches/) 中,而不是依赖未跟踪的 `node_modules` 修改。侧边栏品牌标识与手机配对入口改为填充 Harness 提供的 `sidebar.brand.*` 与 `sidebar.footer.action` 插槽,不再需要补丁。 +项目当前固定依赖 `@deepseek-ai/dsh@0.1.1-rc.1`。首启 Provider 列表与桌面端 Preset 导入导出界面由 [`patch-package`](https://github.com/ds300/patch-package) 固化在 [`patches/`](patches/) 中,而不是依赖未跟踪的 `node_modules` 修改。侧边栏品牌标识与手机配对入口改为填充 Harness 提供的 `sidebar.brand.*` 与 `sidebar.footer.action` 插槽,不再需要补丁。 升级 DSH 时必须: diff --git a/package-lock.json b/package-lock.json index 1541d6d7..cbeabb47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,25 +11,26 @@ "license": "MIT", "dependencies": { "@deepseek-ai/cordis-plugin-group": "1.0.1", - "@deepseek-ai/dsh": "0.1.0-rc.8", - "@deepseek-ai/dsh-anonymous-user-id": "0.1.0-rc.8", - "@deepseek-ai/dsh-atomic-write": "0.1.0-rc.8", - "@deepseek-ai/dsh-bash-local": "0.1.0-rc.8", - "@deepseek-ai/dsh-code-runtime": "0.1.0-rc.8", - "@deepseek-ai/dsh-compaction": "0.1.0-rc.8", - "@deepseek-ai/dsh-fs": "0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "0.1.0-rc.8", - "@deepseek-ai/dsh-output-retention": "0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "0.1.0-rc.8", - "@deepseek-ai/dsh-session-telemetry": "0.1.0-rc.8", - "@deepseek-ai/dsh-session-title-llm": "0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "0.1.0-rc.8", - "@deepseek-ai/dsh-spill": "0.1.0-rc.8", - "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "0.1.0-rc.8", - "@deepseek-ai/dsh-workflow": "0.1.0-rc.8", + "@deepseek-ai/dsh": "0.1.1-rc.1", + "@deepseek-ai/dsh-anonymous-user-id": "0.1.1-rc.1", + "@deepseek-ai/dsh-atomic-write": "0.1.1-rc.1", + "@deepseek-ai/dsh-authorization": "0.1.1-rc.1", + "@deepseek-ai/dsh-bash-local": "0.1.1-rc.1", + "@deepseek-ai/dsh-code-runtime": "0.1.1-rc.1", + "@deepseek-ai/dsh-compaction": "0.1.1-rc.1", + "@deepseek-ai/dsh-fs": "0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "0.1.1-rc.1", + "@deepseek-ai/dsh-output-retention": "0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "0.1.1-rc.1", + "@deepseek-ai/dsh-session-telemetry": "0.1.1-rc.1", + "@deepseek-ai/dsh-session-title-llm": "0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "0.1.1-rc.1", + "@deepseek-ai/dsh-spill": "0.1.1-rc.1", + "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "0.1.1-rc.1", + "@deepseek-ai/dsh-workflow": "0.1.1-rc.1", "dsh-desktop-market-installer": "file:packages/dsh-desktop-market-installer", "electron-updater": "^6.8.9", "node": "24.9.0", @@ -52,7 +53,7 @@ }, "node_modules/@anthropic-ai/sdk": { "version": "0.91.1", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.91.1.tgz", + "resolved": "https://registry.npmmirror.com/@anthropic-ai/sdk/-/sdk-0.91.1.tgz", "integrity": "sha512-LAmu761tSN9r66ixvmciswUj/ZC+1Q4iAfpedTfSVLeswRwnY3n2Nb6Tsk+cLPP28aLOPWeMgIuTuCcMC6W/iw==", "license": "MIT", "dependencies": { @@ -72,7 +73,7 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "license": "Apache-2.0", "dependencies": { @@ -87,7 +88,7 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "license": "Apache-2.0", "dependencies": { @@ -101,7 +102,7 @@ }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "license": "Apache-2.0", "dependencies": { @@ -110,7 +111,7 @@ }, "node_modules/@aws-crypto/util": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "license": "Apache-2.0", "dependencies": { @@ -121,7 +122,7 @@ }, "node_modules/@aws-sdk/client-bedrock-runtime": { "version": "3.1048.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.1048.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.1048.0.tgz", "integrity": "sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ==", "license": "Apache-2.0", "dependencies": { @@ -146,7 +147,7 @@ }, "node_modules/@aws-sdk/core": { "version": "3.977.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.8.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/core/-/core-3.977.8.tgz", "integrity": "sha512-7+Kcrkvrk9lM/m7jRhHpT4jCdvzGHsuaSRbF8TdzzkY1mRzp/Ogwf9c7H29k4gGhey0BBWhCWr16+t0J61gwmg==", "license": "Apache-2.0", "dependencies": { @@ -165,7 +166,7 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.972.69", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.69.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.69.tgz", "integrity": "sha512-AreCFzcB4kH2HF9031Ot0jSJr3KXvRg6e8uDeub20JEVdZU3Bv0sTq1plc7VsT3KiqutlzH7l0j50UcCWHUioA==", "license": "Apache-2.0", "dependencies": { @@ -181,7 +182,7 @@ }, "node_modules/@aws-sdk/credential-provider-http": { "version": "3.972.71", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.71.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.71.tgz", "integrity": "sha512-A8ObcqVmDMnk4F9NozZ7JwmUu9Q4xyBJkmyq1C5U+wNM9ht9J7+EuuyabsLWXZnOoTqFaJuYBYTKf5CTipkEjA==", "license": "Apache-2.0", "dependencies": { @@ -198,12 +199,12 @@ } }, "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.2.tgz", - "integrity": "sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g==", + "version": "4.11.3", + "resolved": "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-4.11.3.tgz", + "integrity": "sha512-2jY1tSpERfPfWqyBV2pH+iGFaghVsIJszJNsT7hxtQYhVJpWDyc0LqOWI+nXOxOAHaEfZ4PXXtp1wW1TGpHhkA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.33.2", + "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, @@ -213,7 +214,7 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.973.14", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.14.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.14.tgz", "integrity": "sha512-7c+Wti2LsERNWMfm7ySz3/6RPopFW3Nmn7s63Xpcq6R/tRuY5hpvkHA2xVgi5ukJbvok9l0IDtVEvqTtg+X7dw==", "license": "Apache-2.0", "dependencies": { @@ -237,7 +238,7 @@ }, "node_modules/@aws-sdk/credential-provider-login": { "version": "3.972.76", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.76.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.76.tgz", "integrity": "sha512-LVixwOnEJfrrfKHeZjBA8pIMTZjNDq8ak8VpcoWUuCJDrSnBNU8POJksULMgvN089P0MXtQYH2Zs627/MK1K0g==", "license": "Apache-2.0", "dependencies": { @@ -254,7 +255,7 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.972.80", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.80.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.80.tgz", "integrity": "sha512-bE2qh8ww4iClO1jHsBXdOE8FUgzDbdxbyorNjSCoPSkQd51k3jODItuPZfuwcLHZqDXsH+bI4AMHhqtuyR7mSg==", "license": "Apache-2.0", "dependencies": { @@ -276,7 +277,7 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.972.69", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.69.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.69.tgz", "integrity": "sha512-9kpTNdZTrcqXTfhxM7fgl9Z68ek3Fu5oe3Yf+A/pJGibEqpgZxz2tSY7SinmyCIU2PJ+ygY4FPoBBnLpocMtrQ==", "license": "Apache-2.0", "dependencies": { @@ -292,7 +293,7 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.973.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.13.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.13.tgz", "integrity": "sha512-Oc81qauMPzUoTnAS2YKpNwY6sY/LUyQTEeaf6yP197WMxkEBQfcKLR1MFpD7+pNTubXnfkH6gwpji+Gc7iyD2Q==", "license": "Apache-2.0", "dependencies": { @@ -310,7 +311,7 @@ }, "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { "version": "3.1111.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1111.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/token-providers/-/token-providers-3.1111.0.tgz", "integrity": "sha512-JfljgoVtl+s3Qy21n9a7Z48uCQaOXcN74KJ3TEQfPoB293GrXFSt6HSQJF1sTZ8c/5QedEvd3NjJQMO4u9qa5A==", "license": "Apache-2.0", "dependencies": { @@ -327,7 +328,7 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.972.75", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.75.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.75.tgz", "integrity": "sha512-YPN6uoGDgjjjeVFZrcOeCJqmB6zpXoeeNgIjqe+DexJaWqdjVfCCe+VAZwli9Z2h8KhFW8oxkO39emQ1tyz/Mw==", "license": "Apache-2.0", "dependencies": { @@ -344,7 +345,7 @@ }, "node_modules/@aws-sdk/eventstream-handler-node": { "version": "3.972.33", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.33.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.33.tgz", "integrity": "sha512-1Dd5WyEE2Kb3HvY44u7Ob16ST2W6iutOqsQ8Y2hUmsL2mAH/STlGS1dS9h3IOE6L7Ld3AR2HzKJ6XeCMOw8Peg==", "license": "Apache-2.0", "dependencies": { @@ -359,7 +360,7 @@ }, "node_modules/@aws-sdk/middleware-eventstream": { "version": "3.972.28", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.28.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.28.tgz", "integrity": "sha512-Z1EDXnS01P7H5jVrUx+/dBqV0m7dta7bSxLclkOuDuS93pNNQm0IcT4YLUbuvWKPYNxbI8aTG0p5Br30GSKDgA==", "license": "Apache-2.0", "dependencies": { @@ -374,7 +375,7 @@ }, "node_modules/@aws-sdk/middleware-websocket": { "version": "3.972.51", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.51.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.51.tgz", "integrity": "sha512-jdgP3jR5Q96j1jjZ98GGwpGg1CBNFIO2YE+vXg8cg8PvNY4NvgQNYJsqDaRX2PYv5gSUX/+C0D58Fhspj9ELMQ==", "license": "Apache-2.0", "dependencies": { @@ -392,7 +393,7 @@ }, "node_modules/@aws-sdk/nested-clients": { "version": "3.997.43", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.43.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/nested-clients/-/nested-clients-3.997.43.tgz", "integrity": "sha512-bit+VpqWNyi3wHxFoTsTliNXimCSL2r2OeDTm7ZrG+YsTZ2D7ofDJ6r/t9PVBn80i6/v0X2h9Tgw6QP2MAKfPw==", "license": "Apache-2.0", "dependencies": { @@ -410,12 +411,12 @@ } }, "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.2.tgz", - "integrity": "sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g==", + "version": "4.11.3", + "resolved": "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-4.11.3.tgz", + "integrity": "sha512-2jY1tSpERfPfWqyBV2pH+iGFaghVsIJszJNsT7hxtQYhVJpWDyc0LqOWI+nXOxOAHaEfZ4PXXtp1wW1TGpHhkA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.33.2", + "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, @@ -425,7 +426,7 @@ }, "node_modules/@aws-sdk/signature-v4-multi-region": { "version": "3.996.45", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.45.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.45.tgz", "integrity": "sha512-bBuyztukzXq6plzFGHAWiQt0QXo+HL8b8lX5cFTzkez/74PtS1c0qPFCIVuHkyoT+miH2qOjAcm1/yoro2ESPA==", "license": "Apache-2.0", "dependencies": { @@ -440,7 +441,7 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.1048.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1048.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/token-providers/-/token-providers-3.1048.0.tgz", "integrity": "sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==", "license": "Apache-2.0", "dependencies": { @@ -457,7 +458,7 @@ }, "node_modules/@aws-sdk/types": { "version": "3.974.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.4.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/types/-/types-3.974.4.tgz", "integrity": "sha512-dSFDNG00MEz0/xl5gxL62giLd1iYyJsTxZ1I1DOj6lC+bbgLB4TRsYClJg3b62dhXT1uATzsTNXPnC+33EJV3A==", "license": "Apache-2.0", "dependencies": { @@ -470,7 +471,7 @@ }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.965.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.10.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/util-locate-window/-/util-locate-window-3.965.10.tgz", "integrity": "sha512-ycwH6Zd2GhuSqdXX9ihbCjeGTB6xOJs+O3+Jb8/zDG9978XU80qs75dfkPJRMNKe5MvBZPuNeFpd4JZKPoUF4g==", "license": "Apache-2.0", "dependencies": { @@ -482,7 +483,7 @@ }, "node_modules/@aws-sdk/xml-builder": { "version": "3.972.39", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.39.tgz", + "resolved": "https://registry.npmmirror.com/@aws-sdk/xml-builder/-/xml-builder-3.972.39.tgz", "integrity": "sha512-FTti8DS5MMWXNUWiRwXAJeYS+0GHHiMy0+7XOhcwk63ILHmfS2UFy2z/HNpZCSOJJ3P3dnWY6hfYNW3DF0nXUA==", "license": "Apache-2.0", "dependencies": { @@ -495,7 +496,7 @@ }, "node_modules/@aws/lambda-invoke-store": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.3.0.tgz", + "resolved": "https://registry.npmmirror.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.3.0.tgz", "integrity": "sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==", "license": "Apache-2.0", "engines": { @@ -504,8 +505,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", @@ -518,8 +517,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { @@ -528,8 +525,6 @@ }, "node_modules/@babel/core": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "dependencies": { @@ -559,8 +554,6 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -569,8 +562,6 @@ }, "node_modules/@babel/generator": { "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", "dependencies": { @@ -586,8 +577,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "dependencies": { @@ -603,8 +592,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -613,8 +600,6 @@ }, "node_modules/@babel/helper-globals": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -623,8 +608,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { @@ -637,8 +620,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { @@ -655,8 +636,6 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { @@ -665,8 +644,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -675,8 +652,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -684,8 +659,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "engines": { @@ -694,8 +667,6 @@ }, "node_modules/@babel/helpers": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "dependencies": { @@ -708,8 +679,6 @@ }, "node_modules/@babel/parser": { "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "license": "MIT", "dependencies": { @@ -724,8 +693,6 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", - "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -740,7 +707,7 @@ }, "node_modules/@babel/runtime": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.29.7.tgz", "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "license": "MIT", "engines": { @@ -749,8 +716,6 @@ }, "node_modules/@babel/template": { "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { @@ -764,8 +729,6 @@ }, "node_modules/@babel/traverse": { "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "license": "MIT", "dependencies": { @@ -783,8 +746,6 @@ }, "node_modules/@babel/types": { "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "license": "MIT", "dependencies": { @@ -797,8 +758,6 @@ }, "node_modules/@deepseek-ai/cordis": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis/-/cordis-4.0.1.tgz", - "integrity": "sha512-YBdskTU2Po1kru3GgcUWUbkTsPMA9LkSQDAY8rBkFJeajdgcQad3QPJZE26JyK99Xb6HaASvoXg2DSUTeN/0Nw==", "license": "MIT", "dependencies": { "@deepseek-ai/cosmokit": "^1.8.2", @@ -822,8 +781,6 @@ }, "node_modules/@deepseek-ai/cordis-plugin-group": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-group/-/cordis-plugin-group-1.0.1.tgz", - "integrity": "sha512-E1NThkFB3jn3TCqa6Oc++1zQHqLejF3W2wDwv2BlL3UEmgtBXL1K1j1koc+j676RuiOXtJkUJlPcOntRGKLWBQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", @@ -832,7 +789,7 @@ }, "node_modules/@deepseek-ai/cordis-plugin-hmr": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-hmr/-/cordis-plugin-hmr-1.0.16.tgz", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/cordis-plugin-hmr/-/cordis-plugin-hmr-1.0.16.tgz", "integrity": "sha512-S7VHfylDg1+Y5O6fdYYZu0KFRAj/snHywcFPnX3KmQYa/qv2Q8IXi4zAt9ABq0BJYqhNoqRlbpGMfIjabgXjKA==", "license": "MIT", "dependencies": { @@ -849,8 +806,6 @@ }, "node_modules/@deepseek-ai/cordis-plugin-include": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-include/-/cordis-plugin-include-1.0.6.tgz", - "integrity": "sha512-i1VXrZCbv6tk/iUgedCNjrxxArbWT3IvRZGB5sdqJ3ectnihivXXQbRZ8JJ73DSmAPvlMGmrbtjFAfm10yvXRg==", "license": "MIT", "dependencies": { "@deepseek-ai/cosmokit": "^1.8.2", @@ -863,8 +818,6 @@ }, "node_modules/@deepseek-ai/cordis-plugin-loader": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-loader/-/cordis-plugin-loader-1.0.2.tgz", - "integrity": "sha512-RIW9hoVyhYDWdCI9BsvtZccPde1ECLC4OAxupwowGTak78vwVTVdb3HezTSOK1Y1/Ax3Ru0LA1pYOB04CnTxIQ==", "license": "MIT", "dependencies": { "@deepseek-ai/cosmokit": "^1.8.2" @@ -881,7 +834,7 @@ }, "node_modules/@deepseek-ai/cordis-plugin-timer": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cordis-plugin-timer/-/cordis-plugin-timer-1.1.3.tgz", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/cordis-plugin-timer/-/cordis-plugin-timer-1.1.3.tgz", "integrity": "sha512-IOkey1VNmJwYa5U8bksyMOnM7mtirqjjbWLr3xA8QybLMK0sMooG3a6iJwtvd8P3MFwo3FQibEg+JPixp37MEw==", "license": "MIT", "dependencies": { @@ -893,14 +846,12 @@ }, "node_modules/@deepseek-ai/cosmokit": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@deepseek-ai/cosmokit/-/cosmokit-1.8.2.tgz", - "integrity": "sha512-muBOKtSrUKU5m/xpq8ZXWL6hQ/jgd4PhU2PqH97bcxIiLEJfNwZOGQEx4t/aS/GgxRAR+ra9pMHPMtTHU4sqqA==", "license": "MIT" }, "node_modules/@deepseek-ai/dsh": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh/-/dsh-0.1.0-rc.8.tgz", - "integrity": "sha512-VQU5NlomrKLRgcXuOf+sxWFvqxPA8q9vMhrKPlPPXiOJEhGlGlAdiyxZvZxkCVI+v0zbhe21cY3/luLyxpSzzA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh/-/dsh-0.1.1-rc.1.tgz", + "integrity": "sha512-HVauMT0F7MWUctkxzBcu5PMFc8j0lm0kX+4IbcUsA7Oh+/xv7xhigEDP0SaSOM/kR48U/BldHbZru116DcZz0w==", "license": "MIT", "dependencies": { "@deepseek-ai/cordis": "^4.0.1", @@ -908,60 +859,60 @@ "@deepseek-ai/cordis-plugin-include": "^1.0.6", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", "@deepseek-ai/cordis-plugin-timer": "^1.1.3", - "@deepseek-ai/dsh-agent-instructions": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-tool-presentation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-app-boot": "^0.1.0-rc.8", - "@deepseek-ai/dsh-base": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-cordis": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.8", - "@deepseek-ai/dsh-command-compact": "^0.1.0-rc.8", - "@deepseek-ai/dsh-command-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction-basic": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal-round-driver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-headless": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-mcp-client": "^0.1.0-rc.8", - "@deepseek-ai/dsh-persona": "^0.1.0-rc.8", - "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.8", - "@deepseek-ai/dsh-pwsh-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-schedule": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.8", - "@deepseek-ai/dsh-terminal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-terminal-bash": "^0.1.0-rc.8", - "@deepseek-ai/dsh-time-context": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tmux-context": "^0.1.0-rc.8", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-ask-user": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-bash": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-bash-persistent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-cordis": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-fs-search": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-pwsh": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-pwsh-persistent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-ralph": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-skill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-subagent-control": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-web": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.8", - "@deepseek-ai/dsh-web-app": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.0-rc.8", + "@deepseek-ai/dsh-agent-instructions": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-tool-presentation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-app-boot": "^0.1.1-rc.1", + "@deepseek-ai/dsh-base": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-cordis": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cmdline": "^0.1.1-rc.1", + "@deepseek-ai/dsh-command-compact": "^0.1.1-rc.1", + "@deepseek-ai/dsh-command-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction-basic": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cordis-client-runner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-fs-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal-round-driver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-headless": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-mcp-client": "^0.1.1-rc.1", + "@deepseek-ai/dsh-persona": "^0.1.1-rc.1", + "@deepseek-ai/dsh-plan-mode": "^0.1.1-rc.1", + "@deepseek-ai/dsh-pwsh-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-schedule": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill-filesystem": "^0.1.1-rc.1", + "@deepseek-ai/dsh-terminal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-terminal-bash": "^0.1.1-rc.1", + "@deepseek-ai/dsh-time-context": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tmux-context": "^0.1.1-rc.1", + "@deepseek-ai/dsh-token-meter": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-ask-user": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-bash": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-bash-persistent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-cordis": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-fs-search": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-pwsh": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-pwsh-persistent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-ralph": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-skill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-subagent-control": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-todo": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-web": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-workflow": "^0.1.1-rc.1", + "@deepseek-ai/dsh-web-app": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.1-rc.1", "commander": "^15.0.0", "js-yaml": "^4.2.0", "node-addon-require-builtin": "^0.1.4" @@ -971,80 +922,80 @@ } }, "node_modules/@deepseek-ai/dsh-agent": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent/-/dsh-agent-0.1.0-rc.8.tgz", - "integrity": "sha512-fOl46ZvzoYHalrlyfOJAHNhzyKeVDTUnZZKNSJEr9GY/98WJTjcV21agVEofTXldkJ7a/ws2HpJkVNJVFMtslg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-agent/-/dsh-agent-0.1.1-rc.1.tgz", + "integrity": "sha512-xE+oni6Ig32Q7QspcUVQqGOa9QYiWwwaqG8ci43+oc2vfslXbD9RJ+qnk9XFKidnVn6cwB95Aw4eeivy0ufDCg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-agent-default-model": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-default-model/-/dsh-agent-default-model-0.1.0-rc.8.tgz", - "integrity": "sha512-FSmgVy8yeVYx3krUwfWZR3JokLD202FSuEd/ZfGdxA+BhOKAOfhNv539kujatVqXyzCG3XiRNda7zWxCh2h7/A==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-agent-default-model/-/dsh-agent-default-model-0.1.1-rc.1.tgz", + "integrity": "sha512-PZl4y+vW3nhaYljebQ0mZELKvfw61neybWeuMYBdprrM0TnjbYStY0drxynowxqaGoBPUO5Ty3q9Px4hbUYaLw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-agent-instructions": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-instructions/-/dsh-agent-instructions-0.1.0-rc.8.tgz", - "integrity": "sha512-T+JER2gUZbopOxNeHKUE7EfNof30yihsi7GXKB/lOLoy1XMvd5mlzjSHA/OzqjLxiZyyN4V7XAGURApVD3Z7sw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-agent-instructions/-/dsh-agent-instructions-0.1.1-rc.1.tgz", + "integrity": "sha512-/BZNgV2qnwERp4EpH0Lu/U6RWUDEu+u7W0Xu9y3/b0PvGsBz5oeucPnaFOKEXIIHDVnuFvo2513sYOsaoj0xWA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-agent-loop": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-loop/-/dsh-agent-loop-0.1.0-rc.8.tgz", - "integrity": "sha512-6Vg5oLy3UZ6lJKMPxldqqBylKSMOpbV/FRrqzDqn3hGdksYBzt9K2hUJm/rE2RyguYKUKFPm2hExs0nn4HKmWA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-agent-loop/-/dsh-agent-loop-0.1.1-rc.1.tgz", + "integrity": "sha512-Cu/z/oT5DPV6jDU9+X1Hbi0ex4OPHMF7eK9+sMOjvgJSlXJWU2Htg7/XfFEOLMkrerA48CopieWrbNLSL1pFGg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-agent-presets": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-presets/-/dsh-agent-presets-0.1.0-rc.8.tgz", - "integrity": "sha512-7h+kE0KDrJCk2Y8GAqF4fu4YqZmFi5U8/AarFkGUqRI3HDugD6oYf05c7ZWNF7lQXh1OmwmrSbuPhT/YXJapOg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-agent-presets/-/dsh-agent-presets-0.1.1-rc.1.tgz", + "integrity": "sha512-m+IitPjH4knw1fWzIv/6AqkLj6vRH956oop0okNAa5tkbyz9B4XwR7I81+2ifqc7btp2e5TIBl8lgx4WyxUbhg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1054,90 +1005,90 @@ "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-include": "^1.0.6", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-atomic-write": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-agent-tool-presentation": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-tool-presentation/-/dsh-agent-tool-presentation-0.1.0-rc.8.tgz", - "integrity": "sha512-DQouZBh0yjKy8bi0EHQZrZ1B0E+Sc321o5oIyrrmL3hh1sbBsWVrnTvwKPP+SU7J6gnIzyITJ7qEV7pcCGOB2w==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-agent-tool-presentation/-/dsh-agent-tool-presentation-0.1.1-rc.1.tgz", + "integrity": "sha512-XH7Fik0+ktVGzx4FEvFKDDYJNYU/AhQfcyPi/BNhIegBPCXAdLTbomwh3bb5FBhMiYcwq1bPQknxS8kN+tmuFA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-anonymous-user-id": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-anonymous-user-id/-/dsh-anonymous-user-id-0.1.0-rc.8.tgz", - "integrity": "sha512-vUESbXtDdqIyelCNqX3ijOfqNfw65iSaJaqzfiqQhmSd9ZrNJ1fPUHl8FoW1BdfK8FjrDyh32R6BtuVpI7Zdhw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-anonymous-user-id/-/dsh-anonymous-user-id-0.1.1-rc.1.tgz", + "integrity": "sha512-SBXf0wg4HO9PDTb+GFJuSQ8OzARDojF0UhoveD/j1roF6X6pnRjkDsRaYUWg3Uwmim3Bc5Dckutgu9p14hFn1Q==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-api-gateway": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-gateway/-/dsh-api-gateway-0.1.0-rc.8.tgz", - "integrity": "sha512-rNA9+Sq3lXFDmyoFLpXNbcuWg7iFeepCwDi+jt1oGjwZTdZJ2nEWpU6GKlOiqadQjHYzfwEbCqmcuJy32qke/A==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-api-gateway/-/dsh-api-gateway-0.1.1-rc.1.tgz", + "integrity": "sha512-+fi1Zo1bY1dB+Qr5Q+iLxr1kSL9sigWhdMiK0tV9dAPY4BxOunwjiTh614P6jsRTvDAh/VDaHEQsHcv1T4YY9Q==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-api-remotes": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-remotes/-/dsh-api-remotes-0.1.0-rc.8.tgz", - "integrity": "sha512-s/zmFmU6R+dDxUWbHucIyfVgJG4v8kXa3YRjwjMO+Bu871ZG5Zsht6cvRqeSyu0A/Gs06ZfKYeKE0sdbCZ1NiA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-api-remotes/-/dsh-api-remotes-0.1.1-rc.1.tgz", + "integrity": "sha512-TOeb0DsrjUyZIlL/Ih1loEg2UelVQdLX9Vck6LgCjZcH7UJvQdYuMKt5G8Tbvms3ZHvlpvCc7kue4sQlZ9rKDA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.8", - "@deepseek-ai/dsh-api-gateway": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.8", - "@deepseek-ai/dsh-file-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-presets": "^0.1.1-rc.1", + "@deepseek-ai/dsh-api-gateway": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-credentials": "^0.1.1-rc.1", + "@deepseek-ai/dsh-file-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-message-feedback": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-app-boot": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-app-boot/-/dsh-app-boot-0.1.0-rc.8.tgz", - "integrity": "sha512-DS63o1PhX2Gvqdgl6Wd8vZnLl0qo8gJ9LpSHXeJBJL9HITpLPhdVYE3X6S0icIYdbGO2plNyhxVJOSN6ibO7VA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-app-boot/-/dsh-app-boot-0.1.1-rc.1.tgz", + "integrity": "sha512-gef6HqCpdf/aLXH8G4TZ+fIxtq+ebiKDrtr2pslFiopWWrxEvqhZdNPgpiC9A8IDfX3waOxcNxhvmlPHpV2moQ==", "license": "MIT", "dependencies": { "js-yaml": "^4.2.0" @@ -1148,10 +1099,10 @@ "@deepseek-ai/cordis-plugin-hmr": "^1.0.16", "@deepseek-ai/cordis-plugin-include": "^1.0.6", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1" }, "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-hmr": { @@ -1160,30 +1111,30 @@ } }, "node_modules/@deepseek-ai/dsh-atomic-write": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-atomic-write/-/dsh-atomic-write-0.1.0-rc.8.tgz", - "integrity": "sha512-SWP+NAat3oteaPi47zLPz4vxeYCHNVmFpN1aeKDuPHpe/ouNTl+WcyIONAJ+1MbZ+8APWhSaJIVu6ORJEUhVGw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-atomic-write/-/dsh-atomic-write-0.1.1-rc.1.tgz", + "integrity": "sha512-8cSMtRK2+5OcyvRhyJRI6lVVuIp+r7MBKGlfESOIdK50OWnVUM35IvaWXuwQrMOI/xJDihyDF+KGF1o0aM1vhg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-attachment": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.1.0-rc.8.tgz", - "integrity": "sha512-cCrg4WWiav7pGtbdU8dJTpAG28cPnkWVB2YPOrlBCgBbhQziGcG9Dv67Ti6L3PI4OQKC55gYBFinQghFO/7FGg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.1.1-rc.1.tgz", + "integrity": "sha512-R5xKO2z+91Ze25E+ghk3qDJf7ZA4t2sqMF1wusp2/6KrF0UzhCpGt/SWtdjRXSwz6DTjsAfZzpPC5D+2EmuHxA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-attachment-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment-local/-/dsh-attachment-local-0.1.0-rc.8.tgz", - "integrity": "sha512-TPsDbDPA8yoE3hw1MtrW61AMh72oMiCY+rkO3bDnvc4MtGwKvXcHWtbNPeVpLgMeznaXsnTU3GUp9Fa6PXdp8A==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-attachment-local/-/dsh-attachment-local-0.1.1-rc.1.tgz", + "integrity": "sha512-KGJVu0q3yPlcfoPg+4FGTI1O8sS08B/POQ4jLQvKG7sjx3kXXx/S8xD5BTeFuYijM3mSCCC96AI4lha28v+04Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1191,145 +1142,157 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" + } + }, + "node_modules/@deepseek-ai/dsh-authorization": { + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-authorization/-/dsh-authorization-0.1.1-rc.1.tgz", + "integrity": "sha512-cf8LRUJJgpr88UVOPViQviKO+LJ92kdh465c4BvbO1HJDBHXME6fAgkDpDs+IbKdrdt3KWYqI/x2UK7tnFWqXg==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-credentials": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-base": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-base/-/dsh-base-0.1.0-rc.8.tgz", - "integrity": "sha512-aMjXT6d5t8SGQg24geOSX6O0ky+hJLijhzZklDcICrBvGSKXvuS8jxLOcL5u4s4pFCODXhuOpvTfFuUhN2RK3Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-base/-/dsh-base-0.1.1-rc.1.tgz", + "integrity": "sha512-fJ4IlNFjAHj+5PTByTAs6fEj7GFirNmpL0eYA+KTwK5SGEupJ0COVCBOsDeNMUJZspsDKptkZm0szo2u09Q0MQ==", "license": "MIT", "dependencies": { "@deepseek-ai/cordis-plugin-hmr": "^1.0.16", "@deepseek-ai/cordis-plugin-timer": "^1.1.3", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-instructions": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-loop": "^0.1.0-rc.8", - "@deepseek-ai/dsh-api-gateway": "^0.1.0-rc.8", - "@deepseek-ai/dsh-attachment-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-bash-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-command-compact": "^0.1.0-rc.8", - "@deepseek-ai/dsh-command-feedback": "^0.1.0-rc.8", - "@deepseek-ai/dsh-command-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction-basic": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-credentials-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-fs-observation-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-fs-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal-round-driver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm-deepseek": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm-pi-ai": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.8", - "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.8", - "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.8", - "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-repeat-tool-reminder": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-checkpoint-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-query-sqlite": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-telemetry-otel": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title-first-prompt-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings-file": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill-badge": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.8", - "@deepseek-ai/dsh-spill-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-spill-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent-fork-in-process": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent-spawn-in-process": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-bash": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-call-timeout-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-fs-search": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-pwsh": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-ralph": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-skill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-subagent-control": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-subagent-report": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-web": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-loader": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.8", - "@deepseek-ai/dsh-web": "^0.1.0-rc.8", - "@deepseek-ai/dsh-web-search-deepseek": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.0-rc.8" - }, - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-default-model": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-instructions": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-loop": "^0.1.1-rc.1", + "@deepseek-ai/dsh-api-gateway": "^0.1.1-rc.1", + "@deepseek-ai/dsh-attachment-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-bash-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-command-compact": "^0.1.1-rc.1", + "@deepseek-ai/dsh-command-feedback": "^0.1.1-rc.1", + "@deepseek-ai/dsh-command-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction-basic": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-credentials-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-fs-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-fs-observation-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-fs-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal-round-driver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm-deepseek": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm-pi-ai": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm-retry": "^0.1.1-rc.1", + "@deepseek-ai/dsh-permission-presets": "^0.1.1-rc.1", + "@deepseek-ai/dsh-plan-mode": "^0.1.1-rc.1", + "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-repeat-tool-reminder": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-checkpoint-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-query-sqlite": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-telemetry-otel": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title-first-prompt-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings-file": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell-env": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill-badge": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill-filesystem": "^0.1.1-rc.1", + "@deepseek-ai/dsh-spill-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-spill-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent-fork-in-process": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent-spawn-in-process": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-token-meter": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-bash": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-call-timeout-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-fs-search": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-pwsh": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-ralph": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-skill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-subagent-control": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-subagent-report": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-todo": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-web": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-workflow": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-loader": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-questions": "^0.1.1-rc.1", + "@deepseek-ai/dsh-web": "^0.1.1-rc.1", + "@deepseek-ai/dsh-web-search-deepseek": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.1-rc.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-bash-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-local/-/dsh-bash-local-0.1.0-rc.8.tgz", - "integrity": "sha512-vMf3dMRrvVvwWCLJxobYONSebPtWqy2ZZKpRZ6o5fBrZbM88irbvL6F/6r/mu4ADTIDigUtpoxlRpOEQKbSuTg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-bash-local/-/dsh-bash-local-0.1.1-rc.1.tgz", + "integrity": "sha512-e0hgZMtQYPGSjB2gCJ6nTMlfKF+NXCE9IN6Z3TrpWMF9CQmqqqbyrUcY3+/JTVsoNoUk1aAMxMbXNFtGcYqEng==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-bash-sandbox": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-sandbox/-/dsh-bash-sandbox-0.1.0-rc.8.tgz", - "integrity": "sha512-gCFrmFwYyxjXJsSRrzs5RbvCli0I0Tn9JAJEHCWSskE8x9iCVU7ljtmrKvgRYr0J4YeXwzteNSfNhlJqasu/QQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-bash-sandbox/-/dsh-bash-sandbox-0.1.1-rc.1.tgz", + "integrity": "sha512-kH/rW2aXxlFoKpF+eLJcfO/WYvQxmqJYmmHzEZbJgbzbs6V6t1O2PMHnjIRvZXgzP4jXeb3a4+YwJzjfxVX13Q==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-bash-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8" + "@deepseek-ai/dsh-bash-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-brand": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-brand/-/dsh-brand-0.1.0-rc.8.tgz", - "integrity": "sha512-402aUAfHxIZJrArBV4gDf0I/A/69A/By26FX6HTIOyFmCnB4wUBKh8jnglz1CorKWdZy8AKldAhh8HQhQEbGOQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-brand/-/dsh-brand-0.1.1-rc.1.tgz", + "integrity": "sha512-u5+q1x5koviWTTaOiOUA0629ZNEKaRl2hu7iiGArzhvj+CUz7abh2b6IF3+xI4AMSHyvn+mOWN9Vwa2WVfwGLg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-connection": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-connection/-/dsh-client-connection-0.1.0-rc.8.tgz", - "integrity": "sha512-O1Y1NmkvJjpR/rCYkzulRrKbFwUbpMlINR4G6fbpGXaLy0VzTqN+ptk0b3wJ4RrnKPi4WWLKNNdV647Fg/1sCw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-connection/-/dsh-client-connection-0.1.1-rc.1.tgz", + "integrity": "sha512-43j158P+X9hjJMZ76NsJsQTTDo7ws+aW5XMq3PmdJRVY6h15JsPrfALNosjaeiJjqxUXKSNOfHk7Oq8vJejsyw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1337,20 +1300,20 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-apiproxy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-hmr": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-hmr/-/dsh-client-hmr-0.1.0-rc.8.tgz", - "integrity": "sha512-Olzlpiw+2VIhNOZVEgi22b2U0jSv6HciAQpKj41TggI7oV+jhRDC2GuYFJoRQ8XBs3mcJCLG0DZtAcGrRP8n9Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-hmr/-/dsh-client-hmr-0.1.1-rc.1.tgz", + "integrity": "sha512-VQVrUtiBLB1FIvjlVBHx3OmK/TpR/nMoDqgxXFV9d0AAs3LdL20r9pSDcngpO0dhDI26LI9dcsgmVIp0MmV5AQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" @@ -1358,45 +1321,45 @@ "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-modules": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-locale": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-locale/-/dsh-client-locale-0.1.0-rc.8.tgz", - "integrity": "sha512-S8ztym/oFU1aWPDtSZLTGWfprUBIuhfOrRNlw/qMAwhavJiQU/Ag0plg19JffGiOMAQuz2BU2n2mW/xhbpA5Vw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-locale/-/dsh-client-locale-0.1.1-rc.1.tgz", + "integrity": "sha512-siclYHjadMhc+Wh0wmV5twiu9oyBE719POQ1F2nM+H0mfScokHLqpBHkml8AJqIl0rkq3dxtkC19kUoBEJvNTQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-modules": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-modules/-/dsh-client-modules-0.1.0-rc.8.tgz", - "integrity": "sha512-K+uDZSmSbpmHFpvrKkdctHHDIjimv1NWDZoc7CYy7QIk0Vuis4jShDau6H5L0B9TScWBDyXAz/R7rXttFlwseA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-modules/-/dsh-client-modules-0.1.1-rc.1.tgz", + "integrity": "sha512-cdBFlFE8sb+vD/w3gYKTu8LH+yH4OyPHXhxJTkzhQJF3bAhdC24k25mogaxkpZXg4rcHS16zWyCriZaOGQRgsQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-runtime": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-runtime/-/dsh-client-runtime-0.1.0-rc.8.tgz", - "integrity": "sha512-wW/nktO/GVbGO/k163NlyJab/rK4D6xS5EL0bhYw4ojF1mxmWfrb3RUEYR5LcEUpFx/yXUHsUSgeO1ezmgIrvw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-runtime/-/dsh-client-runtime-0.1.1-rc.1.tgz", + "integrity": "sha512-re0dq+vXlGIGMs5qQHJLMHael8FN+9zKTnGk2M0BQUH4fGr3jTOBUvoKUztbjW/DJP3l3f1k6uoDj2ri3DA0nA==", "license": "MIT", "dependencies": { "immer": "^10.1.1", @@ -1404,91 +1367,91 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-apiproxy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm-retry": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-agent-preset": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-agent-preset/-/dsh-client-ui-agent-preset-0.1.0-rc.8.tgz", - "integrity": "sha512-z+okJSOT2/uAA4oomx1WNNl/2k9HsoNDmtewOeQVfSy9C8Ey9YBoVoiSQDsYyDHhesxxlBI8RMLU44Pj/w1uug==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-agent-preset/-/dsh-client-ui-agent-preset-0.1.1-rc.1.tgz", + "integrity": "sha512-z7u+1fFUURCQrpBXdqtcolPYpW1w6myFZBGMMgZeDpHP94p1CUsJ1KM/AP1FXJqnG4QmtbXaVQx6jR0LjAYdYA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-attachment": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-attachment/-/dsh-client-ui-attachment-0.1.0-rc.8.tgz", - "integrity": "sha512-TiKZEUGd22AFxkWpgQCLW9VmuSgWQ11RlIQd0941wPAc4RDZxtkjQWDMOlvRS/m8Oqod/5oKr3U6WRCZKS81vA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-attachment/-/dsh-client-ui-attachment-0.1.1-rc.1.tgz", + "integrity": "sha512-mOZQO7jozY/kX7m8jHm6h9VbXYMKPVAyhtJI0wPJXzL/DoqCvyN/SBaQ88Me+OM4bgn/Io3yj54r2wAoxdp7eA==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-brand-official": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-brand-official/-/dsh-client-ui-brand-official-0.1.0-rc.8.tgz", - "integrity": "sha512-eHzJkJGOKlQpap6uYaAZSh62MyJFEoPX8EvIp/kV3YHFDr4bZNc7Yg+ZLMaEXfIjPXKp26FhPiCIia9SP56n8A==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-brand-official/-/dsh-client-ui-brand-official-0.1.1-rc.1.tgz", + "integrity": "sha512-CuWaMd44IEpF9878yZdI13Vd/Ky8hlEag4KXWs5G3C01eAQTS2oM0FyIwohtNnIOPqo2LygHWKpSqKYfDYTvIg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-commands": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-commands/-/dsh-client-ui-commands-0.1.0-rc.8.tgz", - "integrity": "sha512-nMDF0MbRM03AEmQJzXCbXQWZxSfVPHBO0z+9DqR6LgGXshYLkzVMp1zkfvqLs5QwFAwDSci4vi/GONJOBSL5WA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-commands/-/dsh-client-ui-commands-0.1.1-rc.1.tgz", + "integrity": "sha512-ht3Nd+kczdVK5/w50xp/qpTozwiHTCZW5/R9w7093DapF3mAYQ7Hd0q2NmonNAIchVixj5gbB4zktUbdIaMOHw==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-conversation": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-conversation/-/dsh-client-ui-conversation-0.1.0-rc.8.tgz", - "integrity": "sha512-GnQSE47/goSm1UzxQpYQrQnMJLyTmYFH6NENdrOxrVJxQnB55ruactgM1kVwfFnc/WUQVYy0599AK7pxjbxjMg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-conversation/-/dsh-client-ui-conversation-0.1.1-rc.1.tgz", + "integrity": "sha512-xHe2R37UevVNHV0/ieHPdFHuZWTlYIuEYBowLBcQ51Tz2XurWnjcM5CLFr/AChkIuw06dk/Ywm4nwjcCBKgCBQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1496,272 +1459,272 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.8", - "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.8", - "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-layout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm-retry": "^0.1.1-rc.1", + "@deepseek-ai/dsh-permission-presets": "^0.1.1-rc.1", + "@deepseek-ai/dsh-plan-mode": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-stats": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-token-meter": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-todo": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-cordis": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-cordis/-/dsh-client-ui-cordis-0.1.0-rc.8.tgz", - "integrity": "sha512-NvaSJxqC+HNPLPYPINHzJGRHI427mHSB2aaTGoyc9EFrYVJjvKpNu1QusWwObae5Y/Tx43I2NpFKTAcNVPXkOw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-cordis/-/dsh-client-ui-cordis-0.1.1-rc.1.tgz", + "integrity": "sha512-U1T7BRdH5TaVg1W2YcBUAQleFEw9f47DFSAYEpyrcZRJX21p9/Zh+ZZErQAR9A8BbdiYOP0GdUJ28EPiEQfxtA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-tool": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cordis-client-runner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-deliverables": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-deliverables/-/dsh-client-ui-deliverables-0.1.0-rc.8.tgz", - "integrity": "sha512-b0XZ/V7FPpTTtmHoKNEVOgl9bJGXGqktzMNNJgifHGl/Us1nNnQVDhM9XDbuUV5iXFPnRrKsR29OTnuTB+txZA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-deliverables/-/dsh-client-ui-deliverables-0.1.1-rc.1.tgz", + "integrity": "sha512-q3b8QGGLvf/zlztdFqmAonphDbt66GbDifOvTXp+U9Stc3cy2wAvImyFUMwxM1RWdI9tdozrJBu3q/u7UVrVsw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-directory-picker-browse": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-directory-picker-browse/-/dsh-client-ui-directory-picker-browse-0.1.0-rc.8.tgz", - "integrity": "sha512-sjQcMuut8CRjqnFZHzX1Zzs1zISDlp/gYQVM9Wkyt9KF+XJfV5pHP0KTHZHwOslAqt2OJMnE38uW2yVncLg3sA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-directory-picker-browse/-/dsh-client-ui-directory-picker-browse-0.1.1-rc.1.tgz", + "integrity": "sha512-g/LzjEqk9Ba+RMBCKYCAlyAadG9/9biEJQepTDmbVUrfjo6rVS9tkpuMYrwpHbV94r3wSCBYQ2BXYM/VubgC/A==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-workspace": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-directory-picker-native": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-directory-picker-native/-/dsh-client-ui-directory-picker-native-0.1.0-rc.8.tgz", - "integrity": "sha512-UPR5kSjfMGjLpO41fXXVxcen9Bq9eCzonStnhqMMk/6zC2EQUDkRs+KhYmaInkHI/CMjdTBBqBPRwjFG2iEsYQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-directory-picker-native/-/dsh-client-ui-directory-picker-native-0.1.1-rc.1.tgz", + "integrity": "sha512-PrudUDCCLHLKt+QGODE3udg7Ce57s5mChZa2F0g6Anp1TYpRmRWbR/ErkyeDMrvAGllg0PqeVFGzaJ5O535gGg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-workspace": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-goal": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-goal/-/dsh-client-ui-goal-0.1.0-rc.8.tgz", - "integrity": "sha512-kAs6DktlELshs27S3nnjzciK9bGhL2b6RXmZ/mUNYwgiYxeYY4/QYynSNbD0ZQINe0VeGy6yQTv9dbqDBArndA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-goal/-/dsh-client-ui-goal-0.1.1-rc.1.tgz", + "integrity": "sha512-hQZ27T1+nX5B6S1ookTFpnobAQY9XrsFE7V0XXOTzGbDM6JbMhndgA8XnuOoAjVl84c8AkyBTJ6QxInJkF3HJw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-input-trigger": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-input-trigger/-/dsh-client-ui-input-trigger-0.1.0-rc.8.tgz", - "integrity": "sha512-uVJEZ1ftUdMemLvNf17gzB6ThYw0DL4k+0kcQrUPc6LHNQ2ZeuuvOz/931OlqzzUKMtlAGZgy0LvWyJ62LlSog==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-input-trigger/-/dsh-client-ui-input-trigger-0.1.1-rc.1.tgz", + "integrity": "sha512-QvseCqtZXE+/5DGHEQFG0FFtXU/kBkCEMODZOwl4bJwRWGjM5xEpHfS4Uqkf8x0VXsIbjE6txCmcByRLknkmuQ==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-file-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-file-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-jobs": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-jobs/-/dsh-client-ui-jobs-0.1.0-rc.8.tgz", - "integrity": "sha512-gCJR9ymswAZa8OiyZQUKa9GpxRT2sP76tfqBGcF5pRN0xOKudlREM6xD3as2knY5EZELW5qQMVKlVVJZ2Uu7fA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-jobs/-/dsh-client-ui-jobs-0.1.1-rc.1.tgz", + "integrity": "sha512-baib2zmrD76/WMyBfbEzLSZMRAxSBYwgjTw1chDCo/2dYywwM7udfyb5WNuzBa4/e66xX0PibqEmsHFAW4mTww==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-layout": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-layout/-/dsh-client-ui-layout-0.1.0-rc.8.tgz", - "integrity": "sha512-tbHawbf8FsJqdwnXrU46V8u13bfAFVQQf0hA0OXH4k0PiLiThdZgQFn/T94+56JMUzD1QLqe7DLmNz29cwmjvQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-layout/-/dsh-client-ui-layout-0.1.1-rc.1.tgz", + "integrity": "sha512-cqZj1SRW7Z5I6imNt0BjVu+S2SztNi/EQ2vjl+OqyVV6jLxJKYIhYIFOZaZTHuUpMb6NkxIO8qfPDBqFWE9F5Q==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-theme": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-message-feedback": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-message-feedback/-/dsh-client-ui-message-feedback-0.1.0-rc.8.tgz", - "integrity": "sha512-tzm/vvhysNa3+1BlTnuj3WJit5+u8U1NDecLqMPTm6U1P2s2bjKtvUpmMNqk+AdeYGYcJjXPadLEuWSNsIWFlQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-message-feedback/-/dsh-client-ui-message-feedback-0.1.1-rc.1.tgz", + "integrity": "sha512-DcaHmqROaU52mKM1ZuswWMNfzSABl0BrGST464KIKEzqHw/KOshrSKyeWi/j43I0TT8PeaiV5P+5m89QwPsdUg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-message-feedback": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-model-selection": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-model-selection/-/dsh-client-ui-model-selection-0.1.0-rc.8.tgz", - "integrity": "sha512-ODRo7IX4VKkgy6C0ibElP5p1Ek6NBm6Qz6S95cZQH2J+PXWTb57/6UvNfxqyst8nFh1wll4oRb1m4fm6MU/fqA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-model-selection/-/dsh-client-ui-model-selection-0.1.1-rc.1.tgz", + "integrity": "sha512-VLn/XtMePhKMs2ozaoIUbgwsoLMQxfVNt96FZJEOCzctnXzlhehf1nVbEDoKR488N6yWWwKEXZSO6ySAuijZgg==", "license": "MIT", "dependencies": { "clsx": "^2.1.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-permission-presets": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-permission-presets/-/dsh-client-ui-permission-presets-0.1.0-rc.8.tgz", - "integrity": "sha512-mYF/TX4GVJgRxDYPIk/iQKkGXz8qHkfFJE3GqIw5E27g+Msfg8AEGqfWEPp4CZeIK/3zcgpMLzgjMLOliWZ2dA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-permission-presets/-/dsh-client-ui-permission-presets-0.1.1-rc.1.tgz", + "integrity": "sha512-yOiXg2btX/htZJ5Z6R4NffOvJAKFRI8v0HczblqgGaHeSwYjZW0vasZ4dfs3oAWJxzCZOfeLHGNXthZXmHnQMA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-permission-presets": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-plan": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-plan/-/dsh-client-ui-plan-0.1.0-rc.8.tgz", - "integrity": "sha512-OmCuuYCqSlbYqd4s781WipQNKWdHGUn8TPIxrKrcbe94vJacuBtIUIJkDi48dy0IimI+ln/eHxD9WC/9+bJEmA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-plan/-/dsh-client-ui-plan-0.1.1-rc.1.tgz", + "integrity": "sha512-byrSXTZnICVE7mtD0g+l4blWhNAUKFcN2y8akQObhLeOjxWSw7nTLxkpsjEyrHe8M0p+ciX8lLCmUn1N7jNsVQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-plan-mode": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-reference": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-reference/-/dsh-client-ui-reference-0.1.0-rc.8.tgz", - "integrity": "sha512-9qQYmOqG58qlsYNipOMsrL+Ay5Imx8lHJk9GV1rW++LGl6HMb6V1qZBHGIAwO/KOOInnJSEZE65DYB54r+z1Fw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-reference/-/dsh-client-ui-reference-0.1.1-rc.1.tgz", + "integrity": "sha512-hvsaGrNJjMOfnRJ5Uawhh0Ujf8zC69cSWHV4i5F7S7aSNhejrWDZkMIiHLV5hvg9GgRbzbQjdcCij8nJz2KpNA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-file-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-file-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-renderer": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-renderer/-/dsh-client-ui-renderer-0.1.0-rc.8.tgz", - "integrity": "sha512-/MpR9i++feUFNzJgCChLfct1RphTPJ1WKfZrIsczjyOAZNBzAM5LRjpvM0ZO5Vg7rs7id+PLJYuUKy2e2V5aAA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-renderer/-/dsh-client-ui-renderer-0.1.1-rc.1.tgz", + "integrity": "sha512-vF4l1it4InbuppD7Nnm7Nc1nWteqowTYBsooBdiRfwjet1fPL6z/Wmd2eV7tUgPNZZcWpunkQLhIzR+4D+Ho+w==", "license": "MIT", "dependencies": { "use-sync-external-store": "1.2.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-settings": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings/-/dsh-client-ui-settings-0.1.0-rc.8.tgz", - "integrity": "sha512-qSOjpmglOPsLzx6Q5yysrU4c4W6QWFOkyVyqePA5lNPOdny2MH19qbuNleQHbiBo4Zadh/dtBn/SuNRfSp+pjw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-settings/-/dsh-client-ui-settings-0.1.1-rc.1.tgz", + "integrity": "sha512-ORGAHRQ6aTWVlUYYTqlAmV5CI6/E1OCoJsE7rbeufA0zGagUx/bAgK1l6I3bzSGOVDxJ6ZRhwOxJWg/3K0ZBig==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-settings-general": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-general/-/dsh-client-ui-settings-general-0.1.0-rc.8.tgz", - "integrity": "sha512-lGGLCV17yUhKTHFAL+LWNY6LICLHmL614TbgaTFC80HWqeduURKzHU7a2PoySyMC2AOvYGpKjIRNUfifhv3aZw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-settings-general/-/dsh-client-ui-settings-general-0.1.1-rc.1.tgz", + "integrity": "sha512-xFRY1mS71lRJtQiBtI/EFE6R6JymgjO26Co3h6zPwlhMbiLvWlq0hL919j8YQsiHOUEHdlLxk2FnjJc2eyYBTg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1769,115 +1732,115 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-settings-models": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-models/-/dsh-client-ui-settings-models-0.1.0-rc.8.tgz", - "integrity": "sha512-6iTLiQ4+4ErqV2e0Lxeunr1Q0JLFJ3EcJ1KcxvT0mEy5xzZuilX7KJxsBWq11q3Wy/I0MYhbHZzZC+d42mFM4g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-settings-models/-/dsh-client-ui-settings-models-0.1.1-rc.1.tgz", + "integrity": "sha512-E9CXWfP9lrdaeYlZNhCSYcl+nIirG/cO+r5je6rOPmfdvupyvkdrR5w+Co0yDKjMjz9NsZ1qyxNa7MFxC3GJwg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/-/dsh-client-ui-settings-plugin-inventory-0.1.0-rc.8.tgz", - "integrity": "sha512-IiixKrJbNqn4D8kvpSIRbxsfetEEbYN5Z3Uz209UWLOiY8Ja9VdQaVbh6BZlecO9BXX1Lgo8l8q+tXlC0IpifA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/-/dsh-client-ui-settings-plugin-inventory-0.1.1-rc.1.tgz", + "integrity": "sha512-ycCL9EBBOCEZVJQfG9DsK3CAZ84s0/9tByY3csQXsALwDImBY1mPPmI5xp3ITJF28HYu6GC9CjlsZ0Q4CM/dXg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-settings-plugins": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugins/-/dsh-client-ui-settings-plugins-0.1.0-rc.8.tgz", - "integrity": "sha512-BLLFFxBz4TmnXXsR5bnQaLMboXBOvCfhoqSbdPFqkqrmJSD+3KGbg4SQJZPcfLL19Kq7qeDraPCXwxo3wpIULg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-settings-plugins/-/dsh-client-ui-settings-plugins-0.1.1-rc.1.tgz", + "integrity": "sha512-0Ato2FscNSwpO7MaZ8mI5QtHoUvrgavuhcnETVfOlSBbjuqACZyGxLjWBaJ3jc+6RvsZTidg4uYZaAhRG7N2ZA==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-sidebar": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-sidebar/-/dsh-client-ui-sidebar-0.1.0-rc.8.tgz", - "integrity": "sha512-7wcBnS27j8iIVDuai8BVifxcDZd5DIjlHgNHQKx8xQM+x92VKhiFOoMccjhXNaE6sExCUsER1OWRVp65MJvjqg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-sidebar/-/dsh-client-ui-sidebar-0.1.1-rc.1.tgz", + "integrity": "sha512-5Osuq606H4ii76cBhlhZHk41uEhwGjtptg05GZcFGIfPAbS+8KeDp58kwFzgKUyGKRtiYb2ssG7YQagaeqO2Fg==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-layout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-skill": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-skill/-/dsh-client-ui-skill-0.1.0-rc.8.tgz", - "integrity": "sha512-s9tW3tDQ/82TzZcUHC/dZy5zmPppFKbSXnBotQDvjAU+rkS3/4k4Y6u9LffyZ813OjCoCfs7GOfWHAyZ0VmBag==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-skill/-/dsh-client-ui-skill-0.1.1-rc.1.tgz", + "integrity": "sha512-UXkfLRMLHvU29l/A39vdU628vCiRKce9Wa1R6fQK6PbryF1fHA4u2btxTQyX656YadkGfpoRNbKTrwuHwTT8jg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-tool": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-subagent": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-subagent/-/dsh-client-ui-subagent-0.1.0-rc.8.tgz", - "integrity": "sha512-uK23jWwzFXbAELsnqS+7A4jL3Q/Ft8AI1hPrJE1ssldq535znexgdGAguZFC17fG+L0OWUtqwAKdXHmjyzqLiQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-subagent/-/dsh-client-ui-subagent-0.1.1-rc.1.tgz", + "integrity": "sha512-jtqR76/WVoFeuNFfHEEU/0lmw6ywECVRdNjNbr8xF4AFW7LNDGfIBjOW+r+c3VYs20uXe+KieKCE+hTtUcqYtA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-token-meter": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-theme": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-theme/-/dsh-client-ui-theme-0.1.0-rc.8.tgz", - "integrity": "sha512-orLl5eoWOnvjj76lI6xucE+lT+o+ouniRMSFsuYwF1DNH2pbyfVPQYJWL3iM55gE28yyZJGgmtmABnQBiEF5iA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-theme/-/dsh-client-ui-theme-0.1.1-rc.1.tgz", + "integrity": "sha512-wjIkWDEzv3vvUnGtQi+bqQOrnDcuYszt/5S4e1hycctOYP2LloGTW8I7ehP8arnfPb2Du2eiPGXBy3dVGPa44w==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1885,38 +1848,38 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-tool": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-tool/-/dsh-client-ui-tool-0.1.0-rc.8.tgz", - "integrity": "sha512-+Mtgx56PptrtoN4Q36yISe3u0lnVazdqV9s+1cLU2C2sAw7bB7o2Y/J9PBPiuBSsK8rmCLbUPYK6QefenwFE7Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-tool/-/dsh-client-ui-tool-0.1.1-rc.1.tgz", + "integrity": "sha512-3s0w6rdRzaSfTEC3wJXhsSzT8GdIAkTeuwWLxPDGF5xQLVAvx8gAPNgnQ75PSJWF2H/jeZ8rfTNGHYF/AZ5p1Q==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-trajectory": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-trajectory/-/dsh-client-ui-trajectory-0.1.0-rc.8.tgz", - "integrity": "sha512-nEKtvkbNhk1Qau8jpyvGfcGLCL2Tfmw6Oi72i2oiZ/DHIcsBaeD0JVWOraEmQp3jYVjuuLSdjdCiPkuNU9nwgw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-trajectory/-/dsh-client-ui-trajectory-0.1.1-rc.1.tgz", + "integrity": "sha512-fluiMLoPFtGnt8MBMoPFzEgjzGQJpUJkLbEC9OQSvBi6MXiZk5oOas8fwH4ZwuDgw0Ef6TIBFxOsbnhfLX6A+Q==", "license": "MIT", "dependencies": { "@tanstack/react-virtual": "^3.14.9", @@ -1924,234 +1887,194 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" - } - }, - "node_modules/@deepseek-ai/dsh-client-ui-trajectory/node_modules/@tanstack/react-virtual": { - "version": "3.14.10", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.10.tgz", - "integrity": "sha512-SRyoUbdFMRHuYXMijV5H4ZarQWpXkj3iANq8OFre+pybeVap8ZJjZ3Nz9bVjx4d8PfobVUQUdKyyyHYk3E+djw==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.17.8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@deepseek-ai/dsh-client-ui-trajectory/node_modules/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", - "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@deepseek-ai/dsh-client-ui-trajectory/node_modules/react-dom": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", - "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-user-questions": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-user-questions/-/dsh-client-ui-user-questions-0.1.0-rc.8.tgz", - "integrity": "sha512-zv2U7Ur1ovGSU7j5mwsiCHUK/L20IXRcSFBis3kDZ9nMMl9m0N+56bXrZtJD1U9kTU7gtJ4Xat+rDpr3uTn0JA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-user-questions/-/dsh-client-ui-user-questions-0.1.1-rc.1.tgz", + "integrity": "sha512-dsWyiL5shUua/VdQ07p1m6pCNlMkC9Rqr40bjgvFYYqHHvBchqUV1uKWBKSuS6QYSw/yRdk8hJOPtGnXtVU33g==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-workflow-run": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-workflow-run/-/dsh-client-ui-workflow-run-0.1.0-rc.8.tgz", - "integrity": "sha512-lVvzaR66JwR2lgdURooLEyinUFu5cSaJLWBgdLetw0Z1B6N4RzBNwiIZxmIEZKwaVS7vhO9w6mphGV+4ujiypA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-workflow-run/-/dsh-client-ui-workflow-run-0.1.1-rc.1.tgz", + "integrity": "sha512-fX1uEFVgArjfkmsBzYWbmg9bKYYlmF8UVH2QDp7AgyXc19TJF0I4kFMD1IH9it5hwUuZvPOIQynfnZnwT0YenQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tool-workflow": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workflow": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-client-ui-workspace": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-workspace/-/dsh-client-ui-workspace-0.1.0-rc.8.tgz", - "integrity": "sha512-Il4hRRV9cDXyZptVC/OKHHOPNd84SwtflHCJ6RP97+OYxnENftdKgHENX7Kqf1RsSXF8RwmOtEvZoHljvYD79A==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-client-ui-workspace/-/dsh-client-ui-workspace-0.1.1-rc.1.tgz", + "integrity": "sha512-NHbAXB4JfQb3AWfzF/bcRp5aq2ETDx33oWALkW4mGWZi/amHap4WWibmkhXENc0oibJ8ji9AFj1k87CVgHsCVw==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-cmdline": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cmdline/-/dsh-cmdline-0.1.0-rc.8.tgz", - "integrity": "sha512-xsnNFm2XpMD9wpBBLq80x8yXTi664DHywkLwxgAhDsWyp9tB2aSWaWVKxugPWSWwrB3F4nfloWqaeUfgXRFtBQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-cmdline/-/dsh-cmdline-0.1.1-rc.1.tgz", + "integrity": "sha512-w/z8Ng+RRzRrrTodOU6/LjuOwaN7KYOiooxlfCfKqf3S3PsGWzUrvLTsenT9/SCa6W4K3OI74y/m1J2o4xAgWg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-code-runtime": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime/-/dsh-code-runtime-0.1.0-rc.8.tgz", - "integrity": "sha512-6ZKyEE7dHH1UkKe5b0lg18Byww/7ocZyrNMVjAoUWEWp5i96Brf9Eavu9q3zepBMDMZJErCfV0pyt7KDhBJSig==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-code-runtime/-/dsh-code-runtime-0.1.1-rc.1.tgz", + "integrity": "sha512-uha3FJobyShXIMfSuyGCHatbcfY3PA4mATS+hu3JoJy/+9w2Hbish89+eTZBysA4XEG+FRzVVdz9TbAHP3UR9Q==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-code-runtime-worker-thread": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime-worker-thread/-/dsh-code-runtime-worker-thread-0.1.0-rc.8.tgz", - "integrity": "sha512-l9fsKYZN2qthnR8fbH8LrTbhWman8rjFCumIttahOKvQEjFMWImY1p8ypM3QtreAtUF8jyHdDnlV8xWQLfanmA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-code-runtime-worker-thread/-/dsh-code-runtime-worker-thread-0.1.1-rc.1.tgz", + "integrity": "sha512-jVYt42fXeAgujQ64BznB8FUveil4D9u5cfYXCnTz/cMMpTLNlDIeF8Puj5b30w9Cn1B1AlL088DFxlE+Hk0F+Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-code-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-command-compact": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-compact/-/dsh-command-compact-0.1.0-rc.8.tgz", - "integrity": "sha512-3Zlgw9ghDvj2/22/O7V4kvkxKRfknQw4t9ks5GtBEEVRuU9ullpFElAwq/EZ049zeCnmHnyskyJmwYZRIGaiRA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-command-compact/-/dsh-command-compact-0.1.1-rc.1.tgz", + "integrity": "sha512-XETnZp1RAgLMM4oRJxFmIngQMJDT0Sm521GaUfdVLAXhu+BKJxXVcrf4WkhhR1zMZdKYl7aT6TU1IvTNH1H5uA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-command-feedback": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-feedback/-/dsh-command-feedback-0.1.0-rc.8.tgz", - "integrity": "sha512-RqEcutd+nHVGND/JobUybb8HsgRigr5iEowDk0D7aZeXFJ3tN/0pW67w7DOxdhAVnODIpWg5tSnFpCT8fS78kQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-command-feedback/-/dsh-command-feedback-0.1.1-rc.1.tgz", + "integrity": "sha512-bSSh+Ac+z9JbIoK+guAvX+XUR5avWZrGA4/bTMv3zB1C63+CnAaeU1UgYEV4vDR+sPVZRexPXXx45uOIicQAwQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-telemetry": "^0.1.0-rc.8" + "@deepseek-ai/dsh-anonymous-user-id": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-telemetry": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-command-goal": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-goal/-/dsh-command-goal-0.1.0-rc.8.tgz", - "integrity": "sha512-kMjRuGJA79czVNzx//JEMrjAqDvYpiaOSH95NUu+Mome76S34jmnhCnIyzcg02GcXelDbk9epELAz5HR1Yti/Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-command-goal/-/dsh-command-goal-0.1.1-rc.1.tgz", + "integrity": "sha512-0L0vLmCnz17t+eQGMzq+SrYqBm8OWlnt2xOQKNKR4oe0w5HYaqqNuxEzz8bjVvrazjr+hv3PPQj26uCPctsaSA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8" + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-commands": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-commands/-/dsh-commands-0.1.0-rc.8.tgz", - "integrity": "sha512-/i99EDLrUyd4bUVn4d7XS46vg09ZE0ervbE/aQaVUWLjDYKrarb7hPx9slADAg5/cUlJsN6L6CP544h9qlUo4g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-commands/-/dsh-commands-0.1.1-rc.1.tgz", + "integrity": "sha512-jOtQNe5RBfyCQxUqCAhqJbrfM3iUZZp1H197SrhFDuZT8v4CbbnyjBWQTAeuztf66pM8VoCxnBik79kY6tN/KA==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-compaction": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.1.0-rc.8.tgz", - "integrity": "sha512-sWNqZqejzpKsnEMPsNVA/WYK4S59XlYJtnWw8wCPushzQdUt5zhf+g7LVx0cStSozEfwurxRvaZdOmNaa4WhNQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.1.1-rc.1.tgz", + "integrity": "sha512-0aDCK6TDF2RXJTrgkmuh6KAGLA8jthR3JKNp0be5RS1U2IIEXwjOLwr5ol4gvSaNLerMlcyLyslkATrHj8hQVw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-compaction-basic": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction-basic/-/dsh-compaction-basic-0.1.0-rc.8.tgz", - "integrity": "sha512-UWAUbJbxFQTI3m4LnwZDlcYOfzWNFN1WLjy0qNONNcz3BBa5Nu9kcz4C9jioSp6pg3KMfUNUOtbBRySigTIt7g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-compaction-basic/-/dsh-compaction-basic-0.1.1-rc.1.tgz", + "integrity": "sha512-dNi5IZg0nOUPckhOSgEltHpF8On+wEkMR4gMVF0YItYJifReqcj1qHDZ+8jjmDNFTT5lnOUXylMXyY08IM1a/Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-token-meter": "^0.1.1-rc.1" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-compaction-tool-result-pruner": { @@ -2160,42 +2083,42 @@ } }, "node_modules/@deepseek-ai/dsh-compaction-tool-result-pruner": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction-tool-result-pruner/-/dsh-compaction-tool-result-pruner-0.1.0-rc.8.tgz", - "integrity": "sha512-Mk1QE57HxCMScgQ9ury0o7AM14h6g41cDg1G2kiNqD4Z2LBwFTlZJJAgipyhts4mcr1hz2WZTc8Xgbl9067ONA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-compaction-tool-result-pruner/-/dsh-compaction-tool-result-pruner-0.1.1-rc.1.tgz", + "integrity": "sha512-pRFLE04eJRkH46NMH4F6HvCz7lQMxdua2MifcyAdfuHLRCfGtmzJtlkNJkHd7936rJqHaRmVUz3+UMt86MbyBQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.8" + "@deepseek-ai/dsh-compaction": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-token-meter": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-cordis-client-runner": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-client-runner/-/dsh-cordis-client-runner-0.1.0-rc.8.tgz", - "integrity": "sha512-UbV2zFdOCubLAjQkmYi+6aPxxDfFTSshiyL4EHRbZyqQTdhrnDMfkY48SiVz8s026+E8xxGRPU4kNf3lg5DGeA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-cordis-client-runner/-/dsh-cordis-client-runner-0.1.1-rc.1.tgz", + "integrity": "sha512-XunBtjdTo5chATPwwUDNLfz7lIkdGxn4OIEHZ6WQnXl6sCgd+xy2pCjBH0j6wdvWO/xo7m99FPnlOCW6cyiing==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-modules": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-theme": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-cordis-host-runner": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-host-runner/-/dsh-cordis-host-runner-0.1.0-rc.8.tgz", - "integrity": "sha512-DCJr6INHCI0Dypr1JAJj/BnvN31tpIt3Y8+KQ3GDfHW6pUBsc9GnXHpKsuQ4sK/fTj80GjaDYPGdWeB/uKMMdw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-cordis-host-runner/-/dsh-cordis-host-runner-0.1.1-rc.1.tgz", + "integrity": "sha512-PUyFU5PFleIvjxTZpA9v9Tq9wCsESzQnqwhMU/Ir+CKtSM5EcMsQPCRD4HHnFqrVCIsQYyDffBbWr1K4LziIEg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2203,31 +2126,31 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-credentials": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.1.0-rc.8.tgz", - "integrity": "sha512-VopOhtUEa/fSmJr3fyKbsEG043kX1oGuBrmELAbkhmuDigl1cN88g0VPb9rMG2/dJ1h08wg+h0RJP+Ex4LjRWw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.1.1-rc.1.tgz", + "integrity": "sha512-oZPts8lYYstp9XE0N8jYziEQQcv1+8B/BkKfT2pr12/7SeQjAyduyIRlSOmc/UFWEz254BLDWI4vtnWXkJVazQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-credentials-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials-local/-/dsh-credentials-local-0.1.0-rc.8.tgz", - "integrity": "sha512-Msbz/+xNIHFXLjcDy2hZFpfV1qduuyjLl35BJOUqNz9eCEYv8b0lfKDI7nirv5E/TdxzLkO75WQ4f+8nifeUpQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-credentials-local/-/dsh-credentials-local-0.1.1-rc.1.tgz", + "integrity": "sha512-q59hxIpWTHHrFmYS1k2h/d9aNEKrq0SA8At4sxM0Hpx6/JRBqvb2AwR+m61eOvwBu2HApSY/oHjrgrG9JukQSA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2236,62 +2159,62 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.8", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8" + "@deepseek-ai/dsh-atomic-write": "^0.1.1-rc.1", + "@deepseek-ai/dsh-credentials": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-file-reference": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-file-reference/-/dsh-file-reference-0.1.0-rc.8.tgz", - "integrity": "sha512-SoU4Zm7L8E9ud5nTs1tVAINFrgKvIKypCdOOMLBjJkjLUvXMYmKFxfCM7xaJjOmK/C5suEVUtpukZhZZvZALNA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-file-reference/-/dsh-file-reference-0.1.1-rc.1.tgz", + "integrity": "sha512-TitE4FzwV4JPWmXpI6Rinn+oVt+0c6DtjJCXdapafNHaYKUnYqFE4Bydvn2hDzLKnkwEgEKEugSZLRno6P91bg==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-file-reference-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-file-reference-local/-/dsh-file-reference-local-0.1.0-rc.8.tgz", - "integrity": "sha512-dw3p1NmuDgJkse1J2RuLwgfiySEFiyRL40o3mo1ireGxXt85JfLns1FR2mdN6v7z6pBpIogGPKV//0U31BWTfg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-file-reference-local/-/dsh-file-reference-local-0.1.1-rc.1.tgz", + "integrity": "sha512-+aLtZet2Al71eRKeFIhYXHyogYLvN2jIRcyxPF2BirhwIms5wIkRQsvXdJJPKr1/p/7wi4pS5FmQifDR1Tq6Lg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-file-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-file-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-fs": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs/-/dsh-fs-0.1.0-rc.8.tgz", - "integrity": "sha512-ge5GW56+z20vYACQ2jqtevusdgMXa64laeU/Chql+VIA3+6xyJ8gLX+oj/1O5TlzhvmZ7ZPfZGBFBEVsEZzTQw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-fs/-/dsh-fs-0.1.1-rc.1.tgz", + "integrity": "sha512-cf+F+spDreyKTFYPYZ5DshRJuq5+H1Wu5xD8078zjy5PO86ROZRIvQl1zc1D8EnWhGSL/8rw4uCuYkhIZNcicQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-fs-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-local/-/dsh-fs-local-0.1.0-rc.8.tgz", - "integrity": "sha512-yWk6WrAHs8b6395XnZZOCf3wY90xYKjh/tyU3/rwFy4oU8zq9gzn/x8rdaZD0zUp+wE0XqfBf2AS4Jo03SKHyQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-fs-local/-/dsh-fs-local-0.1.1-rc.1.tgz", + "integrity": "sha512-1vKUUxl9gZ0xh/wniBs0e4/h8+BEBHuBrIhpgf4Jr1IuPJIQbzTDgJVvFM9657zWxdNzcmb+5QV3N25GWcayvQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2299,39 +2222,39 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-fs-observation-policy": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-observation-policy/-/dsh-fs-observation-policy-0.1.0-rc.8.tgz", - "integrity": "sha512-iarNlz2QoEROJUOHPjy7OKOwXuGeEhzk6nWj95F+UHNvKKaquagBE8YE1gzFqbg2U1wFVmPGoHBYl8q7hb5Z8Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-fs-observation-policy/-/dsh-fs-observation-policy-0.1.1-rc.1.tgz", + "integrity": "sha512-CsECIJkcYcwfXpQa/8stxEdGifxa/2d2AJcUD/ILR9NcHTr1rR0UjyJ6dZREtEhclLz5HrMois6qdf0r+TCo7Q==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-fs-sandbox": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-sandbox/-/dsh-fs-sandbox-0.1.0-rc.8.tgz", - "integrity": "sha512-JfNgZHFyUyqO5XV/KQ2msO9OQ+98WrGCyfQp34yqCbIXSGS2r471C35Sub+OyTlpCkavGFUjsxo3iT7PLGyVVw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-fs-sandbox/-/dsh-fs-sandbox-0.1.1-rc.1.tgz", + "integrity": "sha512-tfWU1aVZRxW5j/A9zEaPQUcs//jf5XhnR4QAmAOXtY3EvgHXEXjaJnd9mfKquMZtvZEr+4JWVJo/aj6BERch7Q==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8" + "@deepseek-ai/dsh-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-fs-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-goal": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal/-/dsh-goal-0.1.0-rc.8.tgz", - "integrity": "sha512-PR/9JjRn2H/33eyAVbtYBxzRWQhFO5N0S/188eAV9gjUTtHe5oSOnPxYy8iNkkMXxr+VE8Nno25Sun8WYmS8lQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-goal/-/dsh-goal-0.1.1-rc.1.tgz", + "integrity": "sha512-kvrZVsyOe1ZDgYyFMKpdhOqn47lMMP88wac66suQrMPLI/zQeHPv7sTnQoV5BceQsWln/N2Txe2iBXnmDxgsQQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2339,176 +2262,177 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-goal-round-driver": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal-round-driver/-/dsh-goal-round-driver-0.1.0-rc.8.tgz", - "integrity": "sha512-hCOOofSuqYxWo+Zc/vcF1C+qk38JEgzJ2ya4bBisWYiRwVFygHODquQllK5ffDjFM+SnX+CdmA+l2piiwCkzcA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-goal-round-driver/-/dsh-goal-round-driver-0.1.1-rc.1.tgz", + "integrity": "sha512-BscFM96Ud1/txqIJD2t/atqTrUmlDLd29K5fGhGmm83pOB0lHqCJ6T1mfoLrT96KIU8+x04ubkfz/63xXjGllg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-headless": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-headless/-/dsh-headless-0.1.0-rc.8.tgz", - "integrity": "sha512-SfjPjyLeno7iScndgFI3s9s8focqXADLNgIxkFbsL0BdAY7v3A6TOe+iSxnYX0fMhDqFC1jT3FVYlEzbJBg0Kg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-headless/-/dsh-headless-0.1.1-rc.1.tgz", + "integrity": "sha512-4ktB7lef5PXUXy94eylGwGCYwMOCGjsfj7WE3H/Zcg5yXs02rZZvE2P4PHYaNvlnizc4DDlwJpyNCc+TI6PtnA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.8", - "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.0-rc.8", + "@deepseek-ai/dsh-cmdline": "^0.1.1-rc.1", + "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.1-rc.1", "@deepseek-ai/schemastery": "^3.18.1", "commander": "^15.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-default-model": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-home-paths": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.1.0-rc.8.tgz", - "integrity": "sha512-9cQhH9CZsw7Zi73VnZk7CcuEVA6yR/Ox+7lp3VHq53fFYSPi0RL+kMWmh5XCrZB4U1OM3+PVsWsA5II9tB+t0Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.1.1-rc.1.tgz", + "integrity": "sha512-C83S3PL+S0mEC66nJO/VFsdkG9x41tSGKmrZdanTCA5OEp/M8OJYRZNYmsUl48Xwe8wQfLhHOes7FVWtRDRcMw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-apiproxy": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-apiproxy/-/dsh-host-apiproxy-0.1.0-rc.8.tgz", - "integrity": "sha512-viq2CoS6bRavSe1t9sLjgunykO+Vn/m83uSgONMH8O7QN0Pk3+FnZGHlPZ1lQ4auNJTwQjxFG6w372cGq9usWw==", - "license": "MIT", - "dependencies": { - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.8", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-native-command": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-query": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workspace": "^0.1.0-rc.8", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-apiproxy/-/dsh-host-apiproxy-0.1.1-rc.1.tgz", + "integrity": "sha512-pVyVP82Ij14kniqMDHGm/0Z+DDpkwJ/qHbLGe/G3zh0fpONPznUnYc8Qy5S88S7LKJy5+lLv0T5C0P8w9GtmEA==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-default-model": "^0.1.1-rc.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-credentials": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-directory-picker": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-native-command": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection-cache": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-query": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-questions": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workspace": "^0.1.1-rc.1", "@deepseek-ai/schemastery": "^3.18.1", "fflate": "^0.8.2", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent-presets": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-permission-presets": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-directory-picker": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker/-/dsh-host-directory-picker-0.1.0-rc.8.tgz", - "integrity": "sha512-aOUaUX0MTl8oLIuL27OkATMm+x2oTANuhhHpeGizn7+kfOX5bRKB3tyi7h6lGZ9O7WDiDLl2JajRqzBXlIPAAg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-directory-picker/-/dsh-host-directory-picker-0.1.1-rc.1.tgz", + "integrity": "sha512-PrlnIxKg6WqPP8WwBVQf5TNRIxhb0cuEEj7JX9eI/rycVzNSRmaeJ/vTyoOVnw3lUZeI66nFF7PAOgJz0Ojn9g==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-directory-picker-auto": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-auto/-/dsh-host-directory-picker-auto-0.1.0-rc.8.tgz", - "integrity": "sha512-t6sn3AlcAARVCOgYMNZS/Yneiw+/2mDM6QOGxR6bu5E7DYTT/tllHe0PlHF1Wgh/LtfOTeDtcSPPfXjmrd+Lqw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-directory-picker-auto/-/dsh-host-directory-picker-auto-0.1.1-rc.1.tgz", + "integrity": "sha512-9WDce848S1mUkswZKiFGS2xqjWBDYakg8xJoTtGp11b0xcgjITJNYRJLTrffqZ/FgPMSu0Ij3nn/ypBBjv+Xag==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-directory-picker-browse": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-browse/-/dsh-host-directory-picker-browse-0.1.0-rc.8.tgz", - "integrity": "sha512-zEQ7Wnz953GWiR3Y9GaqPGmhntEdjmcD+x6cbYKXWyeOtMHvv7Lu9EWGNneFHXFt50nMinDBT5kyGzElZ+cajA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-directory-picker-browse/-/dsh-host-directory-picker-browse-0.1.1-rc.1.tgz", + "integrity": "sha512-6KfMYkD+XUSUXjGff/EGLjpPFjU3lDeWoFzyCde7g9aLy0RfEYCSAJtcXUCZID+Z3PPwIfssFCwPn1H5ptyFHA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.8", + "@deepseek-ai/dsh-host-directory-picker": "^0.1.1-rc.1", "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-directory-picker-native": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-native/-/dsh-host-directory-picker-native-0.1.0-rc.8.tgz", - "integrity": "sha512-WUB4lW+ZmR743uH9LpFK0JrJU88601E7zvevffa93n7Bl4X7C5Y2yhbDK337H8W/brVlLNVgD2Fw2H/nIPZkDg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-directory-picker-native/-/dsh-host-directory-picker-native-0.1.1-rc.1.tgz", + "integrity": "sha512-dZs60Hr6MNJGzroTrQ0I/FD6IDcHwBFiyYSoU2GRunWKz0tdKLWAADHl1eT4mfQay4VBrl/58E+9T5loYWtuFw==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.8", - "@deepseek-ai/dsh-native-command": "^0.1.0-rc.8", + "@deepseek-ai/dsh-host-directory-picker": "^0.1.1-rc.1", + "@deepseek-ai/dsh-native-command": "^0.1.1-rc.1", "koffi": "^3.1.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-frontend-static": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-frontend-static/-/dsh-host-frontend-static-0.1.0-rc.8.tgz", - "integrity": "sha512-/ef1xAygNL9hyGtSDzJ04nM5WSNzSxsloSUD2MQfM0FU3Y6b/CbHkUNFYaS0MnhS1YVSulDAGRQvXSgES8vZkg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-frontend-static/-/dsh-host-frontend-static-0.1.1-rc.1.tgz", + "integrity": "sha512-efJSWiHOCPZYG+IAE8xR6Jm7x9rnO6HH3TYsBffL6T2vYlxwpPD7uifUDgHVvyVmPrgAMsPeYhI/0tAtZm+nJw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-plugin-inventory": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-plugin-inventory/-/dsh-host-plugin-inventory-0.1.0-rc.8.tgz", - "integrity": "sha512-knPtxCDZn1jbwRfOUnskjaj8hSXUCfBcjD9LPFXnKffsM6TFOeQrFGhkNKlZteXAMSChtY6pV9bpJj17y3SPNg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-plugin-inventory/-/dsh-host-plugin-inventory-0.1.1-rc.1.tgz", + "integrity": "sha512-VKQPlWcxQTKZIGDvf/yW36GGk1iwbMLFIyWYr8Q3iRCYSlGyL+JL6ejJClxboVNWiZvPM75Ywai6HgkpLbLgPA==", "license": "MIT", "dependencies": { "zod": "^4.4.3" @@ -2516,28 +2440,28 @@ "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-host-webserver": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-webserver/-/dsh-host-webserver-0.1.0-rc.8.tgz", - "integrity": "sha512-MEKFrhvsYfj970QHLaKPpF/sIBpCe8NuSA0HGiWYJctX6TM9N3rLRhXx5p3zATDmXZclu1rbYhIbsqWw/twPig==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-host-webserver/-/dsh-host-webserver-0.1.1-rc.1.tgz", + "integrity": "sha512-ugps/tmxbOLqbAf1s5sCIdfrlLpm4rHKm1OyCCNbKg3MB1YoZRqa+hH40Usf/VxzvjtP8AVDYzcYnF7vwAafLA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-invariants": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-invariants/-/dsh-invariants-0.1.0-rc.8.tgz", - "integrity": "sha512-u0lYqyxOYwfsVnbsfGXZos5vFvA4cqFnBEW3/ezgljNwkYwzeUP/Y5wjPnQjP+ZzBn3CnVeIF6s2N2Vk3iA5mQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-invariants/-/dsh-invariants-0.1.1-rc.1.tgz", + "integrity": "sha512-tRsr9Qynl3qnFAHE460uALI9jncaD0pr4+hufWTSY73MbOswd6V3KDYy3wWQb9ttDm5XE5GTkB/a56KNnO28XA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" @@ -2547,65 +2471,65 @@ } }, "node_modules/@deepseek-ai/dsh-jobs": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs/-/dsh-jobs-0.1.0-rc.8.tgz", - "integrity": "sha512-HqQudOA4VkjCMpxWiqTCMmuiTa/pehW6yG7dDsctO1vW5K48hWQ/h7czdJKgrh4SMuK4kchv3IipS1KaJmdaog==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-jobs/-/dsh-jobs-0.1.1-rc.1.tgz", + "integrity": "sha512-LbETHkXkI92vTQCAnOqsmt+W2pagu0PlVw15vGTBgks9xi7YweFQtGPfsiCJ0EHWaiKARvqtT+dN/n0KkDyicg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-jobs-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs-local/-/dsh-jobs-local-0.1.0-rc.8.tgz", - "integrity": "sha512-8/cr4rYVS2sLB/Z4lL/ERUn14iBqT9T85rJFxxhEKuT3gMcAkiJuKP7t+ZFWPYSSmcNqDPmMI1ExG+GzjxsLVQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-jobs-local/-/dsh-jobs-local-0.1.1-rc.1.tgz", + "integrity": "sha512-xjzJy3yhqdUDTo/IRr7cGpnE1wzVRF7ZABcTiCg2cNeYGY5SzGoUn/XyE7kOsPEulHbnvpr2pddHMJvwbBcGPw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-launch-environment": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-launch-environment/-/dsh-launch-environment-0.1.0-rc.8.tgz", - "integrity": "sha512-VvYo5R7tu4QhX/dsNpuBy3AaauizU6yPCeWQUNzI3ZjGA0VHkkZhInilcgxVJkPA1lwEXYB+OoCAo07PUy6D/w==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-launch-environment/-/dsh-launch-environment-0.1.1-rc.1.tgz", + "integrity": "sha512-TKrXFGcAibVAWoqjlc+M7xRfr8IVdkzMpemmSkNpXOxaqLVr5KLVwAOL+Fp05knp/riV2WX5POucWJ5L3P3gaw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-llm": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm/-/dsh-llm-0.1.0-rc.8.tgz", - "integrity": "sha512-hf6RmX2Stn1UtzpktSHQLkIktQkBm9i/3yFfJlbGSkwyw5Cv9sTYJbyoHzsSnnh6i8nRRcMcBhvMgm23I00oIw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-llm/-/dsh-llm-0.1.1-rc.1.tgz", + "integrity": "sha512-SzZ0WHjxyfcB1j/aEkZM/P5Sd11qw58AgB7TFcRC0iHwZtAqlKMgaptx/Rz1olNyerGpjii2mmUoinF5p1MYwA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-llm-deepseek": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-deepseek/-/dsh-llm-deepseek-0.1.0-rc.8.tgz", - "integrity": "sha512-s4LatnGbHwPJhcWGulO/7RsJBPHHBDB+2+1iRTJEn6vYPB0lOSRWtr91qdmAkUxBZmK5mwrf21IbuW+kWwtAZQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-llm-deepseek/-/dsh-llm-deepseek-0.1.1-rc.1.tgz", + "integrity": "sha512-qCtJgnvY6ix3hXX6tRcVozoi+JL8re4PjpNnCGYz3Az4csqdIkL+a9DqnV8JOIMi20NTjeOrktaOFgUd7rdsDg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2613,20 +2537,20 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.8", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-anonymous-user-id": "^0.1.1-rc.1", + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-credentials": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-llm-pi-ai": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-pi-ai/-/dsh-llm-pi-ai-0.1.0-rc.8.tgz", - "integrity": "sha512-r9dmHYy759gKtAG0S96wTCS6O8WFDqGLQu8t+zGY6LnfdT4qUJdmWtJ+GwCn+BGwq1AglBzjabvyRBp6BxXcMQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-llm-pi-ai/-/dsh-llm-pi-ai-0.1.1-rc.1.tgz", + "integrity": "sha512-lExsZIY7PeL7yEwgglTGLb1Tbg4soANFpuePOONIrn1ZP51DwENw1SrU/0RK9ps9ksMHyl9J1ie5FIYS/YCY0w==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2634,37 +2558,38 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-authorization": "^0.1.1-rc.1", + "@deepseek-ai/dsh-credentials": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-llm-retry": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-retry/-/dsh-llm-retry-0.1.0-rc.8.tgz", - "integrity": "sha512-DmcOajgiku5l7aa5hU9DtwnIZu+i/XCGdb+Wego5W9bAswYeBAwbceloRNE3O6+jdRzy+K5U7KQ9V+olBsNqRQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-llm-retry/-/dsh-llm-retry-0.1.1-rc.1.tgz", + "integrity": "sha512-9bluPgwdzU7HIteYvwmLThzcT40nUBWDCrUkn7WjckuWnlx6qCIz5cFKeh3iyPPIHvcD3jidMB2ReOxKTEy4VQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-mcp-client": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-mcp-client/-/dsh-mcp-client-0.1.0-rc.8.tgz", - "integrity": "sha512-pcqXawjq9jRJQNHZTLN7pswJFMWjxCsEOdHUI9BdJqb9lRDsMi2cul1Hizfi51oKkcNo1u/K9Toqgh8o/ScAXg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-mcp-client/-/dsh-mcp-client-0.1.1-rc.1.tgz", + "integrity": "sha512-GXifDFUgiWcm3dr2Cbnpi9mbQgzP3GtIpGSX+7RlXlCHIHuavXCdgvGHSbq/KGPM5vAwrkZS+xcLwTSqpQL47A==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2673,18 +2598,18 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-message-feedback": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.8.tgz", - "integrity": "sha512-5DYXVLcnvTRs74Att52LGNR+x+RCf1X5s5+gOSUddsjnQ0wn4f3pzfc0o4F+91aE2zX3xzQ3/LhlW5UOJdkB0Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.1-rc.1.tgz", + "integrity": "sha512-uG1+QqnlA7pTLj9ZffQRfIbZDrp7kHnquWotqZkc4EjLF2sCwWDB7YHYhhszjTbfOY4QAWk3tWvcszC0bV1H5Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2692,39 +2617,39 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage-domain": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-native-command": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-native-command/-/dsh-native-command-0.1.0-rc.8.tgz", - "integrity": "sha512-bRaT8LOb2xmWQ88oSzM4+Y3N4Yy4J0tf15/kQTP53PY1FnOA5hGYWoRglQgfxIcJCrw4fEdUPie8Fff0dCOwdQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-native-command/-/dsh-native-command-0.1.1-rc.1.tgz", + "integrity": "sha512-maVhsVwhIyGuqcMpJWMv4BPc/UaIIdAT4aZmdv9bHzbj3vzRALjAKOEAdhIXtdxtuTKcYbimg402bbEwe/u2OA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-output-retention": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-output-retention/-/dsh-output-retention-0.1.0-rc.8.tgz", - "integrity": "sha512-DeVjqZ9TtH2AEG57GBsHYT68274VygzuP9EqQLL01Ht1TrdK75xlVet1l3jdEbA7Eik4aSGDjAZD9/MsnlUIXg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-output-retention/-/dsh-output-retention-0.1.1-rc.1.tgz", + "integrity": "sha512-FapYBIWVzcXioH/lTaBSJlbEM9VQKzSy4fQgzRDLAVP8pMAHAvTaF/tBGQMooP582sPe+XpGh0xwWSJ5X72h6A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-permission-presets": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-permission-presets/-/dsh-permission-presets-0.1.0-rc.8.tgz", - "integrity": "sha512-EeTn8Av5kmb1Qj53D7myRnKcNQrrupGrM2m9LVUO8ieWvlIaYX7n2g0y8kg14SUpcD2YzaT40oGJ6VeDuhTZAA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-permission-presets/-/dsh-permission-presets-0.1.1-rc.1.tgz", + "integrity": "sha512-TSWcoxXBD1PQg2btZ7cMscQSHBLAz480oE0PV3ka/kgrvBgppwtppQbMoF1owPek+cJ3EraXthXnUk6IlcuPoQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2732,50 +2657,50 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-persona": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-persona/-/dsh-persona-0.1.0-rc.8.tgz", - "integrity": "sha512-3COzIzZ5kBd+txuH418h9HG4feuVFyhdh02HWvzsWgaPsxjatuFS0OfS6qsejUTZrFDODQSr1WIOeSt80bDBtA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-persona/-/dsh-persona-0.1.1-rc.1.tgz", + "integrity": "sha512-RrP0ABGoVvy2G5i8B5nssDpgpFIwNGvdT7wPPN5ID+wnRe1TD8PwfM6L7ZsTpNHKlbpmZmNfRxlEE1cRm89XVw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-plan-mode": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-plan-mode/-/dsh-plan-mode-0.1.0-rc.8.tgz", - "integrity": "sha512-/SY/iil7KLDvveqKRUZxO4HiADwDlOX9u3xyG/93h785mWSfRXooiv4Zp2tiBjU+pJB0tJXMsQNAXDdg7DWtwA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-plan-mode/-/dsh-plan-mode-0.1.1-rc.1.tgz", + "integrity": "sha512-VtmkzVxwYShRNrkN/1cdLIFaph2vQbm7o5/8hK3elXVYOTd4Y0q3H3LduPMmu1Ejnj5trDYqUTZ2A+vPob5ZzQ==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-questions": "^0.1.1-rc.1" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-commands": { @@ -2784,198 +2709,198 @@ } }, "node_modules/@deepseek-ai/dsh-pwsh-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-local/-/dsh-pwsh-local-0.1.0-rc.8.tgz", - "integrity": "sha512-lHAEwC4pL5bVSKgwaeO2dMM9s/jnpDBRuTeVD2HkunpFfT1Kq4lFi+/YXj00L7mW9DBP6FMfwRRV/0Wgo1FtdA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-pwsh-local/-/dsh-pwsh-local-0.1.1-rc.1.tgz", + "integrity": "sha512-Wl60ol6xE51HXjrQznD2dlvU7aH/mkKjKwaL5rQ7M/1bfmqOEM9cCFVAGw4uFH1UIwoBF7Z6lDTfdgpum8eFjA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-pwsh-sandbox": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-sandbox/-/dsh-pwsh-sandbox-0.1.0-rc.8.tgz", - "integrity": "sha512-GVvj4zqpC/lwCGaRmIXIhFqOqewgoGOuokGFuv0QcjQUY3v9FnPor2dqDZr5pav8KFGb5GeGUzLoUbedmsWyZg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-pwsh-sandbox/-/dsh-pwsh-sandbox-0.1.1-rc.1.tgz", + "integrity": "sha512-Sh1M2I98i3bPmLmQdhmcbjOTJltRL1ygr1bSx46XR94Dqwa1DvmCx6P/ZPtI9I5KQ05u0Lq4omyfTJ3R0twhIA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-pwsh-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-pwsh-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-repeat-tool-reminder": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-repeat-tool-reminder/-/dsh-repeat-tool-reminder-0.1.0-rc.8.tgz", - "integrity": "sha512-p7/g+NH6JJ0BnLx2V5o0hCm4wZr+dXQ9/Ev8LU6YyFRlcnma8TJuATL0wsA01xWfvvGLRxbe/tH41TRS1NVrJg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-repeat-tool-reminder/-/dsh-repeat-tool-reminder-0.1.1-rc.1.tgz", + "integrity": "sha512-b5DPzJPJTKACT2RNmdTBRvo8ajkJ1n+UttlH5tULaKepr6AdTxxvq31a7HFWMwmHJ6aftXGyui+g7a2PSCW9bw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-sandbox": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox/-/dsh-sandbox-0.1.0-rc.8.tgz", - "integrity": "sha512-dJpy5p/KjKkHG9AnMKU4+/ilj/4DCglsq3kof/jhIwtsZJCix07TEXP9vV8LCv4fU8af7cK3antXw4eVMqkwuQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-sandbox/-/dsh-sandbox-0.1.1-rc.1.tgz", + "integrity": "sha512-+2udF/TLxmZTgNC3RFA7ydN2sD/LIAjkao1bUiU372uOTttGrt31kKbeEqXL9yzfdiLjjuXWhRlbtmvmrf5PKA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-sandbox-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-local/-/dsh-sandbox-local-0.1.0-rc.8.tgz", - "integrity": "sha512-sTrKDXD74yG6B24uhCyN9DuGSpX0SCelN4o5DZylKxt56WRRyywAGdLN0Xt8enqiKCxrq+PJBi+hDh2GtXBj6w==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-sandbox-local/-/dsh-sandbox-local-0.1.1-rc.1.tgz", + "integrity": "sha512-GEFDzS1sRs1ISeWa97jtr3s868WlqEnP8S1w6y7stXIBm4GHzrLizjF1IvYlxh+WyE0rBC5wa0kVSZsjRQT2tw==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-sandbox-windows-acl": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox-windows-acl": "^0.1.1-rc.1", "@deepseek-ai/node-addon-landlock-run": "^0.1.1", "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-sandbox-policy": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-policy/-/dsh-sandbox-policy-0.1.0-rc.8.tgz", - "integrity": "sha512-xQOlYWbUr1Oj6cnRd5aHZIz52EOEAdSO1HJIfeDkQrVaOgohFsiiCIp6PNFumuGNWdCEnf4Q18ebafLNtazYlA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-sandbox-policy/-/dsh-sandbox-policy-0.1.1-rc.1.tgz", + "integrity": "sha512-0CxwofljyZEAwrP5DboMZdm3NfekF+bDu2A28IWLTkTQKgF4DCekQ4bMf+Nqsc0gxBiLfo1ZcUUFICQj8m6mMw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-sandbox-windows-acl": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-windows-acl/-/dsh-sandbox-windows-acl-0.1.0-rc.8.tgz", - "integrity": "sha512-3DeFPD+laUbXrzVpEJ0FrF5pMQCqeu7YCJAWgORGj1aju7sIjpineEnKpE6EXhbc8C9Jqu2y5S7B9z6ydOL/Zg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-sandbox-windows-acl/-/dsh-sandbox-windows-acl-0.1.1-rc.1.tgz", + "integrity": "sha512-FG6dJCb37vcuujAK1E906v08jtWTV6+54ShftCjqauHXWk7YKtIAsYRwMIkXg32aPD11EvQGtoJE45Rs3XBEdw==", "license": "MIT", "dependencies": { "koffi": "^3.1.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-schedule": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-schedule/-/dsh-schedule-0.1.0-rc.8.tgz", - "integrity": "sha512-L4GO1Bv3+SHIXafjGQcf0sJI9eTf9whxVmYlBxYHw7h7StOZJPMhG9HpsKz4mO9FZ7J4zhBtpYlFbhOQaJheqA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-schedule/-/dsh-schedule-0.1.1-rc.1.tgz", + "integrity": "sha512-MvX5rP21/K0RqHTYdyMJIUqpM90En3A2CQiCiIc8BDzFqNJQgEE/+PDeHsxXnaPatmLhC2Sw0fQnZaoJxZ3/WQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-scope": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-scope/-/dsh-scope-0.1.0-rc.8.tgz", - "integrity": "sha512-/o+PxkVV2zUy9lYlMFr4TWSb+ESW4DE+fI891yIbsLzOJdFgfbmmLpGrlWgnz8/unIGJZxjeXdwyppV04Z277Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-scope/-/dsh-scope-0.1.1-rc.1.tgz", + "integrity": "sha512-1Zt+tWDSCoSTAzbaJdSiWHe3pJTpyIqnsCEP3SOyxLIKclsj378rhsrkw+5O6oCRxjDCf0u8BJ+Q5liXREedBg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session/-/dsh-session-0.1.0-rc.8.tgz", - "integrity": "sha512-Qs5Mgn32WPPVB4rKHjsZBgLOkh0TQurUAcc9GaDVudK4dUkpno2HDh++qu/PrwRA3CZ/iwPAoFHCpB3AMMaoLg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session/-/dsh-session-0.1.1-rc.1.tgz", + "integrity": "sha512-TypXRsDxHQzms8H44DYFOs3sD/1fVvpFcyPMtOSP0SY+u/e+P/xg/0PgCvEt1epigHkBXtHddjHNLMlhzy9mbQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-checkpoint-policy": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-checkpoint-policy/-/dsh-session-checkpoint-policy-0.1.0-rc.8.tgz", - "integrity": "sha512-9DpZhQN4MExSjbjBSmaH08DmFS/GHRrsVhO5e3WgTVuH13ugdl5yxc4MEb8qvOhEJUUtOx3fXHuMpSTa0Dxa7w==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-checkpoint-policy/-/dsh-session-checkpoint-policy-0.1.1-rc.1.tgz", + "integrity": "sha512-RC4X+QWL+mYIEYmkUrd/Jca6y/qgqL8saXm+v9pDU+lhjZ757qpUc+2WNUo168cT3umTLEYOcDnLty203C4HeQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-log-export": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-log-export/-/dsh-session-log-export-0.1.0-rc.8.tgz", - "integrity": "sha512-6vDC7uH0WZkwmlj/iql6AmSL9Uifiqi28OIZSDIi8/KRHDHnt5hvjobJecuIxhV9hQSDmNsstErHGx4ng2GJFQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-log-export/-/dsh-session-log-export-0.1.1-rc.1.tgz", + "integrity": "sha512-ZrVUSq29taKCbpaD5crG+2XRWyJvNQhFtbdxSqwaroWEsYdQHINVqn5Zjf/Vm40n4MWiZLWDbsNf8ba+CWE3Nw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-persistence": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.1.0-rc.8.tgz", - "integrity": "sha512-JujorG/UCern0+zxJzNswyWl2tFG9sLzfVNvA5YkTLaRLZt7ZsEhxG4DxWZ6uj+3RJ8sf4bqdKqvpIn9t1pwUw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.1.1-rc.1.tgz", + "integrity": "sha512-EsgGSWPEt+pLBamWbICgISNOpw0f1FVdECOnkbHVL47weOTz04S9SVdLcZv4aMo3xSONbdBAThhhh8DBf6Q6sQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-persistence-jsonl": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence-jsonl/-/dsh-session-persistence-jsonl-0.1.0-rc.8.tgz", - "integrity": "sha512-T/Lvh76O2tpVw04FAhgLF3Qovq3SrUnzaywIbB+Uw67a2DD63Qg+cJY9WO6Pu/UowPxbpuUOd12c6iPY5x8d7Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-persistence-jsonl/-/dsh-session-persistence-jsonl-0.1.1-rc.1.tgz", + "integrity": "sha512-FvK6nBwFk+tBUIvxL6QVpck9TVEG73HC9VlVvc9VeskD/74/J5FinubqjtER2S5QMVHBrocDy0EkGYqHrJlTgA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2983,29 +2908,29 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-projection": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.1.0-rc.8.tgz", - "integrity": "sha512-q00B+rl7WAuK0Bgh93SY2+ZpqaH2kJhfJ9n6Jg6R/m4plnH0Ip4oCAHl6u8rBzDgb1mniQGEQDz/7BN5Q3It8Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.1.1-rc.1.tgz", + "integrity": "sha512-RXDAUdfi3CqTQGQhMyIDZ5u4nURmN0ChkWwoX5Ph5rITa1zelnQsskYc93s+FTtB9Ituac3Uynk0rKGw/bS4fw==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-projection-cache": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection-cache/-/dsh-session-projection-cache-0.1.0-rc.8.tgz", - "integrity": "sha512-IPvO7k9FlekOJXn4XLWUwU5+JDQn7khu8Oa04GFDystU3c1CnOwoa7SGMHOfJau3r177M4ncXApwN5Ra6uhyXw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-projection-cache/-/dsh-session-projection-cache-0.1.1-rc.1.tgz", + "integrity": "sha512-eWdgco1blIb+hCGPx0bWy+cc8nebhifLm8FsXrguIJFgK499HZEhDpf8D0veRgmpjV0HhNVMinB0egdXNeg0nA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3013,26 +2938,26 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage-domain": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-query": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query/-/dsh-session-query-0.1.0-rc.8.tgz", - "integrity": "sha512-q8eyfpgPuJx24l1fEevDkc3Dux3lNp/yDzVkDL4nSTGNaDx/h9Y6iG7SZdqWM5nxOET3iwxi4AkPM7lYyLg3cQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-query/-/dsh-session-query-0.1.1-rc.1.tgz", + "integrity": "sha512-5FX2RunFkHNY75mCK1wrJ+uJkETWzV+p9tbao+L9V23Q6njIYQ6cMZ7QxvCHcMpqZIUvD1muZweau1e3UIB8hw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title": "^0.1.1-rc.1" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-session-persistence": { @@ -3041,19 +2966,19 @@ } }, "node_modules/@deepseek-ai/dsh-session-query-sqlite": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query-sqlite/-/dsh-session-query-sqlite-0.1.0-rc.8.tgz", - "integrity": "sha512-jrNq2vgWIH7OzNMHXrKEjEMwy86I36I94a8X5u937xo2B2JD8ZIWfuWHC9YyLqabRwNf7VcQ6VZ6ruSgESRE7A==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-query-sqlite/-/dsh-session-query-sqlite-0.1.1-rc.1.tgz", + "integrity": "sha512-0qQdWu3n6UPSmOe3FgdELbqOa0aohbcD0TSEu75Cba2e7I5XHQzeKsFas552zKiHmI7f0BconaLKDiHnp7aHgg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-query": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-query": "^0.1.1-rc.1" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-session-persistence": { @@ -3062,9 +2987,9 @@ } }, "node_modules/@deepseek-ai/dsh-session-reference": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-reference/-/dsh-session-reference-0.1.0-rc.8.tgz", - "integrity": "sha512-meNS02BOkLc2SnF2qWvl5X1Psk59t0Q1vvwjfCkczD29g4nm7Y02EZ089HJKii0VAsSB39RYA2rf6MCSl6vhow==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-reference/-/dsh-session-reference-0.1.1-rc.1.tgz", + "integrity": "sha512-deO+kFcK/ZOvcOwp5wd0tCPL5/yiv8TeE3Pmvd5NqaMr/0vKm8ePeoXwqJmQ+T3cHtbUhukGNvFKiP94IdQaHQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3072,48 +2997,48 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-query": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-compaction": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-output-retention": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-query": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-stats": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-stats/-/dsh-session-stats-0.1.0-rc.8.tgz", - "integrity": "sha512-T+SEzBkMxZpQ31MaeJCjaLN3/xu8yyZ3Va5u6osfq0nsJz1tvuZ53MHMbApdwERHVV0t/1eILTUo1J6XdksUEA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-stats/-/dsh-session-stats-0.1.1-rc.1.tgz", + "integrity": "sha512-H+JqPsq69nnoNPTJBQVQzG8EIVb4UZyyN4teLhEal79LG3XvYn9s/ZWTus3z02//KdwGhetCzvPZ+E1PVaUFIQ==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-telemetry": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-telemetry/-/dsh-session-telemetry-0.1.0-rc.8.tgz", - "integrity": "sha512-Rs7w+PP/uuOaa34RFY4q6Xjes/C32H0gPvZe/gV9M87y1EcJs+mFBzhnc/zyKeaAdT25RWIwO3KATmKlT/D0Dg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-telemetry/-/dsh-session-telemetry-0.1.1-rc.1.tgz", + "integrity": "sha512-sZVe8bnMZK38J9pZWrObXOFKArV3aKo4cQJ9TgSmo9C1oAY2Mv0HA8rOodUCBX2u74zQ+LuB455iM9V+SCHBXA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-telemetry-otel": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-telemetry-otel/-/dsh-session-telemetry-otel-0.1.0-rc.8.tgz", - "integrity": "sha512-rpPwidBwKV53WM2bYW/eYOZ6j5U9VHOIVrITQkQtGDMAzD9UaqfAXfXfUlsw9vsfjED2gKmSf7vn+bVfy8Tjaw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-telemetry-otel/-/dsh-session-telemetry-otel-0.1.1-rc.1.tgz", + "integrity": "sha512-GMWUdtmqGOakCbx0af2umlrHzduqypxSp3ozYi1OA1KOqxKX3aiTMilcaOQL79/e+/Z0zG4v2PvXKCsa2grAzA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3126,18 +3051,18 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.8", - "@deepseek-ai/dsh-command-feedback": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-telemetry": "^0.1.0-rc.8" + "@deepseek-ai/dsh-anonymous-user-id": "^0.1.1-rc.1", + "@deepseek-ai/dsh-command-feedback": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-telemetry": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-title": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title/-/dsh-session-title-0.1.0-rc.8.tgz", - "integrity": "sha512-OFG9kHFGnM5ND4LCkqg8oZr57qgF6xMkBxR/4MRaJJ42QrPI9QKzoZVRpNpXEl3v3uw8oR7Jj0jbc7WClNl3ow==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-title/-/dsh-session-title-0.1.1-rc.1.tgz", + "integrity": "sha512-hPtDxVSktufWJdZKE5c1tWRl+lb1NCRcjdXi+Pm8Iq8a0D/yx4YDKiv/aLhklDFybyV8FmtlVUPdJS0teyRyHQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3145,63 +3070,63 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-title-first-prompt-llm": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title-first-prompt-llm/-/dsh-session-title-first-prompt-llm-0.1.0-rc.8.tgz", - "integrity": "sha512-pFx2hPVYyRCRcbd4WJZVapVekLLEGMAG1KAcrixf3XOGDNaqVEPF8LWatx8iKQRfVSQlvIOwDO8uEsC0NZiPNA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-title-first-prompt-llm/-/dsh-session-title-first-prompt-llm-0.1.1-rc.1.tgz", + "integrity": "sha512-BUGmy8sT1IjP0S7slcfBbbjNUxcbSTN/iPPO3itSu9Gvwe6we9PwMEdVQgKozNsaUeax95aunl1KRxG7LbVKUw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title-llm": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title-llm": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-session-title-llm": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title-llm/-/dsh-session-title-llm-0.1.0-rc.8.tgz", - "integrity": "sha512-6xz3umGBtGmM+t5O5wwlCwbH9gmBOlQBfg7qGnPJftWc4VWHG7l2VUYqd3DNTQVTHIA/hSN4qg/LXTm79rADGQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-session-title-llm/-/dsh-session-title-llm-0.1.1-rc.1.tgz", + "integrity": "sha512-vROiHtfX8VBeRKfDsnFufP23iZHjxMKUC2Fvct9QbWG4iohaAYT8fAfkzyVcZTE3Mgr1AuSzIiRtiwUUheiZtg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-title": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-settings": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings/-/dsh-settings-0.1.0-rc.8.tgz", - "integrity": "sha512-pqbMoiSP+Ieww9/4gcHYXcBCDlno1zYDu2OPq+5xdZ+McnK+5YBtHsiRpnR9cHQxGTH7lkfIv+adkOueQW0utg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-settings/-/dsh-settings-0.1.1-rc.1.tgz", + "integrity": "sha512-Q7dr2mQQlaAOgZR9UGUQprOQ0iI/NyrsfSWO612/teUawfXaf6k1nO8w90ExDD483wengXp1bnZ1JT7bal9WTg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", "@deepseek-ai/schemastery": "^3.18.1" } }, "node_modules/@deepseek-ai/dsh-settings-file": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings-file/-/dsh-settings-file-0.1.0-rc.8.tgz", - "integrity": "sha512-2mCyAPkxA5r7Ezgt41XtJxRBsj5Dkl21e5v7w+6YE3C8/n9zRRlN4X5oInHcUKEmgoTrNLCBCgOs5DNrl+pErw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-settings-file/-/dsh-settings-file-0.1.1-rc.1.tgz", + "integrity": "sha512-2W85eA92YLsSNBuQHDcmrK3ycWqz//Kke60vlZ1Yo7rCLjxLhCLttEPxLdpmNsmwOOxAQo0KWst0tIpzglmvOA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3210,72 +3135,72 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8" + "@deepseek-ai/dsh-atomic-write": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-shell": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell/-/dsh-shell-0.1.0-rc.8.tgz", - "integrity": "sha512-RNhp7Y25DXUH7o36X4GcN0lnOLg6NXTlWZpYNURT7aDj3UHcLLajRsyddiAh1EbwQnl0GRKRZhLaZHrrG6gMIw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-shell/-/dsh-shell-0.1.1-rc.1.tgz", + "integrity": "sha512-3D92e9P6qEfLipJvTSzg5voTLydjxiC5glLJpW/1Jg2HZ3OFJ/sr/2GOIjSNNYViRYOXK9HsfvYURUAFHmQGTg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-shell-env": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell-env/-/dsh-shell-env-0.1.0-rc.8.tgz", - "integrity": "sha512-E/Rlka8BnpB7GM67ZJPjvZyp0O9L5x28giyJhHWZcPHN4rsEQFVVqk0cH6iDT5STy+dMc9BAUW+im18kATIxsA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-shell-env/-/dsh-shell-env-0.1.1-rc.1.tgz", + "integrity": "sha512-wDBqqaXbUggc8mxhmlO3aWoQcZ+VCOIY715L1NhKBi3FmEpmDm4XOoArs8udH1IBUKYIQzp0GtDtLpTccPohOQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-skill": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill/-/dsh-skill-0.1.0-rc.8.tgz", - "integrity": "sha512-MqcOzl4Y5pQEvFBNVAi5w0IZWH5kVbXmp1RYScrl+8HpVATZbgumDhztVnEc2kUrZu+o6LKb1hnbunK6JHUE5g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-skill/-/dsh-skill-0.1.1-rc.1.tgz", + "integrity": "sha512-jc/z3QEYGuGlnh0w/kVv08B0vkiCVmXhX62MppSuzK6yGKQQJAYtvw3Trk9q/hYutL3KwFpAK4FnJ8dtmiPB/A==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-skill-badge": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill-badge/-/dsh-skill-badge-0.1.0-rc.8.tgz", - "integrity": "sha512-VjISwf5qDpkD+bxLuVXYL7IakhPoZudIOwWCFjTD++Tj8VQTN9ORCq1uCOatFLi5v/an8MzdZ91O2pXfQtb7dQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-skill-badge/-/dsh-skill-badge-0.1.1-rc.1.tgz", + "integrity": "sha512-7evQ5D6krRUbf1FVt1HutKDMecZDQqmGbZBe9ohhGrIQHU12U4Bewb5LE4Tl6A6hKKstnCoY5SbovQIbm8V5lw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-skill-filesystem": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill-filesystem/-/dsh-skill-filesystem-0.1.0-rc.8.tgz", - "integrity": "sha512-A87t/1+wxPiMkUXWVdf4DfgxA8rp1eLmStMvzfdthR/WxtGPzuEv2L5oyNDzKiCBwIcxBN6Fy2THNa2Xba2kQQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-skill-filesystem/-/dsh-skill-filesystem-0.1.1-rc.1.tgz", + "integrity": "sha512-ReGxRVmlVJ0S23lEPWlADnPie4Sff0vUdjt5/W4h1o1wZLyXG4STrCoa4Nkm4Rhx3ES5WfLa0Wr9TPzTkLEieg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3284,15 +3209,15 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.8" + "@deepseek-ai/dsh-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-home-paths": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-skill-filesystem/node_modules/chokidar": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-5.0.0.tgz", "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "license": "MIT", "dependencies": { @@ -3307,7 +3232,7 @@ }, "node_modules/@deepseek-ai/dsh-skill-filesystem/node_modules/readdirp": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-5.1.1.tgz", "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", "license": "MIT", "engines": { @@ -3319,64 +3244,64 @@ } }, "node_modules/@deepseek-ai/dsh-spill": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill/-/dsh-spill-0.1.0-rc.8.tgz", - "integrity": "sha512-LDfyBuRS/yfc+JYvSicEXYJDj5PFBfWN6vJ5G3wy14eMrq3OKoYip8lyIjEdR4qwCVh0s+oSi28AlcvkPuyOdw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-spill/-/dsh-spill-0.1.1-rc.1.tgz", + "integrity": "sha512-PK1A1YxQVgisWacljbHAyL2z3MGXE+GWeXzNf2hHElzmtAkv412a3TXtMTL5XLZ1m0laLZxstEcf8L+S4zxvPQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-spill-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill-local/-/dsh-spill-local-0.1.0-rc.8.tgz", - "integrity": "sha512-4Ew3cBOQxW6wA4U8svXCjUyhX00+h0W/bK9CzTy/HoYrNJhP85euJVV7SfNlq6OfTeQBWn3U0wKwNlcc3gAyAg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-spill-local/-/dsh-spill-local-0.1.1-rc.1.tgz", + "integrity": "sha512-YquagM4ZY6p1+03BSJxfp/rK9yy/ZkfZ0yNumiL5juF0drte6OqUj6YvrR2/RVhV88Id85fv6ik0As70x9l+Ww==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-spill": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-spill": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-spill-policy": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill-policy/-/dsh-spill-policy-0.1.0-rc.8.tgz", - "integrity": "sha512-9y2IHaKowtqGxhYd59R3OfWv1sonIDv2h9WX/jhxbagMvORfRkhjWJP4YAxp+l4Ba1LhVLcuG/nb2p8hqGdO4g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-spill-policy/-/dsh-spill-policy-0.1.1-rc.1.tgz", + "integrity": "sha512-shbTUw8Cpq+X5XZlM3G8q5pPDmXnNgyW8NRDUg2l/bPLipdejIivs7T5dLLXKRtxhaD9GB6Z7jqFuy+dlV8iIg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-spill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-output-retention": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-spill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-storage": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage/-/dsh-storage-0.1.0-rc.8.tgz", - "integrity": "sha512-KcxiNFAC1X0GhbS9yWGo7FLARBNsxoyU9JatxQtA23MuqOZaN4Nzy3bsMViK4/snzpPGwm//I+wfUywSjM6uBA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-storage/-/dsh-storage-0.1.1-rc.1.tgz", + "integrity": "sha512-22Hg7hTTbr5fBYRXJ+5O3aBSHHfBLw7jKAPFWjp4HYziG6xXbnIa93QqgaNxz4rdpjTN9ihPP5Rc/zef+HwKOA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-storage-domain": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-domain/-/dsh-storage-domain-0.1.0-rc.8.tgz", - "integrity": "sha512-rHphQ0jveKoCurwh9TX+VAVFsMQivBgghQBOAsWdVDZ3W6boeXNhMZWuGWZ7WjMPD3iJKgiFCx+650hhsao+LQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-storage-domain/-/dsh-storage-domain-0.1.1-rc.1.tgz", + "integrity": "sha512-7p5qTSxunIQzzKOq1mVIwGh/USHuSuphHEHx3TTu6c+4Iumd6njZ4ijLsw4QrHDUhlGxWaTy9d9Ga/x6Wu4mAA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3384,49 +3309,49 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-storage-json": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-json/-/dsh-storage-json-0.1.0-rc.8.tgz", - "integrity": "sha512-cTlqy+5bQH7/UOFqRoWSaY9DaaDpcx4jmvWcwY8ciMUBse8BXcEtchVr5zqqss+xA/+Z/l9VraH+diwwRuAWbg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-storage-json/-/dsh-storage-json-0.1.1-rc.1.tgz", + "integrity": "sha512-MopZ2No4pWKV00BRQjBuGzaphx3YuNxQ4dCKF8ktDkGYdw/SOEjsurl2ejr2YoXUSLTPWpImEquhkOdRWDqAeg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-subagent": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent/-/dsh-subagent-0.1.0-rc.8.tgz", - "integrity": "sha512-EI94+hYMfAe8BQkkH/FTcciGxajFfAdQe66Jhy2/eyR3dssRAZ+oJsV6SzU20x3m2yd0gmMaXzO1iV3gwYhY+g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-subagent/-/dsh-subagent-0.1.1-rc.1.tgz", + "integrity": "sha512-MhsAoQc0KFvZyNzEsnrWRX1DwMlgPZ6KeTRUPdMwfpqmCcLgNmz36dl2OdiuUr71kbQyeF6HHO06EvrGhH1Qhg==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-agent-presets": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection-cache": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-agent-presets": { @@ -3456,67 +3381,67 @@ } }, "node_modules/@deepseek-ai/dsh-subagent-fork-in-process": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-fork-in-process/-/dsh-subagent-fork-in-process-0.1.0-rc.8.tgz", - "integrity": "sha512-CVen9Fu0TwiwuyTHmZeankN/v0EwdMwOAcq8fSTIyFGPG4ngtqQNSRMxwYTrz39kKyHv0VBW+r8tRd1LBdTAWA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-subagent-fork-in-process/-/dsh-subagent-fork-in-process-0.1.1-rc.1.tgz", + "integrity": "sha512-UHuipiCfXPHrdcwy+Ck+2BzzW4l9IH5HsiWDDVrURsIvCaceFq6jWlaR1Fv3/1iylEl8FmOS3u5fHlLrBYo9qQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-subagent-in-process-driver": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-in-process-driver/-/dsh-subagent-in-process-driver-0.1.0-rc.8.tgz", - "integrity": "sha512-UJXwh484V/rEmRrvf5l0IWg2ceVOaSOU7Z6DEBq++bKOuFQ2BVkMm+Uj3dk4qFngeb10+/GXlRkbe3mqPwQDSA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-subagent-in-process-driver/-/dsh-subagent-in-process-driver-0.1.1-rc.1.tgz", + "integrity": "sha512-zp3HCvf8EPz6Ey0tD0d9+q6FeA0eVTvlBo3+N6m21+SrF8fp47Fb6kFgJ9zoBh4vNGXZ7bDZ/LOhYg4TlotBQg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-subagent-spawn-in-process": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-spawn-in-process/-/dsh-subagent-spawn-in-process-0.1.0-rc.8.tgz", - "integrity": "sha512-+ZratMZJiNg0vDmaEauJpiNI9IzVwCWisbidow6AV8O5CLC9/XlcMTjFGxmxcbnPdNlVM9i8OLK8gY7/kZ7tTA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-subagent-spawn-in-process/-/dsh-subagent-spawn-in-process-0.1.1-rc.1.tgz", + "integrity": "sha512-KPC3gU/gc2Oxh0pdzOL3Y1czTeZLu34jJo0YVaFFToQweiDwCUL/6nBLWq3S7nEiDL73hTG+u2lca1/ShaWg+g==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-subprocess": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess/-/dsh-subprocess-0.1.0-rc.8.tgz", - "integrity": "sha512-rTWwWCq/WrBTjaXhApu7gaho6UHwMZq0+l7nZ06YMUreNZoCHfg67pAXopMqTgr/iotphmXQdChrLgBabzL1gA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-subprocess/-/dsh-subprocess-0.1.1-rc.1.tgz", + "integrity": "sha512-SXd/WT2SddMYUhCno518bmOdv6SqH9OX4X/u2uVzgT793UJ1bNtx5UZiTIox3jZFZXeSj+snthuzCiZfnA2j+A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-subprocess-local": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess-local/-/dsh-subprocess-local-0.1.0-rc.8.tgz", - "integrity": "sha512-2QMd6Nwjd+ARor4g+GSZ3dNyTvEf2IPOje47nQwa3UCmltLxn8K8gjDAN/5sGr/IF56P14FeF4xFag7tMK+Zdg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-subprocess-local/-/dsh-subprocess-local-0.1.1-rc.1.tgz", + "integrity": "sha512-y3omlRw0rE8v9VrSp+QQwzVca7fXp6UbSuW0klsYsC9QxEMx6iOSXsZyu8ZKLwd2hh38uY8GspzB8oTdXqpiHQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -3525,103 +3450,103 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-system-prompt": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.1.0-rc.8.tgz", - "integrity": "sha512-yk8Z85rzX2EwpKNWA5i+K3I3mqsIIUc9niwbDpXO8vlHvpC2qR3RNHjJIJN2EZYDqfSzTVtkbxHFsuMzDXIbew==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.1.1-rc.1.tgz", + "integrity": "sha512-YILPMh2sfwhcK1ijr9ll7TKVQPwhhfrxIFl/Kdi+LIeLiTlOOnt6krpGnlXfzRPu7SzpNnwcetKljKOrHtY2YQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-terminal": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-terminal/-/dsh-terminal-0.1.0-rc.8.tgz", - "integrity": "sha512-Vu73FrQGx8h7Mqq0QdKtzAiZ3xgVM4fB9wmf3fEl6OiJTcqfc8t4lgug3gE7uBeDVRaLn+aq7kHbEUOY0fsm1Q==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-terminal/-/dsh-terminal-0.1.1-rc.1.tgz", + "integrity": "sha512-34Ef13Gt5NG+W+u5Z41tt/TPBNFwMfjXBCy3ySSpZw/8b6KXDs2KwgLtrfBBBOSB9wV8ONtC5DCCEsOvRr+u9A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-terminal-bash": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-terminal-bash/-/dsh-terminal-bash-0.1.0-rc.8.tgz", - "integrity": "sha512-ehBMVr/0kZ15Vud7uE6PLobukwJi/BqGDbI1oonPPTOoTjDvuCqlKotNEQtS/G4NsvGshEABv+m5X5ELcRCWUA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-terminal-bash/-/dsh-terminal-bash-0.1.1-rc.1.tgz", + "integrity": "sha512-m9ADv/ZAMI1uubj3zihD1G67Ql2pzrc5HeOUPx32Iwq8autKqj5/Jef8QnbUgQsqNAlLHodhuLroTJbKPv42+A==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-pwsh-local": "^0.1.0-rc.8", + "@deepseek-ai/dsh-pwsh-local": "^0.1.1-rc.1", "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", - "@deepseek-ai/dsh-terminal": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1", + "@deepseek-ai/dsh-terminal": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-time-context": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-time-context/-/dsh-time-context-0.1.0-rc.8.tgz", - "integrity": "sha512-9Rdse95S6Uk8OAHf78AQN/pxV6+29fCkIbF4ONP/F/6YBciKDORypRyMbHNSY81fBMHQPhW1xvZecGISdIHHiQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-time-context/-/dsh-time-context-0.1.1-rc.1.tgz", + "integrity": "sha512-MIk6ID6LDDaP0NstVY0D36+qIzB1X35fC85PXsTr/b8g9ccu4GVod6ohunnhD6RcHQ76qHtVcKhtu+AoiFpebQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-timeout": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.1.0-rc.8.tgz", - "integrity": "sha512-RwOC/qHribE6b+LStAO7aAgweefLE5sqDO7Uz6/mnTDyJxCt7HNQnE/Op8sAvRa33d752aUkPfO9S0mgzVAoFQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.1.1-rc.1.tgz", + "integrity": "sha512-9JURjw8lFbSAQogQiN7KvNAJc7WdUMdrj1PkcZEs3y0rMuTb4Z0+l0QS628+BzmKzB2ndZs8QO8VJSMTSdpaIQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tmux-context": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tmux-context/-/dsh-tmux-context-0.1.0-rc.8.tgz", - "integrity": "sha512-ezhL3Wjpn4TqqvgSuKrJgNVG7jrWGekEWRYimqD1SvmAHQAS+Xr9q7DBl1uSFfJDWUOAPlAB8VAuo3k/CLUwKA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tmux-context/-/dsh-tmux-context-0.1.1-rc.1.tgz", + "integrity": "sha512-KvAviVyFybH1Gh08PLBDMV2VFUqVy1Pf1w8I8tI/EyiuHiZ3R8WXfYs4qp/oGN+n/atCHmJwkicR67xpG3LHFQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-token-meter": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-token-meter/-/dsh-token-meter-0.1.0-rc.8.tgz", - "integrity": "sha512-ZcS6vuuJhoqjUrbyROuiiYk4nrvChkkYEfIoj7CjGbNArWOhbStmBaiPyahtcB1kThcnUKdu7vv7DaZJdLw8Lg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-token-meter/-/dsh-token-meter-0.1.1-rc.1.tgz", + "integrity": "sha512-P5CIwXRbGUO8AquJIuoZaLlBY7NZ/OqGM7BRM9Qps+vNaC3lmwa/Dq/I+fhmckXjPMYLA20X4kVVn/SDUG422Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3629,100 +3554,100 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8" + "@deepseek-ai/dsh-compaction": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-ask-user": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-ask-user/-/dsh-tool-ask-user-0.1.0-rc.8.tgz", - "integrity": "sha512-PQVcuvNvTI18B2jSvgS20wX0GRnpom+6X6iNBL/WPLiicJeoxvDYj+M7SjdSsqBNv5t0i9VlYhO4NYicmluy+g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-ask-user/-/dsh-tool-ask-user-0.1.1-rc.1.tgz", + "integrity": "sha512-MUXpZ6BYy/rAY8Yp+NXXwbH9Cxlria4GGq+nbnYaTHpc8xM76X1hpp3n2iOzV/ef9V+IDCWmW3Z3gnljbDFWRw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-questions": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-bash": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash/-/dsh-tool-bash-0.1.0-rc.8.tgz", - "integrity": "sha512-VvP8Ky8ifqS7Iy7XUxc6cWB7sse3X6gqr92m0hBuodwQblzrZq2b6IyzfTzXKZKLqt5mMUaLRt7IPIDOOG+WEQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-bash/-/dsh-tool-bash-0.1.1-rc.1.tgz", + "integrity": "sha512-e083Qn7V8oESrvMU+7oC7wpj16PgU8/fXErgEsSyxFIY8e5qU/+K1jWX1B2SvVS/bpE7+nm3Lq2jNDFpXZ6+Sw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell-env": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-bash-persistent": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash-persistent/-/dsh-tool-bash-persistent-0.1.0-rc.8.tgz", - "integrity": "sha512-GySj2Nr7y4ewYTH0miD5DzfLEZNxAmWfSyJ5oOYVtzIbqkcU5WOjpsjQvDg0kuERXAq4MYcdc2QfrPet1/MkIQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-bash-persistent/-/dsh-tool-bash-persistent-0.1.1-rc.1.tgz", + "integrity": "sha512-nbEyHaldIFH0XSZwGGqTL5TC9Rw8EsdN/Yy3ONxu4Leo6evMP0FhwND2zOD2ORTrp5R2lqLaLWcz2c3RZWF8Nw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-terminal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-terminal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-call-timeout-policy": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-call-timeout-policy/-/dsh-tool-call-timeout-policy-0.1.0-rc.8.tgz", - "integrity": "sha512-Z6M/nkcz40DisaOIHqUOjjjW4wCi+JqQNoUhOu+VAoBDWHl7SDmEvdWSQUwkyOETjcfdRSG4RTJ5z/rBUVCPHQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-call-timeout-policy/-/dsh-tool-call-timeout-policy-0.1.1-rc.1.tgz", + "integrity": "sha512-lAd+eRth7mhr/SRb8CFz9OhS5arF3VQgnrWxfeftE+oofytj8juiwppSBXPfjl1lP6a2D5jVsQ0G6pd3pdZCXQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-cordis": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-cordis/-/dsh-tool-cordis-0.1.0-rc.8.tgz", - "integrity": "sha512-bIbkazp5xasqtJBFljOGVIdxyAAWIcKoxMuhDoUpfPFuEqZaXJumYJJ9+ugqr+KKkddjuf2SvlpE5XB4zWcNvg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-cordis/-/dsh-tool-cordis-0.1.1-rc.1.tgz", + "integrity": "sha512-NvBKLiR/mqLP+pLulayPH8t1bmOYFGoUGUR/V5hUP4GjUpS7sCrR+PH519N0lSRgxghx9Q1YrvC05M2wcfV5vQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-fs": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs/-/dsh-tool-fs-0.1.0-rc.8.tgz", - "integrity": "sha512-pxo2YfVlqcw0sCA2+4DtqaaYsuxkx1QfvjT3VO+ckZMWn/UnGOUuzjJtKhVynwjm8prttGqK2LBXUTBZPlKTWg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-fs/-/dsh-tool-fs-0.1.1-rc.1.tgz", + "integrity": "sha512-T9teZZdjshbc/J+nsQV7o6Jdp+q/A8tYSx3FHP5BbN14T8tlyd9F7FWccicyNe4uni3e6ZlUfXjE3Qx6c1epGA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3730,22 +3655,22 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" + "@deepseek-ai/dsh-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-fs-search": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs-search/-/dsh-tool-fs-search-0.1.0-rc.8.tgz", - "integrity": "sha512-AZvESByrPbBIYIGDoTgVOHH48antHy2ZSaLfsVfz1Rw/jQIeiBKwt2LYIPhRGGvev6TXw95qWKt5cyv6WDXHlg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-fs-search/-/dsh-tool-fs-search-0.1.1-rc.1.tgz", + "integrity": "sha512-aMSfkvvrvXI7uLcLb06J+WR+ZjdAD7ROswC3g/l4lpMV7h8WuRcEp5uCpdxuMrgQ6bqNrpDD5QT/KDU8d7VE3A==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3753,202 +3678,202 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-spill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-output-retention": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-spill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-goal": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-goal/-/dsh-tool-goal-0.1.0-rc.8.tgz", - "integrity": "sha512-EO8iqRV3R8YgdMGUVAp/20XCKbegdwZ7fqr7+oSg11lGHuTnXDz4im4HBXri/wmL9XHeBjmcAQ0BXESbhX2VOQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-goal/-/dsh-tool-goal-0.1.1-rc.1.tgz", + "integrity": "sha512-3SRUmWx3Q7TYlg3ySDiWII58Df6RivxkF2OHQUxJRpjHboJJsoO2YwOAFFoaNij92OHvXKhB914w/FKbIVqz4Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-jobs": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-jobs/-/dsh-tool-jobs-0.1.0-rc.8.tgz", - "integrity": "sha512-p3gWi38ryJFRes1lTAdVkdZrUBB8RYPpy4XqZ9DgC2qcrLOJZnnsprIUxyDDmhbyargOgTGc3hEeRU5g8OQAIA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-jobs/-/dsh-tool-jobs-0.1.1-rc.1.tgz", + "integrity": "sha512-yW+4977eNR/ZjYlEMhA2XgY6pFR+Rj8DBoZV4bG+NKWGWXec2gxML4UzdC/EVg5qJ/b08P07/3MpdjfEBCs6Uw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-output-retention": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-pwsh": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-pwsh/-/dsh-tool-pwsh-0.1.0-rc.8.tgz", - "integrity": "sha512-B5F08tsSD7DHqXDXjn/Q11FavHw1U8/WAEqp8AC47vDRymPJIgTM8zSlJ0Lx7aZaKPTW4zQYtSmwUhy93q6zfw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-pwsh/-/dsh-tool-pwsh-0.1.1-rc.1.tgz", + "integrity": "sha512-dyKAw1z960cfqIMaZwXSCDY4LIZ9w7RlWxBcanVtCNXUzqac8qCVvYNoXGnJ5u9KTjdfYyxp9uAmlvdQIoe9eA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell-env": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-pwsh-persistent": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-pwsh-persistent/-/dsh-tool-pwsh-persistent-0.1.0-rc.8.tgz", - "integrity": "sha512-OxQhywkvUTuGj26yaE1LyoADsCKttaIdiq2dJd+Xcbjc+tnI1gfoVrBj+Sta3/uT7x66kKjXZ1+gnw6gK5qISQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-pwsh-persistent/-/dsh-tool-pwsh-persistent-0.1.1-rc.1.tgz", + "integrity": "sha512-9+LWvtD5fucgNF2QzJJgFFcBHa/hvtQvPqGy+N31w2BE2lXogtFZBwWRdfH1L4Fye3F0+37l88xs3coZY4RONA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-terminal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-terminal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-ralph": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-ralph/-/dsh-tool-ralph-0.1.0-rc.8.tgz", - "integrity": "sha512-+kVCbLEBDxOCCHPdR5+hgQFbkTvTaJ3D7zTNxNEtS5Tr/7eGAU7/VmwNMMSZ4Z+eyHQQEm4vgT+O1pMTvLmb7g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-ralph/-/dsh-tool-ralph-0.1.1-rc.1.tgz", + "integrity": "sha512-qJMzBfmljqpm1BiedNwdfBnuvWH3+5N2duC/x1hGA3IodHQ1Rc03hVtWJnbB6GYctshJbLRft7yLnNTO6ghgNw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workflow": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-skill": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-skill/-/dsh-tool-skill-0.1.0-rc.8.tgz", - "integrity": "sha512-oQAPyXiQDDZ73rZwST7KqwUAr0Al3U1dxWdtzETsMzvNSQE9fmMBz5jUObFIEjxxJcA07Pp1DFzuJdpkCIDeCw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-skill/-/dsh-tool-skill-0.1.1-rc.1.tgz", + "integrity": "sha512-1VDrgqj3I+I+LmqD+B1RTb0zU7uZuajjPmczCNQAV0zuLjTIbwiHne7G4gIxm5CE7uXlxsSzZnF7ZSuYKF1m/A==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-skill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-str-replace-editor": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-str-replace-editor/-/dsh-tool-str-replace-editor-0.1.0-rc.8.tgz", - "integrity": "sha512-2gyO5a5xNvBo9I5vmVSvgXRfxUfKGDu3WjjdK0aDWx/Y+C1r1mGVC7R5mN/oJstcUCIyKm483ux1pT9/O1QD8w==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-str-replace-editor/-/dsh-tool-str-replace-editor-0.1.1-rc.1.tgz", + "integrity": "sha512-4P4SKqMUeEq39Dcw7oXenIMKlkyp3lwvchnmP9shf/fRAs5nAxDPMja4Wb7sEXQkVaBF9pUUp7GZPhfqhFIGWQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-fs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-subagent": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent/-/dsh-tool-subagent-0.1.0-rc.8.tgz", - "integrity": "sha512-mwNV8M7hsy9+OsSFCluv87FiDHaXO91m83xF/o34Ip9xrgkGs7LOCjvUdCpwjxFTJenWEcvEU90aa7vv3aT/Iw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-subagent/-/dsh-tool-subagent-0.1.1-rc.1.tgz", + "integrity": "sha512-N2FSHL+IsjBUTKsOeVuu4IrERuLJ32h8Zp5TWWQ7ONy+yISnFZqkmGrx6BB55HsnM4OM1fzVcBME7+tVqQ1tdg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-subagent-control": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent-control/-/dsh-tool-subagent-control-0.1.0-rc.8.tgz", - "integrity": "sha512-zXF9iIzr96w/S3jNxkRcyV1ouwA1eUCSmvqhlSDkkcA8RH5jt5vWkTia8fwRs1pFS9m7OpbLtvbDxjC8D3nedw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-subagent-control/-/dsh-tool-subagent-control-0.1.1-rc.1.tgz", + "integrity": "sha512-3Y4G1s4ebdAwln41Jike3Rnp4k4d/v47PQVFlk9hVJvbrt2C6LGLM1Id2C4+30Hi6JPE4EaO3wIutkX5ar4aLw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-subagent-report": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent-report/-/dsh-tool-subagent-report-0.1.0-rc.8.tgz", - "integrity": "sha512-u0CzoSu7O1YyOpGyHfmT/P2hCfnepSzVKrs6MHFrzjbuiRFEcVme6/iLrc7QdLtg484Q1kcnqG2z0OZS24AnWQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-subagent-report/-/dsh-tool-subagent-report-0.1.1-rc.1.tgz", + "integrity": "sha512-TbtTJEZcE0K3UU7tbkgpTy3T6bJrn3SGyzpSiguiPkqYSh2i3qi4kHKMgI2fH5NlmznyKI2EmWb9Tjw53zxgQw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-todo": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-todo/-/dsh-tool-todo-0.1.0-rc.8.tgz", - "integrity": "sha512-eWxwTeX5WsQPSsz1qyJq+UMiASYB5UHLdObVd4vFLYKbFOoglUK0X+Ie5OjlAkFTP+OzCQMAzUl2gJMwJPWKig==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-todo/-/dsh-tool-todo-0.1.1-rc.1.tgz", + "integrity": "sha512-j3gZX+p1vJYrJpPFaXiyYSEQf8rpWbQ7sNJASRCFR2Q3a3rGHXrcFVr4A7WXH7zgIHwcNKK4FHv7aDAk2JuMrQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3956,17 +3881,17 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-web": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-web/-/dsh-tool-web-0.1.0-rc.8.tgz", - "integrity": "sha512-MrTkQ2L52A13ysTM94bSW+5sXq3AyVNoo5q3bK47bsl+hg9Kga5gDgGAZ+SGVSQZAUEHXfuYGHaErdUp50bncw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-web/-/dsh-tool-web-0.1.1-rc.1.tgz", + "integrity": "sha512-d3/9NJQc2Vcv4m6Q94POCRZ0conqjAeqUobNwIpMiWrSL4U8jZYzXwFVBw0Sw+cwYVBi2Og5Vv9aJmWANTX3Mw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3975,56 +3900,56 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-web": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-web": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tool-workflow": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-workflow/-/dsh-tool-workflow-0.1.0-rc.8.tgz", - "integrity": "sha512-Z3MCCLM28J/nqiqwHG9roGVUzwMKEADRsSNLPYNemXq5vVEYjm5sBwC+QcWtiQ7NxKXf5ViUu3eKXTe1Fh5TNg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tool-workflow/-/dsh-tool-workflow-0.1.1-rc.1.tgz", + "integrity": "sha512-KS7BF1W6fGFgatMQ7daCRxSDH3zG14ob3s2b0Qzb0chZAIbxVe/DcQi2xTcK0MpXr77RKikdHUgU6n/+arC+pw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workflow": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-tools": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tools/-/dsh-tools-0.1.0-rc.8.tgz", - "integrity": "sha512-tvuGAVUS4yoPW9zH7CGWJgMlAzGjfu2UlRiricldlcwSKAaJZPZx/K/YfTivUyDTER6aK1DJUnIpVG7RD/DoHQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-tools/-/dsh-tools-0.1.1-rc.1.tgz", + "integrity": "sha512-vvb7G/DR/guhL1B5pMRdmi44YQedeefp02Q6pkHS+MgjNl8N//CZFCPSxSX9kX/a8R5/tDQZxxGsZdj6vcC6zA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-code-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1", + "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-typert-loader": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-loader/-/dsh-typert-loader-0.1.0-rc.8.tgz", - "integrity": "sha512-IB2Bkv7UglS0y/Dt7buFq87bbUkD/njvuCp4/bRxlbb/8U02b7v18UXnYFoZjCusfzeYxaCBZihImv7aDMBhCA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-typert-loader/-/dsh-typert-loader-0.1.1-rc.1.tgz", + "integrity": "sha512-8NKYGmopkroNhPtMbTc1Xdx5twz8VxlV1fVie22LgxmS5c8eP2Q5DQc8jV5A/5tePYchsC+FpeNSPMKUgzkO4Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" @@ -4032,151 +3957,151 @@ "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-typert-registry": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-typert-protocol": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.1.0-rc.8.tgz", - "integrity": "sha512-scwEAefRBL7gRpaXiEdiHRMvlr8dLmUbiEvy0LOAX/8X3FZBd/5tHQ/8lCppAQNTDZMI/LSiSMpu5XrFId+7cQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.1.1-rc.1.tgz", + "integrity": "sha512-bdPYdYDNYgTGgEkHCIEB/QUUTXo0r5hkEyWlh+v95Qe34B0ZO3KhYTPSPaoYDwP0kEaOwtmmxNGZd8HFJ8VQnA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-typert-registry": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-registry/-/dsh-typert-registry-0.1.0-rc.8.tgz", - "integrity": "sha512-pxfRE5f1y81h2lNqj0uooYrErTVgpzKfYm4W+ppRafN5s/+1jlLIYWiG3wWD3bnxyoD2NLcTEhi/GXoaqiwdaw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-typert-registry/-/dsh-typert-registry-0.1.1-rc.1.tgz", + "integrity": "sha512-9kavDx4n2dxtDNU8uPpoaB604uVBST2aA0TvcR5d+GTA7/vFgqmT2JjQv5PG+GwM+JAO08MsP2ldWMB+FPo/Zg==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8", + "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.1", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-user-approval": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.1.0-rc.8.tgz", - "integrity": "sha512-6SFCxp7dgNFEyzQIcs5i9C+5djgXsAeV0iKmZUCLlcIeVM1chcCMHyGcoXlw8yyB14qFMrMs+TPvhvpu2WWxAw==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.1.1-rc.1.tgz", + "integrity": "sha512-r2TkC0JJGQ8EOyTH8DXafbcj080NdNbVzoNERA1pRTrH7+ZE0PHU6MZU7xGy7cwAKmAUGnm1DjF8UHOQN6ns2Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-user-questions": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-questions/-/dsh-user-questions-0.1.0-rc.8.tgz", - "integrity": "sha512-kiOAlpKKfB89iObWiiVpueD4XCaday203LGUs7+eGb2isolY6VppoGb7ZmcJQqsW63bjbAA7wZeJuN3CoxcvSQ==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-user-questions/-/dsh-user-questions-0.1.1-rc.1.tgz", + "integrity": "sha512-q5RZczXTNzSC/fas+qIno5jCqH/jotz0OpBzRCTNMPV1ID4YcGroaUKsLxzaGXP5bbiaVlX5Tqt5FUYO6rYStQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-web": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web/-/dsh-web-0.1.0-rc.8.tgz", - "integrity": "sha512-YLraDwZTx0Y3Jqw2cu4eClv9ZgEJYoeSFzTe7c9JZ4Z3ThaNCCwEaXWEPMBiPKU6QlR8ahkPPj6xoU9+nPO66g==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-web/-/dsh-web-0.1.1-rc.1.tgz", + "integrity": "sha512-fYJ3epKwpY0zO61a9SshY/gKmrcfP7N9EX7/VUGWdpE89jKg52LkioZ5QQ2cKYatbPUHLWx3H+llCGmqOf4bAA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-web-app": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-app/-/dsh-web-app-0.1.0-rc.8.tgz", - "integrity": "sha512-Te/N+AxFmQF2267yMqama5Lp2evsBJeFsqhnEZPfvFhquLBBWgtO5DNZ2cxto5NhGGNNCk/JV25vHRxd7bZl8g==", - "license": "MIT", - "dependencies": { - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.8", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.8", - "@deepseek-ai/dsh-app-boot": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-hmr": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-brand-official": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-cordis": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-deliverables": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-goal": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-jobs": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-message-feedback": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-model-selection": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-permission-presets": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-plan": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-renderer": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings-general": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings-models": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-skill": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-trajectory": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-user-questions": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-workflow-run": "^0.1.0-rc.8", - "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.8", - "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.8", - "@deepseek-ai/dsh-file-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-file-reference-local": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-directory-picker-auto": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-frontend-static": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.0-rc.8", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.8", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-log-export": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-reference": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage-json": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", - "@deepseek-ai/dsh-web-frontend": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workspace": "^0.1.0-rc.8", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-web-app/-/dsh-web-app-0.1.1-rc.1.tgz", + "integrity": "sha512-qV0Djh/9lhdBMlkwry8x3Fu3pckiNur8OiQN8cIRvGqyDrJ3yWBjJYga491OeFEmCw/QF9DbfKgmU/O8r4gzlg==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-agent-presets": "^0.1.1-rc.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.1", + "@deepseek-ai/dsh-app-boot": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-connection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-hmr": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-modules": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-attachment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-brand-official": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-cordis": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-deliverables": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-goal": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-jobs": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-layout": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-message-feedback": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-model-selection": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-permission-presets": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-plan": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-renderer": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings-general": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings-models": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-skill": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-theme": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-tool": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-trajectory": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-user-questions": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-workflow-run": "^0.1.1-rc.1", + "@deepseek-ai/dsh-client-ui-workspace": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cmdline": "^0.1.1-rc.1", + "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cordis-client-runner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.1-rc.1", + "@deepseek-ai/dsh-file-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-file-reference-local": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-apiproxy": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-directory-picker-auto": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-frontend-static": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.1-rc.1", + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1", + "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-message-feedback": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-log-export": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-projection-cache": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-reference": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-stats": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage-domain": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage-json": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "^0.1.1-rc.1", + "@deepseek-ai/dsh-web-frontend": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workspace": "^0.1.1-rc.1", "@deepseek-ai/schemastery": "^3.18.1", "commander": "^15.0.0", "open": "^11.0.0" @@ -4184,14 +4109,14 @@ "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.8", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-shell-env": "^0.1.1-rc.1", + "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-web-app/node_modules/open": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/open/-/open-11.0.1.tgz", + "resolved": "https://registry.npmmirror.com/open/-/open-11.0.1.tgz", "integrity": "sha512-NzwMUB6C1D0+Kd+9iMS/H4k+Ck3cTX6Ckyfr/gAGlmvSE1LUQZnEZvWBi4PYmMwH/S5SMeTXnE+9uAz8uF+pWw==", "license": "MIT", "dependencies": { @@ -4210,85 +4135,85 @@ } }, "node_modules/@deepseek-ai/dsh-web-frontend": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-frontend/-/dsh-web-frontend-0.1.0-rc.8.tgz", - "integrity": "sha512-GxWJtkNEniYtSH19XWIJvMO2RSP2bMAZvs3Z6m9cEr9OFbngCY5XCXwqsJMYqOJIao0eSePp/eRCPeXNvqeGXA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-web-frontend/-/dsh-web-frontend-0.1.1-rc.1.tgz", + "integrity": "sha512-LxKEcBy6npgLXqrg1utA4/OZocXrx1tTQaIK1VH1l2vNs0vN6fOKSMpbvbUB0mW0RKxXmHg8NfJ4JkdliMtIsw==", "license": "MIT" }, "node_modules/@deepseek-ai/dsh-web-search-deepseek": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-search-deepseek/-/dsh-web-search-deepseek-0.1.0-rc.8.tgz", - "integrity": "sha512-ifaFw+Cil3yte/9r//3wwMWWPIMuYhvYAB0Hk56IVf+8RDbnRkTJY2foFNNgD91dq1ZL2gBijkdxv1c7wDt+EA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-web-search-deepseek/-/dsh-web-search-deepseek-0.1.1-rc.1.tgz", + "integrity": "sha512-3iQHtGsPYEi0r2Zd34XO+FayTPrE9PfPpwnHSdvKy0MdfGqjEvJyujh0V4X9tA8EhW1eGXzoOXIIKzVOxxdmTw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", - "@deepseek-ai/dsh-web": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-credentials": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-launch-environment": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-settings": "^0.1.1-rc.1", + "@deepseek-ai/dsh-web": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-workflow": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workflow/-/dsh-workflow-0.1.0-rc.8.tgz", - "integrity": "sha512-a4UJKJAFOPQgVaWegk8MIh8BQjqerkGhHu2+uGF4wyGanzI7FHHY/OUmH4hHTVEx2qFcWh732Od/T8LgL6gcbg==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-workflow/-/dsh-workflow-0.1.1-rc.1.tgz", + "integrity": "sha512-Q7Vq+oqklhlM9XeQp+LmOZDWXCvxSQHdFjY1p5DxUOgJgLCcoNe+0QsOwH7VHm99ZfTtGisH/t7oWx+m7fbcHA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-workflow-worker-thread": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workflow-worker-thread/-/dsh-workflow-worker-thread-0.1.0-rc.8.tgz", - "integrity": "sha512-QBkHJ8l174U3VqHRi2KyJIFey+Uxzo/OOFbTFx7TP5f761lPvqYiXlILuQJ9QvT7WJTyZO3QRLIIU6ZEBwxTIA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-workflow-worker-thread/-/dsh-workflow-worker-thread-0.1.1-rc.1.tgz", + "integrity": "sha512-i569BFPdkc7OU/kfcJvRH59GGz9wXmUR5pc6pPVZLNkpPvaqiOgThnK3D4wSfq9SkxuzK4026IwITsUJF2poig==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.8", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.8" + "@deepseek-ai/dsh-agent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-llm": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-subagent": "^0.1.1-rc.1", + "@deepseek-ai/dsh-tools": "^0.1.1-rc.1", + "@deepseek-ai/dsh-workflow": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/dsh-workspace": { - "version": "0.1.0-rc.8", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workspace/-/dsh-workspace-0.1.0-rc.8.tgz", - "integrity": "sha512-Uyw44WcYvXRQjb0kUstTEJmL83hkGQbWnJzglaGWcAvsZBjQHeBgKuLzOZin1yc/dRX2pKuk1InFwxKXpaHjBA==", + "version": "0.1.1-rc.1", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/dsh-workspace/-/dsh-workspace-0.1.1-rc.1.tgz", + "integrity": "sha512-rdw8ovh2C3DlE1UyQUUFv+U5b0JoNveypWlldslEjkwLQTO8zKeZE0HGPEGnIwHPz3wYOr/jQKe+mbKnFQ94nQ==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session": "^0.1.0-rc.8", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.8", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.8" + "@deepseek-ai/dsh-brand": "^0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session": "^0.1.1-rc.1", + "@deepseek-ai/dsh-session-persistence": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage": "^0.1.1-rc.1", + "@deepseek-ai/dsh-storage-domain": "^0.1.1-rc.1" } }, "node_modules/@deepseek-ai/node-addon-landlock-run": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/node-addon-landlock-run/-/node-addon-landlock-run-0.1.1.tgz", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/node-addon-landlock-run/-/node-addon-landlock-run-0.1.1.tgz", "integrity": "sha512-aHGhlQJEutfobKM/4K59SERbT7RmQdD2oMKzD8Bne/Ps7TeT8AweCN+dpdfuxQhMNbFcJMymrgPnID0WYQ30Tw==", "license": "BSD-3-Clause", "engines": { @@ -4301,7 +4226,7 @@ }, "node_modules/@deepseek-ai/node-addon-landlock-run-linux-arm64": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/node-addon-landlock-run-linux-arm64/-/node-addon-landlock-run-linux-arm64-0.1.1.tgz", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/node-addon-landlock-run-linux-arm64/-/node-addon-landlock-run-linux-arm64-0.1.1.tgz", "integrity": "sha512-lYY2RbcPW4rGRM5hVJbrXlvLqyBxeJBjBqvt+QTHTU+GtfUVVjTODKa4e3CRwMQoCEpOjoARdQBHbN7HvE72WQ==", "cpu": [ "arm64" @@ -4317,7 +4242,7 @@ }, "node_modules/@deepseek-ai/node-addon-landlock-run-linux-x64": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/node-addon-landlock-run-linux-x64/-/node-addon-landlock-run-linux-x64-0.1.1.tgz", + "resolved": "https://registry.npmmirror.com/@deepseek-ai/node-addon-landlock-run-linux-x64/-/node-addon-landlock-run-linux-x64-0.1.1.tgz", "integrity": "sha512-OHAzPW2Coe/iYobAJAAA8CeVrBoKV4BnNHsgwvXwOfishxkUVSWSvdyxrZPiwYRXutpIGVrSo9zV3WOQy2euBA==", "cpu": [ "x64" @@ -4333,8 +4258,6 @@ }, "node_modules/@deepseek-ai/schemastery": { "version": "3.18.1", - "resolved": "https://registry.npmjs.org/@deepseek-ai/schemastery/-/schemastery-3.18.1.tgz", - "integrity": "sha512-Qn0FCSwCQnpnj6SB31I6i2sIKgKWnkbJM8O0EU91Gv2UsYVvtZTl6IA0sCwk2e2MZf5S8w5hpq9QkeVvK9qwxg==", "license": "MIT", "dependencies": { "@deepseek-ai/cosmokit": "^1.8.2", @@ -4343,7 +4266,7 @@ }, "node_modules/@earendil-works/pi-ai": { "version": "0.82.1", - "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.82.1.tgz", + "resolved": "https://registry.npmmirror.com/@earendil-works/pi-ai/-/pi-ai-0.82.1.tgz", "integrity": "sha512-3WFYRhEp3lQB3444EhPMBcM7zSaEUE3eJgHOR7s4081NLqbw/FsWilIKWXSua0Gv3sRr7m9xMidR3pPDE7jI/A==", "license": "MIT", "dependencies": { @@ -4368,7 +4291,7 @@ }, "node_modules/@earendil-works/pi-ai/node_modules/@opentelemetry/api": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", "engines": { @@ -4377,8 +4300,6 @@ }, "node_modules/@electron-internal/extract-zip": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.5.tgz", - "integrity": "sha512-+bqFCP98pLI0Tt0XQo1TmlXtwjWchISndDOxCkEcIuUgXWpBnLyRI+2DU+mesvnMMX6L1XDqYNA0lXNDHd/yiA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4387,8 +4308,6 @@ }, "node_modules/@electron/asar": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", - "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", "dev": true, "license": "MIT", "dependencies": { @@ -4405,15 +4324,11 @@ }, "node_modules/@electron/asar/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/@electron/asar/node_modules/brace-expansion": { "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "license": "MIT", "dependencies": { @@ -4423,8 +4338,6 @@ }, "node_modules/@electron/asar/node_modules/commander": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, "license": "MIT", "engines": { @@ -4433,8 +4346,6 @@ }, "node_modules/@electron/asar/node_modules/minimatch": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -4446,8 +4357,6 @@ }, "node_modules/@electron/fuses": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", - "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", "dev": true, "license": "MIT", "dependencies": { @@ -4461,8 +4370,6 @@ }, "node_modules/@electron/fuses/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4477,8 +4384,6 @@ }, "node_modules/@electron/get": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.1.0.tgz", - "integrity": "sha512-3kSBtG8ObcTVfXanm5vVJ6UnBLEVmVsRk1M+vGqCuMBV+XLCbJYuWQful+yIy0GQDsSlK0kHEriEHn7SPk4EnA==", "dev": true, "license": "MIT", "dependencies": { @@ -4498,8 +4403,6 @@ }, "node_modules/@electron/notarize": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", - "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", "dev": true, "license": "MIT", "dependencies": { @@ -4513,8 +4416,6 @@ }, "node_modules/@electron/notarize/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4529,8 +4430,6 @@ }, "node_modules/@electron/osx-sign": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", - "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4551,8 +4450,6 @@ }, "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, "license": "MIT", "engines": { @@ -4564,8 +4461,6 @@ }, "node_modules/@electron/rebuild": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.0.tgz", - "integrity": "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4585,8 +4480,6 @@ }, "node_modules/@electron/universal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", - "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", "dev": true, "license": "MIT", "dependencies": { @@ -4604,15 +4497,11 @@ }, "node_modules/@electron/universal/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/@electron/universal/node_modules/brace-expansion": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", - "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -4621,8 +4510,6 @@ }, "node_modules/@electron/universal/node_modules/fs-extra": { "version": "11.4.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", - "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", "dev": true, "license": "MIT", "dependencies": { @@ -4636,8 +4523,6 @@ }, "node_modules/@electron/universal/node_modules/minimatch": { "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { @@ -4652,7 +4537,7 @@ }, "node_modules/@electron/windows-sign": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "resolved": "https://registry.npmmirror.com/@electron/windows-sign/-/windows-sign-1.2.2.tgz", "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", "dev": true, "license": "BSD-2-Clause", @@ -4674,7 +4559,7 @@ }, "node_modules/@electron/windows-sign/node_modules/fs-extra": { "version": "11.4.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.4.0.tgz", "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", "dev": true, "license": "MIT", @@ -4691,8 +4576,6 @@ }, "node_modules/@emnapi/runtime": { "version": "1.11.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", - "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", "license": "MIT", "optional": true, "dependencies": { @@ -4701,7 +4584,7 @@ }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" @@ -4718,7 +4601,7 @@ }, "node_modules/@esbuild/android-arm": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz", "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" @@ -4735,7 +4618,7 @@ }, "node_modules/@esbuild/android-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" @@ -4752,7 +4635,7 @@ }, "node_modules/@esbuild/android-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz", "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" @@ -4769,8 +4652,6 @@ }, "node_modules/@esbuild/darwin-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -4786,7 +4667,7 @@ }, "node_modules/@esbuild/darwin-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" @@ -4803,7 +4684,7 @@ }, "node_modules/@esbuild/freebsd-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" @@ -4820,7 +4701,7 @@ }, "node_modules/@esbuild/freebsd-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" @@ -4837,7 +4718,7 @@ }, "node_modules/@esbuild/linux-arm": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" @@ -4854,7 +4735,7 @@ }, "node_modules/@esbuild/linux-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" @@ -4871,7 +4752,7 @@ }, "node_modules/@esbuild/linux-ia32": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" @@ -4888,7 +4769,7 @@ }, "node_modules/@esbuild/linux-loong64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" @@ -4905,7 +4786,7 @@ }, "node_modules/@esbuild/linux-mips64el": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" @@ -4922,7 +4803,7 @@ }, "node_modules/@esbuild/linux-ppc64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" @@ -4939,7 +4820,7 @@ }, "node_modules/@esbuild/linux-riscv64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" @@ -4956,7 +4837,7 @@ }, "node_modules/@esbuild/linux-s390x": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" @@ -4973,7 +4854,7 @@ }, "node_modules/@esbuild/linux-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" @@ -4990,7 +4871,7 @@ }, "node_modules/@esbuild/netbsd-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" @@ -5007,7 +4888,7 @@ }, "node_modules/@esbuild/netbsd-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" @@ -5024,7 +4905,7 @@ }, "node_modules/@esbuild/openbsd-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" @@ -5041,7 +4922,7 @@ }, "node_modules/@esbuild/openbsd-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" @@ -5058,7 +4939,7 @@ }, "node_modules/@esbuild/openharmony-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", "cpu": [ "arm64" @@ -5075,7 +4956,7 @@ }, "node_modules/@esbuild/sunos-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" @@ -5092,7 +4973,7 @@ }, "node_modules/@esbuild/win32-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" @@ -5109,7 +4990,7 @@ }, "node_modules/@esbuild/win32-ia32": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" @@ -5126,7 +5007,7 @@ }, "node_modules/@esbuild/win32-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" @@ -5143,7 +5024,7 @@ }, "node_modules/@google/genai": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.52.0.tgz", + "resolved": "https://registry.npmmirror.com/@google/genai/-/genai-1.52.0.tgz", "integrity": "sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==", "hasInstallScript": true, "license": "Apache-2.0", @@ -5167,7 +5048,7 @@ }, "node_modules/@hono/node-server": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "resolved": "https://registry.npmmirror.com/@hono/node-server/-/node-server-2.1.1.tgz", "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", "license": "MIT", "engines": { @@ -5179,7 +5060,7 @@ }, "node_modules/@img/colour": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "resolved": "https://registry.npmmirror.com/@img/colour/-/colour-1.1.0.tgz", "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", "license": "MIT", "engines": { @@ -5188,7 +5069,7 @@ }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", "cpu": [ "arm64" @@ -5210,7 +5091,7 @@ }, "node_modules/@img/sharp-darwin-x64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", "cpu": [ "x64" @@ -5232,7 +5113,7 @@ }, "node_modules/@img/sharp-freebsd-wasm32": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", "license": "Apache-2.0", "optional": true, @@ -5251,7 +5132,7 @@ }, "node_modules/@img/sharp-libvips-darwin-arm64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", "cpu": [ "arm64" @@ -5267,7 +5148,7 @@ }, "node_modules/@img/sharp-libvips-darwin-x64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", "cpu": [ "x64" @@ -5283,11 +5164,14 @@ }, "node_modules/@img/sharp-libvips-linux-arm": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", "cpu": [ "arm" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5299,11 +5183,14 @@ }, "node_modules/@img/sharp-libvips-linux-arm64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5315,11 +5202,14 @@ }, "node_modules/@img/sharp-libvips-linux-ppc64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5331,11 +5221,14 @@ }, "node_modules/@img/sharp-libvips-linux-riscv64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", "cpu": [ "riscv64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5347,11 +5240,14 @@ }, "node_modules/@img/sharp-libvips-linux-s390x": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5363,11 +5259,14 @@ }, "node_modules/@img/sharp-libvips-linux-x64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5379,11 +5278,14 @@ }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5395,11 +5297,14 @@ }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -5411,11 +5316,14 @@ }, "node_modules/@img/sharp-linux-arm": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", "cpu": [ "arm" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5433,11 +5341,14 @@ }, "node_modules/@img/sharp-linux-arm64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5455,11 +5366,14 @@ }, "node_modules/@img/sharp-linux-ppc64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", "cpu": [ "ppc64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5477,11 +5391,14 @@ }, "node_modules/@img/sharp-linux-riscv64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", "cpu": [ "riscv64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5499,11 +5416,14 @@ }, "node_modules/@img/sharp-linux-s390x": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", "cpu": [ "s390x" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5521,11 +5441,14 @@ }, "node_modules/@img/sharp-linux-x64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5543,11 +5466,14 @@ }, "node_modules/@img/sharp-linuxmusl-arm64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", "cpu": [ "arm64" ], + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5565,11 +5491,14 @@ }, "node_modules/@img/sharp-linuxmusl-x64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", "cpu": [ "x64" ], + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -5587,8 +5516,6 @@ }, "node_modules/@img/sharp-wasm32": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", - "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { @@ -5603,7 +5530,7 @@ }, "node_modules/@img/sharp-webcontainers-wasm32": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", "cpu": [ "wasm32" @@ -5622,7 +5549,7 @@ }, "node_modules/@img/sharp-win32-arm64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", "cpu": [ "arm64" @@ -5641,7 +5568,7 @@ }, "node_modules/@img/sharp-win32-ia32": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", "cpu": [ "ia32" @@ -5660,7 +5587,7 @@ }, "node_modules/@img/sharp-win32-x64": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", "cpu": [ "x64" @@ -5679,8 +5606,6 @@ }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "license": "ISC", "dependencies": { @@ -5692,14 +5617,12 @@ }, "node_modules/@joplin/turndown-plugin-gfm": { "version": "1.0.67", - "resolved": "https://registry.npmjs.org/@joplin/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.67.tgz", + "resolved": "https://registry.npmmirror.com/@joplin/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.67.tgz", "integrity": "sha512-FZfW5EZfidhzd1IaY1uxHnIZPTVOxAdleMZ4/1U6Nt5b7+Qj5JThDnaIomuJtetnUBzuRNbe9FWMuqD4B3dlWA==", "license": "MIT" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -5709,8 +5632,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5720,8 +5641,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -5730,15 +5649,11 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -5748,7 +5663,7 @@ }, "node_modules/@koromix/koffi-darwin-arm64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.1.5.tgz", "integrity": "sha512-IpqITl2fJi3QN9bTtNnygWPdK7ScSjw3xtGu8e6feYGvimCysu+spgI5KyeslY2jTnqxGS9xr8pLAbLhGJ8edA==", "cpu": [ "arm64" @@ -5764,7 +5679,7 @@ }, "node_modules/@koromix/koffi-darwin-x64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.1.5.tgz", "integrity": "sha512-4Tia4BS5EV/+vN9eIrdToanVe+U/2VqTZCBgOzoUbPKjgky51eqM+3J4qdRUvmYJohcJNPob5/hsxeItUZrl1g==", "cpu": [ "x64" @@ -5780,7 +5695,7 @@ }, "node_modules/@koromix/koffi-freebsd-arm64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.1.5.tgz", "integrity": "sha512-bP94uzseFO79NG3flpU3WxfyvltD+jzC/kN8FDZLi8J0VUZNW1Wmu8yq87KEzjX1qT9KyX4Y+elVbGqHXHTv2Q==", "cpu": [ "arm64" @@ -5796,7 +5711,7 @@ }, "node_modules/@koromix/koffi-freebsd-ia32": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.1.5.tgz", "integrity": "sha512-raFXXAPHzvCQWhaoMUF+Cc2ZWgg2UBU0RVoowHZhaw9nQYPC1pERcPRH+JA+SNIN6g4d2GFW6uPFc+QbUhsagA==", "cpu": [ "ia32" @@ -5812,7 +5727,7 @@ }, "node_modules/@koromix/koffi-freebsd-x64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.1.5.tgz", "integrity": "sha512-h6RyBZmPMBIDWTABkJIhzDdYwSnYAJvTacHpEjbT55Arkmw1H15Rl7CFtXuEuBrqh+uivoCrRgA6vszl9CsJ9g==", "cpu": [ "x64" @@ -5828,7 +5743,7 @@ }, "node_modules/@koromix/koffi-linux-arm64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.1.5.tgz", "integrity": "sha512-u0vCmKPu4yQDhl/ri1J6U3vDnvYtYjoZaIWb+oMbRXhVZeiqdE53MGPb+q2A7Dj2n9IbYloAfEICQbL6l0pmiQ==", "cpu": [ "arm64" @@ -5844,7 +5759,7 @@ }, "node_modules/@koromix/koffi-linux-ia32": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.1.5.tgz", "integrity": "sha512-Xa5JbumWglwPVZgrJcLhqyC1wCWlfm7+C00p3FuOTNGp0qoYuf2/tOoAh0/q7+taVm30cMopu/6lRHwdmF6I/w==", "cpu": [ "ia32" @@ -5860,7 +5775,7 @@ }, "node_modules/@koromix/koffi-linux-loong64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.1.5.tgz", "integrity": "sha512-F3i2CeTcqVBUQiSRUBSEzX1VgtXmLLiZb/ouZtXHkWpTLhJNd9TH7s3CizTofci0VRqlKdexGUYhK5vzPDAAHA==", "cpu": [ "loong64" @@ -5876,7 +5791,7 @@ }, "node_modules/@koromix/koffi-linux-riscv64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.1.5.tgz", "integrity": "sha512-2TgQuzy+4PfDg+rw3kOmN6lywEWdzKT3eaLPbOp0b/9DaN7CLBJ/QIR5GhGsMNpeI30zU0YzFeYFxoVoJ/LqFw==", "cpu": [ "riscv64" @@ -5892,7 +5807,7 @@ }, "node_modules/@koromix/koffi-linux-x64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.1.5.tgz", "integrity": "sha512-2yaIg/1V0m4CiAUMzG4CIlWmq1WJ+QBMlFfaGr9su+OH5fuIqC7V3BbMiB03IwIl1VofIZO5JA4Db4lID8tpbw==", "cpu": [ "x64" @@ -5908,7 +5823,7 @@ }, "node_modules/@koromix/koffi-openbsd-ia32": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.1.5.tgz", "integrity": "sha512-8/OXd+u9omMooykhvdJPEP7u6FFzzrrFo9gOmSHc9/DPt3XkVYOtSsE97PDk6zYaAzwIYHSKjHvIXsfFwFc7sg==", "cpu": [ "ia32" @@ -5924,7 +5839,7 @@ }, "node_modules/@koromix/koffi-openbsd-x64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.1.5.tgz", "integrity": "sha512-SpeqldKkuDk2aTj5PVWumy7eq6Tr2GtBPAOI1NiDHhg8xe433KraxrA9V9UjEd+1+kSGJQGR04nQByN3MPA9PQ==", "cpu": [ "x64" @@ -5940,7 +5855,7 @@ }, "node_modules/@koromix/koffi-win32-arm64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.1.5.tgz", "integrity": "sha512-uej3YAEKAhlfVPoIo5sOwtxhTLRVJ01LgtWrKGpnnAQU3C+Ilmaxdh+Oc2xc1G3NK30N5eCVJpyO9r3pjKC6Vw==", "cpu": [ "arm64" @@ -5956,7 +5871,7 @@ }, "node_modules/@koromix/koffi-win32-ia32": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.1.5.tgz", "integrity": "sha512-d42jv2f4PwtJGNJS19Xfn/BRtGsBNNVkw0O0K5tkIGI+yNq4MnPTSUsaGbDIkCLNsCgk/LFqAaE8BExyCdrujA==", "cpu": [ "ia32" @@ -5972,7 +5887,7 @@ }, "node_modules/@koromix/koffi-win32-x64": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.1.5.tgz", "integrity": "sha512-Pyo1WEHEP6Ek2NEn2pquwJzSPLOdY4vymoPSz0an1DgvFWSkOyBYYkGVoxL1ajfj5I1pPdXysYqixtVTzAtOfQ==", "cpu": [ "x64" @@ -5988,8 +5903,6 @@ }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", - "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", "dev": true, "funding": [ { @@ -6011,8 +5924,6 @@ }, "node_modules/@malept/flatpak-bundler": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6027,8 +5938,6 @@ }, "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6043,7 +5952,7 @@ }, "node_modules/@mistralai/mistralai": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-2.2.6.tgz", + "resolved": "https://registry.npmmirror.com/@mistralai/mistralai/-/mistralai-2.2.6.tgz", "integrity": "sha512-W8pX7zHxjJvMIpw8JMxeJEleapXX0Q9NPszdNzqkM3MIEoIGPObdodujj+WHteXEvGfaP/AMwlNyRfEzSY6dQQ==", "license": "Apache-2.0", "dependencies": { @@ -6063,13 +5972,13 @@ }, "node_modules/@mixmark-io/domino": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "resolved": "https://registry.npmmirror.com/@mixmark-io/domino/-/domino-2.2.0.tgz", "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", "license": "BSD-2-Clause" }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", + "resolved": "https://registry.npmmirror.com/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", "license": "MIT", "dependencies": { @@ -6109,12 +6018,15 @@ }, "node_modules/@napi-rs/lzma-linux-x64-gnu": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "resolved": "https://registry.npmmirror.com/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6126,8 +6038,6 @@ }, "node_modules/@noble/hashes": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.3.0.tgz", - "integrity": "sha512-oN+QwyX7VSHotibwubG3kpzbwKrfnyR6OOO+3Nk/53ADL7FmgHHz4TgrbaYKvvOw09u6QTx0oiH1cNCIOuN0CQ==", "dev": true, "license": "MIT", "engines": { @@ -6139,7 +6049,7 @@ }, "node_modules/@opentelemetry/api": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/api/-/api-1.9.1.tgz", "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", "license": "Apache-2.0", "engines": { @@ -6148,7 +6058,7 @@ }, "node_modules/@opentelemetry/api-logs": { "version": "0.220.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.220.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/api-logs/-/api-logs-0.220.0.tgz", "integrity": "sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==", "license": "Apache-2.0", "dependencies": { @@ -6160,7 +6070,7 @@ }, "node_modules/@opentelemetry/core": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/core/-/core-2.9.0.tgz", "integrity": "sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==", "license": "Apache-2.0", "dependencies": { @@ -6175,7 +6085,7 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-http": { "version": "0.220.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.220.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.220.0.tgz", "integrity": "sha512-8186thl+pTw64iz/qEEen5oJZoZ/gO73XruChdaGlYdWOdBIQ42r+vHLf6a7vIDqTD4b8ZOoMlyxptanECaI9A==", "license": "Apache-2.0", "dependencies": { @@ -6194,7 +6104,7 @@ }, "node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.220.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.220.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.220.0.tgz", "integrity": "sha512-CXYo8UD5Mn9YbgebO2EL4wejtA+gxLmLiu6HCk2KH2BR7XhFN6/6p1UlCb23DYCjeYkndevLHuejCCN1yx4+OQ==", "license": "Apache-2.0", "dependencies": { @@ -6210,7 +6120,7 @@ }, "node_modules/@opentelemetry/otlp-transformer": { "version": "0.220.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.220.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.220.0.tgz", "integrity": "sha512-lXGrv7KXZ0gNH9SVNUaa6vv6phVYGvJxfXAlMbzbakiXru75f5MZl8Z7oqiMMQD77riVHJCFlQvbZs/VVN2/4A==", "license": "Apache-2.0", "dependencies": { @@ -6230,7 +6140,7 @@ }, "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/resources/-/resources-2.9.0.tgz", "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", "license": "Apache-2.0", "dependencies": { @@ -6246,7 +6156,7 @@ }, "node_modules/@opentelemetry/resources": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.10.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/resources/-/resources-2.10.0.tgz", "integrity": "sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==", "license": "Apache-2.0", "dependencies": { @@ -6262,7 +6172,7 @@ }, "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.10.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/core/-/core-2.10.0.tgz", "integrity": "sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==", "license": "Apache-2.0", "dependencies": { @@ -6277,7 +6187,7 @@ }, "node_modules/@opentelemetry/sdk-logs": { "version": "0.220.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.220.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/sdk-logs/-/sdk-logs-0.220.0.tgz", "integrity": "sha512-WywcTkQtv2iNmt+6y5Kcd4rzvx9bLVsBa2Nwcmg01IUaBTkTow3W4d9KE5vNBpEDtb9tp21WcRBY/lANRrApYA==", "license": "Apache-2.0", "dependencies": { @@ -6295,7 +6205,7 @@ }, "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/resources/-/resources-2.9.0.tgz", "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", "license": "Apache-2.0", "dependencies": { @@ -6311,7 +6221,7 @@ }, "node_modules/@opentelemetry/sdk-metrics": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/sdk-metrics/-/sdk-metrics-2.9.0.tgz", "integrity": "sha512-Xx8RGS4H5XEBl01WuCreMIpiah9cCXMbSkeuIePPdD2cUpq/vUzYmj8E/MK1OsbOc93FuAD4jfn2WOacKwLn7Q==", "license": "Apache-2.0", "dependencies": { @@ -6327,7 +6237,7 @@ }, "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/resources/-/resources-2.9.0.tgz", "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", "license": "Apache-2.0", "dependencies": { @@ -6343,7 +6253,7 @@ }, "node_modules/@opentelemetry/sdk-trace": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace/-/sdk-trace-2.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/sdk-trace/-/sdk-trace-2.9.0.tgz", "integrity": "sha512-sGA19HvtrrSKYsseHphluH6j3p6Xa3fqc7c7y8f/7mYWejc1lyDFcpSdD1kYa50HCLUeEo4zA5bW0pniaPszuw==", "license": "Apache-2.0", "dependencies": { @@ -6360,7 +6270,7 @@ }, "node_modules/@opentelemetry/sdk-trace/node_modules/@opentelemetry/resources": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.9.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/resources/-/resources-2.9.0.tgz", "integrity": "sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==", "license": "Apache-2.0", "dependencies": { @@ -6376,7 +6286,7 @@ }, "node_modules/@opentelemetry/semantic-conventions": { "version": "1.43.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz", + "resolved": "https://registry.npmmirror.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz", "integrity": "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==", "license": "Apache-2.0", "engines": { @@ -6385,8 +6295,6 @@ }, "node_modules/@peculiar/asn1-schema": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", - "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6397,8 +6305,6 @@ }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", "dev": true, "license": "MIT", "dependencies": { @@ -6410,8 +6316,6 @@ }, "node_modules/@peculiar/utils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", - "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6420,8 +6324,6 @@ }, "node_modules/@peculiar/webcrypto": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.7.1.tgz", - "integrity": "sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6437,31 +6339,31 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/base64/-/base64-1.1.2.tgz", "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/codegen/-/codegen-2.0.5.tgz", "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/fetch/-/fetch-1.1.1.tgz", "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", "license": "BSD-3-Clause", "dependencies": { @@ -6470,31 +6372,31 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/float/-/float-1.0.2.tgz", "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/path/-/path-1.1.2.tgz", "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/pool/-/pool-1.1.0.tgz", "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.2.tgz", + "resolved": "https://registry.npmmirror.com/@protobufjs/utf8/-/utf8-1.1.2.tgz", "integrity": "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==", "license": "BSD-3-Clause" }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", "cpu": [ "arm" @@ -6508,7 +6410,7 @@ }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", "cpu": [ "arm64" @@ -6522,8 +6424,6 @@ }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", - "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", "cpu": [ "arm64" ], @@ -6536,7 +6436,7 @@ }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", "cpu": [ "x64" @@ -6550,7 +6450,7 @@ }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", "cpu": [ "arm64" @@ -6564,7 +6464,7 @@ }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", "cpu": [ "x64" @@ -6578,12 +6478,15 @@ }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", "cpu": [ "arm" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6592,12 +6495,15 @@ }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", "cpu": [ "arm" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -6606,12 +6512,15 @@ }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6620,12 +6529,15 @@ }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -6634,12 +6546,15 @@ }, "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", "cpu": [ "loong64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6648,12 +6563,15 @@ }, "node_modules/@rollup/rollup-linux-loong64-musl": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", "cpu": [ "loong64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -6662,12 +6580,15 @@ }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6676,12 +6597,15 @@ }, "node_modules/@rollup/rollup-linux-ppc64-musl": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -6690,12 +6614,15 @@ }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6704,12 +6631,15 @@ }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -6718,12 +6648,15 @@ }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6732,12 +6665,15 @@ }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -6746,12 +6682,15 @@ }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -6760,7 +6699,7 @@ }, "node_modules/@rollup/rollup-openbsd-x64": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", "cpu": [ "x64" @@ -6774,7 +6713,7 @@ }, "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", "cpu": [ "arm64" @@ -6788,7 +6727,7 @@ }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", "cpu": [ "arm64" @@ -6802,7 +6741,7 @@ }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", "cpu": [ "ia32" @@ -6816,7 +6755,7 @@ }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", "cpu": [ "x64" @@ -6830,7 +6769,7 @@ }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", "cpu": [ "x64" @@ -6844,8 +6783,6 @@ }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "license": "MIT", "engines": { @@ -6856,9 +6793,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.33.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.33.2.tgz", - "integrity": "sha512-CUGXpnPkVdjUCbix+83sWLW9VFgQOm44MDOx/ihITJMAnOZKvL8YYIc7DR9pP/tZ8CIRvMiON/TucvygqbHO3w==", + "version": "3.33.3", + "resolved": "https://registry.npmmirror.com/@smithy/core/-/core-3.33.3.tgz", + "integrity": "sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.17.2", @@ -6870,7 +6807,7 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.2.tgz", + "resolved": "https://registry.npmmirror.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.2.tgz", "integrity": "sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==", "license": "Apache-2.0", "dependencies": { @@ -6884,7 +6821,7 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.2.tgz", + "resolved": "https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.2.tgz", "integrity": "sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw==", "license": "Apache-2.0", "dependencies": { @@ -6898,7 +6835,7 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "license": "Apache-2.0", "dependencies": { @@ -6910,7 +6847,7 @@ }, "node_modules/@smithy/node-http-handler": { "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.7.3.tgz", + "resolved": "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-4.7.3.tgz", "integrity": "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==", "license": "Apache-2.0", "dependencies": { @@ -6923,12 +6860,12 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.2.tgz", - "integrity": "sha512-P7Ki6px6OOrxVtx8K7nLmyx4SlXUW/uTKDdMG44UHefmPGSRMBKe2v+TM59WdLcpUIrBrnuCsIqiM2MbsZjmhw==", + "version": "5.7.3", + "resolved": "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-5.7.3.tgz", + "integrity": "sha512-7ImGm+FkHRLcBaRttIAMZ6bzJZWb2cJGoYjq46F2UjycujWzrL9GEN9h4w7eQyXJYnltrUhxbbieBAIRrdqpow==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.33.2", + "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, @@ -6938,7 +6875,7 @@ }, "node_modules/@smithy/types": { "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.17.2.tgz", + "resolved": "https://registry.npmmirror.com/@smithy/types/-/types-4.17.2.tgz", "integrity": "sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA==", "license": "Apache-2.0", "dependencies": { @@ -6950,7 +6887,7 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "license": "Apache-2.0", "dependencies": { @@ -6963,7 +6900,7 @@ }, "node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "license": "Apache-2.0", "dependencies": { @@ -6976,14 +6913,10 @@ }, "node_modules/@standard-schema/spec": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "license": "MIT" }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "license": "MIT", "dependencies": { @@ -6993,9 +6926,26 @@ "node": ">=10" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.14.10", + "resolved": "https://registry.npmmirror.com/@tanstack/react-virtual/-/react-virtual-3.14.10.tgz", + "integrity": "sha512-SRyoUbdFMRHuYXMijV5H4ZarQWpXkj3iANq8OFre+pybeVap8ZJjZ3Nz9bVjx4d8PfobVUQUdKyyyHYk3E+djw==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.17.8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@tanstack/virtual-core": { "version": "3.17.8", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.17.8.tgz", + "resolved": "https://registry.npmmirror.com/@tanstack/virtual-core/-/virtual-core-3.17.8.tgz", "integrity": "sha512-BfEvehNpOT75r5Ksc5xW6NZuXujTfb7nlSEyVu4XHG3gdxNg1KqXruWbDewXOUaUYIo4oRbSfkjIajz4MAT8tA==", "license": "MIT", "funding": { @@ -7005,8 +6955,6 @@ }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, "license": "MIT", "dependencies": { @@ -7018,8 +6966,6 @@ }, "node_modules/@types/chai": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", "dependencies": { @@ -7029,8 +6975,6 @@ }, "node_modules/@types/debug": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "dev": true, "license": "MIT", "dependencies": { @@ -7039,22 +6983,16 @@ }, "node_modules/@types/deep-eql": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, "license": "MIT", "dependencies": { @@ -7063,15 +7001,11 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", "dev": true, "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "license": "MIT", "dependencies": { @@ -7080,15 +7014,11 @@ }, "node_modules/@types/ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -7096,8 +7026,6 @@ }, "node_modules/@types/qrcode": { "version": "1.5.6", - "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.6.tgz", - "integrity": "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==", "dev": true, "license": "MIT", "dependencies": { @@ -7106,8 +7034,6 @@ }, "node_modules/@types/responselike": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, "license": "MIT", "dependencies": { @@ -7116,14 +7042,12 @@ }, "node_modules/@types/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "license": "MIT" }, "node_modules/@vitest/expect": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", - "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", "dev": true, "license": "MIT", "dependencies": { @@ -7140,8 +7064,6 @@ }, "node_modules/@vitest/mocker": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", - "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -7167,8 +7089,6 @@ }, "node_modules/@vitest/pretty-format": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", - "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7180,8 +7100,6 @@ }, "node_modules/@vitest/runner": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", - "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", "dev": true, "license": "MIT", "dependencies": { @@ -7194,8 +7112,6 @@ }, "node_modules/@vitest/snapshot": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", - "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", "dev": true, "license": "MIT", "dependencies": { @@ -7210,8 +7126,6 @@ }, "node_modules/@vitest/spy": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", - "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", "dev": true, "license": "MIT", "funding": { @@ -7220,8 +7134,6 @@ }, "node_modules/@vitest/utils": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", - "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", "dev": true, "license": "MIT", "dependencies": { @@ -7235,7 +7147,7 @@ }, "node_modules/@vscode/ripgrep": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep/-/ripgrep-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep/-/ripgrep-1.18.0.tgz", "integrity": "sha512-ns5lWe44tSfbTMbVUsyB+I1819PVSw4AdpgK0RNkzfWfwy6+3IUNSxwSrfTno1/oWaS/hERNz+XLWVyga2aJBQ==", "license": "MIT", "optionalDependencies": { @@ -7255,7 +7167,7 @@ }, "node_modules/@vscode/ripgrep-darwin-arm64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-darwin-arm64/-/ripgrep-darwin-arm64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-darwin-arm64/-/ripgrep-darwin-arm64-1.18.0.tgz", "integrity": "sha512-r3ktHSvbFycQNF6sl7sNDPocpsI7J+mEzh1IaZFkY0spm3k2Z9t8hPAeOK7+p0l6p6/swkQC14XWX01low+94Q==", "cpu": [ "arm64" @@ -7268,7 +7180,7 @@ }, "node_modules/@vscode/ripgrep-darwin-x64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-darwin-x64/-/ripgrep-darwin-x64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-darwin-x64/-/ripgrep-darwin-x64-1.18.0.tgz", "integrity": "sha512-25b4gWbL138dGuQU244ebCKKc0q05ULBMoFSz9oAEUHNeqK/lOJViDS7DRvbDazzAzSEdan391Znks/R5mkaTQ==", "cpu": [ "x64" @@ -7281,7 +7193,7 @@ }, "node_modules/@vscode/ripgrep-linux-arm": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-linux-arm/-/ripgrep-linux-arm-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-linux-arm/-/ripgrep-linux-arm-1.18.0.tgz", "integrity": "sha512-GDAvufNDHu8zqLEmXstalQF0Wh6wQvdsBi/Vg3Yi3CK4a8XoFXqqXVEHEZ9xQz3t0NfoSEc9JbvK9DDS6FxyxQ==", "cpu": [ "arm" @@ -7294,7 +7206,7 @@ }, "node_modules/@vscode/ripgrep-linux-arm64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-linux-arm64/-/ripgrep-linux-arm64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-linux-arm64/-/ripgrep-linux-arm64-1.18.0.tgz", "integrity": "sha512-lQ/5zTG++U0E3IhVgS4EPTTn/U4okncaRMM5GOFfOYZywS4nuD31GhkHbNYlDk5CuDC68+hYJ0/eQeyCKJDA+g==", "cpu": [ "arm64" @@ -7307,7 +7219,7 @@ }, "node_modules/@vscode/ripgrep-linux-ia32": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-linux-ia32/-/ripgrep-linux-ia32-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-linux-ia32/-/ripgrep-linux-ia32-1.18.0.tgz", "integrity": "sha512-YWLkSUtFd4Jh5EepIhA9RJSfv3uMAVMo+2rBIGHPBnvgLrZciIs2cDKei1/p6Wc/aCzUoHyMAg2R6tw4ZCBKGg==", "cpu": [ "ia32" @@ -7320,7 +7232,7 @@ }, "node_modules/@vscode/ripgrep-linux-ppc64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-linux-ppc64/-/ripgrep-linux-ppc64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-linux-ppc64/-/ripgrep-linux-ppc64-1.18.0.tgz", "integrity": "sha512-quXVY8fwQ8O/lvU1yrSqSl3jlUzysRSb+AfUfCL/tRtphxsKlFvPAejryZ6vg4Bgvn8XL74xb4qMCDmWgYrT5w==", "cpu": [ "ppc64" @@ -7333,7 +7245,7 @@ }, "node_modules/@vscode/ripgrep-linux-riscv64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-linux-riscv64/-/ripgrep-linux-riscv64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-linux-riscv64/-/ripgrep-linux-riscv64-1.18.0.tgz", "integrity": "sha512-f5kBQBrWfQt8Q7OhSORuNDei5dkYagBj3y4jImSUXGMy8B/Ke7SltSRcUtjPv166FAFfHCAmWuZp3+cWnX2/Vw==", "cpu": [ "riscv64" @@ -7346,7 +7258,7 @@ }, "node_modules/@vscode/ripgrep-linux-s390x": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-linux-s390x/-/ripgrep-linux-s390x-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-linux-s390x/-/ripgrep-linux-s390x-1.18.0.tgz", "integrity": "sha512-rTOcJFGGcl2c07RUOWUo4U1ndnemKhY6A9hnMB18uk7jSgJc0d/QLBGWMWpumdtoJtpizn/wIv5mXIisJukusQ==", "cpu": [ "s390x" @@ -7359,7 +7271,7 @@ }, "node_modules/@vscode/ripgrep-linux-x64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-linux-x64/-/ripgrep-linux-x64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-linux-x64/-/ripgrep-linux-x64-1.18.0.tgz", "integrity": "sha512-mQ3bVrUpnD2vs7QT0vX90Lt0cnUq467uFtEktIdsJJmW296RoSULRGqWgzG1AKxyBpNDD6l4ZO4qKf6SgyC23Q==", "cpu": [ "x64" @@ -7372,7 +7284,7 @@ }, "node_modules/@vscode/ripgrep-win32-arm64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-win32-arm64/-/ripgrep-win32-arm64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-win32-arm64/-/ripgrep-win32-arm64-1.18.0.tgz", "integrity": "sha512-vfTIjq1OHnzUjxZcHVQAMbnggp8dpGf+0QKFOZHwWPqFwXxQC8eCWM+5NUdoJ6yrElCeMzoUTXoK/LdZaniB+Q==", "cpu": [ "arm64" @@ -7385,7 +7297,7 @@ }, "node_modules/@vscode/ripgrep-win32-ia32": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-win32-ia32/-/ripgrep-win32-ia32-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-win32-ia32/-/ripgrep-win32-ia32-1.18.0.tgz", "integrity": "sha512-//rfAE+BOw5AC2EMmepmiE36jUuevtQYNQqqlw1s3m9FlRxjxEut97RkRPHAu9BG4mSojatZx+kXZXNdyI9caQ==", "cpu": [ "ia32" @@ -7398,7 +7310,7 @@ }, "node_modules/@vscode/ripgrep-win32-x64": { "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@vscode/ripgrep-win32-x64/-/ripgrep-win32-x64-1.18.0.tgz", + "resolved": "https://registry.npmmirror.com/@vscode/ripgrep-win32-x64/-/ripgrep-win32-x64-1.18.0.tgz", "integrity": "sha512-KNPvtElldqILHdnAetujPaowkNbpqJy3ssIGGN6F6Kve9Qi+nNLI2DN01O83JjCEVQbCzl8Ov3QZ9Eov3BR8Dg==", "cpu": [ "x64" @@ -7411,8 +7323,6 @@ }, "node_modules/@xmldom/xmldom": { "version": "0.8.14", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.14.tgz", - "integrity": "sha512-T4EDRUBVZYRldYApjEJiU0e1stYWaRAX7CuSnKzrpwdZKo53zGV8/pqfzV6FfwNl9YThD2OumQYvqtvjvgG7aQ==", "dev": true, "license": "MIT", "engines": { @@ -7421,15 +7331,11 @@ }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/abbrev": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", - "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", "dev": true, "license": "ISC", "engines": { @@ -7438,7 +7344,7 @@ }, "node_modules/accepts": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-2.0.0.tgz", "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { @@ -7451,8 +7357,6 @@ }, "node_modules/agent-base": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { "node": ">= 14" @@ -7460,8 +7364,6 @@ }, "node_modules/ajv": { "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -7476,7 +7378,7 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-3.0.1.tgz", "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { @@ -7493,8 +7395,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -7502,8 +7402,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -7517,8 +7415,6 @@ }, "node_modules/app-builder-lib": { "version": "26.15.3", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz", - "integrity": "sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==", "dev": true, "license": "MIT", "dependencies": { @@ -7574,8 +7470,6 @@ }, "node_modules/app-builder-lib/node_modules/@electron/get": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", - "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7596,8 +7490,6 @@ }, "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -7611,8 +7503,6 @@ }, "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -7621,8 +7511,6 @@ }, "node_modules/app-builder-lib/node_modules/ci-info": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -7637,8 +7525,6 @@ }, "node_modules/app-builder-lib/node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { @@ -7647,8 +7533,6 @@ }, "node_modules/app-builder-lib/node_modules/isexe": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", - "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -7657,8 +7541,6 @@ }, "node_modules/app-builder-lib/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -7667,8 +7549,6 @@ }, "node_modules/app-builder-lib/node_modules/semver": { "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -7680,8 +7560,6 @@ }, "node_modules/app-builder-lib/node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -7690,8 +7568,6 @@ }, "node_modules/app-builder-lib/node_modules/which": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, "license": "ISC", "dependencies": { @@ -7706,14 +7582,10 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, "node_modules/asn1js": { "version": "3.0.10", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", - "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7727,8 +7599,6 @@ }, "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { @@ -7737,15 +7607,11 @@ }, "node_modules/async": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true, "license": "MIT" }, "node_modules/async-exit-hook": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true, "license": "MIT", "engines": { @@ -7754,15 +7620,11 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, "license": "ISC", "engines": { @@ -7771,15 +7633,11 @@ }, "node_modules/aws4": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "dev": true, "license": "MIT" }, "node_modules/balanced-match": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { @@ -7788,8 +7646,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -7808,8 +7664,6 @@ }, "node_modules/baseline-browser-mapping": { "version": "2.11.13", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz", - "integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7821,7 +7675,7 @@ }, "node_modules/bignumber.js": { "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.3.1.tgz", "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "license": "MIT", "engines": { @@ -7830,14 +7684,12 @@ }, "node_modules/bluebird": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true, "license": "MIT" }, "node_modules/body-parser": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-2.3.0.tgz", "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", "license": "MIT", "dependencies": { @@ -7861,7 +7713,7 @@ }, "node_modules/body-parser/node_modules/content-type": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-2.1.0.tgz", "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "license": "MIT", "engines": { @@ -7874,23 +7726,18 @@ }, "node_modules/boolean": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, "license": "MIT", "optional": true }, "node_modules/bowser": { "version": "2.14.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "resolved": "https://registry.npmmirror.com/bowser/-/bowser-2.14.1.tgz", "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", "license": "MIT" }, "node_modules/brace-expansion": { "version": "5.0.9", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "license": "MIT", "dependencies": { @@ -7902,8 +7749,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -7915,8 +7760,6 @@ }, "node_modules/browserslist": { "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, "funding": [ { @@ -7949,21 +7792,17 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "resolved": "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/builder-util": { "version": "26.15.3", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.15.3.tgz", - "integrity": "sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==", "dev": true, "license": "MIT", "dependencies": { @@ -7988,8 +7827,6 @@ }, "node_modules/builder-util-runtime": { "version": "9.7.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.7.0.tgz", - "integrity": "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==", "license": "MIT", "dependencies": { "debug": "^4.3.4", @@ -8001,7 +7838,7 @@ }, "node_modules/bundle-name": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "license": "MIT", "dependencies": { @@ -8016,7 +7853,7 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { @@ -8025,8 +7862,6 @@ }, "node_modules/bytestreamjs": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", - "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8035,8 +7870,6 @@ }, "node_modules/cac": { "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { @@ -8045,8 +7878,6 @@ }, "node_modules/cacheable-lookup": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, "license": "MIT", "engines": { @@ -8055,8 +7886,6 @@ }, "node_modules/cacheable-request": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "license": "MIT", "dependencies": { @@ -8074,8 +7903,6 @@ }, "node_modules/call-bind": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", - "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8093,8 +7920,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -8106,8 +7931,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -8122,8 +7945,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "license": "MIT", "engines": { "node": ">=6" @@ -8131,8 +7952,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", "dev": true, "funding": [ { @@ -8152,8 +7971,6 @@ }, "node_modules/chai": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", "engines": { @@ -8162,8 +7979,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -8179,7 +7994,7 @@ }, "node_modules/chokidar": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "license": "MIT", "dependencies": { @@ -8194,8 +8009,6 @@ }, "node_modules/chownr": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -8204,15 +8017,11 @@ }, "node_modules/chromium-pickle-js": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", "dev": true, "license": "MIT" }, "node_modules/ci-info": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -8227,8 +8036,6 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8242,8 +8049,6 @@ }, "node_modules/clone-response": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "license": "MIT", "dependencies": { @@ -8255,7 +8060,7 @@ }, "node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { @@ -8264,8 +8069,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -8276,14 +8079,10 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { @@ -8295,7 +8094,7 @@ }, "node_modules/commander": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "resolved": "https://registry.npmmirror.com/commander/-/commander-15.0.0.tgz", "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", "license": "MIT", "engines": { @@ -8304,8 +8103,6 @@ }, "node_modules/compare-version": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true, "license": "MIT", "engines": { @@ -8314,14 +8111,12 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/content-disposition": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-1.1.0.tgz", "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", "license": "MIT", "engines": { @@ -8334,7 +8129,7 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { @@ -8343,14 +8138,12 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/cookie": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { @@ -8359,7 +8152,7 @@ }, "node_modules/cookie-signature": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.2.tgz", "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { @@ -8368,14 +8161,12 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, "node_modules/cors": { "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz", "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "license": "MIT", "dependencies": { @@ -8392,7 +8183,7 @@ }, "node_modules/cross-dirname": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "resolved": "https://registry.npmmirror.com/cross-dirname/-/cross-dirname-0.1.0.tgz", "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", "dev": true, "license": "MIT", @@ -8401,8 +8192,6 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -8415,7 +8204,7 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "license": "MIT", "engines": { @@ -8424,8 +8213,6 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -8441,8 +8228,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8450,8 +8235,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8466,8 +8249,6 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", "engines": { @@ -8479,7 +8260,7 @@ }, "node_modules/default-browser": { "version": "5.5.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.5.1.tgz", "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", "license": "MIT", "dependencies": { @@ -8495,7 +8276,7 @@ }, "node_modules/default-browser-id": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.1.tgz", "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { @@ -8507,8 +8288,6 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", "engines": { @@ -8517,8 +8296,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -8535,7 +8312,7 @@ }, "node_modules/define-lazy-prop": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", "engines": { @@ -8547,8 +8324,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "optional": true, @@ -8566,8 +8341,6 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", "engines": { @@ -8576,7 +8349,7 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { @@ -8585,7 +8358,7 @@ }, "node_modules/detect-libc": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "engines": { @@ -8594,15 +8367,13 @@ }, "node_modules/detect-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, "license": "MIT", "optional": true }, "node_modules/diff": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "resolved": "https://registry.npmmirror.com/diff/-/diff-9.0.0.tgz", "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", "license": "BSD-3-Clause", "engines": { @@ -8611,14 +8382,10 @@ }, "node_modules/dijkstrajs": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", - "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", "license": "MIT" }, "node_modules/dir-compare": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", - "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8628,15 +8395,11 @@ }, "node_modules/dir-compare/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/dir-compare/node_modules/brace-expansion": { "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "license": "MIT", "dependencies": { @@ -8646,8 +8409,6 @@ }, "node_modules/dir-compare/node_modules/minimatch": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -8659,8 +8420,6 @@ }, "node_modules/dmg-builder": { "version": "26.15.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.15.3.tgz", - "integrity": "sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8672,8 +8431,6 @@ }, "node_modules/dotenv": { "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -8685,8 +8442,6 @@ }, "node_modules/dotenv-expand": { "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8705,8 +8460,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -8719,8 +8472,6 @@ }, "node_modules/duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8729,7 +8480,7 @@ }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "resolved": "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", "dependencies": { @@ -8738,14 +8489,12 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8760,8 +8509,6 @@ }, "node_modules/electron": { "version": "43.4.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-43.4.0.tgz", - "integrity": "sha512-3qxGF0CeQbiox5oWV1JlbWGQ1VerbmDhTFqW4sJ8h7uqTHniFYPObXJcDna0DMh32et0fFyKzz0YY8lJv3t5jg==", "dev": true, "license": "MIT", "dependencies": { @@ -8779,8 +8526,6 @@ }, "node_modules/electron-builder": { "version": "26.15.3", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz", - "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==", "dev": true, "license": "MIT", "dependencies": { @@ -8805,7 +8550,7 @@ }, "node_modules/electron-builder-squirrel-windows": { "version": "26.15.3", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", + "resolved": "https://registry.npmmirror.com/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==", "dev": true, "license": "MIT", @@ -8818,8 +8563,6 @@ }, "node_modules/electron-publish": { "version": "26.15.3", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz", - "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8836,15 +8579,11 @@ }, "node_modules/electron-to-chromium": { "version": "1.5.405", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.405.tgz", - "integrity": "sha512-bNglH7lPH5l+yHOes7Zr4VqxhOy4BQ9ZBUX4VdoFgxMpzJk7W1ZoO3Vgd9Pxa9PyjQ76sfm2aKH/nzEcCNRlew==", "dev": true, "license": "ISC" }, "node_modules/electron-updater": { "version": "6.8.9", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.8.9.tgz", - "integrity": "sha512-ZhVxM9iGONUpZGI1FxdMRgJjUFXi7AYGVa5PwKlO1tV1/4zDxQmfKpXOHVztKrd6L9rLcFjERvi1Mf2vxyTkig==", "license": "MIT", "dependencies": { "builder-util-runtime": "9.7.0", @@ -8859,8 +8598,6 @@ }, "node_modules/electron-updater/node_modules/semver": { "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8871,8 +8608,6 @@ }, "node_modules/electron-vite": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/electron-vite/-/electron-vite-5.0.0.tgz", - "integrity": "sha512-OHp/vjdlubNlhNkPkL/+3JD34ii5ov7M0GpuXEVdQeqdQ3ulvVR7Dg/rNBLfS5XPIFwgoBLDf9sjjrL+CuDyRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8901,7 +8636,7 @@ }, "node_modules/electron-winstaller": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "resolved": "https://registry.npmmirror.com/electron-winstaller/-/electron-winstaller-5.4.0.tgz", "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", "dev": true, "hasInstallScript": true, @@ -8923,7 +8658,7 @@ }, "node_modules/electron-winstaller/node_modules/fs-extra": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", @@ -8939,7 +8674,7 @@ }, "node_modules/electron-winstaller/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", @@ -8950,7 +8685,7 @@ }, "node_modules/electron-winstaller/node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", @@ -8961,13 +8696,11 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { @@ -8976,8 +8709,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { @@ -8986,8 +8717,6 @@ }, "node_modules/env-paths": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, "license": "MIT", "engines": { @@ -8999,15 +8728,11 @@ }, "node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, "license": "MIT" }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9015,8 +8740,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9024,15 +8747,11 @@ }, "node_modules/es-module-lexer": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", - "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -9043,8 +8762,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -9059,16 +8776,12 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT", "optional": true }, "node_modules/esbuild": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -9109,8 +8822,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -9119,14 +8830,12 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { @@ -9135,7 +8844,7 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { @@ -9144,7 +8853,7 @@ }, "node_modules/eventsource": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-3.0.7.tgz", "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "license": "MIT", "dependencies": { @@ -9156,7 +8865,7 @@ }, "node_modules/eventsource-parser": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "resolved": "https://registry.npmmirror.com/eventsource-parser/-/eventsource-parser-3.1.1.tgz", "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", "license": "MIT", "engines": { @@ -9165,8 +8874,6 @@ }, "node_modules/expect-type": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", - "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -9175,14 +8882,12 @@ }, "node_modules/exponential-backoff": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", - "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, "license": "Apache-2.0" }, "node_modules/express": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "resolved": "https://registry.npmmirror.com/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { @@ -9225,7 +8930,7 @@ }, "node_modules/express-rate-limit": { "version": "8.6.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.2.tgz", + "resolved": "https://registry.npmmirror.com/express-rate-limit/-/express-rate-limit-8.6.2.tgz", "integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==", "license": "MIT", "dependencies": { @@ -9244,20 +8949,16 @@ }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", "funding": [ { "type": "github", @@ -9272,8 +8973,6 @@ }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -9290,7 +8989,7 @@ }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "resolved": "https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz", "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "funding": [ { @@ -9313,14 +9012,12 @@ }, "node_modules/fflate": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.3.tgz", "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", "license": "MIT" }, "node_modules/filelist": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", - "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9329,15 +9026,11 @@ }, "node_modules/filelist/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/filelist/node_modules/brace-expansion": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", - "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -9346,8 +9039,6 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -9359,8 +9050,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -9372,7 +9061,7 @@ }, "node_modules/finalhandler": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-2.1.1.tgz", "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { @@ -9393,8 +9082,6 @@ }, "node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -9406,8 +9093,6 @@ }, "node_modules/find-yarn-workspace-root": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9416,8 +9101,6 @@ }, "node_modules/form-data": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", - "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9433,8 +9116,6 @@ }, "node_modules/form-data/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -9443,8 +9124,6 @@ }, "node_modules/form-data/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { @@ -9456,7 +9135,7 @@ }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "resolved": "https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "license": "MIT", "dependencies": { @@ -9468,7 +9147,7 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { @@ -9477,7 +9156,7 @@ }, "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-2.0.0.tgz", "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { @@ -9486,8 +9165,6 @@ }, "node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -9500,17 +9177,12 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -9522,8 +9194,6 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9531,7 +9201,7 @@ }, "node_modules/gaxios": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.3.1.tgz", + "resolved": "https://registry.npmmirror.com/gaxios/-/gaxios-7.3.1.tgz", "integrity": "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ==", "license": "Apache-2.0", "dependencies": { @@ -9545,7 +9215,7 @@ }, "node_modules/gcp-metadata": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "resolved": "https://registry.npmmirror.com/gcp-metadata/-/gcp-metadata-8.1.2.tgz", "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", "license": "Apache-2.0", "dependencies": { @@ -9559,8 +9229,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -9569,8 +9237,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -9578,8 +9244,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -9602,8 +9266,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -9615,8 +9277,6 @@ }, "node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", "dependencies": { @@ -9631,9 +9291,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -9653,15 +9310,11 @@ }, "node_modules/glob/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "license": "MIT", "dependencies": { @@ -9671,8 +9324,6 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -9684,8 +9335,6 @@ }, "node_modules/global-agent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, "license": "BSD-3-Clause", "optional": true, @@ -9703,8 +9352,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "optional": true, @@ -9721,7 +9368,7 @@ }, "node_modules/google-auth-library": { "version": "10.9.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.9.1.tgz", + "resolved": "https://registry.npmmirror.com/google-auth-library/-/google-auth-library-10.9.1.tgz", "integrity": "sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw==", "license": "Apache-2.0", "dependencies": { @@ -9738,7 +9385,7 @@ }, "node_modules/google-logging-utils": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "resolved": "https://registry.npmmirror.com/google-logging-utils/-/google-logging-utils-1.1.3.tgz", "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", "license": "Apache-2.0", "engines": { @@ -9747,8 +9394,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9759,8 +9404,6 @@ }, "node_modules/got": { "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, "license": "MIT", "dependencies": { @@ -9785,14 +9428,10 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -9801,8 +9440,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -9814,8 +9451,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9826,8 +9461,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -9842,8 +9475,6 @@ }, "node_modules/hasown": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -9854,7 +9485,7 @@ }, "node_modules/hono": { "version": "4.13.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.3.tgz", + "resolved": "https://registry.npmmirror.com/hono/-/hono-4.13.3.tgz", "integrity": "sha512-r8AO2mYHoLxSHkgafNeC/BXyb2vWRxD3jem4Ts+ptav8oTG5FIRifAjuJEmZI4bSvvc2ns0GxmIYiZnHqN3mMw==", "license": "MIT", "engines": { @@ -9863,8 +9494,6 @@ }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -9876,8 +9505,6 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -9889,21 +9516,17 @@ }, "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/http-cache-semantics": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { @@ -9923,8 +9546,6 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "license": "MIT", "dependencies": { "agent-base": "^7.1.0", @@ -9936,8 +9557,6 @@ }, "node_modules/http2-wrapper": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "license": "MIT", "dependencies": { @@ -9950,8 +9569,6 @@ }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -9963,7 +9580,7 @@ }, "node_modules/iconv-lite": { "version": "0.7.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.7.3.tgz", "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "license": "MIT", "dependencies": { @@ -9979,7 +9596,7 @@ }, "node_modules/immer": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "resolved": "https://registry.npmmirror.com/immer/-/immer-10.2.0.tgz", "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", "license": "MIT", "funding": { @@ -9989,9 +9606,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { @@ -10001,13 +9615,11 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ip-address": { "version": "10.5.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz", + "resolved": "https://registry.npmmirror.com/ip-address/-/ip-address-10.5.0.tgz", "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==", "license": "MIT", "engines": { @@ -10016,7 +9628,7 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { @@ -10025,8 +9637,6 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", "bin": { @@ -10041,8 +9651,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -10050,7 +9658,7 @@ }, "node_modules/is-in-ssh": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "resolved": "https://registry.npmmirror.com/is-in-ssh/-/is-in-ssh-1.0.0.tgz", "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", "license": "MIT", "engines": { @@ -10062,7 +9670,7 @@ }, "node_modules/is-inside-container": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { @@ -10080,7 +9688,7 @@ }, "node_modules/is-inside-container/node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", "bin": { @@ -10095,8 +9703,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -10105,14 +9711,12 @@ }, "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { @@ -10124,15 +9728,11 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/isbinaryfile": { "version": "5.0.7", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", - "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", "dev": true, "license": "MIT", "engines": { @@ -10144,14 +9744,10 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/jake": { "version": "10.9.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", - "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10168,8 +9764,6 @@ }, "node_modules/jiti": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", - "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "dev": true, "license": "MIT", "bin": { @@ -10178,7 +9772,7 @@ }, "node_modules/jose": { "version": "6.2.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.9.tgz", + "resolved": "https://registry.npmmirror.com/jose/-/jose-6.2.9.tgz", "integrity": "sha512-XrchZOFZUl/T3vTwRe8XK+cJrGtMF4th1ARnDfwbBXFKThGhlsxEE4Zu03AD/bjJSt/9jT/mxrOCkJWOg77aPA==", "license": "MIT", "funding": { @@ -10187,14 +9781,10 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/js-yaml": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "funding": [ { "type": "github", @@ -10215,8 +9805,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -10228,7 +9816,7 @@ }, "node_modules/json-bigint": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "resolved": "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", "license": "MIT", "dependencies": { @@ -10237,14 +9825,12 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-schema-to-ts": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "resolved": "https://registry.npmmirror.com/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", "license": "MIT", "dependencies": { @@ -10257,20 +9843,16 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-schema-typed": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "resolved": "https://registry.npmmirror.com/json-schema-typed/-/json-schema-typed-8.0.2.tgz", "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", "license": "BSD-2-Clause" }, "node_modules/json-stable-stringify": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", - "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", "dev": true, "license": "MIT", "dependencies": { @@ -10289,23 +9871,17 @@ }, "node_modules/json-stable-stringify/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, "license": "ISC", "optional": true }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -10317,8 +9893,6 @@ }, "node_modules/jsonfile": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -10329,8 +9903,6 @@ }, "node_modules/jsonify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", "dev": true, "license": "Public Domain", "funding": { @@ -10339,7 +9911,7 @@ }, "node_modules/jwa": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "resolved": "https://registry.npmmirror.com/jwa/-/jwa-2.0.1.tgz", "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { @@ -10350,7 +9922,7 @@ }, "node_modules/jws": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "resolved": "https://registry.npmmirror.com/jws/-/jws-4.0.1.tgz", "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "dependencies": { @@ -10360,8 +9932,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -10370,8 +9940,6 @@ }, "node_modules/klaw-sync": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10380,7 +9948,7 @@ }, "node_modules/koffi": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/koffi/-/koffi-3.1.5.tgz", + "resolved": "https://registry.npmmirror.com/koffi/-/koffi-3.1.5.tgz", "integrity": "sha512-XVwwrxg0Ca6IEUQF4YtGIU4XN0LSselFYpYvgfhh8wafCunhEEx5hPr7LZhp5QyeFA/LcRsKHTqncCdjWjWAlg==", "hasInstallScript": true, "license": "MIT", @@ -10407,14 +9975,10 @@ }, "node_modules/lazy-val": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", - "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -10425,34 +9989,25 @@ }, "node_modules/lodash": { "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", "license": "MIT" }, "node_modules/long": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "resolved": "https://registry.npmmirror.com/long/-/long-5.3.2.tgz", "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0" }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -10463,8 +10018,6 @@ }, "node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "license": "MIT", "engines": { @@ -10473,8 +10026,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -10483,8 +10034,6 @@ }, "node_modules/magic-string": { "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10493,8 +10042,6 @@ }, "node_modules/matcher": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, "license": "MIT", "optional": true, @@ -10507,8 +10054,6 @@ }, "node_modules/matcher/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "optional": true, @@ -10521,8 +10066,6 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10530,7 +10073,7 @@ }, "node_modules/media-typer": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-1.1.1.tgz", "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", "license": "MIT", "engines": { @@ -10543,7 +10086,7 @@ }, "node_modules/merge-descriptors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz", "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { @@ -10555,8 +10098,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -10569,8 +10110,6 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -10582,8 +10121,6 @@ }, "node_modules/mime": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "license": "MIT", "bin": { @@ -10595,7 +10132,7 @@ }, "node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { @@ -10604,7 +10141,7 @@ }, "node_modules/mime-types": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-3.0.2.tgz", "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { @@ -10620,8 +10157,6 @@ }, "node_modules/mimic-response": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, "license": "MIT", "engines": { @@ -10630,8 +10165,6 @@ }, "node_modules/minimatch": { "version": "10.2.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -10646,8 +10179,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -10656,8 +10187,6 @@ }, "node_modules/minipass": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -10666,8 +10195,6 @@ }, "node_modules/minizlib": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { @@ -10679,7 +10206,7 @@ }, "node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", @@ -10693,14 +10220,10 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "dev": true, "funding": [ { @@ -10717,18 +10240,36 @@ } }, "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/node": { "version": "24.9.0", - "resolved": "https://registry.npmjs.org/node/-/node-24.9.0.tgz", - "integrity": "sha512-cczSuf6uJejZ+dR+BAUEd6t2TxW31GvSexzEEvUKKRT59E/oYxUk3fixnUUqMG4tCtjg2wpZp3hfPdGuSg4pgw==", "hasInstallScript": true, "license": "ISC", "dependencies": { @@ -10743,8 +10284,6 @@ }, "node_modules/node-abi": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.33.0.tgz", - "integrity": "sha512-vLBWCKb+7LWsX+TbfzWOkw0W81m377tyx3hOweBTjO43CXZnRGS1/JPWs20fr0PgZyDXk6ROYrylsEycK8raDA==", "dev": true, "license": "MIT", "dependencies": { @@ -10756,14 +10295,12 @@ }, "node_modules/node-addon-api": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT" }, "node_modules/node-addon-native-custom-loader": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-native-custom-loader/-/node-addon-native-custom-loader-0.1.4.tgz", - "integrity": "sha512-DreegO6EoC1JHWYBv3j8Miwp2Zl/CyBeNyoeyCbnEdjyYFEulR4Gcb3wj9fXF7KMDY0ZJ5MWwHcXP8GVNyScnA==", "license": "MIT", "engines": { "node": ">=20" @@ -10771,8 +10308,6 @@ }, "node_modules/node-addon-require-builtin": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin/-/node-addon-require-builtin-0.1.4.tgz", - "integrity": "sha512-yuXz43GmtQyMrO75u2Z8KZAafMhnMH8RTOZBJWGDU9HoD2QxT6q4PF28iLNm/OS9BkS8MHwCKpgTk3d6qW584A==", "license": "MIT", "dependencies": { "node-addon-native-custom-loader": "0.1.4" @@ -10792,8 +10327,6 @@ }, "node_modules/node-addon-require-builtin-darwin-arm64": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin-darwin-arm64/-/node-addon-require-builtin-darwin-arm64-0.1.4.tgz", - "integrity": "sha512-pqiTPbqlDKRIo8YKoWMjuFge4kyHbsdYkAcGW5MAVcJSCyU0M1hhpiLdWlvX753XKL3xlGeuPmv2NqTNRV0/hw==", "cpu": [ "arm64" ], @@ -10811,7 +10344,7 @@ }, "node_modules/node-addon-require-builtin-darwin-x64": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin-darwin-x64/-/node-addon-require-builtin-darwin-x64-0.1.4.tgz", + "resolved": "https://registry.npmmirror.com/node-addon-require-builtin-darwin-x64/-/node-addon-require-builtin-darwin-x64-0.1.4.tgz", "integrity": "sha512-i9oThh+w6d+H79YQuc3d3MZCx4YZ6aMWlQ0HYMgOTWvSRzppXmksa/xPV8O20G1gjpq5do/9/hgImixj3XIcjQ==", "cpu": [ "x64" @@ -10830,11 +10363,14 @@ }, "node_modules/node-addon-require-builtin-linux-arm64-gnu": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin-linux-arm64-gnu/-/node-addon-require-builtin-linux-arm64-gnu-0.1.4.tgz", + "resolved": "https://registry.npmmirror.com/node-addon-require-builtin-linux-arm64-gnu/-/node-addon-require-builtin-linux-arm64-gnu-0.1.4.tgz", "integrity": "sha512-qbmYtkiIFp7h1ZvYYHH0MGFQbc03OyvplkeS90j+t3VMomkRc/YwZ140WzVM3eYJYZ7XHq+s1GL5ZdFQFPUXBQ==", "cpu": [ "arm64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -10849,11 +10385,14 @@ }, "node_modules/node-addon-require-builtin-linux-x64-gnu": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin-linux-x64-gnu/-/node-addon-require-builtin-linux-x64-gnu-0.1.4.tgz", + "resolved": "https://registry.npmmirror.com/node-addon-require-builtin-linux-x64-gnu/-/node-addon-require-builtin-linux-x64-gnu-0.1.4.tgz", "integrity": "sha512-4jC617+yOrYYuKgNmN2KMD722G6BICpjEzAcmzA3j5tt+zmey5M/c/z9JxqdjnNmU9CQWseBaJu/fGdbHZXSOg==", "cpu": [ "x64" ], + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -10868,7 +10407,7 @@ }, "node_modules/node-addon-require-builtin-win32-arm64-msvc": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin-win32-arm64-msvc/-/node-addon-require-builtin-win32-arm64-msvc-0.1.4.tgz", + "resolved": "https://registry.npmmirror.com/node-addon-require-builtin-win32-arm64-msvc/-/node-addon-require-builtin-win32-arm64-msvc-0.1.4.tgz", "integrity": "sha512-4TW96aPR108R3RxJbUNLXU6FLTZ7n8fWtSpPbPtvYWXa9cXojvCMdH4BvrHM6W2M+Iu42nqMxRyylP3PeTjOmA==", "cpu": [ "arm64" @@ -10887,7 +10426,7 @@ }, "node_modules/node-addon-require-builtin-win32-ia32-msvc": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin-win32-ia32-msvc/-/node-addon-require-builtin-win32-ia32-msvc-0.1.4.tgz", + "resolved": "https://registry.npmmirror.com/node-addon-require-builtin-win32-ia32-msvc/-/node-addon-require-builtin-win32-ia32-msvc-0.1.4.tgz", "integrity": "sha512-a3ZRkiMKaE7uRjI+H+Ic7dvhPIk0rW9mHV47IEiqJzoRZqnDp5JPjQfAnngu979HR59Ghy+mfexJ/kStBlP3eQ==", "cpu": [ "ia32" @@ -10906,7 +10445,7 @@ }, "node_modules/node-addon-require-builtin-win32-x64-msvc": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-addon-require-builtin-win32-x64-msvc/-/node-addon-require-builtin-win32-x64-msvc-0.1.4.tgz", + "resolved": "https://registry.npmmirror.com/node-addon-require-builtin-win32-x64-msvc/-/node-addon-require-builtin-win32-x64-msvc-0.1.4.tgz", "integrity": "sha512-EGx7AcJKB7fNxo/YHV32JTUg1Hetbdnh6uPaqPhklhyRSMM13/7hZK1pTACqMS9dwnR3Lakxl9HKG9/eAoIyyg==", "cpu": [ "x64" @@ -10925,8 +10464,6 @@ }, "node_modules/node-api-version": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", - "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10935,13 +10472,11 @@ }, "node_modules/node-bin-setup": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.4.tgz", - "integrity": "sha512-vWNHOne0ZUavArqPP5LJta50+S8R261Fr5SvGul37HbEDcowvLjwdvd0ZeSr0r2lTSrPxl6okq9QUw8BFGiAxA==", "license": "ISC" }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "resolved": "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "deprecated": "Use your platform's native DOMException instead", "funding": [ @@ -10961,7 +10496,7 @@ }, "node_modules/node-fetch": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "license": "MIT", "dependencies": { @@ -10979,8 +10514,6 @@ }, "node_modules/node-gyp": { "version": "12.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", - "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", "dev": true, "license": "MIT", "dependencies": { @@ -11004,8 +10537,6 @@ }, "node_modules/node-gyp/node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { @@ -11014,8 +10545,6 @@ }, "node_modules/node-gyp/node_modules/isexe": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -11024,8 +10553,6 @@ }, "node_modules/node-gyp/node_modules/undici": { "version": "6.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", - "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", "dev": true, "license": "MIT", "engines": { @@ -11034,8 +10561,6 @@ }, "node_modules/node-gyp/node_modules/which": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, "license": "ISC", "dependencies": { @@ -11050,14 +10575,12 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true, "license": "MIT" }, "node_modules/node-pty": { "version": "1.2.0-beta.15", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.15.tgz", + "resolved": "https://registry.npmmirror.com/node-pty/-/node-pty-1.2.0-beta.15.tgz", "integrity": "sha512-vORSzHXi4Ofl7HemVWpuudLqCPdaQb4LfpRCUpE5HPxhp4JYscl8zZwxh11p26v2wvW24WMwnMfLjhRLixrfxA==", "hasInstallScript": true, "license": "MIT", @@ -11067,8 +10590,6 @@ }, "node_modules/node-releases": { "version": "2.0.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", - "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", "dev": true, "license": "MIT", "engines": { @@ -11077,8 +10598,6 @@ }, "node_modules/nopt": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", - "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, "license": "ISC", "dependencies": { @@ -11093,8 +10612,6 @@ }, "node_modules/normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "license": "MIT", "engines": { @@ -11106,7 +10623,7 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { @@ -11115,7 +10632,7 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { @@ -11127,8 +10644,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -11137,8 +10652,6 @@ }, "node_modules/obug": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -11151,7 +10664,7 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { @@ -11163,8 +10676,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -11172,8 +10683,6 @@ }, "node_modules/open": { "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11189,7 +10698,7 @@ }, "node_modules/openai": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-6.26.0.tgz", + "resolved": "https://registry.npmmirror.com/openai/-/openai-6.26.0.tgz", "integrity": "sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==", "license": "Apache-2.0", "bin": { @@ -11210,8 +10719,6 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, "license": "MIT", "engines": { @@ -11220,8 +10727,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11236,8 +10741,6 @@ }, "node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -11248,8 +10751,6 @@ }, "node_modules/p-locate/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -11263,7 +10764,7 @@ }, "node_modules/p-retry": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "license": "MIT", "dependencies": { @@ -11276,8 +10777,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "license": "MIT", "engines": { "node": ">=6" @@ -11285,7 +10784,7 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { @@ -11294,14 +10793,12 @@ }, "node_modules/partial-json": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", + "resolved": "https://registry.npmmirror.com/partial-json/-/partial-json-0.1.7.tgz", "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", "license": "MIT" }, "node_modules/patch-package": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", - "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", "dev": true, "license": "MIT", "dependencies": { @@ -11330,8 +10827,6 @@ }, "node_modules/patch-package/node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -11346,8 +10841,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "license": "MIT", "engines": { "node": ">=8" @@ -11355,8 +10848,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -11365,8 +10856,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -11374,7 +10863,7 @@ }, "node_modules/path-to-regexp": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz", "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", "funding": { @@ -11384,15 +10873,11 @@ }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/pe-library": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", - "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", "dev": true, "license": "MIT", "engines": { @@ -11406,14 +10891,10 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "license": "MIT", "engines": { "node": ">=12" @@ -11424,7 +10905,7 @@ }, "node_modules/pkce-challenge": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "resolved": "https://registry.npmmirror.com/pkce-challenge/-/pkce-challenge-5.0.1.tgz", "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "license": "MIT", "engines": { @@ -11433,8 +10914,6 @@ }, "node_modules/pkijs": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", - "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -11451,8 +10930,6 @@ }, "node_modules/pkijs/node_modules/@noble/hashes": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, "license": "MIT", "engines": { @@ -11464,8 +10941,6 @@ }, "node_modules/plist": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11479,8 +10954,6 @@ }, "node_modules/pngjs": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", "license": "MIT", "engines": { "node": ">=10.13.0" @@ -11488,8 +10961,6 @@ }, "node_modules/pnpm": { "version": "10.34.5", - "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-10.34.5.tgz", - "integrity": "sha512-pO4F8vc2WCVb1qiYWcBlpFwopX2u+uLIk6Fo7itzFow3uR6D5X6mdlStA/AwMXRkMOi84442LgQmBfuKvIAZLg==", "license": "MIT", "bin": { "pnpm": "bin/pnpm.cjs", @@ -11504,8 +10975,6 @@ }, "node_modules/postcss": { "version": "8.5.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", - "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "dev": true, "funding": [ { @@ -11533,7 +11002,7 @@ }, "node_modules/postject": { "version": "1.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "resolved": "https://registry.npmmirror.com/postject/-/postject-1.0.0-alpha.6.tgz", "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", "dev": true, "license": "MIT", @@ -11551,7 +11020,7 @@ }, "node_modules/postject/node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "license": "MIT", @@ -11563,7 +11032,7 @@ }, "node_modules/powershell-utils": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.0.tgz", + "resolved": "https://registry.npmmirror.com/powershell-utils/-/powershell-utils-0.2.0.tgz", "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", "license": "MIT", "engines": { @@ -11575,8 +11044,6 @@ }, "node_modules/proc-log": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, "license": "ISC", "engines": { @@ -11585,15 +11052,11 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "license": "MIT", "engines": { @@ -11602,8 +11065,6 @@ }, "node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "license": "MIT", "dependencies": { @@ -11616,8 +11077,6 @@ }, "node_modules/promise-retry/node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", "engines": { @@ -11626,8 +11085,6 @@ }, "node_modules/proper-lockfile": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", "dev": true, "license": "MIT", "dependencies": { @@ -11638,8 +11095,6 @@ }, "node_modules/proper-lockfile/node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", "engines": { @@ -11648,7 +11103,7 @@ }, "node_modules/protobufjs": { "version": "7.6.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", + "resolved": "https://registry.npmmirror.com/protobufjs/-/protobufjs-7.6.5.tgz", "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==", "hasInstallScript": true, "license": "BSD-3-Clause", @@ -11671,7 +11126,7 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { @@ -11684,8 +11139,6 @@ }, "node_modules/pump": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "license": "MIT", "dependencies": { @@ -11695,8 +11148,6 @@ }, "node_modules/pvtsutils": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "dev": true, "license": "MIT", "dependencies": { @@ -11705,8 +11156,6 @@ }, "node_modules/pvutils": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", - "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==", "dev": true, "license": "MIT", "engines": { @@ -11715,8 +11164,6 @@ }, "node_modules/qrcode": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz", - "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", "license": "MIT", "dependencies": { "dijkstrajs": "^1.0.1", @@ -11732,8 +11179,6 @@ }, "node_modules/qrcode/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -11743,8 +11188,6 @@ }, "node_modules/qrcode/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -11757,14 +11200,10 @@ }, "node_modules/qrcode/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "license": "ISC" }, "node_modules/qrcode/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "license": "MIT", "dependencies": { "cliui": "^6.0.0", @@ -11785,8 +11224,6 @@ }, "node_modules/qrcode/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "license": "ISC", "dependencies": { "camelcase": "^5.0.0", @@ -11798,7 +11235,7 @@ }, "node_modules/qs": { "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.15.3.tgz", "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", "license": "BSD-3-Clause", "dependencies": { @@ -11814,8 +11251,6 @@ }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", "engines": { @@ -11827,7 +11262,7 @@ }, "node_modules/range-parser": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.3.0.tgz", "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { @@ -11840,7 +11275,7 @@ }, "node_modules/raw-body": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-3.0.2.tgz", "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { @@ -11855,8 +11290,6 @@ }, "node_modules/react": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -11867,8 +11300,6 @@ }, "node_modules/react-dom": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -11880,8 +11311,6 @@ }, "node_modules/react-dom/node_modules/scheduler": { "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -11889,8 +11318,6 @@ }, "node_modules/read-binary-file-arch": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", - "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", "dev": true, "license": "MIT", "dependencies": { @@ -11902,8 +11329,6 @@ }, "node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -11918,14 +11343,12 @@ }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/readdirp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "engines": { @@ -11938,8 +11361,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11947,8 +11368,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11956,14 +11375,10 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "license": "ISC" }, "node_modules/resedit": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", - "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", "dev": true, "license": "MIT", "dependencies": { @@ -11980,15 +11395,11 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true, "license": "MIT" }, "node_modules/responselike": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "license": "MIT", "dependencies": { @@ -12000,7 +11411,7 @@ }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "license": "MIT", "engines": { @@ -12009,7 +11420,7 @@ }, "node_modules/rimraf": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, @@ -12024,8 +11435,6 @@ }, "node_modules/roarr": { "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, "license": "BSD-3-Clause", "optional": true, @@ -12043,8 +11452,6 @@ }, "node_modules/rollup": { "version": "4.62.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", - "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", "dev": true, "license": "MIT", "dependencies": { @@ -12089,7 +11496,7 @@ }, "node_modules/router": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "resolved": "https://registry.npmmirror.com/router/-/router-2.2.0.tgz", "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { @@ -12105,7 +11512,7 @@ }, "node_modules/run-applescript": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.1.0.tgz", "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "license": "MIT", "engines": { @@ -12117,7 +11524,7 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { @@ -12137,14 +11544,12 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sanitize-filename": { "version": "1.6.4", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", - "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", "dev": true, "license": "WTFPL OR ISC", "dependencies": { @@ -12153,24 +11558,13 @@ }, "node_modules/sax": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" } }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT", - "peer": true - }, "node_modules/semver": { "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12181,15 +11575,13 @@ }, "node_modules/semver-compare": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, "license": "MIT", "optional": true }, "node_modules/send": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "resolved": "https://registry.npmmirror.com/send/-/send-1.2.1.tgz", "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { @@ -12215,8 +11607,6 @@ }, "node_modules/serialize-error": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "license": "MIT", "optional": true, @@ -12232,7 +11622,7 @@ }, "node_modules/serve-static": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-2.2.1.tgz", "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { @@ -12251,14 +11641,10 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12275,13 +11661,13 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/sharp": { "version": "0.35.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.35.3.tgz", "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", "license": "Apache-2.0", "dependencies": { @@ -12330,8 +11716,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -12342,8 +11726,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -12351,7 +11733,7 @@ }, "node_modules/side-channel": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.1.tgz", "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { @@ -12370,7 +11752,7 @@ }, "node_modules/side-channel-list": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.1.tgz", "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { @@ -12386,7 +11768,7 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { @@ -12404,7 +11786,7 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { @@ -12423,22 +11805,16 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/simple-update-notifier": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "license": "MIT", "dependencies": { @@ -12450,8 +11826,6 @@ }, "node_modules/slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "license": "MIT", "engines": { @@ -12460,8 +11834,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12470,8 +11842,6 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12480,8 +11850,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -12491,23 +11859,17 @@ }, "node_modules/sprintf-js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, "license": "BSD-3-Clause", "optional": true }, "node_modules/stackback": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/stat-mode": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", - "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true, "license": "MIT", "engines": { @@ -12516,7 +11878,7 @@ }, "node_modules/statuses": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { @@ -12525,15 +11887,11 @@ }, "node_modules/std-env": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", - "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", "dev": true, "license": "MIT" }, "node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -12542,15 +11900,11 @@ }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -12563,8 +11917,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12575,8 +11927,6 @@ }, "node_modules/sumchecker": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12588,8 +11938,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -12601,8 +11949,6 @@ }, "node_modules/tar": { "version": "7.5.22", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", - "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -12618,8 +11964,6 @@ }, "node_modules/tar/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -12628,7 +11972,7 @@ }, "node_modules/temp": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "resolved": "https://registry.npmmirror.com/temp/-/temp-0.9.4.tgz", "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, "license": "MIT", @@ -12643,8 +11987,6 @@ }, "node_modules/temp-file": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", - "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", "dev": true, "license": "MIT", "dependencies": { @@ -12654,8 +11996,6 @@ }, "node_modules/tiny-async-pool": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", - "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", "dev": true, "license": "MIT", "dependencies": { @@ -12664,8 +12004,6 @@ }, "node_modules/tiny-async-pool/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -12674,21 +12012,15 @@ }, "node_modules/tiny-typed-emitter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", "license": "MIT" }, "node_modules/tinybench": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", - "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", "dev": true, "license": "MIT", "engines": { @@ -12697,8 +12029,6 @@ }, "node_modules/tinyglobby": { "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { @@ -12714,8 +12044,6 @@ }, "node_modules/tinyrainbow": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", - "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", "dev": true, "license": "MIT", "engines": { @@ -12724,8 +12052,6 @@ }, "node_modules/tmp": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", - "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", "dev": true, "license": "MIT", "engines": { @@ -12734,8 +12060,6 @@ }, "node_modules/tmp-promise": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12744,8 +12068,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12757,7 +12079,7 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { @@ -12766,8 +12088,6 @@ }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, "license": "WTFPL", "dependencies": { @@ -12776,19 +12096,17 @@ }, "node_modules/ts-algebra": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/ts-algebra/-/ts-algebra-2.0.0.tgz", "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", "license": "MIT" }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/turndown": { "version": "7.2.4", - "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.4.tgz", + "resolved": "https://registry.npmmirror.com/turndown/-/turndown-7.2.4.tgz", "integrity": "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ==", "license": "MIT", "dependencies": { @@ -12801,8 +12119,6 @@ }, "node_modules/type-fest": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, "license": "(MIT OR CC0-1.0)", "optional": true, @@ -12815,7 +12131,7 @@ }, "node_modules/type-is": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-2.1.0.tgz", "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "license": "MIT", "dependencies": { @@ -12833,7 +12149,7 @@ }, "node_modules/type-is/node_modules/content-type": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-2.1.0.tgz", "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "license": "MIT", "engines": { @@ -12846,14 +12162,12 @@ }, "node_modules/typebox": { "version": "1.1.38", - "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.1.38.tgz", + "resolved": "https://registry.npmmirror.com/typebox/-/typebox-1.1.38.tgz", "integrity": "sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==", "license": "MIT" }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12866,8 +12180,6 @@ }, "node_modules/undici": { "version": "7.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", - "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", "dev": true, "license": "MIT", "optional": true, @@ -12877,14 +12189,10 @@ }, "node_modules/undici-types": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -12892,7 +12200,7 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { @@ -12901,8 +12209,6 @@ }, "node_modules/unzipper": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.5.tgz", - "integrity": "sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==", "dev": true, "license": "MIT", "dependencies": { @@ -12915,8 +12221,6 @@ }, "node_modules/unzipper/node_modules/fs-extra": { "version": "11.3.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", - "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", "dev": true, "license": "MIT", "dependencies": { @@ -12930,8 +12234,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", - "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", "dev": true, "funding": [ { @@ -12961,7 +12263,7 @@ }, "node_modules/use-sync-external-store": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "resolved": "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "license": "MIT", "peerDependencies": { @@ -12970,21 +12272,17 @@ }, "node_modules/utf8-byte-length": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", "dev": true, "license": "(WTFPL OR MIT)" }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { @@ -12993,8 +12291,6 @@ }, "node_modules/vite": { "version": "7.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", - "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", "dev": true, "license": "MIT", "dependencies": { @@ -13068,7 +12364,7 @@ }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" @@ -13085,7 +12381,7 @@ }, "node_modules/vite/node_modules/@esbuild/android-arm": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.28.2.tgz", "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" @@ -13102,7 +12398,7 @@ }, "node_modules/vite/node_modules/@esbuild/android-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" @@ -13119,7 +12415,7 @@ }, "node_modules/vite/node_modules/@esbuild/android-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.28.2.tgz", "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" @@ -13136,8 +12432,6 @@ }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", - "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -13153,7 +12447,7 @@ }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" @@ -13170,7 +12464,7 @@ }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" @@ -13187,7 +12481,7 @@ }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" @@ -13204,7 +12498,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-arm": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" @@ -13221,7 +12515,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" @@ -13238,7 +12532,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" @@ -13255,7 +12549,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" @@ -13272,7 +12566,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" @@ -13289,7 +12583,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" @@ -13306,7 +12600,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" @@ -13323,7 +12617,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" @@ -13340,7 +12634,7 @@ }, "node_modules/vite/node_modules/@esbuild/linux-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" @@ -13357,7 +12651,7 @@ }, "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" @@ -13374,7 +12668,7 @@ }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" @@ -13391,7 +12685,7 @@ }, "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ "arm64" @@ -13408,7 +12702,7 @@ }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" @@ -13425,7 +12719,7 @@ }, "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" @@ -13442,7 +12736,7 @@ }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" @@ -13459,7 +12753,7 @@ }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" @@ -13476,7 +12770,7 @@ }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" @@ -13493,7 +12787,7 @@ }, "node_modules/vite/node_modules/@esbuild/win32-x64": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" @@ -13510,8 +12804,6 @@ }, "node_modules/vite/node_modules/esbuild": { "version": "0.28.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", - "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -13552,8 +12844,6 @@ }, "node_modules/vitest": { "version": "4.1.10", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", - "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", "dev": true, "license": "MIT", "dependencies": { @@ -13642,7 +12932,7 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "license": "MIT", "engines": { @@ -13651,8 +12941,6 @@ }, "node_modules/webcrypto-core": { "version": "1.9.2", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.9.2.tgz", - "integrity": "sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13665,8 +12953,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -13680,14 +12966,10 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, "node_modules/why-is-node-running": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { @@ -13703,8 +12985,6 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13721,13 +13001,11 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/ws": { "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.21.3.tgz", "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", "license": "MIT", "engines": { @@ -13748,7 +13026,7 @@ }, "node_modules/wsl-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-1.0.0.tgz", + "resolved": "https://registry.npmmirror.com/wsl-utils/-/wsl-utils-1.0.0.tgz", "integrity": "sha512-Hl0ZOAs672vg+06kfujwRhoS6/jehvULrlFkuF2dRu6pHgA8U06h3xqNIqNNU1LTXPcedxByAR4GS6pwQK0mgA==", "license": "MIT", "dependencies": { @@ -13764,7 +13042,7 @@ }, "node_modules/wsl-utils/node_modules/is-wsl": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.1.tgz", "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "license": "MIT", "dependencies": { @@ -13779,7 +13057,7 @@ }, "node_modules/wsl-utils/node_modules/powershell-utils": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "resolved": "https://registry.npmmirror.com/powershell-utils/-/powershell-utils-0.1.0.tgz", "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", "license": "MIT", "engines": { @@ -13791,8 +13069,6 @@ }, "node_modules/xmlbuilder": { "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "dev": true, "license": "MIT", "engines": { @@ -13801,8 +13077,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -13811,15 +13085,11 @@ }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/yaml": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", - "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -13833,8 +13103,6 @@ }, "node_modules/yargs": { "version": "17.7.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", - "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, "license": "MIT", "dependencies": { @@ -13852,8 +13120,6 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { @@ -13862,8 +13128,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -13875,7 +13139,7 @@ }, "node_modules/zod": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "resolved": "https://registry.npmmirror.com/zod/-/zod-4.4.3.tgz", "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", "funding": { @@ -13884,7 +13148,7 @@ }, "node_modules/zod-to-json-schema": { "version": "3.25.2", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "resolved": "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", "license": "ISC", "peerDependencies": { @@ -13893,7 +13157,7 @@ }, "node_modules/zustand": { "version": "4.4.7", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.7.tgz", + "resolved": "https://registry.npmmirror.com/zustand/-/zustand-4.4.7.tgz", "integrity": "sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==", "license": "MIT", "dependencies": { @@ -13927,15 +13191,7 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7" - } - }, - "packages/dsh-desktop-shell": { - "version": "0.1.0", - "extraneous": true, - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1" + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1" } } } diff --git a/package.json b/package.json index 93079de3..43438b7c 100644 --- a/package.json +++ b/package.json @@ -43,25 +43,26 @@ }, "dependencies": { "@deepseek-ai/cordis-plugin-group": "1.0.1", - "@deepseek-ai/dsh": "0.1.0-rc.8", - "@deepseek-ai/dsh-anonymous-user-id": "0.1.0-rc.8", - "@deepseek-ai/dsh-atomic-write": "0.1.0-rc.8", - "@deepseek-ai/dsh-bash-local": "0.1.0-rc.8", - "@deepseek-ai/dsh-code-runtime": "0.1.0-rc.8", - "@deepseek-ai/dsh-compaction": "0.1.0-rc.8", - "@deepseek-ai/dsh-fs": "0.1.0-rc.8", - "@deepseek-ai/dsh-invariants": "0.1.0-rc.8", - "@deepseek-ai/dsh-output-retention": "0.1.0-rc.8", - "@deepseek-ai/dsh-sandbox": "0.1.0-rc.8", - "@deepseek-ai/dsh-scope": "0.1.0-rc.8", - "@deepseek-ai/dsh-session-telemetry": "0.1.0-rc.8", - "@deepseek-ai/dsh-session-title-llm": "0.1.0-rc.8", - "@deepseek-ai/dsh-shell": "0.1.0-rc.8", - "@deepseek-ai/dsh-spill": "0.1.0-rc.8", - "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.0-rc.8", - "@deepseek-ai/dsh-subprocess": "0.1.0-rc.8", - "@deepseek-ai/dsh-timeout": "0.1.0-rc.8", - "@deepseek-ai/dsh-workflow": "0.1.0-rc.8", + "@deepseek-ai/dsh": "0.1.1-rc.1", + "@deepseek-ai/dsh-anonymous-user-id": "0.1.1-rc.1", + "@deepseek-ai/dsh-atomic-write": "0.1.1-rc.1", + "@deepseek-ai/dsh-authorization": "0.1.1-rc.1", + "@deepseek-ai/dsh-bash-local": "0.1.1-rc.1", + "@deepseek-ai/dsh-code-runtime": "0.1.1-rc.1", + "@deepseek-ai/dsh-compaction": "0.1.1-rc.1", + "@deepseek-ai/dsh-fs": "0.1.1-rc.1", + "@deepseek-ai/dsh-invariants": "0.1.1-rc.1", + "@deepseek-ai/dsh-output-retention": "0.1.1-rc.1", + "@deepseek-ai/dsh-sandbox": "0.1.1-rc.1", + "@deepseek-ai/dsh-scope": "0.1.1-rc.1", + "@deepseek-ai/dsh-session-telemetry": "0.1.1-rc.1", + "@deepseek-ai/dsh-session-title-llm": "0.1.1-rc.1", + "@deepseek-ai/dsh-shell": "0.1.1-rc.1", + "@deepseek-ai/dsh-spill": "0.1.1-rc.1", + "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.1-rc.1", + "@deepseek-ai/dsh-subprocess": "0.1.1-rc.1", + "@deepseek-ai/dsh-timeout": "0.1.1-rc.1", + "@deepseek-ai/dsh-workflow": "0.1.1-rc.1", "dsh-desktop-market-installer": "file:packages/dsh-desktop-market-installer", "electron-updater": "^6.8.9", "node": "24.9.0", diff --git a/packages/dsh-desktop-market-installer/package.json b/packages/dsh-desktop-market-installer/package.json index 7c8f2715..e50f5741 100644 --- a/packages/dsh-desktop-market-installer/package.json +++ b/packages/dsh-desktop-market-installer/package.json @@ -23,7 +23,7 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7" + "@deepseek-ai/dsh-host-webserver": "^0.1.1-rc.1" }, "dependencies": { "pnpm": "10.34.5" diff --git a/patches/@deepseek-ai+dsh+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-client-runtime+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-runtime+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-client-runtime+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-runtime+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-client-ui-agent-preset+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-agent-preset+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-client-ui-agent-preset+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-ui-agent-preset+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-client-ui-conversation+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-conversation+0.1.0-rc.8.patch deleted file mode 100644 index 88ff7296..00000000 --- a/patches/@deepseek-ai+dsh-client-ui-conversation+0.1.0-rc.8.patch +++ /dev/null @@ -1,250 +0,0 @@ -diff --git a/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js b/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js -index 4b7dd35..f9bf444 100644 ---- a/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js -+++ b/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js -@@ -5376,6 +5376,15 @@ window.__ModuleLoader__.load({ - "turnStatus": "Md3f7G_turnStatus", - "turnStatusClock": "Md3f7G_turnStatusClock" - }; -+ const queryRailCss = ".dshQueryRail_root{z-index:7;width:46px;pointer-events:none;position:fixed}.dshQueryRail_scroller{width:40px;height:100%;padding:8px 2px;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-width:none;flex-direction:column;align-items:flex-start;gap:2px;display:flex;position:relative}.dshQueryRail_scroller::-webkit-scrollbar{width:0;height:0;display:none}.dshQueryRail_item{width:34px;height:12px;min-height:12px;cursor:pointer;background:transparent;border:0;outline:none;flex:none;padding:0;position:relative}.dshQueryRail_item:before{content:\"\";width:10px;height:1px;background:var(--dsw-alias-label-dimmed);border-radius:2px;transition:width .14s ease,background-color .14s ease,opacity .14s ease;display:block}.dshQueryRail_item:hover:before,.dshQueryRail_item:focus-visible:before{width:20px;background:var(--dsw-alias-label-secondary)}.dshQueryRail_itemActive:before{width:28px;height:2px;background:var(--dsw-alias-label-primary)}.dshQueryRail_tooltip{width:276px;max-width:min(276px,calc(100vw - 64px));color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv2);pointer-events:none;border-radius:12px;padding:10px 12px;position:absolute;left:42px}.dshQueryRail_tooltipLabel{color:var(--dsw-alias-label-caption);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;font-size:11px;line-height:16px}.dshQueryRail_tooltipText{-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;font-size:13px;line-height:19px;display:-webkit-box}@media(max-width:980px){.dshQueryRail_root{display:none}}@media(prefers-reduced-motion:reduce){.dshQueryRail_item:before{transition:none}}"; -+ const queryRailTagId = "@deepseek-ai/dsh-client-ui-conversation/QueryRail.css"; -+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(queryRailTagId) + "]") === null) { -+ const tag = document.createElement("style"); -+ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; -+ tag.dataset.pluginCss = queryRailTagId; -+ tag.textContent = queryRailCss + ".dshQueryRail_scroller{pointer-events:auto}"; -+ document.head.appendChild(tag); -+ } - //#endregion - //#region lib/types/client/chat/ChatNodeSeat.js - /** Subscribe and dispatch one stable Context key without observing sibling Nodes. */ -@@ -5432,6 +5441,21 @@ window.__ModuleLoader__.load({ - for (const row of list.querySelectorAll("[data-chat-anchor-key]")) if (row.dataset.chatAnchorKey === key) return row; - return null; - } -+ /** Select the query whose turn currently owns the reading position. */ -+ function queryAtViewport(list, scrollport, queries) { -+ if (queries.length === 0) return null; -+ const viewport = scrollport.getBoundingClientRect(); -+ const visibleBottom = scrollport.querySelector("[data-composer-seat]")?.getBoundingClientRect().top ?? viewport.bottom; -+ const threshold = viewport.top + Math.max(72, (visibleBottom - viewport.top) * .55); -+ let active = queries[0].key; -+ for (const query of queries) { -+ const row = anchorElement(list, query.key); -+ if (row === null) continue; -+ if (row.getBoundingClientRect().top > threshold) break; -+ active = query.key; -+ } -+ return active; -+ } - /** Row position in scrollport coordinates (viewport-independent). */ - function flowTop(row, scrollport) { - return row.getBoundingClientRect().top - scrollport.getBoundingClientRect().top; -@@ -5516,6 +5540,106 @@ window.__ModuleLoader__.load({ - })] - }); - } -+ /** Compact, independently scrollable navigation for durable user queries. */ -+ function QueryRail({ queries, activeKey, listRef, columnRef, onNavigate }) { -+ const railRef = (0, react.useRef)(null); -+ const scrollerRef = (0, react.useRef)(null); -+ const [layout, setLayout] = (0, react.useState)(null); -+ const [hovered, setHovered] = (0, react.useState)(null); -+ (0, react.useLayoutEffect)(() => { -+ const list = listRef.current; -+ const column = columnRef.current; -+ if (queries.length < 2 || list === null || column === null) { -+ setLayout(null); -+ return; -+ } -+ const scrollport = scrollerOf(list); -+ const composer = scrollport.querySelector("[data-composer-seat]"); -+ const update = () => { -+ const viewport = scrollport.getBoundingClientRect(); -+ const bottom = Math.min(viewport.bottom, composer?.getBoundingClientRect().top ?? viewport.bottom) - 12; -+ const top = viewport.top + 12; -+ const height = Math.floor(bottom - top); -+ const next = height >= 144 ? { -+ top: Math.round(top), -+ left: Math.round(viewport.left + 12), -+ height -+ } : null; -+ setLayout((current) => current?.top === next?.top && current?.left === next?.left && current?.height === next?.height ? current : next); -+ }; -+ update(); -+ window.addEventListener("resize", update); -+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(update); -+ observer?.observe(scrollport); -+ observer?.observe(column); -+ if (composer !== null) observer?.observe(composer); -+ return () => { -+ window.removeEventListener("resize", update); -+ observer?.disconnect(); -+ }; -+ }, [queries.length, listRef, columnRef]); -+ (0, react.useLayoutEffect)(() => { -+ const scroller = scrollerRef.current; -+ if (scroller === null || activeKey === null) return; -+ const button = [...scroller.querySelectorAll("[data-query-key]")].find((candidate) => candidate.dataset.queryKey === activeKey); -+ if (button === void 0) return; -+ const top = button.offsetTop; -+ const bottom = top + button.offsetHeight; -+ if (top < scroller.scrollTop + 8) scroller.scrollTop = Math.max(0, top - 8); -+ else if (bottom > scroller.scrollTop + scroller.clientHeight - 8) scroller.scrollTop = bottom - scroller.clientHeight + 8; -+ }, [activeKey, layout?.height]); -+ if (layout === null) return null; -+ const showPreview = (query, button) => { -+ const rail = railRef.current; -+ if (rail === null) return; -+ const railBox = rail.getBoundingClientRect(); -+ const buttonBox = button.getBoundingClientRect(); -+ setHovered({ -+ query, -+ top: Math.max(8, Math.min(layout.height - 88, buttonBox.top - railBox.top - 12)) -+ }); -+ }; -+ return (0, react_jsx_runtime.jsxs)("nav", { -+ ref: railRef, -+ className: "dshQueryRail_root", -+ style: layout, -+ "data-query-rail": "", -+ "aria-label": document.documentElement.lang.startsWith("zh") ? "Query 导航" : "Query navigation", -+ onMouseLeave: () => setHovered(null), -+ children: [(0, react_jsx_runtime.jsx)("div", { -+ ref: scrollerRef, -+ className: "dshQueryRail_scroller", -+ onWheel: (event) => event.stopPropagation(), -+ onScroll: () => setHovered(null), -+ children: queries.map((query, index) => { -+ const active = query.key === activeKey; -+ const label = `Query ${index + 1}: ${query.preview}`; -+ return (0, react_jsx_runtime.jsx)("button", { -+ type: "button", -+ className: `dshQueryRail_item${active ? " dshQueryRail_itemActive" : ""}`, -+ "data-query-key": query.key, -+ "aria-label": label, -+ "aria-current": active ? "step" : void 0, -+ onClick: () => onNavigate(query.key), -+ onMouseEnter: (event) => showPreview(query, event.currentTarget), -+ onFocus: (event) => showPreview(query, event.currentTarget), -+ onBlur: () => setHovered(null) -+ }, query.key); -+ }) -+ }), hovered !== null && (0, react_jsx_runtime.jsxs)("div", { -+ className: "dshQueryRail_tooltip", -+ style: { top: hovered.top }, -+ role: "tooltip", -+ children: [(0, react_jsx_runtime.jsx)("div", { -+ className: "dshQueryRail_tooltipLabel", -+ children: `Query ${queries.findIndex((query) => query.key === hovered.query.key) + 1}` -+ }), (0, react_jsx_runtime.jsx)("div", { -+ className: "dshQueryRail_tooltipText", -+ children: hovered.query.preview -+ })] -+ })] -+ }); -+ } - /** - * The chat view slot entry: pure component over the composed props; each - * ordered business Node crosses the keyed renderer seat. -@@ -5561,11 +5685,28 @@ window.__ModuleLoader__.load({ - ...owner, - loadImage - }), [loadImage, renderSlot]); -+ const queries = (0, react.useMemo)(() => order.flatMap((key) => { -+ const node = nodeStore.get(key); -+ if (node?.kind !== "user" && node?.kind !== "steering") return []; -+ const content = Array.isArray(node.data.content) ? contentParts(node.data.content) : { -+ text: "", -+ images: [], -+ rest: [] -+ }; -+ const text = content.text.replace(/\s+/g, " ").trim(); -+ const preview = (text || (content.images.length > 0 ? document.documentElement.lang.startsWith("zh") ? "图片 Query" : "Image query" : document.documentElement.lang.startsWith("zh") ? "无文本 Query" : "Query without text")).slice(0, 240); -+ return [{ -+ key, -+ preview -+ }]; -+ }), [order, nodeStore]); - const runningTurnStart = (0, react.useMemo)(() => runningTurnStartTime(timeline), [timeline]); - const listRef = (0, react.useRef)(null); - const columnRef = (0, react.useRef)(null); - const atBottomRef = (0, react.useRef)(true); - const [atBottom, setAtBottom] = (0, react.useState)(true); -+ const [activeQueryKey, setActiveQueryKey] = (0, react.useState)(null); -+ const activeQueryKeyRef = (0, react.useRef)(null); - /** Last position delivered or written on the main thread. */ - const observedTopRef = (0, react.useRef)(0); - /** Paging anchor: semantic row/position at click, updated by reader scrolls -@@ -5585,6 +5726,12 @@ window.__ModuleLoader__.load({ - const lastNode = lastKey === null ? void 0 : nodeStore.get(lastKey); - const lastSteeringId = pendingSteering[pendingSteering.length - 1]?.id ?? null; - const followSig = `${openState}:${firstSeq}:${lastKey}:${order.length}:${running ? 1 : 0}:${lastSteeringId ?? ""}`; -+ const syncActiveQuery = (local, el) => { -+ const next = queryAtViewport(local, el, queries); -+ if (next === activeQueryKeyRef.current) return; -+ activeQueryKeyRef.current = next; -+ setActiveQueryKey(next); -+ }; - const toBottom = (el) => { - anchorRef.current = null; - el.scrollTop = el.scrollHeight; -@@ -5592,6 +5739,8 @@ window.__ModuleLoader__.load({ - atBottomRef.current = true; - setAtBottom(true); - chatScroll.save(null); -+ const local = listRef.current; -+ if (local !== null) syncActiveQuery(local, el); - }; - (0, react.useLayoutEffect)(() => { - const local = listRef.current; -@@ -5648,6 +5797,7 @@ window.__ModuleLoader__.load({ - /* v8 ignore next -- ref-null guard: the handler only fires while mounted. */ - if (local === null) return; - const el = scrollerOf(local); -+ syncActiveQuery(local, el); - const floor = Math.max(0, el.scrollHeight - el.clientHeight); - const movedByReader = Math.abs(el.scrollTop - Math.min(observedTopRef.current, floor)) > .5; - const isAtBottom = movedByReader ? floor - el.scrollTop <= 25 : atBottomRef.current; -@@ -5667,6 +5817,10 @@ window.__ModuleLoader__.load({ - else if (position !== null) chatScroll.save(position); - observedTopRef.current = el.scrollTop; - }; -+ (0, react.useLayoutEffect)(() => { -+ const local = listRef.current; -+ if (local !== null) syncActiveQuery(local, scrollerOf(local)); -+ }, [queries, openState]); - (0, react.useEffect)(() => { - const local = listRef.current; - /* v8 ignore next -- ref-null guard: effect runs after the list node commits. */ -@@ -5720,9 +5874,29 @@ window.__ModuleLoader__.load({ - } - loadOlder(); - }; -+ const scrollToQuery = (key) => { -+ const local = listRef.current; -+ if (local === null) return; -+ const row = anchorElement(local, key); -+ if (row === null) return; -+ const el = scrollerOf(local); -+ const reducedMotion = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches === true; -+ el.scrollTo({ -+ top: Math.max(0, el.scrollTop + flowTop(row, el) - 24), -+ behavior: reducedMotion ? "auto" : "smooth" -+ }); -+ activeQueryKeyRef.current = key; -+ setActiveQueryKey(key); -+ }; - return (0, react_jsx_runtime.jsxs)("div", { - className: ChatView_module_css_default.root, -- children: [(0, react_jsx_runtime.jsxs)("div", { -+ children: [(0, react_jsx_runtime.jsx)(QueryRail, { -+ queries, -+ activeKey: activeQueryKey, -+ listRef, -+ columnRef, -+ onNavigate: scrollToQuery -+ }), (0, react_jsx_runtime.jsxs)("div", { - ref: listRef, - className: ChatView_module_css_default.scroll, - children: [(0, react_jsx_runtime.jsxs)("div", { diff --git a/patches/@deepseek-ai+dsh-client-ui-conversation+0.1.1-rc.1.patch b/patches/@deepseek-ai+dsh-client-ui-conversation+0.1.1-rc.1.patch new file mode 100644 index 00000000..6d0b7213 --- /dev/null +++ b/patches/@deepseek-ai+dsh-client-ui-conversation+0.1.1-rc.1.patch @@ -0,0 +1,10524 @@ +diff --git a/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js b/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js +index aa3c9c3..a4a07fc 100644 +--- a/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js ++++ b/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js +@@ -5483,6 +5483,15 @@ window.__ModuleLoader__.load({ + "turnStatus": "Md3f7G_turnStatus", + "turnStatusClock": "Md3f7G_turnStatusClock" + }; ++ const queryRailCss = ".dshQueryRail_root{z-index:7;width:46px;pointer-events:none;position:fixed}.dshQueryRail_scroller{width:40px;height:100%;padding:8px 2px;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-width:none;flex-direction:column;align-items:flex-start;gap:2px;display:flex;position:relative}.dshQueryRail_scroller::-webkit-scrollbar{width:0;height:0;display:none}.dshQueryRail_item{width:34px;height:12px;min-height:12px;cursor:pointer;background:transparent;border:0;outline:none;flex:none;padding:0;position:relative}.dshQueryRail_item:before{content:\"\";width:10px;height:1px;background:var(--dsw-alias-label-dimmed);border-radius:2px;transition:width .14s ease,background-color .14s ease,opacity .14s ease;display:block}.dshQueryRail_item:hover:before,.dshQueryRail_item:focus-visible:before{width:20px;background:var(--dsw-alias-label-secondary)}.dshQueryRail_itemActive:before{width:28px;height:2px;background:var(--dsw-alias-label-primary)}.dshQueryRail_tooltip{width:276px;max-width:min(276px,calc(100vw - 64px));color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv2);pointer-events:none;border-radius:12px;padding:10px 12px;position:absolute;left:42px}.dshQueryRail_tooltipLabel{color:var(--dsw-alias-label-caption);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;font-size:11px;line-height:16px}.dshQueryRail_tooltipText{-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;font-size:13px;line-height:19px;display:-webkit-box}@media(max-width:980px){.dshQueryRail_root{display:none}}@media(prefers-reduced-motion:reduce){.dshQueryRail_item:before{transition:none}}"; ++ const queryRailTagId = "@deepseek-ai/dsh-client-ui-conversation/QueryRail.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(queryRailTagId) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = queryRailTagId; ++ tag.textContent = queryRailCss + ".dshQueryRail_scroller{pointer-events:auto}"; ++ document.head.appendChild(tag); ++ } + //#endregion + //#region lib/types/client/chat/ChatNodeSeat.js + /** Subscribe and dispatch one stable Context key without observing sibling Nodes. */ +@@ -5539,6 +5548,21 @@ window.__ModuleLoader__.load({ + for (const row of list.querySelectorAll("[data-chat-anchor-key]")) if (row.dataset.chatAnchorKey === key) return row; + return null; + } ++ /** Select the query whose turn currently owns the reading position. */ ++ function queryAtViewport(list, scrollport, queries) { ++ if (queries.length === 0) return null; ++ const viewport = scrollport.getBoundingClientRect(); ++ const visibleBottom = scrollport.querySelector("[data-composer-seat]")?.getBoundingClientRect().top ?? viewport.bottom; ++ const threshold = viewport.top + Math.max(72, (visibleBottom - viewport.top) * .55); ++ let active = queries[0].key; ++ for (const query of queries) { ++ const row = anchorElement(list, query.key); ++ if (row === null) continue; ++ if (row.getBoundingClientRect().top > threshold) break; ++ active = query.key; ++ } ++ return active; ++ } + /** Row position in scrollport coordinates (viewport-independent). */ + function flowTop(row, scrollport) { + return row.getBoundingClientRect().top - scrollport.getBoundingClientRect().top; +@@ -5623,6 +5647,106 @@ window.__ModuleLoader__.load({ + })] + }); + } ++ /** Compact, independently scrollable navigation for durable user queries. */ ++ function QueryRail({ queries, activeKey, listRef, columnRef, onNavigate }) { ++ const railRef = (0, react.useRef)(null); ++ const scrollerRef = (0, react.useRef)(null); ++ const [layout, setLayout] = (0, react.useState)(null); ++ const [hovered, setHovered] = (0, react.useState)(null); ++ (0, react.useLayoutEffect)(() => { ++ const list = listRef.current; ++ const column = columnRef.current; ++ if (queries.length < 2 || list === null || column === null) { ++ setLayout(null); ++ return; ++ } ++ const scrollport = scrollerOf(list); ++ const composer = scrollport.querySelector("[data-composer-seat]"); ++ const update = () => { ++ const viewport = scrollport.getBoundingClientRect(); ++ const bottom = Math.min(viewport.bottom, composer?.getBoundingClientRect().top ?? viewport.bottom) - 12; ++ const top = viewport.top + 12; ++ const height = Math.floor(bottom - top); ++ const next = height >= 144 ? { ++ top: Math.round(top), ++ left: Math.round(viewport.left + 12), ++ height ++ } : null; ++ setLayout((current) => current?.top === next?.top && current?.left === next?.left && current?.height === next?.height ? current : next); ++ }; ++ update(); ++ window.addEventListener("resize", update); ++ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(update); ++ observer?.observe(scrollport); ++ observer?.observe(column); ++ if (composer !== null) observer?.observe(composer); ++ return () => { ++ window.removeEventListener("resize", update); ++ observer?.disconnect(); ++ }; ++ }, [queries.length, listRef, columnRef]); ++ (0, react.useLayoutEffect)(() => { ++ const scroller = scrollerRef.current; ++ if (scroller === null || activeKey === null) return; ++ const button = [...scroller.querySelectorAll("[data-query-key]")].find((candidate) => candidate.dataset.queryKey === activeKey); ++ if (button === void 0) return; ++ const top = button.offsetTop; ++ const bottom = top + button.offsetHeight; ++ if (top < scroller.scrollTop + 8) scroller.scrollTop = Math.max(0, top - 8); ++ else if (bottom > scroller.scrollTop + scroller.clientHeight - 8) scroller.scrollTop = bottom - scroller.clientHeight + 8; ++ }, [activeKey, layout?.height]); ++ if (layout === null) return null; ++ const showPreview = (query, button) => { ++ const rail = railRef.current; ++ if (rail === null) return; ++ const railBox = rail.getBoundingClientRect(); ++ const buttonBox = button.getBoundingClientRect(); ++ setHovered({ ++ query, ++ top: Math.max(8, Math.min(layout.height - 88, buttonBox.top - railBox.top - 12)) ++ }); ++ }; ++ return (0, react_jsx_runtime.jsxs)("nav", { ++ ref: railRef, ++ className: "dshQueryRail_root", ++ style: layout, ++ "data-query-rail": "", ++ "aria-label": document.documentElement.lang.startsWith("zh") ? "Query 导航" : "Query navigation", ++ onMouseLeave: () => setHovered(null), ++ children: [(0, react_jsx_runtime.jsx)("div", { ++ ref: scrollerRef, ++ className: "dshQueryRail_scroller", ++ onWheel: (event) => event.stopPropagation(), ++ onScroll: () => setHovered(null), ++ children: queries.map((query, index) => { ++ const active = query.key === activeKey; ++ const label = `Query ${index + 1}: ${query.preview}`; ++ return (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: `dshQueryRail_item${active ? " dshQueryRail_itemActive" : ""}`, ++ "data-query-key": query.key, ++ "aria-label": label, ++ "aria-current": active ? "step" : void 0, ++ onClick: () => onNavigate(query.key), ++ onMouseEnter: (event) => showPreview(query, event.currentTarget), ++ onFocus: (event) => showPreview(query, event.currentTarget), ++ onBlur: () => setHovered(null) ++ }, query.key); ++ }) ++ }), hovered !== null && (0, react_jsx_runtime.jsxs)("div", { ++ className: "dshQueryRail_tooltip", ++ style: { top: hovered.top }, ++ role: "tooltip", ++ children: [(0, react_jsx_runtime.jsx)("div", { ++ className: "dshQueryRail_tooltipLabel", ++ children: `Query ${queries.findIndex((query) => query.key === hovered.query.key) + 1}` ++ }), (0, react_jsx_runtime.jsx)("div", { ++ className: "dshQueryRail_tooltipText", ++ children: hovered.query.preview ++ })] ++ })] ++ }); ++ } + /** + * The chat view slot entry: pure component over the composed props; each + * ordered business Node crosses the keyed renderer seat. +@@ -5668,11 +5792,28 @@ window.__ModuleLoader__.load({ + ...owner, + loadImage + }), [loadImage, renderSlot]); ++ const queries = (0, react.useMemo)(() => order.flatMap((key) => { ++ const node = nodeStore.get(key); ++ if (node?.kind !== "user" && node?.kind !== "steering") return []; ++ const content = Array.isArray(node.data.content) ? contentParts(node.data.content) : { ++ text: "", ++ images: [], ++ rest: [] ++ }; ++ const text = content.text.replace(/\s+/g, " ").trim(); ++ const preview = (text || (content.images.length > 0 ? document.documentElement.lang.startsWith("zh") ? "图片 Query" : "Image query" : document.documentElement.lang.startsWith("zh") ? "无文本 Query" : "Query without text")).slice(0, 240); ++ return [{ ++ key, ++ preview ++ }]; ++ }), [order, nodeStore]); + const runningTurnStart = (0, react.useMemo)(() => runningTurnStartTime(timeline), [timeline]); + const listRef = (0, react.useRef)(null); + const columnRef = (0, react.useRef)(null); + const atBottomRef = (0, react.useRef)(true); + const [atBottom, setAtBottom] = (0, react.useState)(true); ++ const [activeQueryKey, setActiveQueryKey] = (0, react.useState)(null); ++ const activeQueryKeyRef = (0, react.useRef)(null); + /** Last position delivered or written on the main thread. */ + const observedTopRef = (0, react.useRef)(0); + /** Paging anchor: semantic row/position at click, updated by reader scrolls +@@ -5692,6 +5833,12 @@ window.__ModuleLoader__.load({ + const lastNode = lastKey === null ? void 0 : nodeStore.get(lastKey); + const lastSteeringId = pendingSteering[pendingSteering.length - 1]?.id ?? null; + const followSig = `${openState}:${firstSeq}:${lastKey}:${order.length}:${running ? 1 : 0}:${lastSteeringId ?? ""}`; ++ const syncActiveQuery = (local, el) => { ++ const next = queryAtViewport(local, el, queries); ++ if (next === activeQueryKeyRef.current) return; ++ activeQueryKeyRef.current = next; ++ setActiveQueryKey(next); ++ }; + const toBottom = (el) => { + anchorRef.current = null; + el.scrollTop = el.scrollHeight; +@@ -5699,6 +5846,8 @@ window.__ModuleLoader__.load({ + atBottomRef.current = true; + setAtBottom(true); + chatScroll.save(null); ++ const local = listRef.current; ++ if (local !== null) syncActiveQuery(local, el); + }; + (0, react.useLayoutEffect)(() => { + const local = listRef.current; +@@ -5755,6 +5904,7 @@ window.__ModuleLoader__.load({ + /* v8 ignore next -- ref-null guard: the handler only fires while mounted. */ + if (local === null) return; + const el = scrollerOf(local); ++ syncActiveQuery(local, el); + const floor = Math.max(0, el.scrollHeight - el.clientHeight); + const movedByReader = Math.abs(el.scrollTop - Math.min(observedTopRef.current, floor)) > .5; + const isAtBottom = movedByReader ? floor - el.scrollTop <= 25 : atBottomRef.current; +@@ -5774,6 +5924,10 @@ window.__ModuleLoader__.load({ + else if (position !== null) chatScroll.save(position); + observedTopRef.current = el.scrollTop; + }; ++ (0, react.useLayoutEffect)(() => { ++ const local = listRef.current; ++ if (local !== null) syncActiveQuery(local, scrollerOf(local)); ++ }, [queries, openState]); + (0, react.useEffect)(() => { + const local = listRef.current; + /* v8 ignore next -- ref-null guard: effect runs after the list node commits. */ +@@ -5827,9 +5981,29 @@ window.__ModuleLoader__.load({ + } + loadOlder(); + }; ++ const scrollToQuery = (key) => { ++ const local = listRef.current; ++ if (local === null) return; ++ const row = anchorElement(local, key); ++ if (row === null) return; ++ const el = scrollerOf(local); ++ const reducedMotion = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches === true; ++ el.scrollTo({ ++ top: Math.max(0, el.scrollTop + flowTop(row, el) - 24), ++ behavior: reducedMotion ? "auto" : "smooth" ++ }); ++ activeQueryKeyRef.current = key; ++ setActiveQueryKey(key); ++ }; + return (0, react_jsx_runtime.jsxs)("div", { + className: ChatView_module_css_default.root, +- children: [(0, react_jsx_runtime.jsxs)("div", { ++ children: [(0, react_jsx_runtime.jsx)(QueryRail, { ++ queries, ++ activeKey: activeQueryKey, ++ listRef, ++ columnRef, ++ onNavigate: scrollToQuery ++ }), (0, react_jsx_runtime.jsxs)("div", { + ref: listRef, + className: ChatView_module_css_default.scroll, + children: [(0, react_jsx_runtime.jsxs)("div", { +diff --git a/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js.orig b/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js.orig +new file mode 100644 +index 0000000..aa3c9c3 +--- /dev/null ++++ b/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js.orig +@@ -0,0 +1,10267 @@ ++window.__ModuleLoader__.load({ ++ id: "@deepseek-ai/dsh-client-ui-conversation", ++ factory: (require) => { ++ var module = { exports: {} }; ++ var exports = module.exports; ++ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); ++ let _deepseek_ai_dsh_client_ui_slots = require("@deepseek-ai/dsh-client-ui-slots"); ++ let _deepseek_ai_dsh_client_runtime_client = require("@deepseek-ai/dsh-client-runtime/client"); ++ let _deepseek_ai_cordis = require("@deepseek-ai/cordis"); ++ let react_jsx_runtime = require("react/jsx-runtime"); ++ let react = require("react"); ++ let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives"); ++ //#region lib/types/client/stores.js ++ /** ++ * Per-session chat store shared by conversation and details registrations. ++ * The plugin creates its handle at apply time so identity follows the fiber. ++ */ ++ /** ++ * Declares the per-session chat state and write surface. ++ * @returns the store handle. ++ */ ++ function createChatStore() { ++ return (0, _deepseek_ai_dsh_client_runtime_client.defineStore)({ ++ init: () => ({ ++ selection: null, ++ draft: "", ++ view: null, ++ inspect: null ++ }), ++ persist: "dsh.conversation.chat", ++ actions: { ++ select: (d, target) => { ++ d.selection = target; ++ }, ++ setDraft: (d, text) => { ++ d.draft = text; ++ }, ++ setView: (d, view) => { ++ d.view = view; ++ }, ++ setInspect: (d, target) => { ++ d.inspect = target; ++ } ++ } ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/service.js ++ /** ++ * Scope-addressed conversation send, cancel, and history orchestration. ++ * ++ * Scope addressing rides the cordis Service tracker: property access through ++ * `ctx.conversation` rebinds `this.ctx` to the caller's context, so methods ++ * read the session tag with `scopeOf`. Mutable state must remain reachable ++ * through one property read; assignment through the tracker proxy and `#` ++ * private fields bypass that rebinding. ++ */ ++ /** Create one browser-only draft descriptor; only its id enters input state. */ ++ function browserDraftAttachment(file) { ++ return { ++ kind: "image", ++ id: crypto.randomUUID(), ++ previewUrl: URL.createObjectURL(file), ++ file ++ }; ++ } ++ /** Unsupported browser-declared image type, localized by the UI boundary. */ ++ var UnsupportedImageMediaTypeError = class extends Error { ++ /** Browser-declared MIME value, possibly empty. */ ++ mediaType; ++ /** @param mediaType - Browser-declared MIME value, possibly empty. */ ++ constructor(mediaType) { ++ super(`unsupported image media type: ${mediaType || "(empty)"}`); ++ this.name = "UnsupportedImageMediaTypeError"; ++ this.mediaType = mediaType; ++ } ++ }; ++ /** Scope-addressed conversation service (root singleton, provided as `conversation`). */ ++ var ConversationController = class extends _deepseek_ai_cordis.Service { ++ /** The per-session input machine registry (SessionInputResolver face). */ ++ input; ++ /** The per-session composer-block registry. */ ++ blocks; ++ draftAttachments = /* @__PURE__ */ new Map(); ++ imageUrls = /* @__PURE__ */ new Map(); ++ imageGenerations = /* @__PURE__ */ new Map(); ++ createdImageUrls = /* @__PURE__ */ new Set(); ++ disposed = false; ++ /** ++ * @param ctx - owning root context (the plugin apply context; the service ++ * registers itself and follows that fiber's lifetime). ++ * @param config - carries the SessionInputResolver and composer-block registry ++ * constructed by the plugin apply (the same instances the slot inject ++ * factories close over). ++ */ ++ constructor(ctx, config) { ++ super(ctx, "conversation"); ++ this.input = config.input; ++ this.blocks = config.blocks; ++ ctx.effect(() => () => { ++ this.disposed = true; ++ for (const url of this.createdImageUrls) revokePreview(url); ++ this.createdImageUrls.clear(); ++ this.draftAttachments.clear(); ++ this.imageUrls.clear(); ++ this.imageGenerations.clear(); ++ }, "conversation attachment URL cache"); ++ } ++ /** ++ * Send a prompt into the scoped session. Business failures also land in the ++ * session snapshot's promptError (object-layer state); the rejection here ++ * exists for caller choreography (the composer restores the draft on it). ++ * @param text - prompt text, sent verbatim as one text block. ++ */ ++ async send(text) { ++ const result = await this.scopedSession("send").prompt([{ ++ type: "text", ++ text ++ }], "queue"); ++ if (!result.ok) throw new Error(`conversation.send failed: ${result.error.code}: ${result.error.message}`); ++ } ++ /** ++ * Submit ordered draft images with text through one host admission. ++ * @param session - target session. ++ * @param text - serialized prompt text. ++ * @param imageIds - ordered draft-local attachment ids. ++ * @param mode - queue or steer delivery selected by composer policy. ++ * @param signal - optional cancellation for the complete Host admission. ++ * @returns the Host admission outcome; local attachment preparation failures reject. ++ */ ++ async sendSession(session, text, imageIds, mode, signal) { ++ const attachments = this.draftImages(imageIds); ++ if (attachments.length !== imageIds.length) throw new Error("conversation.sendSession: one or more draft images are no longer available"); ++ const content = [...await this.serializeImages(attachments.map((attachment) => attachment.file)), ...text === "" ? [] : [{ ++ type: "text", ++ text ++ }]]; ++ if (!(await session.prompt(content, mode, signal)).ok) return { kind: "error" }; ++ this.releaseDraftImages(attachments); ++ return { kind: "success" }; ++ } ++ /** ++ * Create runtime-only draft images and their object URLs. ++ * @param files - browser files to register after MIME validation. ++ * @returns ordered draft descriptors. ++ */ ++ createDraftImages(files) { ++ for (const file of files) imageMediaType(file.type); ++ return files.map((file) => { ++ const attachment = browserDraftAttachment(file); ++ this.draftAttachments.set(attachment.id, attachment); ++ this.createdImageUrls.add(attachment.previewUrl); ++ return attachment; ++ }); ++ } ++ /** ++ * Resolve ordered input-state ids to runtime-owned draft images. ++ * @param ids - draft attachment ids. ++ * @returns descriptors that remain live, in requested order. ++ */ ++ draftImages(ids) { ++ const attachments = []; ++ for (const id of ids) { ++ const attachment = this.draftAttachments.get(id); ++ if (attachment !== void 0) attachments.push(attachment); ++ } ++ return attachments; ++ } ++ /** ++ * Serialize ordered draft images to command-submit wire payloads without ++ * sending or releasing them (the composer releases only after the command ++ * settles successfully). ++ * @param imageIds - ordered draft-local attachment ids. ++ * @returns base64 payloads in id order. ++ */ ++ async serializeDraftImages(imageIds) { ++ const attachments = this.draftImages(imageIds); ++ if (attachments.length !== imageIds.length) throw new Error("conversation.serializeDraftImages: one or more draft images are no longer available"); ++ return Promise.all(attachments.map((attachment) => this.encodeImage(attachment.file))); ++ } ++ /** ++ * Release one browser-owned draft image and preview URL. ++ * @param id - draft attachment id. ++ */ ++ releaseDraftImage(id) { ++ const attachment = this.draftAttachments.get(id); ++ if (attachment === void 0) return; ++ this.draftAttachments.delete(id); ++ this.createdImageUrls.delete(attachment.previewUrl); ++ revokePreview(attachment.previewUrl); ++ } ++ /** ++ * Release a set of browser-owned draft images. ++ * @param attachments - descriptors to release. ++ */ ++ releaseDraftImages(attachments) { ++ for (const attachment of attachments) this.releaseDraftImage(attachment.id); ++ } ++ /** ++ * Resolve and cache one session-authorized historical image URL. ++ * @param sessionId - owning session authorization scope. ++ * @param attachment - durable image reference. ++ * @returns browser URL valid until its rendered session is released. ++ */ ++ resolveImage(sessionId, attachment) { ++ if (this.disposed) return Promise.reject(/* @__PURE__ */ new Error("conversation.resolveImage: service is disposed")); ++ const key = `${sessionId}:${attachment.attachmentId}`; ++ const cached = this.imageUrls.get(key); ++ if (cached !== void 0) return cached.pending; ++ const generation = this.imageGenerations.get(sessionId) ?? 0; ++ const session = this.requireSessions().binding(sessionId)?.session; ++ if (session === void 0) return Promise.reject(/* @__PURE__ */ new Error(`conversation.resolveImage: unknown session "${sessionId}"`)); ++ const pending = session.readAttachment(attachment.attachmentId).then((result) => { ++ if (!result.ok) throw new Error(`${result.error.code}: ${result.error.message}`); ++ if (this.disposed) throw new Error("conversation.resolveImage: service was disposed before loading completed"); ++ if ((this.imageGenerations.get(sessionId) ?? 0) !== generation) throw new Error("historical image scope was released before loading completed"); ++ if (typeof URL.createObjectURL !== "function") return `data:${result.value.attachment.mediaType};base64,${bytesToBase64(result.value.data)}`; ++ const bytes = Uint8Array.from(result.value.data); ++ const url = URL.createObjectURL(new Blob([bytes.buffer], { type: result.value.attachment.mediaType })); ++ this.createdImageUrls.add(url); ++ return url; ++ }).catch((error) => { ++ if (this.imageUrls.get(key)?.generation === generation) this.imageUrls.delete(key); ++ throw error; ++ }); ++ this.imageUrls.set(key, { ++ sessionId, ++ generation, ++ pending ++ }); ++ return pending; ++ } ++ /** ++ * Release every historical image URL owned by one rendered session. ++ * @param sessionId - rendered session scope. ++ */ ++ releaseSessionImages(sessionId) { ++ this.imageGenerations.set(sessionId, (this.imageGenerations.get(sessionId) ?? 0) + 1); ++ for (const [key, entry] of this.imageUrls) { ++ if (entry.sessionId !== sessionId) continue; ++ this.imageUrls.delete(key); ++ entry.pending.then((url) => { ++ if (!this.createdImageUrls.delete(url)) return; ++ revokePreview(url); ++ }, () => {}); ++ } ++ } ++ /** Apply one operation to a pending queue occurrence. */ ++ async updateQueue(itemId, action) { ++ const result = await this.scopedSession("updateQueue").updateQueue(itemId, action); ++ if (!result.ok) { ++ if (action.kind === "steer" && (result.error.code === "steer-unavailable" || result.error.code === "queue-item-not-found")) return; ++ throw new Error(`conversation.updateQueue failed: ${result.error.code}: ${result.error.message}`); ++ } ++ } ++ /** Cancel the scoped session's in-flight turn while preserving Queue (failures land in promptError and reject, as in send). */ ++ async cancel() { ++ const result = await this.scopedSession("cancel").cancel(); ++ if (!result.ok) throw new Error(`conversation.cancel failed: ${result.error.code}: ${result.error.message}`); ++ } ++ /** Pull one older history page for the scoped Session. */ ++ async loadOlder() { ++ await this.scopedSession("loadOlder").loadOlder(); ++ } ++ /** Resolve the caller scope's session face or throw on root contexts. */ ++ scopedSession(op) { ++ const id = this.scopeId(op); ++ const binding = this.requireSessions().binding(id); ++ if (binding === void 0) throw new Error(`conversation.${op}: session "${id}" resolved no binding`); ++ return binding.session; ++ } ++ /** Read the caller's session scope tag via the sessions service; root contexts fail loud. */ ++ scopeId(op) { ++ const id = this.requireSessions().scopeOf(this.ctx); ++ if (id === void 0) throw new Error(`conversation.${op} requires a session scope — address one via ctx.sessions.scope(id).conversation`); ++ return id; ++ } ++ requireSessions() { ++ const sessions = this.ctx.get("sessions"); ++ if (sessions === void 0) throw new Error("conversation: sessions service unavailable"); ++ return sessions; ++ } ++ /** Convert browser files to canonical base64 prompt parts. */ ++ serializeImages(images) { ++ return Promise.all(images.map(async (file) => ({ ++ type: "image", ++ ...await this.encodeImage(file) ++ }))); ++ } ++ /** Canonical base64 wire form of one browser image file. */ ++ async encodeImage(file) { ++ return { ++ mediaType: imageMediaType(file.type), ++ data: bytesToBase64(new Uint8Array(await file.arrayBuffer())), ++ ...file.name === "" ? {} : { name: file.name } ++ }; ++ } ++ }; ++ function imageMediaType(value) { ++ switch (value) { ++ case "image/png": ++ case "image/jpeg": ++ case "image/webp": ++ case "image/gif": return value; ++ default: throw new UnsupportedImageMediaTypeError(value); ++ } ++ } ++ function bytesToBase64(data) { ++ let binary = ""; ++ const chunk = 32768; ++ for (let offset = 0; offset < data.length; offset += chunk) binary += String.fromCharCode(...data.subarray(offset, offset + chunk)); ++ return btoa(binary); ++ } ++ function revokePreview(url) { ++ if (url.startsWith("blob:")) URL.revokeObjectURL(url); ++ } ++ //#endregion ++ //#region lib/types/client/input/blocks.js ++ /** ++ * Composer blocks: the one way another plugin stops a session's input. ++ * ++ * The composer cannot read the plugins that would know — the dependency runs ++ * ui-model-selection → ui-conversation, never back — so a blocker pushes here and the ++ * bar reads its own session's store. A block carries the localized reason it ++ * exists, because the plugin that raised it owns that copy; the composer only ++ * knows how to render an inert textarea with a placeholder, exactly as it ++ * already does for a session with no workspace. ++ * ++ * This is an affordance, not enforcement: the Host refuses a prompt it cannot ++ * route regardless of what any client disables. ++ */ ++ /** The per-session composer-block registry (one instance per plugin fiber). */ ++ var ComposerBlockRegistry = class { ++ stores = /* @__PURE__ */ new Map(); ++ /** @inheritdoc */ ++ set(sessionId, block) { ++ const store = this.storeFor(sessionId); ++ if (store.getSnapshot()?.reason === block?.reason) return; ++ store.set(block); ++ } ++ /** @inheritdoc */ ++ storeFor(sessionId) { ++ const existing = this.stores.get(sessionId); ++ if (existing !== void 0) return existing; ++ const created = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(void 0); ++ this.stores.set(sessionId, created); ++ return created; ++ } ++ /** @inheritdoc */ ++ forget(sessionId) { ++ this.stores.delete(sessionId); ++ } ++ }; ++ //#endregion ++ //#region lib/types/client/queue/store.js ++ /** ++ * Project a session's transient inbox rows as a bare observable (subscribe/getSnapshot). ++ * The wiring layer overlays this onto InputState.queue; the runtime ++ * QueuedMessage and the input-contract QueuedMessage are structurally ++ * identical. ++ * @param session - the resident session face. ++ * @returns the queue read face (snapshot reference stable while the queue is unchanged). ++ */ ++ function queueReadFaceOf(session) { ++ return { ++ getSnapshot: () => session.getSnapshot().queue, ++ subscribe: (fn) => session.subscribe(fn) ++ }; ++ } ++ //#endregion ++ //#region lib/types/client/input/machine.js ++ const REFERENCE_PLACEHOLDER_RE = /[\uE100-\uE11D\uFFFC]/gu; ++ /** ++ * Build the inline draft text whose leading marker is decorated as the ++ * reference icon in the backdrop. ++ * @param reference - reference insertion with its cached display projection. ++ * @returns display text with one marker glyph followed by the complete label. ++ */ ++ function referenceDraftText(reference) { ++ return `@${reference.label}`; ++ } ++ /** The machine never writes the queue; the wiring layer overlays the queue store's projection. */ ++ const EMPTY_QUEUE$1 = []; ++ /** Undo ring depth (bounded self-managed transaction log). */ ++ const LOG_LIMIT = 100; ++ /** Exhaustiveness backstop for the closed InputEvent / guard unions. */ ++ function unreachable(value) { ++ throw new Error(`unreachable input event: ${JSON.stringify(value)}`); ++ } ++ /** ++ * Strip the claim token off a draft to yield submit args. Leading whitespace ++ * (incl. newlines — leading-trigger trim) is tolerated; a bare `/name` ++ * missing the token's trailing separator yields empty args. Exactly one ++ * separator char is consumed; the remainder — newlines included — stays ++ * verbatim (`/goal x\ny` → `x\ny`). ++ */ ++ function argsAfter(draft, token) { ++ const s = draft.trimStart(); ++ if (s.startsWith(token)) return s.slice(token.length); ++ const base = token.trimEnd(); ++ if (s.startsWith(base)) { ++ const rest = s.slice(base.length); ++ return /^\s/.test(rest) ? rest.slice(1) : rest; ++ } ++ return ""; ++ } ++ /** ++ * Prefix/suffix common-scan recovering the edit range between two drafts ++ * (used when the wiring layer cannot supply one from the DOM event). ++ */ ++ function diffEdit(prev, next) { ++ let p = 0; ++ const maxCommon = Math.min(prev.length, next.length); ++ while (p < maxCommon && prev[p] === next[p]) p += 1; ++ let s = 0; ++ const maxSuffix = maxCommon - p; ++ while (s < maxSuffix && prev[prev.length - 1 - s] === next[next.length - 1 - s]) s += 1; ++ return { ++ start: p, ++ end: prev.length - s, ++ insertedLength: next.length - s - p ++ }; ++ } ++ /** ++ * Expand the draft's reference ranges into their occurrences' clipboard text ++ * for persistence and clipboard projection. Table order is offset order, so ++ * one linear walk pairs ranges with entries. ++ * @param state - published input state. ++ * @returns the plain-text projection of the draft. ++ */ ++ function projectClipboard(state) { ++ const { draft, occurrences } = state; ++ if (occurrences.length === 0) return draft; ++ let out = ""; ++ let cursor = 0; ++ for (const o of occurrences) { ++ out += draft.slice(cursor, o.offset) + o.clipboardText; ++ cursor = o.offset + o.length; ++ } ++ return out + draft.slice(cursor); ++ } ++ /** ++ * Pure input machine, one instance per session (per-session isolation is by ++ * construction). The machine constructs one AbortController per SubmitAttempt ++ * at enter time and aborts it itself on release; the shell never aborts, it ++ * only observes attempt.signal on its adjudicate/submit promises. Stale ++ * attempts (any adjudicated / adjudication-failed / submit-settled whose seq ++ * is not the in-flight one) are dropped: same state, zero effects. ++ */ ++ var InputMachine = class { ++ draft = ""; ++ draftRev = 0; ++ phase = "plain"; ++ claim; ++ occurrences = []; ++ occurrenceSeq = 0; ++ seq = 0; ++ inflight; ++ log = []; ++ redoStack = []; ++ /** Open single-char typing run: the next contiguous char within the window coalesces. */ ++ typingRun; ++ paste; ++ pasteSeq = 0; ++ mergeWindowMs; ++ now; ++ constructor(options = {}) { ++ this.mergeWindowMs = options.mergeWindowMs ?? 1e3; ++ this.now = options.now ?? (() => 0); ++ } ++ /** Read-only snapshot of the machine state (queue always empty at this tier). */ ++ get state() { ++ const c = this.claim; ++ return { ++ draft: this.draft, ++ imageIds: [], ++ draftRev: this.draftRev, ++ phase: this.phase, ++ ...c ? { claim: { ++ token: c.token, ++ ...c.hint !== void 0 ? { hint: c.hint } : {}, ++ ...c.images === true ? { images: true } : {} ++ } } : {}, ++ occurrences: this.occurrences, ++ ...this.paste !== void 0 ? { paste: this.paste } : {}, ++ queue: EMPTY_QUEUE$1 ++ }; ++ } ++ /** ++ * Feed one event through the machine. ++ * @param ev - Input event; the single write path for all input state. ++ * @returns Effects for the shell to execute in order; empty on no-ops, locks, and dropped stale events. ++ */ ++ dispatch(ev) { ++ switch (ev.type) { ++ case "draft-changed": return this.onDraftChanged(ev.draft, ev.editRange); ++ case "begin-command": return this.onBeginCommand(ev.claim, ev.span); ++ case "insert-ref": return this.onInsertRef(ev.reference, ev.span); ++ case "consume-token": return this.onConsumeToken(ev.guard); ++ case "set-invalid": return this.onSetInvalid(ev.invalidIds); ++ case "undo": return this.onUndo(); ++ case "redo": return this.onRedo(); ++ case "paste-begin": return this.onPasteBegin(ev.text, ev.selection, ev.components, ev.generation); ++ case "paste-upgrade": return this.onPasteUpgrade(ev.attemptId, ev.span, ev.reference); ++ case "invalidate-paste": ++ this.paste = void 0; ++ return []; ++ case "enter": return this.onEnter(ev.mode); ++ case "adjudicated": return this.onAdjudicated(ev.attempt, ev.outcome); ++ case "adjudication-failed": return this.onAdjudicationFailed(ev.attempt, ev.message); ++ case "submit-settled": return this.onSubmitSettled(ev); ++ case "send-committed": return this.onSendCommitted(); ++ case "release": return this.onRelease(); ++ default: return unreachable(ev); ++ } ++ } ++ /** Adopt a new draft: bump the revision (the span-CAS invalidation point). */ ++ adopt(draft) { ++ this.draft = draft; ++ this.draftRev += 1; ++ } ++ /** Push one undo unit (before-state), trim the ring, and cut the redo chain. */ ++ pushTxn(selectionBefore) { ++ this.log.push({ ++ draftBefore: this.draft, ++ occurrencesBefore: this.occurrences, ++ ...selectionBefore !== void 0 ? { selectionBefore } : {} ++ }); ++ if (this.log.length > LOG_LIMIT) this.log.shift(); ++ this.redoStack = []; ++ } ++ /** ++ * Reconcile the occurrence table with one edit (old-draft coordinates): ++ * entries past the range shift by the length delta; an edit that intersects ++ * a reference range removes its structured occurrence and leaves the edited ++ * characters as ordinary draft text. ++ */ ++ reconcile(range) { ++ const delta = range.insertedLength - (range.end - range.start); ++ const kept = []; ++ for (const o of this.occurrences) if (o.offset + o.length <= range.start) kept.push(o); ++ else if (o.offset >= range.end) kept.push(delta === 0 ? o : { ++ ...o, ++ offset: o.offset + delta ++ }); ++ this.occurrences = kept; ++ } ++ /** Claimed integrity watch: any mutation that breaks the token prefix releases the claim. */ ++ watchClaim() { ++ if (this.phase === "claimed" && this.claim !== void 0 && !this.draft.startsWith(this.claim.token)) { ++ this.phase = "plain"; ++ this.claim = void 0; ++ } ++ } ++ /** Mint one occurrence at a draft offset. */ ++ mint(reference, offset, length) { ++ this.occurrenceSeq += 1; ++ return { ++ occurrenceId: this.occurrenceSeq, ++ source: reference.source, ++ ref: reference.ref, ++ offset, ++ length, ++ label: reference.label, ++ ...reference.appearance === void 0 ? {} : { appearance: reference.appearance }, ++ clipboardText: reference.clipboardText ++ }; ++ } ++ /** Splice minted entries into the offset-sorted table. */ ++ withMinted(minted) { ++ if (minted.length === 0) return; ++ this.occurrences = [...this.occurrences, ...minted].sort((a, b) => a.offset - b.offset); ++ } ++ onDraftChanged(draft, editRange) { ++ if (draft === this.draft) return []; ++ const range = editRange ?? diffEdit(this.draft, draft); ++ const typing = range.start === range.end && range.insertedLength === 1; ++ const at = this.now(); ++ const run = this.typingRun; ++ if (!(typing && run !== void 0 && run.end === range.start && at - run.at <= this.mergeWindowMs)) this.pushTxn({ ++ start: range.start, ++ end: range.end ++ }); ++ this.typingRun = typing ? { ++ end: range.start + 1, ++ at ++ } : void 0; ++ this.reconcile(range); ++ this.adopt(draft); ++ this.watchClaim(); ++ this.paste = void 0; ++ return []; ++ } ++ /** Span CAS: revision equality (content identity follows) plus bounds sanity. */ ++ casOk(span) { ++ return span.draftRev === this.draftRev && span.start >= 0 && span.start <= span.end && span.end <= this.draft.length; ++ } ++ onBeginCommand(claim, span) { ++ if (this.phase !== "plain" && this.phase !== "claimed") return []; ++ if (!this.casOk(span) || this.draft.slice(0, span.start).trim() !== "") return []; ++ this.pushTxn(); ++ this.typingRun = void 0; ++ this.reconcile({ ++ start: 0, ++ end: span.end, ++ insertedLength: claim.token.length ++ }); ++ this.adopt(claim.token + this.draft.slice(span.end)); ++ this.claim = claim; ++ this.phase = "claimed"; ++ this.paste = void 0; ++ return []; ++ } ++ onInsertRef(reference, span) { ++ if (this.phase !== "plain" && this.phase !== "claimed") return []; ++ if (!this.casOk(span)) return []; ++ this.replaceSpanWithChip(reference, span); ++ this.paste = void 0; ++ return []; ++ } ++ /** ++ * Shared reference-insertion transaction: replace [span) with one inline ++ * occurrence (insert-ref and paste-upgrade both land here). A separating ++ * space follows the reference unless one is already next. ++ * @returns the inserted length (display text plus optional gap). ++ */ ++ replaceSpanWithChip(reference, span) { ++ this.pushTxn(); ++ this.typingRun = void 0; ++ const tail = this.draft.slice(span.end); ++ const gap = tail.length === 0 || tail[0] !== " " ? " " : ""; ++ const displayText = referenceDraftText(reference); ++ const inserted = displayText + gap; ++ this.reconcile({ ++ start: span.start, ++ end: span.end, ++ insertedLength: inserted.length ++ }); ++ this.withMinted([this.mint(reference, span.start, displayText.length)]); ++ this.adopt(this.draft.slice(0, span.start) + inserted + tail); ++ this.watchClaim(); ++ return inserted.length; ++ } ++ /** ++ * Guarded token deletion after business success (popup settle / menu-pick ++ * execute). No effect signals success: the caller reads the draftRev ++ * advance off the published state (same currency as the other bail verbs). ++ */ ++ onConsumeToken(guard) { ++ if (this.phase !== "plain" && this.phase !== "claimed") return []; ++ switch (guard.kind) { ++ case "span": { ++ const span = guard.span; ++ if (!this.casOk(span) || span.start === span.end) return []; ++ this.pushTxn(); ++ this.typingRun = void 0; ++ this.reconcile({ ++ start: span.start, ++ end: span.end, ++ insertedLength: 0 ++ }); ++ this.adopt(this.draft.slice(0, span.start) + this.draft.slice(span.end)); ++ this.watchClaim(); ++ this.paste = void 0; ++ return []; ++ } ++ case "bare-token": ++ if (guard.token === "" || this.draft.trim() !== guard.token) return []; ++ this.pushTxn(); ++ this.typingRun = void 0; ++ this.occurrences = []; ++ this.adopt(""); ++ this.watchClaim(); ++ this.paste = void 0; ++ return []; ++ default: return unreachable(guard); ++ } ++ } ++ /** ++ * Owner-resolution style bits: exactly the listed occurrences render ++ * invalid. Not a transaction — the draft, revision, and undo log are ++ * untouched (invalidation never deletes or rewrites chips). ++ */ ++ onSetInvalid(invalidIds) { ++ const ids = new Set(invalidIds); ++ if (!this.occurrences.some((o) => o.invalid === true !== ids.has(o.occurrenceId))) return []; ++ this.occurrences = this.occurrences.map((o) => { ++ const invalid = ids.has(o.occurrenceId); ++ if (o.invalid === true === invalid) return o; ++ const { invalid: _drop, ...rest } = o; ++ return invalid ? { ++ ...rest, ++ invalid: true ++ } : rest; ++ }); ++ return []; ++ } ++ onUndo() { ++ const entry = this.log.pop(); ++ if (entry === void 0) return []; ++ this.redoStack.push({ ++ draftBefore: this.draft, ++ occurrencesBefore: this.occurrences ++ }); ++ this.occurrences = entry.occurrencesBefore; ++ this.adopt(entry.draftBefore); ++ this.watchClaim(); ++ this.typingRun = void 0; ++ this.paste = void 0; ++ return []; ++ } ++ onRedo() { ++ const entry = this.redoStack.pop(); ++ if (entry === void 0) return []; ++ this.log.push({ ++ draftBefore: this.draft, ++ occurrencesBefore: this.occurrences ++ }); ++ if (this.log.length > LOG_LIMIT) this.log.shift(); ++ this.occurrences = entry.occurrencesBefore; ++ this.adopt(entry.draftBefore); ++ this.watchClaim(); ++ this.typingRun = void 0; ++ this.paste = void 0; ++ return []; ++ } ++ /** ++ * Paste as one transaction: the text (reference-placeholder-sanitized) replaces the ++ * selection; hot-snapshot sync matches componentize inside the SAME ++ * transaction (one undo returns to pre-paste); a match attempt opens for ++ * the async remainder while the phase still accepts reference mutations. ++ */ ++ onPasteBegin(rawText, selection, components = [], generation = 0) { ++ const { start, end } = selection; ++ if (start < 0 || start > end || end > this.draft.length) return []; ++ const text = rawText.replace(REFERENCE_PLACEHOLDER_RE, ""); ++ this.pushTxn(selection); ++ this.typingRun = void 0; ++ const sorted = [...components].sort((a, b) => a.start - b.start); ++ const minted = []; ++ let inserted = ""; ++ let cursor = 0; ++ for (const c of sorted) { ++ inserted += text.slice(cursor, c.start); ++ const displayText = referenceDraftText(c.reference); ++ minted.push(this.mint(c.reference, start + inserted.length, displayText.length)); ++ inserted += displayText; ++ cursor = c.end; ++ } ++ inserted += text.slice(cursor); ++ this.reconcile({ ++ start, ++ end, ++ insertedLength: inserted.length ++ }); ++ this.withMinted(minted); ++ this.adopt(this.draft.slice(0, start) + inserted + this.draft.slice(end)); ++ this.watchClaim(); ++ if (this.phase === "plain" || this.phase === "claimed") { ++ this.pasteSeq += 1; ++ this.paste = { ++ attemptId: this.pasteSeq, ++ insertedRange: { ++ start, ++ end: start + inserted.length ++ }, ++ generation ++ }; ++ } else this.paste = void 0; ++ return []; ++ } ++ /** ++ * Async match landed: upgrade one pasted token to a chip as an INDEPENDENT ++ * transaction (undo #1 → the token text, undo #2 → pre-paste). The attempt ++ * stays current — later tokens re-CAS against the advanced draftRev. ++ */ ++ onPasteUpgrade(attemptId, span, reference) { ++ const attempt = this.paste; ++ if (attempt === void 0 || attempt.attemptId !== attemptId) return []; ++ if (this.phase !== "plain" && this.phase !== "claimed") return []; ++ if (!this.casOk(span) || span.start === span.end) return []; ++ const insertedLength = this.replaceSpanWithChip(reference, span); ++ this.paste = { ++ ...attempt, ++ insertedRange: { ++ start: attempt.insertedRange.start, ++ end: attempt.insertedRange.end + insertedLength - (span.end - span.start) ++ } ++ }; ++ return []; ++ } ++ /** Mint the next SubmitAttempt and take the in-flight slot. */ ++ beginAttempt(mode) { ++ const controller = new AbortController(); ++ this.seq += 1; ++ const attempt = { ++ seq: this.seq, ++ signal: controller.signal, ++ draftSnapshot: this.draft, ++ mode ++ }; ++ this.inflight = { ++ attempt, ++ controller ++ }; ++ return attempt; ++ } ++ onEnter(mode) { ++ if (this.phase === "adjudicating" || this.phase === "submitting") return []; ++ if (this.phase === "claimed" && this.claim !== void 0) { ++ const attempt = this.beginAttempt(mode); ++ this.phase = "submitting"; ++ this.paste = void 0; ++ return [{ ++ type: "begin-submit", ++ attempt, ++ claim: this.claim, ++ args: argsAfter(this.draft, this.claim.token) ++ }]; ++ } ++ const trimmed = this.draft.trim(); ++ if (trimmed === "") return []; ++ this.paste = void 0; ++ if (trimmed.startsWith("/")) { ++ const attempt = this.beginAttempt(mode); ++ this.phase = "adjudicating"; ++ return [{ ++ type: "adjudicate", ++ attempt, ++ draft: this.draft ++ }]; ++ } ++ const attempt = this.beginAttempt(mode); ++ this.phase = "submitting"; ++ return [{ ++ type: "default-sink", ++ attempt, ++ draft: this.draft, ++ mode ++ }]; ++ } ++ onAdjudicated(attempt, outcome) { ++ const flight = this.inflight; ++ if (this.phase !== "adjudicating" || flight === void 0 || flight.attempt.seq !== attempt.seq) return []; ++ if (outcome !== void 0 && outcome !== "handled" && "claim" in outcome) { ++ this.claim = outcome.claim; ++ this.phase = "submitting"; ++ return [{ ++ type: "begin-submit", ++ attempt, ++ claim: outcome.claim, ++ args: argsAfter(attempt.draftSnapshot, outcome.claim.token) ++ }]; ++ } ++ if (outcome === void 0) { ++ this.phase = "submitting"; ++ return [{ ++ type: "default-sink", ++ attempt, ++ draft: attempt.draftSnapshot, ++ mode: attempt.mode ++ }]; ++ } ++ this.inflight = void 0; ++ this.phase = "plain"; ++ return []; ++ } ++ onAdjudicationFailed(attempt, message) { ++ if (this.phase !== "adjudicating" || this.inflight?.attempt.seq !== attempt.seq) return []; ++ this.inflight = void 0; ++ this.phase = "plain"; ++ return [{ ++ type: "notice", ++ level: "error", ++ text: message ++ }]; ++ } ++ onSubmitSettled(ev) { ++ const flight = this.inflight; ++ if (this.phase !== "submitting" || flight === void 0 || flight.attempt.seq !== ev.attempt.seq) return []; ++ this.inflight = void 0; ++ if (ev.ok) { ++ this.phase = "plain"; ++ this.claim = void 0; ++ this.occurrences = []; ++ const snapshot = flight.attempt.draftSnapshot; ++ this.adopt(this.draft !== snapshot && this.draft.startsWith(snapshot) ? this.draft.slice(snapshot.length) : ""); ++ this.log = []; ++ this.redoStack = []; ++ this.typingRun = void 0; ++ this.paste = void 0; ++ return ev.outcome?.text !== void 0 ? [{ ++ type: "notice", ++ level: ev.outcome.kind === "error" ? "error" : "info", ++ text: ev.outcome.text ++ }] : []; ++ } ++ const text = ev.message ?? ev.outcome?.text; ++ if (this.draft === flight.attempt.draftSnapshot && this.claim !== void 0 && this.draft.startsWith(this.claim.token)) { ++ this.phase = "claimed"; ++ return text === void 0 ? [] : [{ ++ type: "notice", ++ level: "error", ++ text ++ }]; ++ } ++ this.phase = "plain"; ++ this.claim = void 0; ++ return text === void 0 ? [] : [{ ++ type: "notice", ++ level: "error", ++ text ++ }]; ++ } ++ /** Cut undo state after an accepted image-only send. */ ++ onSendCommitted() { ++ if (this.phase !== "plain") return []; ++ this.claim = void 0; ++ this.occurrences = []; ++ this.adopt(""); ++ this.log = []; ++ this.redoStack = []; ++ this.typingRun = void 0; ++ this.paste = void 0; ++ return []; ++ } ++ onRelease() { ++ if (this.inflight !== void 0) { ++ this.inflight.controller.abort(); ++ this.inflight = void 0; ++ } ++ this.phase = "plain"; ++ this.claim = void 0; ++ this.typingRun = void 0; ++ this.paste = void 0; ++ return []; ++ } ++ }; ++ //#endregion ++ //#region lib/types/client/input/facade.js ++ /** Guard tier from the machine phase. */ ++ function guardOf(phase) { ++ switch (phase) { ++ case "plain": return "plain"; ++ case "claimed": return "claimed"; ++ default: return "frozen"; ++ } ++ } ++ const EMPTY_QUEUE = []; ++ /** No-pipeline lexicon: zero text-ref decorations. */ ++ const EMPTY_LEXICON$2 = /* @__PURE__ */ new Map(); ++ /** ++ * The per-session input facade: scoped-event application verbs + ++ * setDraft/submit + the published InputState store. ++ */ ++ var SessionInputShell = class { ++ deps; ++ /** Published machine state + queue overlay (the InputZone currency source). */ ++ state; ++ /** Latest surfaced notice (null after clear); the bar renders errors as banners and information inline. */ ++ notices = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(null); ++ /** The public provide-channel action face (one stable identity per session). */ ++ actions = { ++ setDraft: (text) => { ++ this.setDraft(text); ++ }, ++ addImages: (ids) => this.addImages(ids), ++ removeImage: (id) => { ++ this.removeImage(id); ++ }, ++ pruneImages: (ids) => { ++ this.pruneImages(ids); ++ }, ++ submit: () => { ++ this.submit("queue"); ++ } ++ }; ++ core = new InputMachine({ now: () => Date.now() }); ++ noticeSeq = 0; ++ lastMirroredDraft = ""; ++ imageIds = []; ++ /** One image-only send at a time: Enter during the Host round-trip is a no-op. */ ++ imageSendInFlight = false; ++ disposed = false; ++ /** Draft persistence mirror (chat store write; receives the clipboard projection, never display-only ranges). */ ++ mirrorFn; ++ constructor(deps) { ++ this.deps = deps; ++ this.state = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(this.compose()); ++ deps.queue?.subscribe(() => { ++ this.publish(); ++ }); ++ } ++ /** ++ * Single draft write path (all mutation rides machine events). ++ * @param text - the full next draft. ++ * @param editRange - the DOM-observed edit shape, when the caller knows it ++ * (narrows the machine's occurrence math; absent → diff scan). ++ */ ++ setDraft(text, editRange) { ++ this.run(this.core.dispatch({ ++ type: "draft-changed", ++ draft: text, ++ ...editRange !== void 0 ? { editRange } : {} ++ })); ++ } ++ /** Append ordered image ids unless an admission transaction is locked. */ ++ addImages(ids) { ++ if (this.snapshot.phase === "adjudicating" || this.snapshot.phase === "submitting") return false; ++ if (ids.length === 0) return true; ++ this.imageIds = [...this.imageIds, ...ids]; ++ this.publish(); ++ return true; ++ } ++ /** ++ * Remove one image id from this draft. Busy admission phases refuse, like ++ * {@link addImages}: a removal landing while a command submit serializes ++ * would otherwise vanish from the rail yet still ride the in-flight send. ++ */ ++ removeImage(id) { ++ if (this.snapshot.phase === "adjudicating" || this.snapshot.phase === "submitting") return; ++ const next = this.imageIds.filter((candidate) => candidate !== id); ++ if (next.length === this.imageIds.length) return; ++ this.imageIds = next; ++ this.publish(); ++ } ++ /** ++ * Keep only image ids that still resolve in the browser attachment registry. ++ * @param available - live registry ids. ++ */ ++ pruneImages(available) { ++ const keep = new Set(available); ++ const next = this.imageIds.filter((id) => keep.has(id)); ++ if (next.length === this.imageIds.length) return; ++ this.imageIds = next; ++ this.publish(); ++ } ++ /** ++ * Clear the draft as a successful-send commit: no undo unit is recorded and ++ * the undo history is cut, so Ctrl/Cmd-Z cannot resurrect sent content ++ * (the command path gets the same discipline from submit-settled success). ++ * @param imageIds - admitted image ids to remove from this draft. ++ */ ++ commitSend(imageIds) { ++ const submitted = new Set(imageIds); ++ this.imageIds = this.imageIds.filter((id) => !submitted.has(id)); ++ this.run(this.core.dispatch({ type: "send-committed" })); ++ } ++ /** Undo the latest transaction (InputBar intercepts the platform chord). */ ++ undo() { ++ this.run(this.core.dispatch({ type: "undo" })); ++ } ++ /** Redo the latest undone transaction. */ ++ redo() { ++ this.run(this.core.dispatch({ type: "redo" })); ++ } ++ /** ++ * Paste text over the selection in one transaction, with any hot-snapshot ++ * sync matches componentized inside it. ++ * @param text - pasted plain text. ++ * @param selection - replaced selection in draft coordinates. ++ * @param components - sync-matched reference components (disjoint, inside `text`). ++ * @param generation - projection generation for late async-upgrade guards. ++ */ ++ pasteBegin(text, selection, components, generation) { ++ this.run(this.core.dispatch({ ++ type: "paste-begin", ++ text, ++ selection, ++ ...components !== void 0 ? { components } : {}, ++ ...generation !== void 0 ? { generation } : {} ++ })); ++ } ++ /** End the live paste-match attempt (caret/selection ops and Slash updates the machine cannot see). */ ++ invalidatePaste() { ++ this.run(this.core.dispatch({ type: "invalidate-paste" })); ++ } ++ /** ++ * Enter adjudication + submit transaction + default sink. Effects fan out ++ * from the machine; this method only feeds the event. Lock entry ++ * (adjudicating/submitting) force-closes the transient layers: the popup ++ * dismisses and the menu tracks frozen. ++ */ ++ submit(mode = "queue") { ++ if (this.snapshot.draft.trim() === "" && this.imageIds.length > 0) { ++ if (this.snapshot.phase === "plain" && !this.imageSendInFlight) { ++ const imageIds = [...this.imageIds]; ++ this.imageSendInFlight = true; ++ this.deps.defaultSink("", imageIds, mode, new AbortController().signal).then((outcome) => { ++ this.imageSendInFlight = false; ++ if (this.disposed) return; ++ if (outcome.kind === "success") this.commitSend(imageIds); ++ else if (outcome.text !== void 0) this.notify("error", outcome.text); ++ }, (error) => { ++ this.imageSendInFlight = false; ++ if (!this.disposed) this.notify("error", error instanceof Error ? error.message : String(error)); ++ }); ++ } ++ return; ++ } ++ const before = this.snapshot; ++ if (before.phase === "claimed" && this.imageIds.length > 0 && before.claim?.images !== true) { ++ this.notify("error", this.deps.commandImages.unsupportedNotice(before.claim?.token ?? before.draft)); ++ return; ++ } ++ this.run(this.core.dispatch({ ++ type: "enter", ++ mode ++ })); ++ const phase = this.snapshot.phase; ++ if (phase === "adjudicating" || phase === "submitting") { ++ this.deps.popup?.()?.dismiss(); ++ this.deps.inputTriggers?.()?.track(this.snapshot.draft, 0, { tier: "frozen" }, this.snapshot.draftRev); ++ } ++ } ++ /** ++ * Feed a draft/caret change through trigger detection (guard derived from ++ * the machine phase). ++ * @param draft - live draft text. ++ * @param caret - caret position in draft coordinates. ++ */ ++ track(draft, caret) { ++ this.deps.inputTriggers?.()?.track(draft, caret, { tier: guardOf(this.snapshot.phase) }, this.snapshot.draftRev); ++ } ++ /** ++ * Keyboard arbitration while the menu is open. ++ * @param key - the intercepted key. ++ * @param composing - IME composition guard state. ++ * @returns the menu's verdict; 'pass' when no pipeline is mounted. ++ */ ++ arbitrate(key, composing) { ++ return this.deps.inputTriggers?.()?.arbitrate(key, composing) ?? "pass"; ++ } ++ /** ++ * Steer every still-pending queued message into the running turn (the ++ * empty-draft accelerated-Enter gesture). Execution belongs to the hub's ++ * queue choreography; absent dep = the gesture falls back to the machine's ++ * empty-draft no-op. ++ */ ++ steerQueue() { ++ this.deps.steerQueue?.(); ++ } ++ /** ++ * Space adjudication over the controller's hot state. ++ * @returns true = a claim/insert was applied — the caller preventDefaults. ++ */ ++ space() { ++ const inputTriggers = this.deps.inputTriggers?.(); ++ if (inputTriggers === void 0) return false; ++ const consumed = inputTriggers.onSpace(); ++ if (consumed) { ++ const next = this.snapshot; ++ inputTriggers.track(next.draft, next.draft.length, { tier: guardOf(next.phase) }, next.draftRev); ++ } ++ return consumed; ++ } ++ /** Dismiss the popupSelect shell (any interaction outside the box). */ ++ dismissPopup() { ++ this.deps.popup?.()?.dismiss(); ++ } ++ /** ++ * Hot plain-text reference lexicon source for the decoration scan ++ * (the plain-text-reference decision; ++ * see .agents/notes/implemented/architecture/2026-07-25-web-input-machine-and-slash-pipeline.md): ++ * delegates to the controller's aggregated store. Stable ++ * identity per shell; without a pipeline the snapshot is the empty Map and ++ * subscribers never fire. ++ */ ++ lexicon = { ++ getSnapshot: () => this.deps.inputTriggers?.()?.lexicon.getSnapshot() ?? EMPTY_LEXICON$2, ++ subscribe: (fn) => this.deps.inputTriggers?.()?.lexicon.subscribe(fn) ?? (() => {}) ++ }; ++ /** ++ * Apply one command claim (scoped begin-command event listener body). ++ * @param claim - the command claim from the pick path. ++ * @param span - pick-time span snapshot. ++ * @returns whether the machine accepted (phase + span CAS passed and the draft mutated). ++ */ ++ beginCommand(claim, span) { ++ const before = this.core.state.draftRev; ++ this.run(this.core.dispatch({ ++ type: "begin-command", ++ claim, ++ span ++ })); ++ return this.core.state.phase === "claimed" && this.core.state.draftRev !== before; ++ } ++ /** ++ * Apply one reference insertion (scoped insert-reference event listener body). ++ * @param ref - the reference insertion from the pick path. ++ * @param span - pick-time span snapshot. ++ * @returns whether the machine accepted. ++ */ ++ insertReference(ref, span) { ++ const before = this.core.state.draftRev; ++ this.run(this.core.dispatch({ ++ type: "insert-ref", ++ reference: ref, ++ span ++ })); ++ return this.core.state.draftRev !== before; ++ } ++ /** ++ * Consume one command token after business success (scoped consume-token ++ * event listener body). Span guard: revision CAS then splice; bare-token ++ * guard: trimmed-draft equality then clear. ++ * @param guard - exact span or bare-token guard. ++ * @returns whether the token was consumed. ++ */ ++ consumeToken(guard) { ++ const snapshot = this.core.state; ++ if (guard.kind === "span") { ++ if (guard.span.draftRev !== snapshot.draftRev) return false; ++ const draft = snapshot.draft; ++ this.setDraft(draft.slice(0, guard.span.start) + draft.slice(guard.span.end)); ++ return true; ++ } ++ if (snapshot.draft.trim() !== guard.token) return false; ++ this.setDraft(""); ++ return true; ++ } ++ /** ++ * Insert plain reference text over the pick-time span (scoped insert-text ++ * event listener body; plain-text-reference decision, web-input-machine ++ * note). Same CAS-then-splice shape as the ++ * consume-token span branch: the machine sees an ordinary draft-changed ++ * transaction (one undo step), no occurrence is minted — the chip look is ++ * a scan-derived decoration, never state. ++ * @param text - the plain reference text to splice in (e.g. `/name `). ++ * @param span - pick-time span snapshot (draftRev CAS). ++ * @param keepCompleting - re-track at the caret after the splice so an open ++ * token (a directory pick's trailing slash) reopens the menu. ++ * @returns whether the text was applied. ++ */ ++ insertText(text, span, keepCompleting = false) { ++ const snapshot = this.core.state; ++ if (span.draftRev !== snapshot.draftRev) return false; ++ const draft = snapshot.draft; ++ this.setDraft(draft.slice(0, span.start) + text + draft.slice(span.end)); ++ if (keepCompleting) { ++ const next = this.snapshot; ++ this.deps.inputTriggers?.()?.track(next.draft, span.start + text.length, { tier: guardOf(next.phase) }, next.draftRev); ++ } ++ return true; ++ } ++ /** ++ * Surface a notice from outside the machine (detached command results). ++ * @param level - severity tier. ++ * @param text - notice body. ++ */ ++ notify(level, text) { ++ this.noticeSeq += 1; ++ this.notices.set({ ++ level, ++ text, ++ seq: this.noticeSeq ++ }); ++ } ++ /** Teardown: abort any in-flight attempt and stop accepting async settlements. */ ++ dispose() { ++ this.disposed = true; ++ this.run(this.core.dispatch({ type: "release" })); ++ } ++ /** Read the live machine state (guard derivation reads here). */ ++ get snapshot() { ++ return this.state.getSnapshot(); ++ } ++ /** ++ * Bind the draft persistence mirror (chat store write). Adopt-on-bind: the ++ * store draft may hold a persisted value from a previous mount; the caller ++ * seeds it via setDraft BEFORE binding, and afterwards every machine-adopted ++ * draft mirrors out. ++ * @param write - store draft write. ++ * @returns the unbind disposer. ++ */ ++ bindMirror(write) { ++ this.mirrorFn = write; ++ return () => { ++ if (this.mirrorFn === write) this.mirrorFn = void 0; ++ }; ++ } ++ run(effects) { ++ for (const fx of effects) this.execute(fx); ++ this.publish(); ++ } ++ execute(fx) { ++ switch (fx.type) { ++ case "notice": ++ this.noticeSeq += 1; ++ this.notices.set({ ++ level: fx.level, ++ text: fx.text, ++ seq: this.noticeSeq ++ }); ++ return; ++ case "adjudicate": ++ this.adjudicate(fx.attempt, fx.draft); ++ return; ++ case "begin-submit": ++ this.beginSubmit(fx.attempt, fx.claim, fx.args); ++ return; ++ case "default-sink": ++ this.sinkSerialized(fx.attempt, fx.draft, fx.mode); ++ return; ++ default: return; ++ } ++ } ++ /** ++ * Prompt serialization before the sink: expand each ++ * inline reference range to its owner's model form via the session controller's ++ * codec routing. Owner missing / serialize failure / disposal blocks the ++ * send — notice + draft and chips retained, never a silent downgrade to ++ * the clipboard text. Chip-free drafts skip the async detour. ++ */ ++ sinkSerialized(attempt, draft, mode) { ++ const imageIds = [...this.imageIds]; ++ const occurrences = this.core.state.occurrences; ++ if (occurrences.length === 0) { ++ this.settleSubmit(attempt, this.deps.defaultSink(draft.trim(), imageIds, mode, attempt.signal), imageIds); ++ return; ++ } ++ const inputTriggers = this.deps.inputTriggers?.(); ++ const controller = new AbortController(); ++ Promise.all(occurrences.map(async (o) => { ++ if (inputTriggers === void 0) throw new Error(`no serializer for reference source "${o.source}"`); ++ return { ++ offset: o.offset, ++ length: o.length, ++ text: await inputTriggers.serializeReference(o.source, o.ref, controller.signal) ++ }; ++ })).then((parts) => { ++ if (this.disposed) return; ++ let out = ""; ++ let cursor = 0; ++ for (const part of parts) { ++ out += draft.slice(cursor, part.offset) + part.text; ++ cursor = part.offset + part.length; ++ } ++ out += draft.slice(cursor); ++ this.settleSubmit(attempt, this.deps.defaultSink(out.trim(), imageIds, mode, attempt.signal), imageIds); ++ }, (error) => { ++ controller.abort(); ++ if (this.dead(attempt)) return; ++ const message = error instanceof Error ? error.message : String(error); ++ this.run(this.core.dispatch({ ++ type: "submit-settled", ++ attempt, ++ ok: false, ++ message ++ })); ++ }); ++ } ++ /** Settle one admission attempt; successful sends consume only their captured images. */ ++ settleSubmit(attempt, pending, imageIds = []) { ++ pending.then((outcome) => { ++ if (this.dead(attempt)) return; ++ if (outcome.kind === "success" && imageIds.length > 0) { ++ const submitted = new Set(imageIds); ++ this.imageIds = this.imageIds.filter((id) => !submitted.has(id)); ++ } ++ this.run(this.core.dispatch({ ++ type: "submit-settled", ++ attempt, ++ ok: outcome.kind === "success", ++ outcome ++ })); ++ }, (error) => { ++ if (this.dead(attempt)) return; ++ this.run(this.core.dispatch({ ++ type: "submit-settled", ++ attempt, ++ ok: false, ++ message: error instanceof Error ? error.message : String(error) ++ })); ++ }); ++ } ++ /** Enter adjudication: poll the session controller; failure = notice + draft retained (never a silent downgrade). */ ++ adjudicate(attempt, draft) { ++ const inputTriggers = this.deps.inputTriggers?.(); ++ if (inputTriggers === void 0) { ++ this.run(this.core.dispatch({ ++ type: "adjudicated", ++ attempt, ++ outcome: void 0 ++ })); ++ return; ++ } ++ inputTriggers.adjudicate(draft.trim(), attempt.signal, { images: this.imageIds.length }).then((outcome) => { ++ if (this.dead(attempt)) return; ++ this.run(this.core.dispatch({ ++ type: "adjudicated", ++ attempt, ++ outcome ++ })); ++ }, (error) => { ++ if (this.dead(attempt)) return; ++ const message = error instanceof Error ? error.message : String(error); ++ this.run(this.core.dispatch({ ++ type: "adjudication-failed", ++ attempt, ++ message ++ })); ++ }); ++ } ++ /** ++ * The submit transaction: claim.submit against the session scope; ok maps ++ * from the outcome kind. An accepting claim receives the serialized draft ++ * images, which are cleared and released only on a success outcome; a ++ * failure (serialize, transport, or handler error) keeps draft and images ++ * for correction. ++ */ ++ beginSubmit(attempt, claim, args) { ++ const imageIds = claim.images === true ? [...this.imageIds] : []; ++ Promise.resolve().then(async () => { ++ const images = imageIds.length > 0 ? await this.deps.commandImages.serialize(imageIds) : []; ++ if (this.dead(attempt)) return void 0; ++ return claim.submit(args, this.deps.actx, images); ++ }).then((outcome) => { ++ if (outcome === void 0 || this.dead(attempt)) return; ++ if (outcome.kind === "success" && imageIds.length > 0) { ++ const submitted = new Set(imageIds); ++ this.imageIds = this.imageIds.filter((id) => !submitted.has(id)); ++ this.deps.commandImages.release(imageIds); ++ } ++ this.run(this.core.dispatch({ ++ type: "submit-settled", ++ attempt, ++ ok: outcome.kind === "success", ++ outcome, ++ ...outcome.kind === "error" && outcome.text === void 0 ? { message: "command failed" } : {} ++ })); ++ }, (error) => { ++ if (this.dead(attempt)) return; ++ const message = error instanceof Error ? error.message : String(error); ++ this.run(this.core.dispatch({ ++ type: "submit-settled", ++ attempt, ++ ok: false, ++ message ++ })); ++ }); ++ } ++ /** Late-settlement guard: superseded attempts and disposed facades drop silently. */ ++ dead(attempt) { ++ return this.disposed || attempt.signal.aborted; ++ } ++ compose() { ++ return { ++ ...this.core.state, ++ imageIds: this.imageIds, ++ queue: this.deps.queue?.getSnapshot() ?? EMPTY_QUEUE ++ }; ++ } ++ publish() { ++ const next = this.compose(); ++ this.state.set(next); ++ const mirroredDraft = projectClipboard(next); ++ if (mirroredDraft !== this.lastMirroredDraft) { ++ this.lastMirroredDraft = mirroredDraft; ++ this.mirrorFn?.(mirroredDraft); ++ } ++ } ++ }; ++ //#endregion ++ //#region lib/types/client/input/hub.js ++ /** Session-addressed input facade registry (SessionInputResolver face + composer-layer extras). */ ++ var InputHub = class { ++ rootCtx; ++ t; ++ shells = /* @__PURE__ */ new Map(); ++ /** ++ * @param ctx - client root context (services resolved lazily per call — boot order stays free). ++ * @param t - conversation-namespace translate thunk (reads the active locale at call time). ++ */ ++ constructor(rootCtx, t) { ++ this.rootCtx = rootCtx; ++ this.t = t; ++ } ++ /** ++ * Resolve the facade for one session-scope ctx (SessionInputResolver face). ++ * @param actx - session-scope context. ++ * @returns the resident per-session facade. ++ */ ++ for(actx) { ++ const id = this.sessions().scopeOf(actx); ++ if (id === void 0) throw new Error("conversation.input.for requires a session scope"); ++ return this.shell(id); ++ } ++ /** ++ * Resident shell for one session binding — the provide-channel entry ++ * (called during scope materialization, BEFORE the scope record is ++ * queryable, hence binding-fed and hence the thunked slash/popup deps). ++ * Wires the scoped event listeners + teardown into the session scope. ++ * @param binding - session assembly handle. ++ * @returns the shell. ++ */ ++ shellFor(binding) { ++ const existing = this.shells.get(binding.sessionId); ++ if (existing !== void 0) return existing; ++ const { sessionId: id, session, ctx: actx } = binding; ++ const shell = new SessionInputShell({ ++ actx, ++ inputTriggers: () => this.controller(actx), ++ popup: () => this.popup(actx), ++ queue: queueReadFaceOf(session), ++ defaultSink: (text, imageIds, mode, signal) => this.sink(session, text, imageIds, mode, signal), ++ steerQueue: () => { ++ this.steerQueue(session, shell); ++ }, ++ commandImages: { ++ serialize: (ids) => this.conversation().serializeDraftImages(ids), ++ release: (ids) => { ++ const conversation = this.rootCtx.get("conversation"); ++ for (const imageId of ids) conversation?.releaseDraftImage(imageId); ++ }, ++ unsupportedNotice: (token) => this.t("command.imagesUnsupported", { command: token.trim().replace(/^\//u, "") }) ++ } ++ }); ++ this.shells.set(id, shell); ++ actx.effect(() => { ++ const offs = [ ++ actx.on("slash/input-begin-command", (req) => shell.beginCommand(req.claim, req.span) ? true : void 0), ++ actx.on("slash/input-insert-reference", (req) => shell.insertReference(req.reference, req.span) ? true : void 0), ++ actx.on("slash/input-consume-token", (req) => shell.consumeToken(req.guard) ? true : void 0), ++ actx.on("slash/input-insert-text", (req) => shell.insertText(req.text, req.span, req.continue === true) ? true : void 0) ++ ]; ++ return () => { ++ for (const off of offs) off(); ++ const drafts = shell.snapshot.imageIds; ++ shell.dispose(); ++ this.shells.delete(id); ++ const conversation = this.rootCtx.get("conversation"); ++ for (const imageId of drafts) conversation?.releaseDraftImage(imageId); ++ }; ++ }, "conversation.input: session shell"); ++ return shell; ++ } ++ /** ++ * Resident shell by session id (service-face path; the provide channel has ++ * normally created it already — this covers direct id-addressed access). ++ * @param id - session id. ++ * @returns the shell. ++ */ ++ shell(id) { ++ const existing = this.shells.get(id); ++ if (existing !== void 0) return existing; ++ const binding = this.sessions().binding(id); ++ if (binding === void 0) throw new Error(`conversation.input: session "${id}" resolved no binding`); ++ return this.shellFor(binding); ++ } ++ /** ++ * The InputBar-exclusive keyboard command face: the shell ++ * satisfies it structurally; package-internal — handed through the ++ * composer-bar entry's inject, never across a plugin boundary. ++ * @param id - session id. ++ * @returns the shell as the keyboard face. ++ */ ++ keyboard(id) { ++ return this.shell(id); ++ } ++ /** ++ * Resolve the optional slash controller for composer chrome that launches ++ * the shared candidate menu without typing a trigger. ++ * @param id - session id. ++ * @returns the resident controller, or undefined when ui-input-trigger is absent. ++ */ ++ inputTriggers(id) { ++ const actx = this.sessions().scope(id); ++ return actx === void 0 ? void 0 : this.controller(actx); ++ } ++ /** ++ * Default sink: optimistic clear + prompt. The session is always a real ++ * host entity (materialized when its workspace was picked), so there is ++ * exactly one path; a failed first prompt is an ordinary prompt failure ++ * (banner via promptError, draft restored only while untouched). ++ */ ++ sink(session, text, imageIds, mode, signal) { ++ if (text === "" && imageIds.length === 0) return Promise.resolve({ kind: "success" }); ++ return this.conversation().sendSession(session, text, imageIds, mode, signal); ++ } ++ /** ++ * Steer every still-pending queued message into the running turn, in FIFO ++ * order — the same strict-steer operation as the queue dock's per-row ++ * button. A turn closing mid-way (`steer-unavailable`) or a row already ++ * claimed by the agent (`queue-item-not-found`) converges silently, while a ++ * genuine failure surfaces as one composer notice. Repeated triggers ++ * (e.g. two rapid empty-draft chords) rely on that `queue-item-not-found` ++ * convergence: the snapshot may still list a row the host already steered, ++ * and the duplicate strict steer is a silent no-op. ++ * @param session - the addressed host session. ++ * @param shell - the resident shell (notice outlet). ++ */ ++ async steerQueue(session, shell) { ++ const queued = session.getSnapshot().queue.filter((item) => item.placement === "queued"); ++ if (queued.length === 0) return; ++ for (const item of queued) { ++ const result = await session.updateQueue(item.id, { kind: "steer" }); ++ if (result.ok) continue; ++ if (result.error.code === "steer-unavailable" || result.error.code === "queue-item-not-found") return; ++ shell.notify("error", this.t("queue.steerFailed")); ++ return; ++ } ++ } ++ controller(actx) { ++ return this.rootCtx.get("inputTriggers")?.sessionOf(actx); ++ } ++ popup(actx) { ++ return this.rootCtx.get("commandUi")?.popupFor(actx); ++ } ++ sessions() { ++ const sessions = this.rootCtx.get("sessions"); ++ if (sessions === void 0) throw new Error("conversation.input: sessions service unavailable"); ++ return sessions; ++ } ++ conversation() { ++ const conversation = this.rootCtx.get("conversation"); ++ if (conversation === void 0) throw new Error("conversation.input: conversation service unavailable"); ++ return conversation; ++ } ++ }; ++ //#endregion ++ //#region ../../../vendor/cosmokit/src/misc.ts ++ /** Return true when a value is `null` or `undefined`. */ ++ function isNullable(value) { ++ return value === null || value === void 0; ++ } ++ /** Return true for non-array object values. */ ++ function isPlainObject(data) { ++ return data && typeof data === "object" && !Array.isArray(data); ++ } ++ /** Filter object entries and return a new object. */ ++ function filterKeys(object, filter) { ++ return Object.fromEntries(Object.entries(object).filter(([key, value]) => filter(key, value))); ++ } ++ /** Map object values while preserving the original key set. */ ++ function mapValues(object, transform) { ++ return Object.fromEntries(Object.entries(object).map(([key, value]) => [key, transform(value, key)])); ++ } ++ /** Pick selected keys from an object, optionally including `undefined` values. */ ++ function pick(source, keys, forced) { ++ if (!keys) return { ...source }; ++ const result = {}; ++ for (const key of keys) if (forced || source[key] !== void 0) result[key] = source[key]; ++ return result; ++ } ++ //#endregion ++ //#region ../../../vendor/cosmokit/src/types.ts ++ /** Test values using `instanceof` with a `toStringTag` fallback. */ ++ function is(type, value) { ++ if (arguments.length === 1) return (value) => is(type, value); ++ return type in globalThis && value instanceof globalThis[type] || Object.prototype.toString.call(value).slice(8, -1) === type; ++ } ++ function isArrayBufferLike(value) { ++ return is("ArrayBuffer", value) || is("SharedArrayBuffer", value); ++ } ++ function isArrayBufferSource(value) { ++ return isArrayBufferLike(value) || ArrayBuffer.isView(value); ++ } ++ let Binary; ++ (function(_Binary) { ++ _Binary.is = isArrayBufferLike; ++ _Binary.isSource = isArrayBufferSource; ++ function fromSource(source) { ++ if (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength); ++ else return source; ++ } ++ _Binary.fromSource = fromSource; ++ function toBase64(source) { ++ source = fromSource(source); ++ if (typeof Buffer !== "undefined") return Buffer.from(source).toString("base64"); ++ let binary = ""; ++ const bytes = new Uint8Array(source); ++ for (let i = 0; i < bytes.byteLength; i++) binary += String.fromCharCode(bytes[i]); ++ return btoa(binary); ++ } ++ _Binary.toBase64 = toBase64; ++ function fromBase64(source) { ++ if (typeof Buffer !== "undefined") return fromSource(Buffer.from(source, "base64")); ++ return Uint8Array.from(atob(source), (c) => c.charCodeAt(0)); ++ } ++ _Binary.fromBase64 = fromBase64; ++ function toHex(source) { ++ source = fromSource(source); ++ if (typeof Buffer !== "undefined") return Buffer.from(source).toString("hex"); ++ return Array.from(new Uint8Array(source), (byte) => byte.toString(16).padStart(2, "0")).join(""); ++ } ++ _Binary.toHex = toHex; ++ function fromHex(source) { ++ if (typeof Buffer !== "undefined") return fromSource(Buffer.from(source, "hex")); ++ const hex = source.length % 2 === 0 ? source : source.slice(0, source.length - 1); ++ const buffer = []; ++ for (let i = 0; i < hex.length; i += 2) buffer.push(parseInt(`${hex[i]}${hex[i + 1]}`, 16)); ++ return Uint8Array.from(buffer).buffer; ++ } ++ _Binary.fromHex = fromHex; ++ })(Binary || (Binary = {})); ++ Binary.fromBase64; ++ Binary.toBase64; ++ Binary.fromHex; ++ Binary.toHex; ++ /** Deep-clone common JavaScript values while preserving prototypes and cycles. */ ++ function clone(source, refs = /* @__PURE__ */ new Map()) { ++ if (!source || typeof source !== "object") return source; ++ if (is("Date", source)) return new Date(source.valueOf()); ++ if (is("RegExp", source)) return new RegExp(source.source, source.flags); ++ if (isArrayBufferLike(source)) return source.slice(0); ++ if (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength); ++ const cached = refs.get(source); ++ if (cached) return cached; ++ if (Array.isArray(source)) { ++ const result = []; ++ refs.set(source, result); ++ source.forEach((value, index) => { ++ result[index] = Reflect.apply(clone, null, [value, refs]); ++ }); ++ return result; ++ } ++ const result = Object.create(Object.getPrototypeOf(source)); ++ refs.set(source, result); ++ for (const key of Reflect.ownKeys(source)) { ++ const descriptor = { ...Reflect.getOwnPropertyDescriptor(source, key) }; ++ if ("value" in descriptor) descriptor.value = Reflect.apply(clone, null, [descriptor.value, refs]); ++ Reflect.defineProperty(result, key, descriptor); ++ } ++ return result; ++ } ++ /** Deeply compare arrays, dates, regexps, buffers, and plain object fields. */ ++ function deepEqual(a, b, strict) { ++ if (a === b) return true; ++ if (!strict && isNullable(a) && isNullable(b)) return true; ++ if (typeof a !== typeof b) return false; ++ if (typeof a !== "object") return false; ++ if (!a || !b) return false; ++ function check(test, then) { ++ return test(a) ? test(b) ? then(a, b) : false : test(b) ? false : void 0; ++ } ++ return check(Array.isArray, (a, b) => a.length === b.length && a.every((item, index) => deepEqual(item, b[index]))) ?? check(is("Date"), (a, b) => a.valueOf() === b.valueOf()) ?? check(is("RegExp"), (a, b) => a.source === b.source && a.flags === b.flags) ?? check(isArrayBufferLike, (a, b) => { ++ if (a.byteLength !== b.byteLength) return false; ++ const viewA = new Uint8Array(a); ++ const viewB = new Uint8Array(b); ++ for (let i = 0; i < viewA.length; i++) if (viewA[i] !== viewB[i]) return false; ++ return true; ++ }) ?? Object.keys({ ++ ...a, ++ ...b ++ }).every((key) => deepEqual(a[key], b[key], strict)); ++ } ++ //#endregion ++ //#region ../../../vendor/cosmokit/src/time.ts ++ let Time; ++ (function(_Time) { ++ _Time.millisecond = 1; ++ const second = _Time.second = 1e3; ++ const minute = _Time.minute = second * 60; ++ const hour = _Time.hour = minute * 60; ++ const day = _Time.day = hour * 24; ++ const week = _Time.week = day * 7; ++ let timezoneOffset = (/* @__PURE__ */ new Date()).getTimezoneOffset(); ++ function setTimezoneOffset(offset) { ++ timezoneOffset = offset; ++ } ++ _Time.setTimezoneOffset = setTimezoneOffset; ++ function getTimezoneOffset() { ++ return timezoneOffset; ++ } ++ _Time.getTimezoneOffset = getTimezoneOffset; ++ function getDateNumber(date = /* @__PURE__ */ new Date(), offset) { ++ if (typeof date === "number") date = new Date(date); ++ if (offset === void 0) offset = timezoneOffset; ++ return Math.floor((date.valueOf() / minute - offset) / 1440); ++ } ++ _Time.getDateNumber = getDateNumber; ++ function fromDateNumber(value, offset) { ++ const date = new Date(value * day); ++ if (offset === void 0) offset = timezoneOffset; ++ return new Date(+date + offset * minute); ++ } ++ _Time.fromDateNumber = fromDateNumber; ++ const numeric = /\d+(?:\.\d+)?/.source; ++ const timeRegExp = new RegExp(`^${[ ++ "w(?:eek(?:s)?)?", ++ "d(?:ay(?:s)?)?", ++ "h(?:our(?:s)?)?", ++ "m(?:in(?:ute)?(?:s)?)?", ++ "s(?:ec(?:ond)?(?:s)?)?" ++ ].map((unit) => `(${numeric}${unit})?`).join("")}$`); ++ function parseTime(source) { ++ const capture = timeRegExp.exec(source); ++ if (!capture) return 0; ++ return (parseFloat(capture[1]) * week || 0) + (parseFloat(capture[2]) * day || 0) + (parseFloat(capture[3]) * hour || 0) + (parseFloat(capture[4]) * minute || 0) + (parseFloat(capture[5]) * second || 0); ++ } ++ _Time.parseTime = parseTime; ++ function parseDate(date) { ++ const parsed = parseTime(date); ++ if (parsed) date = Date.now() + parsed; ++ else if (/^\d{1,2}(:\d{1,2}){1,2}$/.test(date)) date = `${(/* @__PURE__ */ new Date()).toLocaleDateString()}-${date}`; ++ else if (/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test(date)) date = `${(/* @__PURE__ */ new Date()).getFullYear()}-${date}`; ++ return date ? new Date(date) : /* @__PURE__ */ new Date(); ++ } ++ _Time.parseDate = parseDate; ++ function format(ms) { ++ const abs = Math.abs(ms); ++ if (abs >= day - hour / 2) return Math.round(ms / day) + "d"; ++ else if (abs >= hour - minute / 2) return Math.round(ms / hour) + "h"; ++ else if (abs >= minute - second / 2) return Math.round(ms / minute) + "m"; ++ else if (abs >= second) return Math.round(ms / second) + "s"; ++ return ms + "ms"; ++ } ++ _Time.format = format; ++ function toDigits(source, length = 2) { ++ return source.toString().padStart(length, "0"); ++ } ++ _Time.toDigits = toDigits; ++ function template(template, time = /* @__PURE__ */ new Date()) { ++ return template.replace("yyyy", time.getFullYear().toString()).replace("yy", time.getFullYear().toString().slice(2)).replace("MM", toDigits(time.getMonth() + 1)).replace("dd", toDigits(time.getDate())).replace("hh", toDigits(time.getHours())).replace("mm", toDigits(time.getMinutes())).replace("ss", toDigits(time.getSeconds())).replace("SSS", toDigits(time.getMilliseconds(), 3)); ++ } ++ _Time.template = template; ++ })(Time || (Time = {})); ++ //#endregion ++ //#region ../../../vendor/schemastery/src/index.ts ++ const kSchema = Symbol.for("schemastery"); ++ const kValidationError = Symbol.for("ValidationError"); ++ globalThis.__schemastery_index__ ??= 0; ++ globalThis.__schemastery_refs__ = void 0; ++ var ValidationError = class extends TypeError { ++ options; ++ name = "ValidationError"; ++ constructor(message, options) { ++ let prefix = "$"; ++ for (const segment of options.path || []) if (typeof segment === "string") prefix += "." + segment; ++ else if (typeof segment === "number") prefix += "[" + segment + "]"; ++ else if (typeof segment === "symbol") prefix += `[Symbol(${segment.toString()})]`; ++ if (prefix.startsWith(".")) prefix = prefix.slice(1); ++ super((prefix === "$" ? "" : `${prefix} `) + message); ++ this.options = options; ++ } ++ static is(error) { ++ return !!error?.[kValidationError]; ++ } ++ }; ++ Object.defineProperty(ValidationError.prototype, kValidationError, { value: true }); ++ const Schema = function(options) { ++ const schema = function(data, options = {}) { ++ return Schema.resolve(data, schema, options)[0]; ++ }; ++ if (options.refs) { ++ const refs = mapValues(options.refs, (options) => new Schema(options)); ++ const getRef = (uid) => refs[uid]; ++ for (const key in refs) { ++ const options = refs[key]; ++ options.sKey = getRef(options.sKey); ++ options.inner = getRef(options.inner); ++ options.list = options.list && options.list.map(getRef); ++ options.dict = options.dict && mapValues(options.dict, getRef); ++ } ++ return refs[options.uid]; ++ } ++ Object.assign(schema, options); ++ if (typeof schema.callback === "string") try { ++ schema.callback = new Function("return " + schema.callback)(); ++ } catch {} ++ Object.defineProperty(schema, "uid", { value: globalThis.__schemastery_index__++ }); ++ Object.setPrototypeOf(schema, Schema.prototype); ++ schema.meta ||= {}; ++ schema.toString = schema.toString.bind(schema); ++ return schema; ++ }; ++ Schema.prototype = Object.create(Function.prototype); ++ Schema.prototype[kSchema] = true; ++ Object.defineProperty(Schema.prototype, "~standard", { get() { ++ return { ++ version: 1, ++ vendor: "schemastery", ++ validate: (value) => { ++ try { ++ return { value: Schema.resolve(value, this, {})[0] }; ++ } catch (error) { ++ if (ValidationError.is(error)) return { issues: [{ ++ message: error.message, ++ path: error.options.path ++ }] }; ++ throw error; ++ } ++ } ++ }; ++ } }); ++ Schema.ValidationError = ValidationError; ++ Schema.prototype.toJSON = function toJSON() { ++ if (globalThis.__schemastery_refs__) { ++ globalThis.__schemastery_refs__[this.uid] ??= JSON.parse(JSON.stringify({ ...this })); ++ return this.uid; ++ } ++ globalThis.__schemastery_refs__ = { [this.uid]: { ...this } }; ++ globalThis.__schemastery_refs__[this.uid] = JSON.parse(JSON.stringify({ ...this })); ++ const result = { ++ uid: this.uid, ++ refs: globalThis.__schemastery_refs__ ++ }; ++ globalThis.__schemastery_refs__ = void 0; ++ return result; ++ }; ++ Schema.prototype.set = function set(key, value) { ++ this.dict[key] = value; ++ return this; ++ }; ++ Schema.prototype.push = function push(value) { ++ this.list.push(value); ++ return this; ++ }; ++ function mergeDesc(original, messages) { ++ const result = typeof original === "string" ? { "": original } : { ...original }; ++ for (const locale in messages) { ++ const value = messages[locale]; ++ if (value?.$description || value?.$desc) result[locale] = value.$description || value.$desc; ++ else if (typeof value === "string") result[locale] = value; ++ } ++ return result; ++ } ++ function getInner(value) { ++ return value?.$value ?? value?.$inner; ++ } ++ function extractKeys(data) { ++ return filterKeys(data ?? {}, (key) => !key.startsWith("$")); ++ } ++ Schema.prototype.i18n = function i18n(messages) { ++ const schema = Schema(this); ++ const desc = mergeDesc(schema.meta.description, messages); ++ if (Object.keys(desc).length) schema.meta.description = desc; ++ if (schema.dict) schema.dict = mapValues(schema.dict, (inner, key) => { ++ return inner.i18n(mapValues(messages, (data) => getInner(data)?.[key] ?? data?.[key])); ++ }); ++ if (schema.list) schema.list = schema.list.map((inner, index) => { ++ return inner.i18n(mapValues(messages, (data = {}) => { ++ if (Array.isArray(getInner(data))) return getInner(data)[index]; ++ if (Array.isArray(data)) return data[index]; ++ return extractKeys(data); ++ })); ++ }); ++ if (schema.inner) schema.inner = schema.inner.i18n(mapValues(messages, (data) => { ++ if (getInner(data)) return getInner(data); ++ return extractKeys(data); ++ })); ++ if (schema.sKey) schema.sKey = schema.sKey.i18n(mapValues(messages, (data) => data?.$key)); ++ return schema; ++ }; ++ Schema.prototype.extra = function extra(key, value) { ++ const schema = Schema(this); ++ schema.meta = { ++ ...schema.meta, ++ [key]: value ++ }; ++ return schema; ++ }; ++ for (const key of [ ++ "required", ++ "disabled", ++ "collapse", ++ "hidden", ++ "loose" ++ ]) Object.assign(Schema.prototype, { [key](value = true) { ++ const schema = Schema(this); ++ schema.meta = { ++ ...schema.meta, ++ [key]: value ++ }; ++ return schema; ++ } }); ++ Schema.prototype.deprecated = function deprecated() { ++ const schema = Schema(this); ++ schema.meta.badges ||= []; ++ schema.meta.badges.push({ ++ text: "deprecated", ++ type: "danger" ++ }); ++ return schema; ++ }; ++ Schema.prototype.experimental = function experimental() { ++ const schema = Schema(this); ++ schema.meta.badges ||= []; ++ schema.meta.badges.push({ ++ text: "experimental", ++ type: "warning" ++ }); ++ return schema; ++ }; ++ Schema.prototype.pattern = function pattern(regexp) { ++ const schema = Schema(this); ++ const pattern = pick(regexp, ["source", "flags"]); ++ schema.meta = { ++ ...schema.meta, ++ pattern ++ }; ++ return schema; ++ }; ++ Schema.prototype.simplify = function simplify(value) { ++ if (deepEqual(value, this.meta.default, this.type === "dict")) return null; ++ if (isNullable(value)) return value; ++ if (this.type === "object" || this.type === "dict") { ++ const result = {}; ++ for (const key in value) { ++ const item = (this.type === "object" ? this.dict[key] : this.inner)?.simplify(value[key]); ++ if (this.type === "dict" || !isNullable(item)) result[key] = item; ++ } ++ if (deepEqual(result, this.meta.default, this.type === "dict")) return null; ++ return result; ++ } else if (this.type === "array" || this.type === "tuple") { ++ const result = []; ++ value.forEach((value, index) => { ++ const schema = this.type === "array" ? this.inner : this.list[index]; ++ const item = schema ? schema.simplify(value) : value; ++ result.push(item); ++ }); ++ return result; ++ } else if (this.type === "intersect") { ++ const result = {}; ++ for (const item of this.list) Object.assign(result, item.simplify(value)); ++ return result; ++ } else if (this.type === "union") for (const schema of this.list) try { ++ Schema.resolve(value, schema, {}); ++ return schema.simplify(value); ++ } catch {} ++ return value; ++ }; ++ Schema.prototype.toString = function toString(inline) { ++ return formatters[this.type]?.(this, inline) ?? `Schema<${this.type}>`; ++ }; ++ Schema.prototype.role = function role(role, extra) { ++ const schema = Schema(this); ++ schema.meta = { ++ ...schema.meta, ++ role, ++ extra ++ }; ++ return schema; ++ }; ++ for (const key of [ ++ "default", ++ "link", ++ "comment", ++ "description", ++ "max", ++ "min", ++ "step" ++ ]) Object.assign(Schema.prototype, { [key](value) { ++ const schema = Schema(this); ++ schema.meta = { ++ ...schema.meta, ++ [key]: value ++ }; ++ return schema; ++ } }); ++ const resolvers = {}; ++ Schema.extend = function extend(type, resolve) { ++ resolvers[type] = resolve; ++ }; ++ Schema.resolve = function resolve(data, schema, options = {}, strict = false) { ++ if (!schema) return [data]; ++ if (options.ignore?.(data, schema)) return [data]; ++ if (isNullable(data) && schema.type !== "lazy") { ++ if (schema.meta.required) throw new ValidationError(`missing required value`, options); ++ let current = schema; ++ let fallback = schema.meta.default; ++ while (current?.type === "intersect" && isNullable(fallback)) { ++ current = current.list[0]; ++ fallback = current?.meta.default; ++ } ++ if (isNullable(fallback)) return [data]; ++ data = clone(fallback); ++ } ++ const callback = resolvers[schema.type]; ++ if (!callback) throw new ValidationError(`unsupported type "${schema.type}"`, options); ++ try { ++ return callback(data, schema, options, strict); ++ } catch (error) { ++ if (!schema.meta.loose) throw error; ++ return [schema.meta.default]; ++ } ++ }; ++ Schema.from = function from(source) { ++ if (isNullable(source)) return Schema.any(); ++ else if ([ ++ "string", ++ "number", ++ "boolean" ++ ].includes(typeof source)) return Schema.const(source).required(); ++ else if (source[kSchema]) return source; ++ else if (typeof source === "function") switch (source) { ++ case String: return Schema.string().required(); ++ case Number: return Schema.number().required(); ++ case Boolean: return Schema.boolean().required(); ++ case Function: return Schema.function().required(); ++ default: return Schema.is(source).required(); ++ } ++ else throw new TypeError(`cannot infer schema from ${source}`); ++ }; ++ Schema.lazy = function lazy(builder) { ++ const toJSON = () => { ++ if (!schema.inner[kSchema]) { ++ schema.inner = schema.builder(); ++ schema.inner.meta = { ++ ...schema.meta, ++ ...schema.inner.meta ++ }; ++ } ++ return schema.inner.toJSON(); ++ }; ++ const schema = new Schema({ ++ type: "lazy", ++ builder, ++ inner: { toJSON } ++ }); ++ return schema; ++ }; ++ Schema.natural = function natural() { ++ return Schema.number().step(1).min(0); ++ }; ++ Schema.percent = function percent() { ++ return Schema.number().step(.01).min(0).max(1).role("slider"); ++ }; ++ Schema.date = function date() { ++ return Schema.union([Schema.is(Date), Schema.transform(Schema.string().role("datetime"), (value, options) => { ++ const date = new Date(value); ++ if (isNaN(+date)) throw new ValidationError(`invalid date "${value}"`, options); ++ return date; ++ }, true)]); ++ }; ++ Schema.regExp = function regExp(flag = "") { ++ return Schema.union([Schema.is(RegExp), Schema.transform(Schema.string().role("regexp", { flag }), (value, options) => { ++ try { ++ return new RegExp(value, flag); ++ } catch (e) { ++ throw new ValidationError(e.message, options); ++ } ++ }, true)]); ++ }; ++ Schema.arrayBuffer = function arrayBuffer(encoding) { ++ return Schema.union([ ++ Schema.is(ArrayBuffer), ++ Schema.is(SharedArrayBuffer), ++ Schema.transform(Schema.any(), (value, options) => { ++ if (Binary.isSource(value)) return Binary.fromSource(value); ++ throw new ValidationError(`expected ArrayBufferSource but got ${value}`, options); ++ }, true), ++ ...encoding ? [Schema.transform(Schema.string(), (value, options) => { ++ try { ++ return encoding === "base64" ? Binary.fromBase64(value) : Binary.fromHex(value); ++ } catch (e) { ++ throw new ValidationError(e.message, options); ++ } ++ }, true)] : [] ++ ]); ++ }; ++ Schema.extend("lazy", (data, schema, options, strict) => { ++ if (!schema.inner[kSchema]) { ++ schema.inner = schema.builder(); ++ schema.inner.meta = { ++ ...schema.meta, ++ ...schema.inner.meta ++ }; ++ } ++ return Schema.resolve(data, schema.inner, options, strict); ++ }); ++ Schema.extend("any", (data) => { ++ return [data]; ++ }); ++ Schema.extend("never", (data, _, options) => { ++ throw new ValidationError(`expected nullable but got ${data}`, options); ++ }); ++ Schema.extend("const", (data, { value }, options) => { ++ if (deepEqual(data, value)) return [value]; ++ throw new ValidationError(`expected ${value} but got ${data}`, options); ++ }); ++ function checkWithinRange(data, meta, description, options, skipMin = false) { ++ const { max = Infinity, min = -Infinity } = meta; ++ if (data > max) throw new ValidationError(`expected ${description} <= ${max} but got ${data}`, options); ++ if (data < min && !skipMin) throw new ValidationError(`expected ${description} >= ${min} but got ${data}`, options); ++ } ++ Schema.extend("string", (data, { meta }, options) => { ++ if (typeof data !== "string") throw new ValidationError(`expected string but got ${data}`, options); ++ if (meta.pattern) { ++ const regexp = new RegExp(meta.pattern.source, meta.pattern.flags); ++ if (!regexp.test(data)) throw new ValidationError(`expect string to match regexp ${regexp}`, options); ++ } ++ checkWithinRange(data.length, meta, "string length", options); ++ return [data]; ++ }); ++ function decimalShift(data, digits) { ++ const str = data.toString(); ++ if (str.includes("e")) return data * Math.pow(10, digits); ++ const index = str.indexOf("."); ++ if (index === -1) return data * Math.pow(10, digits); ++ const frac = str.slice(index + 1); ++ const integer = str.slice(0, index); ++ if (frac.length <= digits) return +(integer + frac.padEnd(digits, "0")); ++ return +(integer + frac.slice(0, digits) + "." + frac.slice(digits)); ++ } ++ function isMultipleOf(data, min, step) { ++ step = Math.abs(step); ++ if (!/^\d+\.\d+$/.test(step.toString())) return (data - min) % step === 0; ++ const index = step.toString().indexOf("."); ++ const digits = step.toString().slice(index + 1).length; ++ return Math.abs(decimalShift(data, digits) - decimalShift(min, digits)) % decimalShift(step, digits) === 0; ++ } ++ Schema.extend("number", (data, { meta }, options) => { ++ if (typeof data !== "number") throw new ValidationError(`expected number but got ${data}`, options); ++ checkWithinRange(data, meta, "number", options); ++ const { step } = meta; ++ if (step && !isMultipleOf(data, meta.min ?? 0, step)) throw new ValidationError(`expected number multiple of ${step} but got ${data}`, options); ++ return [data]; ++ }); ++ Schema.extend("boolean", (data, _, options) => { ++ if (typeof data === "boolean") return [data]; ++ throw new ValidationError(`expected boolean but got ${data}`, options); ++ }); ++ Schema.extend("bitset", (data, { bits, meta }, options) => { ++ let value = 0, keys = []; ++ if (typeof data === "number") { ++ value = data; ++ for (const key in bits) if (data & bits[key]) keys.push(key); ++ } else if (Array.isArray(data)) { ++ keys = data; ++ for (const key of keys) { ++ if (typeof key !== "string") throw new ValidationError(`expected string but got ${key}`, options); ++ if (key in bits) value |= bits[key]; ++ } ++ } else throw new ValidationError(`expected number or array but got ${data}`, options); ++ if (value === meta.default) return [value]; ++ return [value, keys]; ++ }); ++ Schema.extend("function", (data, _, options) => { ++ if (typeof data === "function") return [data]; ++ throw new ValidationError(`expected function but got ${data}`, options); ++ }); ++ Schema.extend("is", (data, { constructor }, options) => { ++ if (typeof constructor === "function") { ++ if (data instanceof constructor) return [data]; ++ throw new ValidationError(`expected ${constructor.name} but got ${data}`, options); ++ } else { ++ if (isNullable(data)) throw new ValidationError(`expected ${constructor} but got ${data}`, options); ++ let prototype = Object.getPrototypeOf(data); ++ while (prototype) { ++ if (prototype.constructor?.name === constructor) return [data]; ++ prototype = Object.getPrototypeOf(prototype); ++ } ++ throw new ValidationError(`expected ${constructor} but got ${data}`, options); ++ } ++ }); ++ function property(data, key, schema, options) { ++ try { ++ const [value, adapted] = Schema.resolve(data[key], schema, { ++ ...options, ++ path: [...options.path || [], key] ++ }); ++ if (adapted !== void 0) data[key] = adapted; ++ return value; ++ } catch (e) { ++ if (!options?.autofix) throw e; ++ delete data[key]; ++ return schema.meta.default; ++ } ++ } ++ Schema.extend("array", (data, { inner, meta }, options) => { ++ if (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options); ++ checkWithinRange(data.length, meta, "array length", options, !isNullable(inner.meta.default)); ++ return [data.map((_, index) => property(data, index, inner, options))]; ++ }); ++ Schema.extend("dict", (data, { inner, sKey }, options, strict) => { ++ if (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options); ++ const result = {}; ++ for (const key in data) { ++ let rKey; ++ try { ++ rKey = Schema.resolve(key, sKey, options)[0]; ++ } catch (error) { ++ if (strict) continue; ++ throw error; ++ } ++ result[rKey] = property(data, key, inner, options); ++ data[rKey] = data[key]; ++ if (key !== rKey) delete data[key]; ++ } ++ return [result]; ++ }); ++ Schema.extend("tuple", (data, { list }, options, strict) => { ++ if (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options); ++ const result = list.map((inner, index) => property(data, index, inner, options)); ++ if (strict) return [result]; ++ result.push(...data.slice(list.length)); ++ return [result]; ++ }); ++ function merge(result, data) { ++ for (const key in data) { ++ if (key in result) continue; ++ result[key] = data[key]; ++ } ++ } ++ Schema.extend("object", (data, { dict }, options, strict) => { ++ if (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options); ++ const result = {}; ++ for (const key in dict) { ++ const value = property(data, key, dict[key], options); ++ if (!isNullable(value) || key in data) result[key] = value; ++ } ++ if (!strict) merge(result, data); ++ return [result]; ++ }); ++ Schema.extend("union", (data, { list, toString }, options, strict) => { ++ const messages = []; ++ for (const inner of list) try { ++ return Schema.resolve(data, inner, options, strict); ++ } catch (error) { ++ messages.push(error); ++ } ++ throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options); ++ }); ++ Schema.extend("intersect", (data, { list, toString }, options, strict) => { ++ if (!list.length) return [data]; ++ let result; ++ for (const inner of list) { ++ const value = Schema.resolve(data, inner, options, true)[0]; ++ if (isNullable(value)) continue; ++ if (isNullable(result)) result = value; ++ else if (typeof result !== typeof value) throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options); ++ else if (typeof value === "object") merge(result ??= {}, value); ++ else if (result !== value) throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options); ++ } ++ if (!strict && isPlainObject(data)) merge(result, data); ++ return [result]; ++ }); ++ Schema.extend("transform", (data, { inner, callback, preserve }, options) => { ++ const [result, adapted = data] = Schema.resolve(data, inner, options, true); ++ if (preserve) return [callback(result)]; ++ else return [callback(result), callback(adapted)]; ++ }); ++ const formatters = {}; ++ function defineMethod(name, keys, format) { ++ formatters[name] = format; ++ Object.assign(Schema, { [name](...args) { ++ const schema = new Schema({ type: name }); ++ keys.forEach((key, index) => { ++ switch (key) { ++ case "sKey": ++ schema.sKey = args[index] ?? Schema.string(); ++ break; ++ case "inner": ++ schema.inner = Schema.from(args[index]); ++ break; ++ case "list": ++ schema.list = args[index].map(Schema.from); ++ break; ++ case "dict": ++ schema.dict = mapValues(args[index], Schema.from); ++ break; ++ case "bits": ++ schema.bits = {}; ++ for (const key in args[index]) { ++ if (typeof args[index][key] !== "number") continue; ++ schema.bits[key] = args[index][key]; ++ } ++ break; ++ case "callback": { ++ const callback = schema.callback = args[index]; ++ callback["toJSON"] ||= () => callback.toString(); ++ break; ++ } ++ case "constructor": { ++ const constructor = schema.constructor = args[index]; ++ if (typeof constructor === "function") constructor["toJSON"] ||= () => constructor["name"]; ++ break; ++ } ++ default: schema[key] = args[index]; ++ } ++ }); ++ if (name === "object" || name === "dict") schema.meta.default = {}; ++ else if (name === "array" || name === "tuple") schema.meta.default = []; ++ else if (name === "bitset") schema.meta.default = 0; ++ return schema; ++ } }); ++ } ++ defineMethod("is", ["constructor"], ({ constructor }) => { ++ if (typeof constructor === "function") return constructor.name; ++ else return constructor; ++ }); ++ defineMethod("any", [], () => "any"); ++ defineMethod("never", [], () => "never"); ++ defineMethod("const", ["value"], ({ value }) => typeof value === "string" ? JSON.stringify(value) : value); ++ defineMethod("string", [], () => "string"); ++ defineMethod("number", [], () => "number"); ++ defineMethod("boolean", [], () => "boolean"); ++ defineMethod("bitset", ["bits"], () => "bitset"); ++ defineMethod("function", [], () => "function"); ++ defineMethod("array", ["inner"], ({ inner }) => `${inner.toString(true)}[]`); ++ defineMethod("dict", ["inner", "sKey"], ({ inner, sKey }) => `{ [key: ${sKey.toString()}]: ${inner.toString()} }`); ++ defineMethod("tuple", ["list"], ({ list }) => `[${list.map((inner) => inner.toString()).join(", ")}]`); ++ defineMethod("object", ["dict"], ({ dict }) => { ++ if (Object.keys(dict).length === 0) return "{}"; ++ return `{ ${Object.entries(dict).map(([key, inner]) => { ++ return `${key}${inner.meta.required ? "" : "?"}: ${inner.toString()}`; ++ }).join(", ")} }`; ++ }); ++ defineMethod("union", ["list"], ({ list }, inline) => { ++ const result = list.map(({ toString: format }) => format()).join(" | "); ++ return inline ? `(${result})` : result; ++ }); ++ defineMethod("intersect", ["list"], ({ list }) => { ++ return `${list.map((inner) => inner.toString(true)).join(" & ")}`; ++ }); ++ defineMethod("transform", [ ++ "inner", ++ "callback", ++ "preserve" ++ ], ({ inner }, isInner) => inner.toString(isInner)); ++ //#endregion ++ //#region lib/types/submission-settings.js ++ /** Busy-Enter preference stored in the Host user-settings document. */ ++ /** Settings namespace owned by the conversation plugin. */ ++ const CONVERSATION_SETTINGS_NAMESPACE = "ui-conversation"; ++ /** Field carrying the delivery mode for plain Enter while an agent is busy. */ ++ const BUSY_ENTER_FIELD = "busyEnter"; ++ /** Busy-Enter behaviors accepted at settings and input boundaries. */ ++ const BUSY_ENTER_BEHAVIORS = ["queue", "steer"]; ++ /** Default preserves Enter-as-Queue for running conversations. */ ++ const DEFAULT_BUSY_ENTER_BEHAVIOR = "queue"; ++ Schema.object({ [BUSY_ENTER_FIELD]: Schema.union([...BUSY_ENTER_BEHAVIORS]).default(DEFAULT_BUSY_ENTER_BEHAVIOR) }); ++ //#endregion ++ //#region lib/types/client/input/submission-policy.js ++ /** ++ * Composer submission policy. It owns the live busy-Enter ++ * preference and resolves keyboard gestures into queue/steer delivery modes; ++ * Host and Agent keep the actual delivery-window authority. ++ */ ++ /** ++ * Busy-Enter policy used by both the composer inject face and its Settings row. ++ * Direct `steer` is intentionally best-effort: AgentLoop turns a closed-window ++ * submission into the next waking Queue item. ++ */ ++ var ComposerSubmissionPolicy = class { ++ /** Reactive preference source for the Settings row. */ ++ busyEnter = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(DEFAULT_BUSY_ENTER_BEHAVIOR); ++ host; ++ /** ++ * @param host - durable preference scope owned by the providing plugin; ++ * absent compositions stay process-local. The adoption subscription shares ++ * the scope's plugin lifetime — a disposed scope never publishes again, so ++ * the policy needs no release hook. ++ */ ++ constructor(host) { ++ this.host = host; ++ if (host !== void 0) { ++ host.subscribe(() => { ++ this.adopt(host); ++ }); ++ this.adopt(host); ++ } ++ } ++ /** ++ * Resolve one keyboard gesture without changing state. ++ * @param running - whether the addressed agent currently reports busy. ++ * @param gesture - plain Enter or the Cmd/Ctrl-accelerated chord. ++ * @param steeringAvailable - whether this session transport supports steering. ++ * @returns Queue outside steer-capable busy state; otherwise the preferred mode or its opposite. ++ */ ++ resolve(running, gesture, steeringAvailable) { ++ if (!running || !steeringAvailable) return "queue"; ++ const preferred = this.busyEnter.getSnapshot(); ++ if (gesture === "enter") return preferred; ++ return preferred === "queue" ? "steer" : "queue"; ++ } ++ /** ++ * Change the plain-Enter behavior used during busy state; the live value ++ * publishes before the durable write starts. ++ * @param behavior - Queue or Steer. ++ */ ++ setBusyEnter(behavior) { ++ if (this.busyEnter.getSnapshot() === behavior) return; ++ this.busyEnter.set(behavior); ++ this.host?.set(BUSY_ENTER_FIELD, behavior); ++ } ++ /** ++ * Adopt the scope's accepted durable behavior without writing it back. ++ * @param host - the constructor-narrowed scope driving this adoption. ++ */ ++ adopt(host) { ++ const section = host.getSnapshot().value; ++ if (section === void 0 || this.busyEnter.getSnapshot() === section.busyEnter) return; ++ this.busyEnter.set(section.busyEnter); ++ } ++ }; ++ //#endregion ++ //#region ../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs ++ function r(e) { ++ var t, f, n = ""; ++ if ("string" == typeof e || "number" == typeof e) n += e; ++ else if ("object" == typeof e) if (Array.isArray(e)) { ++ var o = e.length; ++ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); ++ } else for (f in e) e[f] && (n && (n += " "), n += f); ++ return n; ++ } ++ function clsx() { ++ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); ++ return n; ++ } ++ //#endregion ++ //#region lib/types/client/input/decorations.js ++ /** Token matcher: a trigger char at line start or after whitespace, then a word-ish name (never crosses \n). */ ++ const TEXT_REF_RE = /(^|\s)([/@])([\w-]+)/g; ++ const FOLDER_REF_RE = /(^|\s)(@(?:"[^"\n]*\/|[^\s"]+\/))/g; ++ /** ++ * Scan the draft for plain-text reference tokens against the hot lexicons. ++ * Word-boundary discipline: the trigger must sit at the draft ++ * start or after whitespace ('x/name' never matches); the name must be an ++ * exact lexicon member. ++ * @param draft - draft text. ++ * @param lexicon - per-trigger name lists (a missing trigger scans nothing). ++ * @returns matched ranges in draft order. ++ */ ++ function scanTextRefs(draft, lexicon) { ++ if (draft === "") return []; ++ const out = []; ++ if (lexicon.size > 0) { ++ TEXT_REF_RE.lastIndex = 0; ++ let m; ++ while ((m = TEXT_REF_RE.exec(draft)) !== null) { ++ const trigger = m[2]; ++ const name = m[3] ?? ""; ++ if (lexicon.get(trigger)?.includes(name)) { ++ const start = m.index + (m[1]?.length ?? 0); ++ out.push({ ++ start, ++ end: start + 1 + name.length, ++ trigger ++ }); ++ } ++ } ++ } ++ FOLDER_REF_RE.lastIndex = 0; ++ let folder; ++ while ((folder = FOLDER_REF_RE.exec(draft)) !== null) { ++ const token = folder[2] ?? ""; ++ const start = folder.index + (folder[1]?.length ?? 0); ++ const end = start + token.length; ++ if (!out.some((range) => range.start < end && range.end > start)) out.push({ ++ start, ++ end, ++ trigger: "@", ++ appearance: "folder" ++ }); ++ } ++ return out.sort((left, right) => left.start - right.start); ++ } ++ /** The empty lexicon (default: zero text-ref decorations, old call sites unchanged). */ ++ const EMPTY_LEXICON$1 = /* @__PURE__ */ new Map(); ++ /** ++ * Derive the mirror-layer decorations from the input state. ++ * @param state - published input state. ++ * @param lexicon - optional per-trigger reference lexicons (plain-text-reference scan). ++ * @returns token range, chip instructions, text-ref ranges, and the ghost hint. ++ */ ++ function deriveDecorations(state, lexicon = EMPTY_LEXICON$1) { ++ const { draft, claim, phase, occurrences } = state; ++ const claimActive = (phase === "claimed" || phase === "submitting") && claim !== void 0 && draft.startsWith(claim.token); ++ const token = claimActive ? { ++ start: 0, ++ end: claim.token.length ++ } : null; ++ const chips = occurrences.map((o) => ({ ++ occurrenceId: o.occurrenceId, ++ offset: o.offset, ++ length: o.length, ++ text: draft.slice(o.offset, o.offset + o.length), ++ label: o.label, ++ ...o.appearance === void 0 ? {} : { appearance: o.appearance }, ++ invalid: o.invalid === true ++ })); ++ const hint = claimActive && claim.hint !== void 0 && draft.slice(claim.token.length).trim() === "" ? claim.hint : null; ++ return { ++ token, ++ chips, ++ textRefs: scanTextRefs(draft, lexicon), ++ hint ++ }; ++ } ++ //#endregion ++ //#region lib/types/client/image-labels.js ++ /** Attachment error and limit copy owned by the conversation input flow. */ ++ /** ++ * Byte count as user-facing megabytes (`10MB`, `2.5MB`). ++ * @param bytes - the byte count. ++ * @returns the rounded megabyte text. ++ */ ++ function imageSizeText(bytes) { ++ const mb = bytes / (1024 * 1024); ++ return `${Number.isInteger(mb) ? String(mb) : mb.toFixed(1)}MB`; ++ } ++ /** ++ * Product copy for a host attachment rejection (the `attachment-error` ++ * `details.reason`). User-solvable reasons name the limit and the way out; ++ * reasons the user cannot act on fold into one send-failed line carrying the ++ * reason code for a bug report. ++ * @param t - the conversation-namespace translate. ++ * @param reason - the wire `details.reason` code. ++ * @param limits - projected limits interpolated into count/size copy, when known. ++ * @returns the banner text. ++ */ ++ function attachmentErrorText(t, reason, limits) { ++ switch (reason) { ++ case "MODEL_DOES_NOT_SUPPORT_IMAGES": return t("image.modelUnsupported"); ++ case "SUBAGENT_IMAGE_UNSUPPORTED": return t("image.subagentUnsupported"); ++ case "IMAGE_TOO_MANY_PIXELS": return t("image.tooManyPixels"); ++ case "IMAGE_DIMENSION_TOO_LARGE": ++ if (limits !== void 0) return t("image.dimensionTooLarge", { size: limits.maxImageDimension }); ++ break; ++ case "INVALID_IMAGE": ++ case "IMAGE_TYPE_MISMATCH": return t("image.unsupportedType"); ++ case "TOO_MANY_IMAGES": ++ if (limits !== void 0) return t("image.tooMany", { count: limits.maxImagesPerMessage }); ++ break; ++ case "IMAGE_TOO_LARGE": ++ if (limits !== void 0) return t("image.fileTooLarge", { size: imageSizeText(limits.maxImageBytes) }); ++ break; ++ case "IMAGES_TOO_LARGE": ++ if (limits !== void 0) return t("image.totalTooLarge", { size: imageSizeText(limits.maxMessageImageBytes) }); ++ break; ++ default: break; ++ } ++ return t("image.sendFailed", { reason }); ++ } ++ //#endregion ++ //#region lib/types/client/reference/ReferenceIcon.js ++ /** ++ * Render the icon that identifies one inline reference domain. ++ * @param props - Reference kind, optional size, and optional CSS class. ++ * @returns The corresponding current-color SVG glyph. ++ */ ++ function ReferenceIcon({ kind, size = 16, className }) { ++ switch (kind) { ++ case "session": return (0, react_jsx_runtime.jsx)("svg", { ++ width: size, ++ height: size, ++ className, ++ viewBox: "0 0 16 16", ++ fill: "none", ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)("path", { ++ d: "M8 0.597656C3.91296 0.597656 0.599716 3.91103 0.599609 7.99805C0.599609 9.13171 0.854567 10.2079 1.31152 11.1699L1.59277 11.7607L2.77441 11.1992L2.49414 10.6084L2.36035 10.3076C2.06865 9.59612 1.90723 8.81645 1.90723 7.99805C1.90733 4.63362 4.63554 1.90625 8 1.90625C11.3644 1.90635 14.0917 4.63368 14.0918 7.99805C14.0918 11.3625 11.3644 14.0907 8 14.0908C7.311 14.0908 6.80642 14.0414 6.35938 13.918C5.919 13.7963 5.50105 13.5929 5.00098 13.2441C4.26805 12.7329 3.21756 12.5526 2.35156 13.0996L2.33789 13.1084L2.32422 13.1182L1.74805 13.5234L2.18164 14.8184L3.05957 14.2002C3.37505 14.0068 3.84248 14.0319 4.25195 14.3174C4.84447 14.7307 5.39718 15.009 6.01172 15.1787C6.61963 15.3465 7.25579 15.3984 8 15.3984C12.087 15.3983 15.4004 12.0851 15.4004 7.99805C15.4003 3.9111 12.087 0.59776 8 0.597656ZM4.56836 8.50977V9.80371H8.12402V8.50977H4.56836ZM4.56836 7.30078H11.4619V6.00684H4.56836V7.30078Z", ++ fill: "currentColor" ++ }) ++ }); ++ case "file": return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutline16, { ++ size, ++ className ++ }); ++ case "folder": return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderClose16, { ++ size, ++ className ++ }); ++ } ++ } ++ //#endregion ++ //#region lib/types/client/chat/message-chrome.js ++ function pad2(n) { ++ return String(n).padStart(2, "0"); ++ } ++ /** ++ * Local calendar-day epoch (ms at local midnight) for an instant. ++ * @param ms - Unix epoch ms. ++ * @returns Midnight of that local calendar day. ++ */ ++ function startOfLocalDay(ms) { ++ const d = new Date(ms); ++ d.setHours(0, 0, 0, 0); ++ return d.getTime(); ++ } ++ /** ++ * Delay until the next local midnight after `ms` (at least 1ms). ++ * @param ms - Unix epoch ms. ++ * @returns Milliseconds until the following local midnight. ++ */ ++ function msUntilNextLocalMidnight(ms) { ++ const next = new Date(ms); ++ next.setHours(24, 0, 0, 0); ++ return Math.max(next.getTime() - ms, 1); ++ } ++ /** ++ * Localized elapsed-time label shared by running and settled turn chrome. ++ * @param ms - Elapsed duration in milliseconds (negatives clamp to zero). ++ * @param t - Translate seat supplying the duration templates. ++ * @returns Display string in whole seconds. ++ */ ++ function formatRunDuration(ms, t) { ++ const total = Math.max(0, Math.floor(ms / 1e3)); ++ const minutes = Math.floor(total / 60); ++ const seconds = total % 60; ++ return minutes > 0 ? t("duration.minutes", { ++ minutes, ++ seconds: String(seconds).padStart(2, "0") ++ }) : t("duration.seconds", { seconds }); ++ } ++ /** ++ * Sub-turn latency figure: one decimal under ten seconds, whole seconds ++ * beyond. Unit-less so the locale template owns the second suffix. ++ * @param ms - Latency in milliseconds (negatives clamp to zero). ++ * @returns Display number in seconds without unit. ++ */ ++ function formatLatencySeconds(ms) { ++ const s = Math.max(0, ms) / 1e3; ++ return s < 10 ? String(Math.round(s * 10) / 10) : String(Math.round(s)); ++ } ++ /** ++ * Decode-throughput figure: whole tokens from ten up, one decimal below. ++ * @param tps - Tokens per second. ++ * @returns Display number without unit. ++ */ ++ function formatTokensPerSecond(tps) { ++ const clamped = Math.max(0, tps); ++ return clamped >= 10 ? String(Math.round(clamped)) : String(Math.round(clamped * 10) / 10); ++ } ++ /** ++ * Compact local timestamp for message IconActions. Same calendar day → ++ * `HH:mm`; earlier this year → the `clock.md` date template + clock; other ++ * years → the `clock.ymd` template + clock. Pure: the date templates arrive ++ * through the caller's locale seat. ++ * @param time - Unix epoch ms from the source session event. ++ * @param t - translate seat supplying the `clock.md` / `clock.ymd` templates. ++ * @param now - Reference instant for the day/year cut (defaults to wall clock). ++ * @returns Date-aware clock string (24-hour, zero-padded time). ++ */ ++ function formatMessageClock(time, t, now = Date.now()) { ++ const d = new Date(time); ++ const n = new Date(now); ++ const clock = `${pad2(d.getHours())}:${pad2(d.getMinutes())}`; ++ if (d.getFullYear() === n.getFullYear() && d.getMonth() === n.getMonth() && d.getDate() === n.getDate()) return clock; ++ const params = { ++ y: d.getFullYear(), ++ m: d.getMonth() + 1, ++ d: d.getDate() ++ }; ++ return `${d.getFullYear() === n.getFullYear() ? t("clock.md", params) : t("clock.ymd", params)} ${clock}`; ++ } ++ //#endregion ++ //#region lib/types/client/chat/turn-metrics.js ++ function usageOutputTokens(usage) { ++ if (typeof usage !== "object" || usage === null) return null; ++ const value = usage.outputTokens; ++ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null; ++ } ++ /** ++ * Read one assistant node's TTFT, decode wall time, and output tokens. ++ * @param node - A settled assistant node. ++ * @returns Per-part readings with `null` for unrecorded values. ++ */ ++ function assistantStepReading(node) { ++ const timing = node.timing; ++ return { ++ ttftMs: timing !== void 0 && timing.stepStartTime !== null && timing.firstTokenTime !== null ? Math.max(0, timing.firstTokenTime - timing.stepStartTime) : null, ++ decodeMs: timing !== void 0 && timing.firstTokenTime !== null ? Math.max(0, timing.completedTime - timing.firstTokenTime) : null, ++ outputTokens: usageOutputTokens(node.usage) ++ }; ++ } ++ /** ++ * Fold assistant nodes into per-turn footer metrics. ++ * ++ * TTFT is the turn's lowest-step request-dispatch-to-first-token reading, so ++ * it is only meaningful when the turn's start is inside ++ * the loaded window (the caller gates on `turnTimings`, which shares that ++ * window). Throughput divides summed output tokens by summed decode wall time, ++ * counting only steps that carry both. ++ * @param nodes - Snapshot nodes of the loaded window. ++ * @returns Turn number → available metrics; turns with none are absent. ++ */ ++ function deriveTurnMetrics(nodes) { ++ const folds = /* @__PURE__ */ new Map(); ++ for (const node of nodes) { ++ if (node.kind !== "assistant") continue; ++ const reading = assistantStepReading(node); ++ let fold = folds.get(node.turn); ++ if (fold === void 0) { ++ fold = { ++ firstStep: node.step, ++ firstStepTtftMs: reading.ttftMs, ++ decodeMs: 0, ++ outputTokens: 0, ++ sampled: false ++ }; ++ folds.set(node.turn, fold); ++ } else if (node.step < fold.firstStep) { ++ fold.firstStep = node.step; ++ fold.firstStepTtftMs = reading.ttftMs; ++ } ++ if (reading.decodeMs !== null && reading.outputTokens !== null) { ++ fold.decodeMs += reading.decodeMs; ++ fold.outputTokens += reading.outputTokens; ++ fold.sampled = true; ++ } ++ } ++ const metrics = /* @__PURE__ */ new Map(); ++ for (const [turn, fold] of folds) { ++ const entry = {}; ++ if (fold.firstStepTtftMs !== null) entry.ttftMs = fold.firstStepTtftMs; ++ if (fold.sampled && fold.decodeMs > 0) entry.tokensPerSecond = fold.outputTokens / (fold.decodeMs / 1e3); ++ if (entry.ttftMs !== void 0 || entry.tokensPerSecond !== void 0) metrics.set(turn, entry); ++ } ++ return metrics; ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/StatsLine.module.css.mjs ++ const css$20 = ".FJxK0a_root{text-align:center;max-width:var(--dsh-chat-content-width);box-sizing:border-box;width:100%;padding:4px calc(var(--dsh-composer-side-clearance) + 16px) 0px;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;margin:0 auto;font-size:12px;line-height:20px;display:block;overflow:hidden}.FJxK0a_sep{color:var(--dsw-alias-separator-primary);margin:0 10px}"; ++ const tagId$20 = "@deepseek-ai/dsh-client-ui-conversation/StatsLine.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$20) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$20; ++ tag.textContent = css$20; ++ document.head.appendChild(tag); ++ } ++ var StatsLine_module_css_default = { ++ "root": "FJxK0a_root", ++ "sep": "FJxK0a_sep" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/StatsLine.js ++ /** ++ * Fold assistant and tool-result nodes into window-scoped display totals — ++ * the FALLBACK for assemblies without the `sessionStats` projection. ++ * ++ * Every displayed figure rides that durable whole-log projection (and token ++ * accounting rides `tokenUsage`) because the window is paged and compaction ++ * rewrites it; this fold answers "what is on screen" only when no projection ++ * value is served. Its field names deliberately mirror the projection's so ++ * the two swap wholesale. ++ * @param nodes - snapshot nodes. ++ * @returns fallback counts and summed wall times. ++ */ ++ function deriveStats(nodes) { ++ const turns = /* @__PURE__ */ new Set(); ++ let steps = 0; ++ let llmMs = 0; ++ let toolMs = 0; ++ let ttftMs = 0; ++ let ttftSteps = 0; ++ let decodeMs = 0; ++ let decodeTokens = 0; ++ for (const node of nodes) { ++ if (node.kind === "tool-result") { ++ if (node.callTime !== null) toolMs += Math.max(0, node.time - node.callTime); ++ continue; ++ } ++ if (node.kind !== "assistant") continue; ++ turns.add(node.turn); ++ steps += 1; ++ if (node.timing !== void 0 && node.timing.stepStartTime !== null) llmMs += Math.max(0, node.timing.completedTime - node.timing.stepStartTime); ++ const reading = assistantStepReading(node); ++ if (reading.ttftMs !== null) { ++ ttftMs += reading.ttftMs; ++ ttftSteps += 1; ++ } ++ if (reading.decodeMs !== null && reading.outputTokens !== null) { ++ decodeMs += reading.decodeMs; ++ decodeTokens += reading.outputTokens; ++ } ++ } ++ return { ++ turns: turns.size, ++ steps, ++ llmMs, ++ toolMs, ++ ttftMs, ++ ttftSteps, ++ decodeMs, ++ decodeTokens ++ }; ++ } ++ /** ++ * Compact token count: 517 / 12.2K / 517K / 1.2M (one decimal under three digits). ++ * @param n - token count. ++ * @returns display string. ++ */ ++ function formatTokens(n) { ++ const scaled = (v) => v >= 100 ? String(Math.round(v)) : String(Math.round(v * 10) / 10); ++ if (n < 1e3) return String(n); ++ if (n < 1e6) return `${scaled(n / 1e3)}K`; ++ return `${scaled(n / 1e6)}M`; ++ } ++ /** ++ * Compact duration: 45.2s under a minute, 2m42s from there on. ++ * @param ms - duration in milliseconds. ++ * @returns display string. ++ */ ++ function formatDuration(ms) { ++ const s = ms / 1e3; ++ if (s < 60) return `${Math.round(s * 10) / 10}s`; ++ const whole = Math.round(s); ++ return `${Math.floor(whole / 60)}m${whole % 60}s`; ++ } ++ /** Round a cache-read ratio to an integer percentage, with positive ties rounded up. */ ++ function roundedIntegerPercent(cacheReadTokens, denominator) { ++ const denominatorQuotient = Math.floor(denominator / 200); ++ const denominatorRemainder = denominator % 200; ++ let lower = 0; ++ let upper = 100; ++ while (lower < upper) { ++ const candidate = Math.floor((lower + upper + 1) / 2); ++ const factor = candidate * 2 - 1; ++ if (cacheReadTokens >= factor * denominatorQuotient + Math.ceil(factor * denominatorRemainder / 200)) lower = candidate; ++ else upper = candidate - 1; ++ } ++ return lower; ++ } ++ /** ++ * Display-ready cache-hit share of prompt-side input over the whole durable log. ++ * @param usage - the session's token-usage projection value. ++ * @returns integer text when integer rounding stays below 100, otherwise the ++ * minimum decimal precision that still rounds below 100; a full hit returns ++ * 100, and no billed input returns null. ++ */ ++ function cacheHitPercent(usage) { ++ const denominator = billedInputTokens(usage); ++ if (denominator === 0) return null; ++ const missedInputTokens = usage.uncachedInputTokens + usage.cacheWriteTokens; ++ if (missedInputTokens === 0) return "100"; ++ const integerPercent = roundedIntegerPercent(usage.cacheReadTokens, denominator); ++ if (integerPercent < 100) return String(integerPercent); ++ let decimalPlaces = 1; ++ let scaledDoubleGap = missedInputTokens * 200; ++ const denominatorTens = Math.floor(denominator / 10); ++ while (scaledDoubleGap <= denominatorTens) { ++ scaledDoubleGap *= 10; ++ decimalPlaces += 1; ++ } ++ const denominatorOnes = denominator % 10; ++ let roundedLoss = 5; ++ for (let loss = 1; loss < 5; loss += 1) { ++ const factor = loss * 2 + 1; ++ const threshold = factor * denominatorTens + Math.floor(factor * denominatorOnes / 10); ++ if (scaledDoubleGap <= threshold) { ++ roundedLoss = loss; ++ break; ++ } ++ } ++ return `99.${"9".repeat(decimalPlaces - 1)}${10 - roundedLoss}`; ++ } ++ /** ++ * Sum the three disjoint prompt-side billing buckets. ++ * @param usage - the session's token-usage projection value. ++ * @returns billed input tokens. ++ */ ++ function billedInputTokens(usage) { ++ return usage.uncachedInputTokens + usage.cacheReadTokens + usage.cacheWriteTokens; ++ } ++ /** ++ * Approximate context occupancy, using the TUI's integer rounding and upper ++ * clamp. The numerator is `projectedTokens` — the provider sample carried ++ * forward over the surface's movement since — so compaction shows immediately ++ * instead of waiting for the next request to report usage; it falls back to the ++ * bare sample only for a log whose projection predates that field. Numerator ++ * and capacity remain independent last-wins projection fields, so this is a ++ * reference figure rather than an exact measurement of one request (see the ++ * token-meter README). ++ * @param pressure - the session's context-pressure projection value. ++ * @returns occupancy with its numerator and denominator, or null until both values are known. ++ */ ++ function contextOccupancy(pressure) { ++ const usedTokens = pressure?.projectedTokens ?? pressure?.pressureTokens; ++ if (usedTokens === void 0 || pressure?.contextWindow === void 0) return null; ++ return { ++ percent: Math.min(100, Math.round(usedTokens / pressure.contextWindow * 100)), ++ usedTokens, ++ contextWindow: pressure.contextWindow ++ }; ++ } ++ const StatsLine = (0, react.memo)(function StatsLine({ useSession, useProjection, t }) { ++ const settledNodes = useSession((s) => s.chat.legacy.nodes); ++ const usage = useProjection("tokenUsage"); ++ const projected = useProjection("sessionStats"); ++ const stats = (0, react.useMemo)(() => projected ?? deriveStats(settledNodes), [projected, settledNodes]); ++ const groups = []; ++ if (stats.steps > 0) { ++ groups.push(t("stats.counts", { ++ turns: stats.turns, ++ steps: stats.steps ++ })); ++ const durations = []; ++ if (stats.llmMs > 0) durations.push(t("stats.llm", { duration: formatDuration(stats.llmMs) })); ++ if (stats.toolMs > 0) durations.push(t("stats.toolCall", { duration: formatDuration(stats.toolMs) })); ++ if (durations.length > 0) groups.push(durations.join(" · ")); ++ const speeds = []; ++ if (stats.ttftSteps > 0) speeds.push(t("stats.ttftAverage", { duration: formatDuration(stats.ttftMs / stats.ttftSteps) })); ++ if (stats.decodeMs > 0) speeds.push(t("stats.tokensPerSecond", { throughput: formatTokensPerSecond(stats.decodeTokens / (stats.decodeMs / 1e3)) })); ++ if (speeds.length > 0) groups.push(speeds.join(" · ")); ++ } ++ if (usage !== void 0 && (billedInputTokens(usage) > 0 || usage.outputTokens > 0)) { ++ const cacheHit = cacheHitPercent(usage); ++ if (cacheHit !== null) groups.push(t("stats.cacheHit", { percent: cacheHit })); ++ groups.push(t("stats.tokens", { ++ input: formatTokens(billedInputTokens(usage)), ++ output: formatTokens(usage.outputTokens) ++ })); ++ } ++ const line = groups.join(" | "); ++ const rootRef = (0, react.useRef)(null); ++ const [truncated, setTruncated] = (0, react.useState)(false); ++ (0, react.useLayoutEffect)(() => { ++ const el = rootRef.current; ++ if (el === null) return; ++ const measure = () => { ++ setTruncated(el.scrollWidth > el.clientWidth); ++ }; ++ measure(); ++ if (typeof ResizeObserver === "undefined") return; ++ const observer = new ResizeObserver(measure); ++ observer.observe(el); ++ return () => { ++ observer.disconnect(); ++ }; ++ }, [line]); ++ if (groups.length === 0) return null; ++ return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: line, ++ side: "top", ++ delayMs: 500, ++ disabled: !truncated, ++ children: (0, react_jsx_runtime.jsx)("div", { ++ ref: rootRef, ++ className: StatsLine_module_css_default.root, ++ children: groups.map((group, i) => (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [i > 0 && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", { ++ className: StatsLine_module_css_default.sep, ++ "aria-hidden": true, ++ children: "|" ++ }), " "] }), (0, react_jsx_runtime.jsx)("span", { children: group })] }, group)) ++ }) ++ }); ++ }); ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/ContextMeter.module.css.mjs ++ const css$19 = ".JObwrW_root{display:inline-flex;position:relative}.JObwrW_trigger{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.JObwrW_trigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.JObwrW_track{fill:none;stroke:var(--dsw-alias-border-l3);stroke-width:2px}.JObwrW_fill{fill:none;stroke:var(--dsw-alias-label-tertiary);stroke-width:2px;stroke-linecap:round}.JObwrW_panel{z-index:100;box-sizing:border-box;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-specific-menu);width:264px;box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-secondary);cursor:default;border-radius:12px;padding:12px;font-size:12px;line-height:20px;position:absolute;bottom:calc(100% + 8px);right:0}.JObwrW_header{align-items:center;gap:6px;display:flex}.JObwrW_figures{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);margin-left:auto;font-weight:500}.JObwrW_percent{color:var(--dsw-alias-label-primary);font-weight:500}.JObwrW_headline{color:var(--dsw-alias-label-tertiary)}.JObwrW_headline:empty{display:none}.JObwrW_bar{background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;gap:1px;height:4px;margin:10px 0 12px;display:flex;overflow:hidden}.JObwrW_segment{background:var(--meter-tint,var(--dsw-alias-label-tertiary));border-radius:1px;flex:none;min-width:2px;height:100%}.JObwrW_swatch{background:var(--meter-tint);vertical-align:baseline;border-radius:2px;width:8px;height:8px;margin-right:6px;display:inline-block}.JObwrW_colorSystem{--meter-tint:var(--dsw-static-neutral-bluish-400)}.JObwrW_colorTools{--meter-tint:#a78bfa}.JObwrW_colorMessages{--meter-tint:var(--dsw-static-blue-450)}.JObwrW_rows{margin:6px 0 0}.JObwrW_row{justify-content:space-between;align-items:center;gap:12px;padding:2px 0;display:flex}.JObwrW_row dt{color:var(--dsw-alias-label-secondary)}.JObwrW_row dd{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);margin:0}"; ++ const tagId$19 = "@deepseek-ai/dsh-client-ui-conversation/ContextMeter.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$19) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$19; ++ tag.textContent = css$19; ++ document.head.appendChild(tag); ++ } ++ var ContextMeter_module_css_default = { ++ "bar": "JObwrW_bar", ++ "colorMessages": "JObwrW_colorMessages", ++ "colorSystem": "JObwrW_colorSystem", ++ "colorTools": "JObwrW_colorTools", ++ "figures": "JObwrW_figures", ++ "fill": "JObwrW_fill", ++ "header": "JObwrW_header", ++ "headline": "JObwrW_headline", ++ "panel": "JObwrW_panel", ++ "percent": "JObwrW_percent", ++ "root": "JObwrW_root", ++ "row": "JObwrW_row", ++ "rows": "JObwrW_rows", ++ "segment": "JObwrW_segment", ++ "swatch": "JObwrW_swatch", ++ "track": "JObwrW_track", ++ "trigger": "JObwrW_trigger" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/ContextMeter.js ++ /** Composer context-occupancy meter: a ring beside the send button fed by the ++ * `contextPressure` projection, with a click-open panel of the heuristic ++ * `contextBreakdown` composition (system prompt, tools, conversation). ++ * Renders nothing until a provider reports both pressure and a route ++ * capacity. */ ++ /** Ring geometry: 14px viewBox, 2px stroke. */ ++ const RADIUS = 5.5; ++ const CIRCUMFERENCE = 2 * Math.PI * RADIUS; ++ /** ++ * Marker the localized occupancy sentence is split on, so the panel headline ++ * keeps the reading in its own tone while each locale still owns the word ++ * order (`45% of context used` / `上下文已用 45%`). ++ */ ++ const READING_SLOT = "\0"; ++ /** Panel legend rows, in bar-segment order; each color class carries the shared swatch/segment tint. */ ++ const ROWS = [ ++ { ++ key: "systemTokens", ++ label: "context.system", ++ color: ContextMeter_module_css_default.colorSystem ++ }, ++ { ++ key: "toolsTokens", ++ label: "context.tools", ++ color: ContextMeter_module_css_default.colorTools ++ }, ++ { ++ key: "messageTokens", ++ label: "context.messages", ++ color: ContextMeter_module_css_default.colorMessages ++ } ++ ]; ++ function ContextMeter({ useProjection, t }) { ++ const pressure = useProjection("contextPressure"); ++ const breakdown = useProjection("contextBreakdown"); ++ const [open, setOpen] = (0, react.useState)(false); ++ const rootRef = (0, react.useRef)(null); ++ const context = contextOccupancy(pressure); ++ const available = context !== null; ++ (0, react.useEffect)(() => { ++ if (!available && open) setOpen(false); ++ }, [available, open]); ++ (0, react.useEffect)(() => { ++ if (!open || !available) return; ++ const onPointerDown = (e) => { ++ if (e.target instanceof Node && rootRef.current?.contains(e.target) === true) return; ++ setOpen(false); ++ }; ++ const onKeyDown = (e) => { ++ if (e.key === "Escape") setOpen(false); ++ }; ++ document.addEventListener("pointerdown", onPointerDown); ++ document.addEventListener("keydown", onKeyDown); ++ return () => { ++ document.removeEventListener("pointerdown", onPointerDown); ++ document.removeEventListener("keydown", onKeyDown); ++ }; ++ }, [available, open]); ++ if (context === null) return null; ++ const percent = context.percent; ++ const reading = `${percent}%`; ++ const [headBefore = "", headAfter = ""] = t("context.aria", { percent: READING_SLOT }).split(READING_SLOT).map((part) => part.trim()); ++ const breakdownTotal = breakdown === void 0 ? 0 : breakdown.systemTokens + breakdown.toolsTokens + breakdown.messageTokens; ++ const segments = (breakdown === void 0 || breakdownTotal === 0 ? [{ ++ key: "total", ++ color: void 0, ++ width: percent ++ }] : ROWS.map((row) => ({ ++ key: row.key, ++ color: row.color, ++ width: percent * breakdown[row.key] / breakdownTotal ++ }))).filter((part) => part.width > 0); ++ return (0, react_jsx_runtime.jsxs)("span", { ++ ref: rootRef, ++ className: ContextMeter_module_css_default.root, ++ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("context.aria", { percent: reading }), ++ side: "top", ++ delayMs: 200, ++ disabled: open, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: ContextMeter_module_css_default.trigger, ++ "aria-label": t("context.aria", { percent: reading }), ++ "aria-haspopup": "dialog", ++ "aria-expanded": open, ++ onClick: () => { ++ setOpen(!open); ++ }, ++ children: (0, react_jsx_runtime.jsxs)("svg", { ++ viewBox: "0 0 14 14", ++ width: "14", ++ height: "14", ++ "aria-hidden": true, ++ children: [(0, react_jsx_runtime.jsx)("circle", { ++ className: ContextMeter_module_css_default.track, ++ cx: "7", ++ cy: "7", ++ r: RADIUS ++ }), (0, react_jsx_runtime.jsx)("circle", { ++ className: ContextMeter_module_css_default.fill, ++ cx: "7", ++ cy: "7", ++ r: RADIUS, ++ strokeDasharray: `${CIRCUMFERENCE * percent / 100} ${CIRCUMFERENCE}`, ++ transform: "rotate(-90 7 7)" ++ })] ++ }) ++ }) ++ }), open && (0, react_jsx_runtime.jsxs)("div", { ++ className: ContextMeter_module_css_default.panel, ++ role: "dialog", ++ "aria-label": t("context.used"), ++ children: [ ++ (0, react_jsx_runtime.jsxs)("div", { ++ className: ContextMeter_module_css_default.header, ++ children: [ ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextMeter_module_css_default.headline, ++ children: headBefore ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextMeter_module_css_default.percent, ++ children: reading ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextMeter_module_css_default.headline, ++ children: headAfter ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextMeter_module_css_default.figures, ++ children: `~${formatTokens(context.usedTokens)} / ${formatTokens(context.contextWindow)}` ++ }) ++ ] ++ }), ++ (0, react_jsx_runtime.jsx)("div", { ++ className: ContextMeter_module_css_default.bar, ++ children: segments.map((segment) => (0, react_jsx_runtime.jsx)("div", { ++ className: segment.color === void 0 ? ContextMeter_module_css_default.segment : `${ContextMeter_module_css_default.segment} ${segment.color}`, ++ style: { width: `${segment.width}%` } ++ }, segment.key)) ++ }), ++ breakdown !== void 0 && (0, react_jsx_runtime.jsx)("dl", { ++ className: ContextMeter_module_css_default.rows, ++ children: ROWS.map((row) => (0, react_jsx_runtime.jsxs)("div", { ++ className: ContextMeter_module_css_default.row, ++ children: [(0, react_jsx_runtime.jsxs)("dt", { children: [(0, react_jsx_runtime.jsx)("span", { ++ className: `${ContextMeter_module_css_default.swatch} ${row.color}`, ++ "aria-hidden": true ++ }), t(row.label)] }), (0, react_jsx_runtime.jsx)("dd", { children: `~${formatTokens(breakdown[row.key])}` })] ++ }, row.key)) ++ }) ++ ] ++ })] ++ }); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/PermissionSelect.module.css.mjs ++ const css$18 = ".Sh0Q9G_trigger{min-width:0;max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.Sh0Q9G_trigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.Sh0Q9G_trigger:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3)}.Sh0Q9G_trigger:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}.Sh0Q9G_triggerIcon{flex:none;display:inline-flex}.Sh0Q9G_triggerIcon svg{width:14px;height:14px}.Sh0Q9G_triggerLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.Sh0Q9G_chevron{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s;display:inline-flex}@container (width<=460px){.Sh0Q9G_trigger:has(.Sh0Q9G_triggerIcon) .Sh0Q9G_triggerLabel{display:none}}.Sh0Q9G_chevronOpen{transform:rotate(180deg)}"; ++ const tagId$18 = "@deepseek-ai/dsh-client-ui-conversation/PermissionSelect.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$18) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$18; ++ tag.textContent = css$18; ++ document.head.appendChild(tag); ++ } ++ var PermissionSelect_module_css_default = { ++ "chevron": "Sh0Q9G_chevron", ++ "chevronOpen": "Sh0Q9G_chevronOpen", ++ "trigger": "Sh0Q9G_trigger", ++ "triggerIcon": "Sh0Q9G_triggerIcon", ++ "triggerLabel": "Sh0Q9G_triggerLabel" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/PermissionSelect.js ++ const FULL_ACCESS = "danger-full-access"; ++ const shieldOutline = "M8.20554 0.899994L14.7901 3.36857V7.01026C14.7901 12 11.0466 14.2103 8.20554 15.3C5.36446 14.2103 1.62012 12 1.62012 7.01026V3.36857L8.20554 0.899994Z"; ++ const permissionGlyphs = new Map([ ++ ["read-only", (0, react_jsx_runtime.jsxs)("svg", { ++ width: "16", ++ height: "16", ++ viewBox: "0 0 16 16", ++ fill: "none", ++ "aria-hidden": true, ++ children: [(0, react_jsx_runtime.jsx)("path", { ++ d: shieldOutline, ++ stroke: "currentColor", ++ strokeWidth: "1.31831", ++ strokeLinejoin: "round" ++ }), (0, react_jsx_runtime.jsx)("path", { ++ d: "M12.1654 5.7552L8.9447 9.41475C8.73044 9.65816 8.53628 9.8804 8.35774 10.0423C8.1713 10.2114 7.94235 10.3717 7.64016 10.4254C7.48207 10.4535 7.32 10.4552 7.16151 10.4294C6.85843 10.3801 6.62728 10.2223 6.43836 10.0559C6.25752 9.89653 6.06037 9.67732 5.84264 9.43705L4.72925 8.20897L5.63557 7.38707L6.74897 8.61594C6.98603 8.87755 7.12974 9.03533 7.24673 9.13839C7.31033 9.19443 7.34485 9.21476 7.35823 9.22122C7.38068 9.22484 7.40352 9.22515 7.42593 9.22122C7.40522 9.22502 7.42893 9.23294 7.53583 9.136C7.65132 9.03126 7.79316 8.87139 8.02643 8.60638L11.2479 4.94763L12.1654 5.7552Z", ++ fill: "currentColor" ++ })] ++ })], ++ ["workspace-write", (0, react_jsx_runtime.jsxs)("svg", { ++ width: "16", ++ height: "16", ++ viewBox: "0 0 16 16", ++ fill: "none", ++ "aria-hidden": true, ++ children: [ ++ (0, react_jsx_runtime.jsx)("path", { ++ d: "M8.08887 0.251709C8.20479 0.23085 8.32486 0.241168 8.43652 0.282959L15.0215 2.75171C15.2787 2.84819 15.4492 3.09414 15.4492 3.3689V7.0105C15.4492 7.10986 15.4441 7.2081 15.4414 7.30542C15.0285 7.07175 14.5905 6.87695 14.1309 6.73022V3.82495L8.20508 1.60327L2.2793 3.82495V7.0105C2.27936 9.7171 3.4745 11.5379 5.02734 12.7947C5.01025 12.9942 5 13.1962 5 13.4001C5.00001 13.7617 5.02722 14.1169 5.08008 14.4636C2.91555 13.0393 0.961014 10.752 0.960938 7.0105V3.3689C0.960938 3.09417 1.13146 2.84821 1.38867 2.75171L7.97461 0.282959L8.08887 0.251709Z", ++ fill: "currentColor" ++ }), ++ (0, react_jsx_runtime.jsx)("path", { ++ d: "M11.3525 5.64688V6.85688H5V5.64688H11.3525Z", ++ fill: "currentColor" ++ }), ++ (0, react_jsx_runtime.jsx)("path", { ++ d: "M9.5824 8.29376V9.50376H5V8.29376H9.5824Z", ++ fill: "currentColor" ++ }), ++ (0, react_jsx_runtime.jsx)("path", { ++ d: "M14.6647 15.6852H10.0338C10.3878 15.3751 10.7567 15.0517 11.0772 14.7706C11.2531 14.6164 11.4144 14.4746 11.5511 14.3547H14.6647V15.6852Z", ++ fill: "currentColor" ++ }), ++ (0, react_jsx_runtime.jsx)("path", { ++ d: "M8.14852 14.1308L7.33925 15.4976C7.22458 15.6912 7.42245 15.9194 7.63037 15.8333L9.09785 15.2254L15.0399 10.0719L14.0905 8.97733L8.14852 14.1308Z", ++ fill: "currentColor" ++ }) ++ ] ++ })], ++ [FULL_ACCESS, (0, react_jsx_runtime.jsxs)("svg", { ++ width: "16", ++ height: "16", ++ viewBox: "0 0 16 16", ++ fill: "none", ++ "aria-hidden": true, ++ children: [ ++ (0, react_jsx_runtime.jsx)("path", { ++ d: shieldOutline, ++ stroke: "currentColor", ++ strokeWidth: "1.31831", ++ strokeLinejoin: "round" ++ }), ++ (0, react_jsx_runtime.jsx)("path", { ++ d: "M9.10094 4.5V8.75939H7.59888V4.5H9.10094Z", ++ fill: "currentColor" ++ }), ++ (0, react_jsx_runtime.jsx)("path", { ++ d: "M9.10094 9.8114V11.5H7.59888V9.8114H9.10094Z", ++ fill: "currentColor" ++ }) ++ ] ++ })] ++ ]); ++ /** Glyph for a permission option value; host-configured names outside the design set get none. */ ++ function permissionGlyph(value) { ++ return permissionGlyphs.get(value); ++ } ++ /** ++ * Display transform: built-in machine names render as locale product labels; ++ * non-kebab host-configured names pass through. ++ */ ++ function displayName(name) { ++ if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(name)) return name; ++ return name.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" "); ++ } ++ const BUILT_IN_PERMISSION_NAMES = new Map([ ++ ["read-only", "Read Only"], ++ ["workspace-write", "Workspace Write"], ++ [FULL_ACCESS, "Full access"] ++ ]); ++ function permissionLabel(value, name, t) { ++ const builtInName = BUILT_IN_PERMISSION_NAMES.get(value); ++ if (builtInName !== void 0 && (name === value || name === builtInName)) { ++ if (value === "read-only") return t("access.preset.readOnly"); ++ if (value === "workspace-write") return t("access.preset.workspaceWrite"); ++ if (value === FULL_ACCESS) return t("access.preset.fullAccess"); ++ } ++ return displayName(name); ++ } ++ function PermissionSelect({ value, locked, command, t }) { ++ const [pick, setPick] = (0, react.useState)(null); ++ const [open, setOpen] = (0, react.useState)(false); ++ const [confirmation, setConfirmation] = (0, react.useState)(null); ++ const [acknowledged, setAcknowledged] = (0, react.useState)(false); ++ (0, react.useEffect)(() => { ++ if (!locked && value !== void 0) return; ++ setOpen(false); ++ setAcknowledged(false); ++ setConfirmation(null); ++ }, [locked, value]); ++ if (value === void 0) return null; ++ const currentValue = pick ?? value.currentValue; ++ const current = value.options.find((option) => option.value === currentValue); ++ const currentLabel = current === void 0 ? permissionLabel(currentValue, currentValue, t) : permissionLabel(current.value, current.name, t); ++ const busy = pick !== null || confirmation !== null; ++ const items = value.options.filter((o) => o.value !== "custom").map((option) => { ++ const icon = permissionGlyph(option.value); ++ return { ++ id: option.value, ++ label: permissionLabel(option.value, option.name, t), ++ ...icon === void 0 ? {} : { icon } ++ }; ++ }); ++ const submit = (id) => { ++ setPick(id); ++ command(`/permission ${id}`).catch(() => false).then(() => { ++ setPick(null); ++ }); ++ }; ++ const choose = (id) => { ++ setOpen(false); ++ if (id === value.currentValue) return; ++ if (id === FULL_ACCESS) { ++ setAcknowledged(false); ++ setConfirmation(id); ++ return; ++ } ++ submit(id); ++ }; ++ const closeConfirmation = () => { ++ setAcknowledged(false); ++ setConfirmation(null); ++ }; ++ const confirmFullAccess = () => { ++ if (locked || !acknowledged || confirmation === null) return; ++ const id = confirmation; ++ closeConfirmation(); ++ submit(id); ++ }; ++ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, { ++ open, ++ items, ++ selectedId: currentValue, ++ onSelect: choose, ++ onClose: () => { ++ setOpen(false); ++ }, ++ side: "top", ++ anchor: (0, react_jsx_runtime.jsxs)("button", { ++ type: "button", ++ className: PermissionSelect_module_css_default.trigger, ++ "aria-label": t("input.accessMode", { name: currentLabel }), ++ title: current?.description, ++ disabled: locked || busy, ++ onClick: () => { ++ setOpen(!open); ++ }, ++ children: [ ++ permissionGlyph(currentValue) !== void 0 && (0, react_jsx_runtime.jsx)("span", { ++ className: PermissionSelect_module_css_default.triggerIcon, ++ "aria-hidden": true, ++ children: permissionGlyph(currentValue) ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: PermissionSelect_module_css_default.triggerLabel, ++ children: currentLabel ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: clsx(PermissionSelect_module_css_default.chevron, open && PermissionSelect_module_css_default.chevronOpen), ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {}) ++ }) ++ ] ++ }) ++ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, { ++ open: confirmation !== null, ++ title: t("access.confirm.title"), ++ description: t("access.confirm.description"), ++ acknowledgeLabel: t("access.confirm.acknowledge"), ++ cancelLabel: t("access.confirm.cancel"), ++ confirmLabel: t("access.confirm.enable"), ++ acknowledged, ++ disabled: locked, ++ onAcknowledgedChange: setAcknowledged, ++ onCancel: closeConfirmation, ++ onConfirm: confirmFullAccess ++ })] }); ++ } ++ //#endregion ++ //#region lib/types/client/skeleton/safari.js ++ /** Safari-specific textarea layout recovery for the conversation composer. */ ++ const ALTERNATE_IOS_BROWSER = /\b(?:CriOS|FxiOS|EdgiOS|OPiOS|OPT|DuckDuckGo|Brave)(?:\/|\b)/; ++ /** ++ * Detect Safari's `Version/... Safari/...` form while excluding known alternate iOS browser tokens. ++ * @param identity - Browser user-agent and vendor values. ++ * @returns Whether the identity should use the Safari-specific recovery. ++ */ ++ function isSafariBrowser(identity) { ++ return identity.vendor === "Apple Computer, Inc." && /\bVersion\/[\d.]+.*\bSafari\/[\d.]+/.test(identity.userAgent) && !ALTERNATE_IOS_BROWSER.test(identity.userAgent); ++ } ++ /** ++ * Repair Safari's stale native textarea layout and the scrollport auto height it can contaminate. ++ * @param input - Composer textarea whose own scrollable overflow must stay zero. ++ */ ++ function repairSafariTextareaLayout(input) { ++ if (input === null || input.scrollHeight <= input.clientHeight) return; ++ const scrollport = input.closest("[data-input-scroll]"); ++ if (scrollport === null) return; ++ const inputHeight = input.style.height; ++ input.style.height = `${String(input.clientHeight + 1)}px`; ++ input.offsetHeight; ++ input.style.height = inputHeight; ++ input.offsetHeight; ++ const scrollportHeight = scrollport.style.height; ++ scrollport.style.height = `${String(scrollport.clientHeight + 1)}px`; ++ scrollport.offsetHeight; ++ scrollport.style.height = scrollportHeight; ++ scrollport.offsetHeight; ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/InputBar.module.css.mjs ++ const css$17 = ".uV2eYG_root{padding:0 var(--dsh-composer-side-clearance) 8px;flex-direction:column;align-items:center;display:flex}.uV2eYG_hero{padding:0 var(--dsh-composer-side-clearance)}.uV2eYG_notice{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:8px;margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}.uV2eYG_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);border:1px solid var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:22px;flex-direction:column;gap:12px;padding-top:10px;font-size:16px;line-height:24px;display:flex;position:relative}.uV2eYG_cardWorkspaceTrigger{cursor:pointer;border-color:#0000}.uV2eYG_cardWorkspaceTrigger:after{content:\"\";background:var(--dsw-alias-border-l4);pointer-events:none;border-radius:22px;transition:background-color .1s;position:absolute;inset:-1px;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\");mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' fill='none' rx='22' ry='22' stroke='black' stroke-width='2' stroke-dasharray='4 4'/%3E%3C/svg%3E\")}.uV2eYG_cardWorkspaceTrigger :disabled{pointer-events:none}.uV2eYG_cardWorkspaceTrigger:hover:after{background:var(--dsw-alias-state-business-primary)}.uV2eYG_accessory{align-items:center;gap:8px;padding:10px 12px 0;display:flex}.uV2eYG_overlayAnchor{height:0;position:absolute;inset:0 0 auto}.uV2eYG_scroll{max-height:var(--dsh-composer-text-max-height);overflow-y:auto}.uV2eYG_grow{position:relative}.uV2eYG_backdrop{color:var(--dsw-alias-label-primary);pointer-events:none;position:absolute;inset:0;overflow:hidden}.uV2eYG_backdropDisabled,.uV2eYG_backdropDisabled :is(.uV2eYG_hlToken,.uV2eYG_hint,.uV2eYG_textRef,.uV2eYG_chip,.uV2eYG_chipInvalid){color:var(--dsw-alias-label-tertiary)}.uV2eYG_hlToken{color:var(--dsw-alias-state-warn-label);background-color:#0000}.uV2eYG_hlSegment{color:#0000;background-color:#0000;border-radius:4px}.uV2eYG_hint{color:var(--dsw-alias-label-caption)}.uV2eYG_pending{background:var(--dsw-alias-state-business-primary);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite alternate uV2eYG_input-pending}@keyframes uV2eYG_input-pending{0%{opacity:.35}to{opacity:1}}.uV2eYG_input{resize:none;color:#0000;-webkit-text-fill-color:transparent;width:100%;height:100%;caret-color:var(--dsw-alias-state-business-primary);background:0 0;border:none;outline:none;position:absolute;inset:0;overflow:hidden}.uV2eYG_input,.uV2eYG_mirror,.uV2eYG_backdrop{box-sizing:border-box;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;padding:4px 12px 0 16px}.uV2eYG_input::placeholder{color:var(--dsw-alias-label-caption);-webkit-text-fill-color:var(--dsw-alias-label-caption);user-select:none}.uV2eYG_input:disabled{color:#0000;-webkit-text-fill-color:transparent;cursor:not-allowed}.uV2eYG_input[aria-haspopup=menu]{cursor:pointer}.uV2eYG_mirror{visibility:hidden;pointer-events:none}.uV2eYG_hero .uV2eYG_mirror{min-height:52px}.uV2eYG_row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:2px 8px 6px;display:flex;container-type:inline-size}.uV2eYG_tools,.uV2eYG_modes,.uV2eYG_trailing{align-items:center;min-width:0;display:flex}.uV2eYG_tools{gap:16px}.uV2eYG_modes{gap:12px}.uV2eYG_trailing{flex:none;gap:12px;margin-left:auto}.uV2eYG_add{background:var(--dsw-specific-selector);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.uV2eYG_add:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.uV2eYG_add:disabled{opacity:.5;cursor:default}.uV2eYG_select{max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;appearance:none;background-color:#0000;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 4px center;background-repeat:no-repeat;background-size:12px 12px;border:none;border-radius:8px;outline:none;padding:0 20px 0 8px;font-size:13px;font-weight:500;line-height:20px}.uV2eYG_select:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover)}.uV2eYG_select:disabled{opacity:.5;cursor:default}.uV2eYG_primary{background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid;transform:translateY(-2px)}.uV2eYG_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.uV2eYG_primary:disabled{opacity:.4;cursor:default}.uV2eYG_retry{color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:4px;margin-left:8px;padding:1px 8px;font-size:12px}.uV2eYG_textRef{color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000}.uV2eYG_textRef:after{display:none}.uV2eYG_textRefTrigger{position:relative}.uV2eYG_textRefTriggerGlyph{color:#0000}.uV2eYG_textRefIcon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.uV2eYG_chip{color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;position:relative}.uV2eYG_chipTrigger{position:relative}.uV2eYG_chipTriggerGlyph{color:#0000}.uV2eYG_chipIcon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.uV2eYG_chipInvalid{opacity:.7;color:var(--dsw-alias-state-error-primary);text-decoration:line-through}"; ++ const tagId$17 = "@deepseek-ai/dsh-client-ui-conversation/InputBar.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$17) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$17; ++ tag.textContent = css$17; ++ document.head.appendChild(tag); ++ } ++ var InputBar_module_css_default = { ++ "accessory": "uV2eYG_accessory", ++ "add": "uV2eYG_add", ++ "backdrop": "uV2eYG_backdrop", ++ "backdropDisabled": "uV2eYG_backdropDisabled", ++ "card": "uV2eYG_card", ++ "cardWorkspaceTrigger": "uV2eYG_cardWorkspaceTrigger", ++ "chip": "uV2eYG_chip", ++ "chipIcon": "uV2eYG_chipIcon", ++ "chipInvalid": "uV2eYG_chipInvalid", ++ "chipTrigger": "uV2eYG_chipTrigger", ++ "chipTriggerGlyph": "uV2eYG_chipTriggerGlyph", ++ "grow": "uV2eYG_grow", ++ "hero": "uV2eYG_hero", ++ "hint": "uV2eYG_hint", ++ "hlSegment": "uV2eYG_hlSegment", ++ "hlToken": "uV2eYG_hlToken", ++ "input": "uV2eYG_input", ++ "input-pending": "uV2eYG_input-pending", ++ "mirror": "uV2eYG_mirror", ++ "modes": "uV2eYG_modes", ++ "notice": "uV2eYG_notice", ++ "overlayAnchor": "uV2eYG_overlayAnchor", ++ "pending": "uV2eYG_pending", ++ "primary": "uV2eYG_primary", ++ "retry": "uV2eYG_retry", ++ "root": "uV2eYG_root", ++ "row": "uV2eYG_row", ++ "scroll": "uV2eYG_scroll", ++ "select": "uV2eYG_select", ++ "textRef": "uV2eYG_textRef", ++ "textRefIcon": "uV2eYG_textRefIcon", ++ "textRefTrigger": "uV2eYG_textRefTrigger", ++ "textRefTriggerGlyph": "uV2eYG_textRefTriggerGlyph", ++ "tools": "uV2eYG_tools", ++ "trailing": "uV2eYG_trailing" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/InputBar.js ++ /** The default composer body: the 'conversation.composer.bar' slot entry. ++ * Machine state arrives through the standard provide channel ++ * (useInput + inputActions); the keyboard/DOM command face and stop arrive ++ * through this entry's own inject, whose hooks compartment binds ++ * useNotices/useLexicon; layout-phase inputs (variant, placeholder, ++ * region-slot content) ride the owner props. Session facts ++ * (running/removed/promptError) are self-selected via useSession. */ ++ /** Decoration product of the no-session state (no machine, empty draft). */ ++ const INERT_DECORATIONS = { ++ token: null, ++ chips: [], ++ textRefs: [], ++ hint: null ++ }; ++ /** ++ * Resolve one edit's range from the record taken before it applied. ++ * A selection the edit replaces is the range outright. A caret delete replaces ++ * nothing and reports the bare caret, so the removed span is whatever the draft ++ * lost, on the side `inputType` names — measured, because one caret gesture can ++ * remove a multi-unit grapheme, a word, or a line. ++ * @param pending - record taken at `beforeinput`, null when none was seen. ++ * @param prevLength - length of the draft the edit applied to. ++ * @param nextLength - length of the resulting draft. ++ * @returns the exact range, or undefined when the record cannot describe this ++ * edit and the machine's diff scan has to recover it. ++ */ ++ function editRangeOf(pending, prevLength, nextLength) { ++ if (pending === null || pending.draftLength !== prevLength) return void 0; ++ const { start, end, inputType } = pending; ++ if (start > end || end > prevLength) return void 0; ++ const insertedLength = nextLength - prevLength + (end - start); ++ if (insertedLength >= 0) return { ++ start, ++ end, ++ insertedLength ++ }; ++ if (start !== end) return void 0; ++ const removed = prevLength - nextLength; ++ if (inputType.endsWith("Backward")) return removed <= start ? { ++ start: start - removed, ++ end: start, ++ insertedLength: 0 ++ } : void 0; ++ if (inputType.endsWith("Forward")) return start + removed <= prevLength ? { ++ start, ++ end: start + removed, ++ insertedLength: 0 ++ } : void 0; ++ } ++ function InputBar({ useSession, useInput, inputActions, keyboard, addImages, removeImage, draftImages, resolveSubmitMode, toggleCommandMenu, stop, command, t, renderSlot, useNotices, useLexicon, useMenuLauncher, useProjection, sessionId, variant, disabled: inert = false, blocked, workspacePickerOpen = false, onRequestWorkspace, placeholder, accessory, overlay, leftItems, rightItems, footer }) { ++ const input = useInput((s) => s); ++ const notice = useNotices((s) => s); ++ const lexicon = useLexicon((s) => s); ++ const commandMenuOpen = useMenuLauncher((source) => source === "command"); ++ const promptError = useSession((s) => s.promptError) ?? null; ++ const running = useSession((s) => s.running) ?? false; ++ const subagent = useSession((s) => s.subagent) ?? null; ++ const removed = useSession((s) => s.removed) ?? false; ++ const planActive = useProjection("plan", (plan) => plan !== void 0 && (plan.pending ? !plan.active : plan.active)); ++ const hasGoal = useProjection("goal", (goal) => goal != null); ++ const live = input !== void 0 && keyboard !== void 0 && inputActions !== void 0; ++ const draft = input?.draft ?? ""; ++ const attachments = (0, react.useMemo)(() => input === void 0 || draftImages === void 0 ? [] : draftImages(input.imageIds), [draftImages, input?.imageIds]); ++ const empty = draft.trim() === "" && attachments.length === 0; ++ const [toast, setToast] = (0, react.useState)(null); ++ const toastSeq = (0, react.useRef)(0); ++ const showToast = (0, react.useCallback)((text) => { ++ toastSeq.current += 1; ++ setToast({ ++ seq: toastSeq.current, ++ text ++ }); ++ }, []); ++ const dismissToast = (0, react.useCallback)(() => { ++ setToast(null); ++ }, []); ++ const imageLimits = useProjection("imageLimits"); ++ (0, react.useEffect)(() => { ++ if (promptError === null) return; ++ showToast(promptError.error.code === "attachment-error" ? attachmentErrorText(t, promptError.error.details.reason, imageLimits) : `${promptError.error.message} (${promptError.error.code})`); ++ }, [ ++ promptError, ++ showToast, ++ t, ++ imageLimits ++ ]); ++ (0, react.useEffect)(() => { ++ if (notice?.level === "error") showToast(notice.text); ++ }, [notice, showToast]); ++ const inputRef = (0, react.useRef)(null); ++ const cardRef = (0, react.useRef)(null); ++ const scrollRef = (0, react.useRef)(null); ++ const mirrorRef = (0, react.useRef)(null); ++ const safari = (0, react.useMemo)(() => isSafariBrowser(navigator), []); ++ const safariNativeShrinkRef = (0, react.useRef)(false); ++ const composingRef = (0, react.useRef)(false); ++ const onCompositionStart = () => { ++ composingRef.current = true; ++ }; ++ const onCompositionEnd = () => { ++ setTimeout(() => { ++ composingRef.current = false; ++ }, 10); ++ }; ++ const permissions = useProjection("permissions"); ++ const continuable = subagent?.address.mode === "continuable"; ++ const parentOffline = continuable && !subagent.parentAvailable; ++ const disabled = removed || inert || !live || blocked !== void 0 || parentOffline; ++ const locked = disabled; ++ const modelSeatLocked = removed || inert || !live; ++ const machineBusy = input?.phase === "adjudicating" || input?.phase === "submitting"; ++ const workspaceTrigger = inert && !removed && onRequestWorkspace !== void 0; ++ const textareaDisabled = removed || locked && !workspaceTrigger; ++ const canSteerQueue = !locked && !machineBusy && !commandMenuOpen && empty && running && subagent === null && input.queue.some((row) => row.placement === "queued"); ++ (0, react.useEffect)(() => { ++ if (input === void 0 || inputActions === void 0) return; ++ if (attachments.length !== input.imageIds.length) inputActions.pruneImages(attachments.map((attachment) => attachment.id)); ++ }, [ ++ attachments, ++ input?.imageIds, ++ inputActions ++ ]); ++ (0, react.useLayoutEffect)(() => { ++ const nativeShrink = safariNativeShrinkRef.current; ++ safariNativeShrinkRef.current = false; ++ if (safari && nativeShrink) repairSafariTextareaLayout(inputRef.current); ++ }, [draft, safari]); ++ const revealCaret = (caret) => { ++ const scrollEl = scrollRef.current; ++ const mirrorEl = mirrorRef.current; ++ const text = mirrorEl?.firstChild; ++ if (scrollEl === null || mirrorEl === null || !(text instanceof Text)) return; ++ if (scrollEl.scrollHeight <= scrollEl.clientHeight) return; ++ const at = Math.min(caret, text.data.length); ++ const afterNewline = at > 0 && text.data[at - 1] === "\n"; ++ const range = document.createRange(); ++ range.setStart(text, afterNewline ? at - 1 : at); ++ if (afterNewline) range.setEnd(text, at); ++ else range.collapse(true); ++ const line = afterNewline ? Number.parseFloat(getComputedStyle(mirrorEl).lineHeight) : 0; ++ const rect = range.getBoundingClientRect(); ++ const box = scrollEl.getBoundingClientRect(); ++ if (rect.bottom + line > box.bottom) scrollEl.scrollTop += rect.bottom + line - box.bottom; ++ else if (rect.top + line < box.top) scrollEl.scrollTop -= box.top - rect.top - line; ++ }; ++ const revealSelectionFocus = (el) => { ++ revealCaret((el.selectionDirection === "backward" ? el.selectionStart : el.selectionEnd) ?? el.value.length); ++ }; ++ (0, react.useEffect)(() => { ++ const el = inputRef.current; ++ if (locked || el === null) return; ++ el.focus({ preventScroll: true }); ++ revealSelectionFocus(el); ++ }, [locked, sessionId]); ++ (0, react.useEffect)(() => { ++ const el = inputRef.current; ++ if (locked || draft === "" || el === null) return; ++ revealSelectionFocus(el); ++ }, [draft !== ""]); ++ const restoreCaret = (el, caret) => { ++ requestAnimationFrame(() => { ++ el.setSelectionRange(caret, caret); ++ revealCaret(caret); ++ }); ++ }; ++ (0, react.useEffect)(() => { ++ const el = scrollRef.current; ++ if (el === null) return; ++ const onWheel = (e) => { ++ const host = el.closest("[data-conversation-scroll]"); ++ if (!(host instanceof HTMLElement) || e.deltaY === 0) return; ++ const atTop = el.scrollTop <= 0; ++ const atEnd = el.scrollTop + el.clientHeight >= el.scrollHeight - 1; ++ if (e.deltaY < 0 && !atTop || e.deltaY > 0 && !atEnd) return; ++ e.preventDefault(); ++ host.scrollTop += e.deltaY; ++ }; ++ el.addEventListener("wheel", onWheel, { passive: false }); ++ return () => { ++ el.removeEventListener("wheel", onWheel); ++ }; ++ }, []); ++ const selectionOf = (el) => ({ ++ start: el.selectionStart ?? 0, ++ end: el.selectionEnd ?? el.selectionStart ?? 0 ++ }); ++ const pendingEditRef = (0, react.useRef)(null); ++ (0, react.useEffect)(() => { ++ const el = inputRef.current; ++ if (el === null) return; ++ const onBeforeInput = (e) => { ++ if (!e.inputType.startsWith("insert") && !e.inputType.startsWith("delete")) { ++ pendingEditRef.current = null; ++ return; ++ } ++ const { start, end } = selectionOf(el); ++ pendingEditRef.current = { ++ start, ++ end, ++ draftLength: el.value.length, ++ inputType: e.inputType ++ }; ++ }; ++ el.addEventListener("beforeinput", onBeforeInput); ++ return () => { ++ el.removeEventListener("beforeinput", onBeforeInput); ++ }; ++ }, []); ++ const onKeyDown = (e) => { ++ if (workspaceTrigger) { ++ if (e.key === "Enter" || e.key === " ") { ++ e.preventDefault(); ++ onRequestWorkspace(); ++ } ++ return; ++ } ++ if (input === void 0 || keyboard === void 0 || inputActions === void 0) return; ++ if (e.key === "Enter" && e.shiftKey) return; ++ const composing = composingRef.current || e.nativeEvent.isComposing || e.nativeEvent.keyCode === 229; ++ if (!composing && !machineBusy && !locked && (e.key === "Backspace" || e.key === "Delete")) { ++ const selection = selectionOf(e.currentTarget); ++ if (selection.start === selection.end) { ++ const occurrence = input.occurrences.find((o) => e.key === "Backspace" ? o.offset + o.length === selection.start : o.offset === selection.start); ++ if (occurrence !== void 0) { ++ e.preventDefault(); ++ const start = occurrence.offset; ++ const end = occurrence.offset + occurrence.length; ++ keyboard.setDraft(draft.slice(0, start) + draft.slice(end), { ++ start, ++ end, ++ insertedLength: 0 ++ }); ++ restoreCaret(e.currentTarget, start); ++ keyboard.track(keyboard.snapshot.draft, start); ++ return; ++ } ++ } ++ } ++ if (e.key === "ArrowUp" || e.key === "ArrowDown") { ++ if (keyboard.arbitrate(e.key === "ArrowUp" ? "up" : "down", composing) === "consumed") e.preventDefault(); ++ return; ++ } ++ if (e.key === "Escape") { ++ keyboard.dismissPopup(); ++ if (keyboard.arbitrate("escape", composing) === "consumed") e.preventDefault(); ++ return; ++ } ++ if ((e.metaKey || e.ctrlKey) && (e.key === "z" || e.key === "Z" || e.key === "y")) { ++ e.preventDefault(); ++ if (machineBusy || locked) return; ++ if (e.key === "y" || e.shiftKey) keyboard.redo(); ++ else keyboard.undo(); ++ return; ++ } ++ if (e.key === " ") { ++ if (composing) return; ++ if (keyboard.space()) e.preventDefault(); ++ return; ++ } ++ if (e.key !== "Enter") return; ++ if (composing) return; ++ if (keyboard.arbitrate("enter", composing) !== "pass") { ++ e.preventDefault(); ++ return; ++ } ++ e.preventDefault(); ++ if (e.repeat) return; ++ if (locked || machineBusy) return; ++ const accelerated = e.ctrlKey || e.metaKey; ++ if (accelerated && canSteerQueue) { ++ keyboard.steerQueue(); ++ return; ++ } ++ keyboard.submit(resolveSubmitMode(running, accelerated ? "accelerated" : "enter", subagent === null)); ++ }; ++ const onChange = (e) => { ++ if (keyboard === void 0 || locked) return; ++ if (machineBusy) return; ++ const next = e.target.value; ++ const pending = pendingEditRef.current; ++ pendingEditRef.current = null; ++ safariNativeShrinkRef.current = safari && next.length < draft.length; ++ keyboard.setDraft(next, editRangeOf(pending, draft.length, next.length)); ++ keyboard.track(next, e.target.selectionStart ?? next.length); ++ }; ++ const onCopyOrCut = (e, cut) => { ++ if (input === void 0 || keyboard === void 0) return; ++ const el = e.currentTarget; ++ const { start, end } = selectionOf(el); ++ if (start === end) return; ++ const touched = input.occurrences.filter((o) => o.offset < end && o.offset + o.length > start); ++ if (touched.length === 0 && !cut) return; ++ e.preventDefault(); ++ const copyStart = touched.reduce((value, o) => Math.min(value, o.offset), start); ++ const copyEnd = touched.reduce((value, o) => Math.max(value, o.offset + o.length), end); ++ let text = ""; ++ let cursor = copyStart; ++ for (const o of touched) { ++ text += draft.slice(cursor, o.offset) + o.clipboardText; ++ cursor = o.offset + o.length; ++ } ++ text += draft.slice(cursor, copyEnd); ++ e.clipboardData.setData("text/plain", text); ++ if (cut && !machineBusy && !locked) { ++ keyboard.setDraft(draft.slice(0, copyStart) + draft.slice(copyEnd), { ++ start: copyStart, ++ end: copyEnd, ++ insertedLength: 0 ++ }); ++ restoreCaret(el, copyStart); ++ } ++ }; ++ const onPaste = (e) => { ++ if (keyboard === void 0) return; ++ if (machineBusy || locked) return; ++ const files = Array.from(e.clipboardData.items).filter((item) => item.kind === "file").map((item) => item.getAsFile()).filter((file) => file !== null); ++ if (files.length > 0) intakeImages(files); ++ const text = e.clipboardData.getData("text/plain"); ++ if (text === "") { ++ if (files.length > 0) e.preventDefault(); ++ return; ++ } ++ e.preventDefault(); ++ const el = e.currentTarget; ++ const sel = selectionOf(el); ++ keyboard.pasteBegin(text, sel); ++ const caret = sel.start + text.length; ++ restoreCaret(el, caret); ++ keyboard.track(keyboard.snapshot.draft, caret); ++ }; ++ const intakeImages = (0, react.useCallback)((files) => { ++ if (addImages === void 0 || files.length === 0) return; ++ const rejected = (() => { ++ if (imageLimits !== void 0) { ++ if (files.some((file) => !imageLimits.mediaTypes.includes(file.type))) return addImages(files); ++ if (attachments.length + files.length > imageLimits.maxImagesPerMessage) return t("image.tooMany", { count: imageLimits.maxImagesPerMessage }); ++ if (files.some((file) => file.size > imageLimits.maxImageBytes)) return t("image.fileTooLarge", { size: imageSizeText(imageLimits.maxImageBytes) }); ++ if (attachments.reduce((sum, attachment) => sum + attachment.file.size, 0) + files.reduce((sum, file) => sum + file.size, 0) > imageLimits.maxMessageImageBytes) return t("image.totalTooLarge", { size: imageSizeText(imageLimits.maxMessageImageBytes) }); ++ } ++ return addImages(files); ++ })(); ++ if (rejected !== null) showToast(rejected); ++ }, [ ++ addImages, ++ attachments, ++ imageLimits, ++ showToast, ++ t ++ ]); ++ const canAcceptDrop = !locked && !machineBusy && addImages !== void 0; ++ const onSelect = (e) => { ++ if (keyboard !== void 0 && keyboard.snapshot.paste !== void 0) keyboard.invalidatePaste(); ++ }; ++ const keepFocus = (e) => { ++ e.preventDefault(); ++ inputRef.current?.focus({ preventScroll: true }); ++ }; ++ const onToggleCommandMenu = () => { ++ const el = inputRef.current; ++ if (el !== null) toggleCommandMenu?.(selectionOf(el)); ++ }; ++ const primaryStops = running && subagent === null; ++ const interruptible = running && continuable; ++ const primaryLabel = primaryStops ? t("input.stop") : t("input.send"); ++ const onPrimary = () => { ++ if (primaryStops) { ++ stop?.(); ++ return; ++ } ++ if (inputActions === void 0) return; ++ /* v8 ignore next -- defensive: the primary button is disabled while empty||disabled, so a click cannot reach the false arm. */ ++ if (!empty && !disabled && !machineBusy) inputActions.submit(); ++ }; ++ const accessSelect = command === void 0 ? null : (0, react_jsx_runtime.jsx)(PermissionSelect, { ++ value: permissions, ++ locked, ++ command, ++ t ++ }, sessionId); ++ const deco = input === void 0 ? INERT_DECORATIONS : deriveDecorations(input, lexicon); ++ const backdrop = []; ++ { ++ let cursor = 0; ++ const pushPlain = (upTo) => { ++ if (upTo > cursor) backdrop.push(draft.slice(cursor, upTo)); ++ cursor = upTo; ++ }; ++ if (deco.token !== null) { ++ backdrop.push((0, react_jsx_runtime.jsx)("mark", { ++ className: InputBar_module_css_default.hlToken, ++ "data-decoration": "token", ++ children: draft.slice(deco.token.start, deco.token.end) ++ }, "token")); ++ cursor = deco.token.end; ++ } ++ const boundaries = [...deco.chips.map((chip) => ({ ++ at: chip.offset, ++ kind: "chip", ++ chip ++ })), ...deco.textRefs.map((ref, ordinal) => ({ ++ at: ref.start, ++ kind: "text-ref", ++ ref, ++ ordinal ++ }))].sort((a, b) => a.at - b.at); ++ for (const b of boundaries) { ++ if (b.at < cursor) continue; ++ pushPlain(b.at); ++ if (b.kind === "chip") { ++ const chip = b.chip; ++ backdrop.push((0, react_jsx_runtime.jsxs)("span", { ++ className: clsx(InputBar_module_css_default.chip, chip.invalid && InputBar_module_css_default.chipInvalid), ++ "data-decoration": "chip", ++ "data-reference-appearance": chip.appearance, ++ "data-occurrence": chip.occurrenceId, ++ "data-invalid": chip.invalid || void 0, ++ title: chip.label, ++ children: [chip.appearance === void 0 ? chip.text[0] : (0, react_jsx_runtime.jsxs)("span", { ++ className: InputBar_module_css_default.chipTrigger, ++ children: [(0, react_jsx_runtime.jsx)("span", { ++ className: InputBar_module_css_default.chipTriggerGlyph, ++ children: chip.text[0] ++ }), (0, react_jsx_runtime.jsx)(ReferenceIcon, { ++ kind: chip.appearance, ++ size: 16, ++ className: InputBar_module_css_default.chipIcon ++ })] ++ }), (0, react_jsx_runtime.jsx)("span", { children: chip.text.slice(1) })] ++ }, `chip-${chip.occurrenceId}`)); ++ cursor = chip.offset + chip.length; ++ } else { ++ const text = draft.slice(b.ref.start, b.ref.end); ++ backdrop.push((0, react_jsx_runtime.jsx)("mark", { ++ className: InputBar_module_css_default.textRef, ++ "data-decoration": "text-ref", ++ children: b.ref.appearance === "folder" ? (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsxs)("span", { ++ className: InputBar_module_css_default.textRefTrigger, ++ children: [(0, react_jsx_runtime.jsx)("span", { ++ className: InputBar_module_css_default.textRefTriggerGlyph, ++ children: text[0] ++ }), (0, react_jsx_runtime.jsx)(ReferenceIcon, { ++ kind: "folder", ++ size: 16, ++ className: InputBar_module_css_default.textRefIcon ++ })] ++ }), text.slice(1)] }) : text ++ }, `ref-${b.ordinal}`)); ++ cursor = b.ref.end; ++ } ++ } ++ pushPlain(draft.length); ++ if (deco.hint !== null) { ++ const commandName = input?.claim?.token.slice(1).trim() ?? ""; ++ const hintKey = `hint.${commandName === "goal" && hasGoal ? "goal.active" : commandName}`; ++ const translated = t(hintKey); ++ const displayHint = translated !== hintKey ? translated : deco.hint; ++ backdrop.push((0, react_jsx_runtime.jsx)("span", { ++ className: InputBar_module_css_default.hint, ++ "data-decoration": "hint", ++ children: displayHint ++ }, "hint")); ++ } ++ } ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: clsx(InputBar_module_css_default.root, variant === "hero" && InputBar_module_css_default.hero), ++ children: [ ++ toast !== null && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, { ++ text: toast.text, ++ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, {}), ++ anchor: cardRef.current, ++ onDone: dismissToast ++ }, toast.seq), ++ notice?.level === "info" && (0, react_jsx_runtime.jsx)("div", { ++ className: InputBar_module_css_default.notice, ++ role: "status", ++ children: notice.text ++ }), ++ (0, react_jsx_runtime.jsxs)("div", { ++ ref: cardRef, ++ className: clsx(InputBar_module_css_default.card, workspaceTrigger && InputBar_module_css_default.cardWorkspaceTrigger), ++ "data-composer-card": true, ++ onClick: workspaceTrigger ? onRequestWorkspace : void 0, ++ onPointerDown: workspaceTrigger ? (e) => { ++ e.stopPropagation(); ++ } : void 0, ++ children: [ ++ overlay !== void 0 && (0, react_jsx_runtime.jsx)("div", { ++ className: InputBar_module_css_default.overlayAnchor, ++ children: overlay ++ }), ++ accessory !== void 0 && (0, react_jsx_runtime.jsx)("div", { ++ className: InputBar_module_css_default.accessory, ++ children: accessory ++ }), ++ renderSlot("conversation.input.attachments", { ++ attachments, ++ canAcceptDrop, ++ onAddImages: intakeImages, ++ onRemoveImage: (id) => { ++ removeImage?.(id); ++ }, ++ dropLimits: imageLimits === void 0 ? void 0 : { ++ count: imageLimits.maxImagesPerMessage, ++ size: imageSizeText(imageLimits.maxImageBytes) ++ } ++ }), ++ (0, react_jsx_runtime.jsx)("div", { ++ ref: scrollRef, ++ className: InputBar_module_css_default.scroll, ++ "data-input-scroll": true, ++ children: (0, react_jsx_runtime.jsxs)("div", { ++ className: InputBar_module_css_default.grow, ++ children: [ ++ (0, react_jsx_runtime.jsx)("div", { ++ "aria-hidden": true, ++ className: clsx(InputBar_module_css_default.backdrop, textareaDisabled && InputBar_module_css_default.backdropDisabled), ++ "data-input-backdrop": true, ++ "data-disabled": textareaDisabled || void 0, ++ children: backdrop ++ }), ++ (0, react_jsx_runtime.jsx)("textarea", { ++ ref: inputRef, ++ className: InputBar_module_css_default.input, ++ value: draft, ++ disabled: textareaDisabled, ++ readOnly: machineBusy || workspaceTrigger, ++ "aria-label": workspaceTrigger ? t("hero.chooseWorkspace") : void 0, ++ "aria-haspopup": workspaceTrigger ? "menu" : void 0, ++ "aria-expanded": workspaceTrigger ? workspacePickerOpen : void 0, ++ "data-phase": input?.phase ?? "inert", ++ placeholder: placeholder ?? (parentOffline ? t("placeholder.parentOffline") : disabled ? t("placeholder.unavailable") : canSteerQueue ? t("placeholder.steerQueue") : planActive ? t("placeholder.plan") : t("placeholder.default")), ++ rows: 2, ++ onChange, ++ onKeyDown, ++ onSelect, ++ onCopy: (e) => { ++ onCopyOrCut(e, false); ++ }, ++ onCut: (e) => { ++ onCopyOrCut(e, true); ++ }, ++ onPaste, ++ onCompositionStart, ++ onCompositionEnd ++ }), ++ (0, react_jsx_runtime.jsx)("div", { ++ ref: mirrorRef, ++ "aria-hidden": true, ++ className: InputBar_module_css_default.mirror, ++ "data-input-mirror": true, ++ children: `${draft}\n` ++ }) ++ ] ++ }) ++ }), ++ (0, react_jsx_runtime.jsxs)("div", { ++ className: InputBar_module_css_default.row, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: InputBar_module_css_default.tools, ++ children: [ ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("input.commands"), ++ side: "top", ++ delayMs: 500, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: InputBar_module_css_default.add, ++ "aria-label": t("input.commands"), ++ "aria-haspopup": "listbox", ++ "aria-expanded": commandMenuOpen, ++ disabled: locked || toggleCommandMenu === void 0, ++ onMouseDown: keepFocus, ++ onClick: onToggleCommandMenu, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 14 }) ++ }) ++ }), ++ (0, react_jsx_runtime.jsxs)("div", { ++ className: InputBar_module_css_default.modes, ++ children: [accessSelect, renderSlot("conversation.input.plan", { locked })] ++ }), ++ leftItems ++ ] ++ }), (0, react_jsx_runtime.jsxs)("div", { ++ className: InputBar_module_css_default.trailing, ++ children: [ ++ rightItems, ++ renderSlot("conversation.input.model", { locked: modelSeatLocked }), ++ (0, react_jsx_runtime.jsx)(ContextMeter, { ++ useProjection, ++ t ++ }), ++ interruptible && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("input.stop"), ++ side: "top", ++ delayMs: 500, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: InputBar_module_css_default.primary, ++ "aria-label": t("input.stop"), ++ disabled: stop === void 0, ++ onMouseDown: keepFocus, ++ onClick: stop, ++ children: (0, react_jsx_runtime.jsx)("svg", { ++ viewBox: "0 0 16 16", ++ width: "16", ++ height: "16", ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)("rect", { ++ x: "3", ++ y: "3", ++ width: "10", ++ height: "10", ++ rx: "3", ++ fill: "currentColor" ++ }) ++ }) ++ }) ++ }), ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: primaryLabel, ++ side: "top", ++ delayMs: 500, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: InputBar_module_css_default.primary, ++ "aria-label": primaryLabel, ++ disabled: primaryStops ? stop === void 0 : empty || disabled || machineBusy, ++ onMouseDown: keepFocus, ++ onClick: onPrimary, ++ children: primaryStops ? (0, react_jsx_runtime.jsx)("svg", { ++ viewBox: "0 0 16 16", ++ width: "16", ++ height: "16", ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)("rect", { ++ x: "3", ++ y: "3", ++ width: "10", ++ height: "10", ++ rx: "3", ++ fill: "currentColor" ++ }) ++ }) : (0, react_jsx_runtime.jsx)("svg", { ++ viewBox: "0 0 16 16", ++ width: "16", ++ height: "16", ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)("path", { ++ d: "M8.3125 0.980183C8.66767 1.0531 8.97902 1.20418 9.2627 1.43233C9.48724 1.61297 9.73029 1.85793 9.97949 2.10714L14.707 6.83468L13.293 8.24874L9 3.95577V15.0417H7V3.95577L2.70703 8.24874L1.29297 6.83468L6.02051 2.10714C6.26971 1.85793 6.51277 1.61297 6.7373 1.43233C6.97662 1.23986 7.28445 1.04402 7.6875 0.980183C7.8973 0.947006 8.1031 0.95516 8.3125 0.980183Z", ++ fill: "currentColor" ++ }) ++ }) ++ }) ++ }) ++ ] ++ })] ++ }) ++ ] ++ }), ++ footer ++ ] ++ }); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/settings/EnterBehaviorRow.module.css.mjs ++ const css$16 = ".T1PP_q_row{border-bottom:1px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.T1PP_q_rowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.T1PP_q_title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.T1PP_q_desc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.T1PP_q_selector{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:18px;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.T1PP_q_selector:hover{background:var(--dsw-alias-interactive-bg-hover)}.T1PP_q_chevron{flex:none}"; ++ const tagId$16 = "@deepseek-ai/dsh-client-ui-conversation/EnterBehaviorRow.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$16) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$16; ++ tag.textContent = css$16; ++ document.head.appendChild(tag); ++ } ++ var EnterBehaviorRow_module_css_default = { ++ "chevron": "T1PP_q_chevron", ++ "desc": "T1PP_q_desc", ++ "row": "T1PP_q_row", ++ "rowText": "T1PP_q_rowText", ++ "selector": "T1PP_q_selector", ++ "title": "T1PP_q_title" ++ }; ++ //#endregion ++ //#region lib/types/client/settings/EnterBehaviorRow.js ++ /** General Settings row for the Composer's busy-state Enter preference. */ ++ const OPTIONS = [{ ++ id: "queue", ++ label: "settings.enter.queue" ++ }, { ++ id: "steer", ++ label: "settings.enter.steer" ++ }]; ++ /** ++ * Render the busy-state Enter behavior selector. ++ * @param props - composed Settings slot props. ++ * @returns the preference row. ++ */ ++ function EnterBehaviorRow({ useBusyEnter, setBusyEnter, t }) { ++ const behavior = useBusyEnter((value) => value); ++ const [open, setOpen] = (0, react.useState)(false); ++ const selectedLabel = behavior === "queue" ? "settings.enter.queue" : "settings.enter.steer"; ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: EnterBehaviorRow_module_css_default.row, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: EnterBehaviorRow_module_css_default.rowText, ++ children: [(0, react_jsx_runtime.jsx)("div", { ++ className: EnterBehaviorRow_module_css_default.title, ++ children: t("settings.enter.title") ++ }), (0, react_jsx_runtime.jsx)("div", { ++ className: EnterBehaviorRow_module_css_default.desc, ++ children: t("settings.enter.description") ++ })] ++ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, { ++ open, ++ onClose: () => { ++ setOpen(false); ++ }, ++ items: OPTIONS.map((option) => ({ ++ id: option.id, ++ label: t(option.label) ++ })), ++ selectedId: behavior, ++ onSelect: (id) => { ++ setOpen(false); ++ setBusyEnter(id); ++ }, ++ align: "end", ++ portal: true, ++ anchor: (0, react_jsx_runtime.jsxs)("button", { ++ type: "button", ++ className: EnterBehaviorRow_module_css_default.selector, ++ "aria-haspopup": "menu", ++ "aria-expanded": open, ++ onClick: () => { ++ setOpen((value) => !value); ++ }, ++ children: [t(selectedLabel), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { className: EnterBehaviorRow_module_css_default.chevron })] ++ }) ++ })] ++ }); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/MessageItem.module.css.mjs ++ const css$15 = ".gdEzaW_userRow{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.gdEzaW_userStack{flex-direction:column;align-items:flex-end;gap:8px;min-width:0;max-width:min(525px,82%);display:flex}.gdEzaW_bubble{background:var(--dsw-specific-bubble);max-width:100%;color:var(--dsw-alias-label-primary);border-radius:22px;padding:10px 16px;font-size:16px;line-height:24px}.gdEzaW_referenceSummary{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.gdEzaW_contextRow,.gdEzaW_compactionRow{padding:2px 0}.gdEzaW_compactionButton{width:100%;min-width:0;height:24px;color:inherit;font:inherit;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;padding:0;display:flex}.gdEzaW_compactionButton:not(:disabled){cursor:pointer}.gdEzaW_compactionButton:not(:disabled):hover{background:var(--dsw-alias-interactive-bg-hover)}.gdEzaW_compactionLeading{width:16px;height:16px;color:var(--dsw-alias-label-secondary);flex:none;place-items:center;margin-right:6px;display:inline-grid}.gdEzaW_compactionContextIcon,.gdEzaW_compactionDisclosureIcon{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.gdEzaW_compactionDisclosureIcon,.gdEzaW_compactionButton:not(:disabled):hover .gdEzaW_compactionContextIcon,.gdEzaW_compactionButton:not(:disabled):focus-visible .gdEzaW_compactionContextIcon{opacity:0}.gdEzaW_compactionButton:not(:disabled):hover .gdEzaW_compactionDisclosureIcon,.gdEzaW_compactionButton:not(:disabled):focus-visible .gdEzaW_compactionDisclosureIcon{opacity:1}.gdEzaW_compactionTitle{color:var(--dsw-alias-label-primary-dimmed);flex:none;font-size:14px;line-height:24px}.gdEzaW_compactionSep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.gdEzaW_compactionSummary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:14px;line-height:24px;overflow:hidden}.gdEzaW_compactionBody{color:var(--dsw-alias-label-tertiary);padding:4px 0 4px 22px;font-size:14px;line-height:24px}.gdEzaW_retryRow{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px}.gdEzaW_retrySummary{width:fit-content;color:inherit;cursor:pointer;user-select:none;border-radius:3px;align-items:center;gap:7px;padding:2px 0;list-style:none;display:inline-flex}.gdEzaW_retrySummary::-webkit-details-marker{display:none}.gdEzaW_retrySummary:after{content:\"\";opacity:.8;border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;transition:transform .12s;transform:rotate(-45deg)}.gdEzaW_retrySummary:hover{color:var(--dsw-alias-label-secondary)}.gdEzaW_retrySummary:focus-visible{outline:1.5px solid var(--dsw-alias-button-info-fill);outline-offset:2px}.gdEzaW_retryText{color:inherit}.gdEzaW_retryRow[data-active] .gdEzaW_retryText{background:linear-gradient(90deg, var(--dsw-alias-label-tertiary) 0%, var(--dsw-alias-label-tertiary) 40%, var(--dsw-alias-label-secondary) 50%, var(--dsw-alias-label-tertiary) 60%, var(--dsw-alias-label-tertiary) 100%);color:#0000;background-position:100%;background-size:200% 100%;background-clip:text;animation:1.6s ease-in-out infinite gdEzaW_retry-shimmer}.gdEzaW_retryRow[open] .gdEzaW_retrySummary:after{transform:rotate(45deg)}.gdEzaW_retryDetails{overflow-wrap:anywhere;gap:2px;margin-top:3px;padding-left:14px;font-size:12px;line-height:18px;display:grid}.gdEzaW_retryDetailLabel{color:var(--dsw-alias-label-secondary)}.gdEzaW_turnErrorRow{grid-template-columns:10px minmax(0,1fr) auto;align-items:start;gap:8px;padding:2px 0;font-size:13px;line-height:20px;display:grid}.gdEzaW_turnErrorDot{margin-top:5px}.gdEzaW_turnErrorCopy{overflow-wrap:anywhere;min-width:0}.gdEzaW_turnErrorTitle{color:var(--dsw-alias-state-error-primary);margin-right:6px;font-weight:600}.gdEzaW_turnErrorMessage{color:var(--dsw-alias-label-secondary)}.gdEzaW_turnErrorCode{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-markdown-code-block-small)}.gdEzaW_maxTokensTitle{color:var(--dsw-alias-state-warn-primary);margin-right:6px;font-weight:600}@keyframes gdEzaW_retry-shimmer{0%{background-position:100%}to{background-position:0}}@media (prefers-reduced-motion:reduce){.gdEzaW_retryRow[data-active] .gdEzaW_retryText{color:inherit;background:0 0;animation:none}}.gdEzaW_refChip{color:var(--dsw-alias-state-business-primary);white-space:nowrap;vertical-align:baseline;align-items:center;gap:4px;margin:0 2px;font-weight:500;display:inline-flex}.gdEzaW_refIcon{flex:none}"; ++ const tagId$15 = "@deepseek-ai/dsh-client-ui-conversation/MessageItem.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$15) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$15; ++ tag.textContent = css$15; ++ document.head.appendChild(tag); ++ } ++ var MessageItem_module_css_default = { ++ "bubble": "gdEzaW_bubble", ++ "compactionBody": "gdEzaW_compactionBody", ++ "compactionButton": "gdEzaW_compactionButton", ++ "compactionContextIcon": "gdEzaW_compactionContextIcon", ++ "compactionDisclosureIcon": "gdEzaW_compactionDisclosureIcon", ++ "compactionLeading": "gdEzaW_compactionLeading", ++ "compactionRow": "gdEzaW_compactionRow", ++ "compactionSep": "gdEzaW_compactionSep", ++ "compactionSummary": "gdEzaW_compactionSummary", ++ "compactionTitle": "gdEzaW_compactionTitle", ++ "contextRow": "gdEzaW_contextRow", ++ "maxTokensTitle": "gdEzaW_maxTokensTitle", ++ "refChip": "gdEzaW_refChip", ++ "refIcon": "gdEzaW_refIcon", ++ "referenceSummary": "gdEzaW_referenceSummary", ++ "retry-shimmer": "gdEzaW_retry-shimmer", ++ "retryDetailLabel": "gdEzaW_retryDetailLabel", ++ "retryDetails": "gdEzaW_retryDetails", ++ "retryRow": "gdEzaW_retryRow", ++ "retrySummary": "gdEzaW_retrySummary", ++ "retryText": "gdEzaW_retryText", ++ "turnErrorCode": "gdEzaW_turnErrorCode", ++ "turnErrorCopy": "gdEzaW_turnErrorCopy", ++ "turnErrorDot": "gdEzaW_turnErrorDot", ++ "turnErrorMessage": "gdEzaW_turnErrorMessage", ++ "turnErrorRow": "gdEzaW_turnErrorRow", ++ "turnErrorTitle": "gdEzaW_turnErrorTitle", ++ "userRow": "gdEzaW_userRow", ++ "userStack": "gdEzaW_userStack" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/CompactionItem.js ++ /** ++ * The collapsed-by-default compaction marker. ++ * @param props - the marker node off the snapshot cache. ++ * @returns the marker row, with the summary disclosure when one is available. ++ */ ++ const CompactionItem = (0, react.memo)(function CompactionItem({ node, title, fallbackSummary, t }) { ++ const [expanded, setExpanded] = (0, react.useState)(false); ++ const expandable = node.summary !== null; ++ const open = expandable && expanded; ++ const summary = node.shadowedItemCount !== null && node.shadowedTokenCount !== null ? t("message.compaction.completed", { ++ items: node.shadowedItemCount, ++ tokens: node.shadowedTokenCount ++ }) : fallbackSummary ?? (expandable ? t("message.compaction.expand") : t("message.compaction.unavailable")); ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.compactionRow, ++ children: [(0, react_jsx_runtime.jsxs)("button", { ++ type: "button", ++ className: MessageItem_module_css_default.compactionButton, ++ disabled: !expandable, ++ "aria-expanded": expandable ? open : void 0, ++ onClick: () => { ++ setExpanded((value) => !value); ++ }, ++ children: [ ++ (0, react_jsx_runtime.jsxs)("span", { ++ className: MessageItem_module_css_default.compactionLeading, ++ "aria-hidden": true, ++ children: [(0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.compactionContextIcon, ++ "data-compaction-icon": "context", ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutline14, {}) ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.compactionDisclosureIcon, ++ "data-compaction-disclosure": open ? "expanded" : "collapsed", ++ children: open ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {}) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, {}) ++ })] ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.compactionTitle, ++ children: title ?? t("message.compaction") ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.compactionSep, ++ "aria-hidden": true ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.compactionSummary, ++ children: summary ++ }) ++ ] ++ }), open && node.summary !== null && (0, react_jsx_runtime.jsx)("div", { ++ className: MessageItem_module_css_default.compactionBody, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, { text: node.summary }) ++ })] ++ }); ++ }); ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/ContextBody.module.css.mjs ++ const css$14 = ".NM4-hq_text{color:var(--dsw-alias-label-secondary);font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.NM4-hq_fields{border-top:1px solid var(--dsw-alias-line-secondary);flex-direction:column;gap:2px;margin:8px 0 0;padding-top:8px;display:flex}.NM4-hq_field{gap:8px;min-width:0;display:flex}.NM4-hq_fieldKey{min-width:96px;color:var(--dsw-alias-label-caption);flex:none}.NM4-hq_fieldValue{min-width:0;color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;flex:auto;margin:0}.NM4-hq_files{flex-wrap:wrap;gap:4px 12px;margin:0 0 8px;padding:0;list-style:none;display:flex}.NM4-hq_file{align-items:baseline;gap:6px;min-width:0;display:flex}.NM4-hq_filePath{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere}.NM4-hq_fileAction{color:var(--dsw-alias-label-caption)}.NM4-hq_catalogNotice{color:var(--dsw-alias-label-caption);margin:0 0 6px}.NM4-hq_entries{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.NM4-hq_entry{gap:8px;min-width:0;display:flex}.NM4-hq_entryName{color:var(--dsw-alias-label-secondary);flex:none}.NM4-hq_entryDescription{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.NM4-hq_sections{flex-direction:column;gap:8px;margin:0;display:flex}.NM4-hq_section{flex-direction:column;gap:2px;min-width:0;display:flex}.NM4-hq_sectionName{color:var(--dsw-alias-label-caption)}.NM4-hq_sectionText{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.NM4-hq_relaySender{color:var(--dsw-alias-label-caption);overflow-wrap:anywhere;margin:0 0 6px}.NM4-hq_recalls{flex-direction:column;gap:2px;margin:0 0 8px;padding:0;list-style:none;display:flex}.NM4-hq_recall{gap:8px;min-width:0;display:flex}.NM4-hq_recallLabel{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere}.NM4-hq_recallCounts{color:var(--dsw-alias-label-caption);flex:none}"; ++ const tagId$14 = "@deepseek-ai/dsh-client-ui-conversation/ContextBody.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$14) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$14; ++ tag.textContent = css$14; ++ document.head.appendChild(tag); ++ } ++ var ContextBody_module_css_default = { ++ "catalogNotice": "NM4-hq_catalogNotice", ++ "entries": "NM4-hq_entries", ++ "entry": "NM4-hq_entry", ++ "entryDescription": "NM4-hq_entryDescription", ++ "entryName": "NM4-hq_entryName", ++ "field": "NM4-hq_field", ++ "fieldKey": "NM4-hq_fieldKey", ++ "fieldValue": "NM4-hq_fieldValue", ++ "fields": "NM4-hq_fields", ++ "file": "NM4-hq_file", ++ "fileAction": "NM4-hq_fileAction", ++ "filePath": "NM4-hq_filePath", ++ "files": "NM4-hq_files", ++ "recall": "NM4-hq_recall", ++ "recallCounts": "NM4-hq_recallCounts", ++ "recallLabel": "NM4-hq_recallLabel", ++ "recalls": "NM4-hq_recalls", ++ "relaySender": "NM4-hq_relaySender", ++ "section": "NM4-hq_section", ++ "sectionName": "NM4-hq_sectionName", ++ "sectionText": "NM4-hq_sectionText", ++ "sections": "NM4-hq_sections", ++ "text": "NM4-hq_text" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/ContextBody.js ++ /** Model-facing text stays bounded at the disclosure, not at the producer. */ ++ const MAX_CHARS = 2e4; ++ /** Rows a list body materializes before summarizing the remainder. */ ++ const MAX_ENTRIES = 200; ++ /** One durable source narrowed to the readable-record shape; null for anything else. */ ++ function asRecord(value) { ++ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null; ++ } ++ /** ++ * The content blocks as runs, IN THE ORDER the model received them. ++ * ++ * Adjacent text blocks join with no separator, matching how provider adapters ++ * flatten them — inserting a line break would show the reader a line the model ++ * never saw. An unknown block breaks the run and keeps its own fallback rather ++ * than being hoisted past the text around it or vanishing; the block union is ++ * merge-extensible, so a foreign log may interleave shapes this build does not ++ * know. ++ */ ++ function contentRuns(content) { ++ const runs = []; ++ for (const block of content) { ++ if (block.type !== "text") { ++ runs.push({ block }); ++ continue; ++ } ++ const last = runs[runs.length - 1]; ++ if (last !== void 0 && "text" in last) last.text += block.text; ++ else runs.push({ text: block.text }); ++ } ++ return runs; ++ } ++ /** Only the blocks this UI version does not know, for bodies that replace the text. */ ++ function unknownBlocks(content) { ++ return contentRuns(content).flatMap((run) => "block" in run ? [run.block] : []); ++ } ++ /** The model-facing text, truncated to the display bound. */ ++ function boundedText(text, t) { ++ return text.length > MAX_CHARS ? `${text.slice(0, MAX_CHARS)}\n${t("json.truncated", { total: text.length })}` : text; ++ } ++ /** ++ * One source field rendered as a value row; nested shapes stay compact JSON. ++ * Bounded on its own, because source fields are as unbounded as the text: an unknown ++ * producer may record an arbitrarily large string or array. ++ */ ++ function fieldValue(value, t) { ++ return boundedText(typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? String(value) : JSON.stringify(value), t); ++ } ++ /** ++ * Source fields as a key/value list. `kind` is always omitted because the ++ * row header already names the producer. `form` is omitted only when a ++ * dedicated body rendered for it — then the presentation the reader is looking ++ * at IS that value. On the opaque fallback the declaration is kept, because ++ * that is the one place a form this version cannot present would otherwise ++ * disappear from the UI entirely. ++ */ ++ function SourceFields({ source, formRendered, t }) { ++ const record = asRecord(source); ++ if (record === null) return null; ++ const hidden = formRendered ? ["kind", "form"] : ["kind"]; ++ const rows = Object.entries(record).filter(([key]) => !hidden.includes(key)); ++ if (rows.length === 0) return null; ++ return (0, react_jsx_runtime.jsx)("dl", { ++ className: ContextBody_module_css_default.fields, ++ "data-context-fields": true, ++ children: rows.map(([key, value]) => (0, react_jsx_runtime.jsxs)("div", { ++ className: ContextBody_module_css_default.field, ++ children: [(0, react_jsx_runtime.jsx)("dt", { ++ className: ContextBody_module_css_default.fieldKey, ++ children: key ++ }), (0, react_jsx_runtime.jsx)("dd", { ++ className: ContextBody_module_css_default.fieldValue, ++ children: fieldValue(value, t) ++ })] ++ }, key)) ++ }); ++ } ++ /** ++ * Content blocks this UI version does not know, kept visible rather than ++ * dropped: the block union is merge-extensible, so a newer or foreign log may ++ * carry a shape this build has no presentation for. ++ * @param props - The unrecognized blocks and the locale seat. ++ * @returns One generic JSON block per unknown entry. ++ */ ++ function UnknownBlocks({ blocks, t }) { ++ return (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: blocks.map((block, index) => (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, { ++ label: t("message.unknownBlock"), ++ payload: block, ++ truncatedLabel: (total) => t("json.truncated", { total }) ++ }, index)) }); ++ } ++ /** ++ * The model-facing content of one context, shared by every form that shows it: ++ * the text with its real line breaks, then any block this UI version does not ++ * know, which keeps its own fallback rather than vanishing. ++ * @param props - Durable content and the locale seat. ++ * @returns The content blocks as the model received them. ++ */ ++ function ModelFacingContent({ content, t }) { ++ return (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: contentRuns(content).map((run, index) => "text" in run ? run.text !== "" && (0, react_jsx_runtime.jsx)("pre", { ++ className: ContextBody_module_css_default.text, ++ "data-context-text": true, ++ children: boundedText(run.text, t) ++ }, index) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, { ++ label: t("message.unknownBlock"), ++ payload: run.block, ++ truncatedLabel: (total) => t("json.truncated", { total }) ++ }, index)) }); ++ } ++ /** ++ * Default presentation: the model-facing text as text, with its real line ++ * breaks, and the remaining source fields beneath it. This is what every form ++ * this UI version does not recognize renders as. ++ * @param props - Durable content, its source, and the locale seat. ++ * @returns The opaque context body. ++ */ ++ function OpaqueBody({ content, source, t }) { ++ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(ModelFacingContent, { ++ content, ++ t ++ }), (0, react_jsx_runtime.jsx)(SourceFields, { ++ source, ++ formRendered: false, ++ t ++ })] }); ++ } ++ /** ++ * Instruction changes read off the source, or null when the record is not a ++ * usable instruction list. ++ * ++ * The read is all-or-nothing: silently dropping one unreadable entry would show ++ * a confident, incomplete file list for a log this version cannot fully read. ++ * Paths are deduplicated in first-seen order, matching how the header label is ++ * derived from the same array. ++ */ ++ function instructionChanges(source) { ++ const record = asRecord(source); ++ const list = record === null ? void 0 : record["changes"]; ++ if (!Array.isArray(list)) return null; ++ const changes = []; ++ const seen = /* @__PURE__ */ new Set(); ++ for (const entry of list) { ++ const change = asRecord(entry); ++ if (change === null) return null; ++ const path = change["path"]; ++ if (typeof path !== "string" || path === "") return null; ++ const action = change["action"]; ++ if (action !== "set" && action !== "replace" && action !== "remove") return null; ++ const digest = change["digest"]; ++ if (seen.has(path)) continue; ++ seen.add(path); ++ changes.push({ ++ action, ++ path, ++ ...typeof digest === "string" ? { digest } : {} ++ }); ++ } ++ return changes.length === 0 ? null : changes; ++ } ++ /** ++ * Locale key for one reconciled file. The baseline loads a file; a later delta ++ * distinguishes a newly reconciled path from a rewritten one, which `set` and ++ * `replace` already separate at the producer. ++ * @param action - the durable change action. ++ * @param baseline - whether this context is the startup/resume baseline. ++ * @returns the key naming what happened to that file. ++ */ ++ function instructionAction(action, baseline) { ++ if (action === "remove") return "message.context.instructions.removed"; ++ if (baseline) return "message.context.instructions.loaded"; ++ return action === "set" ? "message.context.instructions.added" : "message.context.instructions.updated"; ++ } ++ /** ++ * `instructions` form: the files this context reconciled, then their text. ++ * ++ * The text keeps its `` framing verbatim — the framing is part ++ * of what the model read, so hiding it would misreport the request. ++ * @param props - Durable content, its source, and the locale seat. ++ * @returns The instructions context body, or the opaque body when the change ++ * list is unreadable. ++ */ ++ function InstructionsBody({ content, source, t }) { ++ const changes = instructionChanges(source); ++ if (changes === null) return (0, react_jsx_runtime.jsx)(OpaqueBody, { ++ content, ++ source, ++ t ++ }); ++ const baseline = asRecord(source)?.["baseline"] === true; ++ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("ul", { ++ className: ContextBody_module_css_default.files, ++ "data-context-files": true, ++ children: changes.map((change) => (0, react_jsx_runtime.jsxs)("li", { ++ className: ContextBody_module_css_default.file, ++ title: change.digest, ++ children: [(0, react_jsx_runtime.jsx)("span", { ++ className: ContextBody_module_css_default.filePath, ++ children: change.path ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: ContextBody_module_css_default.fileAction, ++ children: t(instructionAction(change.action, baseline)) ++ })] ++ }, change.path)) ++ }), (0, react_jsx_runtime.jsx)(ModelFacingContent, { ++ content, ++ t ++ })] }); ++ } ++ /** ++ * Catalog entries read off the source, or null when the record is not a usable ++ * catalog. All-or-nothing for the same reason as the instruction list: this body ++ * replaces the model-facing text, so a partial list would hide the only complete ++ * account of what the model read. ++ */ ++ function catalogEntries(source) { ++ const record = asRecord(source); ++ const list = record === null ? void 0 : record["entries"]; ++ if (!Array.isArray(list)) return null; ++ const entries = []; ++ for (const item of list) { ++ const entry = asRecord(item); ++ if (entry === null) return null; ++ const name = entry["name"]; ++ const description = entry["description"]; ++ if (typeof name !== "string" || name === "" || typeof description !== "string") return null; ++ entries.push({ ++ name, ++ description ++ }); ++ } ++ return entries; ++ } ++ /** ++ * `catalog` form: the published entries as a list, read from the source rather ++ * than re-parsed out of the model-facing prose. ++ * ++ * A catalog whose source carries no usable entries falls through to the opaque ++ * body, so an older or hand-edited log still shows its text. ++ * @param props - Durable content, its source, and the locale seat. ++ * @returns The catalog context body, or the opaque body when the entry list is ++ * unreadable. ++ */ ++ function CatalogBody({ content, source, t }) { ++ const entries = catalogEntries(source); ++ if (entries === null) return (0, react_jsx_runtime.jsx)(OpaqueBody, { ++ content, ++ source, ++ t ++ }); ++ const update = asRecord(source)?.["update"] === true; ++ const shown = entries.slice(0, MAX_ENTRIES); ++ const rest = unknownBlocks(content); ++ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ ++ update && (0, react_jsx_runtime.jsx)("p", { ++ className: ContextBody_module_css_default.catalogNotice, ++ "data-context-catalog-update": true, ++ children: t("message.context.catalog.replaced") ++ }), ++ (0, react_jsx_runtime.jsx)("ul", { ++ className: ContextBody_module_css_default.entries, ++ "data-context-entries": true, ++ children: shown.map((entry, index) => (0, react_jsx_runtime.jsxs)("li", { ++ className: ContextBody_module_css_default.entry, ++ children: [(0, react_jsx_runtime.jsx)("code", { ++ className: ContextBody_module_css_default.entryName, ++ children: entry.name ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: ContextBody_module_css_default.entryDescription, ++ children: entry.description ++ })] ++ }, index)) ++ }), ++ shown.length < entries.length && (0, react_jsx_runtime.jsx)("p", { ++ className: ContextBody_module_css_default.catalogNotice, ++ "data-context-entries-truncated": true, ++ children: t("message.context.catalog.more", { count: entries.length - shown.length }) ++ }), ++ (0, react_jsx_runtime.jsx)(UnknownBlocks, { ++ blocks: rest, ++ t ++ }) ++ ] }); ++ } ++ /** Snapshot sections read off the source, or null when the record is unusable. */ ++ function snapshotSections(source) { ++ const record = asRecord(source); ++ const list = record === null ? void 0 : record["sections"]; ++ if (!Array.isArray(list)) return null; ++ const sections = []; ++ for (const item of list) { ++ const section = asRecord(item); ++ if (section === null) return null; ++ const name = section["name"]; ++ const text = section["text"]; ++ if (typeof name !== "string" || name === "" || typeof text !== "string") return null; ++ sections.push({ ++ name, ++ text ++ }); ++ } ++ return sections.length === 0 ? null : sections; ++ } ++ /** ++ * `snapshot` form: the named contributions this snapshot assembled, in order. ++ * ++ * The sections are the same bytes the model read, split at the boundaries the ++ * producer assembled them on, so a reader sees which subsystem contributed ++ * which state instead of one undifferentiated wall. ++ * ++ * One sentence of the model-facing text is NOT in any section: the producer's ++ * framing line declaring that this snapshot supersedes earlier ones. Unlike the ++ * `` wrapper an instruction context carries — which wraps ++ * content and cannot be separated from it — that line states the form's own ++ * semantics, so the body states them as a caption instead of reprinting the ++ * joined prose beside the sections it was split from. ++ * @param props - Durable content, its source, and the locale seat. ++ * @returns The snapshot context body, or the opaque body when unreadable. ++ */ ++ function SnapshotBody({ content, source, t }) { ++ const sections = snapshotSections(source); ++ /* v8 ignore next -- contextBody reads the sections before choosing this body. */ ++ if (sections === null) return (0, react_jsx_runtime.jsx)(OpaqueBody, { ++ content, ++ source, ++ t ++ }); ++ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("p", { ++ className: ContextBody_module_css_default.catalogNotice, ++ "data-context-snapshot-supersedes": true, ++ children: t("message.context.snapshot.supersedes") ++ }), (0, react_jsx_runtime.jsx)("dl", { ++ className: ContextBody_module_css_default.sections, ++ "data-context-sections": true, ++ children: sections.map((section, index) => (0, react_jsx_runtime.jsxs)("div", { ++ className: ContextBody_module_css_default.section, ++ children: [(0, react_jsx_runtime.jsx)("dt", { ++ className: ContextBody_module_css_default.sectionName, ++ children: section.name ++ }), (0, react_jsx_runtime.jsx)("dd", { ++ className: ContextBody_module_css_default.sectionText, ++ children: boundedText(section.text, t) ++ })] ++ }, index)) ++ })] }); ++ } ++ /** ++ * `notice` form: what just happened, with the model-facing text beneath it. ++ * ++ * The one-line account also rides the collapsed row ({@link contextBody}), so a ++ * notice is usually readable without expanding at all. ++ * @param props - Durable content, its source, and the locale seat. ++ * @returns The notice context body. ++ */ ++ function NoticeBody({ content, t }) { ++ return (0, react_jsx_runtime.jsx)(ModelFacingContent, { ++ content, ++ t ++ }); ++ } ++ /** ++ * `relay` form: which agent sent this, then what it said. ++ * ++ * The sender is an opaque session id; it is shown as a field rather than a ++ * label, because this client cannot resolve it to a title. ++ * @param props - Durable content, its source, and the locale seat. ++ * @returns The relay context body. ++ */ ++ function RelayBody({ content, source, t }) { ++ const sender = relaySender(source); ++ /* v8 ignore next -- contextBody resolves the sender before choosing this body. */ ++ if (sender === null) return (0, react_jsx_runtime.jsx)(OpaqueBody, { ++ content, ++ source, ++ t ++ }); ++ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("p", { ++ className: ContextBody_module_css_default.relaySender, ++ "data-context-relay-sender": true, ++ children: t("message.context.relay.from", { session: sender }) ++ }), (0, react_jsx_runtime.jsx)(ModelFacingContent, { ++ content, ++ t ++ })] }); ++ } ++ /** The sending agent's session id, or null when the record does not name one. */ ++ function relaySender(source) { ++ const sender = asRecord(source)?.["senderSessionId"]; ++ return typeof sender === "string" && sender !== "" ? sender : null; ++ } ++ /** Recalled sessions read off the source, or null when the record is unusable. */ ++ function recalledSessions(source) { ++ const record = asRecord(source); ++ const list = record === null ? void 0 : record["references"]; ++ if (!Array.isArray(list)) return null; ++ const sessions = []; ++ for (const item of list) { ++ const reference = asRecord(item); ++ if (reference === null) return null; ++ const label = reference["label"]; ++ const retained = reference["retainedMessages"]; ++ const omitted = reference["omittedMessages"]; ++ const truncated = reference["truncated"]; ++ if (typeof label !== "string" || label === "" || typeof retained !== "number" || typeof omitted !== "number" || typeof truncated !== "boolean") return null; ++ sessions.push({ ++ label, ++ retained, ++ omitted, ++ truncated ++ }); ++ } ++ return sessions.length === 0 ? null : sessions; ++ } ++ /** ++ * `recall` form: which sessions this material came from and how much of each ++ * survived the read, then the material itself. ++ * ++ * Completeness is the fact a reader needs first: recalled context is bounded on ++ * the way in, so a card that hid the omitted count would overstate what the ++ * model received. ++ * @param props - Durable content, its source, and the locale seat. ++ * @returns The recall context body, or the opaque body when unreadable. ++ */ ++ function RecallBody({ content, source, t }) { ++ const sessions = recalledSessions(source); ++ if (sessions === null) return (0, react_jsx_runtime.jsx)(OpaqueBody, { ++ content, ++ source, ++ t ++ }); ++ return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("ul", { ++ className: ContextBody_module_css_default.recalls, ++ "data-context-recalls": true, ++ children: sessions.map((session, index) => (0, react_jsx_runtime.jsxs)("li", { ++ className: ContextBody_module_css_default.recall, ++ children: [ ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextBody_module_css_default.recallLabel, ++ children: session.label ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextBody_module_css_default.recallCounts, ++ children: t("message.context.recall.counts", { ++ retained: session.retained, ++ omitted: session.omitted ++ }) ++ }), ++ session.truncated && (0, react_jsx_runtime.jsx)("span", { ++ className: ContextBody_module_css_default.recallCounts, ++ children: t("message.context.recall.truncated") ++ }) ++ ] ++ }, index)) ++ }), (0, react_jsx_runtime.jsx)(ModelFacingContent, { ++ content, ++ t ++ })] }); ++ } ++ /** The one-line account a `notice` puts on its collapsed row, when it records one. */ ++ function noticeSummary(source) { ++ const summary = asRecord(source)?.["summary"]; ++ return typeof summary === "string" && summary !== "" ? summary : null; ++ } ++ /** ++ * Choose the body for one context node. ++ * ++ * Returns the form the body actually rendered as, which is not always the ++ * declared one: a declared form whose fields are unreadable falls back to ++ * opaque, and the caller labels the row with what it really shows. ++ * `summary` is the collapsed row's one-line account, which only a `notice` ++ * records: its whole point is being readable without expanding. ++ * @param form - the producer-declared form projected onto the node. ++ * @param props - durable content, its source, and the locale seat. ++ * @returns the rendered form (null for opaque), its collapsed summary, and its body. ++ */ ++ function contextBody(form, props) { ++ const opaque = { ++ rendered: null, ++ summary: null, ++ body: (0, react_jsx_runtime.jsx)(OpaqueBody, { ...props }) ++ }; ++ switch (form) { ++ case "instructions": return instructionChanges(props.source) === null ? opaque : { ++ rendered: "instructions", ++ summary: null, ++ body: (0, react_jsx_runtime.jsx)(InstructionsBody, { ...props }) ++ }; ++ case "catalog": return catalogEntries(props.source) === null ? opaque : { ++ rendered: "catalog", ++ summary: null, ++ body: (0, react_jsx_runtime.jsx)(CatalogBody, { ...props }) ++ }; ++ case "snapshot": return snapshotSections(props.source) === null ? opaque : { ++ rendered: "snapshot", ++ summary: null, ++ body: (0, react_jsx_runtime.jsx)(SnapshotBody, { ...props }) ++ }; ++ case "notice": { ++ const summary = noticeSummary(props.source); ++ return summary === null ? opaque : { ++ rendered: "notice", ++ summary, ++ body: (0, react_jsx_runtime.jsx)(NoticeBody, { ...props }) ++ }; ++ } ++ case "relay": return relaySender(props.source) === null ? opaque : { ++ rendered: "relay", ++ summary: null, ++ body: (0, react_jsx_runtime.jsx)(RelayBody, { ...props }) ++ }; ++ case "recall": return recalledSessions(props.source) === null ? opaque : { ++ rendered: "recall", ++ summary: null, ++ body: (0, react_jsx_runtime.jsx)(RecallBody, { ...props }) ++ }; ++ case null: return opaque; ++ /* v8 ignore next 4 -- closed-union backstop; the compiler rejects a new ++ KnownContextForm here rather than letting it degrade to opaque silently. */ ++ default: throw new Error(`unreachable context form: ${String(form)}`); ++ } ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/ContextInjectionRow.module.css.mjs ++ const css$13 = ".pC0e7a_root{min-width:0}.pC0e7a_root[data-open]{padding-bottom:4px}.pC0e7a_chevron{color:var(--dsw-alias-label-secondary)}.pC0e7a_sep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.pC0e7a_source{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;font-size:14px;line-height:24px;overflow:hidden}.pC0e7a_summary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:14px;line-height:24px;overflow:hidden}.pC0e7a_body{box-sizing:border-box;background:var(--dsw-alias-markdown-code-block);width:calc(100% - 22px);max-height:141px;color:var(--dsw-alias-label-tertiary);font:400 11px/16px var(--ds-font-family-code);border:none;border-radius:8px;margin:4px 0 0 22px;padding:10px 16px 12px 12px;overflow:auto}"; ++ const tagId$13 = "@deepseek-ai/dsh-client-ui-conversation/ContextInjectionRow.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$13; ++ tag.textContent = css$13; ++ document.head.appendChild(tag); ++ } ++ var ContextInjectionRow_module_css_default = { ++ "body": "pC0e7a_body", ++ "chevron": "pC0e7a_chevron", ++ "root": "pC0e7a_root", ++ "sep": "pC0e7a_sep", ++ "source": "pC0e7a_source", ++ "summary": "pC0e7a_summary" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/ContextInjectionRow.js ++ /** ++ * Render logged context with the Tool calls disclosure chrome from Figma. ++ * ++ * The header names the role the context plays and, beside it, the producer the ++ * durable source identifies, so a reader can tell an injected skill catalog ++ * from a workspace instruction file or a recalled session without expanding. ++ * The expanded body follows the producer-declared form; an absent or unknown ++ * form renders the opaque body. ++ * @param props - Durable content, its projected producer role/name and form, and the locale seat. ++ * @returns A collapsed context row with a bounded, form-specific body. ++ */ ++ function ContextInjectionRow({ content, source, provenance, form, t }) { ++ const [open, setOpen] = (0, react.useState)(false); ++ const { rendered, summary, body } = contextBody(form, { ++ content, ++ source, ++ t ++ }); ++ return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, { ++ className: ContextInjectionRow_module_css_default.root, ++ icon: provenance.role === "recall" ? (0, react_jsx_runtime.jsx)("span", { ++ "data-context-recall-icon": true, ++ children: (0, react_jsx_runtime.jsx)(ReferenceIcon, { kind: "session" }) ++ }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBrowseOutline16, { size: 14 }), ++ chevronClassName: ContextInjectionRow_module_css_default.chevron, ++ title: t(provenance.role === "recall" ? "message.contextRecall" : "message.contextInjection"), ++ collapsedContent: provenance.label === null ? void 0 : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextInjectionRow_module_css_default.sep, ++ "aria-hidden": true ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: ContextInjectionRow_module_css_default.source, ++ "data-context-source": true, ++ children: provenance.label ++ }), ++ summary !== null && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", { ++ className: ContextInjectionRow_module_css_default.sep, ++ "aria-hidden": true ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: ContextInjectionRow_module_css_default.summary, ++ "data-context-summary": true, ++ children: summary ++ })] }) ++ ] }), ++ keepContentWhenOpen: true, ++ open, ++ expandable: true, ++ expandOnRowClick: true, ++ onToggle: () => { ++ setOpen((value) => !value); ++ }, ++ children: (0, react_jsx_runtime.jsx)("div", { ++ className: ContextInjectionRow_module_css_default.body, ++ "data-context-injection-body": true, ++ "data-context-form": rendered ?? void 0, ++ children: body ++ }) ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/chat/use-calendar-day.js ++ /** ++ * Local calendar-day epoch that advances at each local midnight. ++ * @returns Midnight ms for the current local day; updates after the boundary. ++ */ ++ function useCalendarDay() { ++ const [day, setDay] = (0, react.useState)(() => startOfLocalDay(Date.now())); ++ (0, react.useEffect)(() => { ++ let timer; ++ const arm = () => { ++ const now = Date.now(); ++ setDay(startOfLocalDay(now)); ++ timer = setTimeout(arm, msUntilNextLocalMidnight(now)); ++ }; ++ timer = setTimeout(arm, msUntilNextLocalMidnight(Date.now())); ++ return () => { ++ clearTimeout(timer); ++ }; ++ }, []); ++ return day; ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/MessageIconActions.module.css.mjs ++ const css$12 = ".p-xYUq_actions{align-items:center;gap:10px;height:28px;display:flex}.p-xYUq_timeStart{color:var(--dsw-alias-label-tertiary);white-space:nowrap;padding-right:12px;font-size:14px;line-height:24px}.p-xYUq_timeEnd{color:var(--dsw-alias-label-tertiary);white-space:nowrap;padding-left:12px;font-size:14px;line-height:24px}.p-xYUq_runTimeDot{margin:0 10px}@media (hover:hover){[data-time-hover-root] :is(.p-xYUq_timeStart,.p-xYUq_timeEnd){opacity:0;transition:opacity 80ms}[data-time-hover-root]:hover :is(.p-xYUq_timeStart,.p-xYUq_timeEnd),[data-time-hover-root]:focus-within :is(.p-xYUq_timeStart,.p-xYUq_timeEnd){opacity:1}}.p-xYUq_action{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:28px;justify-content:center;align-items:center;padding:6px;display:inline-flex}.p-xYUq_action:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.p-xYUq_action[data-unavailable]{cursor:default;opacity:.4}.p-xYUq_action[data-unavailable]:hover{color:var(--dsw-alias-label-tertiary);background:0 0}.p-xYUq_visuallyHidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}"; ++ const tagId$12 = "@deepseek-ai/dsh-client-ui-conversation/MessageIconActions.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$12) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$12; ++ tag.textContent = css$12; ++ document.head.appendChild(tag); ++ } ++ var MessageIconActions_module_css_default = { ++ "action": "p-xYUq_action", ++ "actions": "p-xYUq_actions", ++ "runTimeDot": "p-xYUq_runTimeDot", ++ "timeEnd": "p-xYUq_timeEnd", ++ "timeStart": "p-xYUq_timeStart", ++ "visuallyHidden": "p-xYUq_visuallyHidden" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/MessageIconActions.js ++ /** ++ * Copy / branch (/ clock) IconActions row shared by user and assistant chrome. ++ * @param props - Copy text, event time, clock side, branch callback, className. ++ * @returns The actions row element. ++ */ ++ function MessageIconActions({ text, time, runMs, ttftMs, tokensPerSecond, clock, onBranch, branchUnavailable = false, className, extraActions, t }) { ++ const day = useCalendarDay(); ++ const reasonId = (0, react.useId)(); ++ const [copied, setCopied] = (0, react.useState)(false); ++ const copyPending = (0, react.useRef)(false); ++ const copyTimer = (0, react.useRef)(null); ++ const copyEpoch = (0, react.useRef)(0); ++ (0, react.useEffect)(() => () => { ++ copyEpoch.current += 1; ++ copyPending.current = false; ++ if (copyTimer.current !== null) clearTimeout(copyTimer.current); ++ }, []); ++ const onCopy = (0, react.useCallback)(() => { ++ if (copied || copyPending.current) return; ++ const epoch = copyEpoch.current; ++ copyPending.current = true; ++ (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(text).then((ok) => { ++ if (epoch !== copyEpoch.current) return; ++ copyPending.current = false; ++ if (!ok) return; ++ setCopied(true); ++ copyTimer.current = window.setTimeout(() => { ++ copyTimer.current = null; ++ setCopied(false); ++ }, 1e3); ++ }); ++ }, [copied, text]); ++ const clockEl = time === void 0 ? null : (0, react_jsx_runtime.jsxs)("span", { ++ className: clock === "start" ? MessageIconActions_module_css_default.timeStart : MessageIconActions_module_css_default.timeEnd, ++ children: [ ++ formatMessageClock(time, t, day), ++ runMs !== void 0 && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ ++ " ", ++ (0, react_jsx_runtime.jsx)("span", { ++ className: MessageIconActions_module_css_default.runTimeDot, ++ "aria-hidden": true, ++ children: "·" ++ }), ++ " ", ++ t("message.ranFor", { duration: formatRunDuration(runMs, t) }) ++ ] }), ++ ttftMs !== void 0 && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ ++ " ", ++ (0, react_jsx_runtime.jsx)("span", { ++ className: MessageIconActions_module_css_default.runTimeDot, ++ "aria-hidden": true, ++ children: "·" ++ }), ++ " ", ++ t("message.ttft", { seconds: formatLatencySeconds(ttftMs) }) ++ ] }), ++ tokensPerSecond !== void 0 && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ ++ " ", ++ (0, react_jsx_runtime.jsx)("span", { ++ className: MessageIconActions_module_css_default.runTimeDot, ++ "aria-hidden": true, ++ children: "·" ++ }), ++ " ", ++ t("message.tokensPerSecond", { tps: formatTokensPerSecond(tokensPerSecond) }) ++ ] }) ++ ] ++ }); ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: className === void 0 ? MessageIconActions_module_css_default.actions : `${MessageIconActions_module_css_default.actions} ${className}`, ++ children: [ ++ clock === "start" ? clockEl : null, ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: copied ? t("copied") : t("copy"), ++ side: "bottom", ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: MessageIconActions_module_css_default.action, ++ "aria-label": copied ? t("copied") : t("copy"), ++ onClick: onCopy, ++ children: copied ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, {}) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCopyOutline16, {}) ++ }) ++ }), ++ extraActions, ++ onBranch !== void 0 && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: branchUnavailable ? t("message.branchUnavailable") : t("message.branch"), ++ side: "bottom", ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: MessageIconActions_module_css_default.action, ++ "aria-label": t("message.branch"), ++ "aria-disabled": branchUnavailable || void 0, ++ "aria-describedby": branchUnavailable ? reasonId : void 0, ++ "data-unavailable": branchUnavailable || void 0, ++ onClick: branchUnavailable ? void 0 : onBranch, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconBranchOutline16, {}) ++ }) ++ }), ++ onBranch !== void 0 && branchUnavailable && (0, react_jsx_runtime.jsx)("span", { ++ id: reasonId, ++ className: MessageIconActions_module_css_default.visuallyHidden, ++ children: t("message.branchUnavailable") ++ }), ++ clock === "end" ? clockEl : null ++ ] ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/chat/MessageItem.js ++ function contentParts(content) { ++ const texts = []; ++ const images = []; ++ const rest = []; ++ for (const block of content) { ++ const b = block; ++ if (b.type === "text" && typeof b.text === "string") texts.push(b.text); ++ else if (b.type === "image" && b.attachment !== void 0) images.push({ attachment: b.attachment }); ++ else rest.push(block); ++ } ++ return { ++ text: texts.join(""), ++ images, ++ rest ++ }; ++ } ++ function retrySeconds(milliseconds) { ++ return Math.max(1, Math.ceil(milliseconds / 1e3)); ++ } ++ function ModelRetryItem({ node, active, t }) { ++ const deadline = (0, react.useMemo)(() => Date.now() + node.delayMs, [node.delayMs, node.seq]); ++ const scheduledSeconds = retrySeconds(node.delayMs); ++ const maximum = node.mode === "normal" ? node.maxRetries : "∞"; ++ const [countdown, setCountdown] = (0, react.useState)(() => ({ ++ deadline, ++ seconds: retrySeconds(deadline - Date.now()) ++ })); ++ const remainingSeconds = countdown.deadline === deadline ? countdown.seconds : retrySeconds(deadline - Date.now()); ++ (0, react.useEffect)(() => { ++ if (!active) return; ++ const updateCountdown = () => { ++ const next = retrySeconds(deadline - Date.now()); ++ setCountdown((current) => current.deadline === deadline && current.seconds === next ? current : { ++ deadline, ++ seconds: next ++ }); ++ return next; ++ }; ++ if (updateCountdown() === 1) return; ++ const timer = window.setInterval(() => { ++ if (updateCountdown() === 1) window.clearInterval(timer); ++ }, 250); ++ return () => { ++ window.clearInterval(timer); ++ }; ++ }, [active, deadline]); ++ const label = active ? t("message.retry.active") : node.retryState === "cancelled" ? t("message.retry.cancelled") : node.retryState === "started" ? t("message.retry.started") : t("message.retry.scheduled"); ++ const seconds = active ? remainingSeconds : scheduledSeconds; ++ return (0, react_jsx_runtime.jsxs)("details", { ++ className: MessageItem_module_css_default.retryRow, ++ "data-active": active || void 0, ++ children: [(0, react_jsx_runtime.jsx)("summary", { ++ className: MessageItem_module_css_default.retrySummary, ++ children: (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.retryText, ++ role: "status", ++ children: t("message.retry.status", { ++ label, ++ retry: node.retry, ++ maximum, ++ seconds ++ }) ++ }) ++ }), (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.retryDetails, ++ children: [(0, react_jsx_runtime.jsxs)("div", { children: [ ++ (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.retryDetailLabel, ++ children: t("message.retry.delay") ++ }), ++ Math.round(node.delayMs), ++ "ms" ++ ] }), (0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.retryDetailLabel, ++ children: t("message.retry.failure") ++ }), node.failure.message] })] ++ })] ++ }); ++ } ++ /** Persistent, turn-positioned feedback for a terminal failure. */ ++ function TurnErrorItem({ node, t }) { ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.turnErrorRow, ++ role: "status", ++ children: [ ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { ++ state: "error", ++ className: MessageItem_module_css_default.turnErrorDot ++ }), ++ (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.turnErrorCopy, ++ children: [(0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.turnErrorTitle, ++ children: t("message.turnError") ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.turnErrorMessage, ++ children: node.message ++ })] ++ }), ++ node.code !== void 0 && (0, react_jsx_runtime.jsx)("code", { ++ className: MessageItem_module_css_default.turnErrorCode, ++ children: node.code ++ }) ++ ] ++ }); ++ } ++ /** Persistent, turn-positioned notice for a turn ended at the output-token cap. */ ++ function TurnMaxTokensItem({ t }) { ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.turnErrorRow, ++ role: "status", ++ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { ++ state: "warning", ++ className: MessageItem_module_css_default.turnErrorDot ++ }), (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.turnErrorCopy, ++ children: [(0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.maxTokensTitle, ++ children: t("message.maxTokens") ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: MessageItem_module_css_default.turnErrorMessage, ++ children: t("message.maxTokens.hint") ++ })] ++ })] ++ }); ++ } ++ /** ++ * Display projection of reference forms in a user bubble (free geometry — no ++ * textarea alignment constraint here); everything else stays plain text. The ++ * logged model text remains the single truth; this is presentation only. ++ * Plain-text `/name` / `@name` word-boundary tokens decorate (the sent text ++ * IS the reference — the bubble uses the same plainest token ++ * scan as the composer, minus the lexicon: sent tokens were validated at ++ * compose time, so shape alone decorates). ++ */ ++ function projectUserText(text, sessionLabels) { ++ const ranges = []; ++ for (const rawLabel of [...new Set(sessionLabels)].sort((a, b) => b.length - a.length)) { ++ const label = `@${rawLabel}`; ++ let start = text.indexOf(label); ++ while (start >= 0) { ++ ranges.push({ ++ start, ++ end: start + label.length, ++ label, ++ kind: "session" ++ }); ++ start = text.indexOf(label, start + label.length); ++ } ++ } ++ const re = /(^|\s)(\/[\w-]+|@"[^"\n]+"|@[^\s]+)/gu; ++ let m; ++ while ((m = re.exec(text)) !== null) { ++ const tokenStart = m.index + (m[1]?.length ?? 0); ++ const rawLabel = m[2] ?? ""; ++ const label = rawLabel.startsWith("@\"") ? rawLabel : rawLabel.replace(/[.,;:!?,。;:!?]+$/gu, ""); ++ if (label.length <= 1) continue; ++ ranges.push({ ++ start: tokenStart, ++ end: tokenStart + label.length, ++ label, ++ kind: "plain" ++ }); ++ } ++ ranges.sort((a, b) => a.start - b.start || (a.kind === b.kind ? b.end - a.end : a.kind === "session" ? -1 : 1)); ++ const parts = []; ++ let cursor = 0; ++ for (const range of ranges) { ++ if (range.start < cursor) continue; ++ const { start: tokenStart, end, label, kind } = range; ++ if (tokenStart > cursor) parts.push((0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MessageText, { text: text.slice(cursor, tokenStart) }, cursor)); ++ const referenceKind = kind === "session" ? "session" : label.startsWith("@") ? label.endsWith("/") ? "folder" : "file" : void 0; ++ const displayLabel = referenceKind === void 0 ? label : referenceKind === "session" ? label.slice(1) : label.slice(1).replace(/^"|"$/gu, "").split(/[\\/]/u).filter(Boolean).at(-1) ?? label.slice(1); ++ parts.push((0, react_jsx_runtime.jsxs)("span", { ++ className: MessageItem_module_css_default.refChip, ++ "data-ref-chip": referenceKind ?? "skill", ++ title: label, ++ children: [referenceKind !== void 0 && (0, react_jsx_runtime.jsx)(ReferenceIcon, { ++ kind: referenceKind, ++ size: 16, ++ className: MessageItem_module_css_default.refIcon ++ }), displayLabel] ++ }, tokenStart)); ++ cursor = end; ++ } ++ if (parts.length === 0) return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MessageText, { text }); ++ if (cursor < text.length) parts.push((0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MessageText, { text: text.slice(cursor) }, cursor)); ++ return (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: parts }); ++ } ++ /** Right-aligned bubble shared by user and steering rows. */ ++ function UserStyleBubble({ content, renderMessageImages, actions, pending = false, referenceLabels = [], t }) { ++ const { text, images, rest } = contentParts(content); ++ const truncated = (total) => t("json.truncated", { total }); ++ const showBubble = text !== "" || rest.length > 0; ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.userRow, ++ "data-pending-steering": pending || void 0, ++ "data-time-hover-root": true, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.userStack, ++ children: [ ++ renderMessageImages({ ++ images, ++ align: "end" ++ }), ++ showBubble && (0, react_jsx_runtime.jsxs)("div", { ++ className: MessageItem_module_css_default.bubble, ++ children: [projectUserText(text, referenceLabels), rest.map((block, i) => (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, { ++ label: t("message.extraBlock"), ++ payload: block, ++ truncatedLabel: truncated ++ }, i))] ++ }), ++ referenceLabels.length > 0 && (0, react_jsx_runtime.jsx)("div", { ++ className: MessageItem_module_css_default.referenceSummary, ++ children: t("message.referenceSummary", { labels: referenceLabels.join(t("message.referenceSeparator")) }) ++ }) ++ ] ++ }), actions?.(text)] ++ }); ++ } ++ /** ++ * Render one Host-authoritative pending steering item with the same visual ++ * language as its eventual durable transcript node. ++ * @param props - Pending message content and conversation translator. ++ * @returns the pending steering bubble. ++ */ ++ function PendingSteeringBubble({ content, renderMessageImages, t }) { ++ return (0, react_jsx_runtime.jsx)(UserStyleBubble, { ++ content, ++ renderMessageImages, ++ pending: true, ++ t, ++ actions: (text) => (0, react_jsx_runtime.jsx)(MessageIconActions, { ++ text, ++ clock: "start", ++ className: MessageItem_module_css_default.actions, ++ t ++ }) ++ }); ++ } ++ /** User and admitted-steering keyed Chat renderer. */ ++ const UserMessageNodeView = (0, react.memo)(function UserMessageNodeView({ node, renderMessageImages, t }) { ++ const data = node.data; ++ return (0, react_jsx_runtime.jsx)(UserStyleBubble, { ++ content: data.content, ++ renderMessageImages, ++ ...data.referenceLabels === void 0 ? {} : { referenceLabels: data.referenceLabels }, ++ t, ++ actions: (text) => (0, react_jsx_runtime.jsx)(MessageIconActions, { ++ text, ++ time: data.time, ++ clock: "start", ++ className: MessageItem_module_css_default.actions, ++ t ++ }) ++ }); ++ }); ++ /** Injected-context keyed Chat renderer. */ ++ const ContextMessageNodeView = (0, react.memo)(function ContextMessageNodeView({ node, t }) { ++ const data = node.data; ++ return (0, react_jsx_runtime.jsx)(ContextInjectionRow, { ++ content: data.content, ++ source: data.source, ++ provenance: data.provenance, ++ form: data.form, ++ t ++ }); ++ }); ++ /** Automatic compaction keyed Chat renderer. */ ++ const CompactionNodeView = (0, react.memo)(function CompactionNodeView({ node, t }) { ++ return (0, react_jsx_runtime.jsx)(CompactionItem, { ++ node: node.data, ++ t ++ }); ++ }); ++ /** Correlated retry-chain keyed Chat renderer. */ ++ const RetryNodeView = (0, react.memo)(function RetryNodeView({ node, t }) { ++ const data = node.data; ++ return (0, react_jsx_runtime.jsx)(ModelRetryItem, { ++ node: data.current, ++ active: data.current.retryState === "scheduled", ++ t ++ }); ++ }); ++ /** Terminal turn-error keyed Chat renderer. */ ++ const TurnErrorNodeView = (0, react.memo)(function TurnErrorNodeView({ node, t }) { ++ return (0, react_jsx_runtime.jsx)(TurnErrorItem, { ++ node: node.data, ++ t ++ }); ++ }); ++ /** Max-tokens turn-end notice keyed Chat renderer. */ ++ const TurnMaxTokensNodeView = (0, react.memo)(function TurnMaxTokensNodeView({ t }) { ++ return (0, react_jsx_runtime.jsx)(TurnMaxTokensItem, { t }); ++ }); ++ /** Explicit unknown-surface keyed Chat renderer. */ ++ const UnknownNodeView = (0, react.memo)(function UnknownNodeView({ node, t }) { ++ const data = node.data; ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: MessageItem_module_css_default.contextRow, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, { ++ label: t("message.unknownSurface", { type: data.type }), ++ payload: data.data, ++ truncatedLabel: (total) => t("json.truncated", { total }) ++ }) ++ }); ++ }); ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/ChatView.module.css.mjs ++ const css$11 = ".Md3f7G_root{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.Md3f7G_scroll{min-height:0;padding:16px calc(var(--dsh-composer-side-clearance) + 16px);flex:auto;overflow-y:auto;container-type:inline-size}[data-conversation-scroll] .Md3f7G_root{flex:none;height:auto;min-height:auto}[data-conversation-scroll] .Md3f7G_scroll{flex:none;min-height:auto;overflow:visible}.Md3f7G_column{max-width:var(--dsh-chat-content-width);flex-direction:column;gap:16px;width:100%;margin:0 auto;display:flex}.Md3f7G_flowItem{min-width:0}.Md3f7G_flowItem:empty{display:none}.Md3f7G_callRow{border-radius:6px}.Md3f7G_turnStatus{height:26px;font:var(--dsw-font-s-strong-14);white-space:nowrap;background:linear-gradient(90deg, var(--dsw-static-deepseek-500) 0%, var(--dsw-static-deepseek-500) 40%, var(--dsw-static-deepseek-200) 50%, var(--dsw-static-deepseek-500) 60%, var(--dsw-static-deepseek-500) 100%);color:#0000;-webkit-text-fill-color:transparent;background-position:100% 0;background-size:250% 100%;-webkit-background-clip:text;background-clip:text;flex:none;align-self:flex-start;align-items:center;animation:1.8s linear infinite Md3f7G_dsh-turn-status-shimmer;display:inline-flex}.Md3f7G_turnStatusClock{font:var(--dsw-font-xs-13);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-caption);-webkit-text-fill-color:var(--dsw-alias-label-caption);margin-left:8px;font-weight:400}@keyframes Md3f7G_dsh-turn-status-shimmer{to{background-position:0 0}}@media (prefers-reduced-motion:reduce){.Md3f7G_turnStatus{background-position:0 0;background-size:100% 100%;animation:none}}.Md3f7G_hint{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.Md3f7G_openError{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}.Md3f7G_older{justify-content:center;display:flex}.Md3f7G_older button{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover-solid);cursor:pointer;border:none;border-radius:14px;padding:4px 12px;font-size:12px}.Md3f7G_older button:disabled{cursor:default;opacity:.6}.Md3f7G_toBottomSlot{z-index:8;height:0;padding-right:max(0px, calc((100% - var(--dsh-chat-content-width)) / 2));pointer-events:none;justify-content:flex-end;display:flex;position:sticky;bottom:16px}[data-conversation-scroll] .Md3f7G_toBottomSlot{bottom:calc(var(--dsh-composer-height,152px) + 16px)}.Md3f7G_toBottom{border:1px solid var(--dsw-alias-border-l2);width:34px;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-button-floating-fill);box-shadow:var(--dsw-shadow-lv2);cursor:pointer;pointer-events:auto;border-radius:100px;justify-content:center;align-items:center;margin-top:-34px;padding:0;display:flex}.Md3f7G_toBottom:hover{background:var(--dsw-alias-button-floating-hover)}.Md3f7G_modalAction{min-width:72px}"; ++ const tagId$11 = "@deepseek-ai/dsh-client-ui-conversation/ChatView.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$11) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$11; ++ tag.textContent = css$11; ++ document.head.appendChild(tag); ++ } ++ var ChatView_module_css_default = { ++ "callRow": "Md3f7G_callRow", ++ "column": "Md3f7G_column", ++ "dsh-turn-status-shimmer": "Md3f7G_dsh-turn-status-shimmer", ++ "flowItem": "Md3f7G_flowItem", ++ "hint": "Md3f7G_hint", ++ "modalAction": "Md3f7G_modalAction", ++ "older": "Md3f7G_older", ++ "openError": "Md3f7G_openError", ++ "root": "Md3f7G_root", ++ "scroll": "Md3f7G_scroll", ++ "toBottom": "Md3f7G_toBottom", ++ "toBottomSlot": "Md3f7G_toBottomSlot", ++ "turnStatus": "Md3f7G_turnStatus", ++ "turnStatusClock": "Md3f7G_turnStatusClock" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/ChatNodeSeat.js ++ /** Subscribe and dispatch one stable Context key without observing sibling Nodes. */ ++ const ChatNodeSeat = (0, react.memo)(function ChatNodeSeat({ nodeKey, selectedCallId, cwd, openFile, inspectCall, forkAt, renderMessageImages, fileMentions, useSession, renderSlot, t }) { ++ const node = useSession((snapshot) => snapshot.chat.nodes.get(nodeKey)); ++ const routedNode = node; ++ const owner = (0, react.useMemo)(() => node === void 0 ? null : { ++ selectedCallId, ++ cwd, ++ openFile, ++ inspectCall, ++ forkAt, ++ renderMessageImages, ++ fileMentions ++ }, [ ++ node, ++ selectedCallId, ++ cwd, ++ openFile, ++ inspectCall, ++ forkAt, ++ renderMessageImages, ++ fileMentions ++ ]); ++ if (routedNode === void 0 || owner === null) return null; ++ const routedOwner = { ++ ...owner, ++ node: routedNode ++ }; ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: ChatView_module_css_default.flowItem, ++ "data-chat-anchor-key": routedNode.key, ++ "data-chat-flow-key": routedNode.key, ++ "data-chat-flow-kind": routedNode.kind, ++ children: renderSlot("conversation.chat.node", routedOwner, { ++ entryKey: routedNode.kind, ++ hookContext: nodeKey, ++ fallback: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, { ++ label: t("message.unknownSurface", { type: routedNode.kind }), ++ payload: routedNode.data, ++ truncatedLabel: (total) => t("json.truncated", { total }) ++ }) ++ }) ++ }); ++ }); ++ //#endregion ++ //#region lib/types/client/chat/ChatView.js ++ /** Active column host when present; otherwise the view-local scroller. */ ++ function scrollerOf(from) { ++ return from.closest("[data-conversation-scroll]") ?? from; ++ } ++ /** Find an already-rendered settled row without interpolating a selector. */ ++ function anchorElement(list, key) { ++ for (const row of list.querySelectorAll("[data-chat-anchor-key]")) if (row.dataset.chatAnchorKey === key) return row; ++ return null; ++ } ++ /** Row position in scrollport coordinates (viewport-independent). */ ++ function flowTop(row, scrollport) { ++ return row.getBoundingClientRect().top - scrollport.getBoundingClientRect().top; ++ } ++ /** Select a visible stable node/call identity, falling back only when layout ++ * has not exposed a visible box yet. */ ++ function pagingAnchor(list, scrollport) { ++ const viewport = scrollport.getBoundingClientRect(); ++ const visibleBottom = scrollport.querySelector("[data-composer-seat]")?.getBoundingClientRect().top ?? viewport.bottom; ++ if (typeof document.elementsFromPoint === "function" && visibleBottom > viewport.top) { ++ const content = list.getBoundingClientRect(); ++ const left = Math.max(viewport.left, content.left); ++ const right = Math.min(viewport.right, content.right); ++ const x = left + Math.max(0, right - left) / 2; ++ const height = visibleBottom - viewport.top; ++ const points = [ ++ 1, ++ Math.min(32, height / 3), ++ height / 2, ++ Math.max(1, height - 1) ++ ]; ++ for (const offset of points) for (const element of document.elementsFromPoint(x, viewport.top + offset)) { ++ const row = element instanceof HTMLElement ? element.closest("[data-chat-anchor-key]") : null; ++ if (row !== null && list.contains(row)) return row; ++ } ++ } ++ const rows = [...list.querySelectorAll("[data-chat-anchor-key]")]; ++ return rows.filter((row) => { ++ const rect = row.getBoundingClientRect(); ++ return rect.bottom > viewport.top && rect.top < visibleBottom; ++ })[0] ?? rows[0] ?? null; ++ } ++ /** Capture a reflow-resistant reader position from the current rendered window. */ ++ function scrollPosition(list, scrollport) { ++ const row = pagingAnchor(list, scrollport); ++ const anchorKey = row?.dataset.chatAnchorKey; ++ if (row === null || anchorKey === void 0) return null; ++ return { ++ anchorKey, ++ anchorTop: flowTop(row, scrollport), ++ scrollTop: scrollport.scrollTop ++ }; ++ } ++ /** Host/OS refusal text for the file-open dialog; empty throws keep a locale fallback. */ ++ function openFailureMessage(error, fallback) { ++ const message = error instanceof Error ? error.message : String(error); ++ return message === "" ? fallback : message; ++ } ++ /** ProducedFiles opens the session workspace as `.`. */ ++ function isFolderOpenPath(path) { ++ return path === "."; ++ } ++ function runningTurnStartTime(timeline) { ++ let latest = null; ++ for (const turn of timeline.turns.values()) if (turn.status === "open" && turn.start !== void 0) latest = turn.start.time; ++ return latest; ++ } ++ /** Turn-level model activity label retained across first-token, tool, and streaming phases. */ ++ function TurnStatus({ startTime, t }) { ++ const [mountedAt] = (0, react.useState)(() => Date.now()); ++ const anchor = startTime ?? mountedAt; ++ const [elapsedMs, setElapsedMs] = (0, react.useState)(() => Math.max(0, Date.now() - anchor)); ++ (0, react.useEffect)(() => { ++ const tick = () => { ++ setElapsedMs(Math.max(0, Date.now() - anchor)); ++ }; ++ tick(); ++ const id = setInterval(tick, 1e3); ++ return () => { ++ clearInterval(id); ++ }; ++ }, [anchor]); ++ const showClock = elapsedMs >= 15e3; ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: ChatView_module_css_default.turnStatus, ++ role: "status", ++ "aria-live": "polite", ++ children: ["Deep diving...", showClock && (0, react_jsx_runtime.jsx)("span", { ++ className: ChatView_module_css_default.turnStatusClock, ++ "aria-hidden": true, ++ children: formatRunDuration(elapsedMs, t) ++ })] ++ }); ++ } ++ /** ++ * The chat view slot entry: pure component over the composed props; each ++ * ordered business Node crosses the keyed renderer seat. ++ */ ++ function ChatView({ useSession, useSessions, useStore, renderSlot, sessionId, openFile, loadOlder, loadImage, inspectCall, chatScroll, forkAt, fileMentions, t }) { ++ const order = useSession((s) => s.chat.order); ++ const nodeStore = useSession((s) => s.chat.nodes); ++ const timeline = useSession((s) => s.chat.timeline); ++ const inbox = useSession((s) => s.queue); ++ const cwd = useSessions((s) => s.byId[sessionId]?.cwd); ++ const running = useSession((s) => s.running); ++ const openState = useSession((s) => s.openState); ++ const openError = useSession((s) => s.openError); ++ const hasMore = useSession((s) => s.hasMore); ++ const loadingOlder = useSession((s) => s.loadingOlder); ++ const selectedCallId = useStore((s) => s.selection?.callId); ++ const [fileOpenError, setFileOpenError] = (0, react.useState)(null); ++ const [fileOpenBusy, setFileOpenBusy] = (0, react.useState)(false); ++ const fileOpenRequest = (0, react.useRef)(0); ++ const requestOpenFile = (0, react.useCallback)((path) => { ++ const id = ++fileOpenRequest.current; ++ setFileOpenBusy(true); ++ openFile(path).then(() => { ++ if (id !== fileOpenRequest.current) return; ++ setFileOpenError(null); ++ setFileOpenBusy(false); ++ }, (error) => { ++ if (id !== fileOpenRequest.current) return; ++ setFileOpenError({ ++ path, ++ message: openFailureMessage(error, t(isFolderOpenPath(path) ? "fileOpen.folderUnknown" : "fileOpen.unknown")) ++ }); ++ setFileOpenBusy(false); ++ }); ++ }, [openFile, t]); ++ const closeFileOpenError = (0, react.useCallback)(() => { ++ fileOpenRequest.current += 1; ++ setFileOpenError(null); ++ setFileOpenBusy(false); ++ }, []); ++ const pendingSteering = (0, react.useMemo)(() => inbox.filter((item) => item.placement === "steering"), [inbox]); ++ const renderMessageImages = (0, react.useCallback)((owner) => renderSlot("conversation.message.images", { ++ ...owner, ++ loadImage ++ }), [loadImage, renderSlot]); ++ const runningTurnStart = (0, react.useMemo)(() => runningTurnStartTime(timeline), [timeline]); ++ const listRef = (0, react.useRef)(null); ++ const columnRef = (0, react.useRef)(null); ++ const atBottomRef = (0, react.useRef)(true); ++ const [atBottom, setAtBottom] = (0, react.useState)(true); ++ /** Last position delivered or written on the main thread. */ ++ const observedTopRef = (0, react.useRef)(0); ++ /** Paging anchor: semantic row/position at click, updated by reader scrolls ++ * while the request is pending and restored after the prepend lands. */ ++ const anchorRef = (0, react.useRef)(null); ++ const firstSeqRef = (0, react.useRef)(null); ++ const openedRef = (0, react.useRef)(false); ++ const lastKeyRef = (0, react.useRef)(null); ++ const lastSteeringIdRef = (0, react.useRef)(null); ++ /** Flow tip signature — follow-scroll only when this moves, never on a ++ * scroll-driven at-bottom chrome re-render (which would snap inertial ++ * scrolls the rest of the way to the floor). */ ++ const followSigRef = (0, react.useRef)(null); ++ const firstKey = order[0]; ++ const firstSeq = firstKey === void 0 ? null : nodeStore.get(firstKey)?.anchorSeq ?? null; ++ const lastKey = order.at(-1) ?? null; ++ const lastNode = lastKey === null ? void 0 : nodeStore.get(lastKey); ++ const lastSteeringId = pendingSteering[pendingSteering.length - 1]?.id ?? null; ++ const followSig = `${openState}:${firstSeq}:${lastKey}:${order.length}:${running ? 1 : 0}:${lastSteeringId ?? ""}`; ++ const toBottom = (el) => { ++ anchorRef.current = null; ++ el.scrollTop = el.scrollHeight; ++ observedTopRef.current = el.scrollTop; ++ atBottomRef.current = true; ++ setAtBottom(true); ++ chatScroll.save(null); ++ }; ++ (0, react.useLayoutEffect)(() => { ++ const local = listRef.current; ++ /* v8 ignore next -- ref-null guard: React attaches the ref before layout effects run. */ ++ if (local === null) return; ++ const el = scrollerOf(local); ++ if (openState === "open" && !openedRef.current) { ++ openedRef.current = true; ++ const saved = chatScroll.read(); ++ if (saved === null) toBottom(el); ++ else { ++ el.scrollTop = saved.scrollTop; ++ const row = anchorElement(local, saved.anchorKey); ++ if (row !== null) el.scrollTop += flowTop(row, el) - saved.anchorTop; ++ observedTopRef.current = el.scrollTop; ++ const isAtBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= 25; ++ atBottomRef.current = isAtBottom; ++ setAtBottom(isAtBottom); ++ const normalized = isAtBottom ? null : scrollPosition(local, el); ++ if (isAtBottom) chatScroll.save(null); ++ else if (normalized !== null) chatScroll.save(normalized); ++ } ++ firstSeqRef.current = firstSeq; ++ lastKeyRef.current = lastKey; ++ lastSteeringIdRef.current = lastSteeringId; ++ followSigRef.current = followSig; ++ return; ++ } ++ if (anchorRef.current !== null && firstSeq !== null && firstSeqRef.current !== null && firstSeq < firstSeqRef.current) { ++ const anchor = anchorRef.current; ++ anchorRef.current = null; ++ const row = anchorElement(local, anchor.key); ++ if (row !== null) el.scrollTop += flowTop(row, el) - anchor.top; ++ observedTopRef.current = el.scrollTop; ++ firstSeqRef.current = firstSeq; ++ /* v8 ignore next -- ?? arm: a prepend adds nodes, so the flow list here is never empty. */ ++ lastKeyRef.current = lastKey; ++ lastSteeringIdRef.current = lastSteeringId; ++ followSigRef.current = followSig; ++ return; ++ } ++ firstSeqRef.current = firstSeq; ++ const appendedUser = lastKey !== lastKeyRef.current && lastNode?.kind === "user"; ++ const appendedSteering = lastSteeringId !== null && lastSteeringId !== lastSteeringIdRef.current; ++ const tipMoved = followSigRef.current !== followSig; ++ lastKeyRef.current = lastKey; ++ lastSteeringIdRef.current = lastSteeringId; ++ followSigRef.current = followSig; ++ if (appendedUser || appendedSteering || tipMoved && atBottomRef.current) toBottom(el); ++ }); ++ const onScrollRef = (0, react.useRef)(() => {}); ++ onScrollRef.current = () => { ++ const local = listRef.current; ++ /* v8 ignore next -- ref-null guard: the handler only fires while mounted. */ ++ if (local === null) return; ++ const el = scrollerOf(local); ++ const floor = Math.max(0, el.scrollHeight - el.clientHeight); ++ const movedByReader = Math.abs(el.scrollTop - Math.min(observedTopRef.current, floor)) > .5; ++ const isAtBottom = movedByReader ? floor - el.scrollTop <= 25 : atBottomRef.current; ++ if (!movedByReader && isAtBottom) { ++ toBottom(el); ++ return; ++ } ++ atBottomRef.current = isAtBottom; ++ setAtBottom(isAtBottom); ++ const position = isAtBottom ? null : scrollPosition(local, el); ++ if (isAtBottom) anchorRef.current = null; ++ else if (anchorRef.current !== null && position !== null) anchorRef.current = { ++ key: position.anchorKey, ++ top: position.anchorTop ++ }; ++ if (isAtBottom) chatScroll.save(null); ++ else if (position !== null) chatScroll.save(position); ++ observedTopRef.current = el.scrollTop; ++ }; ++ (0, react.useEffect)(() => { ++ const local = listRef.current; ++ /* v8 ignore next -- ref-null guard: effect runs after the list node commits. */ ++ if (local === null) return; ++ const el = scrollerOf(local); ++ const onScroll = () => { ++ onScrollRef.current(); ++ }; ++ el.addEventListener("scroll", onScroll, { passive: true }); ++ return () => { ++ el.removeEventListener("scroll", onScroll); ++ }; ++ }, []); ++ const followRef = (0, react.useRef)(null); ++ followRef.current = () => { ++ const local = listRef.current; ++ if (local !== null && atBottomRef.current) { ++ const el = scrollerOf(local); ++ el.scrollTop = el.scrollHeight; ++ observedTopRef.current = el.scrollTop; ++ chatScroll.save(null); ++ } ++ }; ++ (0, react.useEffect)(() => { ++ const column = columnRef.current; ++ const local = listRef.current; ++ if (column === null || local === null || typeof ResizeObserver === "undefined") return; ++ const composer = scrollerOf(local).querySelector("[data-composer-seat]"); ++ const observer = new ResizeObserver(() => { ++ followRef.current?.(); ++ }); ++ observer.observe(column); ++ if (composer !== null) observer.observe(composer); ++ return () => { ++ observer.disconnect(); ++ }; ++ }, []); ++ (0, react.useEffect)(() => { ++ if (!loadingOlder) anchorRef.current = null; ++ }, [loadingOlder]); ++ const loadOlderAnchored = () => { ++ const local = listRef.current; ++ /* v8 ignore next -- ref-null guard: the paging button renders inside the list tree. */ ++ if (local !== null) { ++ const el = scrollerOf(local); ++ const row = pagingAnchor(local, el); ++ if (row !== null && row.dataset.chatAnchorKey !== void 0) anchorRef.current = { ++ key: row.dataset.chatAnchorKey, ++ top: flowTop(row, el) ++ }; ++ } ++ loadOlder(); ++ }; ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: ChatView_module_css_default.root, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ ref: listRef, ++ className: ChatView_module_css_default.scroll, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ ref: columnRef, ++ className: ChatView_module_css_default.column, ++ "data-chat-flow": "", ++ children: [ ++ openState === "loading" && (0, react_jsx_runtime.jsx)("div", { ++ className: ChatView_module_css_default.hint, ++ children: t("chat.loadingHistory") ++ }), ++ openState === "error" && openError !== null && (0, react_jsx_runtime.jsx)("div", { ++ className: ChatView_module_css_default.openError, ++ children: t("chat.loadError", { ++ message: openError.message, ++ code: openError.code ++ }) ++ }), ++ hasMore && (0, react_jsx_runtime.jsx)("div", { ++ className: ChatView_module_css_default.older, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ disabled: loadingOlder, ++ onClick: loadOlderAnchored, ++ children: loadingOlder ? t("loading") : t("chat.loadOlder") ++ }) ++ }), ++ order.map((nodeKey) => (0, react_jsx_runtime.jsx)(ChatNodeSeat, { ++ nodeKey, ++ useSession, ++ selectedCallId, ++ cwd, ++ openFile: requestOpenFile, ++ inspectCall, ++ forkAt, ++ renderMessageImages, ++ fileMentions, ++ renderSlot, ++ t ++ }, nodeKey)), ++ running && (0, react_jsx_runtime.jsx)(TurnStatus, { ++ startTime: runningTurnStart, ++ t ++ }), ++ pendingSteering.map((item) => (0, react_jsx_runtime.jsx)(PendingSteeringBubble, { ++ content: item.content, ++ renderMessageImages, ++ t ++ }, item.id)) ++ ] ++ }), !atBottom && (0, react_jsx_runtime.jsx)("div", { ++ className: ChatView_module_css_default.toBottomSlot, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: ChatView_module_css_default.toBottom, ++ "aria-label": t("chat.toBottom"), ++ onClick: () => { ++ const local = listRef.current; ++ /* v8 ignore next -- ref-null guard: the button only renders alongside the mounted list. */ ++ if (local !== null) toBottom(scrollerOf(local)); ++ }, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {}) ++ }) ++ })] ++ }), fileOpenError !== null && (0, react_jsx_runtime.jsx)(FileOpenErrorDialog, { ++ path: fileOpenError.path, ++ message: fileOpenError.message, ++ busy: fileOpenBusy, ++ onClose: closeFileOpenError, ++ onRetry: () => { ++ requestOpenFile(fileOpenError.path); ++ }, ++ t ++ })] ++ }); ++ } ++ /** In-page Host open-path refusal: the wire reason plus a retry of the same path. */ ++ function FileOpenErrorDialog({ path, message, busy, onClose, onRetry, t }) { ++ return (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, { ++ open: true, ++ onClose, ++ closeLabel: t("close"), ++ title: t(isFolderOpenPath(path) ? "fileOpen.folderTitle" : "fileOpen.title"), ++ description: message, ++ footer: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { ++ variant: "outline", ++ className: ChatView_module_css_default.modalAction, ++ onClick: onClose, ++ children: t("cancel") ++ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { ++ variant: "primary", ++ className: ChatView_module_css_default.modalAction, ++ disabled: busy, ++ onClick: onRetry, ++ children: t("retry") ++ })] }) ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/contract/slots.js ++ /** ++ * Approval domain face over the carrier (the ui-user-questions PendingQuestion ++ * pattern): render identity and question material forwarded transparently; ++ * answer owns the wire encoding — the ApprovalResponsePayload value shape ++ * with the audit correlation the host reconciles — and turns a rejected ++ * carrier receipt into a thrown error. Minted per carrier via useMemo. ++ */ ++ var PendingApproval = class { ++ wait; ++ /** ++ * @param wait - the runtime carrier for one pending approval question. ++ */ ++ constructor(wait) { ++ this.wait = wait; ++ } ++ /** Opaque render identity (React key / one-shot latch remount axis), forwarded from the carrier. */ ++ get key() { ++ return this.wait.key; ++ } ++ /** The tool the question is about (headline fallback), forwarded from the carrier payload. */ ++ get toolName() { ++ return this.wait.payload.toolName; ++ } ++ /** The asker's human-readable WHY (headline when present), forwarded from the carrier payload. */ ++ get reason() { ++ return this.wait.payload.reason; ++ } ++ /** The paired tool call's id when the ask names one (command-line lookup key), forwarded from the carrier payload. */ ++ get callId() { ++ return this.wait.payload.callId; ++ } ++ /** ++ * Deliver the user's decision; a rejected carrier receipt throws. Panel ++ * removal stays frame-driven: the broadcast `approval/resolved` settles the ++ * wait and drops it from the pending list. ++ * @param outcome - the only two client-answerable outcomes. ++ */ ++ async answer(outcome) { ++ const receipt = await this.wait.respond({ ++ ok: true, ++ value: { ++ sessionId: this.wait.sessionId, ++ approvalId: this.wait.payload.approvalId, ++ outcome ++ } ++ }); ++ if (!receipt.accepted) throw new Error(`approval response rejected: ${receipt.reason}`); ++ } ++ }; ++ //#endregion ++ //#region lib/types/client/chat/tool-node-reader.js ++ function toolNode(node) { ++ return node?.kind === "tool-call" ? node : void 0; ++ } ++ /** ++ * Read one root Tool lifecycle through the internal Chat Node index. ++ * @param snapshot - current Conversation snapshot. ++ * @param rootCallId - root call identity and Tool Context identity. ++ * @returns root lifecycle when it is materialized in the current window. ++ */ ++ function rootToolCall(snapshot, rootCallId) { ++ return toolNode(snapshot.chat.nodes.get((0, _deepseek_ai_dsh_client_runtime_client.conversationContextKey)("tool-call", rootCallId)))?.data.root; ++ } ++ /** ++ * Find any root or nested Tool lifecycle through the internal Node store. ++ * @param snapshot - current Conversation snapshot. ++ * @param callId - root or nested call identity. ++ * @returns current Tool lifecycle when materialized in the loaded window. ++ */ ++ function findToolCall(snapshot, callId) { ++ const visit = (block) => { ++ if (block.callId === callId) return block; ++ for (const child of block.subCalls) { ++ const found = visit(child); ++ if (found !== void 0) return found; ++ } ++ }; ++ for (const node of snapshot.chat.nodes.values()) { ++ const root = toolNode(node)?.data.root; ++ if (root === void 0) continue; ++ const found = visit(root); ++ if (found !== void 0) return found; ++ } ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/ApprovalPanel.module.css.mjs ++ const css$10 = ".bqrRRG_root{padding:8px calc(var(--dsh-composer-side-clearance) + 16px) 12px;flex-direction:column;align-items:center;display:flex}.bqrRRG_card{width:100%;max-width:var(--dsh-chat-content-width);border:1px solid var(--dsw-alias-state-warn-secondary);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-shadow-lv2);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:20px;overflow:hidden}.bqrRRG_strip{background:var(--dsw-alias-state-warn-tertiary);color:var(--dsw-alias-state-warn-primary);align-items:center;gap:8px;padding:10px 16px;font-size:13px;line-height:18px;display:flex}.bqrRRG_dot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;width:8px;height:8px}.bqrRRG_body{box-sizing:border-box;max-height:var(--dsh-composer-text-max-height);flex-direction:column;gap:6px;padding:12px 16px 0;display:flex;overflow-y:auto}.bqrRRG_headline{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:500;line-height:24px}.bqrRRG_command{color:var(--dsw-alias-label-tertiary);font-family:var(--ds-font-family-code);word-break:break-all;font-size:13px;line-height:20px}.bqrRRG_actionRow{justify-content:flex-end;gap:8px;padding:14px 16px;display:flex}.bqrRRG_reject:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);border-color:#0000}"; ++ const tagId$10 = "@deepseek-ai/dsh-client-ui-conversation/ApprovalPanel.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$10; ++ tag.textContent = css$10; ++ document.head.appendChild(tag); ++ } ++ var ApprovalPanel_module_css_default = { ++ "actionRow": "bqrRRG_actionRow", ++ "body": "bqrRRG_body", ++ "card": "bqrRRG_card", ++ "command": "bqrRRG_command", ++ "dot": "bqrRRG_dot", ++ "headline": "bqrRRG_headline", ++ "reject": "bqrRRG_reject", ++ "root": "bqrRRG_root", ++ "strip": "bqrRRG_strip" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/ApprovalPanel.js ++ /** Extract the shell command from an approval's paired running call (bash-family args carry `command`); undefined hides the line. */ ++ function commandOf(call) { ++ if (call === void 0) return void 0; ++ try { ++ const args = JSON.parse(call.argsRaw); ++ return typeof args.command === "string" ? args.command : void 0; ++ } catch { ++ return; ++ } ++ } ++ /** ++ * Composer takeover boundary: mints the domain face on the carrier's stable ++ * identity and remounts the flow per request key, so the one-shot answered ++ * latch never leaks to the next pending approval. ++ * @param props - the selector-matched pending approval carrier plus the framework standard kit. ++ * @returns The approval prompt for this request. ++ */ ++ function ApprovalPanel(props) { ++ const approval = (0, react.useMemo)(() => new PendingApproval(props.matched), [props.matched]); ++ const command = props.useSession((snapshot) => { ++ if (approval.callId === void 0) return void 0; ++ const root = rootToolCall(snapshot, approval.callId); ++ if (root === void 0) return void 0; ++ return root.callId === approval.callId && !("kind" in root) ? commandOf(root) : void 0; ++ }); ++ return (0, react_jsx_runtime.jsx)(ApprovalFlow, { ++ pending: approval, ++ t: props.t, ++ ...command === void 0 ? {} : { command } ++ }, approval.key); ++ } ++ function ApprovalFlow({ pending, command, t }) { ++ const [answered, setAnswered] = (0, react.useState)(false); ++ const answer = (outcome) => { ++ setAnswered(true); ++ pending.answer(outcome).catch(() => { ++ setAnswered(false); ++ }); ++ }; ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: ApprovalPanel_module_css_default.root, ++ "data-approval-key": pending.key, ++ children: (0, react_jsx_runtime.jsxs)("div", { ++ className: ApprovalPanel_module_css_default.card, ++ children: [ ++ (0, react_jsx_runtime.jsxs)("div", { ++ className: ApprovalPanel_module_css_default.strip, ++ children: [(0, react_jsx_runtime.jsx)("span", { className: ApprovalPanel_module_css_default.dot }), t("approval.waiting")] ++ }), ++ (0, react_jsx_runtime.jsxs)("div", { ++ className: ApprovalPanel_module_css_default.body, ++ "data-approval-scroll": "", ++ tabIndex: 0, ++ role: "group", ++ "aria-label": t("approval.detail.aria"), ++ children: [(0, react_jsx_runtime.jsx)("div", { ++ className: ApprovalPanel_module_css_default.headline, ++ children: pending.reason ?? t("approval.escalation", { toolName: pending.toolName }) ++ }), command !== void 0 && (0, react_jsx_runtime.jsx)("div", { ++ className: ApprovalPanel_module_css_default.command, ++ children: command ++ })] ++ }), ++ (0, react_jsx_runtime.jsxs)("div", { ++ className: ApprovalPanel_module_css_default.actionRow, ++ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { ++ variant: "outline", ++ className: ApprovalPanel_module_css_default.reject, ++ disabled: answered, ++ onClick: () => { ++ answer("rejected"); ++ }, ++ children: t("approval.reject") ++ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, { ++ variant: "primary", ++ disabled: answered, ++ onClick: () => { ++ answer("allowed-once"); ++ }, ++ children: t("approval.allowOnce") ++ })] ++ }) ++ ] ++ }) ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/locales.js ++ /** `conversation` namespace dictionaries. */ ++ /** Dictionary namespace owned by this plugin. */ ++ const NS = "conversation"; ++ const PLAN_NEXT_ACTION_ZH = "描述你的任务以生成计划"; ++ const PLAN_NEXT_ACTION_EN = "describe your task to generate plan"; ++ /** Simplified Chinese dictionary (the key-set source of truth). */ ++ const zh = { ++ "view.chat": "对话", ++ "hint.plan": PLAN_NEXT_ACTION_ZH, ++ "hint.goal": "输入目标,智能体将持续执行", ++ "hint.goal.active": "当前目标进行中。可输入 edit 修改 / pause 暂停 / resume 继续 / clear 清除", ++ "placeholder.plan": PLAN_NEXT_ACTION_ZH, ++ "placeholder.default": "给智能体发消息", ++ "placeholder.unavailable": "会话不可用", ++ "placeholder.parentOffline": "父会话已离线,无法继续发送;仍可停止当前运行", ++ "placeholder.hero": "描述你想要构建的内容", ++ "placeholder.workspace": "选择一个工作区开始", ++ "input.commands": "命令", ++ "input.stop": "停止生成", ++ "input.send": "发送消息", ++ "placeholder.steerQueue": "Cmd/Ctrl+Enter 插话发送全部排队消息", ++ "input.accessMode": "访问模式,当前:{name}", ++ "image.dropTitle": "图片拖动到此处即可添加", ++ "image.dropDesc": "最多 {count} 张,每张 {size}", ++ "image.dropBlocked": "当前无法添加图片", ++ "image.pending": "待发送图片", ++ "image.openOriginal": "查看原图", ++ "image.openOriginalLabel": "{label},点击查看原图", ++ "image.remove": "移除图片 {name}", ++ "image.scrollLeft": "向左滚动图片", ++ "image.scrollRight": "向右滚动图片", ++ "image.original": "原图", ++ "image.label": "图片", ++ "image.loadFailed": "图片加载失败,点击重试", ++ "image.loading": "图片加载中…", ++ "image.preview": "原图预览", ++ "image.closePreview": "关闭原图预览", ++ "image.serviceUnavailable": "图片读取服务不可用", ++ "image.unsupportedType": "仅支持 PNG、JPG、WebP、GIF 格式的图片", ++ "image.tooMany": "一条消息最多添加 {count} 张图片", ++ "image.fileTooLarge": "单张图片不能超过 {size}", ++ "image.totalTooLarge": "图片总大小超过 {size},请移除部分图片", ++ "image.tooManyPixels": "图片分辨率过大,请压缩后重试", ++ "image.dimensionTooLarge": "图片宽高不能超过 {size}px,请缩小后重试", ++ "image.modelUnsupported": "当前模型不支持图片,请切换支持图片的模型", ++ "image.subagentUnsupported": "子智能体会话暂不支持图片", ++ "image.sendFailed": "图片发送失败({reason}),请重新添加图片后再试", ++ "context.aria": "上下文已用 {percent}", ++ "context.used": "上下文已用", ++ "context.system": "系统提示词", ++ "context.tools": "工具", ++ "context.messages": "对话消息", ++ "stats.counts": "{turns} 轮 · {steps} 步", ++ "stats.llm": "LLM {duration}", ++ "stats.toolCall": "工具调用 {duration}", ++ "stats.ttftAverage": "首 token 平均 {duration}", ++ "stats.tokensPerSecond": "{throughput} tok/s", ++ "stats.cacheHit": "缓存命中 {percent}%", ++ "stats.tokens": "输入 {input} tok · 输出 {output} tok", ++ "settings.enter.title": "繁忙时 Enter 键行为", ++ "settings.enter.description": "仅在智能体运行时生效;Cmd/Ctrl+Enter 使用另一行为", ++ "settings.enter.queue": "排队发送", ++ "settings.enter.steer": "插话发送", ++ "access.preset.readOnly": "仅可查看", ++ "access.preset.workspaceWrite": "可写入工作区", ++ "access.preset.fullAccess": "完全权限", ++ "access.confirm.title": "确认启用完全权限?", ++ "access.confirm.description": "启用完全权限后,智能体将减少确认步骤,并且可以直接执行更多操作,包括敏感操作、文件修改或外部命令。仅建议在你信任当前任务时使用。", ++ "access.confirm.acknowledge": "我已了解风险,并愿意继续", ++ "access.confirm.cancel": "取消", ++ "access.confirm.enable": "启用完全权限", ++ "hero.headline": "探索未至之境", ++ "hero.preview": "预览版", ++ "hero.chooseWorkspace": "选择工作区", ++ "session.hierarchy": "会话层级", ++ "details.title": "详情", ++ "details.close": "关闭详情", ++ "details.empty": "点击消息流中的工具行查看详情", ++ "details.notInWindow": "该调用不在当前窗口内", ++ "details.input": "输入", ++ "details.output": "输出", ++ "details.running": "运行中…", ++ "todo.title": "任务", ++ "todo.progress.done": "{done} 已完成", ++ "todo.progress.active": "{active} 进行中", ++ "todo.progress.pending": "{pending} 待处理", ++ "todo.rowTitle": "更新任务清单", ++ "todo.completed": "{done}/{total} 已完成", ++ "chat.loadingHistory": "载入历史…", ++ "chat.loadError": "历史加载失败:{message}({code})", ++ "chat.loadOlder": "加载更早", ++ "chat.toBottom": "回到底部", ++ "fileOpen.title": "无法打开文件", ++ "fileOpen.unknown": "无法打开此文件", ++ "fileOpen.folderTitle": "无法打开文件夹", ++ "fileOpen.folderUnknown": "无法打开此文件夹", ++ "message.extraBlock": "附加内容块", ++ "message.contextInjection": "上下文注入", ++ "message.contextRecall": "跨会话召回", ++ "message.referenceSummary": "引用会话 · {labels}", ++ "message.referenceSeparator": "、", ++ "message.context.instructions.loaded": "已载入", ++ "message.context.instructions.added": "已新增", ++ "message.context.instructions.updated": "已更新", ++ "message.context.instructions.removed": "已移除", ++ "message.context.catalog.replaced": "替换目录", ++ "message.context.catalog.more": "…还有 {count} 条", ++ "message.context.snapshot.supersedes": "取代先前的快照", ++ "message.context.relay.from": "来自会话 {session}", ++ "message.context.recall.counts": "保留 {retained} 条 · 省略 {omitted} 条", ++ "message.context.recall.truncated": "已截断", ++ "message.compaction": "上下文已压缩", ++ "message.compaction.running": "正在压缩…", ++ "message.compaction.completed": "已压缩 {items} 条历史记录(约 {tokens} tokens)", ++ "message.compaction.expand": "点击查看压缩摘要", ++ "message.compaction.unavailable": "压缩摘要不可用", ++ "message.unknownSurface": "未知 surface 事件:{type}", ++ "message.unknownBlock": "未知内容块", ++ "message.stopped": "已停止", ++ "message.branch": "在新对话中分支", ++ "message.branchUnavailable": "仅可从已完成轮次的最后一条消息分支", ++ "message.retry.active": "正在重试模型请求", ++ "message.retry.cancelled": "模型请求重试已取消", ++ "message.retry.started": "已重试模型请求", ++ "message.retry.scheduled": "等待重试模型请求", ++ "message.retry.status": "{label}({retry}/{maximum}) · {seconds}s", ++ "message.retry.delay": "重试延迟:", ++ "message.retry.failure": "失败原因:", ++ "message.turnError": "本轮运行失败", ++ "message.maxTokens": "已达到输出 token 上限", ++ "message.maxTokens.hint": "回答被截断,已有输出保留在对话中。发送“继续”可让模型接着输出。", ++ "message.ranFor": "用时 {duration}", ++ "message.ttft": "首 token {seconds}秒", ++ "message.tokensPerSecond": "{tps} tok/s", ++ "duration.seconds": "{seconds}秒", ++ "duration.minutes": "{minutes}分{seconds}秒", ++ "command.running": "执行中…", ++ "command.failed": "命令失败", ++ "command.done": "已完成", ++ "command.title": "命令", ++ "command.imagesUnsupported": "/{command} 不接受图片附件,请先移除图片", ++ "approval.waiting": "等待审批", ++ "approval.detail.aria": "审批详情", ++ "approval.escalation": "工具 {toolName} 请求越权执行", ++ "approval.reject": "拒绝", ++ "approval.allowOnce": "允许一次", ++ "ask.rowTitle": "提问", ++ "ask.waiting": "等待回答", ++ "ask.cancelled": "已取消", ++ "ask.interrupted": "已中断", ++ "ask.answered": "{answered}/{total} 已回答", ++ "bash.running": "运行中", ++ "bash.failed": "失败", ++ "bash.stopped": "已停止", ++ "row.running": "运行中", ++ "row.failed": "失败", ++ "row.stopped": "已停止", ++ "queue.count": "{n} 条排队消息", ++ "queue.edit": "编辑排队消息", ++ "queue.edit.unsupported": "包含非文本内容,暂不支持编辑", ++ "queue.save": "保存排队消息", ++ "queue.cancelEdit": "取消编辑", ++ "queue.remove": "删除排队消息", ++ "queue.steer": "插话发送", ++ "queue.steer.unavailable": "仅运行中可插话发送", ++ "queue.editFailed": "编辑失败:这条消息可能已经开始发送。", ++ "queue.removeFailed": "删除失败:这条消息可能已经开始发送。", ++ "queue.steerFailed": "插话发送失败,请重试。", ++ "terminal.signal": "信号 {signal}", ++ "terminal.exitCode": "退出码 {code}", ++ "terminal.running": "运行中", ++ "terminal.failed": "失败", ++ "terminal.done": "已完成", ++ "terminal.noOutput": "无输出", ++ "terminal.collapseAria": "收起输出", ++ "terminal.expandAria": "展开其余 {n} 行输出", ++ "terminal.expandRest": "… 其余 {n} 行", ++ "json.truncated": "… 已截断,共 {total} 字符", ++ "clock.md": "{m}月{d}日", ++ "clock.ymd": "{y}年{m}月{d}日" ++ }; ++ /** English dictionary, checked complete against the zh key set. */ ++ const en = { ++ "view.chat": "Chat", ++ "hint.plan": PLAN_NEXT_ACTION_EN, ++ "hint.goal": "describe the objective for a long-running task", ++ "hint.goal.active": "goal active — edit / pause / resume / clear", ++ "placeholder.plan": PLAN_NEXT_ACTION_EN, ++ "placeholder.default": "Message the agent", ++ "placeholder.unavailable": "Session unavailable", ++ "placeholder.parentOffline": "Parent session offline; sending is unavailable but you can still stop the run", ++ "placeholder.hero": "Describe what you want to build", ++ "placeholder.workspace": "Choose a workspace to start", ++ "input.commands": "Commands", ++ "input.stop": "Stop generating", ++ "input.send": "Send message", ++ "placeholder.steerQueue": "Cmd/Ctrl+Enter steers all queued messages", ++ "input.accessMode": "Access mode, current: {name}", ++ "image.dropTitle": "Drag images here to add them", ++ "image.dropDesc": "Up to {count} images, {size} each", ++ "image.dropBlocked": "Images cannot be added right now", ++ "image.pending": "Pending images", ++ "image.openOriginal": "View original", ++ "image.openOriginalLabel": "{label}, click to view original", ++ "image.remove": "Remove image {name}", ++ "image.scrollLeft": "Scroll images left", ++ "image.scrollRight": "Scroll images right", ++ "image.original": "Original image", ++ "image.label": "Image", ++ "image.loadFailed": "Image failed to load; click to retry", ++ "image.loading": "Loading image…", ++ "image.preview": "Original image preview", ++ "image.closePreview": "Close original image preview", ++ "image.serviceUnavailable": "Image loading service unavailable", ++ "image.unsupportedType": "Only PNG, JPG, WebP, and GIF images are supported", ++ "image.tooMany": "A message can include up to {count} images", ++ "image.fileTooLarge": "Each image must be smaller than {size}", ++ "image.totalTooLarge": "Images exceed {size} in total; remove some and try again", ++ "image.tooManyPixels": "Image resolution is too high; compress it and try again", ++ "image.dimensionTooLarge": "Image sides must be at most {size}px; downscale it and try again", ++ "image.modelUnsupported": "The current model does not support images; switch to a model that does", ++ "image.subagentUnsupported": "Subagent sessions do not support images yet", ++ "image.sendFailed": "Sending images failed ({reason}); re-add them and try again", ++ "context.aria": "{percent} of context used", ++ "context.used": "of context used", ++ "context.system": "System prompt", ++ "context.tools": "Tools", ++ "context.messages": "Messages", ++ "stats.counts": "{turns} turns · {steps} steps", ++ "stats.llm": "LLM {duration}", ++ "stats.toolCall": "Tool call {duration}", ++ "stats.ttftAverage": "TTFT avg {duration}", ++ "stats.tokensPerSecond": "{throughput} tok/s", ++ "stats.cacheHit": "Cache hit {percent}%", ++ "stats.tokens": "Input {input} tok · Output {output} tok", ++ "settings.enter.title": "Enter behavior while busy", ++ "settings.enter.description": "Busy only; Cmd/Ctrl+Enter uses the other behavior", ++ "settings.enter.queue": "Queue", ++ "settings.enter.steer": "Steer", ++ "access.preset.readOnly": "Read Only", ++ "access.preset.workspaceWrite": "Workspace Write", ++ "access.preset.fullAccess": "Full access", ++ "access.confirm.title": "Enable Full access?", ++ "access.confirm.description": "Full access reduces confirmation steps and lets the agent perform more actions directly, including sensitive operations, file changes, or external commands. Only use it when you trust the current task.", ++ "access.confirm.acknowledge": "I understand the risks and want to continue", ++ "access.confirm.cancel": "Cancel", ++ "access.confirm.enable": "Enable Full access", ++ "hero.headline": "Into the Unknown", ++ "hero.preview": "Preview", ++ "hero.chooseWorkspace": "Choose workspace", ++ "session.hierarchy": "Session hierarchy", ++ "details.title": "Details", ++ "details.close": "Close details", ++ "details.empty": "Click a tool row in the message flow to view its details", ++ "details.notInWindow": "This call is outside the current window", ++ "details.input": "Input", ++ "details.output": "Output", ++ "details.running": "Running…", ++ "todo.title": "To-dos", ++ "todo.progress.done": "{done} completed", ++ "todo.progress.active": "{active} in progress", ++ "todo.progress.pending": "{pending} pending", ++ "todo.rowTitle": "Update to-do list", ++ "todo.completed": "{done}/{total} completed", ++ "chat.loadingHistory": "Loading history…", ++ "chat.loadError": "Failed to load history: {message} ({code})", ++ "chat.loadOlder": "Load earlier", ++ "chat.toBottom": "Back to bottom", ++ "fileOpen.title": "Couldn’t open file", ++ "fileOpen.unknown": "Couldn’t open this file", ++ "fileOpen.folderTitle": "Couldn’t open folder", ++ "fileOpen.folderUnknown": "Couldn’t open this folder", ++ "message.extraBlock": "Extra content block", ++ "message.contextInjection": "Context injection", ++ "message.contextRecall": "Session recall", ++ "message.referenceSummary": "Referenced session · {labels}", ++ "message.referenceSeparator": ", ", ++ "message.context.instructions.loaded": "loaded", ++ "message.context.instructions.added": "added", ++ "message.context.instructions.updated": "updated", ++ "message.context.instructions.removed": "removed", ++ "message.context.catalog.replaced": "Replacement catalog", ++ "message.context.catalog.more": "… {count} more", ++ "message.context.snapshot.supersedes": "Supersedes earlier snapshots", ++ "message.context.relay.from": "From session {session}", ++ "message.context.recall.counts": "{retained} kept · {omitted} omitted", ++ "message.context.recall.truncated": "truncated", ++ "message.compaction": "Context compacted", ++ "message.compaction.running": "Compacting context…", ++ "message.compaction.completed": "Compacted {items} history items (~{tokens} tokens)", ++ "message.compaction.expand": "View compaction summary", ++ "message.compaction.unavailable": "Compaction summary unavailable", ++ "message.unknownSurface": "Unknown surface event: {type}", ++ "message.unknownBlock": "Unknown content block", ++ "message.stopped": "Stopped", ++ "message.branch": "Branch into a new conversation", ++ "message.branchUnavailable": "Available only on the last message of a completed turn", ++ "message.retry.active": "Retrying model request", ++ "message.retry.cancelled": "Model request retry cancelled", ++ "message.retry.started": "Retried model request", ++ "message.retry.scheduled": "Waiting to retry model request", ++ "message.retry.status": "{label} ({retry}/{maximum}) · {seconds}s", ++ "message.retry.delay": "Retry delay: ", ++ "message.retry.failure": "Failure reason: ", ++ "message.turnError": "This turn failed", ++ "message.maxTokens": "Output token limit reached", ++ "message.maxTokens.hint": "The reply was cut off; earlier output is preserved in the conversation. Send \"continue\" to let the model resume.", ++ "message.ranFor": "Ran for {duration}", ++ "message.ttft": "TTFT {seconds}s", ++ "message.tokensPerSecond": "{tps} tok/s", ++ "duration.seconds": "{seconds}s", ++ "duration.minutes": "{minutes}m {seconds}s", ++ "command.running": "Running…", ++ "command.failed": "Command failed", ++ "command.done": "Completed", ++ "command.title": "Command", ++ "command.imagesUnsupported": "/{command} does not accept image attachments; remove them first", ++ "approval.waiting": "Waiting for approval", ++ "approval.detail.aria": "Approval details", ++ "approval.escalation": "Tool {toolName} requests privileged execution", ++ "approval.reject": "Reject", ++ "approval.allowOnce": "Allow once", ++ "ask.rowTitle": "Ask question", ++ "ask.waiting": "waiting", ++ "ask.cancelled": "cancelled", ++ "ask.interrupted": "interrupted", ++ "ask.answered": "{answered}/{total} answered", ++ "bash.running": "Running", ++ "bash.failed": "Failed", ++ "bash.stopped": "Stopped", ++ "row.running": "Running", ++ "row.failed": "Failed", ++ "row.stopped": "Stopped", ++ "queue.count": "{n} queued messages", ++ "queue.edit": "Edit queued message", ++ "queue.edit.unsupported": "Contains non-text content; editing is not supported yet", ++ "queue.save": "Save queued message", ++ "queue.cancelEdit": "Cancel editing", ++ "queue.remove": "Remove queued message", ++ "queue.steer": "Steer queued message", ++ "queue.steer.unavailable": "Steering is available only while the agent is running", ++ "queue.editFailed": "Edit failed: this message may have already started sending.", ++ "queue.removeFailed": "Removal failed: this message may have already started sending.", ++ "queue.steerFailed": "Steering failed. Try again.", ++ "terminal.signal": "signal {signal}", ++ "terminal.exitCode": "exit code {code}", ++ "terminal.running": "Running", ++ "terminal.failed": "Failed", ++ "terminal.done": "Done", ++ "terminal.noOutput": "No output", ++ "terminal.collapseAria": "Collapse output", ++ "terminal.expandAria": "Expand the remaining {n} output lines", ++ "terminal.expandRest": "… {n} more lines", ++ "json.truncated": "… truncated, {total} characters total", ++ "clock.md": "{m}/{d}", ++ "clock.ymd": "{y}-{m}-{d}" ++ }; ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/TodoPanel.module.css.mjs ++ const css$9 = ".lXshSW_root{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-specific-tip);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:12px;flex:none;margin:0 auto;overflow:hidden}.lXshSW_body{flex-direction:column;gap:8px;padding:6px 12px;display:flex}.lXshSW_header{text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:0;display:flex}.lXshSW_lead{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.lXshSW_title{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:24px}.lXshSW_progress{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:13px;font-weight:400;line-height:20px;overflow:hidden}.lXshSW_chevron{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.lXshSW_list{flex-direction:column;gap:8px;max-height:180px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.lXshSW_item{min-width:0;color:var(--dsw-alias-label-secondary);align-items:center;gap:10px;font-size:13px;line-height:20px;display:flex}.lXshSW_glyph{flex:none;place-items:center;width:16px;height:16px;display:grid}.lXshSW_glyphCompleted{color:var(--dsw-alias-state-success-primary)}.lXshSW_glyphPending{color:var(--dsw-alias-label-caption)}.lXshSW_glyphProgress{color:var(--dsw-alias-state-business-primary);animation:1s linear infinite lXshSW_todo-progress-spin}@keyframes lXshSW_todo-progress-spin{to{transform:rotate(360deg)}}.lXshSW_content{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}"; ++ const tagId$9 = "@deepseek-ai/dsh-client-ui-conversation/TodoPanel.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$9; ++ tag.textContent = css$9; ++ document.head.appendChild(tag); ++ } ++ var TodoPanel_module_css_default = { ++ "body": "lXshSW_body", ++ "chevron": "lXshSW_chevron", ++ "content": "lXshSW_content", ++ "glyph": "lXshSW_glyph", ++ "glyphCompleted": "lXshSW_glyphCompleted", ++ "glyphPending": "lXshSW_glyphPending", ++ "glyphProgress": "lXshSW_glyphProgress", ++ "header": "lXshSW_header", ++ "item": "lXshSW_item", ++ "lead": "lXshSW_lead", ++ "list": "lXshSW_list", ++ "progress": "lXshSW_progress", ++ "root": "lXshSW_root", ++ "title": "lXshSW_title", ++ "todo-progress-spin": "lXshSW_todo-progress-spin" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/TodoPanel.js ++ /** Local exhaustiveness helper — client packages do not depend on `dsh-llm`. */ ++ /* v8 ignore next 3 -- closed-union backstop; only reached if status is forged */ ++ function assertNever(value) { ++ throw new Error(`unreachable todo status: ${String(value)}`); ++ } ++ /** Status glyphs share the figma 14×14 artboard; the 16×16 `.glyph` cell centers them. */ ++ function CompletedGlyph() { ++ return (0, react_jsx_runtime.jsxs)("svg", { ++ width: 14, ++ height: 14, ++ viewBox: "0 0 14 14", ++ fill: "none", ++ "aria-hidden": "true", ++ className: TodoPanel_module_css_default.glyphCompleted, ++ children: [(0, react_jsx_runtime.jsx)("circle", { ++ cx: "7", ++ cy: "7", ++ r: "6.4", ++ stroke: "currentColor", ++ strokeWidth: "1.2" ++ }), (0, react_jsx_runtime.jsx)("path", { ++ d: "M10.9631 5.71411L7.70154 8.97571C7.48011 9.19714 7.27736 9.40099 7.09229 9.54993C6.89742 9.70669 6.66314 9.85279 6.3634 9.90027C6.2049 9.92534 6.04339 9.92534 5.88489 9.90027C5.58515 9.85279 5.35087 9.70669 5.15601 9.54993C4.97093 9.40099 4.76818 9.19714 4.54675 8.97571L3.03516 7.46411L3.96313 6.53613L5.47473 8.04773C5.7169 8.28989 5.86196 8.43389 5.97888 8.52795C6.08597 8.61409 6.10875 8.60701 6.08997 8.604C6.11259 8.60758 6.13571 8.60758 6.15833 8.604C6.13954 8.60701 6.16232 8.61409 6.26941 8.52795C6.38633 8.43389 6.53139 8.28989 6.77356 8.04773L10.0352 4.78613L10.9631 5.71411Z", ++ fill: "currentColor" ++ })] ++ }); ++ } ++ /** In-progress: business-blue ring fading out; CSS spins the svg. */ ++ function ProgressGlyph() { ++ const gradientId = (0, react.useId)(); ++ return (0, react_jsx_runtime.jsxs)("svg", { ++ width: 14, ++ height: 14, ++ viewBox: "0 0 14 14", ++ fill: "none", ++ "aria-hidden": "true", ++ className: TodoPanel_module_css_default.glyphProgress, ++ children: [(0, react_jsx_runtime.jsx)("defs", { children: (0, react_jsx_runtime.jsxs)("linearGradient", { ++ id: gradientId, ++ x1: "2.5", ++ y1: "12", ++ x2: "10.5", ++ y2: "3.5", ++ gradientUnits: "userSpaceOnUse", ++ children: [(0, react_jsx_runtime.jsx)("stop", { stopColor: "currentColor" }), (0, react_jsx_runtime.jsx)("stop", { ++ offset: "1", ++ stopColor: "currentColor", ++ stopOpacity: "0" ++ })] ++ }) }), (0, react_jsx_runtime.jsx)("circle", { ++ cx: "7", ++ cy: "7", ++ r: "6.4", ++ stroke: `url(#${gradientId})`, ++ strokeWidth: "1.2" ++ })] ++ }); ++ } ++ /** Pending: dashed unstarted ring (figma dash 2.4 2.4). */ ++ function PendingGlyph() { ++ return (0, react_jsx_runtime.jsx)("svg", { ++ width: 14, ++ height: 14, ++ viewBox: "0 0 14 14", ++ fill: "none", ++ "aria-hidden": "true", ++ className: TodoPanel_module_css_default.glyphPending, ++ children: (0, react_jsx_runtime.jsx)("circle", { ++ cx: "7", ++ cy: "7", ++ r: "6.4", ++ stroke: "currentColor", ++ strokeWidth: "1.2", ++ strokeDasharray: "2.4 2.4" ++ }) ++ }); ++ } ++ function StatusGlyph({ status }) { ++ switch (status) { ++ case "completed": return (0, react_jsx_runtime.jsx)(CompletedGlyph, {}); ++ case "in_progress": return (0, react_jsx_runtime.jsx)(ProgressGlyph, {}); ++ case "pending": return (0, react_jsx_runtime.jsx)(PendingGlyph, {}); ++ /* v8 ignore next -- closed TodoItem status union */ ++ default: return assertNever(status); ++ } ++ } ++ /** Header summary: "·"-joined per-status counts; zero-count segments are omitted as noise (a non-empty list keeps at least one). */ ++ function progressLabel(todos, t) { ++ const done = todos.filter((item) => item.status === "completed").length; ++ const active = todos.filter((item) => item.status === "in_progress").length; ++ const pending = todos.length - done - active; ++ return [ ++ ...done > 0 ? [t("todo.progress.done", { done })] : [], ++ ...active > 0 ? [t("todo.progress.active", { active })] : [], ++ ...pending > 0 ? [t("todo.progress.pending", { pending })] : [] ++ ].join(" · "); ++ } ++ function TodoPanel({ todos, t }) { ++ const [collapsed, setCollapsed] = (0, react.useState)(true); ++ if (todos.length === 0) return null; ++ return (0, react_jsx_runtime.jsx)("section", { ++ className: TodoPanel_module_css_default.root, ++ "data-testid": "todo-panel", ++ "aria-label": t("todo.title"), ++ children: (0, react_jsx_runtime.jsxs)("div", { ++ className: TodoPanel_module_css_default.body, ++ children: [(0, react_jsx_runtime.jsxs)("button", { ++ type: "button", ++ className: TodoPanel_module_css_default.header, ++ "aria-expanded": !collapsed, ++ onClick: () => { ++ setCollapsed((v) => !v); ++ }, ++ children: [ ++ (0, react_jsx_runtime.jsx)("span", { ++ className: TodoPanel_module_css_default.lead, ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChecklistOutline14, {}) ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: TodoPanel_module_css_default.title, ++ children: t("todo.title") ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: TodoPanel_module_css_default.progress, ++ children: progressLabel(todos, t) ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: TodoPanel_module_css_default.chevron, ++ "aria-hidden": true, ++ children: collapsed ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutline14, {}) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {}) ++ }) ++ ] ++ }), !collapsed && (0, react_jsx_runtime.jsx)("ul", { ++ className: TodoPanel_module_css_default.list, ++ children: todos.map((item) => (0, react_jsx_runtime.jsxs)("li", { ++ className: TodoPanel_module_css_default.item, ++ "data-status": item.status, ++ children: [(0, react_jsx_runtime.jsx)("span", { ++ className: TodoPanel_module_css_default.glyph, ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)(StatusGlyph, { status: item.status }) ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: TodoPanel_module_css_default.content, ++ children: item.content ++ })] ++ }, item.content)) ++ })] ++ }) ++ }); ++ } ++ /** Dock adapter: reads the host-computed 'todos' projection (whole list; absent or null renders nothing). */ ++ function TodoDock({ useProjection, t }) { ++ return (0, react_jsx_runtime.jsx)(TodoPanel, { ++ todos: useProjection("todos") ?? [], ++ t ++ }); ++ } ++ /** ++ * The plan strip as a plain registrant plugin (QueueDock posture), following ++ * the input-dock declaration across independent activation and reload. ++ */ ++ const todoDockEntry = { ++ name: "conversation-todo-dock", ++ inject: ["slots"], ++ /** ++ * Register the plan strip before the goal and queue entries (order 0). ++ * @param ctx - registrant context (disposal rides ctx.effect inside slots.register). ++ */ ++ apply(ctx) { ++ ctx.slots.inject("conversation.input.dock", () => ctx.slots.register({ ++ name: "conversation.input.dock", ++ id: "todo", ++ order: 0, ++ locale: NS ++ }, TodoDock)); ++ } ++ }; ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/queue/QueueDock.module.css.mjs ++ const css$8 = "._7yHdaG_dock{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));margin:0 auto calc(0px - var(--dsh-composer-stack-gap) - 3px);padding:0 var(--dsh-composer-dock-inset);flex:none}._7yHdaG_panel{background:var(--dsw-specific-tip);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:12px 12px 0 0;width:100%;padding:2px 0;position:relative;overflow:hidden}._7yHdaG_panel:after{border:1px solid var(--dsw-alias-border-l1);border-radius:inherit;content:\"\";pointer-events:none;border-bottom:none;position:absolute;inset:0}._7yHdaG_header{box-sizing:border-box;width:100%;height:36px;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:10px;padding:4px 12px;display:flex}._7yHdaG_header:focus-visible{outline:2px solid var(--dsw-alias-label-tertiary);outline-offset:-2px}._7yHdaG_header:disabled{cursor:default}._7yHdaG_lead{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}._7yHdaG_count{min-width:0;font-family:Inter, var(--dsw-font-family);flex:auto;font-size:13px;font-weight:500;line-height:24px}._7yHdaG_chevron{width:14px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}._7yHdaG_list{max-height:180px;margin:0;padding:0;list-style:none;overflow-y:auto}._7yHdaG_row{box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;width:100%;height:36px;padding:4px 5px 4px 12px;display:flex}._7yHdaG_row+._7yHdaG_row{box-shadow:inset 0 1px 0 var(--dsw-alias-border-l1)}._7yHdaG_preview,._7yHdaG_editor{min-width:0;font:var(--dsw-font-xs-13);font-family:Inter, var(--dsw-font-family);flex:auto}._7yHdaG_preview{color:var(--dsw-alias-label-primary-dimmed);text-overflow:ellipsis;white-space:nowrap;word-break:break-word;overflow:hidden}._7yHdaG_editor{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);height:28px;color:var(--dsw-alias-label-primary);border-radius:6px;outline:none;padding:0 8px}._7yHdaG_editor:focus{border-color:var(--dsw-alias-state-business-primary)}._7yHdaG_actions{flex:none;align-items:center;gap:10px;display:flex}._7yHdaG_action{width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:999px;flex:none;place-items:center;padding:0;display:grid}._7yHdaG_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7yHdaG_action:focus-visible{outline:2px solid var(--dsw-alias-label-tertiary);outline-offset:-2px}._7yHdaG_action:disabled{cursor:default;opacity:.45}"; ++ const tagId$8 = "@deepseek-ai/dsh-client-ui-conversation/QueueDock.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$8; ++ tag.textContent = css$8; ++ document.head.appendChild(tag); ++ } ++ var QueueDock_module_css_default = { ++ "action": "_7yHdaG_action", ++ "actions": "_7yHdaG_actions", ++ "chevron": "_7yHdaG_chevron", ++ "count": "_7yHdaG_count", ++ "dock": "_7yHdaG_dock", ++ "editor": "_7yHdaG_editor", ++ "header": "_7yHdaG_header", ++ "lead": "_7yHdaG_lead", ++ "list": "_7yHdaG_list", ++ "panel": "_7yHdaG_panel", ++ "preview": "_7yHdaG_preview", ++ "row": "_7yHdaG_row" ++ }; ++ //#endregion ++ //#region lib/types/client/queue/QueueDock.js ++ /** ++ * Queue strip: one item renders directly; multiple items default to a ++ * collapsible count header; an empty queue renders nothing. ++ */ ++ function QueueDock({ useSession, updateQueue, notify, t }) { ++ const inbox = useSession((s) => s.queue); ++ const queue = (0, react.useMemo)(() => inbox.filter((row) => row.placement === "queued"), [inbox]); ++ const running = useSession((s) => s.running); ++ const queueMutable = useSession((s) => s.subagent === null); ++ const [editing, setEditing] = (0, react.useState)(null); ++ const [busy, setBusy] = (0, react.useState)(null); ++ const [collapsed, setCollapsed] = (0, react.useState)(true); ++ const listId = (0, react.useId)(); ++ (0, react.useEffect)(() => { ++ if (queue.length === 0 && !collapsed) setCollapsed(true); ++ if (editing !== null && (!queueMutable || !queue.some((row) => row.id === editing.id))) setEditing(null); ++ }, [ ++ collapsed, ++ editing, ++ queue, ++ queueMutable ++ ]); ++ if (queue.length === 0) return null; ++ const interactionActive = queueMutable && (editing !== null || busy !== null); ++ const expanded = !collapsed || interactionActive; ++ const listVisible = queue.length === 1 || expanded; ++ const applyAction = async (itemId, action, failure) => { ++ setBusy(itemId); ++ try { ++ await updateQueue(itemId, action); ++ return true; ++ } catch { ++ notify("error", failure); ++ return false; ++ } finally { ++ setBusy((current) => current === itemId ? null : current); ++ } ++ }; ++ const saveEdit = async () => { ++ if (editing === null || editing.text.trim() === "") return; ++ if (await applyAction(editing.id, { ++ kind: "edit", ++ content: [{ ++ type: "text", ++ text: editing.text ++ }] ++ }, t("queue.editFailed"))) setEditing(null); ++ }; ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: QueueDock_module_css_default.dock, ++ "data-queue-dock": "", ++ children: (0, react_jsx_runtime.jsxs)("div", { ++ className: QueueDock_module_css_default.panel, ++ children: [queue.length > 1 && (0, react_jsx_runtime.jsxs)("button", { ++ type: "button", ++ className: QueueDock_module_css_default.header, ++ "aria-controls": listId, ++ "aria-expanded": expanded, ++ disabled: interactionActive, ++ onClick: () => { ++ setCollapsed((value) => !value); ++ }, ++ children: [ ++ (0, react_jsx_runtime.jsx)("span", { ++ className: QueueDock_module_css_default.lead, ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQueueOutline14, {}) ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: QueueDock_module_css_default.count, ++ children: t("queue.count", { n: queue.length }) ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: QueueDock_module_css_default.chevron, ++ "aria-hidden": true, ++ children: expanded ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {}) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutline14, {}) ++ }) ++ ] ++ }), (0, react_jsx_runtime.jsx)("ul", { ++ id: listId, ++ className: QueueDock_module_css_default.list, ++ hidden: !listVisible, ++ children: listVisible && queue.map((row) => (0, react_jsx_runtime.jsxs)("li", { ++ className: QueueDock_module_css_default.row, ++ children: [ ++ queue.length === 1 && (0, react_jsx_runtime.jsx)("span", { ++ className: QueueDock_module_css_default.lead, ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQueueOutline14, {}) ++ }), ++ editing?.id === row.id ? (0, react_jsx_runtime.jsx)("input", { ++ autoFocus: true, ++ className: QueueDock_module_css_default.editor, ++ "aria-label": t("queue.edit"), ++ value: editing.text, ++ onChange: (event) => { ++ setEditing({ ++ id: row.id, ++ text: event.currentTarget.value ++ }); ++ }, ++ onKeyDown: (event) => { ++ if (event.key === "Escape") { ++ setEditing(null); ++ return; ++ } ++ if (event.key === "Enter" && !event.nativeEvent.isComposing) { ++ event.preventDefault(); ++ saveEdit(); ++ } ++ } ++ }) : (0, react_jsx_runtime.jsx)("span", { ++ className: QueueDock_module_css_default.preview, ++ children: row.preview ++ }), ++ queueMutable && (0, react_jsx_runtime.jsx)("div", { ++ className: QueueDock_module_css_default.actions, ++ children: editing?.id === row.id ? (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("queue.save"), ++ side: "bottom", ++ delayMs: 500, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: QueueDock_module_css_default.action, ++ "aria-label": t("queue.save"), ++ disabled: busy !== null || editing.text.trim() === "", ++ onClick: () => { ++ saveEdit(); ++ }, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, { size: 14 }) ++ }) ++ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("queue.cancelEdit"), ++ side: "bottom", ++ delayMs: 500, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: QueueDock_module_css_default.action, ++ "aria-label": t("queue.cancelEdit"), ++ disabled: busy !== null, ++ onClick: () => { ++ setEditing(null); ++ }, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutline16, { size: 14 }) ++ }) ++ })] }) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("queue.edit"), ++ side: "bottom", ++ delayMs: 500, ++ disabled: row.text === null, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: QueueDock_module_css_default.action, ++ "aria-label": t("queue.edit"), ++ title: row.text === null ? t("queue.edit.unsupported") : void 0, ++ disabled: busy !== null || row.text === null, ++ onClick: () => { ++ if (row.text !== null) setEditing({ ++ id: row.id, ++ text: row.text ++ }); ++ }, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconEditOutline16, { size: 14 }) ++ }) ++ }), ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("queue.remove"), ++ side: "bottom", ++ delayMs: 500, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: QueueDock_module_css_default.action, ++ "aria-label": t("queue.remove"), ++ disabled: busy !== null, ++ onClick: () => { ++ applyAction(row.id, { kind: "remove" }, t("queue.removeFailed")); ++ }, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutline16, { size: 14 }) ++ }) ++ }), ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, { ++ label: t("queue.steer"), ++ side: "bottom", ++ delayMs: 500, ++ disabled: !running, ++ children: (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: QueueDock_module_css_default.action, ++ "aria-label": t("queue.steer"), ++ title: running ? void 0 : t("queue.steer.unavailable"), ++ disabled: busy !== null || !running, ++ onClick: () => { ++ applyAction(row.id, { kind: "steer" }, t("queue.steerFailed")); ++ }, ++ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSendOutline14, {}) ++ }) ++ }) ++ ] }) ++ }) ++ ] ++ }, row.id)) ++ })] ++ }) ++ }); ++ } ++ /** ++ * The dock entry as a plain registrant plugin. The conversation service is ++ * the action contract; the slot declaration has an independent lifecycle boundary. ++ */ ++ const queueDockEntry = { ++ name: "conversation-queue-dock", ++ inject: [ ++ "slots", ++ "conversation", ++ "sessions" ++ ], ++ /** ++ * Register the queue strip as the terminal input-dock entry (order 20). ++ * @param ctx - registrant context (disposal rides ctx.effect inside slots.register). ++ */ ++ apply(ctx) { ++ ctx.slots.inject("conversation.input.dock", () => ctx.slots.register({ ++ name: "conversation.input.dock", ++ id: "queue", ++ order: 20, ++ locale: NS, ++ inject: (sessionId) => { ++ const actx = ctx.sessions.scope(sessionId); ++ if (actx === void 0) throw new Error(`queue dock: session "${sessionId}" resolved no scope`); ++ const conversation = actx.get("conversation"); ++ if (conversation === void 0) throw new Error("queue dock: conversation service unavailable"); ++ return { ++ updateQueue: (itemId, action) => conversation.updateQueue(itemId, action), ++ notify: (level, text) => { ++ conversation.input.for(actx).notify(level, text); ++ } ++ }; ++ } ++ }, QueueDock)); ++ } ++ }; ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/HeroShell.module.css.mjs ++ const css$7 = ".pXSMma_root{justify-content:center;align-items:center;min-width:0;height:100%;padding:0 24px;display:flex}.pXSMma_stack{width:100%;max-width:var(--dsh-composer-card-max-width);flex-direction:column;align-items:stretch;gap:12px;display:flex;overflow:visible}.pXSMma_headline{color:var(--dsw-alias-label-primary);grid-template-columns:34px auto auto;justify-content:center;align-items:center;column-gap:10px;font-size:26px;font-weight:500;line-height:32px;display:grid}.pXSMma_headlineText{grid-area:1/2}.pXSMma_previewBadge{border:1px solid var(--dsw-alias-interactive-bg-hover);background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-label-primary-bluish);font-family:var(--ds-font-family-code);white-space:nowrap;border-radius:24px;grid-area:1/3;align-self:start;margin-top:2px;margin-left:-3px;padding:1px 7px 0;font-size:12px;font-weight:500;line-height:18px}.pXSMma_fishHitbox{grid-area:1/1;justify-content:center;align-items:center;display:inline-flex}.pXSMma_fish{color:var(--dsw-alias-label-primary);transform-origin:50% 60%}@keyframes pXSMma_hero-fish-swim{0%,to{transform:translate(0)rotate(0)}35%{transform:translate(-1px,-1px)rotate(-5deg)}70%{transform:translate(1px)rotate(3deg)}}@media (hover:hover) and (prefers-reduced-motion:no-preference){.pXSMma_fishHitbox:hover .pXSMma_fish{animation:pXSMma_hero-fish-swim var(--ds-transition-duration-slow) var(--ds-ease-in-out)}}.pXSMma_body{flex-direction:column;gap:12px;min-width:0;display:flex;position:relative;overflow:visible}.pXSMma_body>*{z-index:1;position:relative}.pXSMma_body>.pXSMma_workspaceRow{z-index:10;align-items:center;min-width:0;padding-left:8px;display:flex}.pXSMma_workspace{max-width:min(100%,360px);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;border-radius:16px;align-items:center;gap:4px;padding:0 8px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.pXSMma_workspace:not(:disabled):hover,.pXSMma_workspace[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}.pXSMma_workspace:disabled{cursor:default}.pXSMma_folder{color:var(--dsw-alias-label-primary);flex:none}.pXSMma_workspaceLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pXSMma_chevron{color:var(--dsw-alias-label-caption);flex:none}.pXSMma_modalInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:100%;height:44px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:22px;outline:none;padding:7px 14px;font-size:14px;font-weight:400;line-height:22px}.pXSMma_modalInput::placeholder{color:var(--dsw-alias-label-caption)}.pXSMma_modalInput:disabled{color:var(--dsw-alias-label-dimmed)}.pXSMma_modalAction{min-width:72px}.pXSMma_modalError{color:var(--dsw-alias-state-error-primary);margin-top:8px;font-size:12px;line-height:18px}"; ++ const tagId$7 = "@deepseek-ai/dsh-client-ui-conversation/HeroShell.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$7; ++ tag.textContent = css$7; ++ document.head.appendChild(tag); ++ } ++ var HeroShell_module_css_default = { ++ "body": "pXSMma_body", ++ "chevron": "pXSMma_chevron", ++ "fish": "pXSMma_fish", ++ "fishHitbox": "pXSMma_fishHitbox", ++ "folder": "pXSMma_folder", ++ "headline": "pXSMma_headline", ++ "headlineText": "pXSMma_headlineText", ++ "hero-fish-swim": "pXSMma_hero-fish-swim", ++ "modalAction": "pXSMma_modalAction", ++ "modalError": "pXSMma_modalError", ++ "modalInput": "pXSMma_modalInput", ++ "previewBadge": "pXSMma_previewBadge", ++ "root": "pXSMma_root", ++ "stack": "pXSMma_stack", ++ "workspace": "pXSMma_workspace", ++ "workspaceLabel": "pXSMma_workspaceLabel", ++ "workspaceRow": "pXSMma_workspaceRow" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/EmptyHero.js ++ /** ++ * Basename label for the workspace chip (the shared derivation); ++ * separator-only paths echo the raw cwd. ++ * @param cwd - workspace directory path (non-empty). ++ * @returns chip label. ++ */ ++ function workspaceLabel(cwd) { ++ const base = (0, _deepseek_ai_dsh_client_runtime_client.workspaceTitleOf)(cwd); ++ return base !== "" ? base : cwd; ++ } ++ /** ++ * The workspace chip (folder + label + chevron), always interactive: before ++ * the first message the workspace stays switchable — picking another one ++ * moves the New Session flow to that workspace's blank session. Without a ++ * label the chip renders its placeholder state: closed folder + the ++ * "Choose workspace" call to action. ++ * @param props.label - chip label (see {@link workspaceLabel}); omitted → placeholder. ++ * @param props.menuOpen - menu expansion echo. ++ * @param props.onClick - menu toggle. ++ * @returns the chip button element. ++ */ ++ function WorkspaceChip({ buttonRef, label, menuOpen = false, onClick, t }) { ++ return (0, react_jsx_runtime.jsxs)("button", { ++ ref: buttonRef, ++ type: "button", ++ className: HeroShell_module_css_default.workspace, ++ "aria-label": t("hero.chooseWorkspace"), ++ "aria-haspopup": "menu", ++ "aria-expanded": menuOpen, ++ onClick, ++ children: [ ++ label === void 0 ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderClose16, { ++ className: HeroShell_module_css_default.folder, ++ size: 16 ++ }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpen16, { ++ className: HeroShell_module_css_default.folder, ++ size: 16 ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: HeroShell_module_css_default.workspaceLabel, ++ children: label ?? t("hero.chooseWorkspace") ++ }), ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { ++ className: HeroShell_module_css_default.chevron, ++ size: 12 ++ }) ++ ] ++ }); ++ } ++ /** ++ * The soft blue backdrop ellipse (figma 313:14109). Rendered by the hero ++ * owner (ConversationRoot), not HeroShell, so it can center on the input ++ * card; the owner's className supplies all positioning. ++ * @param props.className - positioning class from the owner. ++ * @returns the blurred-ellipse svg element. ++ */ ++ function HeroGlow({ className }) { ++ const glowFilterId = `empty-glow-${(0, react.useId)().replace(/:/g, "")}`; ++ return (0, react_jsx_runtime.jsxs)("svg", { ++ className, ++ viewBox: "0 0 1051 468", ++ fill: "none", ++ "aria-hidden": "true", ++ children: [(0, react_jsx_runtime.jsx)("defs", { children: (0, react_jsx_runtime.jsxs)("filter", { ++ id: glowFilterId, ++ x: "0", ++ y: "0", ++ width: "1051", ++ height: "468", ++ filterUnits: "userSpaceOnUse", ++ colorInterpolationFilters: "sRGB", ++ children: [ ++ (0, react_jsx_runtime.jsx)("feFlood", { ++ floodOpacity: "0", ++ result: "BackgroundImageFix" ++ }), ++ (0, react_jsx_runtime.jsx)("feBlend", { ++ mode: "normal", ++ in: "SourceGraphic", ++ in2: "BackgroundImageFix", ++ result: "shape" ++ }), ++ (0, react_jsx_runtime.jsx)("feGaussianBlur", { ++ stdDeviation: "50", ++ result: "effect1_foregroundBlur" ++ }) ++ ] ++ }) }), (0, react_jsx_runtime.jsx)("g", { ++ filter: `url(#${glowFilterId})`, ++ children: (0, react_jsx_runtime.jsx)("ellipse", { ++ cx: "525.5", ++ cy: "234", ++ rx: "425.5", ++ ry: "134", ++ fill: "#6187D8", ++ fillOpacity: "0.08" ++ }) ++ })] ++ }); ++ } ++ /** ++ * Render the hero chrome (headline only; no glow, no composer, no workspace ++ * row — the glow is the owner's {@link HeroGlow}). ++ * @param props - see {@link HeroShellProps}. ++ * @returns the centered hero element tree. ++ */ ++ function HeroShell({ t, renderSlot, children }) { ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: HeroShell_module_css_default.root, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: HeroShell_module_css_default.stack, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: HeroShell_module_css_default.headline, ++ children: [ ++ (0, react_jsx_runtime.jsx)("span", { ++ className: HeroShell_module_css_default.fishHitbox, ++ children: renderSlot("conversation.hero.brand.mark", { ++ size: 34, ++ className: HeroShell_module_css_default.fish ++ }, { fallback: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.FishLogo, { ++ size: 34, ++ className: HeroShell_module_css_default.fish ++ }) }) ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: HeroShell_module_css_default.headlineText, ++ children: t("hero.headline") ++ }), ++ (0, react_jsx_runtime.jsx)("span", { ++ className: HeroShell_module_css_default.previewBadge, ++ children: t("hero.preview") ++ }) ++ ] ++ }), (0, react_jsx_runtime.jsx)("div", { className: HeroShell_module_css_default.body })] ++ }), children] ++ }); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/ConversationRoot.module.css.mjs ++ const css$6 = ".wSkVaW_root{background:var(--dsw-alias-bg-base);--dsh-chat-content-width:748px;--dsh-composer-card-max-width:calc(var(--dsh-chat-content-width) + 32px);--dsh-composer-side-clearance:16px;--dsh-composer-dock-inset:8px;flex-direction:column;min-width:0;height:100%;display:flex}.wSkVaW_header{border-bottom:1px solid #0000;flex:none;padding:12px 28px 0 20px;position:relative}.wSkVaW_header:after{content:\"\";z-index:0;background:var(--dsw-alias-border-l2);pointer-events:none;height:1px;position:absolute;bottom:1px;left:0;right:0}.wSkVaW_headerHidden{display:none}.wSkVaW_titleRow{align-items:center;gap:0;min-height:32px;display:flex}.wSkVaW_titleCluster{flex:1;align-items:center;gap:10px;min-width:0;display:flex}.wSkVaW_crumbs{white-space:nowrap;align-items:center;gap:4px;min-width:0;display:flex;overflow:hidden}.wSkVaW_crumbSeg{align-items:center;gap:4px;min-width:0;display:inline-flex}.wSkVaW_crumbSep{color:var(--dsw-alias-label-caption);font-size:14px;line-height:20px}.wSkVaW_crumb{max-width:220px;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:12px;padding:4px 8px;font-size:14px;line-height:20px;overflow:hidden}.wSkVaW_crumbSubagent{font-size:12px;line-height:18px}.wSkVaW_crumb:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.wSkVaW_crumbCurrent{color:var(--dsw-alias-label-primary);cursor:default;font-weight:500}.wSkVaW_headerActions{flex:none;align-items:center;gap:8px;display:flex}.wSkVaW_headerUtilities{flex:none;align-items:center;gap:8px;margin-left:20px;display:flex}.wSkVaW_headerUtilities:empty{display:none}.wSkVaW_tabs{z-index:1;gap:36px;margin-top:4px;padding-left:8px;display:flex;position:relative}.wSkVaW_tab{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;padding:0 0 11px;font-size:13px;font-weight:500;line-height:16px;position:relative}.wSkVaW_tab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:1px;left:0;right:0}.wSkVaW_tabActive{color:var(--dsw-alias-state-business-primary)}.wSkVaW_tabActive:after{background:var(--dsw-alias-state-business-primary)}.wSkVaW_viewArea{flex-direction:column;flex:1;min-height:0;display:flex}.wSkVaW_composerStack{--dsh-composer-stack-gap:6px;gap:var(--dsh-composer-stack-gap);flex-direction:column;display:flex}.wSkVaW_composerSeat{--dsh-composer-text-max-height:336px;flex-direction:column;flex:none;display:flex}.wSkVaW_root[data-phase=active]{overflow:hidden}.wSkVaW_root[data-phase=active] .wSkVaW_header{flex:none}.wSkVaW_scrollBody{scrollbar-gutter:stable;flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden auto}.wSkVaW_root[data-phase=active] .wSkVaW_viewArea{flex:1 0 auto;min-height:auto}.wSkVaW_root[data-phase=active] .wSkVaW_composerSeat{z-index:7;background:linear-gradient(180deg, color-mix(in srgb, var(--dsw-alias-bg-base) 0%, transparent) 0px, var(--dsw-alias-bg-base) 36px);position:sticky;bottom:0}.wSkVaW_scrollBody:has([data-conversation-composer-overlay]){scrollbar-gutter:auto;position:relative;overflow:hidden auto}.wSkVaW_scrollBody:has([data-conversation-composer-overlay])>[data-slot=conversation\\.session]>.wSkVaW_viewArea{flex:1 1 0;min-height:0;overflow:hidden}.wSkVaW_scrollBody:has([data-conversation-composer-overlay])>.wSkVaW_composerSeat{right:var(--dsh-scrollbar-width);position:absolute;bottom:0;left:0}.wSkVaW_composerHero{width:min(calc(var(--dsh-composer-card-max-width) + 2 * var(--dsh-composer-side-clearance)), 100%);z-index:1;align-self:center;gap:8px;padding-bottom:32px;position:relative}.wSkVaW_heroGlow{z-index:-1;aspect-ratio:1051/468;pointer-events:none;width:135.438%;position:absolute;bottom:92px;left:50%;transform:translate(-50%,50%)}.wSkVaW_heroWorkspaceRow{align-items:center;gap:2px;min-width:0;margin-top:4px;padding-left:20px;display:flex}.wSkVaW_root[data-phase=hero] .wSkVaW_scrollBody{justify-content:center;overflow-y:auto}.wSkVaW_root[data-phase=settling] .wSkVaW_composerSeat{visibility:hidden}"; ++ const tagId$6 = "@deepseek-ai/dsh-client-ui-conversation/ConversationRoot.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$6; ++ tag.textContent = css$6; ++ document.head.appendChild(tag); ++ } ++ var ConversationRoot_module_css_default = { ++ "composerHero": "wSkVaW_composerHero", ++ "composerSeat": "wSkVaW_composerSeat", ++ "composerStack": "wSkVaW_composerStack", ++ "crumb": "wSkVaW_crumb", ++ "crumbCurrent": "wSkVaW_crumbCurrent", ++ "crumbSeg": "wSkVaW_crumbSeg", ++ "crumbSep": "wSkVaW_crumbSep", ++ "crumbSubagent": "wSkVaW_crumbSubagent", ++ "crumbs": "wSkVaW_crumbs", ++ "header": "wSkVaW_header", ++ "headerActions": "wSkVaW_headerActions", ++ "headerHidden": "wSkVaW_headerHidden", ++ "headerUtilities": "wSkVaW_headerUtilities", ++ "heroGlow": "wSkVaW_heroGlow", ++ "heroWorkspaceRow": "wSkVaW_heroWorkspaceRow", ++ "root": "wSkVaW_root", ++ "scrollBody": "wSkVaW_scrollBody", ++ "tab": "wSkVaW_tab", ++ "tabActive": "wSkVaW_tabActive", ++ "tabs": "wSkVaW_tabs", ++ "titleCluster": "wSkVaW_titleCluster", ++ "titleRow": "wSkVaW_titleRow", ++ "viewArea": "wSkVaW_viewArea" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/ConversationRoot.js ++ function ConversationRoot({ sessionId, useSession, useSessions, useWorkspaces, useInput, useComposerBlock, renderSlot, renderSlotChain, selectWorkspace, t }) { ++ const openState = useSession((s) => s.openState); ++ const composerPhase = useSession((s) => s.composerPhase); ++ const pending = useSession((s) => s.pending) ?? []; ++ const session = useSession((s) => s); ++ const inputState = useInput((s) => s); ++ const cwd = useSessions((s) => sessionId === void 0 ? void 0 : s.byId[sessionId]?.cwd); ++ const summaryBlank = useSessions((s) => sessionId === void 0 ? void 0 : s.byId[sessionId]?.blank); ++ const workspaces = useWorkspaces((s) => s); ++ const composerBlock = useComposerBlock((block) => block); ++ const [pickerOpen, setPickerOpen] = (0, react.useState)(false); ++ const [pendingWorkspaceId, setPendingWorkspaceId] = (0, react.useState)(); ++ const pickerAnchor = (0, react.useRef)(null); ++ const seatObserver = (0, react.useRef)(null); ++ const seatResizeRef = (0, react.useCallback)((seat) => { ++ seatObserver.current?.disconnect(); ++ seatObserver.current = null; ++ const scroller = seat?.parentElement ?? null; ++ if (seat === null || scroller === null) return; ++ seatObserver.current = new ResizeObserver(() => { ++ scroller.style.setProperty("--dsh-composer-height", `${seat.offsetHeight}px`); ++ }); ++ seatObserver.current.observe(seat); ++ }, []); ++ const sessionWorkspace = sessionId === void 0 ? void 0 : workspaces.items.find((workspace) => workspace.sessionIds.includes(sessionId)); ++ const pendingWorkspace = workspaces.items.find((workspace) => workspace.workspaceId === pendingWorkspaceId); ++ (0, react.useEffect)(() => { ++ if (pendingWorkspaceId === void 0) return; ++ if (sessionWorkspace?.workspaceId === pendingWorkspaceId || workspaces.phase === "ready" && pendingWorkspace === void 0) setPendingWorkspaceId(void 0); ++ }, [ ++ pendingWorkspaceId, ++ sessionWorkspace?.workspaceId, ++ workspaces.phase, ++ pendingWorkspace ++ ]); ++ const settling = sessionId !== void 0 && composerPhase === "blank" && openState === "loading" && summaryBlank !== true; ++ const hero = sessionId === void 0 || composerPhase === "blank" && (openState === "open" || summaryBlank === true); ++ const zone = session === void 0 || inputState === void 0 ? void 0 : { ++ session, ++ input: inputState ++ }; ++ const chipTitle = pendingWorkspace?.title ?? (sessionId === void 0 ? void 0 : sessionWorkspace?.title ?? (workspaces.phase === "ready" || cwd === void 0 || cwd === "" ? void 0 : workspaceLabel(cwd))); ++ const heroWorkspaceRow = (0, react_jsx_runtime.jsxs)("div", { ++ className: ConversationRoot_module_css_default.heroWorkspaceRow, ++ children: [ ++ (0, react_jsx_runtime.jsx)(WorkspaceChip, { ++ buttonRef: pickerAnchor, ++ label: chipTitle, ++ menuOpen: pickerOpen, ++ onClick: () => { ++ setPickerOpen((open) => !open); ++ }, ++ t ++ }), ++ renderSlot("conversation.hero.workspace", { ++ open: pickerOpen, ++ anchorRef: pickerAnchor, ++ selectedId: pendingWorkspaceId ?? sessionWorkspace?.workspaceId, ++ onPick: (workspaceId) => { ++ setPickerOpen(false); ++ setPendingWorkspaceId(workspaceId); ++ selectWorkspace(workspaceId).catch(() => { ++ setPendingWorkspaceId((current) => current === workspaceId ? void 0 : current); ++ }); ++ }, ++ onClose: () => { ++ setPickerOpen(false); ++ } ++ }), ++ renderSlot("conversation.hero.agentPreset", {}) ++ ] ++ }); ++ const inert = sessionId === void 0 || hero && chipTitle === void 0; ++ const inputBar = renderSlot("conversation.composer.bar", { ++ variant: hero ? "hero" : "composer", ++ ...inert ? { ++ disabled: true, ++ placeholder: t("placeholder.workspace"), ++ workspacePickerOpen: pickerOpen, ++ onRequestWorkspace: () => { ++ setPickerOpen(true); ++ } ++ } : !inert && composerBlock !== void 0 ? { ++ blocked: composerBlock, ++ placeholder: composerBlock.reason ++ } : hero ? { placeholder: t("placeholder.hero") } : {}, ++ overlay: renderSlot("conversation.input.overlay", {}), ++ leftItems: zone === void 0 ? null : renderSlot("conversation.input.left", zone), ++ rightItems: zone === void 0 ? null : renderSlot("conversation.input.right", zone), ++ footer: !hero && zone !== void 0 ? renderSlot("conversation.composer.dock", zone) : null ++ }); ++ const composerBar = (0, react_jsx_runtime.jsxs)("div", { ++ className: clsx(ConversationRoot_module_css_default.composerStack, hero && ConversationRoot_module_css_default.composerHero), ++ children: [ ++ hero && (0, react_jsx_runtime.jsx)(HeroGlow, { className: ConversationRoot_module_css_default.heroGlow }), ++ hero && (0, react_jsx_runtime.jsx)(HeroShell, { ++ t, ++ renderSlot ++ }), ++ hero && heroWorkspaceRow, ++ zone !== void 0 && renderSlot("conversation.input.dock", zone), ++ inputBar ++ ] ++ }); ++ const phase = settling ? "settling" : hero ? "hero" : "active"; ++ const composer = renderSlotChain("conversation.composer", { ++ interactions: pending, ++ session ++ }, { ++ fallback: composerBar, ++ overlay: true ++ }); ++ const composerSeat = (0, react_jsx_runtime.jsx)("div", { ++ ref: seatResizeRef, ++ className: ConversationRoot_module_css_default.composerSeat, ++ "data-composer-seat": "", ++ children: composer ++ }); ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: ConversationRoot_module_css_default.root, ++ "data-phase": phase, ++ children: [renderSlot("conversation.session.header", {}), (0, react_jsx_runtime.jsxs)("div", { ++ className: ConversationRoot_module_css_default.scrollBody, ++ "data-conversation-scroll": "", ++ children: [renderSlot("conversation.session", {}), composerSeat] ++ })] ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/skeleton/ConversationSession.js ++ /** Strict per-session header/body content inserted into the resident conversation layout. */ ++ const DEFAULT_VIEW_ID = "chat"; ++ /** Resolve by id and keep stale persisted selections on the stable Chat fallback. */ ++ function resolveActiveView(tabs, selectedId) { ++ const requestedId = selectedId ?? DEFAULT_VIEW_ID; ++ return tabs.find((view) => view.id === requestedId) ?? tabs.find((view) => view.id === DEFAULT_VIEW_ID); ++ } ++ function deriveAncestry(list, id) { ++ const chain = []; ++ const seen = /* @__PURE__ */ new Set(); ++ let cursor = id; ++ while (cursor !== void 0) { ++ if (seen.has(cursor)) break; ++ seen.add(cursor); ++ const summary = list.byId[cursor]; ++ if (summary === void 0) break; ++ chain.unshift({ ++ id: summary.id, ++ displayTitle: summary.displayTitle, ++ subagent: summary.origin === "subagent" ++ }); ++ if (summary.origin !== "subagent") break; ++ cursor = summary.parentId; ++ } ++ return chain; ++ } ++ function equalBreadcrumbs(left, right) { ++ return left.length === right.length && left.every((item, index) => { ++ const other = right.at(index); ++ return other !== void 0 && item.id === other.id && item.displayTitle === other.displayTitle; ++ }); ++ } ++ /** ++ * Renders Session header chrome above the resident conversation scrollport. ++ * @param props - Strict Session store, view ledger, navigation, render, and locale shares. ++ * @returns the hidden blank-session header or visible title and tabs. ++ */ ++ function ConversationSessionHeader({ sessionId, useSession, useSessions, useStore, actions, renderSlot, views, open, t }) { ++ (0, react.useSyncExternalStore)(views.subscribe, views.version); ++ const tabs = views.list(); ++ const active = resolveActiveView(tabs, useStore((s) => s.view)); ++ const ancestry = useSessions((s) => deriveAncestry(s, sessionId), equalBreadcrumbs); ++ const composerPhase = useSession((s) => s.composerPhase); ++ const hideChrome = useSession((s) => s.blank) && composerPhase === "blank"; ++ return (0, react_jsx_runtime.jsx)("header", { ++ className: clsx(ConversationRoot_module_css_default.header, hideChrome && ConversationRoot_module_css_default.headerHidden), ++ "aria-hidden": hideChrome || void 0, ++ children: !hideChrome && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: ConversationRoot_module_css_default.titleRow, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: ConversationRoot_module_css_default.titleCluster, ++ children: [(0, react_jsx_runtime.jsxs)("nav", { ++ className: ConversationRoot_module_css_default.crumbs, ++ "aria-label": t("session.hierarchy"), ++ children: [ancestry.map((summary, index) => { ++ const last = index === ancestry.length - 1; ++ const title = (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: clsx(ConversationRoot_module_css_default.crumb, summary.subagent && ConversationRoot_module_css_default.crumbSubagent, last && ConversationRoot_module_css_default.crumbCurrent), ++ disabled: last, ++ onClick: () => { ++ open(summary.id); ++ }, ++ children: summary.displayTitle ++ }); ++ const lineage = last || summary.subagent; ++ const lineageOwner = { ++ lineageSessionId: summary.id, ++ displayTitle: summary.displayTitle, ++ ...last ? {} : { openTitle: () => { ++ open(summary.id); ++ } } ++ }; ++ return (0, react_jsx_runtime.jsxs)("span", { ++ className: ConversationRoot_module_css_default.crumbSeg, ++ children: [index > 0 && (0, react_jsx_runtime.jsx)("span", { ++ className: ConversationRoot_module_css_default.crumbSep, ++ children: "/" ++ }), lineage ? summary.subagent ? renderSlot("conversation.session.header.lineage", lineageOwner, { fallback: title }) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [title, renderSlot("conversation.session.header.lineage", lineageOwner, { fallback: null })] }) : title] ++ }, summary.id); ++ }), ancestry.length === 0 && (0, react_jsx_runtime.jsx)("span", { ++ className: ConversationRoot_module_css_default.crumbCurrent, ++ children: sessionId ++ })] ++ }), (0, react_jsx_runtime.jsx)("div", { ++ className: ConversationRoot_module_css_default.headerActions, ++ children: renderSlot("conversation.session.header.actions", {}) ++ })] ++ }), (0, react_jsx_runtime.jsx)("div", { ++ className: ConversationRoot_module_css_default.headerUtilities, ++ children: renderSlot("conversation.session.header.utilities", {}) ++ })] ++ }), tabs.length > 1 && (0, react_jsx_runtime.jsx)("div", { ++ className: ConversationRoot_module_css_default.tabs, ++ role: "tablist", ++ children: tabs.map((viewTab) => (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ role: "tab", ++ "aria-selected": viewTab.id === active?.id, ++ className: clsx(ConversationRoot_module_css_default.tab, viewTab.id === active?.id && ConversationRoot_module_css_default.tabActive), ++ onClick: () => { ++ actions.setView(viewTab.id); ++ }, ++ children: viewTab.label ++ }, viewTab.id)) ++ })] }) ++ }); ++ } ++ /** ++ * Renders the active Session view inside the resident scrollport and keeps ++ * the input draft mirrored while blank Hero chrome is visible. ++ * @param props - Strict Session input/store, view ledger, and render shares. ++ * @returns the active view area, or null while the Session remains blank. ++ */ ++ function ConversationSession({ sessionId, useSession, useInput, inputActions, useStore, actions, renderSlot, views, bindDraftMirror, releaseSessionImages }) { ++ (0, react.useSyncExternalStore)(views.subscribe, views.version); ++ const active = resolveActiveView(views.list(), useStore((s) => s.view)); ++ const composerPhase = useSession((s) => s.composerPhase); ++ const blank = useSession((s) => s.blank); ++ const inputState = useInput((s) => s); ++ const storedDraft = useStore((s) => s.draft); ++ const inspect = useStore((s) => s.inspect ?? null); ++ (0, react.useEffect)(() => { ++ if (inputState.draft === "" && storedDraft !== "") inputActions.setDraft(storedDraft); ++ const unmirror = bindDraftMirror(actions.setDraft); ++ return () => { ++ unmirror(); ++ }; ++ }, [inputActions]); ++ (0, react.useEffect)(() => () => { ++ releaseSessionImages(sessionId); ++ }, [releaseSessionImages, sessionId]); ++ if (blank && composerPhase === "blank") return null; ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: ConversationRoot_module_css_default.viewArea, ++ children: active !== void 0 && renderSlot("conversation.view", { ++ inspect, ++ onInspectDone: () => { ++ actions.setInspect(null); ++ } ++ }, { only: active.id }) ++ }); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/DetailsPanel.module.css.mjs ++ const css$5 = ".ydkMvW_root{border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);flex-direction:column;min-width:0;height:100%;display:flex}.ydkMvW_header{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:8px;padding:14px 12px 12px;display:flex}.ydkMvW_title{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.ydkMvW_close{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.ydkMvW_close:hover{background:var(--dsw-alias-interactive-bg-hover)}.ydkMvW_body{flex:1;min-height:0;padding:12px 16px;overflow-y:auto}.ydkMvW_empty{color:var(--dsw-alias-label-tertiary);padding:8px 0;font-size:13px;line-height:20px}.ydkMvW_section{margin-bottom:16px}.ydkMvW_sectionLabel{color:var(--dsw-alias-label-secondary);margin-bottom:6px;font-size:12px;font-weight:500;line-height:18px}.ydkMvW_code{background:var(--dsw-alias-markdown-code-block);font-family:var(--ds-font-family-code);color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;border-radius:12px;margin:0;padding:16px;font-size:13px;line-height:22px}.ydkMvW_code[data-error]{color:var(--dsw-alias-state-error-primary)}"; ++ const tagId$5 = "@deepseek-ai/dsh-client-ui-conversation/DetailsPanel.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$5; ++ tag.textContent = css$5; ++ document.head.appendChild(tag); ++ } ++ var DetailsPanel_module_css_default = { ++ "body": "ydkMvW_body", ++ "close": "ydkMvW_close", ++ "code": "ydkMvW_code", ++ "empty": "ydkMvW_empty", ++ "header": "ydkMvW_header", ++ "root": "ydkMvW_root", ++ "section": "ydkMvW_section", ++ "sectionLabel": "ydkMvW_sectionLabel", ++ "title": "ydkMvW_title" ++ }; ++ //#endregion ++ //#region lib/types/client/skeleton/DetailsPanel.js ++ /** Material of a settled result node (native call or run_code sub-dispatch). */ ++ function settledMaterial(node, callId) { ++ return { ++ name: node.call?.name ?? callId, ++ argsRaw: node.call?.argsRaw ?? null, ++ block: node ++ }; ++ } ++ /** Material of an in-flight call (native call or run_code sub-dispatch). */ ++ function runningMaterial(call) { ++ return { ++ name: call.name, ++ argsRaw: call.argsRaw, ++ block: call ++ }; ++ } ++ function materialFor(s, callId) { ++ const found = findToolCall(s, callId); ++ if (found === void 0) return null; ++ return "kind" in found ? settledMaterial(found, callId) : runningMaterial(found); ++ } ++ function pretty(raw) { ++ try { ++ return JSON.stringify(JSON.parse(raw), null, 2); ++ } catch { ++ return raw; ++ } ++ } ++ /** Flatten a settled result for the no-ui-tool fallback. */ ++ function rawResultText(block) { ++ if (!("kind" in block)) return ""; ++ const parts = block.content.map((item) => item.type === "text" ? item.text : JSON.stringify(item, null, 2)); ++ if (parts.length === 0 && block.error !== void 0) parts.push(`${block.error.name}: ${block.error.code}`); ++ return parts.join("\n"); ++ } ++ function DetailsPanel({ useSession, useSessions, sessionId, useStore, renderSlot, closeDetails, t }) { ++ const selection = useStore((s) => s.selection); ++ const sessionCwd = useSessions((list) => list.byId[sessionId]?.cwd); ++ const callId = selection?.callId; ++ const material = useSession((s) => callId === void 0 ? null : materialFor(s, callId), (a, b) => (0, _deepseek_ai_dsh_client_runtime_client.shallowEqual)(a, b)); ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: DetailsPanel_module_css_default.root, ++ children: [(0, react_jsx_runtime.jsxs)("div", { ++ className: DetailsPanel_module_css_default.header, ++ children: [(0, react_jsx_runtime.jsx)("div", { ++ className: DetailsPanel_module_css_default.title, ++ children: selection === null ? t("details.title") : material?.name ?? selection.toolName ?? t("details.title") ++ }), (0, react_jsx_runtime.jsx)("button", { ++ type: "button", ++ className: DetailsPanel_module_css_default.close, ++ "aria-label": t("details.close"), ++ onClick: () => { ++ closeDetails(); ++ }, ++ children: (0, react_jsx_runtime.jsx)("svg", { ++ viewBox: "0 0 16 16", ++ width: "14", ++ height: "14", ++ "aria-hidden": true, ++ children: (0, react_jsx_runtime.jsx)("path", { ++ d: "M4 4l8 8M12 4l-8 8", ++ stroke: "currentColor", ++ strokeWidth: "1.5", ++ strokeLinecap: "round" ++ }) ++ }) ++ })] ++ }), (0, react_jsx_runtime.jsx)("div", { ++ className: DetailsPanel_module_css_default.body, ++ children: selection === null || callId === void 0 ? (0, react_jsx_runtime.jsx)("div", { ++ className: DetailsPanel_module_css_default.empty, ++ children: t("details.empty") ++ }) : material === null ? (0, react_jsx_runtime.jsx)("div", { ++ className: DetailsPanel_module_css_default.empty, ++ children: t("details.notInWindow") ++ }) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [material.argsRaw !== null && (0, react_jsx_runtime.jsxs)("section", { ++ className: DetailsPanel_module_css_default.section, ++ children: [(0, react_jsx_runtime.jsx)("div", { ++ className: DetailsPanel_module_css_default.sectionLabel, ++ children: t("details.input") ++ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, { ++ code: pretty(material.argsRaw), ++ lang: "json", ++ copyLabel: t("copy"), ++ copiedLabel: t("copied") ++ })] ++ }), (0, react_jsx_runtime.jsxs)("section", { ++ className: DetailsPanel_module_css_default.section, ++ children: [(0, react_jsx_runtime.jsx)("div", { ++ className: DetailsPanel_module_css_default.sectionLabel, ++ children: t("details.output") ++ }), (0, react_jsx_runtime.jsx)(react.Fragment, { children: renderSlot("conversation.details.tool", { ++ block: material.block, ++ cwd: sessionCwd ++ }, { fallback: "kind" in material.block ? (0, react_jsx_runtime.jsx)("pre", { ++ className: DetailsPanel_module_css_default.code, ++ "data-error": material.block.isError || void 0, ++ children: rawResultText(material.block) ++ }) : (0, react_jsx_runtime.jsx)("div", { ++ className: DetailsPanel_module_css_default.empty, ++ children: t("details.running") ++ }) }) }, callId)] ++ })] }) ++ })] ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/common.js ++ /** ++ * Relative positions in one durable event's seq neighborhood: interrupted ++ * Assistant, its follow-up Nodes, then follow-ups to an ordinary final. The ++ * max-tokens notice sits between a closing Assistant and the turn-tail so the ++ * tail stays the turn's last node and keeps its branch action enabled. ++ */ ++ const CHAT_SYNTHETIC_SEQ_OFFSETS = { ++ interruptedAssistant: -.9, ++ interruptedFollowup: -.8, ++ maxTokensNotice: .05, ++ finalizedFollowup: .1 ++ }; ++ /** ++ * Resolve one Context's best currently loaded event Location. ++ * @param context - assembled business Context. ++ * @returns start or first-match Location, otherwise unresolved. ++ */ ++ function contextLocation(context) { ++ return context.start?.location ?? context.matches[0]?.location ?? { kind: "unresolved" }; ++ } ++ /** ++ * Build one final Chat target Node with the engine-owned stable key. ++ * @param context - assembled business Context. ++ * @param kind - Chat renderer dispatch key. ++ * @param anchorSeq - sortable render position. ++ * @param data - renderer-owned payload. ++ * @param options - optional Location and visibility overrides. ++ * @returns final Chat view Node. ++ */ ++ function chatNode(context, kind, anchorSeq, data, options = {}) { ++ return { ++ key: context.key, ++ kind, ++ id: context.id, ++ target: "chat", ++ anchorSeq, ++ location: options.location ?? contextLocation(context), ++ visibility: options.visibility ?? "visible", ++ data ++ }; ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/assistant.js ++ function initialState(turn, step) { ++ return { ++ turn, ++ step, ++ blocks: [], ++ firstVisibleSeq: void 0, ++ firstVisibleTime: void 0, ++ firstTokenTime: void 0, ++ hidden: false, ++ final: void 0, ++ usage: void 0 ++ }; ++ } ++ function compactBlocks(blocks) { ++ return blocks.filter((block) => block !== void 0); ++ } ++ function hasVisibleContent(blocks) { ++ return blocks.some((block) => { ++ if (block.kind === "tool-call") return false; ++ if (block.kind === "text" || block.kind === "reasoning") return block.text.trim() !== ""; ++ return true; ++ }); ++ } ++ function hasInterruptionEvidence(blocks) { ++ return blocks.some((block) => { ++ if (block.kind === "text" || block.kind === "reasoning") return block.text.trim() !== ""; ++ return true; ++ }); ++ } ++ function resetForRetry(state) { ++ return { ++ ...initialState(state.turn, state.step), ++ firstTokenTime: state.firstTokenTime, ++ hidden: true ++ }; ++ } ++ function updateChunk(state, match) { ++ if (match.event.type !== "assistant/chunk") return state; ++ const chunk = match.event.data.chunk; ++ const blocks = [...state.blocks]; ++ switch (chunk.type) { ++ case "block-start": ++ blocks[chunk.index] = (0, _deepseek_ai_dsh_client_runtime_client.emptyAssistantBlock)(chunk.blockType); ++ break; ++ case "text-delta": { ++ const previous = blocks[chunk.index]; ++ blocks[chunk.index] = { ++ kind: "text", ++ text: (previous?.kind === "text" ? previous.text : "") + chunk.text ++ }; ++ break; ++ } ++ case "reasoning-delta": { ++ const previous = blocks[chunk.index]; ++ blocks[chunk.index] = { ++ kind: "reasoning", ++ text: (previous?.kind === "reasoning" ? previous.text : "") + chunk.text ++ }; ++ break; ++ } ++ case "tool-call-delta": { ++ const previous = blocks[chunk.index]; ++ const base = previous?.kind === "tool-call" ? previous : { ++ kind: "tool-call", ++ callId: "", ++ name: "", ++ argsRaw: "" ++ }; ++ blocks[chunk.index] = { ++ kind: "tool-call", ++ callId: base.callId || String(chunk.id), ++ name: chunk.name ?? base.name, ++ argsRaw: base.argsRaw + chunk.argumentsDelta ++ }; ++ break; ++ } ++ case "block-end": ++ blocks[chunk.index] = (0, _deepseek_ai_dsh_client_runtime_client.toAssistantBlock)(chunk.block); ++ break; ++ case "usage": return { ++ ...state, ++ usage: chunk.usage ++ }; ++ default: return state; ++ } ++ const visible = hasVisibleContent(compactBlocks(blocks)); ++ const firstToken = (0, _deepseek_ai_dsh_client_runtime_client.isTokenDelta)(chunk); ++ return { ++ ...state, ++ blocks, ++ hidden: visible ? false : state.hidden, ++ ...visible && state.firstVisibleSeq === void 0 ? { ++ firstVisibleSeq: match.event.seq, ++ firstVisibleTime: match.event.time ++ } : {}, ++ ...firstToken && state.firstTokenTime === void 0 ? { firstTokenTime: match.event.time } : {} ++ }; ++ } ++ function closedBoundary(location) { ++ if (location.kind === "step" && location.step.status === "closed" && location.step.end !== void 0) return location.step.end; ++ if ((location.kind === "step" || location.kind === "turn") && location.turn.status === "closed" && location.turn.end !== void 0) return location.turn.end; ++ } ++ function finalNode(state, context) { ++ const final = state.final; ++ if (final?.event.type === "assistant/message") { ++ const event = final.event; ++ return { ++ kind: "assistant", ++ seq: event.seq, ++ messageId: event.data.message.id, ++ time: event.time, ++ turn: state.turn, ++ step: state.step, ++ blocks: (0, _deepseek_ai_dsh_client_runtime_client.toAssistantBlocks)(event.data.message.content), ++ usage: event.data.usage, ++ timing: { ++ stepStartTime: context.start?.event.time ?? null, ++ firstTokenTime: state.firstTokenTime ?? null, ++ completedTime: event.time ++ }, ++ ...event.data.interrupted === true ? { interrupted: true } : {} ++ }; ++ } ++ const location = context.start?.location ?? context.matches.at(-1)?.location; ++ const boundary = location === void 0 ? void 0 : closedBoundary(location); ++ const blocks = compactBlocks(state.blocks); ++ if (boundary === void 0 || !hasInterruptionEvidence(blocks)) return void 0; ++ return { ++ kind: "assistant", ++ seq: boundary.seq + CHAT_SYNTHETIC_SEQ_OFFSETS.interruptedAssistant, ++ time: boundary.time, ++ turn: state.turn, ++ step: state.step, ++ blocks, ++ interrupted: true ++ }; ++ } ++ function fallbackState$4(context) { ++ let state; ++ for (const match of context.matches) { ++ if (match.event.type === "assistant/chunk") { ++ state ??= initialState(match.event.data.turn, match.event.data.step); ++ state = updateChunk(state, match); ++ continue; ++ } ++ if (match.event.type === "assistant/message") { ++ state ??= initialState(match.event.data.turn, match.event.data.step); ++ state = { ++ ...state, ++ blocks: (0, _deepseek_ai_dsh_client_runtime_client.toAssistantBlocks)(match.event.data.message.content), ++ hidden: false, ++ final: match, ++ usage: match.event.data.usage ++ }; ++ continue; ++ } ++ if (match.event.type === "llm/retry" && state !== void 0) state = resetForRetry(state); ++ } ++ return state; ++ } ++ function projectAssistant(context) { ++ const state = context.state ?? fallbackState$4(context); ++ if (state === void 0) return void 0; ++ const settled = finalNode(state, context); ++ const blocks = settled?.blocks ?? compactBlocks(state.blocks); ++ const visible = hasVisibleContent(blocks); ++ const status = settled?.interrupted === true ? "interrupted" : settled === void 0 ? "running" : "settled"; ++ const anchorSeq = settled?.seq ?? state.firstVisibleSeq ?? context.matches[0]?.event.seq ?? 0; ++ const time = settled?.time ?? state.firstVisibleTime ?? context.matches[0]?.event.time ?? 0; ++ return { ++ anchorSeq, ++ visible, ++ settled, ++ data: { ++ status, ++ turn: state.turn, ++ step: state.step, ++ blocks, ++ time, ++ ...state.usage === void 0 ? {} : { usage: state.usage }, ++ ...settled === void 0 ? {} : { finalNode: settled } ++ } ++ }; ++ } ++ /** Per-step Assistant streaming/final/interruption Definition. */ ++ const assistantDefinition = { ++ kind: "assistant-step", ++ target: "chat", ++ match: (event) => { ++ if (event.type === "step/start") return { ++ id: `${event.data.turn}:${event.data.step}`, ++ role: "start" ++ }; ++ if (event.type === "assistant/chunk" || event.type === "assistant/message" && (0, _deepseek_ai_dsh_client_runtime_client.isAppendSurfaceEvent)(event)) return { ++ id: `${event.data.turn}:${event.data.step}`, ++ role: "update" ++ }; ++ if (event.type === "llm/retry") return { ++ id: `${event.data.turn}:${event.data.step}`, ++ role: "update" ++ }; ++ return null; ++ }, ++ start: (_context, match) => { ++ if (match.event.type !== "step/start") throw new Error("assistant-step start requires step/start"); ++ return initialState(match.event.data.turn, match.event.data.step); ++ }, ++ update: (context, match) => { ++ if (match.event.type === "assistant/chunk") return updateChunk(context.state, match); ++ if (match.event.type === "assistant/message") return { ++ ...context.state, ++ blocks: (0, _deepseek_ai_dsh_client_runtime_client.toAssistantBlocks)(match.event.data.message.content), ++ hidden: false, ++ final: match, ++ usage: match.event.data.usage ++ }; ++ if (match.event.type === "llm/retry") return resetForRetry(context.state); ++ return context.state; ++ }, ++ publication: (match) => { ++ if (match.event.type === "step/start") return "none"; ++ if (match.event.type !== "assistant/chunk") return "immediate"; ++ const type = match.event.data.chunk.type; ++ return type === "usage" || type === "finish" ? "none" : "animation-frame"; ++ }, ++ buildLocationData: (context, scope) => { ++ if (scope !== "step") return null; ++ const projected = projectAssistant(context); ++ if (projected === void 0) return null; ++ return { ++ kind: "step", ++ turn: projected.data.turn, ++ step: projected.data.step, ++ key: "assistant-step", ++ value: projected.data ++ }; ++ }, ++ buildViewNode: (context) => { ++ const projected = projectAssistant(context); ++ if (projected === void 0) return null; ++ if (projected.settled === void 0 && !projected.visible) { ++ const state = context.state ?? fallbackState$4(context); ++ if (state === void 0) return null; ++ const current = context.current.get("chat"); ++ if (!state.hidden || current === void 0 || current === null) return null; ++ } ++ return chatNode(context, "assistant-step", projected.anchorSeq, projected.data, { visibility: projected.settled?.interrupted === true || projected.visible ? "visible" : "hidden" }); ++ } ++ }; ++ /** ++ * Register the Assistant lifecycle business contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerAssistantConversationNode(ctx) { ++ ctx.conversationEvents.register(assistantDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/contract/chat-nodes.js ++ /** ++ * Test whether a Tool root has settled. ++ * @param block - Tool root lifecycle value. ++ * @returns whether the root carries its final result. ++ */ ++ function isSettledTool(block) { ++ return "kind" in block; ++ } ++ /** ++ * Test whether a Tool root is still running. ++ * @param block - Tool root lifecycle value. ++ * @returns whether the root lacks a final result. ++ */ ++ function isRunningTool(block) { ++ return !isSettledTool(block); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/chat-snapshot-builder.js ++ const EMPTY_KEYS = []; ++ const EMPTY_TURNS = []; ++ const EMPTY_LIST = []; ++ function sameReferences$1(left, right) { ++ return left.length === right.length && left.every((value, index) => value === right[index]); ++ } ++ var MutableChatNodeStore = class { ++ byKey = /* @__PURE__ */ new Map(); ++ valuesCache = EMPTY_LIST; ++ valuesDirty = false; ++ get(key) { ++ return this.byKey.get(key); ++ } ++ values() { ++ if (this.valuesDirty) { ++ this.valuesCache = [...this.byKey.values()]; ++ this.valuesDirty = false; ++ } ++ return this.valuesCache; ++ } ++ replace(nodes) { ++ this.byKey.clear(); ++ for (const node of nodes) this.byKey.set(node.key, node); ++ this.valuesCache = [...this.byKey.values()]; ++ this.valuesDirty = false; ++ } ++ upsert(nodes) { ++ let changed = false; ++ for (const node of nodes) { ++ if (this.byKey.get(node.key) === node) continue; ++ this.byKey.set(node.key, node); ++ changed = true; ++ } ++ if (changed) this.valuesDirty = true; ++ } ++ }; ++ var MutableChatLocationIndex = class { ++ turns = /* @__PURE__ */ new Map(); ++ steps = /* @__PURE__ */ new Map(); ++ getTurn(turn) { ++ return this.turns.get(turn) ?? EMPTY_KEYS; ++ } ++ getStep(turn, step) { ++ return this.steps.get(stepKey(turn, step)) ?? EMPTY_KEYS; ++ } ++ rebuild(order, store) { ++ const turns = /* @__PURE__ */ new Map(); ++ const steps = /* @__PURE__ */ new Map(); ++ for (const key of order) { ++ const location = store.get(key)?.location; ++ if (location === void 0) continue; ++ const coordinates = locationCoordinates(location); ++ if (coordinates.turn === void 0) continue; ++ const turnKeys = turns.get(coordinates.turn) ?? []; ++ turnKeys.push(key); ++ turns.set(coordinates.turn, turnKeys); ++ if (coordinates.step === void 0) continue; ++ const step = stepKey(coordinates.turn, coordinates.step); ++ const stepKeys = steps.get(step) ?? []; ++ stepKeys.push(key); ++ steps.set(step, stepKeys); ++ } ++ this.turns = updateIndex(this.turns, turns); ++ this.steps = updateIndex(this.steps, steps); ++ } ++ /** Invalidate aggregate readers when member data changes without moving. */ ++ touch(nodes) { ++ const turns = /* @__PURE__ */ new Set(); ++ const steps = /* @__PURE__ */ new Set(); ++ for (const node of nodes) { ++ const coordinates = locationCoordinates(node.location); ++ if (coordinates.turn === void 0 || !this.turns.get(coordinates.turn)?.includes(node.key)) continue; ++ turns.add(coordinates.turn); ++ if (coordinates.step !== void 0) steps.add(stepKey(coordinates.turn, coordinates.step)); ++ } ++ for (const turn of turns) { ++ const keys = this.turns.get(turn); ++ if (keys === void 0) continue; ++ this.turns.set(turn, [...keys]); ++ } ++ for (const step of steps) { ++ const keys = this.steps.get(step); ++ if (keys === void 0) continue; ++ this.steps.set(step, [...keys]); ++ } ++ } ++ }; ++ function updateIndex(previous, nextMutable) { ++ const next = /* @__PURE__ */ new Map(); ++ const keys = new Set([...previous.keys(), ...nextMutable.keys()]); ++ for (const key of keys) { ++ const before = previous.get(key) ?? EMPTY_KEYS; ++ const candidate = nextMutable.get(key) ?? EMPTY_KEYS; ++ const value = sameReferences$1(before, candidate) ? before : candidate; ++ if (candidate.length > 0) next.set(key, value); ++ } ++ return next; ++ } ++ function stepKey(turn, step) { ++ return `${turn}:${step}`; ++ } ++ function locationCoordinates(location) { ++ if (location.kind === "step") return { ++ turn: location.turn.turn, ++ step: location.step.step ++ }; ++ if (location.kind === "turn") return { turn: location.turn.turn }; ++ return {}; ++ } ++ function orderedVisible(nodes) { ++ return nodes.filter((node) => node.visibility === "visible").sort((left, right) => left.anchorSeq - right.anchorSeq || left.key.localeCompare(right.key)); ++ } ++ function referenceMessageSeq(node) { ++ const candidate = node; ++ return candidate.kind === "user" || candidate.kind === "steering" ? candidate.data.seq : void 0; ++ } ++ function followingRecall(node) { ++ const candidate = node; ++ if (candidate.kind !== "context") return void 0; ++ return { ++ messageSeq: candidate.data.seq - 1, ++ labels: (0, _deepseek_ai_dsh_client_runtime_client.sessionRecallLabels)(candidate.data.source) ++ }; ++ } ++ function withReferenceLabels(node, labels) { ++ const candidate = node; ++ if (candidate.kind !== "user" && candidate.kind !== "steering") return node; ++ const current = candidate.data.referenceLabels ?? EMPTY_KEYS; ++ const hasLabels = Object.hasOwn(candidate.data, "referenceLabels"); ++ if (sameReferences$1(current, labels) && hasLabels === labels.length > 0) return node; ++ const data = { ...candidate.data }; ++ if (labels.length === 0) delete data.referenceLabels; ++ else data.referenceLabels = labels; ++ return { ++ ...candidate, ++ data ++ }; ++ } ++ /** Associates a direct message with the sourced recall event that immediately follows it. */ ++ var ReferenceLabelProjector = class { ++ messagesBySeq = /* @__PURE__ */ new Map(); ++ labelsByMessageSeq = /* @__PURE__ */ new Map(); ++ replace(nodes) { ++ this.messagesBySeq.clear(); ++ this.labelsByMessageSeq.clear(); ++ for (const node of nodes) { ++ const messageSeq = referenceMessageSeq(node); ++ if (messageSeq !== void 0) this.messagesBySeq.set(messageSeq, node.key); ++ const recall = followingRecall(node); ++ if (recall !== void 0 && recall.labels.length > 0) this.labelsByMessageSeq.set(recall.messageSeq, recall.labels); ++ } ++ return nodes.map((node) => { ++ const messageSeq = referenceMessageSeq(node); ++ return messageSeq === void 0 ? node : withReferenceLabels(node, this.labelsByMessageSeq.get(messageSeq) ?? EMPTY_KEYS); ++ }); ++ } ++ apply(upserts, store) { ++ const byKey = new Map(upserts.map((node) => [node.key, node])); ++ const affected = /* @__PURE__ */ new Set(); ++ for (const node of upserts) { ++ const messageSeq = referenceMessageSeq(node); ++ if (messageSeq !== void 0) { ++ this.messagesBySeq.set(messageSeq, node.key); ++ affected.add(messageSeq); ++ } ++ const recall = followingRecall(node); ++ if (recall === void 0) continue; ++ const current = this.labelsByMessageSeq.get(recall.messageSeq); ++ if (recall.labels.length === 0) this.labelsByMessageSeq.delete(recall.messageSeq); ++ else this.labelsByMessageSeq.set(recall.messageSeq, current !== void 0 && sameReferences$1(current, recall.labels) ? current : recall.labels); ++ affected.add(recall.messageSeq); ++ } ++ for (const messageSeq of affected) { ++ const key = this.messagesBySeq.get(messageSeq); ++ if (key === void 0) continue; ++ const node = byKey.get(key) ?? store.get(key); ++ if (node === void 0) continue; ++ byKey.set(key, withReferenceLabels(node, this.labelsByMessageSeq.get(messageSeq) ?? EMPTY_KEYS)); ++ } ++ return [...byKey.values()]; ++ } ++ }; ++ const EMPTY_CONTRIBUTION = { ++ anchorSeq: 0, ++ nodes: EMPTY_LIST, ++ partial: null, ++ running: null ++ }; ++ function legacyContribution(raw) { ++ const node = raw; ++ if (raw.visibility !== "visible" && node.kind !== "assistant-step") return EMPTY_CONTRIBUTION; ++ switch (node.kind) { ++ case "user": ++ case "steering": ++ case "context": ++ case "command": ++ case "compaction": ++ case "turn-error": ++ case "turn-max-tokens": ++ case "unknown": return { ++ anchorSeq: node.anchorSeq, ++ nodes: [node.data], ++ partial: null, ++ running: null ++ }; ++ case "assistant-step": { ++ const data = node.data; ++ if (data.status === "running") { ++ if (raw.visibility !== "visible") return EMPTY_CONTRIBUTION; ++ return { ++ anchorSeq: node.anchorSeq, ++ nodes: EMPTY_LIST, ++ partial: { ++ turn: data.turn, ++ step: data.step, ++ blocks: data.blocks ++ }, ++ running: null ++ }; ++ } ++ return { ++ anchorSeq: node.anchorSeq, ++ nodes: data.finalNode === void 0 ? EMPTY_LIST : [data.finalNode], ++ partial: null, ++ running: null ++ }; ++ } ++ case "tool-call": { ++ const root = node.data.root; ++ return isRunningTool(root) ? { ++ anchorSeq: node.anchorSeq, ++ nodes: EMPTY_LIST, ++ partial: null, ++ running: root ++ } : { ++ anchorSeq: node.anchorSeq, ++ nodes: [root], ++ partial: null, ++ running: null ++ }; ++ } ++ case "manual-compaction": { ++ const data = node.data; ++ return { ++ anchorSeq: node.anchorSeq, ++ nodes: data.compaction === null ? [data.command] : [data.command, data.compaction], ++ partial: null, ++ running: null ++ }; ++ } ++ case "model-retry": return { ++ anchorSeq: node.anchorSeq, ++ nodes: node.data.attempts, ++ partial: null, ++ running: null ++ }; ++ case "turn-tail": return EMPTY_CONTRIBUTION; ++ default: return EMPTY_CONTRIBUTION; ++ } ++ } ++ function sameContribution(left, right) { ++ return left !== void 0 && left.anchorSeq === right.anchorSeq && left.partial?.blocks === right.partial?.blocks && left.partial?.turn === right.partial?.turn && left.partial?.step === right.partial?.step && left.running === right.running && sameReferences$1(left.nodes, right.nodes); ++ } ++ /** Incremental compatibility projection for StatsLine and legacy top-level snapshot fields. */ ++ var LegacySliceBuilder = class { ++ contributions = /* @__PURE__ */ new Map(); ++ finalizedContributions = /* @__PURE__ */ new Map(); ++ runningContributions = /* @__PURE__ */ new Map(); ++ partialContributions = /* @__PURE__ */ new Map(); ++ finalized = EMPTY_LIST; ++ runningCalls = EMPTY_LIST; ++ partial = null; ++ timeline; ++ turnTimings = /* @__PURE__ */ new Map(); ++ turnEnds = /* @__PURE__ */ new Map(); ++ replace(nodes, timeline) { ++ this.contributions.clear(); ++ this.finalizedContributions.clear(); ++ this.runningContributions.clear(); ++ this.partialContributions.clear(); ++ for (const node of nodes) { ++ const contribution = legacyContribution(node); ++ this.contributions.set(node.key, contribution); ++ this.indexContribution(node.key, contribution); ++ } ++ this.rebuildFinalized(); ++ this.rebuildRunning(); ++ this.rebuildPartial(); ++ this.updateTimeline(timeline); ++ return this.snapshot(); ++ } ++ apply(upserts, timeline) { ++ let finalizedChanged = false; ++ let runningChanged = false; ++ let partialChanged = false; ++ for (const node of upserts) { ++ const contribution = legacyContribution(node); ++ const previous = this.contributions.get(node.key); ++ if (sameContribution(previous, contribution)) continue; ++ finalizedChanged ||= finalizedContributionChanged(previous, contribution); ++ runningChanged ||= runningContributionChanged(previous, contribution); ++ partialChanged ||= partialContributionChanged(previous, contribution); ++ this.contributions.set(node.key, contribution); ++ this.indexContribution(node.key, contribution); ++ } ++ if (finalizedChanged) this.rebuildFinalized(); ++ if (runningChanged) this.rebuildRunning(); ++ if (partialChanged) this.rebuildPartial(); ++ this.updateTimeline(timeline); ++ return this.snapshot(); ++ } ++ indexContribution(key, contribution) { ++ updateContributionIndex(this.finalizedContributions, key, contribution, contribution.nodes.length > 0); ++ updateContributionIndex(this.runningContributions, key, contribution, contribution.running !== null); ++ updateContributionIndex(this.partialContributions, key, contribution, contribution.partial !== null); ++ } ++ rebuildFinalized() { ++ const finalized = [...this.finalizedContributions.values()].flatMap((value) => value.nodes).sort((left, right) => left.seq - right.seq); ++ if (!sameReferences$1(this.finalized, finalized)) this.finalized = finalized; ++ } ++ rebuildRunning() { ++ const runningCalls = [...this.runningContributions.values()].sort((left, right) => left.anchorSeq - right.anchorSeq).flatMap((value) => value.running === null ? [] : [value.running]); ++ if (!sameReferences$1(this.runningCalls, runningCalls)) this.runningCalls = runningCalls; ++ } ++ rebuildPartial() { ++ const partial = [...this.partialContributions.values()].sort((left, right) => left.anchorSeq - right.anchorSeq).findLast((value) => value.partial !== null)?.partial ?? null; ++ if (this.partial?.blocks !== partial?.blocks || this.partial?.turn !== partial?.turn || this.partial?.step !== partial?.step) this.partial = partial; ++ } ++ updateTimeline(timeline) { ++ if (this.timeline === timeline) return; ++ this.timeline = timeline; ++ const turnTimings = /* @__PURE__ */ new Map(); ++ const turnEnds = /* @__PURE__ */ new Map(); ++ for (const turn of timeline.turns.values()) { ++ if (turn.start !== void 0) turnTimings.set(turn.turn, { ++ startTime: turn.start.time, ++ ...turn.end === void 0 ? {} : { endTime: turn.end.time } ++ }); ++ if (turn.end !== void 0) turnEnds.set(turn.turn, turn.end.seq); ++ } ++ this.turnTimings = turnTimings; ++ this.turnEnds = turnEnds; ++ } ++ snapshot() { ++ return { ++ nodes: this.finalized, ++ turnTimings: this.turnTimings, ++ turnEnds: this.turnEnds, ++ partial: this.partial, ++ runningCalls: this.runningCalls ++ }; ++ } ++ }; ++ function updateContributionIndex(index, key, contribution, present) { ++ if (present) index.set(key, contribution); ++ else index.delete(key); ++ } ++ function finalizedContributionChanged(previous, next) { ++ const previousNodes = previous?.nodes ?? EMPTY_LIST; ++ return !sameReferences$1(previousNodes, next.nodes) || (previousNodes.length > 0 || next.nodes.length > 0) && previous?.anchorSeq !== next.anchorSeq; ++ } ++ function runningContributionChanged(previous, next) { ++ return previous?.running !== next.running || (previous.running !== null || next.running !== null) && previous.anchorSeq !== next.anchorSeq; ++ } ++ function partialContributionChanged(previous, next) { ++ return previous?.partial?.blocks !== next.partial?.blocks || previous?.partial?.turn !== next.partial?.turn || previous?.partial?.step !== next.partial?.step || ((previous?.partial ?? null) !== null || next.partial !== null) && previous?.anchorSeq !== next.anchorSeq; ++ } ++ /** Incremental keyed Chat builder registered under the `chat` target. */ ++ var ChatSnapshotBuilder = class { ++ store = new MutableChatNodeStore(); ++ locations = new MutableChatLocationIndex(); ++ legacy = new LegacySliceBuilder(); ++ referenceLabels = new ReferenceLabelProjector(); ++ order = EMPTY_KEYS; ++ empty; ++ constructor() { ++ this.empty = this.snapshot({ ++ turnOrder: EMPTY_TURNS, ++ turns: /* @__PURE__ */ new Map() ++ }); ++ } ++ replace(input) { ++ const nodes = this.referenceLabels.replace(input.nodes); ++ this.store.replace(nodes); ++ this.order = orderedVisible(nodes).map((node) => node.key); ++ this.locations.rebuild(this.order, this.store); ++ return this.snapshot(input.timeline, this.legacy.replace(nodes, input.timeline)); ++ } ++ apply(input) { ++ const upserts = this.referenceLabels.apply(input.upserts, this.store); ++ let structural = false; ++ const contentOnly = []; ++ for (const node of upserts) { ++ const previous = this.store.get(node.key); ++ const nodeStructural = previous === void 0 || previous.anchorSeq !== node.anchorSeq || previous.visibility !== node.visibility || locationIdentity(previous.location) !== locationIdentity(node.location); ++ structural ||= nodeStructural; ++ if (!nodeStructural) contentOnly.push(node); ++ } ++ this.store.upsert(upserts); ++ if (structural) { ++ const next = orderedVisible(this.store.values()).map((node) => node.key); ++ this.order = sameReferences$1(this.order, next) ? this.order : next; ++ this.locations.rebuild(this.order, this.store); ++ } ++ this.locations.touch(contentOnly); ++ return this.snapshot(input.timeline, this.legacy.apply(upserts, input.timeline)); ++ } ++ snapshot(timeline, legacy = this.legacy.replace(EMPTY_LIST, timeline)) { ++ return { ++ order: this.order, ++ nodes: this.store, ++ locations: this.locations, ++ timeline, ++ legacy ++ }; ++ } ++ }; ++ function locationIdentity(location) { ++ const coordinates = locationCoordinates(location); ++ return `${location.kind}:${coordinates.turn ?? ""}:${coordinates.step ?? ""}`; ++ } ++ /** Chat target factory contributed to the Runtime view registry. */ ++ const chatViewDefinition = { ++ target: "chat", ++ create: () => new ChatSnapshotBuilder() ++ }; ++ /** ++ * Register the incremental Chat target builder. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerChatConversationView(ctx) { ++ ctx.conversationViews.register(chatViewDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/command.js ++ const COMPACT_PLUGIN = "compact"; ++ function commandFromRun(match) { ++ if (match.event.type !== "command/run") throw new Error("command start requires command/run"); ++ const data = match.event.data; ++ return { ++ kind: "command", ++ seq: match.event.seq, ++ time: match.event.time, ++ commandId: data.commandId, ++ name: data.name, ++ args: data.args ?? null, ++ outcome: null ++ }; ++ } ++ function commandFromDone(match, previous) { ++ if (match.event.type !== "command/done") throw new Error("command update requires command/done"); ++ const data = match.event.data; ++ const sourceEventSeq = data.kind === "success" && data.sourceEventSeq !== void 0 && Number.isSafeInteger(data.sourceEventSeq) && data.sourceEventSeq >= 0 ? data.sourceEventSeq : void 0; ++ return { ++ kind: "command", ++ seq: previous?.seq ?? match.event.seq, ++ time: previous?.time ?? match.event.time, ++ commandId: data.commandId, ++ name: previous?.name ?? null, ++ args: previous?.args ?? null, ++ outcome: { ++ kind: data.kind, ++ ...data.text === void 0 ? {} : { text: data.text }, ++ ...sourceEventSeq === void 0 ? {} : { sourceEventSeq } ++ } ++ }; ++ } ++ /** ++ * Read correlation identity from a compaction replacement checkpoint. ++ * @param event - candidate Session event. ++ * @returns correlated compaction and optional command identity. ++ */ ++ function compactSource(event) { ++ if (event.type !== "user/message" || !(0, _deepseek_ai_dsh_client_runtime_client.isReplacementSurfaceEvent)(event)) return void 0; ++ const source = event.data.source; ++ if (source.kind !== "plugin" || source.plugin !== COMPACT_PLUGIN || typeof source.compactionId !== "string") return void 0; ++ return { ++ compactionId: source.compactionId, ++ ...source.sourceCommandId === void 0 ? {} : { sourceCommandId: source.sourceCommandId } ++ }; ++ } ++ /** ++ * Build the visible summary marker from optional lifecycle evidence. ++ * @param match - compaction/summary Match, when loaded. ++ * @param checkpoint - replacement checkpoint Match. ++ * @returns final compaction summary Node data. ++ */ ++ function compactSummary(match, checkpoint) { ++ let summary = null; ++ let shadowedItemCount = null; ++ let shadowedTokenCount = null; ++ if (match?.event.type === "compaction/summary") { ++ const data = match.event.data; ++ if (Array.isArray(data.summary)) { ++ const text = data.summary.map((block) => block.type === "text" ? block.text : "").join(""); ++ summary = text.trim() === "" ? null : text; ++ } ++ shadowedItemCount = Array.isArray(data.shadowedSeqs) && data.shadowedSeqs.every((seq) => Number.isSafeInteger(seq) && seq >= 0) ? data.shadowedSeqs.length : null; ++ shadowedTokenCount = Number.isSafeInteger(data.shadowedTokenCount) && data.shadowedTokenCount >= 0 ? data.shadowedTokenCount : null; ++ } ++ return { ++ kind: "compaction", ++ seq: checkpoint.event.seq, ++ time: checkpoint.event.time, ++ summary, ++ summaryEventSeq: match?.event.seq ?? null, ++ shadowedItemCount, ++ shadowedTokenCount ++ }; ++ } ++ function fallbackState$3(context) { ++ const done = context.matches.find((match) => match.event.type === "command/done"); ++ const checkpoint = context.matches.find((match) => compactSource(match.event) !== void 0); ++ const summary = context.matches.find((match) => match.event.type === "compaction/summary"); ++ if (checkpoint === void 0) return done === void 0 ? void 0 : { command: commandFromDone(done) }; ++ const source = compactSource(checkpoint.event); ++ if (source?.sourceCommandId === void 0) return done === void 0 ? void 0 : { command: commandFromDone(done) }; ++ return { ++ command: done === void 0 ? { ++ kind: "command", ++ seq: checkpoint.event.seq, ++ time: checkpoint.event.time, ++ commandId: source.sourceCommandId, ++ name: "compact", ++ args: null, ++ outcome: null ++ } : { ++ ...commandFromDone(done), ++ name: "compact" ++ }, ++ checkpoint, ++ ...summary === void 0 ? {} : { summary } ++ }; ++ } ++ /** ++ * Fold shared compaction evidence into a Definition-owned State. ++ * @param state - current business State carrying optional compaction evidence. ++ * @param match - next compaction lifecycle Match. ++ * @returns adopted State, preserving reference identity when the Match adds no evidence. ++ */ ++ function updateCompactionState(state, match) { ++ if (match.event.type === "compaction/summary") return { ++ ...state, ++ summary: match ++ }; ++ if (compactSource(match.event) !== void 0) return { ++ ...state, ++ checkpoint: match ++ }; ++ return state; ++ } ++ /** Slash-command lifecycle, including integrated manual compaction, Definition. */ ++ const commandDefinition = { ++ kind: "command", ++ target: "chat", ++ match: (event) => { ++ if (event.type === "command/run") return { ++ id: String(event.data.commandId), ++ role: "start" ++ }; ++ if (event.type === "command/done") return { ++ id: String(event.data.commandId), ++ role: "update" ++ }; ++ const checkpoint = compactSource(event); ++ if (checkpoint?.sourceCommandId !== void 0) return { ++ id: String(checkpoint.sourceCommandId), ++ role: "update" ++ }; ++ if (event.type === "compaction/start" || event.type === "compaction/summary" || event.type === "compaction/end") { ++ if (event.data.sourceCommandId !== void 0) return { ++ id: String(event.data.sourceCommandId), ++ role: "update" ++ }; ++ } ++ return null; ++ }, ++ start: (_context, match) => ({ command: commandFromRun(match) }), ++ update: (context, match) => { ++ if (match.event.type === "command/done") return { ++ ...context.state, ++ command: commandFromDone(match, context.state.command) ++ }; ++ return updateCompactionState(context.state, match); ++ }, ++ buildViewNode: (context) => { ++ const state = context.state ?? fallbackState$3(context); ++ if (state === void 0) return null; ++ if (state.command.name !== "compact") return chatNode(context, "command", state.command.seq, state.command); ++ const compaction = state.checkpoint === void 0 ? null : compactSummary(state.summary, state.checkpoint); ++ const data = { ++ command: state.command, ++ compaction ++ }; ++ return chatNode(context, "manual-compaction", compaction?.seq ?? state.command.seq, data); ++ } ++ }; ++ /** ++ * Register the command lifecycle business contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerCommandConversationNode(ctx) { ++ ctx.conversationEvents.register(commandDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/compaction.js ++ function fallbackState$2(context) { ++ const summary = context.matches.find((match) => match.event.type === "compaction/summary"); ++ const checkpoint = context.matches.find((match) => compactSource(match.event) !== void 0); ++ return { ++ ...summary === void 0 ? {} : { summary }, ++ ...checkpoint === void 0 ? {} : { checkpoint } ++ }; ++ } ++ /** Automatic compaction lifecycle and landed checkpoint Definition. */ ++ const compactionDefinition = { ++ kind: "compaction", ++ target: "chat", ++ match: (event) => { ++ const checkpoint = compactSource(event); ++ if (checkpoint !== void 0 && checkpoint.sourceCommandId === void 0) return { ++ id: checkpoint.compactionId, ++ role: "update" ++ }; ++ if (event.type === "compaction/start" || event.type === "compaction/summary" || event.type === "compaction/end") { ++ if (event.data.sourceCommandId !== void 0) return null; ++ const compactionId = event.data.compactionId; ++ if (typeof compactionId !== "string" || compactionId === "") return null; ++ return { ++ id: compactionId, ++ role: event.type === "compaction/start" ? "start" : "update" ++ }; ++ } ++ return null; ++ }, ++ start: () => ({}), ++ update: (context, match) => updateCompactionState(context.state, match), ++ buildViewNode: (context) => { ++ const state = context.state ?? fallbackState$2(context); ++ if (state.checkpoint === void 0) return null; ++ const marker = compactSummary(state.summary, state.checkpoint); ++ return chatNode(context, "compaction", marker.seq, marker); ++ } ++ }; ++ /** ++ * Register the automatic-compaction business contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerCompactionConversationNode(ctx) { ++ ctx.conversationEvents.register(compactionDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/fallback.js ++ /** Unclaimed append-surface fallback Definition. */ ++ const unknownFallbackDefinition = { ++ kind: "unknown-surface", ++ target: "chat", ++ match: (event) => (0, _deepseek_ai_dsh_client_runtime_client.isAppendSurfaceEvent)(event) ? { ++ id: String(event.seq), ++ role: "start" ++ } : null, ++ start: (_context, match) => ({ ++ kind: "unknown", ++ seq: match.event.seq, ++ time: match.event.time, ++ type: match.event.type, ++ data: match.event.data ++ }), ++ update: (context) => context.state, ++ buildViewNode: (context) => context.state === void 0 ? null : chatNode(context, "unknown", context.state.seq, context.state) ++ }; ++ /** ++ * Register the unmatched append-surface fallback contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerUnknownConversationFallback(ctx) { ++ ctx.conversationEvents.registerFallback(unknownFallbackDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/inbox.js ++ function applySplice(previous, splice) { ++ const pending = [...previous?.state.pending ?? []]; ++ const claimed = new Set(previous?.state.claimed ?? []); ++ const removed = pending.splice(splice.start, splice.removedCount ?? 0, ...splice.inserted); ++ for (const identity of splice.inserted) claimed.delete(identity.id); ++ if (splice.target === "next-step" && splice.outcome !== "canceled") for (const identity of removed) claimed.add(identity.id); ++ return { ++ pending, ++ claimed ++ }; ++ } ++ function inboxDefinition(target) { ++ const kind = `inbox-${target}`; ++ return { ++ kind, ++ match: (event) => event.type === "agent/inbox/spliced" && event.data.target === target ? { ++ id: String(event.seq), ++ role: "start" ++ } : null, ++ start: (_context, match, reader) => { ++ if (match.event.type !== "agent/inbox/spliced") throw new Error(`${kind} start requires agent/inbox/spliced`); ++ return applySplice(reader.previous(kind), match.event.data); ++ }, ++ update: (context) => context.state, ++ publication: () => "none" ++ }; ++ } ++ /** Cumulative next-turn inbox splice Definition. */ ++ const nextTurnInboxDefinition = inboxDefinition("next-turn"); ++ /** Cumulative next-step inbox splice Definition used to classify steering. */ ++ const nextStepInboxDefinition = inboxDefinition("next-step"); ++ /** ++ * Register the two durable Inbox-state contributions. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerInboxConversationNodes(ctx) { ++ ctx.conversationEvents.register(nextTurnInboxDefinition); ++ ctx.conversationEvents.register(nextStepInboxDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/message.js ++ function isCompactionCheckpoint(event) { ++ if (event.type !== "user/message" || !(0, _deepseek_ai_dsh_client_runtime_client.isReplacementSurfaceEvent)(event)) return false; ++ const source = event.data.source; ++ return source.kind === "plugin" && source.plugin === "compact"; ++ } ++ /** User, steering, and injected-context message classification Definition. */ ++ const messageDefinition = { ++ kind: "input-message", ++ target: "chat", ++ match: (event) => event.type === "user/message" && (0, _deepseek_ai_dsh_client_runtime_client.isAppendSurfaceEvent)(event) && !isCompactionCheckpoint(event) ? { ++ id: String(event.data.id), ++ role: "start" ++ } : null, ++ start: (_context, match, reader) => { ++ if (match.event.type !== "user/message") throw new Error("input-message start requires user/message"); ++ const event = match.event; ++ if (event.data.source.kind !== "user") return { ++ kind: "context", ++ seq: event.seq, ++ time: event.time, ++ content: event.data.content, ++ source: event.data.source, ++ provenance: (0, _deepseek_ai_dsh_client_runtime_client.contextProvenance)(event.data.source), ++ form: (0, _deepseek_ai_dsh_client_runtime_client.contextForm)(event.data.source) ++ }; ++ return reader.previous("inbox-next-step")?.state.claimed.has(String(event.data.id)) === true ? { ++ kind: "steering", ++ messageId: event.data.id, ++ seq: event.seq, ++ time: event.time, ++ content: event.data.content, ++ source: event.data.source ++ } : { ++ kind: "user", ++ seq: event.seq, ++ time: event.time, ++ content: event.data.content, ++ source: event.data.source ++ }; ++ }, ++ update: (context) => context.state, ++ buildViewNode: (context) => { ++ if (context.state === void 0) return null; ++ return chatNode(context, context.state.kind, context.state.seq, context.state); ++ } ++ }; ++ /** ++ * Register the user, steering, and injected-context message contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerMessageConversationNode(ctx) { ++ ctx.conversationEvents.register(messageDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/retry.js ++ function scheduledNode(match) { ++ if (match.event.type !== "llm/retry") return void 0; ++ return { ++ kind: "model-retry", ++ seq: match.event.seq, ++ time: match.event.time, ++ retryState: "scheduled", ++ ...match.event.data ++ }; ++ } ++ /** A scheduled attempt is cancelled once either owning boundary closes. */ ++ function isClosed(location) { ++ return location.kind === "step" && location.step.status === "closed" || (location.kind === "step" || location.kind === "turn") && location.turn.status === "closed"; ++ } ++ /** Producer-correlated model retry chain Definition. */ ++ const retryDefinition = { ++ kind: "model-retry", ++ target: "chat", ++ match: (event) => { ++ if (event.type === "llm/retry") { ++ const retryId = event.data.retryId; ++ if (typeof retryId !== "string" || retryId === "") return null; ++ return { ++ id: retryId, ++ role: event.data.retry === 1 ? "start" : "update" ++ }; ++ } ++ if (event.type === "llm/retry-started") { ++ const retryId = event.data.retryId; ++ return typeof retryId === "string" && retryId !== "" ? { ++ id: retryId, ++ role: "update" ++ } : null; ++ } ++ return null; ++ }, ++ start: (_context, match) => { ++ const node = scheduledNode(match); ++ if (node === void 0) throw new Error("model-retry start requires a valid llm/retry event"); ++ return { ++ turn: node.turn, ++ step: node.step, ++ attempts: [node] ++ }; ++ }, ++ update: (context, match) => { ++ if (match.event.type === "llm/retry") { ++ const node = scheduledNode(match); ++ return node === void 0 ? context.state : { ++ ...context.state, ++ attempts: [...context.state.attempts, node] ++ }; ++ } ++ if (match.event.type !== "llm/retry-started") return context.state; ++ const retry = match.event.data.retry; ++ return { ++ ...context.state, ++ attempts: context.state.attempts.map((attempt) => attempt.retry === retry ? { ++ ...attempt, ++ retryState: "started" ++ } : attempt) ++ }; ++ }, ++ buildViewNode: (context) => { ++ if (context.state === void 0 || context.state.attempts.length === 0) return null; ++ const location = context.start?.location ?? context.matches[0]?.location ?? { kind: "unresolved" }; ++ const stateAttempts = context.state.attempts; ++ const attempts = stateAttempts.map((attempt, index) => index === stateAttempts.length - 1 && attempt.retryState === "scheduled" && isClosed(location) ? { ++ ...attempt, ++ retryState: "cancelled" ++ } : attempt); ++ const current = attempts.at(-1); ++ if (current === void 0) return null; ++ const data = { ++ attempts, ++ current ++ }; ++ return chatNode(context, "model-retry", attempts[0]?.seq ?? current.seq, data); ++ } ++ }; ++ /** ++ * Register the correlated model-retry business contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerRetryConversationNode(ctx) { ++ ctx.conversationEvents.register(retryDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/tool.js ++ const MAX_DEPTH = 256; ++ const projectedBlocks = /* @__PURE__ */ new WeakMap(); ++ function jsonArguments(value) { ++ return JSON.stringify(value); ++ } ++ function rootCall(match) { ++ if (match.event.type !== "tool/call") throw new Error("tool-call start requires tool/call"); ++ return { ++ callId: String(match.event.data.callId), ++ name: match.event.data.name, ++ argsRaw: match.event.data.arguments, ++ turn: match.event.data.turn, ++ step: match.event.data.step, ++ time: match.event.time, ++ callView: match.view?.for === "call" ? match.view.view : null, ++ subCalls: [] ++ }; ++ } ++ function rootResult(match, previous) { ++ if (match.event.type !== "tool/result") return void 0; ++ const result = match.event.data.message.content[0]; ++ return { ++ kind: "tool-result", ++ seq: match.event.seq, ++ time: match.event.time, ++ callId: String(match.event.data.message.source.callId), ++ call: previous === void 0 ? null : { ++ name: previous.name, ++ argsRaw: previous.argsRaw ++ }, ++ callTime: previous?.time ?? null, ++ content: result.content, ++ isError: result.isError === true, ++ ...match.event.data.error === void 0 ? {} : { error: match.event.data.error }, ++ meta: match.event.data.meta, ++ callView: previous?.callView ?? null, ++ resultView: match.view?.for === "result" ? match.view.view : null, ++ subCalls: [] ++ }; ++ } ++ function childCall(match, data) { ++ return { ++ callId: data.subCallId, ++ name: data.name, ++ argsRaw: jsonArguments(data.arguments), ++ turn: locationTurn(match), ++ step: locationStep(match), ++ time: match.event.time, ++ callView: null, ++ subCalls: [] ++ }; ++ } ++ function childResult(match, data, previous) { ++ return { ++ kind: "tool-result", ++ seq: match.event.seq, ++ time: match.event.time, ++ callId: data.subCallId, ++ call: { ++ name: data.name, ++ argsRaw: jsonArguments(data.arguments) ++ }, ++ callTime: previous?.time ?? null, ++ content: data.content ?? [], ++ isError: data.isError === true, ++ callView: null, ++ resultView: null, ++ subCalls: [] ++ }; ++ } ++ function locationTurn(match) { ++ return match.location.kind === "step" || match.location.kind === "turn" ? match.location.turn.turn : 0; ++ } ++ function locationStep(match) { ++ return match.location.kind === "step" ? match.location.step.step : 0; ++ } ++ function acceptsEdge(state, parent, child) { ++ if (parent === child || state.parents.has(child)) return false; ++ let cursor = parent; ++ let parentDepth = 0; ++ const ancestors = /* @__PURE__ */ new Set(); ++ while (cursor !== void 0) { ++ if (cursor === child || ancestors.has(cursor)) return false; ++ ancestors.add(cursor); ++ parentDepth++; ++ cursor = state.parents.get(cursor); ++ } ++ const pending = [{ ++ callId: child, ++ depth: 1 ++ }]; ++ const descendants = /* @__PURE__ */ new Set(); ++ let subtreeDepth = 0; ++ for (const candidate of pending) { ++ if (descendants.has(candidate.callId)) return false; ++ descendants.add(candidate.callId); ++ subtreeDepth = Math.max(subtreeDepth, candidate.depth); ++ for (const nested of state.children.get(candidate.callId) ?? []) pending.push({ ++ callId: nested.callId, ++ depth: candidate.depth + 1 ++ }); ++ } ++ return parentDepth + subtreeDepth <= MAX_DEPTH; ++ } ++ function updateDispatch(state, match) { ++ const event = match.event; ++ if (event.type !== "tool/code-dispatch-start" && event.type !== "tool/code-dispatch") return state; ++ const data = event.data; ++ const parentCallId = String(data.parentCallId); ++ const subCallId = String(data.subCallId); ++ const siblings = state.children.get(parentCallId) ?? []; ++ const index = siblings.findIndex((candidate) => candidate.callId === subCallId); ++ if (event.type === "tool/code-dispatch-start") { ++ if (index >= 0 || !acceptsEdge(state, parentCallId, subCallId)) return state; ++ const children = new Map(state.children); ++ children.set(parentCallId, [...siblings, childCall(match, data)]); ++ const parents = new Map(state.parents); ++ parents.set(subCallId, parentCallId); ++ return { ++ ...state, ++ children, ++ parents ++ }; ++ } ++ if (index < 0 && !acceptsEdge(state, parentCallId, subCallId)) return state; ++ const settled = childResult(match, data, index < 0 ? void 0 : siblings[index]); ++ const children = new Map(state.children); ++ children.set(parentCallId, index < 0 ? [...siblings, settled] : siblings.map((child, at) => at === index ? settled : child)); ++ const parents = new Map(state.parents); ++ if (index < 0) parents.set(subCallId, parentCallId); ++ return { ++ ...state, ++ children, ++ parents ++ }; ++ } ++ function projectBlock(block, state, interruptedAt, visited = /* @__PURE__ */ new Set(), depth = 1) { ++ if (visited.has(block.callId) || depth > MAX_DEPTH) return { ++ ...block, ++ subCalls: [] ++ }; ++ const nextVisited = new Set(visited); ++ nextVisited.add(block.callId); ++ const children = (state.children.get(block.callId) ?? block.subCalls).map((child) => projectBlock(child, state, interruptedAt, nextVisited, depth + 1)); ++ const interruptionSeq = "kind" in block ? void 0 : interruptedAt?.seq; ++ const interruptionTime = "kind" in block ? void 0 : interruptedAt?.time; ++ const cached = projectedBlocks.get(block); ++ if (cached !== void 0 && cached.interruptionSeq === interruptionSeq && cached.interruptionTime === interruptionTime && sameReferences(cached.children, children)) return cached.value; ++ const projected = "kind" in block || interruptedAt === void 0 ? sameReferences(block.subCalls, children) ? block : { ++ ...block, ++ subCalls: children ++ } : { ++ kind: "tool-result", ++ seq: interruptedAt.seq + CHAT_SYNTHETIC_SEQ_OFFSETS.interruptedFollowup, ++ time: interruptedAt.time, ++ callId: block.callId, ++ call: { ++ name: block.name, ++ argsRaw: block.argsRaw ++ }, ++ callTime: block.time, ++ content: [], ++ isError: true, ++ error: { ++ name: "Interrupted", ++ code: "interrupted" ++ }, ++ callView: block.callView, ++ resultView: null, ++ subCalls: children ++ }; ++ projectedBlocks.set(block, { ++ children, ++ interruptionSeq, ++ interruptionTime, ++ value: projected ++ }); ++ return projected; ++ } ++ function sameReferences(left, right) { ++ return left.length === right.length && left.every((value, index) => value === right[index]); ++ } ++ function interruption(context) { ++ const location = context.start?.location; ++ if (location?.kind === "step" && location.step.status === "closed") return location.step.end; ++ if ((location?.kind === "step" || location?.kind === "turn") && location.turn.status === "closed") return location.turn.end; ++ } ++ function fallbackState$1(context) { ++ const match = context.matches.find((candidate) => candidate.event.type === "tool/result"); ++ const root = match === void 0 ? void 0 : rootResult(match); ++ if (root === void 0) return void 0; ++ let state = { ++ root, ++ children: /* @__PURE__ */ new Map(), ++ parents: /* @__PURE__ */ new Map() ++ }; ++ for (const candidate of context.matches) state = updateDispatch(state, candidate); ++ return state; ++ } ++ /** Root Tool lifecycle and nested Code Dispatch Definition. */ ++ const toolDefinition = { ++ kind: "tool-call", ++ target: "chat", ++ match: (event) => { ++ if (event.type === "tool/call") return { ++ id: String(event.data.callId), ++ role: "start" ++ }; ++ if (event.type === "tool/result" && (0, _deepseek_ai_dsh_client_runtime_client.isAppendSurfaceEvent)(event)) return { ++ id: String(event.data.message.source.callId), ++ role: "update" ++ }; ++ if (event.type === "tool/code-dispatch-start" || event.type === "tool/code-dispatch") { ++ const rootCallId = event.data.rootCallId; ++ return typeof rootCallId === "string" && rootCallId !== "" ? { ++ id: rootCallId, ++ role: "update" ++ } : null; ++ } ++ return null; ++ }, ++ start: (_context, match) => ({ ++ root: rootCall(match), ++ children: /* @__PURE__ */ new Map(), ++ parents: /* @__PURE__ */ new Map() ++ }), ++ update: (context, match) => { ++ if (match.event.type === "tool/result") { ++ const result = rootResult(match, "kind" in context.state.root ? void 0 : context.state.root); ++ return result === void 0 ? context.state : { ++ ...context.state, ++ root: result ++ }; ++ } ++ return updateDispatch(context.state, match); ++ }, ++ buildViewNode: (context) => { ++ const state = context.state ?? fallbackState$1(context); ++ if (state === void 0) return null; ++ const projected = projectBlock(state.root, state, interruption(context)); ++ return chatNode(context, "tool-call", context.start?.event.seq ?? ("kind" in state.root ? state.root.seq : context.matches[0]?.event.seq ?? 0), { root: projected }); ++ } ++ }; ++ /** ++ * Register the root Tool lifecycle and nested-subcall contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerToolConversationNode(ctx) { ++ ctx.conversationEvents.register(toolDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/turn-error.js ++ function lastStep$1(context) { ++ const location = context.start?.location ?? context.matches[0]?.location; ++ if (location?.kind !== "turn" && location?.kind !== "step") return 0; ++ return location.turn.steps.at(-1)?.step ?? 0; ++ } ++ function failureFrom(match) { ++ if (match.event.type !== "turn/end" || match.event.data.reason.kind !== "error") return void 0; ++ const failure = match.event.data.reason.error; ++ return { ++ seq: match.event.seq, ++ time: match.event.time, ++ message: (0, _deepseek_ai_dsh_client_runtime_client.displayFailureMessage)(failure), ++ code: failure.code ++ }; ++ } ++ function fallbackState(context) { ++ const end = context.matches.find((match) => failureFrom(match) !== void 0); ++ if (end?.event.type !== "turn/end") return void 0; ++ const failure = failureFrom(end); ++ if (failure === void 0) return void 0; ++ return { ++ turn: end.event.data.turn, ++ failure ++ }; ++ } ++ /** ++ * Terminal turn failure Definition. Retries run inside the failing turn, so the ++ * turn's `llm/retry` history never suppresses this terminal row; the model-retry ++ * node renders that history separately. ++ */ ++ const turnErrorDefinition = { ++ kind: "turn-error", ++ target: "chat", ++ match: (event) => { ++ if (event.type === "turn/start") return { ++ id: String(event.data.turn), ++ role: "start" ++ }; ++ if (event.type === "turn/end" && event.data.reason.kind === "error") return { ++ id: String(event.data.turn), ++ role: "update" ++ }; ++ return null; ++ }, ++ start: (_context, match) => { ++ if (match.event.type !== "turn/start") throw new Error("turn-error start requires turn/start"); ++ return { turn: match.event.data.turn }; ++ }, ++ update: (context, match) => { ++ const failure = failureFrom(match); ++ return failure === void 0 ? context.state : { ++ ...context.state, ++ failure ++ }; ++ }, ++ buildViewNode: (context) => { ++ const state = context.state ?? fallbackState(context); ++ if (state?.failure === void 0) return null; ++ const failure = state.failure; ++ const node = { ++ kind: "turn-error", ++ seq: failure.seq, ++ time: failure.time, ++ turn: state.turn, ++ step: lastStep$1(context), ++ message: failure.message, ++ ...failure.code === void 0 ? {} : { code: failure.code } ++ }; ++ return chatNode(context, "turn-error", node.seq, node); ++ } ++ }; ++ /** ++ * Register the terminal Turn-error business contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerTurnErrorConversationNode(ctx) { ++ ctx.conversationEvents.register(turnErrorDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/turn-max-tokens.js ++ function lastStep(context) { ++ const location = context.start?.location ?? context.matches[0]?.location; ++ if (location?.kind !== "turn" && location?.kind !== "step") return 0; ++ return location.turn.steps.at(-1)?.step ?? 0; ++ } ++ /** ++ * Anchor the notice between the closing Assistant and the turn-tail so the ++ * tail stays the turn's last Chat node and keeps its branch action enabled. ++ * Without a closing text Assistant there is no branch action to protect, and ++ * the turn/end seq keeps the notice at the truncation point. ++ */ ++ function noticeAnchor(context, seq) { ++ const location = context.start?.location ?? context.matches[0]?.location; ++ if (location?.kind !== "turn" && location?.kind !== "step") return seq; ++ const closing = location.turn.data.get("turn-tail")?.closing; ++ return closing === null || closing === void 0 ? seq : closing.finalNode.seq + CHAT_SYNTHETIC_SEQ_OFFSETS.maxTokensNotice; ++ } ++ function stateFrom(match) { ++ if (match.event.type !== "turn/end" || match.event.data.reason.kind !== "max-tokens") return void 0; ++ return { ++ turn: match.event.data.turn, ++ seq: match.event.seq, ++ time: match.event.time ++ }; ++ } ++ /** Notice Definition for a turn the provider ended at its output-token cap. */ ++ const turnMaxTokensDefinition = { ++ kind: "turn-max-tokens", ++ target: "chat", ++ match: (event) => { ++ if (event.type === "turn/end" && event.data.reason.kind === "max-tokens") return { ++ id: String(event.data.turn), ++ role: "start" ++ }; ++ return null; ++ }, ++ start: (_context, match) => { ++ const state = stateFrom(match); ++ if (state === void 0) throw new Error("turn-max-tokens start requires a max-tokens turn/end"); ++ return state; ++ }, ++ update: (context) => context.state, ++ buildViewNode: (context) => { ++ const state = context.state; ++ if (state === void 0) return null; ++ const node = { ++ kind: "turn-max-tokens", ++ seq: state.seq, ++ time: state.time, ++ turn: state.turn, ++ step: lastStep(context) ++ }; ++ return chatNode(context, "turn-max-tokens", noticeAnchor(context, state.seq), node); ++ } ++ }; ++ /** ++ * Register the max-tokens turn-end notice contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerTurnMaxTokensConversationNode(ctx) { ++ ctx.conversationEvents.register(turnMaxTokensDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/turn-tail.js ++ function hasTextAssistant(event) { ++ return event.type === "assistant/message" && (0, _deepseek_ai_dsh_client_runtime_client.isAppendSurfaceEvent)(event) && (0, _deepseek_ai_dsh_client_runtime_client.toAssistantBlocks)(event.data.message.content).some((block) => block.kind === "text" && block.text.trim() !== ""); ++ } ++ function chunkHasText(event) { ++ if (event.type !== "assistant/chunk") return false; ++ const chunk = event.data.chunk; ++ if (chunk.type === "text-delta") return chunk.text.trim() !== ""; ++ return chunk.type === "block-end" && chunk.block.type === "text" && chunk.block.text.trim() !== ""; ++ } ++ function turnCoordinates(event) { ++ if (event.type === "assistant/message" || event.type === "assistant/chunk" || event.type === "step/end") return { ++ turn: event.data.turn, ++ step: event.data.step ++ }; ++ if (event.type === "llm/retry") return { ++ turn: event.data.turn, ++ step: event.data.step ++ }; ++ } ++ function closingAnchor(context) { ++ let anchor = context.matches.find((match) => match.event.type === "turn/end")?.event.seq ?? context.start?.event.seq ?? context.matches[0]?.event.seq ?? 0; ++ const steps = /* @__PURE__ */ new Map(); ++ for (const match of context.matches) { ++ const event = match.event; ++ if (event.type === "turn/end") continue; ++ const coordinates = turnCoordinates(event); ++ if (coordinates?.step === void 0) continue; ++ const previous = steps.get(coordinates.step) ?? { ++ streamedText: false, ++ finalized: false ++ }; ++ if (event.type === "assistant/chunk") { ++ steps.set(coordinates.step, { ++ ...previous, ++ streamedText: previous.streamedText || chunkHasText(event) ++ }); ++ continue; ++ } ++ if (event.type === "assistant/message") { ++ steps.set(coordinates.step, { ++ streamedText: false, ++ finalized: true ++ }); ++ if (hasTextAssistant(event)) anchor = event.seq + CHAT_SYNTHETIC_SEQ_OFFSETS.finalizedFollowup; ++ continue; ++ } ++ if (event.type === "llm/retry") { ++ steps.set(coordinates.step, { ++ streamedText: false, ++ finalized: false ++ }); ++ continue; ++ } ++ if (event.type === "step/end" && previous.streamedText && !previous.finalized) anchor = event.seq + CHAT_SYNTHETIC_SEQ_OFFSETS.interruptedFollowup; ++ } ++ return anchor; ++ } ++ function turnLocation(context) { ++ const location = context.start?.location ?? context.matches[0]?.location; ++ return location?.kind === "turn" || location?.kind === "step" ? location.turn : void 0; ++ } ++ function hasText(data) { ++ return data.finalNode !== void 0 && data.blocks.some((block) => block.kind === "text" && block.text.trim() !== ""); ++ } ++ function tailData(context) { ++ const end = context.state?.end ?? context.matches.find((match) => match.event.type === "turn/end"); ++ if (end?.event.type !== "turn/end") return null; ++ const turn = turnLocation(context); ++ if (turn === void 0) return null; ++ const finalized = turn.steps.map((step) => step.data.get("assistant-step")).filter((candidate) => candidate !== void 0).filter((candidate) => candidate.finalNode !== void 0).sort((left, right) => left.finalNode.seq - right.finalNode.seq); ++ const closing = finalized.findLast(hasText) ?? null; ++ let latestTranscriptSeq = finalized.at(-1)?.finalNode.seq; ++ for (const match of context.matches) { ++ const event = match.event; ++ const candidate = event.type === "tool/call" || event.type === "tool/result" && (0, _deepseek_ai_dsh_client_runtime_client.isAppendSurfaceEvent)(event) || event.type === "turn/end" && event.data.reason.kind === "error" || event.type === "llm/retry" ? event.seq : void 0; ++ if (candidate !== void 0 && (latestTranscriptSeq === void 0 || candidate > latestTranscriptSeq)) latestTranscriptSeq = candidate; ++ } ++ const metrics = deriveTurnMetrics(finalized.map((candidate) => candidate.finalNode)).get(end.event.data.turn); ++ return { ++ turn: end.event.data.turn, ++ seq: end.event.seq, ++ time: end.event.time, ++ closing, ++ branchUnavailable: closing === null || latestTranscriptSeq !== closing.finalNode.seq, ++ ...metrics?.ttftMs === void 0 ? {} : { ttftMs: metrics.ttftMs }, ++ ...metrics?.tokensPerSecond === void 0 ? {} : { tokensPerSecond: metrics.tokensPerSecond } ++ }; ++ } ++ /** Completed-turn footer Definition independent of any Assistant row. */ ++ const turnTailDefinition = { ++ kind: "turn-tail", ++ target: "chat", ++ match: (event) => { ++ if (event.type === "turn/start") return { ++ id: String(event.data.turn), ++ role: "start" ++ }; ++ if (event.type === "turn/end") return { ++ id: String(event.data.turn), ++ role: "update" ++ }; ++ if (event.type === "tool/call" || event.type === "tool/result") return { ++ id: String(event.data.turn), ++ role: "update" ++ }; ++ const coordinates = turnCoordinates(event); ++ if (coordinates !== void 0) return { ++ id: String(coordinates.turn), ++ role: "update" ++ }; ++ return null; ++ }, ++ start: (_context, match) => { ++ if (match.event.type !== "turn/start") throw new Error("turn-tail start requires turn/start"); ++ return { turn: match.event.data.turn }; ++ }, ++ update: (context, match) => match.event.type === "turn/end" ? { ++ ...context.state, ++ end: match ++ } : context.state, ++ publication: (match) => match.event.type === "turn/end" ? "immediate" : "none", ++ buildLocationData: (context, scope) => { ++ if (scope !== "turn") return null; ++ const value = tailData(context); ++ return value === null ? null : { ++ kind: "turn", ++ turn: value.turn, ++ key: "turn-tail", ++ value ++ }; ++ }, ++ buildViewNode: (context) => { ++ const data = turnLocation(context)?.data.get("turn-tail"); ++ return data === void 0 ? null : chatNode(context, "turn-tail", closingAnchor(context), data); ++ } ++ }; ++ /** ++ * Register completed-Turn footer data and its Chat node contribution. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerTurnTailConversationNode(ctx) { ++ ctx.conversationEvents.register(turnTailDefinition); ++ } ++ //#endregion ++ //#region lib/types/client/conversation-nodes/register.js ++ /** ++ * Register the Chat business Definitions and target builder contributed by this package. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerConversationNodes(ctx) { ++ registerInboxConversationNodes(ctx); ++ registerMessageConversationNode(ctx); ++ registerAssistantConversationNode(ctx); ++ registerToolConversationNode(ctx); ++ registerCommandConversationNode(ctx); ++ registerCompactionConversationNode(ctx); ++ registerRetryConversationNode(ctx); ++ registerTurnErrorConversationNode(ctx); ++ registerTurnMaxTokensConversationNode(ctx); ++ registerTurnTailConversationNode(ctx); ++ registerUnknownConversationFallback(ctx); ++ registerChatConversationView(ctx); ++ } ++ //#endregion ++ //#region lib/types/client/chat/use-throttled-visual-update.js ++ /** Frame-throttled scheduling for non-essential visual alignment. */ ++ const DEFAULT_INTERVAL_FRAMES = 3; ++ /** ++ * Return a stable scheduler that coalesces visual updates over a frame interval. ++ * @param update - DOM alignment to run after the throttle interval. ++ * @param intervalFrames - frames to wait before applying the latest alignment. ++ * @returns a stable function that schedules the latest update. ++ */ ++ function useThrottledVisualUpdate(update, intervalFrames = DEFAULT_INTERVAL_FRAMES) { ++ const updateRef = (0, react.useRef)(update); ++ updateRef.current = update; ++ const pendingFrameRef = (0, react.useRef)(null); ++ (0, react.useLayoutEffect)(() => () => { ++ if (pendingFrameRef.current === null) return; ++ cancelAnimationFrame(pendingFrameRef.current); ++ pendingFrameRef.current = null; ++ }, []); ++ return (0, react.useCallback)(() => { ++ if (pendingFrameRef.current !== null) return; ++ let remainingFrames = intervalFrames; ++ const advance = () => { ++ remainingFrames -= 1; ++ if (remainingFrames > 0) { ++ pendingFrameRef.current = requestAnimationFrame(advance); ++ return; ++ } ++ pendingFrameRef.current = null; ++ updateRef.current(); ++ }; ++ pendingFrameRef.current = requestAnimationFrame(advance); ++ }, [intervalFrames]); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/accessibility.module.css.mjs ++ const css$4 = ".hXDBwq_visuallyHidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}"; ++ const tagId$4 = "@deepseek-ai/dsh-client-ui-conversation/accessibility.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$4; ++ tag.textContent = css$4; ++ document.head.appendChild(tag); ++ } ++ var accessibility_module_css_default = { "visuallyHidden": "hXDBwq_visuallyHidden" }; ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/ReasoningRow.module.css.mjs ++ const css$3 = ".QWLzlG_root{flex-direction:column;display:flex}.QWLzlG_row{position:relative;overflow:hidden}.QWLzlG_root[data-state=running] .QWLzlG_row:after{content:\"\";inset-block:0;background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, transparent 100%);pointer-events:none;width:300px;animation:2.6s ease-out infinite QWLzlG_dsh-reasoning-row-sweep;position:absolute;left:0}@keyframes QWLzlG_dsh-reasoning-row-sweep{0%{left:-300px}90%,to{left:100%}}.QWLzlG_leading{flex-shrink:0}.QWLzlG_chevron{color:var(--dsw-alias-label-secondary)}.QWLzlG_title{font-weight:400}.QWLzlG_separator{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.QWLzlG_summary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:14px;line-height:24px;overflow:hidden}.QWLzlG_summary[data-follow-end]{text-overflow:clip}.QWLzlG_thinkBody{color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;word-break:break-word;padding:4px 0 4px 22px;font-size:14px;line-height:24px}@media (prefers-reduced-motion:reduce){.QWLzlG_root[data-state=running] .QWLzlG_row:after{animation:none}}"; ++ const tagId$3 = "@deepseek-ai/dsh-client-ui-conversation/ReasoningRow.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$3; ++ tag.textContent = css$3; ++ document.head.appendChild(tag); ++ } ++ var ReasoningRow_module_css_default = { ++ "chevron": "QWLzlG_chevron", ++ "dsh-reasoning-row-sweep": "QWLzlG_dsh-reasoning-row-sweep", ++ "leading": "QWLzlG_leading", ++ "root": "QWLzlG_root", ++ "row": "QWLzlG_row", ++ "separator": "QWLzlG_separator", ++ "summary": "QWLzlG_summary", ++ "thinkBody": "QWLzlG_thinkBody", ++ "title": "QWLzlG_title" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/ReasoningRow.js ++ /** Assistant reasoning disclosure, independent of Tool-call presentation. */ ++ function firstLine(text) { ++ const newline = text.indexOf("\n"); ++ return newline === -1 ? text : text.slice(0, newline); ++ } ++ function latestLine(text) { ++ const visible = text.trimEnd(); ++ const newline = visible.lastIndexOf("\n"); ++ return newline === -1 ? visible : visible.slice(newline + 1); ++ } ++ /** ++ * Render one assistant reasoning block as the Think disclosure row. ++ * @param props.text - complete or streaming reasoning text. ++ * @param props.running - whether this block is the streaming tail. ++ * @param props.t - conversation locale seat for the running status. ++ * @returns the reasoning disclosure. ++ */ ++ function ReasoningRow({ text, running, t }) { ++ const [expanded, setExpanded] = (0, react.useState)(false); ++ const summaryRef = (0, react.useRef)(null); ++ const summary = running ? latestLine(text) : firstLine(text); ++ const scheduleSummaryScroll = useThrottledVisualUpdate(() => { ++ const element = summaryRef.current; ++ if (element === null) return; ++ element.scrollLeft = running ? element.scrollWidth - element.clientWidth : 0; ++ }); ++ (0, react.useEffect)(() => { ++ scheduleSummaryScroll(); ++ }, [ ++ running, ++ scheduleSummaryScroll, ++ summary ++ ]); ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: ReasoningRow_module_css_default.root, ++ "data-variant": "think", ++ "data-state": running ? "running" : "ok", ++ children: [running && (0, react_jsx_runtime.jsx)("span", { ++ className: accessibility_module_css_default.visuallyHidden, ++ children: t("row.running") ++ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, { ++ rowClassName: ReasoningRow_module_css_default.row, ++ leadingClassName: ReasoningRow_module_css_default.leading, ++ titleClassName: ReasoningRow_module_css_default.title, ++ chevronClassName: ReasoningRow_module_css_default.chevron, ++ icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconThinkOutline14, { size: 14 }), ++ title: "Think", ++ open: expanded, ++ expandable: true, ++ expandOnRowClick: true, ++ onToggle: () => { ++ setExpanded((value) => !value); ++ }, ++ collapsedContent: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", { ++ className: ReasoningRow_module_css_default.separator, ++ "aria-hidden": true ++ }), (0, react_jsx_runtime.jsx)("span", { ++ ref: summaryRef, ++ className: ReasoningRow_module_css_default.summary, ++ "data-follow-end": running || void 0, ++ children: summary ++ })] }), ++ children: (0, react_jsx_runtime.jsx)("div", { ++ className: ReasoningRow_module_css_default.thinkBody, ++ children: text ++ }) ++ })] ++ }); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/AssistantMarkdown.module.css.mjs ++ const css$2 = ".Sxvs8a_root{color:var(--dsw-alias-label-primary);flex-direction:column;font-size:16px;line-height:28px;display:flex}.Sxvs8a_body{flex-direction:column;gap:16px;display:flex}.Sxvs8a_body .md-table-wide{--dsh-table-spare:max(0px, calc((100cqw - var(--dsh-chat-content-width)) / 2));--dsh-table-lead:calc(var(--dsh-table-spare) + min(var(--dsh-chat-content-width), 100cqw) - 100%);box-sizing:border-box;width:calc(100% + var(--dsh-table-lead) + var(--dsh-table-spare));max-width:none;margin-left:calc(-1 * var(--dsh-table-lead));padding-left:var(--dsh-table-lead)}.Sxvs8a_stopped{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-tertiary);border-radius:6px;align-self:flex-start;padding:0 6px;font-size:11px;line-height:18px}.Sxvs8a_actions{margin-top:16px;margin-left:-6px}"; ++ const tagId$2 = "@deepseek-ai/dsh-client-ui-conversation/AssistantMarkdown.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$2; ++ tag.textContent = css$2; ++ document.head.appendChild(tag); ++ } ++ var AssistantMarkdown_module_css_default = { ++ "actions": "Sxvs8a_actions", ++ "body": "Sxvs8a_body", ++ "root": "Sxvs8a_root", ++ "stopped": "Sxvs8a_stopped" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/AssistantMarkdown.js ++ /** Reasoning block as the Think variant summary row (figma 39:28304). */ ++ const AssistantMarkdown = (0, react.memo)(function AssistantMarkdown({ blocks, streaming, interrupted, renderMessageImages, mentions, t }) { ++ const codeLabels = (0, react.useMemo)(() => ({ ++ copyLabel: t("copy"), ++ copiedLabel: t("copied") ++ }), [t]); ++ const last = blocks.length - 1; ++ if (!(streaming || interrupted === true || blocks.some((block) => block.kind !== "tool-call"))) return null; ++ const rendered = []; ++ for (let i = 0; i < blocks.length; i++) { ++ const block = blocks[i]; ++ if (block === void 0) continue; ++ switch (block.kind) { ++ case "text": ++ rendered.push((0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, { ++ text: block.text, ++ streaming, ++ codeLabels, ++ fileMentions: mentions ++ }, i)); ++ break; ++ case "reasoning": ++ rendered.push((0, react_jsx_runtime.jsx)(ReasoningRow, { ++ text: block.text, ++ running: streaming && i === last, ++ t ++ }, i)); ++ break; ++ case "image": { ++ const start = i; ++ const group = [block]; ++ while (i + 1 < blocks.length) { ++ const next = blocks[i + 1]; ++ if (next === void 0 || next.kind !== "image") break; ++ group.push(next); ++ i += 1; ++ } ++ rendered.push((0, react_jsx_runtime.jsx)(react.Fragment, { children: renderMessageImages({ ++ images: group.map(({ attachment }) => ({ attachment })), ++ align: "start" ++ }) }, start)); ++ break; ++ } ++ case "tool-call": break; ++ default: rendered.push((0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, { ++ label: t("message.unknownBlock"), ++ payload: block.block, ++ truncatedLabel: (total) => t("json.truncated", { total }) ++ }, i)); ++ } ++ } ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: AssistantMarkdown_module_css_default.root, ++ "data-streaming": streaming || void 0, ++ children: (0, react_jsx_runtime.jsxs)("div", { ++ className: AssistantMarkdown_module_css_default.body, ++ children: [rendered, interrupted && (0, react_jsx_runtime.jsx)("span", { ++ className: AssistantMarkdown_module_css_default.stopped, ++ children: t("message.stopped") ++ })] ++ }) ++ }); ++ }); ++ //#endregion ++ //#region lib/types/client/chat/AssistantNodeView.js ++ /** Streaming, settled, and interrupted Assistant states share one keyed renderer instance. */ ++ const AssistantNodeView = (0, react.memo)(function AssistantNodeView({ node, useTurnData, openFile, renderMessageImages, fileMentions, t }) { ++ const data = node.data; ++ const turn = node.location.kind === "turn" || node.location.kind === "step" ? node.location.turn : void 0; ++ const tail = useTurnData("turn-tail"); ++ const owner = (0, react.useMemo)(() => { ++ if (turn?.status !== "closed" || data.finalNode === void 0) return void 0; ++ if (tail?.closing?.finalNode.seq !== data.finalNode.seq) return void 0; ++ return { ++ turn, ++ seq: data.finalNode.seq, ++ openFile ++ }; ++ }, [ ++ data.finalNode, ++ openFile, ++ tail, ++ turn ++ ]); ++ const mentions = (0, react.useMemo)(() => owner === void 0 ? void 0 : fileMentions(owner), [fileMentions, owner]); ++ return (0, react_jsx_runtime.jsx)(AssistantMarkdown, { ++ blocks: data.blocks, ++ streaming: data.status === "running", ++ interrupted: data.status === "interrupted", ++ renderMessageImages, ++ mentions, ++ t ++ }); ++ }); ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/GenericCommandCard.module.css.mjs ++ const css$1 = "._Xvjua_root{flex-direction:column;display:flex}._Xvjua_row{position:relative;overflow:hidden}._Xvjua_root[data-state=running] ._Xvjua_row:after{content:\"\";inset-block:0;background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, transparent 100%);pointer-events:none;width:300px;animation:2.6s ease-out infinite _Xvjua_dsh-command-row-sweep;position:absolute;left:0}@keyframes _Xvjua_dsh-command-row-sweep{0%{left:-300px}90%,to{left:100%}}._Xvjua_leading{flex-shrink:0}._Xvjua_chevron{color:var(--dsw-alias-label-secondary)}._Xvjua_title{font-weight:400}._Xvjua_separator{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}._Xvjua_summary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:14px;line-height:24px;overflow:hidden}._Xvjua_summary[data-error],._Xvjua_body[data-error]{color:var(--dsw-alias-state-error-primary)}._Xvjua_body{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-markdown-code-block);max-height:260px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;border-radius:12px;margin:4px 0 4px 4px;padding:12px 16px;overflow:auto}@media (prefers-reduced-motion:reduce){._Xvjua_root[data-state=running] ._Xvjua_row:after{animation:none}}"; ++ const tagId$1 = "@deepseek-ai/dsh-client-ui-conversation/GenericCommandCard.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId$1; ++ tag.textContent = css$1; ++ document.head.appendChild(tag); ++ } ++ var GenericCommandCard_module_css_default = { ++ "body": "_Xvjua_body", ++ "chevron": "_Xvjua_chevron", ++ "dsh-command-row-sweep": "_Xvjua_dsh-command-row-sweep", ++ "leading": "_Xvjua_leading", ++ "root": "_Xvjua_root", ++ "row": "_Xvjua_row", ++ "separator": "_Xvjua_separator", ++ "summary": "_Xvjua_summary", ++ "title": "_Xvjua_title" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/GenericCommandCard.js ++ /** Node state → row state semantic (running while unsettled; outcome kind after). */ ++ function stateOf(outcome) { ++ if (outcome === null) return "running"; ++ return outcome.kind === "error" ? "error" : "ok"; ++ } ++ function leadingFor(state) { ++ return state === "error" ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconApiOutline14, { size: 14 }); ++ } ++ function GenericCommandCard({ node, t, runningSummary }) { ++ const [expanded, setExpanded] = (0, react.useState)(false); ++ const text = node.outcome?.text; ++ const summary = node.outcome === null ? runningSummary ?? t("command.running") : text ?? (node.outcome.kind === "error" ? t("command.failed") : t("command.done")); ++ const title = node.name ?? t("command.title"); ++ const state = stateOf(node.outcome); ++ const body = text !== void 0 && text.includes("\n") ? text : null; ++ const open = expanded && body !== null; ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: GenericCommandCard_module_css_default.root, ++ "data-variant": "others", ++ "data-state": state, ++ children: [ ++ state === "running" && (0, react_jsx_runtime.jsx)("span", { ++ className: accessibility_module_css_default.visuallyHidden, ++ children: t("row.running") ++ }), ++ state === "error" && (0, react_jsx_runtime.jsx)("span", { ++ className: accessibility_module_css_default.visuallyHidden, ++ children: t("row.failed") ++ }), ++ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, { ++ rowClassName: GenericCommandCard_module_css_default.row, ++ leadingClassName: GenericCommandCard_module_css_default.leading, ++ titleClassName: GenericCommandCard_module_css_default.title, ++ chevronClassName: GenericCommandCard_module_css_default.chevron, ++ icon: leadingFor(state), ++ title, ++ open, ++ expandable: body !== null, ++ expandOnRowClick: true, ++ keepContentWhenOpen: true, ++ onToggle: () => { ++ setExpanded((value) => !value); ++ }, ++ collapsedContent: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("span", { ++ className: GenericCommandCard_module_css_default.separator, ++ "aria-hidden": true ++ }), (0, react_jsx_runtime.jsx)("span", { ++ className: GenericCommandCard_module_css_default.summary, ++ "data-error": state === "error" || void 0, ++ children: summary ++ })] }), ++ children: (0, react_jsx_runtime.jsx)("pre", { ++ className: GenericCommandCard_module_css_default.body, ++ "data-error": state === "error" || void 0, ++ children: body ++ }) ++ }) ++ ] ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/chat/CompactionCommandCard.js ++ /** Render one manual compaction lifecycle without duplicating its checkpoint marker. */ ++ function CompactionCommandCard({ node, compaction, t }) { ++ if (compaction !== void 0) return (0, react_jsx_runtime.jsx)(CompactionItem, { ++ node: compaction, ++ title: "compact", ++ fallbackSummary: node.outcome?.text ?? null, ++ t ++ }); ++ if (node.outcome !== null) return (0, react_jsx_runtime.jsx)(GenericCommandCard, { ++ node, ++ t ++ }); ++ return (0, react_jsx_runtime.jsx)(GenericCommandCard, { ++ node, ++ t, ++ runningSummary: t("message.compaction.running") ++ }); ++ } ++ //#endregion ++ //#region lib/types/client/chat/CommandNodeView.js ++ /** Ordinary command lifecycle renderer with command-name keyed specialization. */ ++ const CommandNodeView = (0, react.memo)(function CommandNodeView({ node, renderSlot, t }) { ++ const command = node.data; ++ const owner = (0, react.useMemo)(() => ({ node: command }), [command]); ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: ChatView_module_css_default.callRow, ++ children: renderSlot("conversation.chat.commandview", owner, { ++ entryKey: command.name ?? "", ++ fallback: (0, react_jsx_runtime.jsx)(GenericCommandCard, { ++ ...owner, ++ t ++ }) ++ }) ++ }); ++ }); ++ /** One integrated `/compact` command and compaction transaction renderer. */ ++ const ManualCompactionNodeView = (0, react.memo)(function ManualCompactionNodeView({ node, t }) { ++ const data = node.data; ++ return (0, react_jsx_runtime.jsx)("div", { ++ className: ChatView_module_css_default.callRow, ++ children: (0, react_jsx_runtime.jsx)(CompactionCommandCard, { ++ node: data.command, ++ ...data.compaction === null ? {} : { compaction: data.compaction }, ++ t ++ }) ++ }); ++ }); ++ //#endregion ++ //#region lib/types/client/chat/turn-assistant.js ++ /** ++ * Collect visible prose from one Assistant lifecycle. ++ * @param blocks - Assistant content blocks. ++ * @returns concatenated text blocks. ++ */ ++ function assistantText(blocks) { ++ return blocks.flatMap((block) => block.kind === "text" ? [block.text] : []).join(""); ++ } ++ //#endregion ++ //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/chat/TurnTailNodeView.module.css.mjs ++ const css = ".osXY9a_root{flex-direction:column;gap:16px;display:flex}.osXY9a_actions{margin-left:-6px}"; ++ const tagId = "@deepseek-ai/dsh-client-ui-conversation/TurnTailNodeView.module.css"; ++ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) { ++ const tag = document.createElement("style"); ++ tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-conversation"; ++ tag.dataset.pluginCss = tagId; ++ tag.textContent = css; ++ document.head.appendChild(tag); ++ } ++ var TurnTailNodeView_module_css_default = { ++ "actions": "osXY9a_actions", ++ "root": "osXY9a_root" ++ }; ++ //#endregion ++ //#region lib/types/client/chat/TurnTailNodeView.js ++ /** Turn-local actions and feature tail over the Location index, independent of Assistant placement. */ ++ const TurnTailNodeView = (0, react.memo)(function TurnTailNodeView({ node, openFile, forkAt, renderSlot, renderSlotChain, t, useSession }) { ++ const data = node.data; ++ const hasLaterChatNode = useSession((snapshot) => snapshot.chat.locations.getTurn(data.turn).at(-1) !== node.key); ++ const turn = node.location.kind === "turn" || node.location.kind === "step" ? node.location.turn : void 0; ++ if (turn === void 0) return null; ++ const closing = data.closing; ++ const tail = renderSlotChain("conversation.chat.turnTail", { ++ turn, ++ seq: closing?.finalNode.seq ?? data.seq, ++ openFile ++ }); ++ if (closing === null) return tail === null ? null : (0, react_jsx_runtime.jsx)("div", { ++ className: TurnTailNodeView_module_css_default.root, ++ children: tail ++ }); ++ const runMs = turn.start === void 0 || turn.end === void 0 ? void 0 : Math.max(0, turn.end.time - turn.start.time); ++ const messageId = closing.finalNode.messageId; ++ const assistantActions = messageId === void 0 ? null : renderSlot("conversation.chat.assistant-actions", { messageId }); ++ return (0, react_jsx_runtime.jsxs)("div", { ++ className: TurnTailNodeView_module_css_default.root, ++ "data-turn-tail": data.turn, ++ "data-time-hover-root": true, ++ children: [tail, (0, react_jsx_runtime.jsx)(MessageIconActions, { ++ text: assistantText(closing.blocks), ++ time: closing.time, ++ runMs, ++ ttftMs: data.ttftMs, ++ tokensPerSecond: data.tokensPerSecond, ++ clock: "end", ++ onBranch: () => { ++ forkAt(closing.finalNode.seq); ++ }, ++ branchUnavailable: data.branchUnavailable || hasLaterChatNode, ++ className: TurnTailNodeView_module_css_default.actions, ++ extraActions: assistantActions, ++ t ++ })] ++ }); ++ }); ++ //#endregion ++ //#region lib/types/client/chat/register-node-renderers.js ++ /** ++ * Register this package's business renderers behind the keyed Chat Node seat. ++ * @param ctx - owning UI Conversation context. ++ */ ++ function registerChatNodeRenderers(ctx) { ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "user", ++ locale: NS ++ }, UserMessageNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "steering", ++ locale: NS ++ }, UserMessageNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "context", ++ locale: NS ++ }, ContextMessageNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "assistant-step", ++ locale: NS ++ }, AssistantNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "command", ++ locale: NS, ++ children: { "conversation.chat.commandview": { ++ kind: "keyed", ++ scope: "session" ++ } } ++ }, CommandNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "manual-compaction", ++ locale: NS ++ }, ManualCompactionNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "compaction", ++ locale: NS ++ }, CompactionNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "model-retry", ++ locale: NS ++ }, RetryNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "turn-error", ++ locale: NS ++ }, TurnErrorNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "turn-max-tokens", ++ locale: NS ++ }, TurnMaxTokensNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "turn-tail", ++ locale: NS, ++ children: { ++ "conversation.chat.turnTail": { ++ kind: "chain", ++ scope: "session" ++ }, ++ "conversation.chat.assistant-actions": { ++ kind: "list", ++ scope: "session" ++ } ++ } ++ }, TurnTailNodeView)); ++ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({ ++ name: "conversation.chat.node", ++ key: "unknown", ++ locale: NS ++ }, UnknownNodeView)); ++ } ++ //#endregion ++ //#region lib/types/client/apply.js ++ /** Services required by the conversation plugin. */ ++ const inject = [ ++ "slots", ++ "layout", ++ "sessions", ++ "workspaces", ++ "locale", ++ "connection", ++ "remote", ++ "settingsScope", ++ "conversationEvents", ++ "conversationViews" ++ ]; ++ const ABSENT_NOTICES = { ++ getSnapshot: () => null, ++ subscribe: () => () => {} ++ }; ++ /** No session, therefore nothing to block; same one-identity rule as above. */ ++ const ABSENT_BLOCK = { ++ getSnapshot: () => void 0, ++ subscribe: () => () => {} ++ }; ++ const EMPTY_LEXICON = /* @__PURE__ */ new Map(); ++ const ABSENT_LEXICON = { ++ getSnapshot: () => EMPTY_LEXICON, ++ subscribe: () => () => {} ++ }; ++ const ABSENT_MENU_LAUNCHER = { ++ getSnapshot: () => null, ++ subscribe: () => () => {} ++ }; ++ const CHAT_NODE_INJECT = { hooks: { turnData: ({ useSession }, nodeKey) => function useTurnData(key) { ++ return useSession((snapshot) => { ++ const location = snapshot.chat.nodes.get(nodeKey)?.location; ++ return location?.kind === "turn" || location?.kind === "step" ? location.turn.data.get(key) : void 0; ++ }); ++ } } }; ++ /** Resolve the session-scoped conversation face (scope-addressed send/cancel), failing loud. */ ++ function scopedConversation(sessions, id) { ++ const scoped = sessions.scope(id); ++ if (scoped === void 0) throw new Error(`ui-conversation: session "${id}" resolved no scope`); ++ const conversation = scoped.get("conversation"); ++ if (conversation === void 0) throw new Error("ui-conversation: conversation service unavailable through the session scope"); ++ return conversation; ++ } ++ /** Resolve package-internal attachment operations from the public service registration. */ ++ function concreteConversation(ctx) { ++ const conversation = ctx.get("conversation"); ++ if (conversation === void 0) throw new Error("ui-conversation: conversation service unavailable"); ++ return conversation; ++ } ++ /** Chain routing: claim the composer while an approval wait is pending (pure — owner props only). */ ++ function selectApproval({ interactions }) { ++ return interactions.find((i) => i.kind === "approval") ?? null; ++ } ++ /** Mounts the conversation plugin. ++ * @param ctx - Client root context. ++ */ ++ function apply(ctx) { ++ const sessions = ctx.sessions; ++ const workspaces = ctx.workspaces; ++ const layout = ctx.layout; ++ const slots = ctx.slots; ++ registerConversationNodes(ctx); ++ registerChatNodeRenderers(ctx); ++ ctx.effect(() => ctx.locale.register(NS, { ++ zh, ++ en ++ }), "ui-conversation: dictionaries"); ++ const t = ctx.locale.bind(NS); ++ const chatStore = createChatStore(); ++ const submissionPolicy = new ComposerSubmissionPolicy(ctx.settingsScope.bind({ namespace: CONVERSATION_SETTINGS_NAMESPACE })); ++ ctx.slots.inject("settings.general.item", () => ctx.slots.register({ ++ name: "settings.general.item", ++ id: "composer-enter", ++ order: 20, ++ locale: NS, ++ inject: () => ({ ++ hooks: { busyEnter: submissionPolicy.busyEnter }, ++ setBusyEnter: (behavior) => { ++ submissionPolicy.setBusyEnter(behavior); ++ } ++ }) ++ }, EnterBehaviorRow)); ++ const chatScrollPositions = /* @__PURE__ */ new Map(); ++ const viewTabs = () => { ++ const tabs = []; ++ for (const entry of slots.entries("conversation.view")) { ++ /* v8 ignore next -- unreachable: list registration validates id at load. */ ++ if (entry.options.id === void 0) continue; ++ tabs.push({ ++ id: entry.options.id, ++ label: (0, _deepseek_ai_dsh_client_ui_slots.resolveSlotLabel)(entry.options.label) ?? entry.options.id ++ }); ++ } ++ return tabs; ++ }; ++ const views = { ++ list: viewTabs, ++ subscribe: (fn) => slots.subscribe("conversation.view", fn), ++ version: () => slots.getVersion("conversation.view") ++ }; ++ const inputHub = new InputHub(ctx, t); ++ const composerBlocks = new ComposerBlockRegistry(); ++ ctx.effect(() => sessions.provide({ ++ hooks: ["input"], ++ props: ["inputActions"], ++ resolve: (binding) => { ++ const shell = inputHub.shellFor(binding); ++ return { ++ hooks: { input: shell.state }, ++ props: { inputActions: shell.actions } ++ }; ++ } ++ }), "ui-conversation: input standard-kit provider"); ++ slots.register({ ++ name: "conversation", ++ locale: NS, ++ children: { ++ "conversation.session": { ++ kind: "single", ++ scope: "session" ++ }, ++ "conversation.session.header": { ++ kind: "single", ++ scope: "session" ++ }, ++ "conversation.composer": { ++ kind: "chain", ++ scope: "session" ++ }, ++ "conversation.composer.bar": { ++ kind: "single", ++ scope: "session-maybe" ++ }, ++ "conversation.input.overlay": { ++ kind: "list", ++ scope: "session" ++ }, ++ "conversation.input.dock": { ++ kind: "list", ++ scope: "session" ++ }, ++ "conversation.composer.dock": { ++ kind: "list", ++ scope: "session" ++ }, ++ "conversation.input.left": { ++ kind: "list", ++ scope: "session" ++ }, ++ "conversation.input.right": { ++ kind: "list", ++ scope: "session" ++ }, ++ "conversation.hero.brand.mark": { ++ kind: "single", ++ scope: "root" ++ }, ++ "conversation.hero.workspace": { ++ kind: "single", ++ scope: "root" ++ }, ++ "conversation.hero.agentPreset": { ++ kind: "single", ++ scope: "root" ++ } ++ }, ++ inject: (sessionId) => ({ ++ hooks: { composerBlock: sessionId === void 0 ? ABSENT_BLOCK : composerBlocks.storeFor(sessionId) }, ++ selectWorkspace: async (workspaceId) => { ++ const nextId = await workspaces.connectWorkspace(workspaceId); ++ if (sessionId !== void 0 && nextId !== sessionId) { ++ const from = inputHub.shell(sessionId); ++ const draft = from.snapshot.draft; ++ const imageIds = from.snapshot.imageIds; ++ const next = inputHub.shell(nextId); ++ if (imageIds.length === 0 || next.addImages(imageIds)) { ++ if (draft !== "") { ++ next.setDraft(draft); ++ from.setDraft(""); ++ } ++ if (imageIds.length > 0) for (const id of imageIds) from.removeImage(id); ++ } ++ } ++ sessions.open(nextId); ++ } ++ }) ++ }, ConversationRoot); ++ slots.register({ ++ name: "conversation.session", ++ children: { "conversation.view": { ++ kind: "list", ++ scope: "session" ++ } }, ++ store: chatStore, ++ inject: (sessionId, _actions) => { ++ const conversation = concreteConversation(ctx); ++ return { ++ views, ++ releaseSessionImages: (id) => { ++ conversation.releaseSessionImages(id); ++ }, ++ bindDraftMirror: (write) => inputHub.shell(sessionId).bindMirror(write) ++ }; ++ } ++ }, ConversationSession); ++ slots.register({ ++ name: "conversation.session.header", ++ locale: NS, ++ children: { ++ "conversation.session.header.lineage": { ++ kind: "single", ++ scope: "session" ++ }, ++ "conversation.session.header.actions": { ++ kind: "list", ++ scope: "session" ++ }, ++ "conversation.session.header.utilities": { ++ kind: "list", ++ scope: "session" ++ } ++ }, ++ store: chatStore, ++ inject: () => ({ ++ views, ++ open: (id) => { ++ sessions.open(id); ++ } ++ }) ++ }, ConversationSessionHeader); ++ slots.register({ ++ name: "conversation.composer.bar", ++ locale: NS, ++ children: { ++ "conversation.input.attachments": { ++ kind: "single", ++ scope: "session-maybe" ++ }, ++ "conversation.input.plan": { ++ kind: "single", ++ scope: "session" ++ }, ++ "conversation.input.model": { ++ kind: "single", ++ scope: "session" ++ } ++ }, ++ inject: (sessionId) => { ++ if (sessionId === void 0) return { ++ keyboard: void 0, ++ addImages: void 0, ++ removeImage: void 0, ++ draftImages: void 0, ++ resolveSubmitMode: (running, gesture, steeringAvailable) => submissionPolicy.resolve(running, gesture, steeringAvailable), ++ toggleCommandMenu: void 0, ++ stop: void 0, ++ command: void 0, ++ hooks: { ++ notices: ABSENT_NOTICES, ++ lexicon: ABSENT_LEXICON, ++ menuLauncher: ABSENT_MENU_LAUNCHER ++ } ++ }; ++ const conversation = concreteConversation(ctx); ++ const shell = inputHub.shell(sessionId); ++ const inputTriggers = inputHub.inputTriggers(sessionId); ++ return { ++ keyboard: shell, ++ addImages: (files) => { ++ try { ++ const images = conversation.createDraftImages(files); ++ if (!shell.addImages(images.map((image) => image.id))) conversation.releaseDraftImages(images); ++ return null; ++ } catch (error) { ++ if (error instanceof UnsupportedImageMediaTypeError) return t("image.unsupportedType"); ++ return error instanceof Error ? error.message : String(error); ++ } ++ }, ++ removeImage: (id) => { ++ conversation.releaseDraftImage(id); ++ shell.removeImage(id); ++ }, ++ draftImages: (ids) => conversation.draftImages(ids), ++ resolveSubmitMode: (running, gesture, steeringAvailable) => submissionPolicy.resolve(running, gesture, steeringAvailable), ++ toggleCommandMenu: inputTriggers === void 0 ? void 0 : (selection) => { ++ shell.dismissPopup(); ++ const snapshot = shell.snapshot; ++ inputTriggers.toggleSource("command", { ++ trigger: "/", ++ query: "", ++ quoted: false, ++ position: snapshot.draft.slice(0, selection.start).trim() === "" ? "leading" : "inline", ++ span: { ++ ...selection, ++ draftRev: snapshot.draftRev ++ } ++ }); ++ }, ++ stop: () => { ++ scopedConversation(sessions, sessionId).cancel().catch(() => {}); ++ }, ++ command: async (line) => { ++ const session = sessions.binding(sessionId)?.session; ++ if (session === void 0) return false; ++ const result = await session.command(line); ++ return result.ok && result.value.matched; ++ }, ++ hooks: { ++ notices: shell.notices, ++ lexicon: shell.lexicon, ++ menuLauncher: inputTriggers?.launcher ?? ABSENT_MENU_LAUNCHER ++ } ++ }; ++ } ++ }, InputBar); ++ slots.register({ ++ name: "conversation.composer", ++ select: selectApproval, ++ priority: 1, ++ locale: NS ++ }, ApprovalPanel); ++ slots.register({ ++ name: "conversation.view", ++ id: "chat", ++ order: 0, ++ label: () => t("view.chat"), ++ locale: NS, ++ children: { ++ "conversation.chat.node": { ++ kind: "keyed", ++ scope: "session", ++ inject: CHAT_NODE_INJECT ++ }, ++ "conversation.message.images": { ++ kind: "single", ++ scope: "session" ++ } ++ }, ++ store: chatStore, ++ inject: (sessionId, actions) => { ++ const conversation = concreteConversation(ctx); ++ const scoped = scopedConversation(sessions, sessionId); ++ return { ++ openDetails: (target) => { ++ actions.select(target); ++ layout.openDetails(); ++ }, ++ fileMentions: (owner) => ctx.get("chatFileMentions")?.forClosing(owner), ++ openFile: (path) => { ++ const cwd = sessions.list.getSnapshot().byId[sessionId]?.cwd; ++ return workspaces.openPath((0, _deepseek_ai_dsh_client_runtime_client.resolveWorkspacePath)(cwd, path)); ++ }, ++ loadOlder: () => { ++ scoped.loadOlder(); ++ }, ++ loadImage: (attachment) => conversation.resolveImage(sessionId, attachment), ++ inspectCall: (callId) => { ++ actions.setInspect({ callId }); ++ actions.setView("trajectory"); ++ }, ++ chatScroll: { ++ save: (position) => { ++ if (position === null) chatScrollPositions.delete(sessionId); ++ else chatScrollPositions.set(sessionId, position); ++ }, ++ read: () => chatScrollPositions.get(sessionId) ?? null ++ }, ++ forkAt: (seq) => { ++ sessions.fork({ ++ sessionId, ++ atSeq: seq, ++ increaseTitle: true ++ }).then((childId) => { ++ sessions.open(childId); ++ }).catch(() => {}); ++ } ++ }; ++ } ++ }, ChatView); ++ slots.register({ ++ name: "conversation.composer.dock", ++ id: "stats", ++ order: 0, ++ locale: NS ++ }, StatsLine); ++ ctx.plugin(ConversationController, { ++ input: inputHub, ++ blocks: composerBlocks ++ }); ++ ctx.plugin(todoDockEntry); ++ ctx.plugin(queueDockEntry); ++ slots.register({ ++ name: "details", ++ locale: NS, ++ children: { "conversation.details.tool": { ++ kind: "single", ++ scope: "session" ++ } }, ++ store: chatStore, ++ inject: () => ({ closeDetails: () => { ++ layout.closeDetails(); ++ } }) ++ }, DetailsPanel); ++ } ++ //#endregion ++ exports.ConversationController = ConversationController; ++ exports.apply = apply; ++ exports.inject = inject; ++ return module.exports; ++ } ++}); ++ ++//# sourceMappingURL=client.js.map +\ No newline at end of file diff --git a/patches/@deepseek-ai+dsh-client-ui-deliverables+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-deliverables+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-client-ui-deliverables+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-ui-deliverables+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-client-ui-directory-picker-native+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-directory-picker-native+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-client-ui-directory-picker-native+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-ui-directory-picker-native+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-client-ui-layout+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-layout+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-client-ui-layout+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-ui-layout+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-client-ui-model-selection+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-model-selection+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-client-ui-model-selection+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-ui-model-selection+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-client-ui-settings-models+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-settings-models+0.1.1-rc.1.patch similarity index 86% rename from patches/@deepseek-ai+dsh-client-ui-settings-models+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-ui-settings-models+0.1.1-rc.1.patch index ec5a7dce..0750b8c3 100644 --- a/patches/@deepseek-ai+dsh-client-ui-settings-models+0.1.0-rc.8.patch +++ b/patches/@deepseek-ai+dsh-client-ui-settings-models+0.1.1-rc.1.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js b/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js -index 12ebd55..418b1bb 100644 +index fff5f43..5e218fd 100644 --- a/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js +++ b/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js @@ -64,6 +64,30 @@ window.__ModuleLoader__.load({ @@ -19,7 +19,7 @@ index 12ebd55..418b1bb 100644 + const tag = document.createElement("style"); + tag.dataset.plugin = "@deepseek-ai/dsh-client-ui-settings-models"; + tag.dataset.pluginCss = modelModalityTagId; -+ tag.textContent = ".dshModelModalityToggle{grid-column:1/-1;align-items:flex-start;gap:9px;min-height:36px;padding:4px;display:flex;cursor:pointer}.dshModelModalityToggle[aria-disabled=true]{cursor:default;opacity:.6}.dshModelModalityToggle input{accent-color:var(--dsw-alias-brand-primary);flex:none;width:16px;height:16px;margin:2px 0 0}.dshModelModalityCopy{flex-direction:column;gap:1px;display:flex}.dshModelModalityTitle{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:500;line-height:18px}.dshModelModalityHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}"; ++ tag.textContent = ".dshModelModalityToggle{grid-column:1/-1;align-items:flex-start;gap:9px;min-height:36px;padding:4px;display:flex;cursor:pointer}.dshModelModalityToggle[aria-disabled=true]{cursor:default;opacity:.6}.dshModelModalityToggle input{accent-color:var(--dsw-alias-brand-primary);flex:none;width:16px;height:16px;margin:2px 0 0}.dshModelModalityCopy{flex-direction:column;gap:1px;display:flex}.dshModelModalityTitle{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:500;line-height:18px}.dshModelModalityHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.dshModelModalityToggleCompact{grid-column:auto;align-items:center;gap:5px;min-height:28px;white-space:nowrap;border-radius:6px;padding:0 4px;position:relative}.dshModelModalityToggleCompact:hover{background:var(--dsw-alias-interactive-bg-hover)}.dshModelModalityToggleCompact input{width:14px;height:14px;margin:0}.dshModelModalityToggleCompact .dshModelModalityCopy{display:block}.dshModelModalityToggleCompact .dshModelModalityTitle{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.dshModelModalityToggleCompact:after{content:attr(data-tooltip);z-index:12;pointer-events:none;box-sizing:border-box;width:max-content;max-width:260px;color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-label-primary);border-radius:6px;padding:6px 8px;font-size:11px;font-weight:400;line-height:16px;white-space:normal;visibility:hidden;opacity:0;position:absolute;top:calc(100% + 5px);right:0}.dshModelModalityToggleCompact:hover:after,.dshModelModalityToggleCompact:focus-within:after{visibility:visible;opacity:1}.zGbnIq_modelRow{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) auto auto auto}"; + document.head.appendChild(tag); + } + const modelCatalogUxTagId = "@deepseek-ai/dsh-client-ui-settings-models/ModelCatalogUx"; @@ -33,7 +33,7 @@ index 12ebd55..418b1bb 100644 var ModelsSection_module_css_default = { "addActions": "zGbnIq_addActions", "addBlock": "zGbnIq_addBlock", -@@ -155,6 +179,67 @@ window.__ModuleLoader__.load({ +@@ -155,6 +179,68 @@ window.__ModuleLoader__.load({ }); } //#endregion @@ -50,8 +50,9 @@ index 12ebd55..418b1bb 100644 + /** Render the shared per-model image-input declaration control. */ + function ModelImageInputToggle(props) { + return (0, react_jsx_runtime.jsxs)("label", { -+ className: "dshModelModalityToggle", ++ className: props.compact ? "dshModelModalityToggle dshModelModalityToggleCompact" : "dshModelModalityToggle", + "aria-disabled": props.disabled, ++ "data-tooltip": props.compact ? `${props.t("modelImageInput")}: ${props.t("modelImageInputHint")}` : void 0, + children: [(0, react_jsx_runtime.jsx)("input", { + type: "checkbox", + checked: imageInputEnabled(props.model, props.field), @@ -64,8 +65,8 @@ index 12ebd55..418b1bb 100644 + className: "dshModelModalityCopy", + children: [(0, react_jsx_runtime.jsx)("span", { + className: "dshModelModalityTitle", -+ children: props.t("modelImageInput") -+ }), (0, react_jsx_runtime.jsx)("span", { ++ children: props.t(props.compact ? "modelImageInputShort" : "modelImageInput") ++ }), props.compact ? null : (0, react_jsx_runtime.jsx)("span", { + className: "dshModelModalityHint", + children: props.t("modelImageInputHint") + })] @@ -101,7 +102,7 @@ index 12ebd55..418b1bb 100644 //#region lib/types/client/DeepSeekModelsEditor.js /** * Curated editor for the direct DeepSeek adapter's advisory model catalog. -@@ -256,6 +341,7 @@ window.__ModuleLoader__.load({ +@@ -256,6 +342,7 @@ window.__ModuleLoader__.load({ function DeepSeekModelsEditor(props) { const [editing, setEditing] = (0, react.useState)(() => /* @__PURE__ */ new Map()); const [expanded, setExpanded] = (0, react.useState)(() => /* @__PURE__ */ new Set()); @@ -109,7 +110,7 @@ index 12ebd55..418b1bb 100644 const update = (index, key, value) => { const next = props.models.map((model, at) => { const copy = { ...model }; -@@ -364,12 +450,20 @@ window.__ModuleLoader__.load({ +@@ -364,12 +451,20 @@ window.__ModuleLoader__.load({ children: props.t("resetModels") }) : null] }), @@ -131,21 +132,42 @@ index 12ebd55..418b1bb 100644 className: ModelsSection_module_css_default["modelEntry"], children: [(0, react_jsx_runtime.jsxs)("div", { className: ModelsSection_module_css_default["modelRow"], -@@ -425,18 +519,18 @@ window.__ModuleLoader__.load({ +@@ -395,12 +490,23 @@ window.__ModuleLoader__.load({ + value: typeof model["name"] === "string" ? model["name"] : "", + placeholder: props.t("modelName"), + "aria-label": `${props.t("modelName")} ${String(index + 1)}`, +- disabled: props.disabled, +- onChange: (event) => { +- update(index, "name", event.target.value === "" ? void 0 : event.target.value); +- } +- }), +- (0, react_jsx_runtime.jsx)("button", { ++ disabled: props.disabled, ++ onChange: (event) => { ++ update(index, "name", event.target.value === "" ? void 0 : event.target.value); ++ } ++ }), ++ (0, react_jsx_runtime.jsx)(ModelImageInputToggle, { ++ model, ++ field: "inputModalities", ++ index, ++ t: props.t, ++ disabled: props.disabled, ++ compact: true, ++ onChange: (enabled) => { ++ update(index, "inputModalities", imageInputModalities(enabled)); ++ } ++ }), ++ (0, react_jsx_runtime.jsx)("button", { + type: "button", + className: ModelsSection_module_css_default["iconButton"], + "aria-label": `${props.t("modelAdvanced")} ${String(index + 1)}`, +@@ -425,18 +531,9 @@ window.__ModuleLoader__.load({ ] }), expanded.has(index) ? (0, react_jsx_runtime.jsxs)("div", { className: ModelsSection_module_css_default["modelAdvanced"], - children: [capacityField(model, index, "contextWindow", props.defaultContextWindow), capacityField(model, index, "maxTokens", props.defaultMaxTokens)] -+ children: [capacityField(model, index, "contextWindow", props.defaultContextWindow), capacityField(model, index, "maxTokens", props.defaultMaxTokens), (0, react_jsx_runtime.jsx)(ModelImageInputToggle, { -+ model, -+ field: "inputModalities", -+ index, -+ t: props.t, -+ disabled: props.disabled, -+ onChange: (enabled) => { -+ update(index, "inputModalities", imageInputModalities(enabled)); -+ } -+ })] ++ children: [capacityField(model, index, "contextWindow", props.defaultContextWindow), capacityField(model, index, "maxTokens", props.defaultMaxTokens)] }) : null] }, index)) - }), @@ -160,7 +182,7 @@ index 12ebd55..418b1bb 100644 }) ] }); -@@ -759,6 +853,7 @@ window.__ModuleLoader__.load({ +@@ -759,6 +856,7 @@ window.__ModuleLoader__.load({ const [picked, setPicked] = (0, react.useState)(/* @__PURE__ */ new Set()); const [expanded, setExpanded] = (0, react.useState)(/* @__PURE__ */ new Set()); const [editing, setEditing] = (0, react.useState)(/* @__PURE__ */ new Map()); @@ -168,7 +190,7 @@ index 12ebd55..418b1bb 100644 /** Buffer key for one capacity field; the row half moves when rows do. */ const bufferKey = (index, field) => `${String(index)}:${field}`; const editCapacity = (index, field, text) => { -@@ -889,11 +984,19 @@ window.__ModuleLoader__.load({ +@@ -889,11 +987,19 @@ window.__ModuleLoader__.load({ }) ] }), @@ -189,19 +211,37 @@ index 12ebd55..418b1bb 100644 className: ModelsSection_module_css_default["modelEntry"], children: [(0, react_jsx_runtime.jsxs)("div", { className: ModelsSection_module_css_default["modelRow"], -@@ -986,18 +1089,18 @@ window.__ModuleLoader__.load({ - editCapacity(index, "maxTokens", event.target.value); - } - })] -+ }), (0, react_jsx_runtime.jsx)(ModelImageInputToggle, { -+ model, -+ field: "input", -+ index, -+ t, -+ disabled, -+ onChange: (enabled) => { -+ patch(index, { input: imageInputModalities(enabled) }); -+ } +@@ -915,12 +1021,23 @@ window.__ModuleLoader__.load({ + value: textOf(model, "name"), + placeholder: t("modelName"), + "aria-label": `${t("modelName")} ${index + 1}`, +- disabled, +- onChange: (event) => { +- patch(index, { name: event.target.value === "" ? void 0 : event.target.value }); +- } +- }), +- (0, react_jsx_runtime.jsx)("button", { ++ disabled, ++ onChange: (event) => { ++ patch(index, { name: event.target.value === "" ? void 0 : event.target.value }); ++ } ++ }), ++ (0, react_jsx_runtime.jsx)(ModelImageInputToggle, { ++ model, ++ field: "input", ++ index, ++ t, ++ disabled, ++ compact: true, ++ onChange: (enabled) => { ++ patch(index, { input: imageInputModalities(enabled) }); ++ } ++ }), ++ (0, react_jsx_runtime.jsx)("button", { + type: "button", + className: ModelsSection_module_css_default["iconButton"], + "aria-label": `${t("modelAdvanced")} ${index + 1}`, +@@ -989,15 +1106,6 @@ window.__ModuleLoader__.load({ })] }) : null] }, index)), @@ -217,7 +257,7 @@ index 12ebd55..418b1bb 100644 failure !== void 0 ? (0, react_jsx_runtime.jsx)("p", { className: ModelsSection_module_css_default["error"], children: failure -@@ -1098,6 +1201,7 @@ window.__ModuleLoader__.load({ +@@ -1098,6 +1206,7 @@ window.__ModuleLoader__.load({ const [protocol, setProtocol] = (0, react.useState)(protocols[0] ?? ""); const [keyDraft, setKeyDraft] = (0, react.useState)(""); const [models, setModels] = (0, react.useState)([]); @@ -225,7 +265,7 @@ index 12ebd55..418b1bb 100644 const [busy, setBusy] = (0, react.useState)(false); const [failure, setFailure] = (0, react.useState)(void 0); /** -@@ -1279,6 +1383,8 @@ window.__ModuleLoader__.load({ +@@ -1279,6 +1388,8 @@ window.__ModuleLoader__.load({ (0, react_jsx_runtime.jsx)(ModelListEditor, { models, onChange: setModels, @@ -234,7 +274,7 @@ index 12ebd55..418b1bb 100644 probe: { settingsNs: NS$1, baseURL, -@@ -1397,6 +1503,8 @@ window.__ModuleLoader__.load({ +@@ -1397,6 +1508,8 @@ window.__ModuleLoader__.load({ const [keyState, setKeyState] = (0, react.useState)(void 0); const [busy, setBusy] = (0, react.useState)(false); const [failure, setFailure] = (0, react.useState)(void 0); @@ -243,7 +283,7 @@ index 12ebd55..418b1bb 100644 const [committedOriginal, setCommittedOriginal] = (0, react.useState)(() => schema.getPath(namespace.user, settingsPath)); const [expectedRevision, setExpectedRevision] = (0, react.useState)(() => namespace.revision); const root = (0, react.useMemo)(() => schema.rehydrate(namespace.schema), [namespace.schema, schema]); -@@ -1522,6 +1630,15 @@ window.__ModuleLoader__.load({ +@@ -1522,6 +1635,15 @@ window.__ModuleLoader__.load({ const inheritedModels = () => { return schema.getPath(namespace.base, [...settingsPath, "models"]) ?? schema.nodeAtPath(root, [...settingsPath, "models"])?.meta.default; }; @@ -259,7 +299,7 @@ index 12ebd55..418b1bb 100644 /** * The curated fields of one known adapter family. The family arrives * narrowed so the per-family branches below are total: an unknown namespace -@@ -1539,6 +1656,8 @@ window.__ModuleLoader__.load({ +@@ -1539,6 +1661,8 @@ window.__ModuleLoader__.load({ const catalogProps = { models, overridden: modelsOverridden, @@ -268,7 +308,7 @@ index 12ebd55..418b1bb 100644 t, disabled, onChange: (next) => { -@@ -1577,6 +1696,10 @@ window.__ModuleLoader__.load({ +@@ -1577,6 +1701,10 @@ window.__ModuleLoader__.load({ ] }), props.credentialOnly === true ? null : (0, react_jsx_runtime.jsxs)("details", { className: ModelsSection_module_css_default["customized"], @@ -279,7 +319,7 @@ index 12ebd55..418b1bb 100644 children: [(0, react_jsx_runtime.jsx)("summary", { className: ModelsSection_module_css_default["customizedSummary"], children: t("customized") -@@ -1653,8 +1776,22 @@ window.__ModuleLoader__.load({ +@@ -1653,8 +1781,22 @@ window.__ModuleLoader__.load({ })] })] }); }; @@ -303,7 +343,7 @@ index 12ebd55..418b1bb 100644 children: [ props.hideTitle === true ? null : (0, react_jsx_runtime.jsxs)("div", { className: ModelsSection_module_css_default["editorHeader"], -@@ -1678,19 +1815,15 @@ window.__ModuleLoader__.load({ +@@ -1678,19 +1820,15 @@ window.__ModuleLoader__.load({ className: ModelsSection_module_css_default["advancedHint"], children: `${t("model")} ${String(modelFailure.index + 1)}: ${t(modelFailure.key)}` }), @@ -332,7 +372,7 @@ index 12ebd55..418b1bb 100644 }) ] }); -@@ -1784,6 +1917,26 @@ window.__ModuleLoader__.load({ +@@ -1784,6 +1922,26 @@ window.__ModuleLoader__.load({ function providerCopy(template, target) { return template.replace("{provider}", () => providerTargetLabel(target)); } @@ -359,7 +399,7 @@ index 12ebd55..418b1bb 100644 /** * Render the Models section content column. * @param props - slot-delivered injected dependencies. -@@ -1810,6 +1963,8 @@ window.__ModuleLoader__.load({ +@@ -1810,6 +1968,8 @@ window.__ModuleLoader__.load({ const [deleteFailure, setDeleteFailure] = (0, react.useState)(void 0); const [savedTarget, setSavedTarget] = (0, react.useState)(void 0); const [declaring, setDeclaring] = (0, react.useState)(false); @@ -368,7 +408,7 @@ index 12ebd55..418b1bb 100644 const [dismissedSetup, setDismissedSetup] = (0, react.useState)(() => /* @__PURE__ */ new Set()); const announceSaved = (target) => { controller.load().then(() => { -@@ -1879,10 +2034,16 @@ window.__ModuleLoader__.load({ +@@ -1879,10 +2039,16 @@ window.__ModuleLoader__.load({ }; const anyUsable = state.rows.some(providerUsable); const configured = state.rows.filter((row) => row.configured); @@ -386,7 +426,7 @@ index 12ebd55..418b1bb 100644 return (0, react_jsx_runtime.jsxs)("div", { className: ModelsSection_module_css_default["section"], children: [ -@@ -2001,24 +2162,66 @@ window.__ModuleLoader__.load({ +@@ -2001,24 +2167,66 @@ window.__ModuleLoader__.load({ className: ModelsSection_module_css_default["addCard"], children: [(0, react_jsx_runtime.jsxs)("div", { className: ModelsSection_module_css_default["field"], @@ -468,7 +508,7 @@ index 12ebd55..418b1bb 100644 }), (0, react_jsx_runtime.jsx)(ProviderEditor, { provider: addTarget.provider, displayName: addTarget.displayName, -@@ -2062,6 +2265,8 @@ window.__ModuleLoader__.load({ +@@ -2062,6 +2270,8 @@ window.__ModuleLoader__.load({ setDeclaring(false); setAdding(true); setEditing(targetOf(first)); @@ -477,7 +517,7 @@ index 12ebd55..418b1bb 100644 }, children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, { size: 14 }), t("add")] }), (0, react_jsx_runtime.jsxs)("button", { -@@ -2170,7 +2375,7 @@ window.__ModuleLoader__.load({ +@@ -2170,7 +2380,7 @@ window.__ModuleLoader__.load({ } //#endregion //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-settings-models/src/client/DeepSeekOnboardingDialog.module.css.mjs @@ -486,7 +526,7 @@ index 12ebd55..418b1bb 100644 const tagId$1 = "@deepseek-ai/dsh-client-ui-settings-models/DeepSeekOnboardingDialog.module.css"; if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) { const tag = document.createElement("style"); -@@ -2181,6 +2386,12 @@ window.__ModuleLoader__.load({ +@@ -2181,6 +2391,12 @@ window.__ModuleLoader__.load({ } var DeepSeekOnboardingDialog_module_css_default = { "description": "GL8Viq_description", @@ -499,7 +539,7 @@ index 12ebd55..418b1bb 100644 "editor": "GL8Viq_editor" }; //#endregion -@@ -2196,35 +2407,50 @@ window.__ModuleLoader__.load({ +@@ -2196,35 +2412,50 @@ window.__ModuleLoader__.load({ function assertNever$1(_value) { throw new Error("unexpected DeepSeek onboarding state"); } @@ -568,7 +608,7 @@ index 12ebd55..418b1bb 100644 const finishCredential = (changed) => { if (!changed) { complete(); -@@ -2237,26 +2463,48 @@ window.__ModuleLoader__.load({ +@@ -2237,26 +2468,48 @@ window.__ModuleLoader__.load({ children: [(0, react_jsx_runtime.jsx)("p", { className: DeepSeekOnboardingDialog_module_css_default.description, children: t("onboardingDescription") @@ -620,7 +660,7 @@ index 12ebd55..418b1bb 100644 })] }); } -@@ -2520,6 +2768,8 @@ window.__ModuleLoader__.load({ +@@ -2520,6 +2773,8 @@ window.__ModuleLoader__.load({ deleting: "Deleting {provider}…", add: "Add provider", provider: "Provider", @@ -629,20 +669,21 @@ index 12ebd55..418b1bb 100644 close: "Close", cancel: "Cancel", apply: "Apply", -@@ -2551,7 +2801,11 @@ window.__ModuleLoader__.load({ +@@ -2551,7 +2806,12 @@ window.__ModuleLoader__.load({ contextWindowPlaceholder: "Uses the provider default", maxTokens: "Max output tokens", maxTokensPlaceholder: "Uses the provider default", - modelAdvanced: "Capacities", + modelAdvanced: "Model settings", + modelImageInput: "Image input", ++ modelImageInputShort: "Vision", + modelImageInputHint: "Declare that this model accepts images; the endpoint must support them.", + modelSearch: "Search models", + modelSearchEmpty: "No matching models.", addModel: "Add model", removeModel: "Delete model", modelsEmpty: "No models will be shown in the selector. Unlisted IDs can still be sent directly.", -@@ -2595,10 +2849,14 @@ window.__ModuleLoader__.load({ +@@ -2595,10 +2855,14 @@ window.__ModuleLoader__.load({ welcomeBody: WELCOME_NOTICE_COPY.en.body, welcomeContinue: WELCOME_NOTICE_COPY.en.continueLabel, welcomeError: "The acknowledgement could not be saved. Please try again.", @@ -660,7 +701,7 @@ index 12ebd55..418b1bb 100644 onboardingSaving: "Saving…", keyRequired: "Enter an API key to continue." }; -@@ -2618,6 +2876,8 @@ window.__ModuleLoader__.load({ +@@ -2618,6 +2882,8 @@ window.__ModuleLoader__.load({ deleting: "正在删除 {provider}…", add: "添加提供方", provider: "提供方", @@ -669,20 +710,21 @@ index 12ebd55..418b1bb 100644 close: "关闭", cancel: "取消", apply: "保存", -@@ -2649,7 +2909,11 @@ window.__ModuleLoader__.load({ +@@ -2649,7 +2915,12 @@ window.__ModuleLoader__.load({ contextWindowPlaceholder: "使用提供方默认值", maxTokens: "最大输出 token 数", maxTokensPlaceholder: "使用提供方默认值", - modelAdvanced: "容量", + modelAdvanced: "模型设置", + modelImageInput: "支持图片输入", ++ modelImageInputShort: "视觉", + modelImageInputHint: "声明该模型可接收图片;请确认接口实际支持。", + modelSearch: "搜索模型", + modelSearchEmpty: "没有找到匹配的模型。", addModel: "添加模型", removeModel: "删除模型", modelsEmpty: "模型选择器中将不显示任何模型;目录外 ID 仍可直接发送。", -@@ -2693,10 +2957,14 @@ window.__ModuleLoader__.load({ +@@ -2693,10 +2964,14 @@ window.__ModuleLoader__.load({ welcomeBody: WELCOME_NOTICE_COPY.zh.body, welcomeContinue: WELCOME_NOTICE_COPY.zh.continueLabel, welcomeError: "暂时无法保存确认状态,请重试。", diff --git a/patches/@deepseek-ai+dsh-client-ui-sidebar+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-client-ui-sidebar+0.1.1-rc.1.patch similarity index 99% rename from patches/@deepseek-ai+dsh-client-ui-sidebar+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-client-ui-sidebar+0.1.1-rc.1.patch index 3d4bb455..965e732f 100644 --- a/patches/@deepseek-ai+dsh-client-ui-sidebar+0.1.0-rc.8.patch +++ b/patches/@deepseek-ai+dsh-client-ui-sidebar+0.1.1-rc.1.patch @@ -106,7 +106,7 @@ index acfa7ad..46f5f50 100644 - children: "DSH Local Build" - }), (0, react_jsx_runtime.jsx)("span", { - className: SidebarRoot_module_css_default.buildRevision, -- children: "fcbad14" +- children: "9a439af" - })] }) }) - })] - }) diff --git a/patches/@deepseek-ai+dsh-host-apiproxy+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-host-apiproxy+0.1.1-rc.1.patch similarity index 52% rename from patches/@deepseek-ai+dsh-host-apiproxy+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-host-apiproxy+0.1.1-rc.1.patch index ddc11fa4..ff872d3f 100644 --- a/patches/@deepseek-ai+dsh-host-apiproxy+0.1.0-rc.8.patch +++ b/patches/@deepseek-ai+dsh-host-apiproxy+0.1.1-rc.1.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/@deepseek-ai/dsh-host-apiproxy/lib/index.js b/node_modules/@deepseek-ai/dsh-host-apiproxy/lib/index.js -index 0bb5994..5d1e4c0 100644 +index 5075798..fb882a8 100644 --- a/node_modules/@deepseek-ai/dsh-host-apiproxy/lib/index.js +++ b/node_modules/@deepseek-ai/dsh-host-apiproxy/lib/index.js @@ -1,9 +1,9 @@ @@ -11,10 +11,10 @@ index 0bb5994..5d1e4c0 100644 import { homedir, release } from "node:os"; -import { dirname, extname } from "node:path"; +import { dirname, extname, join, relative, resolve, sep } from "node:path"; + import { z as z$1 } from "zod"; import { installModelSelection } from "@deepseek-ai/dsh-agent"; import { AttachmentError, admitEncodedImages } from "@deepseek-ai/dsh-attachment"; - import { ReasoningEffortId, contentHasImage, createUserMessage, errorChain, freezeMessage } from "@deepseek-ai/dsh-llm"; -@@ -12,8 +12,8 @@ import { SessionQueryError } from "@deepseek-ai/dsh-session-query"; +@@ -13,8 +13,8 @@ import { SessionQueryError } from "@deepseek-ai/dsh-session-query"; import { SubagentError } from "@deepseek-ai/dsh-subagent"; import { isUserInvocable } from "@deepseek-ai/dsh-skill"; import { WorkspaceId, WorkspaceMoveInvalidError, WorkspaceOrderInvalidError, WorkspaceUnknownSessionError, workspaceDomainState, workspaceRecord } from "@deepseek-ai/dsh-workspace"; @@ -25,7 +25,7 @@ index 0bb5994..5d1e4c0 100644 import { GoalError } from "@deepseek-ai/dsh-goal"; import { SettingsConflictError, settingsNamespace } from "@deepseek-ai/dsh-settings"; import { credentialRef } from "@deepseek-ai/dsh-credentials"; -@@ -23,6 +23,110 @@ import { UserQuestionError } from "@deepseek-ai/dsh-user-questions"; +@@ -23,6 +23,99 @@ import { UserQuestionError } from "@deepseek-ai/dsh-user-questions"; import { DirectoryPickerError } from "@deepseek-ai/dsh-host-directory-picker"; import { API_REMOTE_FORWARDED_EVENTS, ApiRemoteSessionNotFound, ApiRemoteSubagentSessionOwnership, apiRemoteSubagentOwnershipError, createApiRemoteAgentResolver, hasApiRemoteSubagentOwner, inspectApiRemoteSession } from "@deepseek-ai/dsh-api-remotes"; import { runNativeCommand } from "@deepseek-ai/dsh-native-command"; @@ -46,97 +46,86 @@ index 0bb5994..5d1e4c0 100644 + error: message + }, { status }); +} -+function safePresetArchivePath(name) { -+ if (name === "" || name.includes("\0") || name.includes("\\") || name.startsWith("/") || /^[a-zA-Z]:/.test(name)) return false; -+ const segments = name.split("/"); -+ return segments.every((segment) => segment !== "" && segment !== "." && segment !== ".."); ++function safePresetArchivePath(entry) { ++ const normalized = entry.replace(/\\/g, "/").trim(); ++ if (normalized === "" || normalized.startsWith("/") || /^[a-zA-Z]:/.test(normalized)) return null; ++ const segments = normalized.split("/"); ++ const safe = []; ++ for (const seg of segments) { ++ if (seg === "" || seg === ".") continue; ++ if (seg === "..") return null; ++ safe.push(seg); ++ } ++ return safe.length === 0 ? null : safe.join("/"); +} -+function presetArchiveWarnings(files) { -+ let hasAbsolutePath = false; -+ let hasPossibleSecret = false; -+ for (const [name, data] of Object.entries(files)) { -+ if (!PRESET_TEXT_EXTENSIONS.has(extname(name).toLowerCase()) || data.length > 1024 * 1024 || data.includes(0)) continue; -+ const text = strFromU8(data); -+ if (/(?:^|[\s"'(:=])(?:\/Users\/|\/home\/)/m.test(text) || /[A-Za-z]:[\\/]/.test(text) || /\\\\[^\\\s]+[\\/]/.test(text)) hasAbsolutePath = true; -+ if (/(?:api[_-]?key|secret|token)\s*[:=]\s*["']?[^\s"']{12,}|\bsk-[A-Za-z0-9_-]{16,}/i.test(text)) hasPossibleSecret = true; ++function presetArchiveWarnings(files, fromVersion) { ++ const warnings = []; ++ if (typeof fromVersion === "string" && fromVersion.trim() !== "" && fromVersion.trim() !== "0.1.1-rc.1") { ++ warnings.push({ ++ code: "version-mismatch", ++ message: `Package created by DSH ${fromVersion}, current version is 0.1.1-rc.1` ++ }); + } -+ return [ -+ ...hasAbsolutePath ? ["absolute-paths"] : [], -+ ...hasPossibleSecret ? ["possible-secrets"] : [] -+ ]; ++ let hasSecrets = false; ++ let hasAbsolutePaths = false; ++ for (const [rel, bytes] of Object.entries(files)) { ++ const ext = extname(rel).toLowerCase(); ++ if (!PRESET_TEXT_EXTENSIONS.has(ext)) continue; ++ let text; ++ try { ++ text = strFromU8(bytes); ++ } catch { ++ continue; ++ } ++ if (!hasSecrets && /(?:sk-[a-zA-Z0-9]{20,}|api[_-]?key\s*[:=]\s*["\x27]?[a-zA-Z0-9_-]{16,}|ghp_[a-zA-Z0-9]{30,}|bearer\s+[a-zA-Z0-9._-]{20,})/i.test(text)) { ++ hasSecrets = true; ++ warnings.push({ ++ code: "possible-secrets", ++ message: "Package appears to contain API keys or tokens. Verify contents before using." ++ }); ++ } ++ if (!hasAbsolutePaths && /(?:\/(?:Users|home|root|var|etc)\/|[a-zA-Z]:\\(?:Users|Documents|Program))/i.test(text)) { ++ hasAbsolutePaths = true; ++ warnings.push({ ++ code: "absolute-paths", ++ message: "Package contains hardcoded file paths that may not exist on this machine." ++ }); ++ } ++ } ++ return warnings; +} -+async function collectPresetArchiveFiles(root) { -+ const files = /* @__PURE__ */ Object.create(null); ++async function collectPresetArchiveFiles(dir) { ++ const files = {}; + let count = 0; + let total = 0; -+ async function visit(directory) { -+ for (const entry of await readdir(directory, { withFileTypes: true })) { ++ async function visit(current, relPrefix) { ++ const entries = await readdir(current, { withFileTypes: true }); ++ for (const entry of entries) { + if (PRESET_ARCHIVE_IGNORED_FILES.has(entry.name)) continue; -+ const full = join(directory, entry.name); -+ const rel = relative(root, full).split("\\").join("/"); -+ if (!safePresetArchivePath(rel)) throw new Error(`Preset contains an unsafe path: ${rel}`); -+ const info = await lstat(full); -+ if (info.isSymbolicLink()) throw new Error(`Preset contains a symbolic link, which cannot be exported safely: ${rel}`); -+ if (info.isDirectory()) { -+ await visit(full); ++ const full = join(current, entry.name); ++ const rel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name; ++ if (entry.isDirectory()) { ++ await visit(full, rel); + continue; + } -+ if (!info.isFile()) throw new Error(`Preset contains an unsupported filesystem entry: ${rel}`); ++ const info = await lstat(full); ++ if (info.isSymbolicLink()) continue; + if (++count > PRESET_ARCHIVE_MAX_FILES) throw new Error(`Preset contains more than ${PRESET_ARCHIVE_MAX_FILES} files`); + if (info.size > PRESET_ARCHIVE_MAX_FILE) throw new Error(`Preset file is too large to export: ${rel}`); + total += info.size; + if (total > PRESET_ARCHIVE_MAX_UNCOMPRESSED) throw new Error("Preset is too large to export"); -+ files[`preset/${rel}`] = new Uint8Array(await readFile(full)); ++ files[rel] = new Uint8Array(await readFile(full)); + } + } -+ await visit(root); ++ await visit(dir, ""); + return files; +} -+function parsePresetArchive(data) { -+ if (data.length > PRESET_ARCHIVE_MAX_COMPRESSED) throw new Error("Preset package is larger than 16 MB"); -+ let count = 0; -+ let total = 0; -+ const archive = unzipSync(data, { filter(file) { -+ if (!safePresetArchivePath(file.name)) throw new Error(`Preset package contains an unsafe path: ${file.name}`); -+ if (++count > PRESET_ARCHIVE_MAX_FILES + 1) throw new Error(`Preset package contains more than ${PRESET_ARCHIVE_MAX_FILES} files`); -+ if (file.originalSize > PRESET_ARCHIVE_MAX_FILE) throw new Error(`Preset package contains an oversized file: ${file.name}`); -+ total += file.originalSize; -+ if (total > PRESET_ARCHIVE_MAX_UNCOMPRESSED) throw new Error("Expanded preset package is larger than 32 MB"); -+ return true; -+ } }); -+ const manifestBytes = archive["manifest.json"]; -+ if (manifestBytes === void 0) throw new Error("Preset package has no manifest.json"); -+ let manifest; -+ try { -+ manifest = JSON.parse(strFromU8(manifestBytes)); -+ } catch { -+ throw new Error("Preset package manifest is not valid JSON"); -+ } -+ if (typeof manifest !== "object" || manifest === null || manifest.format !== PRESET_ARCHIVE_FORMAT || manifest.version !== PRESET_ARCHIVE_VERSION || typeof manifest.id !== "string" || !PRESET_ARCHIVE_ID.test(manifest.id)) throw new Error("Preset package manifest is unsupported or invalid"); -+ if (manifest.name !== void 0 && (typeof manifest.name !== "string" || manifest.name.length > 160)) throw new Error("Preset package manifest has an invalid name"); -+ if (manifest.description !== void 0 && (typeof manifest.description !== "string" || manifest.description.length > 4e3)) throw new Error("Preset package manifest has an invalid description"); -+ if (manifest.sourceDshVersion !== void 0 && (typeof manifest.sourceDshVersion !== "string" || manifest.sourceDshVersion.length > 64)) throw new Error("Preset package manifest has an invalid DSH version"); -+ const files = /* @__PURE__ */ Object.create(null); -+ for (const [name, bytes] of Object.entries(archive)) { -+ if (name === "manifest.json") continue; -+ if (!name.startsWith("preset/") || name === "preset/") throw new Error(`Unexpected file outside the preset directory: ${name}`); -+ const rel = name.slice("preset/".length); -+ if (!safePresetArchivePath(rel)) throw new Error(`Preset package contains an unsafe path: ${rel}`); -+ if (PRESET_ARCHIVE_IGNORED_FILES.has(rel.split("/").at(-1))) continue; -+ files[rel] = bytes; -+ } -+ if (files[COMPOSITION_FILE] === void 0) throw new Error(`Preset package is missing ${COMPOSITION_FILE}`); -+ return { -+ manifest, -+ files, -+ warnings: presetArchiveWarnings(files) -+ }; -+} +//#endregion ++ //#region lib/types/session-export.js /** * Host-side session-log download: streams one ZIP archive whose files are the -@@ -3126,7 +3230,13 @@ function createApiProxy(ctx, defaults) { +@@ -3137,7 +3230,13 @@ function createApiProxy(ctx, defaults) { })); }, async pickDirectory(request, signal) { @@ -151,7 +140,7 @@ index 0bb5994..5d1e4c0 100644 if (capability.kind !== "native") return err(request, { code: "directory-picker-unavailable", message: `host.pickDirectory needs the native capability; the composed picker serves "${capability.kind}"`, -@@ -3148,7 +3258,13 @@ function createApiProxy(ctx, defaults) { +@@ -3159,7 +3258,13 @@ function createApiProxy(ctx, defaults) { } }, async listDirectory(request, signal) { @@ -166,7 +155,7 @@ index 0bb5994..5d1e4c0 100644 if (capability.kind !== "browse") return err(request, { code: "directory-picker-unavailable", message: `host.listDirectory needs the browse capability; the composed picker serves "${capability.kind}"`, -@@ -3166,7 +3282,13 @@ function createApiProxy(ctx, defaults) { +@@ -3177,7 +3282,13 @@ function createApiProxy(ctx, defaults) { } }, async createDirectory(request) { @@ -181,7 +170,7 @@ index 0bb5994..5d1e4c0 100644 if (capability.kind !== "browse") return err(request, { code: "directory-picker-unavailable", message: `host.createDirectory needs the browse capability; the composed picker serves "${capability.kind}"`, -@@ -3220,6 +3342,127 @@ function createApiProxy(ctx, defaults) { +@@ -3231,6 +3342,145 @@ function createApiProxy(ctx, defaults) { } }, agentPresets: { @@ -198,118 +187,136 @@ index 0bb5994..5d1e4c0 100644 + format: PRESET_ARCHIVE_FORMAT, + version: PRESET_ARCHIVE_VERSION, + id: preset.id, -+ ...preset.name === void 0 ? {} : { name: preset.name }, -+ ...preset.description === void 0 ? {} : { description: preset.description }, -+ sourceDshVersion: "0.1.0-rc.7", -+ exportedAt: (/* @__PURE__ */ new Date()).toISOString() ++ name: preset.name, ++ description: preset.description, ++ icon: preset.icon, ++ createdAt: (/* @__PURE__ */ new Date()).toISOString(), ++ dshVersion: "0.1.1-rc.1" + }; -+ const data = zipSync({ -+ "manifest.json": strToU8(JSON.stringify(manifest, null, 2)), -+ ...files -+ }, { level: 6 }); -+ if (data.length > PRESET_ARCHIVE_MAX_COMPRESSED) return presetArchiveFailure("The compressed preset package is larger than 16 MB.", 413); ++ files["manifest.json"] = strToU8(JSON.stringify(manifest, null, 2)); + signal?.throwIfAborted(); -+ return new Response(data, { headers: { -+ "content-type": PRESET_ARCHIVE_MIME, -+ "content-disposition": `attachment; filename="${preset.id}.dshpreset"`, -+ "cache-control": "no-store" -+ } }); ++ const data = zipSync(files, { level: 6 }); ++ if (data.length > PRESET_ARCHIVE_MAX_COMPRESSED) return presetArchiveFailure("The compressed preset package is larger than 16 MB.", 413); ++ return new Response(data, { ++ headers: { ++ "content-type": PRESET_ARCHIVE_MIME, ++ "content-disposition": `attachment; filename="${preset.id}.dshpreset"` ++ } ++ }); + } catch (error) { + if (signal?.aborted) return presetArchiveFailure("Preset export was cancelled.", 499); -+ return presetArchiveFailure(error instanceof Error ? error.message : String(error)); ++ return presetArchiveFailure(error instanceof Error ? error.message : "Failed to export preset package."); + } + }, + async importArchive(data, options, signal) { + const presets = ctx.get("agentPresets"); + if (presets === void 0) return presetArchiveFailure("This deployment has no agent presets.", 503); -+ let parsed; ++ const install = options.install === true; ++ let requestedId = options.agentPreset?.trim().toLowerCase(); ++ if (requestedId === "") requestedId = void 0; ++ if (requestedId !== void 0 && !PRESET_ARCHIVE_ID.test(requestedId)) return presetArchiveFailure("Use lowercase letters, digits, and hyphens, starting with a letter or digit."); ++ let unzipped; + try { -+ parsed = parsePresetArchive(data); -+ } catch (error) { -+ return presetArchiveFailure(error instanceof Error ? error.message : String(error)); ++ signal?.throwIfAborted(); ++ unzipped = unzipSync(data); ++ } catch { ++ return presetArchiveFailure("The file is not a valid ZIP archive."); + } -+ const agentPreset = options.agentPreset ?? parsed.manifest.id; -+ if (!PRESET_ARCHIVE_ID.test(agentPreset)) return presetArchiveFailure("Use lowercase letters, digits, and hyphens, starting with a letter or digit."); -+ let rows; ++ const manifestBytes = unzipped["manifest.json"]; ++ if (!manifestBytes) return presetArchiveFailure("Missing manifest.json in preset package."); ++ let manifest; + try { -+ rows = await presets.list(); -+ } catch (error) { -+ return presetArchiveFailure(`Could not read the existing preset list: ${error instanceof Error ? error.message : String(error)}`, 500); ++ manifest = JSON.parse(strFromU8(manifestBytes)); ++ } catch { ++ return presetArchiveFailure("Invalid JSON in manifest.json."); ++ } ++ if (manifest.format !== PRESET_ARCHIVE_FORMAT) return presetArchiveFailure(`Unsupported package format "${manifest.format}". Expected "${PRESET_ARCHIVE_FORMAT}".`); ++ if (manifest.version !== PRESET_ARCHIVE_VERSION) return presetArchiveFailure(`Unsupported package version ${manifest.version}. Maximum supported is ${PRESET_ARCHIVE_VERSION}.`); ++ const originalId = typeof manifest.id === "string" ? manifest.id.trim().toLowerCase() : ""; ++ if (!PRESET_ARCHIVE_ID.test(originalId)) return presetArchiveFailure(`Invalid preset id "${manifest.id}" in manifest.`); ++ const targetId = requestedId ?? originalId; ++ const files = {}; ++ let fileCount = 0; ++ let totalUncompressed = 0; ++ for (const [entryName, bytes] of Object.entries(unzipped)) { ++ if (entryName === "manifest.json") continue; ++ const safe = safePresetArchivePath(entryName); ++ if (safe === null) continue; ++ const baseName = safe.split("/").pop() ?? ""; ++ if (PRESET_ARCHIVE_IGNORED_FILES.has(baseName)) continue; ++ if (++fileCount > PRESET_ARCHIVE_MAX_FILES) return presetArchiveFailure(`Package contains more than ${PRESET_ARCHIVE_MAX_FILES} files.`); ++ if (bytes.length > PRESET_ARCHIVE_MAX_FILE) return presetArchiveFailure(`File "${safe}" exceeds the 12 MB limit.`); ++ totalUncompressed += bytes.length; ++ if (totalUncompressed > PRESET_ARCHIVE_MAX_UNCOMPRESSED) return presetArchiveFailure("Uncompressed package exceeds the 32 MB limit."); ++ files[safe] = bytes; + } -+ const conflict = rows.some((row) => row.id === agentPreset); -+ const warnings = [ -+ ...parsed.warnings, -+ ...typeof parsed.manifest.sourceDshVersion === "string" && parsed.manifest.sourceDshVersion !== "0.1.0-rc.7" ? ["version-mismatch"] : [] -+ ]; -+ const preview = { -+ ok: true, -+ agentPreset, -+ sourceAgentPreset: parsed.manifest.id, -+ ...typeof parsed.manifest.name === "string" ? { name: parsed.manifest.name } : {}, -+ ...typeof parsed.manifest.description === "string" ? { description: parsed.manifest.description } : {}, -+ ...typeof parsed.manifest.sourceDshVersion === "string" ? { sourceDshVersion: parsed.manifest.sourceDshVersion } : {}, -+ fileCount: Object.keys(parsed.files).length, -+ warnings, -+ conflict, -+ installed: false -+ }; -+ if (!options.install) return Response.json(preview, { headers: { "cache-control": "no-store" } }); -+ if (conflict) return presetArchiveFailure(`A preset named "${agentPreset}" already exists. Choose another identifier.`, 409); -+ let root; ++ if (!files[COMPOSITION_FILE]) return presetArchiveFailure(`Package is missing required composition file "${COMPOSITION_FILE}".`); ++ let conflict = false; + try { -+ root = writableRoot(presets.roots); -+ } catch (error) { -+ return presetArchiveFailure(error instanceof Error ? error.message : String(error), 403); ++ const existing = await presets.resolve(targetId); ++ if (existing) conflict = true; ++ } catch {} ++ const warnings = presetArchiveWarnings(files, manifest.dshVersion); ++ if (!install) { ++ return Response.json({ ++ ok: true, ++ manifest: { ++ id: targetId, ++ originalId, ++ name: manifest.name ?? targetId, ++ description: manifest.description ?? "", ++ icon: manifest.icon ?? "sparkle", ++ dshVersion: manifest.dshVersion, ++ createdAt: manifest.createdAt ++ }, ++ fileCount, ++ totalSize: totalUncompressed, ++ conflict, ++ warnings ++ }); + } -+ const target = join(root, agentPreset); -+ let container; ++ if (conflict) return presetArchiveFailure(`A preset named "${targetId}" already exists. Choose a different name or remove the existing preset first.`, 409); ++ const root = writableRoot(); ++ const target = resolve(root, targetId); ++ const imported = await mkdtemp(resolve(root, `.${targetId}-import-`)); + try { + signal?.throwIfAborted(); -+ await mkdir(root, { recursive: true }); -+ try { -+ await stat(target); -+ return presetArchiveFailure(`A preset named "${agentPreset}" already exists. Choose another identifier.`, 409); -+ } catch (error) { -+ if (error?.code !== "ENOENT") throw error; -+ } -+ container = await mkdtemp(join(root, ".dshpreset-import-")); -+ const imported = join(container, agentPreset); -+ await mkdir(imported, { recursive: true }); -+ for (const [name, bytes] of Object.entries(parsed.files)) { -+ signal?.throwIfAborted(); -+ const destination = resolve(imported, name); -+ if (!destination.startsWith(`${resolve(imported)}${sep}`)) throw new Error(`Preset package contains an unsafe path: ${name}`); -+ await mkdir(dirname(destination), { recursive: true }); -+ await writeFile(destination, bytes); ++ for (const [relPath, bytes] of Object.entries(files)) { ++ const fullPath = resolve(imported, relPath); ++ if (!fullPath.startsWith(imported + sep)) throw new Error(`Path traversal detected: ${relPath}`); ++ await mkdir(dirname(fullPath), { recursive: true }); ++ await writeFile(fullPath, bytes); + } + const scanned = await scanRoot({ -+ path: container, -+ trust: "user" ++ path: imported, ++ trust: "user", ++ id: targetId + }); -+ const candidate = scanned.find((row) => row.id === agentPreset); -+ if (candidate === void 0) throw new Error("The imported package did not produce a preset."); -+ if (candidate.broken !== void 0) throw new Error(`The imported preset failed validation: ${candidate.broken}`); ++ const parsed = scanned.get(targetId); ++ if (!parsed || parsed.broken !== void 0) { ++ throw new Error(parsed?.broken ? `Invalid preset configuration: ${parsed.broken}` : "Failed to load imported preset configuration."); ++ } ++ signal?.throwIfAborted(); + await rename(imported, target); -+ return Response.json({ -+ ...preview, -+ conflict: false, -+ installed: true -+ }, { headers: { "cache-control": "no-store" } }); + } catch (error) { ++ await rm(imported, { recursive: true, force: true }).catch(() => {}); + if (signal?.aborted) return presetArchiveFailure("Preset import was cancelled.", 499); -+ if (error?.code === "EEXIST" || error?.code === "ENOTEMPTY") return presetArchiveFailure(`A preset named "${agentPreset}" already exists. Choose another identifier.`, 409); -+ return presetArchiveFailure(error instanceof Error ? error.message : String(error)); -+ } finally { -+ if (container !== void 0) await rm(container, { -+ recursive: true, -+ force: true -+ }).catch(() => {}); ++ return presetArchiveFailure(error instanceof Error ? error.message : "Failed to install preset files."); ++ } ++ try { ++ const resolved = await presets.resolve(targetId); ++ return Response.json({ ++ ok: true, ++ preset: resolved ++ }); ++ } catch (error) { ++ return presetArchiveFailure(error instanceof Error ? error.message : "Preset was installed but could not be resolved."); + } + }, async list(request) { const presets = ctx.get("agentPresets"); if (presets === void 0) return ok(request, { -@@ -4909,6 +5152,34 @@ function toFetchHandler(api) { +@@ -4920,6 +5170,34 @@ function toFetchHandler(api) { rpcId: RpcId(randomUUID()), payload: {} }, req.signal)); @@ -344,7 +351,7 @@ index 0bb5994..5d1e4c0 100644 if (path === "/api/session.export" && (req.method === "GET" || req.method === "HEAD")) { const parsed = sessionLogQuerySchema.safeParse(Object.fromEntries(url.searchParams)); if (!parsed.success) return new Response("missing or invalid sessionId query parameter", { status: 400 }); -@@ -5508,7 +5779,6 @@ var ApiProxyService = class extends Service { +@@ -5519,7 +5797,6 @@ var ApiProxyService = class extends Service { "agentDefaultModel", "agents", "attachments", diff --git a/patches/@deepseek-ai+dsh-llm-deepseek+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-llm-deepseek+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-llm-deepseek+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-llm-deepseek+0.1.1-rc.1.patch diff --git a/patches/@deepseek-ai+dsh-llm-pi-ai+0.1.0-rc.8.patch b/patches/@deepseek-ai+dsh-llm-pi-ai+0.1.1-rc.1.patch similarity index 100% rename from patches/@deepseek-ai+dsh-llm-pi-ai+0.1.0-rc.8.patch rename to patches/@deepseek-ai+dsh-llm-pi-ai+0.1.1-rc.1.patch diff --git a/src/main/index.ts b/src/main/index.ts index ac510712..7832c5c6 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -944,7 +944,9 @@ async function bootstrap(): Promise { logPath: join(app.getPath('logs'), 'harness.log'), launchProcess: (executablePath, args, options) => process.platform === 'darwin' - ? launchDisclaimedUtilityProcess(utilityProcess, args, options) + ? launchDisclaimedUtilityProcess(utilityProcess, args, options, { + disclaim: !developmentBuild + }) : spawn(executablePath, args, options), onChanged: (snapshot) => { if (snapshot.phase === 'ready' && snapshot.url) { diff --git a/src/main/runtime/disclaimed-utility-process.ts b/src/main/runtime/disclaimed-utility-process.ts index c72d0856..4b8a8759 100644 --- a/src/main/runtime/disclaimed-utility-process.ts +++ b/src/main/runtime/disclaimed-utility-process.ts @@ -16,7 +16,8 @@ export interface DisclaimedUtilityProcessSpec { export function buildDisclaimedUtilityProcessSpec( nodeArguments: readonly string[], - spawnOptions: SpawnOptionsWithoutStdio + spawnOptions: SpawnOptionsWithoutStdio, + utilityProcessOptions?: { disclaim?: boolean } ): DisclaimedUtilityProcessSpec { const [internalLoaderFlag, modulePath, ...args] = nodeArguments if (internalLoaderFlag !== '--expose-internals' || !modulePath) { @@ -38,8 +39,8 @@ export function buildDisclaimedUtilityProcessSpec( stdio: 'pipe', serviceName: 'DSH Harness', // Harness loads user-installed plugins and can launch third-party tools. - // Keep their TCC requests out of DSH Desktop's responsibility chain. - disclaim: true + // Keep their TCC requests out of DSH Desktop's responsibility chain in production. + disclaim: utilityProcessOptions?.disclaim ?? true } } } @@ -47,9 +48,14 @@ export function buildDisclaimedUtilityProcessSpec( export function launchDisclaimedUtilityProcess( launcher: UtilityProcessLauncher, nodeArguments: readonly string[], - spawnOptions: SpawnOptionsWithoutStdio + spawnOptions: SpawnOptionsWithoutStdio, + utilityProcessOptions?: { disclaim?: boolean } ): HarnessChildProcess { - const spec = buildDisclaimedUtilityProcessSpec(nodeArguments, spawnOptions) + const spec = buildDisclaimedUtilityProcessSpec( + nodeArguments, + spawnOptions, + utilityProcessOptions + ) return new UtilityProcessAdapter( launcher.fork(spec.modulePath, spec.args, spec.options) ) diff --git a/test/branding-patch.test.ts b/test/branding-patch.test.ts index ae8613cb..9189e8ec 100644 --- a/test/branding-patch.test.ts +++ b/test/branding-patch.test.ts @@ -1,6 +1,7 @@ import { readFile } from 'node:fs/promises' import path from 'node:path' import { describe, expect, it } from 'vitest' +import { patchPath } from './patch-path' const projectRoot = path.resolve(import.meta.dirname, '..') @@ -25,7 +26,7 @@ describe('DSH Desktop sidebar branding', () => { it('pairs the DSH logo with the original Harness wordmark in the expanded sidebar', async () => { const patch = await readFile( - path.join(projectRoot, 'patches', '@deepseek-ai+dsh-client-ui-sidebar+0.1.0-rc.8.patch'), + patchPath('@deepseek-ai/dsh-client-ui-sidebar'), 'utf8' ) @@ -50,7 +51,7 @@ describe('DSH Desktop sidebar branding', () => { it('uses an 80px macOS rail that clears the traffic lights', async () => { const patch = await readFile( - path.join(projectRoot, 'patches', '@deepseek-ai+dsh-client-ui-layout+0.1.0-rc.8.patch'), + patchPath('@deepseek-ai/dsh-client-ui-layout'), 'utf8' ) @@ -60,7 +61,7 @@ describe('DSH Desktop sidebar branding', () => { it('provides a sidebar phone entry that follows expanded and connected state', async () => { const patch = await readFile( - path.join(projectRoot, 'patches', '@deepseek-ai+dsh-client-ui-sidebar+0.1.0-rc.8.patch'), + patchPath('@deepseek-ai/dsh-client-ui-sidebar'), 'utf8' ) const preload = await readFile(path.join(projectRoot, 'src', 'preload', 'index.ts'), 'utf8') diff --git a/test/model-picker-patch.test.ts b/test/model-picker-patch.test.ts index d838ea03..45cbe6b0 100644 --- a/test/model-picker-patch.test.ts +++ b/test/model-picker-patch.test.ts @@ -57,6 +57,16 @@ describe('DSH Desktop model image-input declarations', () => { expect(client).toContain('function ModelImageInputToggle(props)') expect(client).toContain('field: "inputModalities"') expect(client).toContain('field: "input"') + expect(client.match(/compact: true/g)).toHaveLength(2) + expect(client).toContain('dshModelModalityToggleCompact') + expect(client).toContain( + '"data-tooltip": props.compact ? `${props.t("modelImageInput")}: ${props.t("modelImageInputHint")}`' + ) + expect(client).toContain('.dshModelModalityToggleCompact:hover:after') + expect(client).toContain('.dshModelModalityToggleCompact:focus-within:after') + expect(client).toContain( + 'children: props.t(props.compact ? "modelImageInputShort" : "modelImageInput")' + ) expect(client).toContain('return enabled ? ["text", "image"] : ["text"]') }) @@ -64,8 +74,10 @@ describe('DSH Desktop model image-input declarations', () => { const client = await readFile(settingsModelsClient, 'utf8') expect(client).toContain('modelImageInput: "Image input"') + expect(client).toContain('modelImageInputShort: "Vision"') expect(client).toContain('the endpoint must support them') expect(client).toContain('modelImageInput: "支持图片输入"') + expect(client).toContain('modelImageInputShort: "视觉"') expect(client).toContain('请确认接口实际支持') }) diff --git a/test/runtime.test.ts b/test/runtime.test.ts index 2870eb53..7db8e1ff 100644 --- a/test/runtime.test.ts +++ b/test/runtime.test.ts @@ -152,6 +152,11 @@ describe('Harness launch contract', () => { disclaim: true } }) + + expect( + buildDisclaimedUtilityProcessSpec(nodeArguments, spawnOptions, { disclaim: false }).options + .disclaim + ).toBe(false) }) it('rejects an unexpected macOS Harness argument layout', () => {