dsh-plugin 2.0.3 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.en.md +2 -0
  2. package/README.md +2 -0
  3. package/client/client.js +388 -335
  4. package/client/client.js.map +1 -1
  5. package/lib/http/catalog.js +22 -3
  6. package/lib/http/diagnostics.js +36 -9
  7. package/lib/services/install/task-queue.js +6 -1
  8. package/lib/services/probe.js +10 -5
  9. package/lib/services/profile/profile.js +14 -0
  10. package/lib/types/services/install/install-types.d.ts +3 -1
  11. package/lib/types/services/probe.d.ts +2 -1
  12. package/lib/types/services/profile/profile.d.ts +3 -0
  13. package/package.json +1 -1
  14. package/src/client/components/PluginHubSection.tsx +6 -1
  15. package/src/client/components/catalog/CatalogList.tsx +5 -1
  16. package/src/client/components/layout/SectionTabs.tsx +2 -1
  17. package/src/client/components/modals/NotificationsModal.tsx +4 -0
  18. package/src/client/components/modals/modals.tsx +11 -2
  19. package/src/client/components/views/MarketView.tsx +1 -0
  20. package/src/client/data/catalog.ts +9 -7
  21. package/src/client/hooks/useCatalog.ts +10 -4
  22. package/src/client/hooks/useTaskQueue.ts +14 -7
  23. package/src/client/locales.ts +18 -4
  24. package/src/client/logic/failures.ts +18 -4
  25. package/src/client/styles/Modal.module.css +9 -0
  26. package/src/client/styles/SectionTabs.module.css +18 -0
  27. package/src/server/http/catalog.ts +24 -3
  28. package/src/server/http/diagnostics.ts +36 -10
  29. package/src/server/services/install/install-types.ts +3 -1
  30. package/src/server/services/install/task-queue.ts +6 -1
  31. package/src/server/services/probe.ts +10 -5
  32. package/src/server/services/profile/profile.ts +15 -0
package/client/client.js CHANGED
@@ -31,9 +31,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
31
31
  fork: "Fork",
32
32
  loading: "正在加载插件数据…",
33
33
  failed: "插件数据加载失败",
34
- failedDescNoProxy: "你的网络似乎不通,无法获取插件目录数据。请检查网络连接后重试;或点击右上角按钮在浏览器中打开插件市场。",
35
- failedDescProxy: "你的网络似乎不通,或设置里的 HTTP 代理地址不可达,无法获取插件目录数据。请检查代理设置与网络连接后重试;或点击右上角按钮在浏览器中打开插件市场。",
34
+ failedDescNoProxy: "无法获取插件目录数据(有数 MB)。网络较慢时首次加载可能超时,可重试或点「强制刷新」跳过本地缓存重新下载;加载成功后会缓存 1 小时。若持续失败,请点「网络诊断」确认目录站点可达。",
35
+ failedDescProxy: "无法获取插件目录数据(有数 MB)。网络较慢,或设置里的 HTTP 代理不可达/链路抖动时,首次加载可能超时;可重试或点「强制刷新」跳过缓存重新下载。加载成功后会缓存 1 小时。",
36
36
  retry: "重试",
37
+ forceReload: "强制刷新",
38
+ forceReloadHint: "跳过本地缓存的插件目录,重新从服务器下载(缓存异常或弱网重试时用)",
37
39
  install: "安装",
38
40
  cliOnlyHint: "此插件的安装需要在 dsh 终端里完成(网页端无法代跑它所需的构建或装配步骤),请复制上方命令到终端执行",
39
41
  manualInstallOnlyHint: "此插件需要你在 dsh 终端手动安装:网页端的一键安装替代不了终端里的构建与装配步骤。请复制上方命令到终端执行(Windows 用 Git Bash 或 PowerShell,macOS/Linux 用终端),完整步骤见作者仓库的安装说明。",
@@ -301,6 +303,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
301
303
  failGitMissingHint: "系统找不到 git 命令(Git 未安装或未加入系统 PATH),无法从 GitHub 源安装插件。请先安装 Git(如 git-scm.com/downloads)或把 git 加入 PATH,重启 DSH 后重试。这不是插件本身的问题。",
302
304
  failPnpmMissingHint: "安装器找到了 dsh,但系统里没有 pnpm 命令(dsh 用它来管理 profile 插件)。请先安装 pnpm(如 npm install -g pnpm),确认 pnpm 已加入 PATH 后重试。这不是插件本身的问题。",
303
305
  failNpmMissingHint: "系统找不到 npm 命令(npm 未安装或未加入系统 PATH),无法执行全局安装。请先安装 Node.js(自带 npm),确认 npm 已加入 PATH 后重试。这不是插件本身的问题。",
306
+ failBuildToolchainHint: "这个插件依赖需要在本机编译的原生模块,但机器上缺少可用的编译工具链。请按系统安装后重试:Windows 安装 Visual Studio Build Tools(含「使用 C++ 的桌面开发」);macOS 执行 xcode-select --install;Linux 安装 build-essential、python3 与 make。若装好工具链后仍然失败,再向插件作者反馈,请其提供预构建产物。",
307
+ bundleDeselectedHint: "注意:插件市场在当前 profile 的 bundle 列表中被取消勾选,重启宿主后它不会出现。请到「设置 → 插件」重新勾选 dsh-plugin。",
304
308
  failPnpmStoreHint: "安装器调用 pnpm 时报「store 位置不匹配」(ERR_PNPM_UNEXPECTED_STORE):你的 profile 目录里旧插件依赖是用另一个大版本的 pnpm 生成的,当前 pnpm 出于安全不认旧目录,导致任何插件装进该 profile 都会失败。请删除该 profile 目录下的 node_modules 与 pnpm-lock.yaml(可先到「系统日志」或 ~/.dsh/profiles/<profile>/hub.log 查看完整报错),再重新安装。这不是插件本身的问题。",
305
309
  failPnpmUnusedPatchHint: "安装器调用 pnpm 时报「有些补丁没有被使用」(ERR_PNPM_UNUSED_PATCH):你的 profile 里留着一条指向旧版本 dsh-plugin 的补丁声明(例如 dsh-plugin@1.4.2),而本次安装解析到的版本已经不是它,pnpm 出于安全直接中止整次安装,因此任何插件都装不进来。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)的 pnpm-workspace.yaml(pnpm 11 及以上)或 package.json 的 pnpm.patchedDependencies(pnpm 10)里删除该 dsh-plugin 补丁条目后重试。",
306
310
  failPnpmMissingDepTarget: "{pkg} 在 npm registry 上不存在(404)",
@@ -321,6 +325,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
321
325
  failReason_pnpmMissing: "安装器通过 pnpm 安装插件,但机器上找不到 pnpm。",
322
326
  failKind_npmMissing: "本机缺少 npm",
323
327
  failReason_npmMissing: "安装流程需要 npm,但机器上找不到它。",
328
+ failKind_buildToolchainMissing: "本机缺少原生构建工具链",
329
+ failReason_buildToolchainMissing: "这个插件依赖需要在本机编译的原生模块,但找不到可用的编译器。",
324
330
  failKind_pnpmStore: "pnpm store 版本不匹配",
325
331
  failReason_pnpmStore: "profile 里的依赖由另一大版本的 pnpm 生成,当前 pnpm 不认。",
326
332
  failKind_pnpmWorkspace: "workspace 根校验阻止了安装",
@@ -370,6 +376,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
370
376
  failFsUnavailableHint: "安装过程中 pnpm 无法把文件写进本机磁盘(这类报错与装哪个插件无关,任何插件装在同一目录都会失败,不是插件本身的问题)。请按报错对号入座:① 磁盘空间不足(ENOSPC / no space left on device,Windows 为 os error 112)——请清理 profile 所在磁盘的剩余空间后重试;② 磁盘或挂载点只读、带写保护(EROFS / read-only file system,Windows 为 os error 19)——请确认 profile 目录所在磁盘可写(外接盘/U 盘、带写保护的移动盘或只读挂载的分区都会触发),必要时把插件目录换到系统盘的可写位置;③ 进程可用的文件句柄被耗尽(EMFILE / ENFILE / too many open files)——请关闭占用大量文件的程序并重启 DeepSeek Harness 后重试。",
371
377
  failPnpmWorkspaceHint: "安装器调用 pnpm 时报「不能把依赖装到 workspace 根目录」(ERR_PNPM_ADDING_TO_ROOT):你的 profile 目录被 pnpm 视为 workspace 根目录,而本次安装命令没有声明在根目录操作,pnpm 直接拒绝执行,因此任何插件装进来都会失败。这不是插件本身的问题——可在 profile 目录(~/.dsh/profiles/<profile>)的 .npmrc 里加一行 ignore-workspace-root-check=true 后重试,或把 DeepSeek Harness 升级到最新版再试。",
372
378
  failPnpmTarballIntegrityHint: "pnpm 报 ERR_PNPM_MISSING_TARBALL_INTEGRITY:锁文件中的 tarball 条目没有校验值,无法验证下载的包。先查看完整日志,完全退出 DeepSeek Harness,并检查、备份当前 profile 的 package.json、pnpm-lock.yaml 和 pnpm-workspace.yaml。确认依赖来源后,将 pnpm-lock.yaml 改名保留,再通过同一 DSH 安装器安装适配当前宿主版本的插件,重新生成锁文件。重建会重新解析 profile 依赖,请核对新旧版本;保持完整性校验开启。",
379
+ failPnpmTarballMismatchHint: "pnpm 报 ERR_PNPM_TARBALL_INTEGRITY:profile 里某个从 GitHub 分支安装的依赖(例如 github:owner/repo#main)在远端更新了,tarball 内容变了,但 pnpm-lock.yaml 里存的还是旧校验和,于是整个 profile 的依赖安装都会卡在它上面。处理:打开 ~/.dsh/profiles/<profile>/pnpm-lock.yaml,删掉该 GitHub 依赖对应的条目(不确定是哪个就把整份锁文件改名备份),再重新安装;长期做法是把依赖固定到具体 commit(github:owner/repo#<commit>),分支再更新也不会改变校验和。",
373
380
  failPnpmPolicyHint: "安装器调用 pnpm 时被其供应链安全策略拦截——装任何插件都会撞墙,不是插件本身的问题。分两种情况处理:① 提示「Minimum release age」(ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION):包发布还不满 24 小时,pnpm 11 出于安全会拒收这种刚发布的新包。可在 pnpm 配置(pnpm-workspace.yaml)里加 minimumReleaseAge: 0 豁免,或等满 24 小时后重试。② 提示「untrusted origin」(ERR_PNPM_UNTRUSTED_ORIGIN):依赖来源不被本机 pnpm 信任,通常是该 profile 里之前用 github: 或非官方 npm 源装过插件,锁文件记录了不受信任的来源。请删除该 profile 目录下的 node_modules 与 pnpm-lock.yaml 后重新安装(可先到「系统日志」或 ~/.dsh/profiles/<profile>/hub.log 查看完整报错)。",
374
381
  failPnpmReleaseAgeHint: "安装器调用 pnpm 时被其供应链安全策略拦住了,任何插件装进这个 profile 都会先撞上它——与插件本身无关。原因是这个包发布还不满 24 小时,pnpm 11 出于安全会拒收刚发布的新包,这段时间内该 profile 的安装与卸载都会被拦下。可重试时间:{time}(即该包发布满 24 小时后)。如确需立刻安装,可在 profile 目录(~/.dsh/profiles/<profile>)的 pnpm-workspace.yaml 里加 minimumReleaseAge: 0 豁免,但这会放宽整个 profile 的供应链保护。",
375
382
  installChannelNpm: "NPM 包",
@@ -429,9 +436,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
429
436
  fork: "Fork",
430
437
  loading: "Loading plugin data…",
431
438
  failed: "Failed to load plugin data",
432
- failedDescNoProxy: "Your network seems unreachable, so the plugin catalog could not be loaded. Please check your connection and retry; or open the hub in your browser with the button above.",
433
- failedDescProxy: "Your network seems unreachable, or the HTTP proxy in Settings is unreachable, so the plugin catalog could not be loaded. Please check the proxy address and your connection, then retry; or open the hub in your browser with the button above.",
439
+ failedDescNoProxy: "The plugin catalog could not be loaded (a few MB). The first load can time out on a slow connection — retry, or use \"Force refresh\" to skip the local cache and download it again. Once it succeeds the catalog is cached for an hour. If it keeps failing, run the network diagnostic.",
440
+ failedDescProxy: "The plugin catalog could not be loaded (a few MB). A slow connection, or an unreachable/unstable HTTP proxy in Settings, can make the first load time out — retry, or use \"Force refresh\" to skip the cache. Once it succeeds the catalog is cached for an hour.",
434
441
  retry: "Retry",
442
+ forceReload: "Force refresh",
443
+ forceReloadHint: "Skip the cached catalog and download it again from the server (use when the cache looks wrong or on a slow network)",
435
444
  install: "Install",
436
445
  cliOnlyHint: "This plugin has to be installed in your dsh terminal (the web UI cannot run the build or assembly steps it needs) — copy the command above and run it there",
437
446
  manualInstallOnlyHint: "This plugin has to be installed by hand in your dsh terminal — one-click install from the web UI cannot run the build and assembly steps it needs. Copy the command above and run it there (Git Bash or PowerShell on Windows, Terminal on macOS/Linux); the author's repo has the full steps.",
@@ -702,6 +711,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
702
711
  failGitMissingHint: "The git command could not be found (Git is not installed or not on the system PATH), so GitHub-source plugins cannot be installed. Please install Git (e.g. from git-scm.com/downloads) or add git to your PATH, restart DSH, then retry. This is not a problem with the plugin itself.",
703
712
  failPnpmMissingHint: "The installer found dsh, but pnpm is missing on this machine (dsh uses it to manage profile plugins). Please install pnpm first (e.g. npm install -g pnpm), make sure it is on your PATH, then retry. This is not a problem with the plugin itself.",
704
713
  failNpmMissingHint: "The npm command could not be found (npm is not installed or not on the system PATH), so a global install cannot run. Please install Node.js (which bundles npm), make sure npm is on your PATH, then retry. This is not a problem with the plugin itself.",
714
+ failBuildToolchainHint: "This plugin depends on a native module that must be compiled on your machine, but no usable build toolchain is available. Install one and retry: on Windows install Visual Studio Build Tools with the \"Desktop development with C++\" workload; on macOS run xcode-select --install; on Linux install build-essential, python3 and make. If it still fails after the toolchain is installed, report it to the plugin author and ask for a prebuilt package.",
715
+ bundleDeselectedHint: "Note: the marketplace is unchecked in this profile's bundle list, so it will not appear after the host restarts. Re-check dsh-plugin under Settings → Plugins.",
705
716
  failPnpmStoreHint: "pnpm reported an unexpected store location (ERR_PNPM_UNEXPECTED_STORE): the profile directory was previously set up with a different major version of pnpm, and the current pnpm refuses to reuse it — no plugin can be installed into that profile. Delete node_modules and pnpm-lock.yaml under the profile directory (see System Logs or ~/.dsh/profiles/<profile>/hub.log for the full output), then reinstall. This is not a problem with the plugin itself.",
706
717
  failPnpmUnusedPatchHint: "pnpm reported that some patches were not used (ERR_PNPM_UNUSED_PATCH): your profile still holds a patch entry for an older dsh-plugin version (for example dsh-plugin@1.4.2), while this install resolved a different version, so pnpm aborts the whole install for safety — no plugin can be installed into that profile. This is not a problem with the plugin itself. Remove that dsh-plugin patch entry from pnpm-workspace.yaml (pnpm 11+) or from pnpm.patchedDependencies in package.json (pnpm 10) inside the profile directory (~/.dsh/profiles/<profile>), then retry.",
707
718
  failPnpmMissingDepTarget: "{pkg} was not found on the npm registry (404)",
@@ -722,6 +733,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
722
733
  failReason_pnpmMissing: "The installer uses pnpm to add plugins, but pnpm cannot be found.",
723
734
  failKind_npmMissing: "npm is not installed on this machine",
724
735
  failReason_npmMissing: "The install flow needs npm, but it cannot be found.",
736
+ failKind_buildToolchainMissing: "native build toolchain is missing",
737
+ failReason_buildToolchainMissing: "A dependency of this plugin must be compiled locally, but no usable compiler was found.",
725
738
  failKind_pnpmStore: "pnpm store version mismatch",
726
739
  failReason_pnpmStore: "The profile dependencies were written by a different pnpm major, which the current pnpm does not accept.",
727
740
  failKind_pnpmWorkspace: "workspace-root check blocked the install",
@@ -771,6 +784,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
771
784
  failFsUnavailableHint: "During install, pnpm could not write files to the local disk — this has nothing to do with which plugin you are installing: any plugin installed into the same directory would fail the same way, so it is not a problem with the plugin itself. Match the error you see: ① Out of space (ENOSPC / no space left on device, os error 112 on Windows) — free up space on the drive that holds the profile and retry. ② Read-only or write-protected volume (EROFS / read-only file system, os error 19 on Windows) — make sure the drive holding the profile directory is writable (external or USB drives, write-protected media, and read-only mounts all trigger this); move the plugin directory to a writable location on the system drive if needed. ③ File handles exhausted (EMFILE / ENFILE / too many open files) — close programs that hold many files open, restart DeepSeek Harness, then retry.",
772
785
  failPnpmWorkspaceHint: "pnpm refused to add the dependency to the workspace root (ERR_PNPM_ADDING_TO_ROOT): the profile directory is treated as a pnpm workspace root, and this install command did not declare that it operates at the root, so pnpm rejected it outright — no plugin can be installed into that profile. This is not a problem with the plugin itself. Add `ignore-workspace-root-check=true` to the `.npmrc` inside the profile directory (~/.dsh/profiles/<profile>) and retry, or upgrade DeepSeek Harness and try again.",
773
786
  failPnpmTarballIntegrityHint: "pnpm reported ERR_PNPM_MISSING_TARBALL_INTEGRITY: a tarball entry in the lockfile has no checksum to verify the downloaded package. Read the full log, fully quit DeepSeek Harness, and inspect and back up package.json, pnpm-lock.yaml and pnpm-workspace.yaml in the affected profile. Once the dependency sources are verified, rename pnpm-lock.yaml to preserve it, then use the same DSH installer to install a plugin version compatible with the host and regenerate the lockfile. This resolves profile dependencies again: compare the old and new versions, and keep integrity checks enabled.",
787
+ failPnpmTarballMismatchHint: "pnpm reported ERR_PNPM_TARBALL_INTEGRITY: a dependency installed from a GitHub branch (for example github:owner/repo#main) changed upstream, so the tarball content no longer matches the checksum stored in pnpm-lock.yaml — and every install into that profile now stops on it. To fix: open ~/.dsh/profiles/<profile>/pnpm-lock.yaml, remove the entry for that GitHub dependency (or rename the whole lockfile as a backup if unsure which one it is), then reinstall. Long term, pin the dependency to a commit (github:owner/repo#<commit>) so branch updates no longer change its checksum.",
774
788
  failPnpmPolicyHint: "The installer was blocked by pnpm supply-chain security policy — every plugin install would hit the same wall, so this is not a problem with the plugin itself. Two cases: ① \"Minimum release age\" (ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION): the package was published less than 24 hours ago, and pnpm 11 refuses freshly-published packages for safety. Add minimumReleaseAge: 0 to your pnpm config (pnpm-workspace.yaml) to opt out, or wait until the 24 hours have passed and retry. ② \"untrusted origin\" (ERR_PNPM_UNTRUSTED_ORIGIN): a dependency source is not trusted by this machine, usually because plugins were previously installed via github: or a non-official npm registry, so the lockfile records an untrusted source. Delete node_modules and pnpm-lock.yaml under the profile directory (see System Logs or ~/.dsh/profiles/<profile>/hub.log for the full output), then reinstall.",
775
789
  failPnpmReleaseAgeHint: "The installer was blocked by pnpm supply-chain security policy, and every plugin installed into this profile would hit the same wall — this is not a problem with the plugin itself. The package was published less than 24 hours ago, and pnpm 11 refuses freshly-published packages for safety, so both installs and removals are blocked for this profile in the meantime. Retry after: {time} (i.e. 24 hours after the package was published). If you must install right now, add minimumReleaseAge: 0 to pnpm-workspace.yaml inside the profile directory (~/.dsh/profiles/<profile>) to opt out, but that loosens supply-chain protection for the whole profile.",
776
790
  installChannelNpm: "NPM package",
@@ -828,46 +842,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
828
842
  css: css$11
829
843
  });
830
844
  var Header_module_css_default = {
831
- "segBtn": "qikqja_segBtn",
832
- "adBadge": "qikqja_adBadge",
833
- "langBtn": "qikqja_langBtn",
834
- "tabActive": "qikqja_tabActive",
835
- "controls": "qikqja_controls",
836
- "adText": "qikqja_adText",
837
- "tabs": "qikqja_tabs",
838
- "logoIcon": "qikqja_logoIcon",
839
845
  "brandTitle": "qikqja_brandTitle",
840
- "segGroup": "qikqja_segGroup",
841
- "segBtnActive": "qikqja_segBtnActive",
846
+ "root": "qikqja_root",
847
+ "controls": "qikqja_controls",
848
+ "headerTitleRow": "qikqja_headerTitleRow",
842
849
  "resultCount": "qikqja_resultCount",
843
- "tabsRow": "qikqja_tabsRow",
844
- "tabCount": "qikqja_tabCount",
845
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
846
- "title": "qikqja_title",
847
- "resultSeg": "qikqja_resultSeg",
850
+ "version": "qikqja_version",
851
+ "adBadge": "qikqja_adBadge",
852
+ "searchRow": "qikqja_searchRow",
853
+ "adArrow": "qikqja_adArrow",
848
854
  "taglineLink": "qikqja_taglineLink",
849
- "adBanner": "qikqja_adBanner",
850
- "versionBtn": "qikqja_versionBtn",
851
- "root": "qikqja_root",
852
- "sortGroup": "qikqja_sortGroup",
855
+ "search": "qikqja_search",
856
+ "tab": "qikqja_tab",
853
857
  "githubIcon": "qikqja_githubIcon",
858
+ "sortGroup": "qikqja_sortGroup",
859
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
860
+ "adText": "qikqja_adText",
861
+ "tabActive": "qikqja_tabActive",
862
+ "resultSeg": "qikqja_resultSeg",
854
863
  "githubLink": "qikqja_githubLink",
855
- "searchRow": "qikqja_searchRow",
856
- "search": "qikqja_search",
857
- "tagline": "qikqja_tagline",
858
- "version": "qikqja_version",
864
+ "versionBtn": "qikqja_versionBtn",
865
+ "tabsRow": "qikqja_tabsRow",
859
866
  "aboutBtn": "qikqja_aboutBtn",
860
- "header": "qikqja_header",
861
- "headerRight": "qikqja_headerRight",
862
- "adArrow": "qikqja_adArrow",
867
+ "logoIcon": "qikqja_logoIcon",
868
+ "langBtn": "qikqja_langBtn",
869
+ "tagline": "qikqja_tagline",
870
+ "segBtn": "qikqja_segBtn",
871
+ "segGroup": "qikqja_segGroup",
872
+ "tabs": "qikqja_tabs",
873
+ "copyIcon": "qikqja_copyIcon",
874
+ "tabCount": "qikqja_tabCount",
863
875
  "segLabel": "qikqja_segLabel",
864
- "headerTitleRow": "qikqja_headerTitleRow",
865
- "tab": "qikqja_tab",
866
- "copyIcon": "qikqja_copyIcon"
876
+ "headerRight": "qikqja_headerRight",
877
+ "header": "qikqja_header",
878
+ "adBanner": "qikqja_adBanner",
879
+ "segBtnActive": "qikqja_segBtnActive",
880
+ "title": "qikqja_title"
867
881
  };
868
882
  //#endregion
869
883
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
870
- const css$10 = ".BiQ1zG_overlay{z-index:998;-webkit-user-select:none;user-select:none;background:#00000061;justify-content:center;align-items:center;animation:.16s ease-out BiQ1zG_overlayIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.BiQ1zG_modal,.BiQ1zG_errorModal{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:10px;flex-direction:column;gap:10px;width:540px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:14px 16px;animation:.18s ease-out BiQ1zG_modalIn;display:flex;box-shadow:0 12px 40px #0000003d}.BiQ1zG_errorModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:640px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:760px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:820px;max-width:calc(100vw - 48px);height:min(540px,100vh - 64px)}.BiQ1zG_modalHead{flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;display:flex}.BiQ1zG_modalTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_modalTitleBusy{color:var(--hub-brand)}.BiQ1zG_modalTitleQueued{color:var(--hub-warning)}.BiQ1zG_modalClose{width:24px;height:24px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:inline-flex}.BiQ1zG_modalClose:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalCloseIcon{flex-shrink:0;width:14px;height:14px}.BiQ1zG_confirmIconWrap{justify-content:center;padding:2px 0 6px;display:flex}.BiQ1zG_confirmIcon{background:var(--hub-brand);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex;box-shadow:0 4px 12px #4f6ef747}.BiQ1zG_confirmIconDanger{background:var(--hub-danger);box-shadow:0 4px 12px #d1242f4d}.BiQ1zG_dangerConfirm{color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:background-color .12s,border-color .12s}.BiQ1zG_dangerConfirm:hover:not(:disabled){background:var(--hub-danger-hover);border-color:var(--hub-danger-hover)}.BiQ1zG_dangerConfirm:disabled{opacity:.55;cursor:default}.BiQ1zG_confirmPrimary{color:#fff;background:var(--hub-brand);border:1px solid var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:filter .12s}.BiQ1zG_confirmPrimary:hover:not(:disabled){filter:brightness(1.08)}.BiQ1zG_confirmPrimary:disabled{opacity:.55;cursor:default}.BiQ1zG_modalDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_trustHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_cliOnlyHint{color:var(--hub-text-secondary);background:var(--hub-bg-hover);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_failedCopyHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_modalRow{align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.BiQ1zG_modalLabel{min-width:64px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_modalValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);font-weight:500;overflow:hidden}.BiQ1zG_modalLink{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex;overflow:hidden}.BiQ1zG_modalLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_linkIcon{flex-shrink:0}.BiQ1zG_modalCmd{color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 6px 6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_modalCmd:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_modalCmdText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.BiQ1zG_modalCmdCopy{color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-family:inherit;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_modalCmdCopy:hover{color:var(--hub-brand-hover);background:var(--hub-bg-2)}.BiQ1zG_modalActions{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.BiQ1zG_modalBody{flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex;overflow-y:auto}.BiQ1zG_toast{z-index:1000;background:var(--hub-btn-fill);color:var(--hub-text-on-fill);pointer-events:none;white-space:nowrap;border:none;border-radius:8px;padding:10px 16px;font-size:12px;font-weight:500;line-height:18px;animation:.22s ease-out BiQ1zG_toastIn;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 6px 24px #00000047}@keyframes BiQ1zG_toastIn{0%{opacity:0;transform:translate(-50%,-44%)}to{opacity:1;transform:translate(-50%,-50%)}}.BiQ1zG_toastFail{background:var(--hub-danger);color:#fff;border-color:#ffffff3d}.BiQ1zG_queueSection{flex-direction:column;gap:6px;display:flex}.BiQ1zG_queueSectionTitle{color:var(--hub-text-secondary);padding:4px 2px 0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_pendingRowStatus{color:var(--hub-warn);flex-shrink:0;font-weight:500}.BiQ1zG_pendingRowActions{flex-shrink:0;gap:8px;margin-left:auto;display:flex}.BiQ1zG_queueRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;gap:5px;padding:8px 10px;font-size:12px;line-height:18px;transition:background .12s;display:flex}.BiQ1zG_queueRow:hover{background:var(--hub-brand-tint)}.BiQ1zG_queueRowHead{align-items:center;gap:10px;display:flex}.BiQ1zG_queueRowTarget{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.BiQ1zG_queueRowDesc{color:var(--hub-text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.BiQ1zG_queueRowBody{align-items:center;gap:8px;display:flex}.BiQ1zG_queueRowStatus{color:var(--hub-brand);flex-shrink:0;font-weight:500}.BiQ1zG_queueRowTrack{flex:1;min-width:0}.BiQ1zG_queueRowPct{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}.BiQ1zG_stripCancel{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:12px;line-height:18px;transition:background .12s,color .12s}.BiQ1zG_stripCancel:hover{background:var(--hub-danger-tint);color:var(--hub-danger-text)}.BiQ1zG_stripCancel:disabled{opacity:.45;cursor:default}.BiQ1zG_queuedHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:5px 10px;font-size:12px;line-height:18px}.BiQ1zG_errorTitle{color:var(--hub-danger-text);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_errorBox{border:1px solid var(--hub-danger-border);background:var(--hub-danger-tint-weak);max-height:72px;color:var(--hub-text-primary);white-space:pre-wrap;word-break:break-word;-webkit-user-select:none;user-select:none;border-radius:6px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:17px;overflow:auto}.BiQ1zG_errorCopySoft{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_errorCopySoft:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_errorHint{color:var(--hub-text-tertiary);font-size:12px;line-height:18px}.BiQ1zG_modalCancel,.BiQ1zG_modalCopy{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_modalCancel:hover,.BiQ1zG_modalCopy:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalInstall{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_modalInstall:hover{background:var(--hub-btn-hover)}.BiQ1zG_modalCopy:disabled,.BiQ1zG_modalInstall:disabled,.BiQ1zG_modalCancel:disabled,.BiQ1zG_modalClose:disabled,.BiQ1zG_uninstallConfirm:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_uninstallConfirm{color:#fff;background:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_uninstallConfirm:hover{background:var(--hub-danger-hover)}.BiQ1zG_result{text-align:center;flex-direction:column;align-items:center;gap:5px;padding:10px 0 2px;display:flex}.BiQ1zG_resultCheck{background:var(--hub-success-tint);width:40px;height:40px;color:var(--hub-success);border-radius:50%;justify-content:center;align-items:center;margin-bottom:3px;display:inline-flex}.BiQ1zG_resultCheckIcon{flex-shrink:0;width:20px;height:20px}.BiQ1zG_resultTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_resultDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_resultRestarting{color:var(--hub-text-tertiary);padding:12px 0 6px;font-size:12px;line-height:18px}.BiQ1zG_restartLater{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_restartLater:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_restartNow{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNow:hover{background:var(--hub-btn-hover)}.BiQ1zG_restartNow:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_restartNowWarning{color:#fff;background:var(--hub-warning);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNowWarning:hover{background:var(--hub-warning-hover)}.BiQ1zG_restartNowWarning:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_result .BiQ1zG_modalActions{justify-content:center;gap:10px;margin-top:0;padding:6px 0 2px}.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartLater,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNow,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNowWarning{min-width:100px}.BiQ1zG_progress{margin:10px 0 2px}.BiQ1zG_progressHead{justify-content:flex-end;align-items:center;margin-bottom:3px;display:flex}.BiQ1zG_progressText{color:var(--hub-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:14px}.BiQ1zG_progressTrack{background:var(--hub-border-2);border-radius:2px;height:4px;overflow:hidden}.BiQ1zG_progressFill{background:var(--hub-brand);border-radius:2px;height:100%;transition:width .32s}.BiQ1zG_progressFillFail{background:var(--hub-danger)}@keyframes BiQ1zG_overlayIn{0%{opacity:0}to{opacity:1}}@keyframes BiQ1zG_modalIn{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.BiQ1zG_failList{flex-direction:column;gap:12px;padding-right:2px;display:flex}.BiQ1zG_failRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.BiQ1zG_failHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeList{flex-direction:column;gap:10px;padding-right:2px;display:flex}.BiQ1zG_noticeRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;align-items:stretch;gap:6px;padding:10px 12px;display:flex}.BiQ1zG_noticeRowMain{align-items:center;gap:10px;width:100%;min-width:0;display:flex}.BiQ1zG_noticeBadgeOk,.BiQ1zG_noticeBadgeFail{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;box-shadow:0 2px 6px #0000002e}.BiQ1zG_noticeBadgeOk{background:var(--hub-success)}.BiQ1zG_noticeBadgeFail{background:var(--hub-danger)}.BiQ1zG_noticeBadgeIcon{flex-shrink:0;width:12px;height:12px}.BiQ1zG_noticeMain{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeTextOk{color:var(--hub-success);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeTextFail{color:var(--hub-danger-text);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeFoot{justify-content:flex-end;align-items:center;display:flex}.BiQ1zG_noticeTime{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px;line-height:16px}.BiQ1zG_noticeRemove{width:22px;height:22px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_noticeRemove:hover{color:var(--hub-danger-text);background:var(--hub-danger-tint)}.BiQ1zG_noticeRowOk .BiQ1zG_noticeRemove{margin-left:0}.BiQ1zG_noticeRowOk .BiQ1zG_noticeTime{margin-left:auto}.BiQ1zG_noticeRowUpdate{cursor:pointer;transition:border-color .12s,background .12s}.BiQ1zG_noticeRowUpdate:hover{border-color:var(--hub-brand);background:var(--hub-brand-tint)}.BiQ1zG_noticeVersion{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border);font-variant-numeric:tabular-nums;border-radius:5px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:600;line-height:18px}.BiQ1zG_noticeUpdateGo{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:5px;flex-shrink:0;margin-left:2px;padding:2px 8px;font-size:11px;font-weight:600;line-height:16px;transition:background .12s}.BiQ1zG_noticeUpdateGo:hover{background:var(--hub-brand-hover)}.BiQ1zG_noticeIgnore{color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:5px;flex-shrink:0;margin-left:2px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px;transition:color .12s,border-color .12s,background .12s}.BiQ1zG_noticeIgnore:hover{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKind{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}.BiQ1zG_failKindInstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKindUninstall{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}.BiQ1zG_failRepo{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:18px;text-decoration:none;overflow:hidden}.BiQ1zG_failRepo:hover{text-decoration:none}a.BiQ1zG_failRepo{color:#2f6feb}.BiQ1zG_failRepoLabel{color:var(--hub-text-secondary)}a.BiQ1zG_failRepo:hover .BiQ1zG_failRepoUrl{text-decoration:underline}.BiQ1zG_failCopy{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_failCopy:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_failEmpty{text-align:center;color:var(--hub-text-tertiary);padding:24px 0;font-size:12px;line-height:18px}.BiQ1zG_failClear{color:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_failClear:hover{color:#fff;background:var(--hub-danger)}.BiQ1zG_failBigIssue{box-sizing:border-box;text-align:center;color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;width:100%;margin-top:4px;padding:3px 16px;font-size:13px;font-weight:600;line-height:18px;text-decoration:none;transition:background .12s,border-color .12s,box-shadow .12s;display:block}.BiQ1zG_failBigIssue:hover{background:var(--hub-danger-hover);border-color:var(--hub-danger-hover);box-shadow:0 3px 10px #d1242f59}.BiQ1zG_failKindTitle{text-align:left;color:var(--hub-danger-text);margin-top:10px;font-size:15px;font-weight:700;line-height:22px}.BiQ1zG_failReason{white-space:pre-line;text-align:left;color:var(--hub-text-secondary);margin-top:2px;font-size:12.5px;font-weight:400;line-height:19px}.BiQ1zG_failPrepareHint{white-space:pre-line;text-align:left;color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;margin-bottom:12px;padding:8px 12px;font-size:12px;line-height:18px}.BiQ1zG_failDiagBtn{box-sizing:border-box;text-align:center;width:100%;color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:8px;margin-top:8px;padding:5px 16px;font-size:13px;font-weight:600;line-height:18px;transition:background .12s,box-shadow .12s;display:block}.BiQ1zG_failDiagBtn:hover{background:var(--hub-btn-hover);box-shadow:0 3px 10px #0000001f}.BiQ1zG_failMisjudgeLink{color:var(--hub-text-tertiary);cursor:pointer;margin-top:6px;font-size:12px;line-height:18px;text-decoration:underline;display:inline-block}.BiQ1zG_failMisjudgeLink:hover{color:var(--hub-text-secondary)}.BiQ1zG_failNetworkTarget{word-break:break-all;color:var(--hub-danger);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:13px;font-weight:700;line-height:20px}.BiQ1zG_aboutModal{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_aboutContent{min-height:0;max-height:340px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_aboutContent>:first-child{margin-top:0}.BiQ1zG_aboutContent>:last-child{margin-bottom:0}.BiQ1zG_aboutContent h2,.BiQ1zG_aboutContent h3,.BiQ1zG_aboutContent h4,.BiQ1zG_aboutContent h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_aboutContent h2{font-size:14px}.BiQ1zG_aboutContent p{margin:4px 0}.BiQ1zG_aboutContent ul,.BiQ1zG_aboutContent ol{margin:4px 0;padding-left:18px}.BiQ1zG_aboutContent li{margin:2px 0}.BiQ1zG_aboutContent code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_aboutContent pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_aboutContent pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_aboutContent blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_aboutContent a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_aboutContent a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_aboutContent img{border-radius:8px;max-width:100%;max-height:220px;margin:8px auto;display:block;box-shadow:0 2px 8px #0000001f}.BiQ1zG_aboutContent img[width=\"100\"]{object-fit:contain;width:100px;height:100px;max-height:100px}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:620px;max-width:calc(100vw - 48px)}.BiQ1zG_hubUpdateMeta{flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;line-height:18px;display:flex}.BiQ1zG_hubUpdateMetaItem{color:var(--hub-text-tertiary)}.BiQ1zG_hubUpdateNotes{min-height:0;max-height:300px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_hubUpdateNotes>:first-child{margin-top:0}.BiQ1zG_hubUpdateNotes>:last-child{margin-bottom:0}.BiQ1zG_hubUpdateNotes h2,.BiQ1zG_hubUpdateNotes h3,.BiQ1zG_hubUpdateNotes h4,.BiQ1zG_hubUpdateNotes h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_hubUpdateNotes h2{font-size:14px}.BiQ1zG_hubUpdateNotes p{margin:4px 0}.BiQ1zG_hubUpdateNotes ul,.BiQ1zG_hubUpdateNotes ol{margin:4px 0;padding-left:18px}.BiQ1zG_hubUpdateNotes li{margin:2px 0}.BiQ1zG_hubUpdateNotes code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_hubUpdateNotes pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_hubUpdateNotes pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_hubUpdateNotes blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_hubUpdateNotes a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_hubUpdateNotes a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailModal{width:580px;max-width:calc(100vw - 48px)}.BiQ1zG_detailUpdateHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_detailGrid{flex-direction:column;gap:6px;display:flex}.BiQ1zG_detailRow{align-items:baseline;gap:10px;min-width:0;font-size:12px;line-height:20px;display:flex}.BiQ1zG_detailLabel{text-align:right;width:76px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_detailValue{min-width:0;color:var(--hub-text-primary);flex-wrap:wrap;flex:auto;align-items:baseline;gap:4px 6px;font-weight:500;display:flex}.BiQ1zG_detailMono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.BiQ1zG_detailArrow{color:var(--hub-text-tertiary);align-items:baseline;gap:4px;display:inline-flex}.BiQ1zG_detailDim{color:var(--hub-text-tertiary);font-size:11px;font-weight:400}.BiQ1zG_detailLink{min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.BiQ1zG_detailLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailStars{color:#b45309;font-weight:600}.BiQ1zG_detailPath{min-width:0;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;flex:auto;justify-content:space-between;align-items:center;gap:6px;padding:3px 3px 3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_detailPath:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_detailPathText{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0;overflow:hidden}.BiQ1zG_detailPathActions{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.BiQ1zG_detailPathBtn{width:28px;height:28px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.BiQ1zG_detailPathBtn svg{width:15px;height:15px}.BiQ1zG_detailPathBtn:hover{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.BiQ1zG_detailStatusRunning,.BiQ1zG_detailStatusPending{border-radius:50%;flex-shrink:0;align-self:center;width:8px;height:8px}.BiQ1zG_detailStatusRunning{background:var(--hub-success)}.BiQ1zG_detailStatusPending{background:var(--hub-warning)}.BiQ1zG_detailStatusText{font-weight:500}";
884
+ const css$10 = ".BiQ1zG_overlay{z-index:998;-webkit-user-select:none;user-select:none;background:#00000061;justify-content:center;align-items:center;animation:.16s ease-out BiQ1zG_overlayIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.BiQ1zG_modal,.BiQ1zG_errorModal{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:10px;flex-direction:column;gap:10px;width:540px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:14px 16px;animation:.18s ease-out BiQ1zG_modalIn;display:flex;box-shadow:0 12px 40px #0000003d}.BiQ1zG_errorModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:640px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:760px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:820px;max-width:calc(100vw - 48px);height:min(540px,100vh - 64px)}.BiQ1zG_modalHead{flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;display:flex}.BiQ1zG_modalTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_modalTitleBusy{color:var(--hub-brand)}.BiQ1zG_modalTitleQueued{color:var(--hub-warning)}.BiQ1zG_modalClose{width:24px;height:24px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:inline-flex}.BiQ1zG_modalClose:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalCloseIcon{flex-shrink:0;width:14px;height:14px}.BiQ1zG_confirmIconWrap{justify-content:center;padding:2px 0 6px;display:flex}.BiQ1zG_confirmIcon{background:var(--hub-brand);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex;box-shadow:0 4px 12px #4f6ef747}.BiQ1zG_confirmIconDanger{background:var(--hub-danger);box-shadow:0 4px 12px #d1242f4d}.BiQ1zG_dangerConfirm{color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:background-color .12s,border-color .12s}.BiQ1zG_dangerConfirm:hover:not(:disabled){background:var(--hub-danger-hover);border-color:var(--hub-danger-hover)}.BiQ1zG_dangerConfirm:disabled{opacity:.55;cursor:default}.BiQ1zG_confirmPrimary{color:#fff;background:var(--hub-brand);border:1px solid var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:filter .12s}.BiQ1zG_confirmPrimary:hover:not(:disabled){filter:brightness(1.08)}.BiQ1zG_confirmPrimary:disabled{opacity:.55;cursor:default}.BiQ1zG_modalDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_trustHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_cliOnlyHint{color:var(--hub-text-secondary);background:var(--hub-bg-hover);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_failedCopyHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_modalRow{align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.BiQ1zG_modalLabel{min-width:64px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_modalValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);font-weight:500;overflow:hidden}.BiQ1zG_modalLink{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex;overflow:hidden}.BiQ1zG_modalLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_linkIcon{flex-shrink:0}.BiQ1zG_modalCmd{color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 6px 6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_modalCmd:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_modalCmdText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.BiQ1zG_modalCmdCopy{color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-family:inherit;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_modalCmdCopy:hover{color:var(--hub-brand-hover);background:var(--hub-bg-2)}.BiQ1zG_modalActions{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.BiQ1zG_modalBody{flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex;overflow-y:auto}.BiQ1zG_toast{z-index:1000;background:var(--hub-btn-fill);color:var(--hub-text-on-fill);pointer-events:none;white-space:nowrap;border:none;border-radius:8px;padding:10px 16px;font-size:12px;font-weight:500;line-height:18px;animation:.22s ease-out BiQ1zG_toastIn;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 6px 24px #00000047}@keyframes BiQ1zG_toastIn{0%{opacity:0;transform:translate(-50%,-44%)}to{opacity:1;transform:translate(-50%,-50%)}}.BiQ1zG_toastFail{background:var(--hub-danger);color:#fff;border-color:#ffffff3d}.BiQ1zG_queueSection{flex-direction:column;gap:6px;display:flex}.BiQ1zG_queueSectionTitle{color:var(--hub-text-secondary);padding:4px 2px 0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_pendingRowStatus{color:var(--hub-warn);flex-shrink:0;font-weight:500}.BiQ1zG_pendingRowActions{flex-shrink:0;gap:8px;margin-left:auto;display:flex}.BiQ1zG_queueRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;gap:5px;padding:8px 10px;font-size:12px;line-height:18px;transition:background .12s;display:flex}.BiQ1zG_queueRow:hover{background:var(--hub-brand-tint)}.BiQ1zG_queueRowHead{align-items:center;gap:10px;display:flex}.BiQ1zG_queueRowTarget{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.BiQ1zG_queueRowDesc{color:var(--hub-text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.BiQ1zG_queueRowBody{align-items:center;gap:8px;display:flex}.BiQ1zG_queueRowStatus{color:var(--hub-brand);flex-shrink:0;font-weight:500}.BiQ1zG_queueRowTrack{flex:1;min-width:0}.BiQ1zG_queueRowPct{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}.BiQ1zG_stripCancel{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:12px;line-height:18px;transition:background .12s,color .12s}.BiQ1zG_stripCancel:hover{background:var(--hub-danger-tint);color:var(--hub-danger-text)}.BiQ1zG_stripCancel:disabled{opacity:.45;cursor:default}.BiQ1zG_queuedHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:5px 10px;font-size:12px;line-height:18px}.BiQ1zG_errorTitle{color:var(--hub-danger-text);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_errorBox{border:1px solid var(--hub-danger-border);background:var(--hub-danger-tint-weak);max-height:72px;color:var(--hub-text-primary);white-space:pre-wrap;word-break:break-word;-webkit-user-select:none;user-select:none;border-radius:6px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:17px;overflow:auto}.BiQ1zG_errorCopySoft{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_errorCopySoft:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_errorHint{color:var(--hub-text-tertiary);font-size:12px;line-height:18px}.BiQ1zG_modalCancel,.BiQ1zG_modalCopy{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_modalCancel:hover,.BiQ1zG_modalCopy:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalInstall{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_modalInstall:hover{background:var(--hub-btn-hover)}.BiQ1zG_modalCopy:disabled,.BiQ1zG_modalInstall:disabled,.BiQ1zG_modalCancel:disabled,.BiQ1zG_modalClose:disabled,.BiQ1zG_uninstallConfirm:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_uninstallConfirm{color:#fff;background:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_uninstallConfirm:hover{background:var(--hub-danger-hover)}.BiQ1zG_result{text-align:center;flex-direction:column;align-items:center;gap:5px;padding:10px 0 2px;display:flex}.BiQ1zG_resultCheck{background:var(--hub-success-tint);width:40px;height:40px;color:var(--hub-success);border-radius:50%;justify-content:center;align-items:center;margin-bottom:3px;display:inline-flex}.BiQ1zG_resultCheckIcon{flex-shrink:0;width:20px;height:20px}.BiQ1zG_resultTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_resultDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_resultRestarting{color:var(--hub-text-tertiary);padding:12px 0 6px;font-size:12px;line-height:18px}.BiQ1zG_bundleDeselectedHint{text-align:left;color:var(--hub-warning);padding:12px 0 6px;font-size:12px;line-height:18px}.BiQ1zG_restartLater{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_restartLater:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_restartNow{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNow:hover{background:var(--hub-btn-hover)}.BiQ1zG_restartNow:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_restartNowWarning{color:#fff;background:var(--hub-warning);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:5px 14px;font-size:12px;font-weight:600;line-height:18px;transition:background .12s}.BiQ1zG_restartNowWarning:hover{background:var(--hub-warning-hover)}.BiQ1zG_restartNowWarning:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.BiQ1zG_result .BiQ1zG_modalActions{justify-content:center;gap:10px;margin-top:0;padding:6px 0 2px}.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartLater,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNow,.BiQ1zG_result .BiQ1zG_modalActions .BiQ1zG_restartNowWarning{min-width:100px}.BiQ1zG_progress{margin:10px 0 2px}.BiQ1zG_progressHead{justify-content:flex-end;align-items:center;margin-bottom:3px;display:flex}.BiQ1zG_progressText{color:var(--hub-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:14px}.BiQ1zG_progressTrack{background:var(--hub-border-2);border-radius:2px;height:4px;overflow:hidden}.BiQ1zG_progressFill{background:var(--hub-brand);border-radius:2px;height:100%;transition:width .32s}.BiQ1zG_progressFillFail{background:var(--hub-danger)}@keyframes BiQ1zG_overlayIn{0%{opacity:0}to{opacity:1}}@keyframes BiQ1zG_modalIn{0%{opacity:0;transform:translateY(6px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.BiQ1zG_failList{flex-direction:column;gap:12px;padding-right:2px;display:flex}.BiQ1zG_failRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.BiQ1zG_failHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeList{flex-direction:column;gap:10px;padding-right:2px;display:flex}.BiQ1zG_noticeRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);border-radius:8px;flex-direction:column;align-items:stretch;gap:6px;padding:10px 12px;display:flex}.BiQ1zG_noticeRowMain{align-items:center;gap:10px;width:100%;min-width:0;display:flex}.BiQ1zG_noticeBadgeOk,.BiQ1zG_noticeBadgeFail{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;box-shadow:0 2px 6px #0000002e}.BiQ1zG_noticeBadgeOk{background:var(--hub-success)}.BiQ1zG_noticeBadgeFail{background:var(--hub-danger)}.BiQ1zG_noticeBadgeIcon{flex-shrink:0;width:12px;height:12px}.BiQ1zG_noticeMain{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeHead{align-items:center;gap:8px;min-width:0;display:flex}.BiQ1zG_noticeTextOk{color:var(--hub-success);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeTextFail{color:var(--hub-danger-text);flex-shrink:0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_noticeFoot{justify-content:flex-end;align-items:center;display:flex}.BiQ1zG_noticeTime{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px;line-height:16px}.BiQ1zG_noticeRemove{width:22px;height:22px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_noticeRemove:hover{color:var(--hub-danger-text);background:var(--hub-danger-tint)}.BiQ1zG_noticeRowOk .BiQ1zG_noticeRemove{margin-left:0}.BiQ1zG_noticeRowOk .BiQ1zG_noticeTime{margin-left:auto}.BiQ1zG_noticeRowUpdate{cursor:pointer;transition:border-color .12s,background .12s}.BiQ1zG_noticeRowUpdate:hover{border-color:var(--hub-brand);background:var(--hub-brand-tint)}.BiQ1zG_noticeVersion{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border);font-variant-numeric:tabular-nums;border-radius:5px;flex-shrink:0;padding:0 6px;font-size:11px;font-weight:600;line-height:18px}.BiQ1zG_noticeUpdateGo{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:5px;flex-shrink:0;margin-left:2px;padding:2px 8px;font-size:11px;font-weight:600;line-height:16px;transition:background .12s}.BiQ1zG_noticeUpdateGo:hover{background:var(--hub-brand-hover)}.BiQ1zG_noticeIgnore{color:var(--hub-text-secondary);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border-radius:5px;flex-shrink:0;margin-left:2px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px;transition:color .12s,border-color .12s,background .12s}.BiQ1zG_noticeIgnore:hover{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKind{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;font-weight:500;line-height:16px}.BiQ1zG_failKindInstall{color:var(--hub-danger-text);border-color:var(--hub-danger-border);background:var(--hub-danger-tint)}.BiQ1zG_failKindUninstall{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}.BiQ1zG_failRepo{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:18px;text-decoration:none;overflow:hidden}.BiQ1zG_failRepo:hover{text-decoration:none}a.BiQ1zG_failRepo{color:#2f6feb}.BiQ1zG_failRepoLabel{color:var(--hub-text-secondary)}a.BiQ1zG_failRepo:hover .BiQ1zG_failRepoUrl{text-decoration:underline}.BiQ1zG_failCopy{color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;padding:2px 8px;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_failCopy:hover{color:var(--hub-text-secondary);background:var(--hub-bg-2)}.BiQ1zG_failEmpty{text-align:center;color:var(--hub-text-tertiary);padding:24px 0;font-size:12px;line-height:18px}.BiQ1zG_failClear{color:var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:12px;line-height:18px;transition:color .12s,background .12s}.BiQ1zG_failClear:hover{color:#fff;background:var(--hub-danger)}.BiQ1zG_failBigIssue{box-sizing:border-box;text-align:center;color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;width:100%;margin-top:4px;padding:3px 16px;font-size:13px;font-weight:600;line-height:18px;text-decoration:none;transition:background .12s,border-color .12s,box-shadow .12s;display:block}.BiQ1zG_failBigIssue:hover{background:var(--hub-danger-hover);border-color:var(--hub-danger-hover);box-shadow:0 3px 10px #d1242f59}.BiQ1zG_failKindTitle{text-align:left;color:var(--hub-danger-text);margin-top:10px;font-size:15px;font-weight:700;line-height:22px}.BiQ1zG_failReason{white-space:pre-line;text-align:left;color:var(--hub-text-secondary);margin-top:2px;font-size:12.5px;font-weight:400;line-height:19px}.BiQ1zG_failPrepareHint{white-space:pre-line;text-align:left;color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;margin-bottom:12px;padding:8px 12px;font-size:12px;line-height:18px}.BiQ1zG_failDiagBtn{box-sizing:border-box;text-align:center;width:100%;color:var(--hub-text-on-fill);background:var(--hub-btn-fill);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:8px;margin-top:8px;padding:5px 16px;font-size:13px;font-weight:600;line-height:18px;transition:background .12s,box-shadow .12s;display:block}.BiQ1zG_failDiagBtn:hover{background:var(--hub-btn-hover);box-shadow:0 3px 10px #0000001f}.BiQ1zG_failMisjudgeLink{color:var(--hub-text-tertiary);cursor:pointer;margin-top:6px;font-size:12px;line-height:18px;text-decoration:underline;display:inline-block}.BiQ1zG_failMisjudgeLink:hover{color:var(--hub-text-secondary)}.BiQ1zG_failNetworkTarget{word-break:break-all;color:var(--hub-danger);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:13px;font-weight:700;line-height:20px}.BiQ1zG_aboutModal{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_aboutContent{min-height:0;max-height:340px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_aboutContent>:first-child{margin-top:0}.BiQ1zG_aboutContent>:last-child{margin-bottom:0}.BiQ1zG_aboutContent h2,.BiQ1zG_aboutContent h3,.BiQ1zG_aboutContent h4,.BiQ1zG_aboutContent h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_aboutContent h2{font-size:14px}.BiQ1zG_aboutContent p{margin:4px 0}.BiQ1zG_aboutContent ul,.BiQ1zG_aboutContent ol{margin:4px 0;padding-left:18px}.BiQ1zG_aboutContent li{margin:2px 0}.BiQ1zG_aboutContent code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_aboutContent pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_aboutContent pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_aboutContent blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_aboutContent a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_aboutContent a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_aboutContent img{border-radius:8px;max-width:100%;max-height:220px;margin:8px auto;display:block;box-shadow:0 2px 8px #0000001f}.BiQ1zG_aboutContent img[width=\"100\"]{object-fit:contain;width:100px;height:100px;max-height:100px}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:620px;max-width:calc(100vw - 48px)}.BiQ1zG_hubUpdateMeta{flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;line-height:18px;display:flex}.BiQ1zG_hubUpdateMetaItem{color:var(--hub-text-tertiary)}.BiQ1zG_hubUpdateNotes{min-height:0;max-height:300px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_hubUpdateNotes>:first-child{margin-top:0}.BiQ1zG_hubUpdateNotes>:last-child{margin-bottom:0}.BiQ1zG_hubUpdateNotes h2,.BiQ1zG_hubUpdateNotes h3,.BiQ1zG_hubUpdateNotes h4,.BiQ1zG_hubUpdateNotes h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_hubUpdateNotes h2{font-size:14px}.BiQ1zG_hubUpdateNotes p{margin:4px 0}.BiQ1zG_hubUpdateNotes ul,.BiQ1zG_hubUpdateNotes ol{margin:4px 0;padding-left:18px}.BiQ1zG_hubUpdateNotes li{margin:2px 0}.BiQ1zG_hubUpdateNotes code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_hubUpdateNotes pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_hubUpdateNotes pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_hubUpdateNotes blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_hubUpdateNotes a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_hubUpdateNotes a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailModal{width:580px;max-width:calc(100vw - 48px)}.BiQ1zG_detailUpdateHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_detailGrid{flex-direction:column;gap:6px;display:flex}.BiQ1zG_detailRow{align-items:baseline;gap:10px;min-width:0;font-size:12px;line-height:20px;display:flex}.BiQ1zG_detailLabel{text-align:right;width:76px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_detailValue{min-width:0;color:var(--hub-text-primary);flex-wrap:wrap;flex:auto;align-items:baseline;gap:4px 6px;font-weight:500;display:flex}.BiQ1zG_detailMono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.BiQ1zG_detailArrow{color:var(--hub-text-tertiary);align-items:baseline;gap:4px;display:inline-flex}.BiQ1zG_detailDim{color:var(--hub-text-tertiary);font-size:11px;font-weight:400}.BiQ1zG_detailLink{min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.BiQ1zG_detailLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailStars{color:#b45309;font-weight:600}.BiQ1zG_detailPath{min-width:0;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;flex:auto;justify-content:space-between;align-items:center;gap:6px;padding:3px 3px 3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_detailPath:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_detailPathText{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0;overflow:hidden}.BiQ1zG_detailPathActions{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.BiQ1zG_detailPathBtn{width:28px;height:28px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.BiQ1zG_detailPathBtn svg{width:15px;height:15px}.BiQ1zG_detailPathBtn:hover{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.BiQ1zG_detailStatusRunning,.BiQ1zG_detailStatusPending{border-radius:50%;flex-shrink:0;align-self:center;width:8px;height:8px}.BiQ1zG_detailStatusRunning{background:var(--hub-success)}.BiQ1zG_detailStatusPending{background:var(--hub-warning)}.BiQ1zG_detailStatusText{font-weight:500}";
871
885
  const tagId$10 = "dsh-plugin/Modal.module.css";
872
886
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
873
887
  const tag = document.createElement("style");
@@ -882,141 +896,142 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
882
896
  css: css$10
883
897
  });
884
898
  var Modal_module_css_default = {
885
- "queueRowTrack": "BiQ1zG_queueRowTrack",
886
- "modalBody": "BiQ1zG_modalBody",
887
- "modalIn": "BiQ1zG_modalIn",
888
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
889
- "failRepoUrl": "BiQ1zG_failRepoUrl",
890
- "modalClose": "BiQ1zG_modalClose",
891
- "queueSection": "BiQ1zG_queueSection",
892
- "failPrepareHint": "BiQ1zG_failPrepareHint",
893
- "toastFail": "BiQ1zG_toastFail",
899
+ "progressHead": "BiQ1zG_progressHead",
900
+ "restartNowWarning": "BiQ1zG_restartNowWarning",
901
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
902
+ "queueRowBody": "BiQ1zG_queueRowBody",
894
903
  "modal": "BiQ1zG_modal",
895
- "errorModal": "BiQ1zG_errorModal",
896
- "confirmPrimary": "BiQ1zG_confirmPrimary",
897
- "toastIn": "BiQ1zG_toastIn",
898
- "pendingRowActions": "BiQ1zG_pendingRowActions",
899
- "noticeList": "BiQ1zG_noticeList",
900
- "detailPathText": "BiQ1zG_detailPathText",
901
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
902
- "failCopy": "BiQ1zG_failCopy",
903
- "detailStatusPending": "BiQ1zG_detailStatusPending",
904
- "noticeHead": "BiQ1zG_noticeHead",
905
- "failKindInstall": "BiQ1zG_failKindInstall",
906
- "failDiagBtn": "BiQ1zG_failDiagBtn",
907
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
908
- "resultDesc": "BiQ1zG_resultDesc",
909
- "failClear": "BiQ1zG_failClear",
910
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
911
- "modalRow": "BiQ1zG_modalRow",
904
+ "restartLater": "BiQ1zG_restartLater",
905
+ "modalHead": "BiQ1zG_modalHead",
906
+ "stripCancel": "BiQ1zG_stripCancel",
907
+ "failRow": "BiQ1zG_failRow",
908
+ "detailStars": "BiQ1zG_detailStars",
909
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
910
+ "progressText": "BiQ1zG_progressText",
911
+ "queueRowPct": "BiQ1zG_queueRowPct",
912
912
  "modalLink": "BiQ1zG_modalLink",
913
- "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
914
- "failBigIssue": "BiQ1zG_failBigIssue",
913
+ "aboutContent": "BiQ1zG_aboutContent",
914
+ "modalLabel": "BiQ1zG_modalLabel",
915
+ "queueSection": "BiQ1zG_queueSection",
915
916
  "queueRowDesc": "BiQ1zG_queueRowDesc",
916
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
917
- "detailModal": "BiQ1zG_detailModal",
918
- "modalValue": "BiQ1zG_modalValue",
917
+ "modalInstall": "BiQ1zG_modalInstall",
918
+ "failHead": "BiQ1zG_failHead",
919
+ "noticeList": "BiQ1zG_noticeList",
920
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
921
+ "aboutModal": "BiQ1zG_aboutModal",
922
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
923
+ "failReason": "BiQ1zG_failReason",
919
924
  "modalActions": "BiQ1zG_modalActions",
920
- "detailPathBtn": "BiQ1zG_detailPathBtn",
925
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
926
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
927
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
928
+ "trustHint": "BiQ1zG_trustHint",
929
+ "progressFill": "BiQ1zG_progressFill",
930
+ "queueRowHead": "BiQ1zG_queueRowHead",
921
931
  "errorBox": "BiQ1zG_errorBox",
922
- "modalCmd": "BiQ1zG_modalCmd",
932
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
933
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
934
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
935
+ "noticeTime": "BiQ1zG_noticeTime",
936
+ "detailMono": "BiQ1zG_detailMono",
937
+ "errorHint": "BiQ1zG_errorHint",
938
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
939
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
940
+ "modalRow": "BiQ1zG_modalRow",
941
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
923
942
  "noticeRowOk": "BiQ1zG_noticeRowOk",
924
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
925
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
926
- "queueRowPct": "BiQ1zG_queueRowPct",
927
- "failRepoLabel": "BiQ1zG_failRepoLabel",
928
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
929
- "modalDesc": "BiQ1zG_modalDesc",
930
- "queuedHint": "BiQ1zG_queuedHint",
931
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
932
- "failedCopyHint": "BiQ1zG_failedCopyHint",
933
- "overlayIn": "BiQ1zG_overlayIn",
934
- "queueRowBody": "BiQ1zG_queueRowBody",
935
- "progressHead": "BiQ1zG_progressHead",
936
- "aboutContent": "BiQ1zG_aboutContent",
937
- "detailDim": "BiQ1zG_detailDim",
938
- "trustHint": "BiQ1zG_trustHint",
939
- "failList": "BiQ1zG_failList",
940
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
941
- "modalCopy": "BiQ1zG_modalCopy",
943
+ "resultCheck": "BiQ1zG_resultCheck",
942
944
  "noticeTextFail": "BiQ1zG_noticeTextFail",
943
- "noticeRemove": "BiQ1zG_noticeRemove",
945
+ "detailDim": "BiQ1zG_detailDim",
946
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
947
+ "aboutMeta": "BiQ1zG_aboutMeta",
948
+ "noticeMain": "BiQ1zG_noticeMain",
944
949
  "detailPathActions": "BiQ1zG_detailPathActions",
945
- "logModal": "BiQ1zG_logModal",
946
- "detailStars": "BiQ1zG_detailStars",
947
- "detailValue": "BiQ1zG_detailValue",
948
- "modalHead": "BiQ1zG_modalHead",
949
- "resultCheck": "BiQ1zG_resultCheck",
950
- "errorHint": "BiQ1zG_errorHint",
951
- "restartNowWarning": "BiQ1zG_restartNowWarning",
952
- "noticeVersion": "BiQ1zG_noticeVersion",
953
- "confirmIconWrap": "BiQ1zG_confirmIconWrap",
954
- "noticeRow": "BiQ1zG_noticeRow",
955
- "detailUpdateHint": "BiQ1zG_detailUpdateHint",
956
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
957
- "modalTitle": "BiQ1zG_modalTitle",
958
- "restartLater": "BiQ1zG_restartLater",
959
- "detailArrow": "BiQ1zG_detailArrow",
960
- "failKindUninstall": "BiQ1zG_failKindUninstall",
961
- "failEmpty": "BiQ1zG_failEmpty",
962
- "queueRowTarget": "BiQ1zG_queueRowTarget",
963
- "progressTrack": "BiQ1zG_progressTrack",
964
- "progressFill": "BiQ1zG_progressFill",
965
- "failReason": "BiQ1zG_failReason",
966
- "detailGrid": "BiQ1zG_detailGrid",
967
- "detailPath": "BiQ1zG_detailPath",
968
- "noticeFoot": "BiQ1zG_noticeFoot",
969
950
  "toast": "BiQ1zG_toast",
970
951
  "resultTitle": "BiQ1zG_resultTitle",
971
- "aboutModal": "BiQ1zG_aboutModal",
972
- "failKindTitle": "BiQ1zG_failKindTitle",
973
- "errorTitle": "BiQ1zG_errorTitle",
974
- "detailMono": "BiQ1zG_detailMono",
952
+ "detailRow": "BiQ1zG_detailRow",
975
953
  "progressFillFail": "BiQ1zG_progressFillFail",
976
- "modalCmdText": "BiQ1zG_modalCmdText",
977
- "noticeTextOk": "BiQ1zG_noticeTextOk",
978
- "aboutMeta": "BiQ1zG_aboutMeta",
979
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
980
- "modalInstall": "BiQ1zG_modalInstall",
954
+ "failCopy": "BiQ1zG_failCopy",
955
+ "result": "BiQ1zG_result",
956
+ "modalCmd": "BiQ1zG_modalCmd",
957
+ "restartNow": "BiQ1zG_restartNow",
958
+ "bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
981
959
  "detailLabel": "BiQ1zG_detailLabel",
982
- "noticeMain": "BiQ1zG_noticeMain",
983
- "failRow": "BiQ1zG_failRow",
984
- "noticeIgnore": "BiQ1zG_noticeIgnore",
985
- "queueRowHead": "BiQ1zG_queueRowHead",
986
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
987
- "detailLink": "BiQ1zG_detailLink",
988
960
  "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
989
- "queueRowStatus": "BiQ1zG_queueRowStatus",
990
- "modalCancel": "BiQ1zG_modalCancel",
991
- "failRepo": "BiQ1zG_failRepo",
992
- "progressText": "BiQ1zG_progressText",
961
+ "detailStatusText": "BiQ1zG_detailStatusText",
962
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
963
+ "modalCopy": "BiQ1zG_modalCopy",
964
+ "detailValue": "BiQ1zG_detailValue",
965
+ "modalTitle": "BiQ1zG_modalTitle",
966
+ "progressTrack": "BiQ1zG_progressTrack",
967
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
968
+ "detailPath": "BiQ1zG_detailPath",
969
+ "noticeHead": "BiQ1zG_noticeHead",
970
+ "errorModal": "BiQ1zG_errorModal",
971
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
972
+ "detailLink": "BiQ1zG_detailLink",
973
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
974
+ "queueRow": "BiQ1zG_queueRow",
975
+ "toastIn": "BiQ1zG_toastIn",
976
+ "failKind": "BiQ1zG_failKind",
993
977
  "dangerConfirm": "BiQ1zG_dangerConfirm",
994
- "confirmIcon": "BiQ1zG_confirmIcon",
995
- "result": "BiQ1zG_result",
996
- "progress": "BiQ1zG_progress",
997
- "failHead": "BiQ1zG_failHead",
998
- "modalWide": "BiQ1zG_modalWide",
999
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
1000
- "failNetworkTarget": "BiQ1zG_failNetworkTarget",
1001
- "restartNow": "BiQ1zG_restartNow",
1002
- "modalLabel": "BiQ1zG_modalLabel",
978
+ "failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
979
+ "failRepoUrl": "BiQ1zG_failRepoUrl",
980
+ "detailModal": "BiQ1zG_detailModal",
1003
981
  "linkIcon": "BiQ1zG_linkIcon",
1004
- "overlay": "BiQ1zG_overlay",
1005
- "noticeRowMain": "BiQ1zG_noticeRowMain",
982
+ "detailArrow": "BiQ1zG_detailArrow",
983
+ "modalCancel": "BiQ1zG_modalCancel",
984
+ "noticeRemove": "BiQ1zG_noticeRemove",
985
+ "failKindTitle": "BiQ1zG_failKindTitle",
986
+ "failRepo": "BiQ1zG_failRepo",
987
+ "noticeVersion": "BiQ1zG_noticeVersion",
988
+ "failClear": "BiQ1zG_failClear",
989
+ "failRepoLabel": "BiQ1zG_failRepoLabel",
990
+ "errorTitle": "BiQ1zG_errorTitle",
991
+ "failKindInstall": "BiQ1zG_failKindInstall",
992
+ "detailPathText": "BiQ1zG_detailPathText",
993
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
994
+ "modalDesc": "BiQ1zG_modalDesc",
995
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
996
+ "modalValue": "BiQ1zG_modalValue",
997
+ "failEmpty": "BiQ1zG_failEmpty",
998
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
1006
999
  "uninstallConfirm": "BiQ1zG_uninstallConfirm",
1007
- "failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
1008
- "queueRow": "BiQ1zG_queueRow",
1000
+ "modalCmdText": "BiQ1zG_modalCmdText",
1009
1001
  "resultRestarting": "BiQ1zG_resultRestarting",
1010
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
1011
- "noticeTime": "BiQ1zG_noticeTime",
1002
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
1003
+ "progress": "BiQ1zG_progress",
1004
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
1005
+ "overlayIn": "BiQ1zG_overlayIn",
1006
+ "failList": "BiQ1zG_failList",
1007
+ "modalBody": "BiQ1zG_modalBody",
1008
+ "queuedHint": "BiQ1zG_queuedHint",
1012
1009
  "errorCopySoft": "BiQ1zG_errorCopySoft",
1013
- "failKind": "BiQ1zG_failKind",
1014
- "detailStatusText": "BiQ1zG_detailStatusText",
1015
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
1016
- "stripCancel": "BiQ1zG_stripCancel",
1017
- "detailRow": "BiQ1zG_detailRow",
1010
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
1011
+ "failBigIssue": "BiQ1zG_failBigIssue",
1012
+ "overlay": "BiQ1zG_overlay",
1018
1013
  "helpModal": "BiQ1zG_helpModal",
1019
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo"
1014
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
1015
+ "noticeFoot": "BiQ1zG_noticeFoot",
1016
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
1017
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
1018
+ "noticeRow": "BiQ1zG_noticeRow",
1019
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
1020
+ "detailGrid": "BiQ1zG_detailGrid",
1021
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
1022
+ "modalWide": "BiQ1zG_modalWide",
1023
+ "modalClose": "BiQ1zG_modalClose",
1024
+ "confirmIcon": "BiQ1zG_confirmIcon",
1025
+ "toastFail": "BiQ1zG_toastFail",
1026
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
1027
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
1028
+ "modalIn": "BiQ1zG_modalIn",
1029
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
1030
+ "logModal": "BiQ1zG_logModal",
1031
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
1032
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
1033
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
1034
+ "resultDesc": "BiQ1zG_resultDesc"
1020
1035
  };
1021
1036
  //#endregion
1022
1037
  //#region src/server/services/install/release-target.ts
@@ -1106,7 +1121,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1106
1121
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
1107
1122
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
1108
1123
  */
1109
- const PLUGIN_VERSION = "2.0.3";
1124
+ const PLUGIN_VERSION = "2.0.5";
1110
1125
  const CATEGORY_ORDER = [
1111
1126
  "interface",
1112
1127
  "session",
@@ -1364,8 +1379,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1364
1379
  //#endregion
1365
1380
  //#region src/client/data/catalog.ts
1366
1381
  const PROXY_BASE = "/dsh-plugin-hub/catalog";
1367
- const PLUGINS_URL = (lang) => `${PROXY_BASE}?lang=${lang}`;
1368
- const STATS_URL = `${PROXY_BASE}?stats=1`;
1382
+ const PLUGINS_URL = (lang, refresh) => `${PROXY_BASE}?lang=${lang}${refresh ? "&refresh=1" : ""}`;
1383
+ const STATS_URL = (refresh) => `${PROXY_BASE}?stats=1${refresh ? "&refresh=1" : ""}`;
1369
1384
  async function fetchJson(url, signal) {
1370
1385
  const res = await fetch(url, {
1371
1386
  cache: "no-store",
@@ -1375,14 +1390,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1375
1390
  return res.json();
1376
1391
  }
1377
1392
  /** 目录插件列表(在线 API 已只返回 verified;过滤与排序由上层负责)。
1378
- * signal 可选:宿主重启/代理抖动导致请求挂起时,上层可中止旧请求释放连接。 */
1379
- async function fetchCatalog(lang, signal) {
1380
- const data = await fetchJson(PLUGINS_URL(lang), signal);
1393
+ * signal 可选:宿主重启/代理抖动导致请求挂起时,上层可中止旧请求释放连接。
1394
+ * refresh=true 跳过服务端缓存,强制回源。 */
1395
+ async function fetchCatalog(lang, signal, refresh = false) {
1396
+ const data = await fetchJson(PLUGINS_URL(lang, refresh), signal);
1381
1397
  return (Array.isArray(data) ? data : []).map((item) => normalize(item));
1382
1398
  }
1383
1399
  /** 收录/精选统计(/api/stats.json);字段不完整返回 null。 */
1384
- async function fetchStats(signal) {
1385
- const s = await fetchJson(STATS_URL, signal);
1400
+ async function fetchStats(signal, refresh = false) {
1401
+ const s = await fetchJson(STATS_URL(refresh), signal);
1386
1402
  if (s && typeof s.total === "number" && typeof s.verified === "number") return {
1387
1403
  total: s.total,
1388
1404
  verified: s.verified
@@ -1646,10 +1662,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1646
1662
  * 界面停在「正在加载插件数据…」假死 —— 超时自动重拉,最多自动重试 2 次后转失败态;
1647
1663
  * 用户手动刷新(reload)时清零重新计数。 */
1648
1664
  const loadRetriesRef = (0, react.useRef)(0);
1649
- /** 目录加载超时阈值:超过即判定挂起,强制刷新一次(服务端代理 curl 上限 20s,客户端 12s 先兜底) */
1650
- const LOAD_TIMEOUT_MS = 12e3;
1651
- /** 挂起后最多自动重试次数:避免代理持续不通时无限循环刷新(每次重试仍 12s,2 次后转失败界面可手动重试) */
1665
+ /** 目录加载超时阈值:超过即判定挂起,强制刷新一次(服务端代理 curl 上限 60s,客户端 30s 先兜底) */
1666
+ const LOAD_TIMEOUT_MS = 3e4;
1667
+ /** 挂起后最多自动重试次数:避免代理持续不通时无限循环刷新(每次重试仍 30s,2 次后转失败界面可手动重试) */
1652
1668
  const MAX_LOAD_RETRIES = 2;
1669
+ /** 本次 reload 是否强制回源(跳过服务端 1 小时缓存):由「强制刷新」置位,读取后立即复位 */
1670
+ const forceRefreshRef = (0, react.useRef)(false);
1653
1671
  /** 点击排序按钮:同一按钮切换正/倒序,新按钮用默认方向 */
1654
1672
  function toggleSort(key) {
1655
1673
  if (key === sort) setSortDir((d) => d === "asc" ? "desc" : "asc");
@@ -1688,11 +1706,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1688
1706
  let cancelled = false;
1689
1707
  let settled = false;
1690
1708
  const controller = new AbortController();
1709
+ const refresh = forceRefreshRef.current;
1710
+ forceRefreshRef.current = false;
1691
1711
  setPlugins(null);
1692
1712
  setHubPlugin(null);
1693
1713
  setStats(null);
1694
1714
  setFailed(false);
1695
- const load = () => Promise.all([fetchCatalog(lang, controller.signal), fetchStats(controller.signal)]);
1715
+ const load = () => Promise.all([fetchCatalog(lang, controller.signal, refresh), fetchStats(controller.signal, refresh)]);
1696
1716
  load().then(([list, stats]) => {
1697
1717
  if (cancelled) return;
1698
1718
  settled = true;
@@ -1855,7 +1875,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1855
1875
  * registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
1856
1876
  * 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
1857
1877
  */
1858
- const hubCurrentVersion = "2.0.3";
1878
+ const hubCurrentVersion = "2.0.5";
1859
1879
  const hubUpdateState = (() => {
1860
1880
  if (!hubUpdateInfo) return "none";
1861
1881
  if (hubUpdateInfo.version === hubCurrentVersion) return "latest";
@@ -1906,6 +1926,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1906
1926
  loadRetriesRef.current = 0;
1907
1927
  setReloadKey((k) => k + 1);
1908
1928
  },
1929
+ /** 强制刷新:跳过服务端 1 小时缓存直接回源,成功后覆盖缓存(失败仍回退旧缓存) */
1930
+ forceReload: () => {
1931
+ loadRetriesRef.current = 0;
1932
+ forceRefreshRef.current = true;
1933
+ setReloadKey((k) => k + 1);
1934
+ },
1909
1935
  installed,
1910
1936
  installedItems,
1911
1937
  installedName,
@@ -2059,6 +2085,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2059
2085
  function missingTarballIntegrity(message) {
2060
2086
  return /\bERR_PNPM_MISSING_TARBALL_INTEGRITY\b/.test(message);
2061
2087
  }
2088
+ /** GitHub 分支 tarball 内容变了、锁文件里还是旧校验和(ERR_PNPM_TARBALL_INTEGRITY)。
2089
+ * \b 保证不会命中 ERR_PNPM_MISSING_TARBALL_INTEGRITY:前者是有校验值但对不上,
2090
+ * 后者是锁文件里压根没有校验值。 */
2091
+ function mismatchedTarballIntegrity(message) {
2092
+ return /\bERR_PNPM_TARBALL_INTEGRITY\b/.test(message);
2093
+ }
2062
2094
  /** pnpm 拒收「刚发布」包时,报错里带着发布时间;这里从报错文本算出「发布满 24h」的可重试时刻(UTC,分钟精度)。 */
2063
2095
  function releaseAgeRetryAfter(message) {
2064
2096
  const match = /published at (\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)/.exec(message);
@@ -2073,6 +2105,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2073
2105
  * 避免出现「预计可重试时间:」后接空值的残缺句子。
2074
2106
  */
2075
2107
  function pnpmPolicyHintOf(message) {
2108
+ if (mismatchedTarballIntegrity(message)) return "failPnpmTarballMismatchHint";
2076
2109
  if (missingTarballIntegrity(message)) return "failPnpmTarballIntegrityHint";
2077
2110
  if (/ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|ERR_PNPM_NO_MATURE_MATCHING_VERSION|Minimum release age|minimumReleaseAge/i.test(message) && releaseAgeRetryAfter(message) !== null) return "failPnpmReleaseAgeHint";
2078
2111
  return "failPnpmPolicyHint";
@@ -2096,18 +2129,20 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2096
2129
  if (/ERR_PNPM_UNEXPECTED_(VIRTUAL_)?STORE|Unexpected (virtual )?store location/i.test(message)) return "pnpmStore";
2097
2130
  if (/ERR_PNPM_ADDING_TO_ROOT|add the dependency to the workspace root/i.test(message)) return "pnpmWorkspace";
2098
2131
  if (/(^|\n)untrusted origin\s*$/.test(message)) return "originRejected";
2099
- if (missingTarballIntegrity(message) || /ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|ERR_PNPM_NO_MATURE_MATCHING_VERSION|Minimum release age|minimumReleaseAge|untrusted origin/i.test(message)) return "pnpmPolicy";
2132
+ if (missingTarballIntegrity(message) || mismatchedTarballIntegrity(message) || /ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|ERR_PNPM_NO_MATURE_MATCHING_VERSION|Minimum release age|minimumReleaseAge|untrusted origin/i.test(message)) return "pnpmPolicy";
2100
2133
  if (/ERR_PNPM_UNUSED_PATCH|patches were not used/i.test(message)) return "pnpmUnusedPatch";
2101
2134
  if (/os error 32|EBUSY|resource busy or locked|being used by another process/i.test(message)) return "fileLocked";
2102
2135
  if (/os error 5\b|ERROR_ACCESS_DENIED|\bEPERM\b|\bEACCES\b|access is denied/i.test(message)) return "accessDenied";
2103
2136
  if (/os error 112\b|os error 19\b|ERROR_DISK_FULL|ERROR_WRITE_PROTECT|\bENOSPC\b|\bEROFS\b|\bEMFILE\b|\bENFILE\b|no space left on device|read-only file system|too many open files/i.test(message)) return "fsUnavailable";
2104
2137
  if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
2105
2138
  if (/\[network\]|ERR_PNPM_GIT_FETCH_FAILED|ETIMEDOUT|ECONNREFUSED|ECONNRESET|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH|UND_ERR_[A-Z0-9_]+|getaddrinfo|Could not connect|Could not resolve host|Network unreachable|Failed to connect|socket hang up|CERT_HAS_EXPIRED|SSL certificate problem|\bTLS\b|\bSSL\b|fetch failed|failed to fetch|\bGET https?:\/\/\S+\.tgz\s+error \([A-Za-z0-9_]+\)/i.test(message)) return "network";
2139
+ if (/\[request-timeout\]/i.test(message)) return "network";
2106
2140
  if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
2107
2141
  if (/\[registry-missing\]/i.test(message)) return "pluginMissingDep";
2108
2142
  if (/ERR_PNPM_FETCH_404|404 Not Found|Not Found - 404/i.test(message)) return "pnpmMissingDep";
2109
2143
  if (/\bERR_PNPM_NO_MATCHING_VERSION\b|\bETARGET\b|No matching version found/i.test(message)) return "registryVersionStale";
2110
2144
  if (/\bERR_PNPM_LINKED_PKG_DIR_NOT_FOUND\b|Could not install from .+ as it does not exist/i.test(message)) return "pnpmLinkedDirMissing";
2145
+ if (/Unable to detect compiler type|gyp ERR!|Could not find any Visual Studio|No Xcode or CLT version detected|xcode-select|python(?:3)? is (?:not set|not found)|Could not find Python|\bmake: not found\b|\bgcc: not found\b|\bg\+\+: not found\b|\bMSB\d{4}\b/i.test(message)) return "buildToolchainMissing";
2111
2146
  if (/ERR_PNPM_PREPARE_PACKAGE|ELIFECYCLE|prepare-guard/i.test(message) || /Command failed/.test(message)) return "pluginPrepare";
2112
2147
  if (/plugin is not installed|plugin cannot be uninstalled here|already queued:|^already installed: \S+$/im.test(message)) return "hubState";
2113
2148
  if (/^\[timed out\]$/m.test(message)) return "timeout";
@@ -2668,7 +2703,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2668
2703
  desc: q.desc,
2669
2704
  version: q.version
2670
2705
  });
2671
- onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.action === "update", q.needsReload ?? false);
2706
+ onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.action === "update", q.needsReload ?? false, q.bundleDeselected === true);
2672
2707
  }
2673
2708
  } else {
2674
2709
  const rawDetail = lines.length > 0 ? [...lines].reverse().join("\n") : q.kind === "uninstall" ? t("uninstallFail") : t("installFail");
@@ -2709,6 +2744,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2709
2744
  let status = "failed";
2710
2745
  let lines = [];
2711
2746
  let attempts;
2747
+ let bundleDeselected;
2712
2748
  try {
2713
2749
  const res = await fetch(`/dsh-plugin-hub/status?task=${q.id}`, { cache: "no-store" });
2714
2750
  if (res.ok) {
@@ -2717,13 +2753,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2717
2753
  status = task.status ?? "failed";
2718
2754
  lines = task.lines ?? [];
2719
2755
  attempts = Array.isArray(task.attempts) ? task.attempts : void 0;
2756
+ bundleDeselected = task.bundleDeselected === true ? true : void 0;
2720
2757
  const needsRestart = typeof task.needsRestart === "boolean" ? task.needsRestart : q.needsRestart;
2721
2758
  const needsReload = typeof task.needsReload === "boolean" ? task.needsReload : q.needsReload ?? false;
2722
2759
  if (status === "done") {
2723
2760
  const settled = {
2724
2761
  ...q,
2725
2762
  needsRestart,
2726
- needsReload
2763
+ needsReload,
2764
+ bundleDeselected: bundleDeselected === true ? true : q.bundleDeselected
2727
2765
  };
2728
2766
  if (q.kind === "uninstall") settleDone(settled, lines);
2729
2767
  else finishQueueTask(true, settled, lines);
@@ -2774,6 +2812,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2774
2812
  lines: Array.isArray(a.lines) ? a.lines : prevTask?.lines ?? [],
2775
2813
  attempts: Array.isArray(a.attempts) ? a.attempts : prevTask?.attempts ?? [],
2776
2814
  needsRestart: typeof a.needsRestart === "boolean" ? a.needsRestart : prevTask?.needsRestart ?? true,
2815
+ bundleDeselected: a.bundleDeselected === true || prevTask?.bundleDeselected === true,
2777
2816
  channel: a.installChannel === "npm" ? "npm" : prevTask?.channel
2778
2817
  });
2779
2818
  }
@@ -2903,7 +2942,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2903
2942
  pollQueue();
2904
2943
  } catch (err) {
2905
2944
  applyQueue((prev) => prev.filter((x) => x.id !== tempId));
2906
- const reason = err?.name === "AbortError" ? t("requestTimeout") : err instanceof Error && err.message ? err.message : String(err ?? "");
2945
+ const reason = err?.name === "AbortError" ? `${t("requestTimeout")}\n[request-timeout]` : err instanceof Error && err.message ? err.message : String(err ?? "");
2907
2946
  const entry = entryLineOf(t, input.channel);
2908
2947
  const msg = reason ? `${t("installFail")} — ${reason}` : t("installFail");
2909
2948
  onError(entry ? `${entry}\n${msg}` : msg, input.repo, "install", input.command);
@@ -3003,7 +3042,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3003
3042
  }]);
3004
3043
  pollQueue();
3005
3044
  } catch (err) {
3006
- const reason = err?.name === "AbortError" ? t("requestTimeout") : err instanceof Error && err.message ? err.message : String(err ?? "");
3045
+ const reason = err?.name === "AbortError" ? `${t("requestTimeout")}\n[request-timeout]` : err instanceof Error && err.message ? err.message : String(err ?? "");
3007
3046
  onError(reason ? `${t("uninstallFail")} — ${reason}` : t("uninstallFail"), repo, "uninstall");
3008
3047
  } finally {
3009
3048
  window.clearTimeout(timeout);
@@ -3582,7 +3621,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3582
3621
  * 按钮(重启会中断进行中的任务,故仍需用户确认),关闭即放弃;
3583
3622
  * - 其余(含 needsReload=true 的「已热挂载、仅剩客户端 UI」)→ 仅「完成」按钮:关闭结果弹窗时
3584
3623
  * 上层自动刷新页面让插件生效,不再给「稍后/立即刷新」手动选择。 */
3585
- function ResultView({ title, desc, t, restarting, needsRestart, needsReload, onRestart, onClose }) {
3624
+ function ResultView({ title, desc, t, restarting, needsRestart, needsReload, bundleDeselected, onRestart, onClose }) {
3586
3625
  return (0, react.createElement)("div", { className: Modal_module_css_default.result }, (0, react.createElement)("div", { className: Modal_module_css_default.resultCheck }, (0, react.createElement)("svg", {
3587
3626
  className: Modal_module_css_default.resultCheckIcon,
3588
3627
  viewBox: "0 0 16 16",
@@ -3596,7 +3635,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3596
3635
  strokeWidth: 2,
3597
3636
  strokeLinecap: "round",
3598
3637
  strokeLinejoin: "round"
3599
- }))), (0, react.createElement)("div", { className: Modal_module_css_default.resultTitle }, title), desc ? (0, react.createElement)("div", { className: Modal_module_css_default.resultDesc }, desc) : null, needsRestart ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.resultRestarting }, restarting ? t("restarting") : t("restartHint")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
3638
+ }))), (0, react.createElement)("div", { className: Modal_module_css_default.resultTitle }, title), desc ? (0, react.createElement)("div", { className: Modal_module_css_default.resultDesc }, desc) : null, bundleDeselected ? (0, react.createElement)("div", { className: Modal_module_css_default.bundleDeselectedHint }, t("bundleDeselectedHint")) : null, needsRestart ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.resultRestarting }, restarting ? t("restarting") : t("restartHint")), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
3600
3639
  className: Modal_module_css_default.restartNowWarning,
3601
3640
  onClick: onRestart,
3602
3641
  disabled: restarting
@@ -3611,7 +3650,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3611
3650
  * 目录插件与命令行安装(customTarget 模式)共用同一套确认/进度/结果流程。
3612
3651
  */
3613
3652
  function InstallModal(props) {
3614
- const { plugin, customTarget, globalNpm, done, task, t, langPath, restarting, submitting, update, cliOnly, needsRestart, needsReload, onClose, onCopy, onInstall, onRestart } = props;
3653
+ const { plugin, customTarget, globalNpm, done, task, t, langPath, restarting, submitting, update, cliOnly, needsRestart, needsReload, bundleDeselected, onClose, onCopy, onInstall, onRestart } = props;
3615
3654
  const busy = submitting || task !== null && (task.status === "pending" || task.status === "running");
3616
3655
  const name = customTarget ?? (globalNpm !== void 0 && globalNpm.length > 0 ? globalNpm.join(" ") : void 0) ?? plugin?.displayName ?? plugin?.slug ?? "";
3617
3656
  const busyTitle = (label) => langPath === "zh/" ? `${name} 插件${label}` : `${label} ${name}`;
@@ -3636,6 +3675,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3636
3675
  restarting,
3637
3676
  needsRestart,
3638
3677
  needsReload,
3678
+ bundleDeselected,
3639
3679
  onRestart,
3640
3680
  onClose
3641
3681
  }) : (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, !busy ? (0, react.createElement)("div", { className: Modal_module_css_default.confirmIconWrap }, (0, react.createElement)(ConfirmIcon, { type: "question" })) : null, (0, react.createElement)("div", { className: Modal_module_css_default.trustHint }, t("confirmDesc")), (0, react.createElement)("div", { className: Modal_module_css_default.modalRow }, (0, react.createElement)("span", { className: Modal_module_css_default.modalLabel }, t("confirmPlugin")), (0, react.createElement)("span", {
@@ -3750,7 +3790,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3750
3790
  })() : null, (0, react.createElement)("button", {
3751
3791
  className: Modal_module_css_default.errorCopySoft,
3752
3792
  onClick: () => onCopy(copyText)
3753
- }, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, displayMessage), (0, react.createElement)("div", { className: Modal_module_css_default.failKindTitle }, t(`failKind_${failureKind}`, failureKind === "hostIncompatible" ? { version: /incompatible with dsh\s+([^\s:;,]+)/i.exec(message)?.[1] ?? "" } : void 0)), failureKind === "hostIncompatible" ? null : (0, react.createElement)("div", { className: Modal_module_css_default.failReason }, t(`failReason_${failureKind}`)), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "dshMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint")) : failureKind === "gitMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failGitMissingHint")) : failureKind === "pnpmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint")) : failureKind === "npmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint")) : failureKind === "pnpmWorkspace" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint")) : failureKind === "pnpmStore" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint")) : failureKind === "pnpmPolicy" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(pnpmPolicyHintOf(message), pnpmPolicyHintParams(message))) : failureKind === "pnpmUnusedPatch" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint")) : failureKind === "pnpmMissingDep" ? (0, react.createElement)("div", null, [(() => {
3793
+ }, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, displayMessage), (0, react.createElement)("div", { className: Modal_module_css_default.failKindTitle }, t(`failKind_${failureKind}`, failureKind === "hostIncompatible" ? { version: /incompatible with dsh\s+([^\s:;,]+)/i.exec(message)?.[1] ?? "" } : void 0)), failureKind === "hostIncompatible" ? null : (0, react.createElement)("div", { className: Modal_module_css_default.failReason }, t(`failReason_${failureKind}`)), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "dshMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint")) : failureKind === "gitMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failGitMissingHint")) : failureKind === "pnpmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint")) : failureKind === "npmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint")) : failureKind === "buildToolchainMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failBuildToolchainHint")) : failureKind === "pnpmWorkspace" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint")) : failureKind === "pnpmStore" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint")) : failureKind === "pnpmPolicy" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(pnpmPolicyHintOf(message), pnpmPolicyHintParams(message))) : failureKind === "pnpmUnusedPatch" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint")) : failureKind === "pnpmMissingDep" ? (0, react.createElement)("div", null, [(() => {
3754
3794
  const pkg = missingRegistryPackageOf(message);
3755
3795
  return pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPnpmMissingDepTarget", { pkg })) : null;
3756
3796
  })(), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(registryMissingHintOf(message)))]) : failureKind === "pluginMissingDep" ? (0, react.createElement)("div", null, [
@@ -4366,6 +4406,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4366
4406
  if (kind === "gitMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failGitMissingHint"));
4367
4407
  if (kind === "pnpmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint"));
4368
4408
  if (kind === "npmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint"));
4409
+ if (kind === "buildToolchainMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failBuildToolchainHint"));
4369
4410
  if (kind === "pnpmWorkspace") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint"));
4370
4411
  if (kind === "pnpmStore") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint"));
4371
4412
  if (kind === "pnpmPolicy") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(pnpmPolicyHintOf(r.message), pnpmPolicyHintParams(r.message)));
@@ -4645,40 +4686,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4645
4686
  css: css$9
4646
4687
  });
4647
4688
  var List_module_css_default = {
4648
- "updateBadge": "_3XaZHa_updateBadge",
4649
- "state": "_3XaZHa_state",
4650
- "detailBtn": "_3XaZHa_detailBtn",
4651
- "date": "_3XaZHa_date",
4652
- "star": "_3XaZHa_star",
4653
- "installBtnCopied": "_3XaZHa_installBtnCopied",
4654
- "uninstallBtn": "_3XaZHa_uninstallBtn",
4655
- "cardMain": "_3XaZHa_cardMain",
4656
- "stateActions": "_3XaZHa_stateActions",
4657
- "retryBtn": "_3XaZHa_retryBtn",
4658
- "diagBtn": "_3XaZHa_diagBtn",
4659
- "list": "_3XaZHa_list",
4660
- "footer": "_3XaZHa_footer",
4661
- "stateDesc": "_3XaZHa_stateDesc",
4662
- "topic": "_3XaZHa_topic",
4663
- "stats": "_3XaZHa_stats",
4664
- "verified": "_3XaZHa_verified",
4665
4689
  "topics": "_3XaZHa_topics",
4690
+ "topic": "_3XaZHa_topic",
4691
+ "cardHead": "_3XaZHa_cardHead",
4666
4692
  "card": "_3XaZHa_card",
4667
- "installBtn": "_3XaZHa_installBtn",
4668
- "stateTitle": "_3XaZHa_stateTitle",
4669
4693
  "versionBadge": "_3XaZHa_versionBadge",
4670
4694
  "footLink": "_3XaZHa_footLink",
4671
- "body": "_3XaZHa_body",
4672
4695
  "actions": "_3XaZHa_actions",
4673
- "categoryBadge": "_3XaZHa_categoryBadge",
4674
- "desc": "_3XaZHa_desc",
4675
- "cardHead": "_3XaZHa_cardHead",
4696
+ "body": "_3XaZHa_body",
4697
+ "cardSide": "_3XaZHa_cardSide",
4698
+ "detailBtn": "_3XaZHa_detailBtn",
4699
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4700
+ "installBtn": "_3XaZHa_installBtn",
4676
4701
  "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4702
+ "verified": "_3XaZHa_verified",
4703
+ "star": "_3XaZHa_star",
4677
4704
  "fork": "_3XaZHa_fork",
4705
+ "retryBtn": "_3XaZHa_retryBtn",
4706
+ "stateActions": "_3XaZHa_stateActions",
4707
+ "cardTitle": "_3XaZHa_cardTitle",
4708
+ "stateDesc": "_3XaZHa_stateDesc",
4709
+ "footer": "_3XaZHa_footer",
4710
+ "desc": "_3XaZHa_desc",
4711
+ "categoryBadge": "_3XaZHa_categoryBadge",
4712
+ "list": "_3XaZHa_list",
4678
4713
  "moreSentinel": "_3XaZHa_moreSentinel",
4679
- "cardSide": "_3XaZHa_cardSide",
4680
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4681
- "cardTitle": "_3XaZHa_cardTitle"
4714
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
4715
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
4716
+ "stateTitle": "_3XaZHa_stateTitle",
4717
+ "state": "_3XaZHa_state",
4718
+ "diagBtn": "_3XaZHa_diagBtn",
4719
+ "updateBadge": "_3XaZHa_updateBadge",
4720
+ "date": "_3XaZHa_date",
4721
+ "cardMain": "_3XaZHa_cardMain",
4722
+ "stats": "_3XaZHa_stats"
4682
4723
  };
4683
4724
  //#endregion
4684
4725
  //#region src/client/hooks/useIncrementalList.ts
@@ -4776,7 +4817,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4776
4817
  * 目录列表:承载加载/失败/空三态、插件卡片与计数页脚的滚动容器。分类或安装状态
4777
4818
  * 筛选变化时重置滚动位置,避免替换后的内容被误当成「没变化」。
4778
4819
  */
4779
- function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4820
+ function CatalogList({ plugins, failed, visible, total, t, langPath, reload, forceReload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4780
4821
  /** 列表滚动容器:分类/搜索切换后列表内容替换但 scrollTop 保留,会让用户误以为列表没更新,需重置回顶部 */
4781
4822
  const listRef = (0, react.useRef)(null);
4782
4823
  /** 增量渲染:全量目录太大(4400+),只渲染首批,滚动接近底部时自动追加下一批 */
@@ -4791,6 +4832,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4791
4832
  className: List_module_css_default.retryBtn,
4792
4833
  onClick: () => reload()
4793
4834
  }, t("retry")), (0, react.createElement)("button", {
4835
+ className: List_module_css_default.retryBtn,
4836
+ onClick: () => forceReload(),
4837
+ title: t("forceReloadHint")
4838
+ }, t("forceReload")), (0, react.createElement)("button", {
4794
4839
  className: List_module_css_default.diagBtn,
4795
4840
  onClick: onOpenDiagnostics
4796
4841
  }, t("failNetworkRunDiag")))), plugins !== null && !failed && visible.length === 0 && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("noResult")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t("noResultDesc"))), plugins !== null && !failed && shown.map((p) => (0, react.createElement)(PluginCard, {
@@ -4849,6 +4894,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4849
4894
  t,
4850
4895
  langPath,
4851
4896
  reload: catalog.reload,
4897
+ forceReload: catalog.forceReload,
4852
4898
  category: catalog.category,
4853
4899
  copied,
4854
4900
  installedName: catalog.installedName,
@@ -4863,7 +4909,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4863
4909
  }
4864
4910
  //#endregion
4865
4911
  //#region \0dsh-css:src/client/styles/SectionTabs.module.css.mjs
4866
- const css$8 = "._7tvizq_root{border-bottom:1px solid var(--hub-border-1);flex-shrink:0;align-items:stretch;gap:28px;padding:0 2px;display:flex}._7tvizq_tab,._7tvizq_tabActive{cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;gap:7px;height:38px;padding:0 4px;font-size:14px;line-height:38px;transition:color .12s;display:inline-flex;position:relative}._7tvizq_tab{color:var(--hub-text-secondary)}._7tvizq_tab:hover{color:var(--hub-text-primary)}._7tvizq_tabActive{color:var(--hub-text-primary);font-weight:600}._7tvizq_tabIcon{flex-shrink:0;align-items:center;line-height:1;display:inline-flex}._7tvizq_tabActive:after{content:\"\";background:var(--hub-brand);border-radius:1px;height:2px;position:absolute;bottom:-1px;left:0;right:0}._7tvizq_tabCount,._7tvizq_tabCountActive{text-align:center;border-radius:999px;min-width:18px;padding:0 6px;font-size:11px;line-height:16px}._7tvizq_tabCount{color:var(--hub-text-tertiary);background:var(--hub-bg-btn)}._7tvizq_tabActive ._7tvizq_tabCountActive{color:var(--hub-text-on-fill);background:var(--hub-btn-fill)}._7tvizq_noticeBtn{box-sizing:border-box;height:26px;color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:1px solid #0000;border-radius:6px;flex-shrink:0;align-self:center;align-items:center;gap:5px;margin-left:auto;padding:0 8px;font-size:12px;line-height:24px;transition:color .12s,background .12s;display:inline-flex;position:relative}._7tvizq_noticeBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover);border-color:var(--hub-border-2)}._7tvizq_noticeIcon{align-items:center;line-height:1;display:inline-flex}._7tvizq_noticeCount{text-align:center;color:#fff;background:var(--hub-danger);border-radius:999px;min-width:17px;height:17px;padding:0 5px;font-size:11px;font-weight:600;line-height:17px;box-shadow:0 1px 3px #d1242f59}";
4912
+ const css$8 = "._7tvizq_root{border-bottom:1px solid var(--hub-border-1);flex-shrink:0;align-items:stretch;gap:28px;padding:0 2px;display:flex;container-type:inline-size}._7tvizq_tab,._7tvizq_tabActive{white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;flex-shrink:0;align-items:center;gap:7px;height:38px;padding:0 4px;font-size:14px;line-height:38px;transition:color .12s;display:inline-flex;position:relative}._7tvizq_tab{color:var(--hub-text-secondary)}._7tvizq_tab:hover{color:var(--hub-text-primary)}._7tvizq_tabActive{color:var(--hub-text-primary);font-weight:600}@container (width<=440px){._7tvizq_tabLabel{display:none}._7tvizq_tab,._7tvizq_tabActive{padding:0 2px}}._7tvizq_tabIcon{flex-shrink:0;align-items:center;line-height:1;display:inline-flex}._7tvizq_tabActive:after{content:\"\";background:var(--hub-brand);border-radius:1px;height:2px;position:absolute;bottom:-1px;left:0;right:0}._7tvizq_tabCount,._7tvizq_tabCountActive{text-align:center;border-radius:999px;min-width:18px;padding:0 6px;font-size:11px;line-height:16px}._7tvizq_tabCount{color:var(--hub-text-tertiary);background:var(--hub-bg-btn)}._7tvizq_tabActive ._7tvizq_tabCountActive{color:var(--hub-text-on-fill);background:var(--hub-btn-fill)}._7tvizq_noticeBtn{box-sizing:border-box;height:26px;color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:1px solid #0000;border-radius:6px;flex-shrink:0;align-self:center;align-items:center;gap:5px;margin-left:auto;padding:0 8px;font-size:12px;line-height:24px;transition:color .12s,background .12s;display:inline-flex;position:relative}._7tvizq_noticeBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover);border-color:var(--hub-border-2)}._7tvizq_noticeIcon{align-items:center;line-height:1;display:inline-flex}._7tvizq_noticeCount{text-align:center;color:#fff;background:var(--hub-danger);border-radius:999px;min-width:17px;height:17px;padding:0 5px;font-size:11px;font-weight:600;line-height:17px;box-shadow:0 1px 3px #d1242f59}";
4867
4913
  const tagId$8 = "dsh-plugin/SectionTabs.module.css";
4868
4914
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
4869
4915
  const tag = document.createElement("style");
@@ -4878,15 +4924,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4878
4924
  css: css$8
4879
4925
  });
4880
4926
  var SectionTabs_module_css_default = {
4927
+ "tabIcon": "_7tvizq_tabIcon",
4881
4928
  "tabCountActive": "_7tvizq_tabCountActive",
4929
+ "tabActive": "_7tvizq_tabActive",
4882
4930
  "noticeBtn": "_7tvizq_noticeBtn",
4931
+ "noticeIcon": "_7tvizq_noticeIcon",
4932
+ "tabLabel": "_7tvizq_tabLabel",
4883
4933
  "noticeCount": "_7tvizq_noticeCount",
4934
+ "tabCount": "_7tvizq_tabCount",
4884
4935
  "tab": "_7tvizq_tab",
4885
- "tabActive": "_7tvizq_tabActive",
4886
- "noticeIcon": "_7tvizq_noticeIcon",
4887
- "root": "_7tvizq_root",
4888
- "tabIcon": "_7tvizq_tabIcon",
4889
- "tabCount": "_7tvizq_tabCount"
4936
+ "root": "_7tvizq_root"
4890
4937
  };
4891
4938
  //#endregion
4892
4939
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4934,9 +4981,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4934
4981
  role: "tab",
4935
4982
  "aria-selected": view === id,
4936
4983
  title: t(hintKey),
4984
+ "aria-label": t(labelKey),
4937
4985
  className: view === id ? SectionTabs_module_css_default.tabActive : SectionTabs_module_css_default.tab,
4938
4986
  onClick: () => setView(id)
4939
- }, (0, react.createElement)("span", { className: SectionTabs_module_css_default.tabIcon }, (0, react.createElement)(Icon)), t(labelKey), id === "installed" && installedCount > 0 ? (0, react.createElement)("span", { className: view === id ? SectionTabs_module_css_default.tabCountActive : SectionTabs_module_css_default.tabCount }, installedCount) : null)), (0, react.createElement)("button", {
4987
+ }, (0, react.createElement)("span", { className: SectionTabs_module_css_default.tabIcon }, (0, react.createElement)(Icon)), (0, react.createElement)("span", { className: SectionTabs_module_css_default.tabLabel }, t(labelKey)), id === "installed" && installedCount > 0 ? (0, react.createElement)("span", { className: view === id ? SectionTabs_module_css_default.tabCountActive : SectionTabs_module_css_default.tabCount }, installedCount) : null)), (0, react.createElement)("button", {
4940
4988
  type: "button",
4941
4989
  className: SectionTabs_module_css_default.noticeBtn,
4942
4990
  onClick: onOpenNotifications,
@@ -4961,42 +5009,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4961
5009
  css: css$7
4962
5010
  });
4963
5011
  var InstalledView_module_css_default = {
4964
- "rowUninstall": "_1nXeGW_rowUninstall",
4965
- "rowDetail": "_1nXeGW_rowDetail",
4966
- "searchWrap": "_1nXeGW_searchWrap",
4967
- "segBtn": "_1nXeGW_segBtn",
5012
+ "rowRestart": "_1nXeGW_rowRestart",
5013
+ "emptyDesc": "_1nXeGW_emptyDesc",
5014
+ "rowMain": "_1nXeGW_rowMain",
5015
+ "rowDesc": "_1nXeGW_rowDesc",
4968
5016
  "statusDot": "_1nXeGW_statusDot",
4969
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4970
- "statusInactive": "_1nXeGW_statusInactive",
4971
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4972
- "rowCategory": "_1nXeGW_rowCategory",
4973
5017
  "toolbar": "_1nXeGW_toolbar",
4974
- "rowActions": "_1nXeGW_rowActions",
4975
- "row": "_1nXeGW_row",
5018
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
5019
+ "segBtnActive": "_1nXeGW_segBtnActive",
5020
+ "segGroup": "_1nXeGW_segGroup",
5021
+ "searchWrap": "_1nXeGW_searchWrap",
4976
5022
  "searchInput": "_1nXeGW_searchInput",
4977
- "rowTitle": "_1nXeGW_rowTitle",
5023
+ "empty": "_1nXeGW_empty",
4978
5024
  "exampleBadge": "_1nXeGW_exampleBadge",
4979
- "rowDesc": "_1nXeGW_rowDesc",
4980
- "segRow": "_1nXeGW_segRow",
4981
- "updateBadge": "_1nXeGW_updateBadge",
4982
- "segLabel": "_1nXeGW_segLabel",
4983
5025
  "list": "_1nXeGW_list",
4984
- "rowRestart": "_1nXeGW_rowRestart",
4985
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4986
- "rowUpdate": "_1nXeGW_rowUpdate",
4987
- "versionBadge": "_1nXeGW_versionBadge",
4988
- "exampleRow": "_1nXeGW_exampleRow",
4989
- "segGroup": "_1nXeGW_segGroup",
4990
- "rowRepo": "_1nXeGW_rowRepo",
4991
- "statusPending": "_1nXeGW_statusPending",
4992
- "empty": "_1nXeGW_empty",
5026
+ "segLabel": "_1nXeGW_segLabel",
5027
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
5028
+ "statusInactive": "_1nXeGW_statusInactive",
4993
5029
  "root": "_1nXeGW_root",
4994
- "emptyTitle": "_1nXeGW_emptyTitle",
4995
- "segBtnActive": "_1nXeGW_segBtnActive",
4996
- "emptyDesc": "_1nXeGW_emptyDesc",
4997
5030
  "rowTitleLine": "_1nXeGW_rowTitleLine",
5031
+ "rowTitle": "_1nXeGW_rowTitle",
5032
+ "emptyTitle": "_1nXeGW_emptyTitle",
5033
+ "segBtn": "_1nXeGW_segBtn",
5034
+ "row": "_1nXeGW_row",
5035
+ "versionBadge": "_1nXeGW_versionBadge",
5036
+ "segRow": "_1nXeGW_segRow",
5037
+ "rowCategory": "_1nXeGW_rowCategory",
5038
+ "rowActions": "_1nXeGW_rowActions",
5039
+ "rowUpdate": "_1nXeGW_rowUpdate",
5040
+ "rowUninstall": "_1nXeGW_rowUninstall",
5041
+ "updateBadge": "_1nXeGW_updateBadge",
5042
+ "statusPending": "_1nXeGW_statusPending",
5043
+ "rowDetail": "_1nXeGW_rowDetail",
5044
+ "rowRepo": "_1nXeGW_rowRepo",
4998
5045
  "rowMeta": "_1nXeGW_rowMeta",
4999
- "rowMain": "_1nXeGW_rowMain"
5046
+ "exampleRow": "_1nXeGW_exampleRow",
5047
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual"
5000
5048
  };
5001
5049
  //#endregion
5002
5050
  //#region src/client/components/views/InstalledView.tsx
@@ -5240,27 +5288,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5240
5288
  css: css$6
5241
5289
  });
5242
5290
  var CustomInstallView_module_css_default = {
5243
- "desc": "zISxCG_desc",
5244
- "installCardHead": "zISxCG_installCardHead",
5245
5291
  "installCards": "zISxCG_installCards",
5246
- "channelOffText": "zISxCG_channelOffText",
5247
- "installError": "zISxCG_installError",
5292
+ "helpNote": "zISxCG_helpNote",
5293
+ "root": "zISxCG_root",
5248
5294
  "installExample": "zISxCG_installExample",
5249
- "installLabel": "zISxCG_installLabel",
5250
- "installInputError": "zISxCG_installInputError",
5251
- "installBtn": "zISxCG_installBtn",
5295
+ "channelOffBtn": "zISxCG_channelOffBtn",
5252
5296
  "installCardDisabled": "zISxCG_installCardDisabled",
5253
- "installRow": "zISxCG_installRow",
5254
- "installInput": "zISxCG_installInput",
5255
- "installHelpBtn": "zISxCG_installHelpBtn",
5256
- "root": "zISxCG_root",
5257
- "helpBody": "zISxCG_helpBody",
5297
+ "desc": "zISxCG_desc",
5298
+ "installBtn": "zISxCG_installBtn",
5299
+ "installCardHead": "zISxCG_installCardHead",
5258
5300
  "helpCmd": "zISxCG_helpCmd",
5259
- "channelOffBtn": "zISxCG_channelOffBtn",
5301
+ "installLabel": "zISxCG_installLabel",
5302
+ "installRow": "zISxCG_installRow",
5260
5303
  "installCard": "zISxCG_installCard",
5261
- "channelOff": "zISxCG_channelOff",
5262
5304
  "helpLine": "zISxCG_helpLine",
5263
- "helpNote": "zISxCG_helpNote"
5305
+ "channelOff": "zISxCG_channelOff",
5306
+ "helpBody": "zISxCG_helpBody",
5307
+ "installError": "zISxCG_installError",
5308
+ "installInput": "zISxCG_installInput",
5309
+ "installInputError": "zISxCG_installInputError",
5310
+ "channelOffText": "zISxCG_channelOffText",
5311
+ "installHelpBtn": "zISxCG_installHelpBtn"
5264
5312
  };
5265
5313
  //#endregion
5266
5314
  //#region src/client/components/views/CustomInstallView.tsx
@@ -5416,30 +5464,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5416
5464
  css: css$5
5417
5465
  });
5418
5466
  var SettingsView_module_css_default = {
5467
+ "proxyHint": "_506LLG_proxyHint",
5419
5468
  "resetBtn": "_506LLG_resetBtn",
5420
- "pageTitle": "_506LLG_pageTitle",
5421
- "settingDesc": "_506LLG_settingDesc",
5422
- "controlDropdown": "_506LLG_controlDropdown",
5469
+ "settingControlStack": "_506LLG_settingControlStack",
5470
+ "proxyHintFail": "_506LLG_proxyHintFail",
5471
+ "navIcon": "_506LLG_navIcon",
5472
+ "proxyControl": "_506LLG_proxyControl",
5423
5473
  "settingTitle": "_506LLG_settingTitle",
5424
5474
  "navItem": "_506LLG_navItem",
5425
- "navIcon": "_506LLG_navIcon",
5426
- "pageHeader": "_506LLG_pageHeader",
5427
5475
  "settingRow": "_506LLG_settingRow",
5476
+ "sidebar": "_506LLG_sidebar",
5477
+ "settingRowStack": "_506LLG_settingRowStack",
5428
5478
  "root": "_506LLG_root",
5429
- "pageDesc": "_506LLG_pageDesc",
5430
- "settingControl": "_506LLG_settingControl",
5479
+ "controlDropdown": "_506LLG_controlDropdown",
5480
+ "pageHeader": "_506LLG_pageHeader",
5481
+ "pageTitle": "_506LLG_pageTitle",
5482
+ "settingLabel": "_506LLG_settingLabel",
5431
5483
  "textInput": "_506LLG_textInput",
5432
- "proxyHint": "_506LLG_proxyHint",
5484
+ "settingDesc": "_506LLG_settingDesc",
5485
+ "settingControl": "_506LLG_settingControl",
5486
+ "pageDesc": "_506LLG_pageDesc",
5487
+ "card": "_506LLG_card",
5433
5488
  "proxyHintOk": "_506LLG_proxyHintOk",
5434
- "settingRowStack": "_506LLG_settingRowStack",
5435
- "sidebar": "_506LLG_sidebar",
5436
- "navItemActive": "_506LLG_navItemActive",
5437
- "settingControlStack": "_506LLG_settingControlStack",
5438
5489
  "content": "_506LLG_content",
5439
- "proxyControl": "_506LLG_proxyControl",
5440
- "proxyHintFail": "_506LLG_proxyHintFail",
5441
- "card": "_506LLG_card",
5442
- "settingLabel": "_506LLG_settingLabel"
5490
+ "navItemActive": "_506LLG_navItemActive"
5443
5491
  };
5444
5492
  //#endregion
5445
5493
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -5458,18 +5506,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5458
5506
  css: css$4
5459
5507
  });
5460
5508
  var Dropdown_module_css_default = {
5461
- "dropdownPanel": "B_Gxsq_dropdownPanel",
5462
- "dropdown": "B_Gxsq_dropdown",
5463
- "dropdownItem": "B_Gxsq_dropdownItem",
5464
- "dropdownCountActive": "B_Gxsq_dropdownCountActive",
5465
- "dropdownLabel": "B_Gxsq_dropdownLabel",
5466
5509
  "dropdownFill": "B_Gxsq_dropdownFill",
5510
+ "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5511
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
5467
5512
  "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5513
+ "dropdownCount": "B_Gxsq_dropdownCount",
5514
+ "dropdownCountActive": "B_Gxsq_dropdownCountActive",
5468
5515
  "dropdownArrow": "B_Gxsq_dropdownArrow",
5469
- "dropdownBtn": "B_Gxsq_dropdownBtn",
5516
+ "dropdownItem": "B_Gxsq_dropdownItem",
5470
5517
  "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
5471
- "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5472
- "dropdownCount": "B_Gxsq_dropdownCount"
5518
+ "dropdownBtn": "B_Gxsq_dropdownBtn",
5519
+ "dropdown": "B_Gxsq_dropdown",
5520
+ "dropdownPanel": "B_Gxsq_dropdownPanel"
5473
5521
  };
5474
5522
  //#endregion
5475
5523
  //#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
@@ -5488,9 +5536,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5488
5536
  css: css$3
5489
5537
  });
5490
5538
  var Toggle_module_css_default = {
5491
- "toggleOn": "k-cD4G_toggleOn",
5539
+ "toggle": "k-cD4G_toggle",
5492
5540
  "knob": "k-cD4G_knob",
5493
- "toggle": "k-cD4G_toggle"
5541
+ "toggleOn": "k-cD4G_toggleOn"
5494
5542
  };
5495
5543
  //#endregion
5496
5544
  //#region src/client/components/ui/Toggle.tsx
@@ -5587,29 +5635,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5587
5635
  css: css$2
5588
5636
  });
5589
5637
  var DiagnosticsView_module_css_default = {
5590
- "summary": "k9eRya_summary",
5591
- "envRow": "k9eRya_envRow",
5592
- "row": "k9eRya_row",
5593
- "envCopyBtn": "k9eRya_envCopyBtn",
5594
- "meta": "k9eRya_meta",
5595
5638
  "envLabel": "k9eRya_envLabel",
5639
+ "head": "k9eRya_head",
5640
+ "envTitle": "k9eRya_envTitle",
5641
+ "summary": "k9eRya_summary",
5642
+ "badge": "k9eRya_badge",
5643
+ "panel": "k9eRya_panel",
5596
5644
  "headHint": "k9eRya_headHint",
5645
+ "diagPulse": "k9eRya_diagPulse",
5646
+ "envCopyBtn": "k9eRya_envCopyBtn",
5647
+ "badgeIdle": "k9eRya_badgeIdle",
5648
+ "summaryFail": "k9eRya_summaryFail",
5649
+ "envRow": "k9eRya_envRow",
5597
5650
  "name": "k9eRya_name",
5598
- "badge": "k9eRya_badge",
5651
+ "meta": "k9eRya_meta",
5599
5652
  "badgeFail": "k9eRya_badgeFail",
5600
- "diagPulse": "k9eRya_diagPulse",
5601
- "summaryRunning": "k9eRya_summaryRunning",
5602
- "badgeOk": "k9eRya_badgeOk",
5603
- "head": "k9eRya_head",
5604
- "runBtn": "k9eRya_runBtn",
5605
- "badgeRunning": "k9eRya_badgeRunning",
5653
+ "row": "k9eRya_row",
5606
5654
  "envDesc": "k9eRya_envDesc",
5607
- "badgeIdle": "k9eRya_badgeIdle",
5608
- "panel": "k9eRya_panel",
5609
- "envTitle": "k9eRya_envTitle",
5610
5655
  "display": "k9eRya_display",
5611
- "summaryFail": "k9eRya_summaryFail",
5612
- "summaryOk": "k9eRya_summaryOk"
5656
+ "runBtn": "k9eRya_runBtn",
5657
+ "badgeRunning": "k9eRya_badgeRunning",
5658
+ "badgeOk": "k9eRya_badgeOk",
5659
+ "summaryOk": "k9eRya_summaryOk",
5660
+ "summaryRunning": "k9eRya_summaryRunning"
5613
5661
  };
5614
5662
  //#endregion
5615
5663
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5784,57 +5832,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5784
5832
  css: css$1
5785
5833
  });
5786
5834
  var LogsView_module_css_default = {
5787
- "headActions": "_3j77BW_headActions",
5788
- "catDiagnostics": "_3j77BW_catDiagnostics",
5789
- "filterChipActive": "_3j77BW_filterChipActive",
5790
- "moreEnd": "_3j77BW_moreEnd",
5791
- "empty": "_3j77BW_empty",
5792
- "pathDialogReset": "_3j77BW_pathDialogReset",
5793
- "actions": "_3j77BW_actions",
5794
- "pathDialogFoot": "_3j77BW_pathDialogFoot",
5795
- "foot": "_3j77BW_foot",
5796
- "catSettings": "_3j77BW_catSettings",
5797
- "pathDraft": "_3j77BW_pathDraft",
5798
- "badgeDebug": "_3j77BW_badgeDebug",
5799
- "badge": "_3j77BW_badge",
5800
- "catUpdate": "_3j77BW_catUpdate",
5801
- "pathText": "_3j77BW_pathText",
5802
- "footFail": "_3j77BW_footFail",
5803
- "pathDialogHint": "_3j77BW_pathDialogHint",
5804
- "pathDialog": "_3j77BW_pathDialog",
5805
- "btn": "_3j77BW_btn",
5806
- "event": "_3j77BW_event",
5807
- "head": "_3j77BW_head",
5808
5835
  "pathRow": "_3j77BW_pathRow",
5836
+ "foot": "_3j77BW_foot",
5809
5837
  "message": "_3j77BW_message",
5838
+ "more": "_3j77BW_more",
5839
+ "badgeWarn": "_3j77BW_badgeWarn",
5840
+ "badgeInfo": "_3j77BW_badgeInfo",
5810
5841
  "time": "_3j77BW_time",
5811
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
5842
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5843
+ "headHint": "_3j77BW_headHint",
5812
5844
  "clearBtn": "_3j77BW_clearBtn",
5845
+ "filterChip": "_3j77BW_filterChip",
5846
+ "searchInput": "_3j77BW_searchInput",
5847
+ "pathText": "_3j77BW_pathText",
5813
5848
  "footActions": "_3j77BW_footActions",
5814
- "badgeInfo": "_3j77BW_badgeInfo",
5849
+ "badgeError": "_3j77BW_badgeError",
5850
+ "list": "_3j77BW_list",
5851
+ "pathDialogHint": "_3j77BW_pathDialogHint",
5852
+ "previewRow": "_3j77BW_previewRow",
5853
+ "filterChipActive": "_3j77BW_filterChipActive",
5854
+ "entry": "_3j77BW_entry",
5855
+ "pathLabel": "_3j77BW_pathLabel",
5815
5856
  "catUninstall": "_3j77BW_catUninstall",
5857
+ "badgeSuccess": "_3j77BW_badgeSuccess",
5858
+ "empty": "_3j77BW_empty",
5859
+ "catUpdate": "_3j77BW_catUpdate",
5860
+ "logList": "_3j77BW_logList",
5816
5861
  "catInstall": "_3j77BW_catInstall",
5817
- "footCount": "_3j77BW_footCount",
5818
- "catSystem": "_3j77BW_catSystem",
5819
- "linkBtn": "_3j77BW_linkBtn",
5862
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5820
5863
  "search": "_3j77BW_search",
5821
- "badgeError": "_3j77BW_badgeError",
5822
- "badgeWarn": "_3j77BW_badgeWarn",
5823
- "headHint": "_3j77BW_headHint",
5824
- "logList": "_3j77BW_logList",
5825
- "footPath": "_3j77BW_footPath",
5826
- "pathLabel": "_3j77BW_pathLabel",
5827
- "filterChip": "_3j77BW_filterChip",
5828
- "more": "_3j77BW_more",
5829
- "previewRow": "_3j77BW_previewRow",
5864
+ "pathDialog": "_3j77BW_pathDialog",
5865
+ "moreEnd": "_3j77BW_moreEnd",
5866
+ "footFail": "_3j77BW_footFail",
5867
+ "catSettings": "_3j77BW_catSettings",
5868
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5830
5869
  "filterBar": "_3j77BW_filterBar",
5831
- "list": "_3j77BW_list",
5832
- "searchInput": "_3j77BW_searchInput",
5833
- "badgeSuccess": "_3j77BW_badgeSuccess",
5834
- "entry": "_3j77BW_entry",
5870
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5871
+ "event": "_3j77BW_event",
5872
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5873
+ "actions": "_3j77BW_actions",
5874
+ "linkBtn": "_3j77BW_linkBtn",
5875
+ "pathDraft": "_3j77BW_pathDraft",
5876
+ "headActions": "_3j77BW_headActions",
5835
5877
  "catBadge": "_3j77BW_catBadge",
5836
- "pathDialogRow": "_3j77BW_pathDialogRow",
5837
- "panel": "_3j77BW_panel"
5878
+ "footCount": "_3j77BW_footCount",
5879
+ "btn": "_3j77BW_btn",
5880
+ "catSystem": "_3j77BW_catSystem",
5881
+ "footPath": "_3j77BW_footPath",
5882
+ "head": "_3j77BW_head",
5883
+ "badge": "_3j77BW_badge",
5884
+ "panel": "_3j77BW_panel",
5885
+ "badgeDebug": "_3j77BW_badgeDebug"
5838
5886
  };
5839
5887
  //#endregion
5840
5888
  //#region src/client/components/modals/LogsModal.tsx
@@ -6698,6 +6746,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6698
6746
  /** 结果视图是否显示「关闭后自动刷新」说明:插件已热挂进运行中 loader(安装)、或卸载后
6699
6747
  * 插件面板仍残留在当前页面(卸载)。关闭弹窗即整页刷新,不给手动刷新按钮。 */
6700
6748
  const [installNeedsReload, setInstallNeedsReload] = (0, react.useState)(false);
6749
+ /** 市场自更新成功、但 profile 的 bundle 列表里已不含 dsh-plugin:结果页提示重新勾选 */
6750
+ const [installBundleDeselected, setInstallBundleDeselected] = (0, react.useState)(false);
6701
6751
  const [uninstallNeedsReload, setUninstallNeedsReload] = (0, react.useState)(false);
6702
6752
  /** 结果视图「立即重启」:请求宿主重启后进入等待,服务回来后整页刷新 */
6703
6753
  const [restarting, setRestarting] = (0, react.useState)(false);
@@ -6732,10 +6782,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6732
6782
  t,
6733
6783
  langKey,
6734
6784
  refreshInstalled: catalog.refreshInstalled,
6735
- onInstallDone: (viaModal, repo, needsRestart, update, needsReload) => {
6785
+ onInstallDone: (viaModal, repo, needsRestart, update, needsReload, bundleDeselected) => {
6736
6786
  const reload = needsReload === true;
6737
6787
  setInstallNeedsRestart(needsRestart);
6738
6788
  setInstallNeedsReload(reload);
6789
+ setInstallBundleDeselected(bundleDeselected === true);
6739
6790
  if (viaModal) setInstallDone(true);
6740
6791
  else setToast({
6741
6792
  id: Date.now(),
@@ -7092,7 +7143,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
7092
7143
  openSection: settingsSection,
7093
7144
  onConsumedOpenSection: () => setSettingsSection(null)
7094
7145
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
7095
- info: catalog.hubUpdateInfo ?? { version: "2.0.3" },
7146
+ info: catalog.hubUpdateInfo ?? { version: "2.0.5" },
7096
7147
  state: catalog.hubUpdateState,
7097
7148
  currentVersion: catalog.hubCurrentVersion,
7098
7149
  lang,
@@ -7184,9 +7235,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
7184
7235
  submitting: queue.submitting,
7185
7236
  needsRestart: installNeedsRestart,
7186
7237
  needsReload: installNeedsReload,
7238
+ bundleDeselected: installBundleDeselected,
7187
7239
  onClose: () => {
7188
7240
  const reload = installDone && installNeedsReload;
7189
7241
  setConfirmPlugin(null);
7242
+ setInstallBundleDeselected(false);
7190
7243
  if (reload) window.location.reload();
7191
7244
  },
7192
7245
  onCopy: () => copyCommand(confirmPlugin),