dsh-plugin 2.0.4 → 2.0.6

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 (35) hide show
  1. package/README.en.md +2 -0
  2. package/README.md +2 -0
  3. package/client/client.js +382 -332
  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/preflight.js +36 -0
  8. package/lib/services/install/task-queue.js +24 -19
  9. package/lib/services/probe.js +10 -5
  10. package/lib/services/profile/profile.js +14 -0
  11. package/lib/types/services/install/install-types.d.ts +3 -1
  12. package/lib/types/services/install/preflight.d.ts +11 -0
  13. package/lib/types/services/probe.d.ts +2 -1
  14. package/lib/types/services/profile/profile.d.ts +3 -0
  15. package/package.json +1 -1
  16. package/src/client/components/PluginHubSection.tsx +6 -1
  17. package/src/client/components/catalog/CatalogList.tsx +5 -1
  18. package/src/client/components/layout/SectionTabs.tsx +2 -1
  19. package/src/client/components/modals/modals.tsx +8 -2
  20. package/src/client/components/views/MarketView.tsx +1 -0
  21. package/src/client/data/catalog.ts +9 -7
  22. package/src/client/hooks/useCatalog.ts +10 -4
  23. package/src/client/hooks/useTaskQueue.ts +10 -5
  24. package/src/client/locales.ts +12 -4
  25. package/src/client/logic/failures.ts +12 -3
  26. package/src/client/logic/installed.ts +10 -6
  27. package/src/client/styles/Modal.module.css +9 -0
  28. package/src/client/styles/SectionTabs.module.css +18 -0
  29. package/src/server/http/catalog.ts +24 -3
  30. package/src/server/http/diagnostics.ts +36 -10
  31. package/src/server/services/install/install-types.ts +3 -1
  32. package/src/server/services/install/preflight.ts +37 -0
  33. package/src/server/services/install/task-queue.ts +23 -18
  34. package/src/server/services/probe.ts +10 -5
  35. 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 用终端),完整步骤见作者仓库的安装说明。",
@@ -302,6 +304,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
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 后重试。这不是插件本身的问题。",
304
306
  failBuildToolchainHint: "这个插件依赖需要在本机编译的原生模块,但机器上缺少可用的编译工具链。请按系统安装后重试:Windows 安装 Visual Studio Build Tools(含「使用 C++ 的桌面开发」);macOS 执行 xcode-select --install;Linux 安装 build-essential、python3 与 make。若装好工具链后仍然失败,再向插件作者反馈,请其提供预构建产物。",
307
+ bundleDeselectedHint: "注意:插件市场在当前 profile 的 bundle 列表中被取消勾选,重启宿主后它不会出现。请到「设置 → 插件」重新勾选 dsh-plugin。",
305
308
  failPnpmStoreHint: "安装器调用 pnpm 时报「store 位置不匹配」(ERR_PNPM_UNEXPECTED_STORE):你的 profile 目录里旧插件依赖是用另一个大版本的 pnpm 生成的,当前 pnpm 出于安全不认旧目录,导致任何插件装进该 profile 都会失败。请删除该 profile 目录下的 node_modules 与 pnpm-lock.yaml(可先到「系统日志」或 ~/.dsh/profiles/<profile>/hub.log 查看完整报错),再重新安装。这不是插件本身的问题。",
306
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 补丁条目后重试。",
307
310
  failPnpmMissingDepTarget: "{pkg} 在 npm registry 上不存在(404)",
@@ -373,6 +376,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
373
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 后重试。",
374
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 升级到最新版再试。",
375
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>),分支再更新也不会改变校验和。",
376
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 查看完整报错)。",
377
381
  failPnpmReleaseAgeHint: "安装器调用 pnpm 时被其供应链安全策略拦住了,任何插件装进这个 profile 都会先撞上它——与插件本身无关。原因是这个包发布还不满 24 小时,pnpm 11 出于安全会拒收刚发布的新包,这段时间内该 profile 的安装与卸载都会被拦下。可重试时间:{time}(即该包发布满 24 小时后)。如确需立刻安装,可在 profile 目录(~/.dsh/profiles/<profile>)的 pnpm-workspace.yaml 里加 minimumReleaseAge: 0 豁免,但这会放宽整个 profile 的供应链保护。",
378
382
  installChannelNpm: "NPM 包",
@@ -432,9 +436,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
432
436
  fork: "Fork",
433
437
  loading: "Loading plugin data…",
434
438
  failed: "Failed to load plugin data",
435
- 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.",
436
- 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.",
437
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)",
438
444
  install: "Install",
439
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",
440
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.",
@@ -706,6 +712,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
706
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.",
707
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.",
708
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.",
709
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.",
710
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.",
711
718
  failPnpmMissingDepTarget: "{pkg} was not found on the npm registry (404)",
@@ -777,6 +784,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
777
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.",
778
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.",
779
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.",
780
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.",
781
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.",
782
790
  installChannelNpm: "NPM package",
@@ -834,46 +842,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
834
842
  css: css$11
835
843
  });
836
844
  var Header_module_css_default = {
845
+ "aboutBtn": "qikqja_aboutBtn",
837
846
  "version": "qikqja_version",
838
- "adText": "qikqja_adText",
839
- "githubLink": "qikqja_githubLink",
840
- "versionBtn": "qikqja_versionBtn",
847
+ "resultCount": "qikqja_resultCount",
848
+ "taglineLink": "qikqja_taglineLink",
849
+ "resultSeg": "qikqja_resultSeg",
850
+ "title": "qikqja_title",
841
851
  "adBanner": "qikqja_adBanner",
842
- "header": "qikqja_header",
843
- "headerRight": "qikqja_headerRight",
844
- "tabs": "qikqja_tabs",
852
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
853
+ "adBadge": "qikqja_adBadge",
845
854
  "segLabel": "qikqja_segLabel",
846
- "segBtnActive": "qikqja_segBtnActive",
847
- "resultSeg": "qikqja_resultSeg",
848
- "sortGroup": "qikqja_sortGroup",
849
- "headerTitleRow": "qikqja_headerTitleRow",
855
+ "headerRight": "qikqja_headerRight",
850
856
  "segGroup": "qikqja_segGroup",
851
- "adBadge": "qikqja_adBadge",
852
- "langBtn": "qikqja_langBtn",
853
- "aboutBtn": "qikqja_aboutBtn",
857
+ "sortGroup": "qikqja_sortGroup",
854
858
  "tabCount": "qikqja_tabCount",
855
- "tabActive": "qikqja_tabActive",
856
- "taglineLink": "qikqja_taglineLink",
857
- "copyIcon": "qikqja_copyIcon",
858
- "tabsRow": "qikqja_tabsRow",
859
- "segBtn": "qikqja_segBtn",
860
859
  "root": "qikqja_root",
861
860
  "githubIcon": "qikqja_githubIcon",
862
- "logoIcon": "qikqja_logoIcon",
863
- "search": "qikqja_search",
861
+ "copyIcon": "qikqja_copyIcon",
862
+ "adText": "qikqja_adText",
863
+ "tabs": "qikqja_tabs",
864
+ "langBtn": "qikqja_langBtn",
865
+ "headerTitleRow": "qikqja_headerTitleRow",
864
866
  "adArrow": "qikqja_adArrow",
865
- "controls": "qikqja_controls",
866
867
  "brandTitle": "qikqja_brandTitle",
867
- "title": "qikqja_title",
868
- "tagline": "qikqja_tagline",
869
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
870
868
  "searchRow": "qikqja_searchRow",
869
+ "header": "qikqja_header",
870
+ "githubLink": "qikqja_githubLink",
871
+ "segBtn": "qikqja_segBtn",
872
+ "tagline": "qikqja_tagline",
873
+ "versionBtn": "qikqja_versionBtn",
874
+ "search": "qikqja_search",
871
875
  "tab": "qikqja_tab",
872
- "resultCount": "qikqja_resultCount"
876
+ "tabsRow": "qikqja_tabsRow",
877
+ "controls": "qikqja_controls",
878
+ "segBtnActive": "qikqja_segBtnActive",
879
+ "tabActive": "qikqja_tabActive",
880
+ "logoIcon": "qikqja_logoIcon"
873
881
  };
874
882
  //#endregion
875
883
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
876
- 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}";
877
885
  const tagId$10 = "dsh-plugin/Modal.module.css";
878
886
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
879
887
  const tag = document.createElement("style");
@@ -888,141 +896,142 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
888
896
  css: css$10
889
897
  });
890
898
  var Modal_module_css_default = {
891
- "failedCopyHint": "BiQ1zG_failedCopyHint",
892
- "dangerConfirm": "BiQ1zG_dangerConfirm",
893
- "resultRestarting": "BiQ1zG_resultRestarting",
894
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
895
- "modalLink": "BiQ1zG_modalLink",
896
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
897
- "noticeFoot": "BiQ1zG_noticeFoot",
898
- "failRow": "BiQ1zG_failRow",
899
- "errorBox": "BiQ1zG_errorBox",
900
- "queueRowTarget": "BiQ1zG_queueRowTarget",
901
- "noticeMain": "BiQ1zG_noticeMain",
902
- "detailStatusText": "BiQ1zG_detailStatusText",
903
- "restartNow": "BiQ1zG_restartNow",
904
- "toastIn": "BiQ1zG_toastIn",
905
- "errorTitle": "BiQ1zG_errorTitle",
906
- "noticeVersion": "BiQ1zG_noticeVersion",
907
- "noticeRowMain": "BiQ1zG_noticeRowMain",
908
- "detailRow": "BiQ1zG_detailRow",
909
- "trustHint": "BiQ1zG_trustHint",
910
- "resultDesc": "BiQ1zG_resultDesc",
911
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
912
- "failCopy": "BiQ1zG_failCopy",
913
- "detailLabel": "BiQ1zG_detailLabel",
899
+ "queueSection": "BiQ1zG_queueSection",
900
+ "resultCheck": "BiQ1zG_resultCheck",
901
+ "noticeRemove": "BiQ1zG_noticeRemove",
902
+ "helpModal": "BiQ1zG_helpModal",
914
903
  "failList": "BiQ1zG_failList",
915
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
916
- "failPrepareHint": "BiQ1zG_failPrepareHint",
917
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
918
- "modalWide": "BiQ1zG_modalWide",
919
- "modalTitle": "BiQ1zG_modalTitle",
920
- "modalBody": "BiQ1zG_modalBody",
921
- "noticeIgnore": "BiQ1zG_noticeIgnore",
904
+ "detailStars": "BiQ1zG_detailStars",
905
+ "detailPath": "BiQ1zG_detailPath",
906
+ "noticeFoot": "BiQ1zG_noticeFoot",
907
+ "queueRowBody": "BiQ1zG_queueRowBody",
908
+ "resultTitle": "BiQ1zG_resultTitle",
909
+ "failKindTitle": "BiQ1zG_failKindTitle",
910
+ "failKindInstall": "BiQ1zG_failKindInstall",
922
911
  "detailDim": "BiQ1zG_detailDim",
923
- "errorCopySoft": "BiQ1zG_errorCopySoft",
924
- "progressTrack": "BiQ1zG_progressTrack",
925
- "modalCmdText": "BiQ1zG_modalCmdText",
926
- "queueRowStatus": "BiQ1zG_queueRowStatus",
927
- "modalCmd": "BiQ1zG_modalCmd",
928
912
  "confirmIcon": "BiQ1zG_confirmIcon",
929
- "confirmPrimary": "BiQ1zG_confirmPrimary",
930
- "result": "BiQ1zG_result",
931
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
932
- "resultTitle": "BiQ1zG_resultTitle",
933
- "progressFillFail": "BiQ1zG_progressFillFail",
934
- "detailStatusPending": "BiQ1zG_detailStatusPending",
935
- "aboutMeta": "BiQ1zG_aboutMeta",
936
- "queueRow": "BiQ1zG_queueRow",
937
- "queuedHint": "BiQ1zG_queuedHint",
938
- "noticeRow": "BiQ1zG_noticeRow",
913
+ "stripCancel": "BiQ1zG_stripCancel",
914
+ "noticeRowOk": "BiQ1zG_noticeRowOk",
915
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
916
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
939
917
  "noticeTextFail": "BiQ1zG_noticeTextFail",
940
- "errorHint": "BiQ1zG_errorHint",
941
- "failNetworkTarget": "BiQ1zG_failNetworkTarget",
942
- "failKindUninstall": "BiQ1zG_failKindUninstall",
943
- "queueRowPct": "BiQ1zG_queueRowPct",
944
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
945
- "noticeList": "BiQ1zG_noticeList",
946
- "restartNowWarning": "BiQ1zG_restartNowWarning",
947
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
918
+ "noticeRow": "BiQ1zG_noticeRow",
919
+ "restartLater": "BiQ1zG_restartLater",
920
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
921
+ "modalCmd": "BiQ1zG_modalCmd",
922
+ "progressFillFail": "BiQ1zG_progressFillFail",
923
+ "detailRow": "BiQ1zG_detailRow",
924
+ "detailMono": "BiQ1zG_detailMono",
925
+ "overlayIn": "BiQ1zG_overlayIn",
926
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
927
+ "modalValue": "BiQ1zG_modalValue",
928
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
929
+ "restartNow": "BiQ1zG_restartNow",
930
+ "failRepo": "BiQ1zG_failRepo",
931
+ "detailModal": "BiQ1zG_detailModal",
932
+ "toast": "BiQ1zG_toast",
933
+ "modalLink": "BiQ1zG_modalLink",
934
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
948
935
  "modalDesc": "BiQ1zG_modalDesc",
936
+ "modalTitle": "BiQ1zG_modalTitle",
937
+ "modalLabel": "BiQ1zG_modalLabel",
938
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
939
+ "noticeMain": "BiQ1zG_noticeMain",
940
+ "noticeHead": "BiQ1zG_noticeHead",
941
+ "linkIcon": "BiQ1zG_linkIcon",
942
+ "queueRowHead": "BiQ1zG_queueRowHead",
943
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
949
944
  "pendingRowStatus": "BiQ1zG_pendingRowStatus",
950
- "noticeTime": "BiQ1zG_noticeTime",
951
- "queueRowDesc": "BiQ1zG_queueRowDesc",
952
- "failKindTitle": "BiQ1zG_failKindTitle",
945
+ "modalClose": "BiQ1zG_modalClose",
946
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
947
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
953
948
  "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
954
- "detailPathActions": "BiQ1zG_detailPathActions",
955
- "resultCheck": "BiQ1zG_resultCheck",
956
- "progress": "BiQ1zG_progress",
957
- "failHead": "BiQ1zG_failHead",
958
- "failRepoLabel": "BiQ1zG_failRepoLabel",
959
- "restartLater": "BiQ1zG_restartLater",
960
- "detailValue": "BiQ1zG_detailValue",
961
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
962
- "failEmpty": "BiQ1zG_failEmpty",
963
- "noticeRowOk": "BiQ1zG_noticeRowOk",
964
- "toastFail": "BiQ1zG_toastFail",
965
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
966
- "queueRowHead": "BiQ1zG_queueRowHead",
967
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
968
- "queueSection": "BiQ1zG_queueSection",
969
- "stripCancel": "BiQ1zG_stripCancel",
970
- "progressHead": "BiQ1zG_progressHead",
971
949
  "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
972
- "failKindInstall": "BiQ1zG_failKindInstall",
973
- "detailArrow": "BiQ1zG_detailArrow",
974
- "detailLink": "BiQ1zG_detailLink",
950
+ "queueRowPct": "BiQ1zG_queueRowPct",
951
+ "modalInstall": "BiQ1zG_modalInstall",
952
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
953
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
975
954
  "aboutContent": "BiQ1zG_aboutContent",
976
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
977
- "detailPath": "BiQ1zG_detailPath",
978
- "noticeRemove": "BiQ1zG_noticeRemove",
979
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
980
- "modalActions": "BiQ1zG_modalActions",
981
- "detailModal": "BiQ1zG_detailModal",
982
- "logModal": "BiQ1zG_logModal",
983
- "failRepoUrl": "BiQ1zG_failRepoUrl",
984
- "detailGrid": "BiQ1zG_detailGrid",
985
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
986
- "modal": "BiQ1zG_modal",
987
- "progressFill": "BiQ1zG_progressFill",
988
- "helpModal": "BiQ1zG_helpModal",
989
- "modalClose": "BiQ1zG_modalClose",
990
- "pendingRowActions": "BiQ1zG_pendingRowActions",
991
- "failDiagBtn": "BiQ1zG_failDiagBtn",
992
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
993
- "modalCancel": "BiQ1zG_modalCancel",
994
- "detailPathText": "BiQ1zG_detailPathText",
995
- "noticeTextOk": "BiQ1zG_noticeTextOk",
996
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
997
- "failReason": "BiQ1zG_failReason",
998
- "confirmIconWrap": "BiQ1zG_confirmIconWrap",
999
- "queueRowTrack": "BiQ1zG_queueRowTrack",
1000
- "modalCopy": "BiQ1zG_modalCopy",
955
+ "detailArrow": "BiQ1zG_detailArrow",
956
+ "noticeTime": "BiQ1zG_noticeTime",
957
+ "modalHead": "BiQ1zG_modalHead",
958
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
1001
959
  "errorModal": "BiQ1zG_errorModal",
960
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
961
+ "errorBox": "BiQ1zG_errorBox",
962
+ "failHead": "BiQ1zG_failHead",
1002
963
  "failBigIssue": "BiQ1zG_failBigIssue",
1003
964
  "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
1004
- "failRepo": "BiQ1zG_failRepo",
1005
- "linkIcon": "BiQ1zG_linkIcon",
1006
- "modalIn": "BiQ1zG_modalIn",
1007
- "overlay": "BiQ1zG_overlay",
1008
- "aboutModal": "BiQ1zG_aboutModal",
1009
- "detailPathBtn": "BiQ1zG_detailPathBtn",
1010
- "failClear": "BiQ1zG_failClear",
1011
- "detailStars": "BiQ1zG_detailStars",
1012
- "modalLabel": "BiQ1zG_modalLabel",
1013
- "queueRowBody": "BiQ1zG_queueRowBody",
1014
- "progressText": "BiQ1zG_progressText",
1015
- "detailMono": "BiQ1zG_detailMono",
1016
- "overlayIn": "BiQ1zG_overlayIn",
1017
- "noticeHead": "BiQ1zG_noticeHead",
1018
- "toast": "BiQ1zG_toast",
1019
- "modalInstall": "BiQ1zG_modalInstall",
1020
- "modalValue": "BiQ1zG_modalValue",
965
+ "modalCmdText": "BiQ1zG_modalCmdText",
966
+ "progressTrack": "BiQ1zG_progressTrack",
967
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
968
+ "detailPathActions": "BiQ1zG_detailPathActions",
969
+ "noticeVersion": "BiQ1zG_noticeVersion",
1021
970
  "failKind": "BiQ1zG_failKind",
1022
- "modalHead": "BiQ1zG_modalHead",
971
+ "resultDesc": "BiQ1zG_resultDesc",
972
+ "noticeList": "BiQ1zG_noticeList",
973
+ "failClear": "BiQ1zG_failClear",
974
+ "aboutModal": "BiQ1zG_aboutModal",
975
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
976
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
977
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
978
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
979
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
980
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
1023
981
  "failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
982
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
983
+ "toastFail": "BiQ1zG_toastFail",
1024
984
  "detailUpdateHint": "BiQ1zG_detailUpdateHint",
1025
- "modalRow": "BiQ1zG_modalRow"
985
+ "detailLink": "BiQ1zG_detailLink",
986
+ "detailLabel": "BiQ1zG_detailLabel",
987
+ "progressHead": "BiQ1zG_progressHead",
988
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
989
+ "detailPathText": "BiQ1zG_detailPathText",
990
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
991
+ "modalBody": "BiQ1zG_modalBody",
992
+ "overlay": "BiQ1zG_overlay",
993
+ "resultRestarting": "BiQ1zG_resultRestarting",
994
+ "failCopy": "BiQ1zG_failCopy",
995
+ "progressText": "BiQ1zG_progressText",
996
+ "queuedHint": "BiQ1zG_queuedHint",
997
+ "detailValue": "BiQ1zG_detailValue",
998
+ "modalRow": "BiQ1zG_modalRow",
999
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
1000
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
1001
+ "detailStatusText": "BiQ1zG_detailStatusText",
1002
+ "progressFill": "BiQ1zG_progressFill",
1003
+ "bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
1004
+ "toastIn": "BiQ1zG_toastIn",
1005
+ "modalIn": "BiQ1zG_modalIn",
1006
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
1007
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
1008
+ "errorHint": "BiQ1zG_errorHint",
1009
+ "failReason": "BiQ1zG_failReason",
1010
+ "errorTitle": "BiQ1zG_errorTitle",
1011
+ "modalWide": "BiQ1zG_modalWide",
1012
+ "modalCopy": "BiQ1zG_modalCopy",
1013
+ "modalCancel": "BiQ1zG_modalCancel",
1014
+ "detailGrid": "BiQ1zG_detailGrid",
1015
+ "queueRow": "BiQ1zG_queueRow",
1016
+ "logModal": "BiQ1zG_logModal",
1017
+ "result": "BiQ1zG_result",
1018
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
1019
+ "aboutMeta": "BiQ1zG_aboutMeta",
1020
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
1021
+ "progress": "BiQ1zG_progress",
1022
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
1023
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
1024
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
1025
+ "failRow": "BiQ1zG_failRow",
1026
+ "modal": "BiQ1zG_modal",
1027
+ "failRepoLabel": "BiQ1zG_failRepoLabel",
1028
+ "restartNowWarning": "BiQ1zG_restartNowWarning",
1029
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
1030
+ "modalActions": "BiQ1zG_modalActions",
1031
+ "failRepoUrl": "BiQ1zG_failRepoUrl",
1032
+ "trustHint": "BiQ1zG_trustHint",
1033
+ "failEmpty": "BiQ1zG_failEmpty",
1034
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy"
1026
1035
  };
1027
1036
  //#endregion
1028
1037
  //#region src/server/services/install/release-target.ts
@@ -1112,7 +1121,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1112
1121
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
1113
1122
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
1114
1123
  */
1115
- const PLUGIN_VERSION = "2.0.4";
1124
+ const PLUGIN_VERSION = "2.0.6";
1116
1125
  const CATEGORY_ORDER = [
1117
1126
  "interface",
1118
1127
  "session",
@@ -1370,8 +1379,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1370
1379
  //#endregion
1371
1380
  //#region src/client/data/catalog.ts
1372
1381
  const PROXY_BASE = "/dsh-plugin-hub/catalog";
1373
- const PLUGINS_URL = (lang) => `${PROXY_BASE}?lang=${lang}`;
1374
- 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" : ""}`;
1375
1384
  async function fetchJson(url, signal) {
1376
1385
  const res = await fetch(url, {
1377
1386
  cache: "no-store",
@@ -1381,14 +1390,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1381
1390
  return res.json();
1382
1391
  }
1383
1392
  /** 目录插件列表(在线 API 已只返回 verified;过滤与排序由上层负责)。
1384
- * signal 可选:宿主重启/代理抖动导致请求挂起时,上层可中止旧请求释放连接。 */
1385
- async function fetchCatalog(lang, signal) {
1386
- 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);
1387
1397
  return (Array.isArray(data) ? data : []).map((item) => normalize(item));
1388
1398
  }
1389
1399
  /** 收录/精选统计(/api/stats.json);字段不完整返回 null。 */
1390
- async function fetchStats(signal) {
1391
- const s = await fetchJson(STATS_URL, signal);
1400
+ async function fetchStats(signal, refresh = false) {
1401
+ const s = await fetchJson(STATS_URL(refresh), signal);
1392
1402
  if (s && typeof s.total === "number" && typeof s.verified === "number") return {
1393
1403
  total: s.total,
1394
1404
  verified: s.verified
@@ -1460,6 +1470,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1460
1470
  }
1461
1471
  //#endregion
1462
1472
  //#region src/client/logic/installed.ts
1473
+ /** 本地路径安装(file:/link:/绝对或相对路径):身份在本机,不能按 npm 包名认领目录条目。 */
1474
+ function isLocalSpec(value) {
1475
+ const v = value.trim();
1476
+ return /^(file|link):/i.test(v) || v.startsWith(".") || v.startsWith("/") || /^[A-Za-z]:[\\/]/.test(v);
1477
+ }
1463
1478
  /** 安装时记录的目录信号(按仓库小写 key 查表)。 */
1464
1479
  function signalOf(repo, versions) {
1465
1480
  if (!repo) return null;
@@ -1473,6 +1488,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1473
1488
  for (const [name, spec] of Object.entries(installed)) if (repoFromInstallTarget(spec).toLowerCase() === needle) return name;
1474
1489
  const pkg = ((plugin.source?.npmPackage || versions[repo.toLowerCase()]?.npmPackage) ?? "").toLowerCase();
1475
1490
  if (pkg) for (const [name, spec] of Object.entries(installed)) {
1491
+ if (isLocalSpec(spec)) continue;
1476
1492
  if (isRepoLike(repoFromInstallTarget(spec))) continue;
1477
1493
  if (name.toLowerCase() === pkg) return name;
1478
1494
  }
@@ -1652,10 +1668,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1652
1668
  * 界面停在「正在加载插件数据…」假死 —— 超时自动重拉,最多自动重试 2 次后转失败态;
1653
1669
  * 用户手动刷新(reload)时清零重新计数。 */
1654
1670
  const loadRetriesRef = (0, react.useRef)(0);
1655
- /** 目录加载超时阈值:超过即判定挂起,强制刷新一次(服务端代理 curl 上限 20s,客户端 12s 先兜底) */
1656
- const LOAD_TIMEOUT_MS = 12e3;
1657
- /** 挂起后最多自动重试次数:避免代理持续不通时无限循环刷新(每次重试仍 12s,2 次后转失败界面可手动重试) */
1671
+ /** 目录加载超时阈值:超过即判定挂起,强制刷新一次(服务端代理 curl 上限 60s,客户端 30s 先兜底) */
1672
+ const LOAD_TIMEOUT_MS = 3e4;
1673
+ /** 挂起后最多自动重试次数:避免代理持续不通时无限循环刷新(每次重试仍 30s,2 次后转失败界面可手动重试) */
1658
1674
  const MAX_LOAD_RETRIES = 2;
1675
+ /** 本次 reload 是否强制回源(跳过服务端 1 小时缓存):由「强制刷新」置位,读取后立即复位 */
1676
+ const forceRefreshRef = (0, react.useRef)(false);
1659
1677
  /** 点击排序按钮:同一按钮切换正/倒序,新按钮用默认方向 */
1660
1678
  function toggleSort(key) {
1661
1679
  if (key === sort) setSortDir((d) => d === "asc" ? "desc" : "asc");
@@ -1694,11 +1712,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1694
1712
  let cancelled = false;
1695
1713
  let settled = false;
1696
1714
  const controller = new AbortController();
1715
+ const refresh = forceRefreshRef.current;
1716
+ forceRefreshRef.current = false;
1697
1717
  setPlugins(null);
1698
1718
  setHubPlugin(null);
1699
1719
  setStats(null);
1700
1720
  setFailed(false);
1701
- const load = () => Promise.all([fetchCatalog(lang, controller.signal), fetchStats(controller.signal)]);
1721
+ const load = () => Promise.all([fetchCatalog(lang, controller.signal, refresh), fetchStats(controller.signal, refresh)]);
1702
1722
  load().then(([list, stats]) => {
1703
1723
  if (cancelled) return;
1704
1724
  settled = true;
@@ -1861,7 +1881,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1861
1881
  * registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
1862
1882
  * 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
1863
1883
  */
1864
- const hubCurrentVersion = "2.0.4";
1884
+ const hubCurrentVersion = "2.0.6";
1865
1885
  const hubUpdateState = (() => {
1866
1886
  if (!hubUpdateInfo) return "none";
1867
1887
  if (hubUpdateInfo.version === hubCurrentVersion) return "latest";
@@ -1912,6 +1932,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1912
1932
  loadRetriesRef.current = 0;
1913
1933
  setReloadKey((k) => k + 1);
1914
1934
  },
1935
+ /** 强制刷新:跳过服务端 1 小时缓存直接回源,成功后覆盖缓存(失败仍回退旧缓存) */
1936
+ forceReload: () => {
1937
+ loadRetriesRef.current = 0;
1938
+ forceRefreshRef.current = true;
1939
+ setReloadKey((k) => k + 1);
1940
+ },
1915
1941
  installed,
1916
1942
  installedItems,
1917
1943
  installedName,
@@ -2065,6 +2091,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2065
2091
  function missingTarballIntegrity(message) {
2066
2092
  return /\bERR_PNPM_MISSING_TARBALL_INTEGRITY\b/.test(message);
2067
2093
  }
2094
+ /** GitHub 分支 tarball 内容变了、锁文件里还是旧校验和(ERR_PNPM_TARBALL_INTEGRITY)。
2095
+ * \b 保证不会命中 ERR_PNPM_MISSING_TARBALL_INTEGRITY:前者是有校验值但对不上,
2096
+ * 后者是锁文件里压根没有校验值。 */
2097
+ function mismatchedTarballIntegrity(message) {
2098
+ return /\bERR_PNPM_TARBALL_INTEGRITY\b/.test(message);
2099
+ }
2068
2100
  /** pnpm 拒收「刚发布」包时,报错里带着发布时间;这里从报错文本算出「发布满 24h」的可重试时刻(UTC,分钟精度)。 */
2069
2101
  function releaseAgeRetryAfter(message) {
2070
2102
  const match = /published at (\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)/.exec(message);
@@ -2079,6 +2111,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2079
2111
  * 避免出现「预计可重试时间:」后接空值的残缺句子。
2080
2112
  */
2081
2113
  function pnpmPolicyHintOf(message) {
2114
+ if (mismatchedTarballIntegrity(message)) return "failPnpmTarballMismatchHint";
2082
2115
  if (missingTarballIntegrity(message)) return "failPnpmTarballIntegrityHint";
2083
2116
  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";
2084
2117
  return "failPnpmPolicyHint";
@@ -2102,7 +2135,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2102
2135
  if (/ERR_PNPM_UNEXPECTED_(VIRTUAL_)?STORE|Unexpected (virtual )?store location/i.test(message)) return "pnpmStore";
2103
2136
  if (/ERR_PNPM_ADDING_TO_ROOT|add the dependency to the workspace root/i.test(message)) return "pnpmWorkspace";
2104
2137
  if (/(^|\n)untrusted origin\s*$/.test(message)) return "originRejected";
2105
- 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";
2138
+ 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";
2106
2139
  if (/ERR_PNPM_UNUSED_PATCH|patches were not used/i.test(message)) return "pnpmUnusedPatch";
2107
2140
  if (/os error 32|EBUSY|resource busy or locked|being used by another process/i.test(message)) return "fileLocked";
2108
2141
  if (/os error 5\b|ERROR_ACCESS_DENIED|\bEPERM\b|\bEACCES\b|access is denied/i.test(message)) return "accessDenied";
@@ -2676,7 +2709,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2676
2709
  desc: q.desc,
2677
2710
  version: q.version
2678
2711
  });
2679
- onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.action === "update", q.needsReload ?? false);
2712
+ onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.action === "update", q.needsReload ?? false, q.bundleDeselected === true);
2680
2713
  }
2681
2714
  } else {
2682
2715
  const rawDetail = lines.length > 0 ? [...lines].reverse().join("\n") : q.kind === "uninstall" ? t("uninstallFail") : t("installFail");
@@ -2717,6 +2750,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2717
2750
  let status = "failed";
2718
2751
  let lines = [];
2719
2752
  let attempts;
2753
+ let bundleDeselected;
2720
2754
  try {
2721
2755
  const res = await fetch(`/dsh-plugin-hub/status?task=${q.id}`, { cache: "no-store" });
2722
2756
  if (res.ok) {
@@ -2725,13 +2759,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2725
2759
  status = task.status ?? "failed";
2726
2760
  lines = task.lines ?? [];
2727
2761
  attempts = Array.isArray(task.attempts) ? task.attempts : void 0;
2762
+ bundleDeselected = task.bundleDeselected === true ? true : void 0;
2728
2763
  const needsRestart = typeof task.needsRestart === "boolean" ? task.needsRestart : q.needsRestart;
2729
2764
  const needsReload = typeof task.needsReload === "boolean" ? task.needsReload : q.needsReload ?? false;
2730
2765
  if (status === "done") {
2731
2766
  const settled = {
2732
2767
  ...q,
2733
2768
  needsRestart,
2734
- needsReload
2769
+ needsReload,
2770
+ bundleDeselected: bundleDeselected === true ? true : q.bundleDeselected
2735
2771
  };
2736
2772
  if (q.kind === "uninstall") settleDone(settled, lines);
2737
2773
  else finishQueueTask(true, settled, lines);
@@ -2782,6 +2818,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2782
2818
  lines: Array.isArray(a.lines) ? a.lines : prevTask?.lines ?? [],
2783
2819
  attempts: Array.isArray(a.attempts) ? a.attempts : prevTask?.attempts ?? [],
2784
2820
  needsRestart: typeof a.needsRestart === "boolean" ? a.needsRestart : prevTask?.needsRestart ?? true,
2821
+ bundleDeselected: a.bundleDeselected === true || prevTask?.bundleDeselected === true,
2785
2822
  channel: a.installChannel === "npm" ? "npm" : prevTask?.channel
2786
2823
  });
2787
2824
  }
@@ -3590,7 +3627,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3590
3627
  * 按钮(重启会中断进行中的任务,故仍需用户确认),关闭即放弃;
3591
3628
  * - 其余(含 needsReload=true 的「已热挂载、仅剩客户端 UI」)→ 仅「完成」按钮:关闭结果弹窗时
3592
3629
  * 上层自动刷新页面让插件生效,不再给「稍后/立即刷新」手动选择。 */
3593
- function ResultView({ title, desc, t, restarting, needsRestart, needsReload, onRestart, onClose }) {
3630
+ function ResultView({ title, desc, t, restarting, needsRestart, needsReload, bundleDeselected, onRestart, onClose }) {
3594
3631
  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", {
3595
3632
  className: Modal_module_css_default.resultCheckIcon,
3596
3633
  viewBox: "0 0 16 16",
@@ -3604,7 +3641,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3604
3641
  strokeWidth: 2,
3605
3642
  strokeLinecap: "round",
3606
3643
  strokeLinejoin: "round"
3607
- }))), (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", {
3644
+ }))), (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", {
3608
3645
  className: Modal_module_css_default.restartNowWarning,
3609
3646
  onClick: onRestart,
3610
3647
  disabled: restarting
@@ -3619,7 +3656,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3619
3656
  * 目录插件与命令行安装(customTarget 模式)共用同一套确认/进度/结果流程。
3620
3657
  */
3621
3658
  function InstallModal(props) {
3622
- const { plugin, customTarget, globalNpm, done, task, t, langPath, restarting, submitting, update, cliOnly, needsRestart, needsReload, onClose, onCopy, onInstall, onRestart } = props;
3659
+ const { plugin, customTarget, globalNpm, done, task, t, langPath, restarting, submitting, update, cliOnly, needsRestart, needsReload, bundleDeselected, onClose, onCopy, onInstall, onRestart } = props;
3623
3660
  const busy = submitting || task !== null && (task.status === "pending" || task.status === "running");
3624
3661
  const name = customTarget ?? (globalNpm !== void 0 && globalNpm.length > 0 ? globalNpm.join(" ") : void 0) ?? plugin?.displayName ?? plugin?.slug ?? "";
3625
3662
  const busyTitle = (label) => langPath === "zh/" ? `${name} 插件${label}` : `${label} ${name}`;
@@ -3644,6 +3681,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3644
3681
  restarting,
3645
3682
  needsRestart,
3646
3683
  needsReload,
3684
+ bundleDeselected,
3647
3685
  onRestart,
3648
3686
  onClose
3649
3687
  }) : (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", {
@@ -4654,40 +4692,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4654
4692
  css: css$9
4655
4693
  });
4656
4694
  var List_module_css_default = {
4657
- "cardHead": "_3XaZHa_cardHead",
4658
- "date": "_3XaZHa_date",
4659
- "versionBadge": "_3XaZHa_versionBadge",
4660
- "desc": "_3XaZHa_desc",
4661
4695
  "diagBtn": "_3XaZHa_diagBtn",
4696
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4697
+ "stateTitle": "_3XaZHa_stateTitle",
4698
+ "card": "_3XaZHa_card",
4699
+ "date": "_3XaZHa_date",
4662
4700
  "fork": "_3XaZHa_fork",
4663
- "cardTitle": "_3XaZHa_cardTitle",
4664
- "moreSentinel": "_3XaZHa_moreSentinel",
4665
- "topic": "_3XaZHa_topic",
4666
- "stateDesc": "_3XaZHa_stateDesc",
4667
- "verified": "_3XaZHa_verified",
4668
4701
  "footer": "_3XaZHa_footer",
4669
- "detailBtn": "_3XaZHa_detailBtn",
4702
+ "topics": "_3XaZHa_topics",
4670
4703
  "body": "_3XaZHa_body",
4671
- "updateBadge": "_3XaZHa_updateBadge",
4672
- "star": "_3XaZHa_star",
4673
- "installBtn": "_3XaZHa_installBtn",
4674
- "actions": "_3XaZHa_actions",
4675
- "stateTitle": "_3XaZHa_stateTitle",
4676
- "installBtnCopied": "_3XaZHa_installBtnCopied",
4677
- "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4678
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4679
- "card": "_3XaZHa_card",
4680
4704
  "categoryBadge": "_3XaZHa_categoryBadge",
4681
- "stateActions": "_3XaZHa_stateActions",
4705
+ "verified": "_3XaZHa_verified",
4706
+ "star": "_3XaZHa_star",
4707
+ "cardHead": "_3XaZHa_cardHead",
4708
+ "desc": "_3XaZHa_desc",
4709
+ "topic": "_3XaZHa_topic",
4710
+ "list": "_3XaZHa_list",
4711
+ "actions": "_3XaZHa_actions",
4712
+ "updateBadge": "_3XaZHa_updateBadge",
4713
+ "moreSentinel": "_3XaZHa_moreSentinel",
4714
+ "cardTitle": "_3XaZHa_cardTitle",
4682
4715
  "cardSide": "_3XaZHa_cardSide",
4683
4716
  "footLink": "_3XaZHa_footLink",
4684
- "cardMain": "_3XaZHa_cardMain",
4685
- "topics": "_3XaZHa_topics",
4686
- "retryBtn": "_3XaZHa_retryBtn",
4717
+ "installBtn": "_3XaZHa_installBtn",
4687
4718
  "stats": "_3XaZHa_stats",
4688
- "list": "_3XaZHa_list",
4689
4719
  "state": "_3XaZHa_state",
4690
- "uninstallBtn": "_3XaZHa_uninstallBtn"
4720
+ "stateActions": "_3XaZHa_stateActions",
4721
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
4722
+ "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4723
+ "retryBtn": "_3XaZHa_retryBtn",
4724
+ "versionBadge": "_3XaZHa_versionBadge",
4725
+ "cardMain": "_3XaZHa_cardMain",
4726
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
4727
+ "detailBtn": "_3XaZHa_detailBtn",
4728
+ "stateDesc": "_3XaZHa_stateDesc"
4691
4729
  };
4692
4730
  //#endregion
4693
4731
  //#region src/client/hooks/useIncrementalList.ts
@@ -4785,7 +4823,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4785
4823
  * 目录列表:承载加载/失败/空三态、插件卡片与计数页脚的滚动容器。分类或安装状态
4786
4824
  * 筛选变化时重置滚动位置,避免替换后的内容被误当成「没变化」。
4787
4825
  */
4788
- function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4826
+ function CatalogList({ plugins, failed, visible, total, t, langPath, reload, forceReload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4789
4827
  /** 列表滚动容器:分类/搜索切换后列表内容替换但 scrollTop 保留,会让用户误以为列表没更新,需重置回顶部 */
4790
4828
  const listRef = (0, react.useRef)(null);
4791
4829
  /** 增量渲染:全量目录太大(4400+),只渲染首批,滚动接近底部时自动追加下一批 */
@@ -4800,6 +4838,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4800
4838
  className: List_module_css_default.retryBtn,
4801
4839
  onClick: () => reload()
4802
4840
  }, t("retry")), (0, react.createElement)("button", {
4841
+ className: List_module_css_default.retryBtn,
4842
+ onClick: () => forceReload(),
4843
+ title: t("forceReloadHint")
4844
+ }, t("forceReload")), (0, react.createElement)("button", {
4803
4845
  className: List_module_css_default.diagBtn,
4804
4846
  onClick: onOpenDiagnostics
4805
4847
  }, 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, {
@@ -4858,6 +4900,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4858
4900
  t,
4859
4901
  langPath,
4860
4902
  reload: catalog.reload,
4903
+ forceReload: catalog.forceReload,
4861
4904
  category: catalog.category,
4862
4905
  copied,
4863
4906
  installedName: catalog.installedName,
@@ -4872,7 +4915,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4872
4915
  }
4873
4916
  //#endregion
4874
4917
  //#region \0dsh-css:src/client/styles/SectionTabs.module.css.mjs
4875
- 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}";
4918
+ 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}";
4876
4919
  const tagId$8 = "dsh-plugin/SectionTabs.module.css";
4877
4920
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
4878
4921
  const tag = document.createElement("style");
@@ -4887,15 +4930,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4887
4930
  css: css$8
4888
4931
  });
4889
4932
  var SectionTabs_module_css_default = {
4890
- "noticeBtn": "_7tvizq_noticeBtn",
4891
- "tabCountActive": "_7tvizq_tabCountActive",
4892
- "tabIcon": "_7tvizq_tabIcon",
4893
- "tabActive": "_7tvizq_tabActive",
4894
- "noticeIcon": "_7tvizq_noticeIcon",
4895
- "tab": "_7tvizq_tab",
4896
4933
  "tabCount": "_7tvizq_tabCount",
4934
+ "tab": "_7tvizq_tab",
4935
+ "noticeIcon": "_7tvizq_noticeIcon",
4936
+ "tabLabel": "_7tvizq_tabLabel",
4937
+ "tabCountActive": "_7tvizq_tabCountActive",
4938
+ "noticeBtn": "_7tvizq_noticeBtn",
4897
4939
  "root": "_7tvizq_root",
4898
- "noticeCount": "_7tvizq_noticeCount"
4940
+ "tabIcon": "_7tvizq_tabIcon",
4941
+ "noticeCount": "_7tvizq_noticeCount",
4942
+ "tabActive": "_7tvizq_tabActive"
4899
4943
  };
4900
4944
  //#endregion
4901
4945
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4943,9 +4987,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4943
4987
  role: "tab",
4944
4988
  "aria-selected": view === id,
4945
4989
  title: t(hintKey),
4990
+ "aria-label": t(labelKey),
4946
4991
  className: view === id ? SectionTabs_module_css_default.tabActive : SectionTabs_module_css_default.tab,
4947
4992
  onClick: () => setView(id)
4948
- }, (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", {
4993
+ }, (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", {
4949
4994
  type: "button",
4950
4995
  className: SectionTabs_module_css_default.noticeBtn,
4951
4996
  onClick: onOpenNotifications,
@@ -4970,42 +5015,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4970
5015
  css: css$7
4971
5016
  });
4972
5017
  var InstalledView_module_css_default = {
4973
- "segBtnActive": "_1nXeGW_segBtnActive",
4974
- "rowUpdate": "_1nXeGW_rowUpdate",
4975
- "rowDetail": "_1nXeGW_rowDetail",
4976
- "searchInput": "_1nXeGW_searchInput",
5018
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
5019
+ "segBtn": "_1nXeGW_segBtn",
4977
5020
  "statusInactive": "_1nXeGW_statusInactive",
4978
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4979
- "exampleRow": "_1nXeGW_exampleRow",
4980
- "rowUninstall": "_1nXeGW_rowUninstall",
4981
5021
  "rowRepo": "_1nXeGW_rowRepo",
4982
- "exampleBadge": "_1nXeGW_exampleBadge",
4983
- "rowRestart": "_1nXeGW_rowRestart",
4984
- "segGroup": "_1nXeGW_segGroup",
4985
- "statusPending": "_1nXeGW_statusPending",
5022
+ "rowUninstall": "_1nXeGW_rowUninstall",
5023
+ "root": "_1nXeGW_root",
5024
+ "rowDetail": "_1nXeGW_rowDetail",
4986
5025
  "toolbar": "_1nXeGW_toolbar",
5026
+ "rowRestart": "_1nXeGW_rowRestart",
5027
+ "emptyTitle": "_1nXeGW_emptyTitle",
4987
5028
  "rowCategory": "_1nXeGW_rowCategory",
5029
+ "searchInput": "_1nXeGW_searchInput",
5030
+ "segLabel": "_1nXeGW_segLabel",
5031
+ "rowUpdate": "_1nXeGW_rowUpdate",
5032
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
5033
+ "updateBadge": "_1nXeGW_updateBadge",
5034
+ "statusPending": "_1nXeGW_statusPending",
5035
+ "exampleBadge": "_1nXeGW_exampleBadge",
5036
+ "rowDesc": "_1nXeGW_rowDesc",
5037
+ "rowMeta": "_1nXeGW_rowMeta",
4988
5038
  "segRow": "_1nXeGW_segRow",
4989
- "list": "_1nXeGW_list",
4990
- "segBtn": "_1nXeGW_segBtn",
4991
- "row": "_1nXeGW_row",
4992
5039
  "rowTitle": "_1nXeGW_rowTitle",
4993
- "rowActions": "_1nXeGW_rowActions",
4994
- "rowTitleLine": "_1nXeGW_rowTitleLine",
4995
- "versionBadge": "_1nXeGW_versionBadge",
5040
+ "searchWrap": "_1nXeGW_searchWrap",
5041
+ "segGroup": "_1nXeGW_segGroup",
5042
+ "segBtnActive": "_1nXeGW_segBtnActive",
4996
5043
  "empty": "_1nXeGW_empty",
4997
- "rowDesc": "_1nXeGW_rowDesc",
4998
- "emptyDesc": "_1nXeGW_emptyDesc",
4999
- "segLabel": "_1nXeGW_segLabel",
5000
- "root": "_1nXeGW_root",
5001
- "updateBadge": "_1nXeGW_updateBadge",
5002
5044
  "statusDot": "_1nXeGW_statusDot",
5003
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
5004
5045
  "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
5005
- "emptyTitle": "_1nXeGW_emptyTitle",
5006
- "rowMeta": "_1nXeGW_rowMeta",
5007
- "searchWrap": "_1nXeGW_searchWrap",
5008
- "rowMain": "_1nXeGW_rowMain"
5046
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
5047
+ "emptyDesc": "_1nXeGW_emptyDesc",
5048
+ "list": "_1nXeGW_list",
5049
+ "row": "_1nXeGW_row",
5050
+ "versionBadge": "_1nXeGW_versionBadge",
5051
+ "rowActions": "_1nXeGW_rowActions",
5052
+ "rowMain": "_1nXeGW_rowMain",
5053
+ "exampleRow": "_1nXeGW_exampleRow"
5009
5054
  };
5010
5055
  //#endregion
5011
5056
  //#region src/client/components/views/InstalledView.tsx
@@ -5249,27 +5294,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5249
5294
  css: css$6
5250
5295
  });
5251
5296
  var CustomInstallView_module_css_default = {
5252
- "installBtn": "zISxCG_installBtn",
5253
- "installError": "zISxCG_installError",
5254
- "helpLine": "zISxCG_helpLine",
5255
- "installCardHead": "zISxCG_installCardHead",
5256
- "installInput": "zISxCG_installInput",
5257
- "helpBody": "zISxCG_helpBody",
5258
- "installExample": "zISxCG_installExample",
5259
- "installInputError": "zISxCG_installInputError",
5260
5297
  "helpCmd": "zISxCG_helpCmd",
5261
- "channelOff": "zISxCG_channelOff",
5298
+ "installCard": "zISxCG_installCard",
5299
+ "channelOffBtn": "zISxCG_channelOffBtn",
5300
+ "installError": "zISxCG_installError",
5301
+ "installCardDisabled": "zISxCG_installCardDisabled",
5262
5302
  "root": "zISxCG_root",
5263
- "desc": "zISxCG_desc",
5264
- "installLabel": "zISxCG_installLabel",
5265
5303
  "installCards": "zISxCG_installCards",
5266
- "installRow": "zISxCG_installRow",
5267
- "installCardDisabled": "zISxCG_installCardDisabled",
5304
+ "installInputError": "zISxCG_installInputError",
5305
+ "desc": "zISxCG_desc",
5306
+ "installHelpBtn": "zISxCG_installHelpBtn",
5307
+ "installBtn": "zISxCG_installBtn",
5268
5308
  "channelOffText": "zISxCG_channelOffText",
5269
- "channelOffBtn": "zISxCG_channelOffBtn",
5270
- "installCard": "zISxCG_installCard",
5309
+ "installExample": "zISxCG_installExample",
5271
5310
  "helpNote": "zISxCG_helpNote",
5272
- "installHelpBtn": "zISxCG_installHelpBtn"
5311
+ "installRow": "zISxCG_installRow",
5312
+ "installCardHead": "zISxCG_installCardHead",
5313
+ "installInput": "zISxCG_installInput",
5314
+ "helpBody": "zISxCG_helpBody",
5315
+ "helpLine": "zISxCG_helpLine",
5316
+ "channelOff": "zISxCG_channelOff",
5317
+ "installLabel": "zISxCG_installLabel"
5273
5318
  };
5274
5319
  //#endregion
5275
5320
  //#region src/client/components/views/CustomInstallView.tsx
@@ -5425,30 +5470,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5425
5470
  css: css$5
5426
5471
  });
5427
5472
  var SettingsView_module_css_default = {
5428
- "controlDropdown": "_506LLG_controlDropdown",
5473
+ "settingRowStack": "_506LLG_settingRowStack",
5474
+ "navItemActive": "_506LLG_navItemActive",
5429
5475
  "settingLabel": "_506LLG_settingLabel",
5430
- "settingRow": "_506LLG_settingRow",
5431
- "proxyHintFail": "_506LLG_proxyHintFail",
5432
- "settingControlStack": "_506LLG_settingControlStack",
5433
- "navItem": "_506LLG_navItem",
5434
- "settingControl": "_506LLG_settingControl",
5435
- "proxyHintOk": "_506LLG_proxyHintOk",
5436
- "root": "_506LLG_root",
5437
- "content": "_506LLG_content",
5438
- "pageHeader": "_506LLG_pageHeader",
5439
- "navIcon": "_506LLG_navIcon",
5440
- "settingTitle": "_506LLG_settingTitle",
5441
5476
  "proxyControl": "_506LLG_proxyControl",
5442
- "navItemActive": "_506LLG_navItemActive",
5443
- "sidebar": "_506LLG_sidebar",
5444
- "resetBtn": "_506LLG_resetBtn",
5445
- "proxyHint": "_506LLG_proxyHint",
5446
5477
  "pageTitle": "_506LLG_pageTitle",
5478
+ "pageDesc": "_506LLG_pageDesc",
5447
5479
  "card": "_506LLG_card",
5480
+ "settingTitle": "_506LLG_settingTitle",
5481
+ "settingRow": "_506LLG_settingRow",
5448
5482
  "settingDesc": "_506LLG_settingDesc",
5483
+ "settingControl": "_506LLG_settingControl",
5484
+ "proxyHint": "_506LLG_proxyHint",
5485
+ "root": "_506LLG_root",
5486
+ "proxyHintOk": "_506LLG_proxyHintOk",
5487
+ "controlDropdown": "_506LLG_controlDropdown",
5488
+ "resetBtn": "_506LLG_resetBtn",
5489
+ "navIcon": "_506LLG_navIcon",
5490
+ "pageHeader": "_506LLG_pageHeader",
5491
+ "settingControlStack": "_506LLG_settingControlStack",
5492
+ "navItem": "_506LLG_navItem",
5449
5493
  "textInput": "_506LLG_textInput",
5450
- "pageDesc": "_506LLG_pageDesc",
5451
- "settingRowStack": "_506LLG_settingRowStack"
5494
+ "sidebar": "_506LLG_sidebar",
5495
+ "proxyHintFail": "_506LLG_proxyHintFail",
5496
+ "content": "_506LLG_content"
5452
5497
  };
5453
5498
  //#endregion
5454
5499
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -5467,17 +5512,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5467
5512
  css: css$4
5468
5513
  });
5469
5514
  var Dropdown_module_css_default = {
5515
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
5516
+ "dropdownItem": "B_Gxsq_dropdownItem",
5517
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5518
+ "dropdownArrow": "B_Gxsq_dropdownArrow",
5470
5519
  "dropdownCount": "B_Gxsq_dropdownCount",
5520
+ "dropdownPanel": "B_Gxsq_dropdownPanel",
5521
+ "dropdownBtn": "B_Gxsq_dropdownBtn",
5522
+ "dropdown": "B_Gxsq_dropdown",
5471
5523
  "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5472
5524
  "dropdownCountActive": "B_Gxsq_dropdownCountActive",
5473
- "dropdownArrow": "B_Gxsq_dropdownArrow",
5474
- "dropdown": "B_Gxsq_dropdown",
5475
- "dropdownPanel": "B_Gxsq_dropdownPanel",
5476
5525
  "dropdownFill": "B_Gxsq_dropdownFill",
5477
- "dropdownBtn": "B_Gxsq_dropdownBtn",
5478
- "dropdownItem": "B_Gxsq_dropdownItem",
5479
- "dropdownLabel": "B_Gxsq_dropdownLabel",
5480
- "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5481
5526
  "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen"
5482
5527
  };
5483
5528
  //#endregion
@@ -5497,9 +5542,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5497
5542
  css: css$3
5498
5543
  });
5499
5544
  var Toggle_module_css_default = {
5545
+ "toggleOn": "k-cD4G_toggleOn",
5500
5546
  "knob": "k-cD4G_knob",
5501
- "toggle": "k-cD4G_toggle",
5502
- "toggleOn": "k-cD4G_toggleOn"
5547
+ "toggle": "k-cD4G_toggle"
5503
5548
  };
5504
5549
  //#endregion
5505
5550
  //#region src/client/components/ui/Toggle.tsx
@@ -5596,29 +5641,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5596
5641
  css: css$2
5597
5642
  });
5598
5643
  var DiagnosticsView_module_css_default = {
5599
- "badgeIdle": "k9eRya_badgeIdle",
5600
- "envRow": "k9eRya_envRow",
5601
- "name": "k9eRya_name",
5644
+ "diagPulse": "k9eRya_diagPulse",
5602
5645
  "envCopyBtn": "k9eRya_envCopyBtn",
5603
- "display": "k9eRya_display",
5604
5646
  "panel": "k9eRya_panel",
5605
- "diagPulse": "k9eRya_diagPulse",
5606
- "badge": "k9eRya_badge",
5607
- "row": "k9eRya_row",
5608
- "summary": "k9eRya_summary",
5609
- "head": "k9eRya_head",
5610
- "envLabel": "k9eRya_envLabel",
5647
+ "envRow": "k9eRya_envRow",
5611
5648
  "envDesc": "k9eRya_envDesc",
5649
+ "summaryRunning": "k9eRya_summaryRunning",
5650
+ "row": "k9eRya_row",
5651
+ "display": "k9eRya_display",
5612
5652
  "headHint": "k9eRya_headHint",
5613
- "summaryOk": "k9eRya_summaryOk",
5653
+ "head": "k9eRya_head",
5614
5654
  "envTitle": "k9eRya_envTitle",
5655
+ "badgeRunning": "k9eRya_badgeRunning",
5656
+ "runBtn": "k9eRya_runBtn",
5615
5657
  "badgeOk": "k9eRya_badgeOk",
5616
- "badgeFail": "k9eRya_badgeFail",
5658
+ "badgeIdle": "k9eRya_badgeIdle",
5617
5659
  "meta": "k9eRya_meta",
5618
- "badgeRunning": "k9eRya_badgeRunning",
5660
+ "envLabel": "k9eRya_envLabel",
5661
+ "summary": "k9eRya_summary",
5662
+ "badgeFail": "k9eRya_badgeFail",
5619
5663
  "summaryFail": "k9eRya_summaryFail",
5620
- "summaryRunning": "k9eRya_summaryRunning",
5621
- "runBtn": "k9eRya_runBtn"
5664
+ "summaryOk": "k9eRya_summaryOk",
5665
+ "badge": "k9eRya_badge",
5666
+ "name": "k9eRya_name"
5622
5667
  };
5623
5668
  //#endregion
5624
5669
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5793,57 +5838,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5793
5838
  css: css$1
5794
5839
  });
5795
5840
  var LogsView_module_css_default = {
5796
- "catSettings": "_3j77BW_catSettings",
5797
- "clearBtn": "_3j77BW_clearBtn",
5798
- "pathDialog": "_3j77BW_pathDialog",
5799
- "panel": "_3j77BW_panel",
5800
- "pathDialogReset": "_3j77BW_pathDialogReset",
5801
- "previewRow": "_3j77BW_previewRow",
5802
- "footCount": "_3j77BW_footCount",
5841
+ "catUpdate": "_3j77BW_catUpdate",
5803
5842
  "headActions": "_3j77BW_headActions",
5804
- "badge": "_3j77BW_badge",
5805
- "badgeInfo": "_3j77BW_badgeInfo",
5806
- "catDiagnostics": "_3j77BW_catDiagnostics",
5807
- "pathRow": "_3j77BW_pathRow",
5808
- "headHint": "_3j77BW_headHint",
5809
- "logList": "_3j77BW_logList",
5810
- "actions": "_3j77BW_actions",
5811
- "catBadge": "_3j77BW_catBadge",
5812
- "filterBar": "_3j77BW_filterBar",
5813
- "badgeWarn": "_3j77BW_badgeWarn",
5843
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5814
5844
  "linkBtn": "_3j77BW_linkBtn",
5815
- "list": "_3j77BW_list",
5816
- "message": "_3j77BW_message",
5817
- "pathLabel": "_3j77BW_pathLabel",
5845
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5846
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5847
+ "empty": "_3j77BW_empty",
5818
5848
  "searchInput": "_3j77BW_searchInput",
5819
- "moreEnd": "_3j77BW_moreEnd",
5849
+ "footActions": "_3j77BW_footActions",
5850
+ "badgeDebug": "_3j77BW_badgeDebug",
5851
+ "pathLabel": "_3j77BW_pathLabel",
5852
+ "clearBtn": "_3j77BW_clearBtn",
5853
+ "footFail": "_3j77BW_footFail",
5820
5854
  "footPath": "_3j77BW_footPath",
5821
- "catUpdate": "_3j77BW_catUpdate",
5855
+ "footCount": "_3j77BW_footCount",
5856
+ "btn": "_3j77BW_btn",
5857
+ "badgeError": "_3j77BW_badgeError",
5858
+ "catBadge": "_3j77BW_catBadge",
5859
+ "moreEnd": "_3j77BW_moreEnd",
5860
+ "catSettings": "_3j77BW_catSettings",
5822
5861
  "filterChipActive": "_3j77BW_filterChipActive",
5823
- "event": "_3j77BW_event",
5824
- "search": "_3j77BW_search",
5825
- "catSystem": "_3j77BW_catSystem",
5826
- "badgeDebug": "_3j77BW_badgeDebug",
5862
+ "message": "_3j77BW_message",
5863
+ "pathDraft": "_3j77BW_pathDraft",
5864
+ "pathRow": "_3j77BW_pathRow",
5827
5865
  "entry": "_3j77BW_entry",
5828
- "catUninstall": "_3j77BW_catUninstall",
5829
- "pathDialogHint": "_3j77BW_pathDialogHint",
5866
+ "catInstall": "_3j77BW_catInstall",
5867
+ "pathDialog": "_3j77BW_pathDialog",
5868
+ "search": "_3j77BW_search",
5869
+ "head": "_3j77BW_head",
5870
+ "logList": "_3j77BW_logList",
5871
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5830
5872
  "more": "_3j77BW_more",
5831
- "pathDraft": "_3j77BW_pathDraft",
5832
- "footActions": "_3j77BW_footActions",
5833
- "empty": "_3j77BW_empty",
5873
+ "event": "_3j77BW_event",
5874
+ "panel": "_3j77BW_panel",
5875
+ "previewRow": "_3j77BW_previewRow",
5876
+ "pathText": "_3j77BW_pathText",
5877
+ "filterBar": "_3j77BW_filterBar",
5878
+ "filterChip": "_3j77BW_filterChip",
5879
+ "foot": "_3j77BW_foot",
5880
+ "badgeWarn": "_3j77BW_badgeWarn",
5834
5881
  "pathDialogFoot": "_3j77BW_pathDialogFoot",
5882
+ "pathDialogHint": "_3j77BW_pathDialogHint",
5883
+ "badgeInfo": "_3j77BW_badgeInfo",
5884
+ "list": "_3j77BW_list",
5835
5885
  "time": "_3j77BW_time",
5836
- "filterChip": "_3j77BW_filterChip",
5837
- "head": "_3j77BW_head",
5838
- "pathText": "_3j77BW_pathText",
5839
- "footFail": "_3j77BW_footFail",
5840
5886
  "badgeSuccess": "_3j77BW_badgeSuccess",
5841
- "catInstall": "_3j77BW_catInstall",
5842
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
5843
- "pathDialogRow": "_3j77BW_pathDialogRow",
5844
- "foot": "_3j77BW_foot",
5845
- "badgeError": "_3j77BW_badgeError",
5846
- "btn": "_3j77BW_btn"
5887
+ "catUninstall": "_3j77BW_catUninstall",
5888
+ "badge": "_3j77BW_badge",
5889
+ "actions": "_3j77BW_actions",
5890
+ "headHint": "_3j77BW_headHint",
5891
+ "catSystem": "_3j77BW_catSystem"
5847
5892
  };
5848
5893
  //#endregion
5849
5894
  //#region src/client/components/modals/LogsModal.tsx
@@ -6707,6 +6752,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6707
6752
  /** 结果视图是否显示「关闭后自动刷新」说明:插件已热挂进运行中 loader(安装)、或卸载后
6708
6753
  * 插件面板仍残留在当前页面(卸载)。关闭弹窗即整页刷新,不给手动刷新按钮。 */
6709
6754
  const [installNeedsReload, setInstallNeedsReload] = (0, react.useState)(false);
6755
+ /** 市场自更新成功、但 profile 的 bundle 列表里已不含 dsh-plugin:结果页提示重新勾选 */
6756
+ const [installBundleDeselected, setInstallBundleDeselected] = (0, react.useState)(false);
6710
6757
  const [uninstallNeedsReload, setUninstallNeedsReload] = (0, react.useState)(false);
6711
6758
  /** 结果视图「立即重启」:请求宿主重启后进入等待,服务回来后整页刷新 */
6712
6759
  const [restarting, setRestarting] = (0, react.useState)(false);
@@ -6741,10 +6788,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6741
6788
  t,
6742
6789
  langKey,
6743
6790
  refreshInstalled: catalog.refreshInstalled,
6744
- onInstallDone: (viaModal, repo, needsRestart, update, needsReload) => {
6791
+ onInstallDone: (viaModal, repo, needsRestart, update, needsReload, bundleDeselected) => {
6745
6792
  const reload = needsReload === true;
6746
6793
  setInstallNeedsRestart(needsRestart);
6747
6794
  setInstallNeedsReload(reload);
6795
+ setInstallBundleDeselected(bundleDeselected === true);
6748
6796
  if (viaModal) setInstallDone(true);
6749
6797
  else setToast({
6750
6798
  id: Date.now(),
@@ -7101,7 +7149,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
7101
7149
  openSection: settingsSection,
7102
7150
  onConsumedOpenSection: () => setSettingsSection(null)
7103
7151
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
7104
- info: catalog.hubUpdateInfo ?? { version: "2.0.4" },
7152
+ info: catalog.hubUpdateInfo ?? { version: "2.0.6" },
7105
7153
  state: catalog.hubUpdateState,
7106
7154
  currentVersion: catalog.hubCurrentVersion,
7107
7155
  lang,
@@ -7193,9 +7241,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
7193
7241
  submitting: queue.submitting,
7194
7242
  needsRestart: installNeedsRestart,
7195
7243
  needsReload: installNeedsReload,
7244
+ bundleDeselected: installBundleDeselected,
7196
7245
  onClose: () => {
7197
7246
  const reload = installDone && installNeedsReload;
7198
7247
  setConfirmPlugin(null);
7248
+ setInstallBundleDeselected(false);
7199
7249
  if (reload) window.location.reload();
7200
7250
  },
7201
7251
  onCopy: () => copyCommand(confirmPlugin),