dsh-plugin 1.3.6 → 1.3.8

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.
package/client/client.js CHANGED
@@ -31,7 +31,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
31
31
  fork: "Fork",
32
32
  loading: "正在加载插件数据…",
33
33
  failed: "插件数据加载失败",
34
- failedDesc: "请稍后重试,或点击右上角按钮在浏览器中打开插件中心。",
34
+ failedDescNoProxy: "你的网络似乎不通,无法获取插件目录数据。请检查网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
35
+ failedDescProxy: "你的网络似乎不通,或设置里的 HTTP 代理地址不可达,无法获取插件目录数据。请检查代理设置与网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
35
36
  retry: "重试",
36
37
  install: "安装",
37
38
  cliOnlyHint: "此插件可能需命令行辅助,失败时复制上方命令到 dsh 终端",
@@ -110,6 +111,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
110
111
  settingsCheckOnStartDesc: "打开插件中心时检查已安装插件是否有新版,发现更新会提示",
111
112
  settingsProxy: "HTTP 代理",
112
113
  settingsProxyDesc: "npm / git / 目录数据请求统一走该代理;留空直连",
114
+ proxyCheckChecking: "正在测试该代理地址…",
115
+ proxyCheckOk: "测试可达,安装与目录请求将统一走该代理",
116
+ proxyCheckFail: "此地址测试不通,仍可保存;请确认代理已开启、地址与端口无误",
113
117
  settingsMirror: "npm 镜像源",
114
118
  settingsMirrorDesc: "默认跟随本机 npm 配置;官方源慢可换国内镜像",
115
119
  mirrorNone: "未配置(跟随本机 npm 配置)",
@@ -183,6 +187,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
183
187
  diagNpmUnset: "未配置(跟随本机 npm 配置)",
184
188
  diagGithub: "GitHub",
185
189
  diagCatalog: "目录站点",
190
+ diagProxy: "HTTP 代理",
186
191
  diagOk: "OK",
187
192
  diagChecking: "检测中…",
188
193
  diagIdle: "未检测",
@@ -279,9 +284,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
279
284
  failIssueBig: "一键提交 BUG 到 GitHub Issue 为开源作贡献",
280
285
  failPrepareHint: "该插件安装时的构建脚本执行失败(git 分发常缺失子模块或构建产物),属插件打包分发问题。请向作者仓库提交 Issue 反馈。",
281
286
  failPackagingHint: "该插件不支持官方默认安装方式:其 git 分发缺少构建产物(package.json 声明的入口文件在仓库中不存在),说明作者未适配官方安装流程。请到作者仓库提交 Issue 反馈,请其提交构建产物或发布 npm 版。",
282
- failIgnoredBuild: "该插件依赖了需要编译的原生模块(如 node-pty),pnpm 默认拦截这类构建脚本导致安装失败 —— 其他插件不受影响,属该插件的依赖/打包问题。建议向作者仓库一键反馈,请作者改用预编译版本(如 node-pty-prebuilt-multiarch)。",
287
+ failIgnoredBuild: "该插件或其依赖需要执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截导致安装失败(如原生模块 node-pty、或 git 安装时插件的 prepare 脚本)—— 其他插件不受影响,属该插件的依赖/打包问题。建议向作者仓库一键反馈,请作者改用预编译版本(如 node-pty-prebuilt-multiarch)或移除安装期构建。",
283
288
  failNpmTooLow: "怀疑本机 npm 版本过低:npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
284
289
  failNpmTooLowV: "本机 npm 版本过低(当前 v{v}):npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
290
+ failNetworkHint: "安装前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。",
291
+ failNetworkTarget: "无法访问 {url} —— 你的网络连接不通",
292
+ failNetworkRunDiag: "去系统诊断检测网络",
285
293
  reportIssue: "去插件仓库提交 Issue",
286
294
  detail: "打开详情",
287
295
  noResult: "没有找到匹配的插件",
@@ -336,7 +344,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
336
344
  fork: "Fork",
337
345
  loading: "Loading plugin data…",
338
346
  failed: "Failed to load plugin data",
339
- failedDesc: "Please retry, or open the hub in your browser with the button above.",
347
+ 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.",
348
+ 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.",
340
349
  retry: "Retry",
341
350
  install: "Install",
342
351
  cliOnlyHint: "This plugin may need command-line help; if it fails, copy the command above and run it in your dsh terminal",
@@ -417,6 +426,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
417
426
  settingsAutoInstallDesc: "Install detected updates in the background without asking (a host restart applies them)",
418
427
  settingsProxy: "HTTP proxy",
419
428
  settingsProxyDesc: "Route npm, git and catalog requests through this proxy; leave empty to connect directly",
429
+ proxyCheckChecking: "Testing this proxy address…",
430
+ proxyCheckOk: "Reachable — installs and catalog requests will route through it",
431
+ proxyCheckFail: "Unreachable, but you can still save it; make sure the proxy is running and the address and port are correct",
420
432
  settingsMirror: "npm mirror",
421
433
  settingsMirrorDesc: "Unset by default — follows local npm config; pick a domestic mirror if slow",
422
434
  mirrorNone: "Unset (follow local npm config)",
@@ -490,6 +502,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
490
502
  diagNpmUnset: "Unset (follow local npm config)",
491
503
  diagGithub: "GitHub",
492
504
  diagCatalog: "Catalog site",
505
+ diagProxy: "HTTP proxy",
493
506
  diagOk: "OK",
494
507
  diagChecking: "Checking…",
495
508
  diagIdle: "Not checked",
@@ -587,9 +600,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
587
600
  failIssueBig: "Report this bug to GitHub — contribute to open source",
588
601
  failPrepareHint: "This plugin failed while running its build scripts during install (git tarballs often miss submodules or build output). This is a packaging issue of the plugin itself — please report it to the author repository.",
589
602
  failPackagingHint: "This plugin does not support the official default install method: its git distribution lacks the build output (the entry file declared in package.json is not in the repository), so it has not been adapted to the official install flow. Please file an Issue on the author's repo asking for committed build output or an npm release.",
590
- failIgnoredBuild: "This plugin depends on a native module (e.g. node-pty) whose build script pnpm blocks by default, so the install fails — other plugins are unaffected. This is a dependency/packaging issue of the plugin itself. Please report it to the author repository and ask the author to switch to a prebuilt variant (e.g. node-pty-prebuilt-multiarch).",
603
+ failIgnoredBuild: "This plugin (or its dependencies) needs to run build scripts, which pnpm blocks by default via its allowBuilds allowlist, so the install fails (e.g. native modules like node-pty, or the plugin's own prepare script on git installs) — other plugins are unaffected. This is a dependency/packaging issue of the plugin itself. Please report it to the author repository and ask the author to ship a prebuilt variant (e.g. node-pty-prebuilt-multiarch) or drop install-time builds.",
591
604
  failNpmTooLow: "Your local npm may be too old: npm crashed internally while resolving the plugin's dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest",
592
605
  failNpmTooLowV: "Your local npm is too old (v{v}): npm crashed internally while resolving the plugin's dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest",
606
+ failNetworkHint: "The network could not be reached before install: the install source is unreachable (offline, DNS failure, firewall block, or a misconfigured proxy). This is not a problem with the plugin itself — please check your connection, confirm the HTTP proxy in Settings, run a connectivity check under System Diagnostics, then retry.",
607
+ failNetworkTarget: "Cannot reach {url} — your network connection is down",
608
+ failNetworkRunDiag: "Run a network diagnostic",
593
609
  reportIssue: "Report an Issue to the plugin repo",
594
610
  detail: "Open details",
595
611
  noResult: "No plugins match your search",
@@ -642,46 +658,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
642
658
  css: css$11
643
659
  });
644
660
  var Header_module_css_default = {
661
+ "headerRight": "qikqja_headerRight",
662
+ "resultCount": "qikqja_resultCount",
645
663
  "adBanner": "qikqja_adBanner",
664
+ "segLabel": "qikqja_segLabel",
665
+ "adBadge": "qikqja_adBadge",
666
+ "search": "qikqja_search",
667
+ "root": "qikqja_root",
668
+ "headerTitleRow": "qikqja_headerTitleRow",
669
+ "resultSeg": "qikqja_resultSeg",
670
+ "tabCount": "qikqja_tabCount",
646
671
  "githubIcon": "qikqja_githubIcon",
647
- "tabsRow": "qikqja_tabsRow",
648
- "segBtnActive": "qikqja_segBtnActive",
672
+ "title": "qikqja_title",
649
673
  "segBtn": "qikqja_segBtn",
650
- "aboutBtn": "qikqja_aboutBtn",
651
- "version": "qikqja_version",
652
- "segGroup": "qikqja_segGroup",
653
674
  "tabs": "qikqja_tabs",
675
+ "versionBtn": "qikqja_versionBtn",
676
+ "aboutBtn": "qikqja_aboutBtn",
677
+ "logoIcon": "qikqja_logoIcon",
678
+ "controls": "qikqja_controls",
654
679
  "taglineLink": "qikqja_taglineLink",
655
- "tabCount": "qikqja_tabCount",
656
- "tagline": "qikqja_tagline",
657
- "headerTitleRow": "qikqja_headerTitleRow",
658
- "resultSeg": "qikqja_resultSeg",
680
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
681
+ "copyIcon": "qikqja_copyIcon",
682
+ "segBtnActive": "qikqja_segBtnActive",
683
+ "searchRow": "qikqja_searchRow",
659
684
  "adText": "qikqja_adText",
660
- "root": "qikqja_root",
661
- "langBtn": "qikqja_langBtn",
662
- "sortGroup": "qikqja_sortGroup",
663
- "adArrow": "qikqja_adArrow",
664
- "controls": "qikqja_controls",
665
685
  "tabActive": "qikqja_tabActive",
666
- "adBadge": "qikqja_adBadge",
667
- "brandTitle": "qikqja_brandTitle",
668
- "resultCount": "qikqja_resultCount",
686
+ "githubLink": "qikqja_githubLink",
687
+ "tabsRow": "qikqja_tabsRow",
688
+ "sortGroup": "qikqja_sortGroup",
669
689
  "header": "qikqja_header",
670
- "logoIcon": "qikqja_logoIcon",
671
- "search": "qikqja_search",
672
- "headerRight": "qikqja_headerRight",
690
+ "langBtn": "qikqja_langBtn",
691
+ "brandTitle": "qikqja_brandTitle",
692
+ "tagline": "qikqja_tagline",
673
693
  "tab": "qikqja_tab",
674
- "versionBtn": "qikqja_versionBtn",
675
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
676
- "title": "qikqja_title",
677
- "copyIcon": "qikqja_copyIcon",
678
- "githubLink": "qikqja_githubLink",
679
- "searchRow": "qikqja_searchRow",
680
- "segLabel": "qikqja_segLabel"
694
+ "segGroup": "qikqja_segGroup",
695
+ "version": "qikqja_version",
696
+ "adArrow": "qikqja_adArrow"
681
697
  };
682
698
  //#endregion
683
699
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
684
- 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:420px;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:640px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:780px;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:240px;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: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_failPrepareHint{color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;padding:8px 12px;font-size:12px;line-height:18px}.BiQ1zG_aboutModal{width:460px;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=\"250\"]{object-fit:contain;width:250px;height:250px;max-height:250px}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:520px;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:480px;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}";
700
+ 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:420px;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:640px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:560px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:780px;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:240px;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: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_failPrepareHint{color:var(--hub-warning);background:var(--hub-warning-tint);border:1px solid var(--hub-warning-border);border-radius:6px;margin-top:6px;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_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:460px;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:520px;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:480px;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}";
685
701
  const tagId$10 = "dsh-plugin/Modal.module.css";
686
702
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
687
703
  const tag = document.createElement("style");
@@ -696,134 +712,136 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
696
712
  css: css$10
697
713
  });
698
714
  var Modal_module_css_default = {
699
- "modalCancel": "BiQ1zG_modalCancel",
700
- "errorTitle": "BiQ1zG_errorTitle",
701
- "noticeTime": "BiQ1zG_noticeTime",
702
- "queueSection": "BiQ1zG_queueSection",
703
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
704
- "queueRowStatus": "BiQ1zG_queueRowStatus",
705
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
706
- "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
707
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
708
- "detailModal": "BiQ1zG_detailModal",
709
- "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
710
- "detailUpdateHint": "BiQ1zG_detailUpdateHint",
711
- "modalWide": "BiQ1zG_modalWide",
712
- "modalDesc": "BiQ1zG_modalDesc",
713
- "modalLink": "BiQ1zG_modalLink",
714
- "resultTitle": "BiQ1zG_resultTitle",
715
- "noticeRowMain": "BiQ1zG_noticeRowMain",
716
- "detailPathBtn": "BiQ1zG_detailPathBtn",
717
- "errorBox": "BiQ1zG_errorBox",
718
- "trustHint": "BiQ1zG_trustHint",
719
- "queueRowHead": "BiQ1zG_queueRowHead",
720
- "failedCopyHint": "BiQ1zG_failedCopyHint",
721
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
722
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
715
+ "modalClose": "BiQ1zG_modalClose",
716
+ "queuedHint": "BiQ1zG_queuedHint",
717
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
718
+ "modalActions": "BiQ1zG_modalActions",
719
+ "logModal": "BiQ1zG_logModal",
720
+ "modalCopy": "BiQ1zG_modalCopy",
723
721
  "restartLater": "BiQ1zG_restartLater",
724
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
725
- "confirmIcon": "BiQ1zG_confirmIcon",
726
- "toastIn": "BiQ1zG_toastIn",
727
- "resultCheck": "BiQ1zG_resultCheck",
728
- "modalInstall": "BiQ1zG_modalInstall",
729
- "result": "BiQ1zG_result",
722
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
730
723
  "noticeMain": "BiQ1zG_noticeMain",
731
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
732
- "detailPath": "BiQ1zG_detailPath",
733
- "detailLink": "BiQ1zG_detailLink",
734
- "resultRestarting": "BiQ1zG_resultRestarting",
735
- "failCopy": "BiQ1zG_failCopy",
736
- "noticeRowOk": "BiQ1zG_noticeRowOk",
737
- "failList": "BiQ1zG_failList",
738
- "modalRow": "BiQ1zG_modalRow",
739
- "failKindInstall": "BiQ1zG_failKindInstall",
724
+ "failRepo": "BiQ1zG_failRepo",
725
+ "noticeList": "BiQ1zG_noticeList",
726
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
727
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
728
+ "detailLabel": "BiQ1zG_detailLabel",
729
+ "detailPathActions": "BiQ1zG_detailPathActions",
730
+ "modalDesc": "BiQ1zG_modalDesc",
731
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
732
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
740
733
  "modalLabel": "BiQ1zG_modalLabel",
741
- "queueRowDesc": "BiQ1zG_queueRowDesc",
742
- "detailRow": "BiQ1zG_detailRow",
743
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
744
- "logModal": "BiQ1zG_logModal",
745
- "linkIcon": "BiQ1zG_linkIcon",
746
- "aboutContent": "BiQ1zG_aboutContent",
747
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
734
+ "modalLink": "BiQ1zG_modalLink",
735
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
748
736
  "restartNowWarning": "BiQ1zG_restartNowWarning",
749
- "detailPathText": "BiQ1zG_detailPathText",
750
- "failKindUninstall": "BiQ1zG_failKindUninstall",
751
- "detailStars": "BiQ1zG_detailStars",
752
- "noticeTextOk": "BiQ1zG_noticeTextOk",
753
- "detailStatusText": "BiQ1zG_detailStatusText",
737
+ "trustHint": "BiQ1zG_trustHint",
738
+ "linkIcon": "BiQ1zG_linkIcon",
739
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
740
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
741
+ "failCopy": "BiQ1zG_failCopy",
742
+ "progressHead": "BiQ1zG_progressHead",
743
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
744
+ "progress": "BiQ1zG_progress",
745
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
746
+ "resultDesc": "BiQ1zG_resultDesc",
754
747
  "confirmPrimary": "BiQ1zG_confirmPrimary",
755
- "modalClose": "BiQ1zG_modalClose",
756
- "pendingRowActions": "BiQ1zG_pendingRowActions",
757
- "dangerConfirm": "BiQ1zG_dangerConfirm",
758
- "errorModal": "BiQ1zG_errorModal",
759
- "modalActions": "BiQ1zG_modalActions",
760
- "detailMono": "BiQ1zG_detailMono",
761
- "failRepo": "BiQ1zG_failRepo",
762
- "detailPathActions": "BiQ1zG_detailPathActions",
763
- "failKind": "BiQ1zG_failKind",
764
- "modalValue": "BiQ1zG_modalValue",
765
- "toastFail": "BiQ1zG_toastFail",
766
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
767
- "queuedHint": "BiQ1zG_queuedHint",
768
- "detailDim": "BiQ1zG_detailDim",
769
- "queueRowPct": "BiQ1zG_queueRowPct",
770
- "noticeHead": "BiQ1zG_noticeHead",
748
+ "noticeTime": "BiQ1zG_noticeTime",
749
+ "queueRowBody": "BiQ1zG_queueRowBody",
750
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
771
751
  "noticeVersion": "BiQ1zG_noticeVersion",
772
- "progressFillFail": "BiQ1zG_progressFillFail",
773
- "queueRowTrack": "BiQ1zG_queueRowTrack",
752
+ "modal": "BiQ1zG_modal",
753
+ "failKindInstall": "BiQ1zG_failKindInstall",
754
+ "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
755
+ "detailStatusText": "BiQ1zG_detailStatusText",
756
+ "modalCancel": "BiQ1zG_modalCancel",
757
+ "result": "BiQ1zG_result",
758
+ "errorTitle": "BiQ1zG_errorTitle",
759
+ "modalCmdText": "BiQ1zG_modalCmdText",
760
+ "progressFill": "BiQ1zG_progressFill",
761
+ "toastIn": "BiQ1zG_toastIn",
762
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
763
+ "noticeRow": "BiQ1zG_noticeRow",
764
+ "noticeRowOk": "BiQ1zG_noticeRowOk",
774
765
  "modalIn": "BiQ1zG_modalIn",
775
- "modalHead": "BiQ1zG_modalHead",
776
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
777
- "progressHead": "BiQ1zG_progressHead",
778
- "progressTrack": "BiQ1zG_progressTrack",
766
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
767
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
768
+ "failEmpty": "BiQ1zG_failEmpty",
769
+ "detailMono": "BiQ1zG_detailMono",
779
770
  "stripCancel": "BiQ1zG_stripCancel",
780
- "aboutModal": "BiQ1zG_aboutModal",
781
771
  "errorCopySoft": "BiQ1zG_errorCopySoft",
782
- "failPrepareHint": "BiQ1zG_failPrepareHint",
783
- "modal": "BiQ1zG_modal",
772
+ "toastFail": "BiQ1zG_toastFail",
773
+ "resultCheck": "BiQ1zG_resultCheck",
774
+ "helpModal": "BiQ1zG_helpModal",
775
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
784
776
  "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
785
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
786
- "detailArrow": "BiQ1zG_detailArrow",
787
- "progressFill": "BiQ1zG_progressFill",
788
- "confirmIconWrap": "BiQ1zG_confirmIconWrap",
789
- "modalBody": "BiQ1zG_modalBody",
790
- "noticeRemove": "BiQ1zG_noticeRemove",
791
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
792
- "detailGrid": "BiQ1zG_detailGrid",
793
- "overlay": "BiQ1zG_overlay",
794
- "failRow": "BiQ1zG_failRow",
795
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
796
- "aboutMeta": "BiQ1zG_aboutMeta",
797
- "detailLabel": "BiQ1zG_detailLabel",
798
- "noticeRow": "BiQ1zG_noticeRow",
799
- "progress": "BiQ1zG_progress",
800
- "detailValue": "BiQ1zG_detailValue",
801
- "modalTitle": "BiQ1zG_modalTitle",
802
- "modalCopy": "BiQ1zG_modalCopy",
777
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
778
+ "queueRow": "BiQ1zG_queueRow",
779
+ "confirmIcon": "BiQ1zG_confirmIcon",
803
780
  "noticeTextFail": "BiQ1zG_noticeTextFail",
804
- "progressText": "BiQ1zG_progressText",
781
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
805
782
  "failHead": "BiQ1zG_failHead",
806
- "helpModal": "BiQ1zG_helpModal",
807
- "toast": "BiQ1zG_toast",
808
- "queueRowBody": "BiQ1zG_queueRowBody",
809
- "modalCmdText": "BiQ1zG_modalCmdText",
810
- "restartNow": "BiQ1zG_restartNow",
811
- "noticeList": "BiQ1zG_noticeList",
812
- "detailStatusPending": "BiQ1zG_detailStatusPending",
813
- "overlayIn": "BiQ1zG_overlayIn",
814
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
815
- "queueRow": "BiQ1zG_queueRow",
816
- "resultDesc": "BiQ1zG_resultDesc",
817
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
818
- "errorHint": "BiQ1zG_errorHint",
819
- "noticeIgnore": "BiQ1zG_noticeIgnore",
783
+ "aboutContent": "BiQ1zG_aboutContent",
784
+ "aboutMeta": "BiQ1zG_aboutMeta",
785
+ "detailRow": "BiQ1zG_detailRow",
786
+ "resultRestarting": "BiQ1zG_resultRestarting",
787
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
820
788
  "failClear": "BiQ1zG_failClear",
789
+ "errorHint": "BiQ1zG_errorHint",
790
+ "modalValue": "BiQ1zG_modalValue",
791
+ "toast": "BiQ1zG_toast",
792
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
793
+ "progressText": "BiQ1zG_progressText",
794
+ "modalRow": "BiQ1zG_modalRow",
795
+ "errorModal": "BiQ1zG_errorModal",
796
+ "modalBody": "BiQ1zG_modalBody",
821
797
  "queueRowTarget": "BiQ1zG_queueRowTarget",
822
- "failEmpty": "BiQ1zG_failEmpty",
798
+ "errorBox": "BiQ1zG_errorBox",
799
+ "queueSection": "BiQ1zG_queueSection",
800
+ "detailStars": "BiQ1zG_detailStars",
801
+ "detailPathText": "BiQ1zG_detailPathText",
802
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
803
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
804
+ "noticeHead": "BiQ1zG_noticeHead",
805
+ "failList": "BiQ1zG_failList",
806
+ "resultTitle": "BiQ1zG_resultTitle",
807
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
808
+ "progressTrack": "BiQ1zG_progressTrack",
809
+ "failKind": "BiQ1zG_failKind",
810
+ "detailPath": "BiQ1zG_detailPath",
811
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
812
+ "detailDim": "BiQ1zG_detailDim",
813
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
814
+ "modalInstall": "BiQ1zG_modalInstall",
815
+ "noticeRemove": "BiQ1zG_noticeRemove",
816
+ "queueRowPct": "BiQ1zG_queueRowPct",
817
+ "overlay": "BiQ1zG_overlay",
818
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
819
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
820
+ "failBigIssue": "BiQ1zG_failBigIssue",
821
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
822
+ "detailArrow": "BiQ1zG_detailArrow",
823
+ "detailLink": "BiQ1zG_detailLink",
824
+ "detailValue": "BiQ1zG_detailValue",
825
+ "detailModal": "BiQ1zG_detailModal",
823
826
  "modalCmd": "BiQ1zG_modalCmd",
824
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
825
827
  "noticeFoot": "BiQ1zG_noticeFoot",
826
- "failBigIssue": "BiQ1zG_failBigIssue"
828
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
829
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
830
+ "progressFillFail": "BiQ1zG_progressFillFail",
831
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
832
+ "overlayIn": "BiQ1zG_overlayIn",
833
+ "restartNow": "BiQ1zG_restartNow",
834
+ "failRow": "BiQ1zG_failRow",
835
+ "modalTitle": "BiQ1zG_modalTitle",
836
+ "modalHead": "BiQ1zG_modalHead",
837
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
838
+ "modalWide": "BiQ1zG_modalWide",
839
+ "detailGrid": "BiQ1zG_detailGrid",
840
+ "aboutModal": "BiQ1zG_aboutModal",
841
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
842
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
843
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
844
+ "queueRowHead": "BiQ1zG_queueRowHead"
827
845
  };
828
846
  //#endregion
829
847
  //#region src/client/logic/install-command.ts
@@ -893,7 +911,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
893
911
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
894
912
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
895
913
  */
896
- const PLUGIN_VERSION = "1.3.6";
914
+ const PLUGIN_VERSION = "1.3.8";
897
915
  const CATEGORY_ORDER = [
898
916
  "interface",
899
917
  "session",
@@ -1526,7 +1544,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1526
1544
  */
1527
1545
  const hubHasUpdate = (() => {
1528
1546
  if (!hubUpdateInfo) return false;
1529
- return hubUpdateInfo.version !== "1.3.6";
1547
+ return hubUpdateInfo.version !== "1.3.8";
1530
1548
  })();
1531
1549
  (0, react.useMemo)(() => {
1532
1550
  if (!plugins) return [];
@@ -1705,23 +1723,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1705
1723
  return next;
1706
1724
  }
1707
1725
  /**
1708
- * 失败归类,四态。无论底层机制如何(pnpm 白名单拦截 / 构建脚本被忽略 / prepare 失败),
1726
+ * 失败归类,五态。无论底层机制如何(pnpm 白名单拦截 / 构建脚本被忽略 / prepare 失败),
1709
1727
  * 对用户而言结果都一样 —— 当前安装通道(npm 或 git)装不上,就是插件分发/依赖的问题,
1710
- * 一律引导提 Issue;唯一例外是本机 npm 自身版本过低导致的内部崩溃(见 npmTooOld):
1728
+ * 一律引导提 Issue;唯一的两个例外是本机环境问题(npm 版本过低 / 网络不通):
1711
1729
  * - npmTooOld:失败输出含 npm arborist 的 `edgesOut` 崩溃特征(build-ideal-tree.js 解 peer 依赖时
1712
1730
  * 内部抛错,npm 11.6.0 前必现的已知缺陷,npm/cli#8261、#9787),或服务端已核实本机版本低于
1713
1731
  * 阈值并打了 `[npm-too-low]` 标记 —— 是本机 npm 版本过低/自身缺陷,不是插件问题 → 引导升级 npm
1714
- * - pnpmIgnoredBuild:插件依赖里的原生模块构建脚本被 pnpm 默认拦截(如 node-pty,
1715
- * `ERR_PNPM_IGNORED_BUILDS`)。只影响带原生模块的插件,其他插件不受影响 —— 差异在
1716
- * 插件的依赖选择,属插件依赖/打包问题 → 引导去仓库提 Issue(建议改用预编译版本)
1732
+ * - network:安装前连通性预检拦截(服务端 `[network]` 标记)或底层连接失败
1733
+ * (ERR_PNPM_GIT_FETCH_FAILED / ETIMEDOUT / DNS 解析 / TLS 握手 / 代理拒绝)——
1734
+ * 是本机网络不通/被墙/代理有问题,不是插件问题 → 提示检查网络,不引导提 Issue
1735
+ * - pnpmIgnoredBuild:插件自身或依赖的构建脚本被 pnpm 安全白名单(allowBuilds)默认拦截
1736
+ * (`ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED` / `ERR_PNPM_IGNORED_BUILDS`)。只影响带安装期
1737
+ * 构建的插件,其他插件不受影响 —— 差异在插件的依赖/打包方式,属插件依赖/打包问题
1738
+ * → 引导去仓库提 Issue(建议改用预编译版本或关闭安装期构建)
1717
1739
  * - pluginPrepare:插件的 prepare/构建脚本实际执行失败(git tarball 常因缺失子模块或
1718
1740
  * 构建产物导致)—— 属插件打包/分发问题,应引导去仓库提 Issue
1719
1741
  * - repo:其余失败(含 git prepare 被 pnpm 白名单拦截等),默认按插件仓库问题引导提 Issue
1720
1742
  */
1721
1743
  function classifyFailure(message) {
1722
1744
  if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
1745
+ if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
1746
+ if (/\[network\]|ERR_PNPM_GIT_FETCH_FAILED|ETIMEDOUT|ECONNREFUSED|ECONNRESET|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH|getaddrinfo|Could not connect|Could not resolve host|Network unreachable|Failed to connect|socket hang up|CERT_HAS_EXPIRED|SSL certificate problem|\bTLS\b|\bSSL\b/i.test(message)) return "network";
1723
1747
  if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
1724
- if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:/i.test(message)) return "pnpmIgnoredBuild";
1725
1748
  if (/ERR_PNPM_PREPARE_PACKAGE|ELIFECYCLE|Command failed|prepare-guard/i.test(message)) return "pluginPrepare";
1726
1749
  return "repo";
1727
1750
  }
@@ -1772,6 +1795,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1772
1795
  const m = message.match(/\[?ERR_[A-Z_]+\]?/);
1773
1796
  return m ? m[0].replace(/^\[|\]$/g, "") : null;
1774
1797
  }
1798
+ /**
1799
+ * 从网络类失败消息里提取「具体连不上的地址」,供弹窗精准提示(你的网络无法访问什么)。
1800
+ * 优先取服务端 [network] 预检消息括号里的探测地址(中文「(…)」/ 英文「(…)」),
1801
+ * 否则取消息里出现的第一个 URL(git fetch 的仓库地址、registry 域名等)。
1802
+ * 提取不到返回 null —— 调用方据此跳过地址行。
1803
+ */
1804
+ function unreachableTargetOf(message) {
1805
+ const paren = message.match(/[((](https?:\/\/[^\s'"`<>()+]+)[))]/);
1806
+ if (paren) return paren[1];
1807
+ const url = message.match(/https?:\/\/[^\s'"`<>()()]+/);
1808
+ return url ? url[0].replace(/[.,;:))\]]+$/, "") : null;
1809
+ }
1775
1810
  //#endregion
1776
1811
  //#region src/client/logic/urls.ts
1777
1812
  /** dsh-plugin.org 中文页挂在 /zh/ 前缀下,英文在根路径。 */
@@ -1793,17 +1828,21 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1793
1828
  function pluginSiteUrl(repo) {
1794
1829
  return `${SITE_URL}plugins/${repo}`;
1795
1830
  }
1796
- /** 根据实际执行的命令判定失败动作标签(安装/更新/卸载):
1797
- * 命令形如 `dsh plugin --profile web add|update|remove <target>`,
1798
- * 出现 remove/update 动词即对应归类,其余(add、全局 npm 命令、未知)一律算安装。 */
1799
- function actionLabelOf(command) {
1800
- if (command && /\s+remove\s+/i.test(command)) return "Remove";
1801
- if (command && /\s+update\s+/i.test(command)) return "Update";
1802
- return "Install";
1831
+ /** 按失败类型给出简洁的错误原因标题(对外用英文):
1832
+ * 标题直接点明问题出在哪一侧(构建白名单/分发物/本机 npm/网络/插件侧),
1833
+ * 作者与用户扫一眼列表就能分流 —— 不再用含糊的 Install/Remove 动作词。 */
1834
+ function reasonTitleOf(kind) {
1835
+ switch (kind) {
1836
+ case "npmTooOld": return "npm too old to install";
1837
+ case "pnpmIgnoredBuild": return "build scripts blocked by pnpm allowlist";
1838
+ case "pluginPrepare": return "plugin distribution incomplete";
1839
+ case "network": return "network failure on the user side";
1840
+ default: return "plugin install failed";
1841
+ }
1803
1842
  }
1804
1843
  /**
1805
- * 一键反馈 GitHub Issue 的预填链接:标题带「来自 dsh-plugin.org」标识,正文只带
1806
- * 核心信息 —— 原因判定 + 关键错误代码 + 尝试过的安装方式 + 宿主机器环境快照 +
1844
+ * 一键反馈 GitHub Issue 的预填链接:标题带「来自 dsh-plugin.org」标识 + 错误原因,
1845
+ * 正文只带核心信息 —— 原因判定 + 关键错误代码 + 尝试过的安装方式 + 宿主机器环境快照 +
1807
1846
  * 错误核心摘要(完整日志太长,塞进 URL 会被 GitHub 以「request URL too long」拒绝,
1808
1847
  * 故只收集重点)。错误弹窗、失败记录共用此逻辑。
1809
1848
  * env 取不到时为 null,链接照常生成、只是少环境段。
@@ -1811,9 +1850,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1811
1850
  * 组织 scope 与 GitHub 用户名不一致时也能直接指认正确的 npm 包名。
1812
1851
  */
1813
1852
  function pluginIssueUrl(repo, message, env, command, attempts) {
1814
- const title = `[dsh-plugin.org | dsh-plugin-hub] ${actionLabelOf(command)} failed: ${repo}`;
1815
1853
  const kind = classifyFailure(message);
1816
- const reason = /\[packaging\]/i.test(message) ? "plugin distribution is incomplete — the entry file declared in package.json is missing from the published package (github tarball or npm package); please commit build output or publish a complete package" : kind === "pluginPrepare" ? "plugin prepare/build script failed during install (packaging/distribution issue)" : kind === "pnpmIgnoredBuild" ? "plugin depends on a native module whose build script pnpm blocks by default (use a prebuilt variant)" : "plugin-side install failure";
1854
+ const title = `[dsh-plugin.org | dsh-plugin-hub] ${reasonTitleOf(kind)}: ${repo}`;
1855
+ const reason = /\[packaging\]/i.test(message) ? "plugin distribution is incomplete — the entry file declared in package.json is missing from the published package (github tarball or npm package); please commit build output or publish a complete package" : kind === "network" ? "network connectivity issue on the user side (DNS, proxy, firewall, or a blocked connection)" : kind === "pluginPrepare" ? "plugin prepare/build script failed during install (packaging/distribution issue)" : kind === "pnpmIgnoredBuild" ? "plugin depends on a native module whose build script pnpm blocks by default (use a prebuilt variant)" : "plugin-side install failure";
1817
1856
  const code = coreErrorCode(message);
1818
1857
  const build = (coreChars) => {
1819
1858
  const body = [
@@ -1997,7 +2036,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1997
2036
  * 给足余量;超时主动中止,避免服务端 preflight 网络挂起时前端永久卡「安装中 0%」。 */
1998
2037
  const REQUEST_TIMEOUT_MS = 6e4;
1999
2038
  function useTaskQueue(opts) {
2000
- const { t, refreshInstalled, onInstallDone, onUninstallDone, onError, installPlugin, installCustomTarget, installGlobalTarget, uninstallPlugin, uninstallName, installedName, resolvePending } = opts;
2039
+ const { t, langKey, refreshInstalled, onInstallDone, onUninstallDone, onError, installPlugin, installCustomTarget, installGlobalTarget, uninstallPlugin, uninstallName, installedName, resolvePending } = opts;
2001
2040
  const [queue, setQueue] = (0, react.useState)([]);
2002
2041
  const queueRef = (0, react.useRef)([]);
2003
2042
  /** 待重启列表(服务端内存态 + 本地展示信息补齐);与 queue 一样以 ref 为唯一事实来源。 */
@@ -2307,6 +2346,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2307
2346
  display: input.repo,
2308
2347
  source: input.source,
2309
2348
  mode: input.update ? "update" : void 0,
2349
+ ...langKey ? { lang: langKey } : {},
2310
2350
  ...input.globalNpm && input.globalNpm.length > 0 ? { globalNpm: input.globalNpm } : {}
2311
2351
  }),
2312
2352
  signal: controller.signal
@@ -3142,7 +3182,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3142
3182
  }
3143
3183
  /** 预填插件仓库的 GitHub Issue 链接:标题带插件名,正文附完整错误信息,方便用户一键反馈。 */
3144
3184
  /** 安装/卸载失败弹窗:布局与失败记录一致(类型徽标 + 仓库超链接 + 隐蔽复制按钮),报错完整展示,底部一键提交 Issue。 */
3145
- function ErrorModal({ message, repo, kind, command, attempts, t, env, onCopy, onClose }) {
3185
+ function ErrorModal({ message, repo, kind, command, attempts, t, env, onCopy, onClose, onRunDiagnostics }) {
3146
3186
  const failureKind = classifyFailure(message);
3147
3187
  const npmVersion = npmTooLowVersion(message);
3148
3188
  const copyText = [
@@ -3172,7 +3212,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3172
3212
  }, repo) : null, (0, react.createElement)("button", {
3173
3213
  className: Modal_module_css_default.errorCopySoft,
3174
3214
  onClick: () => onCopy(copyText)
3175
- }, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, message), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "pluginPrepare" || failureKind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, failureKind === "pnpmIgnoredBuild" ? t("failIgnoredBuild") : /\[packaging\]/i.test(message) ? t("failPackagingHint") : t("failPrepareHint")), repo ? (0, react.createElement)("a", {
3215
+ }, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, message), failureKind === "npmTooOld" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(npmVersion ? "failNpmTooLowV" : "failNpmTooLow", npmVersion ? { v: npmVersion } : void 0)) : failureKind === "network" ? (0, react.createElement)("div", null, [
3216
+ (() => {
3217
+ const target = unreachableTargetOf(message);
3218
+ return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
3219
+ })(),
3220
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
3221
+ onRunDiagnostics ? (0, react.createElement)("button", {
3222
+ className: Modal_module_css_default.failDiagBtn,
3223
+ onClick: onRunDiagnostics
3224
+ }, t("failNetworkRunDiag")) : null
3225
+ ]) : failureKind === "pluginPrepare" || failureKind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, failureKind === "pnpmIgnoredBuild" ? t("failIgnoredBuild") : /\[packaging\]/i.test(message) ? t("failPackagingHint") : t("failPrepareHint")), repo ? (0, react.createElement)("a", {
3176
3226
  className: Modal_module_css_default.failBigIssue,
3177
3227
  href: pluginIssueUrl(repo, message, env, command, attempts),
3178
3228
  target: "_blank",
@@ -3259,7 +3309,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3259
3309
  out = out.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g, (m, alt, url) => {
3260
3310
  const src = String(url);
3261
3311
  if (!/^https?:\/\//i.test(src) || /[\u0000]/.test(src)) return m;
3262
- if (/\/dsh-plugin-user-group-qr-[^/]*$/i.test(src)) return `<img src="${src}" alt="${String(alt)}" width="250" height="250" loading="lazy">`;
3312
+ if (/\/dsh-plugin-user-group-qr-[^/]*$/i.test(src)) return `<img src="${src}" alt="${String(alt)}" width="100" height="100" loading="lazy">`;
3263
3313
  return `<img src="${src}" alt="${String(alt)}" loading="lazy">`;
3264
3314
  });
3265
3315
  out = out.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (m, text, url) => /^https?:\/\//i.test(String(url)) && !/[\u0000]/.test(String(url)) ? `<a href="${String(url)}" target="_blank" rel="noopener noreferrer">${String(text)}</a>` : m);
@@ -3604,7 +3654,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3604
3654
  strokeLinecap: "round"
3605
3655
  }));
3606
3656
  }
3607
- function NotificationsModal({ records, tasks, pendingRestarts, t, env, onClose, onCopy, onClear, onRemove, onUpdate, onIgnoreUpdate, cancelTask, restarting, onRestart, resolveRepo }) {
3657
+ function NotificationsModal({ records, tasks, pendingRestarts, t, env, onClose, onCopy, onClear, onRemove, onUpdate, onIgnoreUpdate, cancelTask, restarting, onRestart, onRunDiagnostics, resolveRepo }) {
3608
3658
  const [confirmClear, setConfirmClear] = (0, react.useState)(false);
3609
3659
  const [confirmRemoveId, setConfirmRemoveId] = (0, react.useState)(null);
3610
3660
  return (0, react.createElement)("div", {
@@ -3713,6 +3763,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3713
3763
  const v = npmTooLowVersion(r.message);
3714
3764
  return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(v ? "failNpmTooLowV" : "failNpmTooLow", v ? { v } : void 0));
3715
3765
  }
3766
+ if (kind === "network") return (0, react.createElement)("div", null, [
3767
+ (() => {
3768
+ const target = unreachableTargetOf(r.message);
3769
+ return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
3770
+ })(),
3771
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
3772
+ onRunDiagnostics ? (0, react.createElement)("button", {
3773
+ className: Modal_module_css_default.failDiagBtn,
3774
+ onClick: onRunDiagnostics
3775
+ }, t("failNetworkRunDiag")) : null
3776
+ ]);
3716
3777
  if (kind === "pluginPrepare" || kind === "pnpmIgnoredBuild") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, kind === "pnpmIgnoredBuild" ? t("failIgnoredBuild") : /\[packaging\]/i.test(r.message) ? t("failPackagingHint") : t("failPrepareHint")), r.repo && shownRepo ? (0, react.createElement)("a", {
3717
3778
  className: Modal_module_css_default.failBigIssue,
3718
3779
  href: pluginIssueUrl(shownRepo, r.message, env, r.command, r.attempts),
@@ -3892,7 +3953,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3892
3953
  }
3893
3954
  //#endregion
3894
3955
  //#region \0dsh-css:src/client/styles/List.module.css.mjs
3895
- const css$9 = "._3XaZHa_body{flex-direction:column;flex:1;min-height:0;display:flex}._3XaZHa_list{flex-direction:column;flex:1;gap:6px;min-height:0;padding:2px 4px 4px 2px;display:flex;overflow-y:auto}._3XaZHa_moreSentinel{flex-shrink:0;height:1px}._3XaZHa_card{border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;justify-content:space-between;align-items:stretch;gap:12px;padding:9px 12px;transition:border-color .12s,background .12s;display:flex}._3XaZHa_card:hover{border-color:var(--hub-brand);background:var(--hub-bg-2)}._3XaZHa_cardMain{flex-direction:column;gap:4px;min-width:0;display:flex}._3XaZHa_cardHead{align-items:center;gap:6px;min-width:0;display:flex}._3XaZHa_cardTitle{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}._3XaZHa_categoryBadge,._3XaZHa_verified,._3XaZHa_versionBadge,._3XaZHa_updateBadge{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_categoryBadge{color:var(--hub-brand);border-color:var(--hub-border-ghost)}._3XaZHa_verified{color:var(--hub-success);border-color:var(--hub-success-border)}._3XaZHa_versionBadge{color:var(--hub-text-secondary);border-color:var(--hub-border-input)}._3XaZHa_updateBadge{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3XaZHa_desc{color:var(--hub-text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}._3XaZHa_topics{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:flex}._3XaZHa_topic{color:var(--hub-text-tertiary);background:var(--hub-bg-3);white-space:nowrap;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_cardSide{flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:flex-end;gap:6px;display:flex}._3XaZHa_stats{flex-direction:column;align-items:flex-end;gap:1px;display:flex}._3XaZHa_star{color:var(--hub-warn);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_fork{color:var(--hub-text-tertiary);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_date{color:var(--hub-text-tertiary);white-space:nowrap;font-size:10px;line-height:14px}._3XaZHa_installBtn,._3XaZHa_installBtnCopied,._3XaZHa_installBtnInstalled,._3XaZHa_installBtnUpdate,._3XaZHa_uninstallBtn,._3XaZHa_detailBtn{cursor:pointer;border-radius:6px;padding:2px 10px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s,background .12s}._3XaZHa_installBtnInstalled{color:var(--hub-success);background:var(--hub-success-tint);cursor:default;-webkit-user-select:none;user-select:none;border:none}._3XaZHa_installBtnUpdate{color:#fff;background:var(--hub-warn);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtnUpdate:hover{background:var(--hub-warn-strong)}._3XaZHa_uninstallBtn{color:var(--hub-danger);background:var(--hub-danger-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_uninstallBtn:hover{color:#fff;background:var(--hub-danger-hover)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn{color:#fff;background:var(--hub-danger)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn:hover{background:var(--hub-danger-hover)}._3XaZHa_installBtn{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtn:hover{background:var(--hub-btn-hover)}._3XaZHa_detailBtn{color:var(--hub-text-secondary);-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;text-decoration:none;display:inline-flex}._3XaZHa_detailBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_actions{align-items:center;gap:6px;display:flex}._3XaZHa_installBtnCopied{color:var(--hub-success);background:var(--hub-success-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_state{text-align:center;min-height:160px;color:var(--hub-text-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:12px;line-height:18px;display:flex}._3XaZHa_stateTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600}._3XaZHa_stateDesc{max-width:420px}._3XaZHa_retryBtn{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;margin-top:4px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_retryBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_footer{border-top:1px solid var(--hub-border-1);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;padding:6px 4px 0;display:flex}._3XaZHa_footLink{color:var(--hub-brand);white-space:nowrap;-webkit-user-select:none;user-select:none;font-size:11px;line-height:16px;text-decoration:none}._3XaZHa_footLink:hover{text-decoration:underline}";
3956
+ const css$9 = "._3XaZHa_body{flex-direction:column;flex:1;min-height:0;display:flex}._3XaZHa_list{flex-direction:column;flex:1;gap:6px;min-height:0;padding:2px 4px 4px 2px;display:flex;overflow-y:auto}._3XaZHa_moreSentinel{flex-shrink:0;height:1px}._3XaZHa_card{border:1px solid var(--hub-border-2);background:var(--hub-bg-1);border-radius:8px;justify-content:space-between;align-items:stretch;gap:12px;padding:9px 12px;transition:border-color .12s,background .12s;display:flex}._3XaZHa_card:hover{border-color:var(--hub-brand);background:var(--hub-bg-2)}._3XaZHa_cardMain{flex-direction:column;gap:4px;min-width:0;display:flex}._3XaZHa_cardHead{align-items:center;gap:6px;min-width:0;display:flex}._3XaZHa_cardTitle{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;line-height:18px;overflow:hidden}._3XaZHa_categoryBadge,._3XaZHa_verified,._3XaZHa_versionBadge,._3XaZHa_updateBadge{border:1px solid #0000;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_categoryBadge{color:var(--hub-brand);border-color:var(--hub-border-ghost)}._3XaZHa_verified{color:var(--hub-success);border-color:var(--hub-success-border)}._3XaZHa_versionBadge{color:var(--hub-text-secondary);border-color:var(--hub-border-input)}._3XaZHa_updateBadge{color:var(--hub-warn);border-color:var(--hub-warn-border);background:var(--hub-warn-tint)}._3XaZHa_desc{color:var(--hub-text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}._3XaZHa_topics{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:flex}._3XaZHa_topic{color:var(--hub-text-tertiary);background:var(--hub-bg-3);white-space:nowrap;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10px;line-height:16px}._3XaZHa_cardSide{flex-direction:column;flex-shrink:0;justify-content:space-between;align-items:flex-end;gap:6px;display:flex}._3XaZHa_stats{flex-direction:column;align-items:flex-end;gap:1px;display:flex}._3XaZHa_star{color:var(--hub-warn);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_fork{color:var(--hub-text-tertiary);white-space:nowrap;font-size:11px;line-height:16px}._3XaZHa_date{color:var(--hub-text-tertiary);white-space:nowrap;font-size:10px;line-height:14px}._3XaZHa_installBtn,._3XaZHa_installBtnCopied,._3XaZHa_installBtnInstalled,._3XaZHa_installBtnUpdate,._3XaZHa_uninstallBtn,._3XaZHa_detailBtn{cursor:pointer;border-radius:6px;padding:2px 10px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s,background .12s}._3XaZHa_installBtnInstalled{color:var(--hub-success);background:var(--hub-success-tint);cursor:default;-webkit-user-select:none;user-select:none;border:none}._3XaZHa_installBtnUpdate{color:#fff;background:var(--hub-warn);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtnUpdate:hover{background:var(--hub-warn-strong)}._3XaZHa_uninstallBtn{color:var(--hub-danger);background:var(--hub-danger-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_uninstallBtn:hover{color:#fff;background:var(--hub-danger-hover)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn{color:#fff;background:var(--hub-danger)}body[data-ds-dark-theme] ._3XaZHa_uninstallBtn:hover{background:var(--hub-danger-hover)}._3XaZHa_installBtn{color:var(--hub-text-on-fill);background:var(--hub-btn-fill);-webkit-user-select:none;user-select:none;border:none;font-weight:500}._3XaZHa_installBtn:hover{background:var(--hub-btn-hover)}._3XaZHa_detailBtn{color:var(--hub-text-secondary);-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;text-decoration:none;display:inline-flex}._3XaZHa_detailBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_actions{align-items:center;gap:6px;display:flex}._3XaZHa_installBtnCopied{color:var(--hub-success);background:var(--hub-success-tint);-webkit-user-select:none;user-select:none;border:none}._3XaZHa_state{text-align:center;min-height:160px;color:var(--hub-text-tertiary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:12px;line-height:18px;display:flex}._3XaZHa_stateTitle{color:var(--hub-text-primary);font-size:13px;font-weight:600}._3XaZHa_stateDesc{max-width:420px}._3XaZHa_retryBtn{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_retryBtn:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._3XaZHa_stateActions{align-items:center;gap:8px;margin-top:4px;display:flex}._3XaZHa_diagBtn{color:#fff;background:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:6px;padding:4px 12px;font-size:12px;line-height:18px}._3XaZHa_diagBtn:hover{background:var(--hub-brand-hover)}._3XaZHa_footer{border-top:1px solid var(--hub-border-1);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;padding:6px 4px 0;display:flex}._3XaZHa_footLink{color:var(--hub-brand);white-space:nowrap;-webkit-user-select:none;user-select:none;font-size:11px;line-height:16px;text-decoration:none}._3XaZHa_footLink:hover{text-decoration:underline}";
3896
3957
  const tagId$9 = "dsh-plugin/List.module.css";
3897
3958
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
3898
3959
  const tag = document.createElement("style");
@@ -3907,37 +3968,39 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3907
3968
  css: css$9
3908
3969
  });
3909
3970
  var List_module_css_default = {
3971
+ "desc": "_3XaZHa_desc",
3972
+ "fork": "_3XaZHa_fork",
3973
+ "installBtn": "_3XaZHa_installBtn",
3974
+ "retryBtn": "_3XaZHa_retryBtn",
3975
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
3976
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
3977
+ "state": "_3XaZHa_state",
3978
+ "diagBtn": "_3XaZHa_diagBtn",
3979
+ "cardMain": "_3XaZHa_cardMain",
3910
3980
  "cardSide": "_3XaZHa_cardSide",
3911
- "card": "_3XaZHa_card",
3912
- "actions": "_3XaZHa_actions",
3913
3981
  "topics": "_3XaZHa_topics",
3914
- "cardMain": "_3XaZHa_cardMain",
3915
- "body": "_3XaZHa_body",
3916
- "list": "_3XaZHa_list",
3917
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
3982
+ "detailBtn": "_3XaZHa_detailBtn",
3983
+ "cardHead": "_3XaZHa_cardHead",
3984
+ "stateActions": "_3XaZHa_stateActions",
3918
3985
  "footer": "_3XaZHa_footer",
3919
- "cardTitle": "_3XaZHa_cardTitle",
3920
- "retryBtn": "_3XaZHa_retryBtn",
3921
- "uninstallBtn": "_3XaZHa_uninstallBtn",
3922
- "date": "_3XaZHa_date",
3986
+ "installBtnUpdate": "_3XaZHa_installBtnUpdate",
3987
+ "actions": "_3XaZHa_actions",
3988
+ "list": "_3XaZHa_list",
3989
+ "stateTitle": "_3XaZHa_stateTitle",
3990
+ "updateBadge": "_3XaZHa_updateBadge",
3923
3991
  "topic": "_3XaZHa_topic",
3924
- "fork": "_3XaZHa_fork",
3925
- "categoryBadge": "_3XaZHa_categoryBadge",
3926
- "versionBadge": "_3XaZHa_versionBadge",
3927
- "installBtn": "_3XaZHa_installBtn",
3928
- "detailBtn": "_3XaZHa_detailBtn",
3929
- "desc": "_3XaZHa_desc",
3930
- "verified": "_3XaZHa_verified",
3931
3992
  "star": "_3XaZHa_star",
3932
- "installBtnUpdate": "_3XaZHa_installBtnUpdate",
3933
3993
  "stateDesc": "_3XaZHa_stateDesc",
3994
+ "verified": "_3XaZHa_verified",
3995
+ "stats": "_3XaZHa_stats",
3996
+ "date": "_3XaZHa_date",
3997
+ "card": "_3XaZHa_card",
3998
+ "cardTitle": "_3XaZHa_cardTitle",
3999
+ "categoryBadge": "_3XaZHa_categoryBadge",
3934
4000
  "footLink": "_3XaZHa_footLink",
3935
- "state": "_3XaZHa_state",
4001
+ "body": "_3XaZHa_body",
3936
4002
  "moreSentinel": "_3XaZHa_moreSentinel",
3937
- "updateBadge": "_3XaZHa_updateBadge",
3938
- "stats": "_3XaZHa_stats",
3939
- "stateTitle": "_3XaZHa_stateTitle",
3940
- "cardHead": "_3XaZHa_cardHead",
4003
+ "versionBadge": "_3XaZHa_versionBadge",
3941
4004
  "installBtnCopied": "_3XaZHa_installBtnCopied"
3942
4005
  };
3943
4006
  //#endregion
@@ -4041,7 +4104,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4041
4104
  * the category or install-status filter changes so the replaced content is
4042
4105
  * not mistaken for a no-op update.
4043
4106
  */
4044
- function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall }) {
4107
+ function CatalogList({ plugins, failed, visible, total, t, langPath, reload, category, copied, installedName, installedVersion, hasUpdate, langKey, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4045
4108
  /** 列表滚动容器:分类/搜索切换后列表内容替换但 scrollTop 保留,会让用户误以为列表没更新,需重置回顶部 */
4046
4109
  const listRef = (0, react.useRef)(null);
4047
4110
  /** 增量渲染:全量目录太大(4400+),只渲染首批,滚动接近底部时自动追加下一批 */
@@ -4052,10 +4115,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4052
4115
  return (0, react.createElement)("div", { className: List_module_css_default.body }, (0, react.createElement)("div", {
4053
4116
  ref: listRef,
4054
4117
  className: List_module_css_default.list
4055
- }, plugins === null && !failed && (0, react.createElement)("div", { className: List_module_css_default.state }, t("loading")), failed && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("failed")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t("failedDesc")), (0, react.createElement)("button", {
4118
+ }, plugins === null && !failed && (0, react.createElement)("div", { className: List_module_css_default.state }, t("loading")), failed && (0, react.createElement)("div", { className: List_module_css_default.state }, (0, react.createElement)("div", { className: List_module_css_default.stateTitle }, t("failed")), (0, react.createElement)("div", { className: List_module_css_default.stateDesc }, t(hasProxy ? "failedDescProxy" : "failedDescNoProxy")), (0, react.createElement)("div", { className: List_module_css_default.stateActions }, (0, react.createElement)("button", {
4056
4119
  className: List_module_css_default.retryBtn,
4057
4120
  onClick: () => reload()
4058
- }, t("retry"))), 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, {
4121
+ }, t("retry")), (0, react.createElement)("button", {
4122
+ className: List_module_css_default.diagBtn,
4123
+ onClick: onOpenDiagnostics
4124
+ }, 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, {
4059
4125
  key: p.ownerSlug ? `${p.ownerSlug}/${p.slug}` : p.slug,
4060
4126
  plugin: p,
4061
4127
  copied,
@@ -4090,7 +4156,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4090
4156
  * it wires catalog state (query/sort/filter/category) to the small
4091
4157
  * presentational components so PluginHubSection stays free of view internals.
4092
4158
  */
4093
- function MarketView({ catalog, t, langPath, langKey, copied, resultText, onInstall, onUninstall }) {
4159
+ function MarketView({ catalog, t, langPath, langKey, copied, resultText, onInstall, onUninstall, hasProxy, onOpenDiagnostics }) {
4094
4160
  return (0, react.createElement)(react.Fragment, null, (0, react.createElement)(CategoryTabs, {
4095
4161
  category: catalog.category,
4096
4162
  setCategory: catalog.setCategory,
@@ -4120,7 +4186,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4120
4186
  hasUpdate: catalog.hasUpdate,
4121
4187
  langKey,
4122
4188
  onInstall,
4123
- onUninstall
4189
+ onUninstall,
4190
+ hasProxy,
4191
+ onOpenDiagnostics
4124
4192
  }));
4125
4193
  }
4126
4194
  //#endregion
@@ -4140,15 +4208,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4140
4208
  css: css$8
4141
4209
  });
4142
4210
  var SectionTabs_module_css_default = {
4143
- "tabCount": "_7tvizq_tabCount",
4211
+ "tabCountActive": "_7tvizq_tabCountActive",
4144
4212
  "tabActive": "_7tvizq_tabActive",
4145
- "tabIcon": "_7tvizq_tabIcon",
4146
4213
  "noticeIcon": "_7tvizq_noticeIcon",
4214
+ "tabIcon": "_7tvizq_tabIcon",
4147
4215
  "noticeBtn": "_7tvizq_noticeBtn",
4148
4216
  "noticeCount": "_7tvizq_noticeCount",
4149
4217
  "root": "_7tvizq_root",
4150
- "tab": "_7tvizq_tab",
4151
- "tabCountActive": "_7tvizq_tabCountActive"
4218
+ "tabCount": "_7tvizq_tabCount",
4219
+ "tab": "_7tvizq_tab"
4152
4220
  };
4153
4221
  //#endregion
4154
4222
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4225,42 +4293,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4225
4293
  css: css$7
4226
4294
  });
4227
4295
  var InstalledView_module_css_default = {
4228
- "segBtn": "_1nXeGW_segBtn",
4229
4296
  "list": "_1nXeGW_list",
4230
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4231
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4232
- "rowUpdate": "_1nXeGW_rowUpdate",
4233
- "segBtnActive": "_1nXeGW_segBtnActive",
4234
- "statusInactive": "_1nXeGW_statusInactive",
4235
- "rowCategory": "_1nXeGW_rowCategory",
4236
- "emptyDesc": "_1nXeGW_emptyDesc",
4237
- "rowTitleLine": "_1nXeGW_rowTitleLine",
4238
- "segLabel": "_1nXeGW_segLabel",
4239
- "row": "_1nXeGW_row",
4240
- "statusDot": "_1nXeGW_statusDot",
4241
- "rowMeta": "_1nXeGW_rowMeta",
4242
- "searchInput": "_1nXeGW_searchInput",
4243
- "updateBadge": "_1nXeGW_updateBadge",
4244
- "searchWrap": "_1nXeGW_searchWrap",
4245
- "root": "_1nXeGW_root",
4246
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4247
- "exampleRow": "_1nXeGW_exampleRow",
4248
- "rowDesc": "_1nXeGW_rowDesc",
4249
- "segRow": "_1nXeGW_segRow",
4297
+ "rowDetail": "_1nXeGW_rowDetail",
4298
+ "rowMain": "_1nXeGW_rowMain",
4299
+ "exampleBadge": "_1nXeGW_exampleBadge",
4250
4300
  "emptyTitle": "_1nXeGW_emptyTitle",
4251
- "rowActions": "_1nXeGW_rowActions",
4252
- "versionBadge": "_1nXeGW_versionBadge",
4253
4301
  "segGroup": "_1nXeGW_segGroup",
4254
- "statusPending": "_1nXeGW_statusPending",
4255
4302
  "rowTitle": "_1nXeGW_rowTitle",
4256
- "exampleBadge": "_1nXeGW_exampleBadge",
4257
- "empty": "_1nXeGW_empty",
4303
+ "root": "_1nXeGW_root",
4258
4304
  "rowRepo": "_1nXeGW_rowRepo",
4259
4305
  "rowRestart": "_1nXeGW_rowRestart",
4260
- "rowMain": "_1nXeGW_rowMain",
4306
+ "emptyDesc": "_1nXeGW_emptyDesc",
4307
+ "row": "_1nXeGW_row",
4308
+ "segBtn": "_1nXeGW_segBtn",
4261
4309
  "rowUninstall": "_1nXeGW_rowUninstall",
4310
+ "searchInput": "_1nXeGW_searchInput",
4311
+ "versionBadge": "_1nXeGW_versionBadge",
4312
+ "rowUpdate": "_1nXeGW_rowUpdate",
4313
+ "exampleRow": "_1nXeGW_exampleRow",
4314
+ "searchWrap": "_1nXeGW_searchWrap",
4315
+ "segLabel": "_1nXeGW_segLabel",
4316
+ "rowMeta": "_1nXeGW_rowMeta",
4262
4317
  "toolbar": "_1nXeGW_toolbar",
4263
- "rowDetail": "_1nXeGW_rowDetail"
4318
+ "updateBadge": "_1nXeGW_updateBadge",
4319
+ "rowActions": "_1nXeGW_rowActions",
4320
+ "segBtnActive": "_1nXeGW_segBtnActive",
4321
+ "statusPending": "_1nXeGW_statusPending",
4322
+ "segRow": "_1nXeGW_segRow",
4323
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4324
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
4325
+ "empty": "_1nXeGW_empty",
4326
+ "rowDesc": "_1nXeGW_rowDesc",
4327
+ "statusInactive": "_1nXeGW_statusInactive",
4328
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4329
+ "rowCategory": "_1nXeGW_rowCategory",
4330
+ "statusDot": "_1nXeGW_statusDot",
4331
+ "rowSourceTag": "_1nXeGW_rowSourceTag"
4264
4332
  };
4265
4333
  //#endregion
4266
4334
  //#region src/client/components/views/InstalledView.tsx
@@ -4506,28 +4574,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4506
4574
  css: css$6
4507
4575
  });
4508
4576
  var CustomInstallView_module_css_default = {
4509
- "installInput": "zISxCG_installInput",
4510
- "installExample": "zISxCG_installExample",
4511
4577
  "desc": "zISxCG_desc",
4512
- "installCards": "zISxCG_installCards",
4513
- "installInsertBtn": "zISxCG_installInsertBtn",
4514
- "helpNote": "zISxCG_helpNote",
4515
4578
  "installLabel": "zISxCG_installLabel",
4516
- "channelOffText": "zISxCG_channelOffText",
4579
+ "installInsertBtn": "zISxCG_installInsertBtn",
4580
+ "installExample": "zISxCG_installExample",
4581
+ "installBtn": "zISxCG_installBtn",
4582
+ "channelOff": "zISxCG_channelOff",
4583
+ "helpBody": "zISxCG_helpBody",
4584
+ "installCards": "zISxCG_installCards",
4585
+ "installInput": "zISxCG_installInput",
4517
4586
  "channelOffBtn": "zISxCG_channelOffBtn",
4587
+ "helpNote": "zISxCG_helpNote",
4588
+ "helpCmd": "zISxCG_helpCmd",
4589
+ "installCard": "zISxCG_installCard",
4518
4590
  "helpLine": "zISxCG_helpLine",
4591
+ "installRow": "zISxCG_installRow",
4592
+ "installHelpBtn": "zISxCG_installHelpBtn",
4519
4593
  "installCardDisabled": "zISxCG_installCardDisabled",
4520
4594
  "root": "zISxCG_root",
4521
- "channelOff": "zISxCG_channelOff",
4522
- "helpBody": "zISxCG_helpBody",
4523
4595
  "installCardHead": "zISxCG_installCardHead",
4524
- "installHelpBtn": "zISxCG_installHelpBtn",
4525
- "installRow": "zISxCG_installRow",
4526
- "installBtn": "zISxCG_installBtn",
4527
- "helpCmd": "zISxCG_helpCmd",
4528
4596
  "installInputError": "zISxCG_installInputError",
4529
- "installCard": "zISxCG_installCard",
4530
- "installError": "zISxCG_installError"
4597
+ "installError": "zISxCG_installError",
4598
+ "channelOffText": "zISxCG_channelOffText"
4531
4599
  };
4532
4600
  //#endregion
4533
4601
  //#region src/client/components/views/CustomInstallView.tsx
@@ -4799,7 +4867,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4799
4867
  }
4800
4868
  //#endregion
4801
4869
  //#region \0dsh-css:src/client/styles/SettingsView.module.css.mjs
4802
- const css$5 = "._506LLG_root{flex:1;align-items:stretch;min-width:0;min-height:0;display:flex}._506LLG_sidebar{border-right:1px solid var(--hub-border-1);flex-direction:column;flex:none;gap:2px;padding:8px 6px;display:flex;overflow-y:auto}._506LLG_navItem,._506LLG_navItemActive{box-sizing:border-box;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:7px;align-items:center;gap:8px;width:100%;padding:7px 10px;font-size:12.5px;line-height:18px;transition:color .12s,background-color .12s;display:flex}._506LLG_navItem{color:var(--hub-text-secondary);background:0 0}._506LLG_navItem:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._506LLG_navItemActive{color:var(--hub-brand);background:var(--hub-brand-tint);font-weight:600}._506LLG_navIcon{flex:none;display:inline-flex}._506LLG_content{flex-direction:column;flex:1;min-width:0;min-height:0;padding:14px 16px 18px;display:flex;overflow-y:auto}._506LLG_pageHeader{margin-bottom:12px}._506LLG_pageTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}._506LLG_pageDesc{color:var(--hub-text-tertiary);margin-top:3px;font-size:11.5px;line-height:16px}._506LLG_card{border:1px solid var(--hub-border-1);background:var(--hub-bg-1);border-radius:8px;flex-direction:column;min-width:0;display:flex}._506LLG_settingRow{border-bottom:1px solid var(--hub-border-1);justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRow:last-child{border-bottom:none}._506LLG_settingLabel{flex:1;min-width:0}._506LLG_settingTitle{color:var(--hub-text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;font-weight:500;line-height:18px;overflow:hidden}._506LLG_settingDesc{color:var(--hub-text-tertiary);margin-top:2px;font-size:11px;line-height:15px}._506LLG_settingControl{flex:none;align-items:center;display:flex}._506LLG_settingRowStack{border-bottom:1px solid var(--hub-border-1);flex-direction:column;align-items:stretch;gap:8px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRowStack:last-child{border-bottom:none}._506LLG_settingControlStack{align-items:center;display:flex}._506LLG_settingControlStack ._506LLG_textInput{width:100%}._506LLG_controlDropdown{min-width:180px}._506LLG_textInput{width:240px;height:28px;color:var(--hub-text-primary);background:var(--hub-bg-1);border:1px solid var(--hub-border-input);border-radius:6px;outline:none;padding:0 9px;font-family:inherit;font-size:12px;transition:border-color .15s}._506LLG_textInput:focus{border-color:var(--hub-brand-border)}._506LLG_textInput::placeholder{color:var(--hub-text-disabled)}._506LLG_resetBtn{cursor:pointer;height:28px;color:var(--hub-danger-text);border:1px solid var(--hub-danger-border);background:0 0;border-radius:6px;flex:none;padding:0 14px;font-size:12px;font-weight:500;transition:background-color .15s,border-color .15s,color .15s}._506LLG_resetBtn:hover{background:var(--hub-danger-tint);border-color:var(--hub-danger-text)}";
4870
+ const css$5 = "._506LLG_root{flex:1;align-items:stretch;min-width:0;min-height:0;display:flex}._506LLG_sidebar{border-right:1px solid var(--hub-border-1);flex-direction:column;flex:none;gap:2px;padding:8px 6px;display:flex;overflow-y:auto}._506LLG_navItem,._506LLG_navItemActive{box-sizing:border-box;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:7px;align-items:center;gap:8px;width:100%;padding:7px 10px;font-size:12.5px;line-height:18px;transition:color .12s,background-color .12s;display:flex}._506LLG_navItem{color:var(--hub-text-secondary);background:0 0}._506LLG_navItem:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}._506LLG_navItemActive{color:var(--hub-brand);background:var(--hub-brand-tint);font-weight:600}._506LLG_navIcon{flex:none;display:inline-flex}._506LLG_content{flex-direction:column;flex:1;min-width:0;min-height:0;padding:14px 16px 18px;display:flex;overflow-y:auto}._506LLG_pageHeader{margin-bottom:12px}._506LLG_pageTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}._506LLG_pageDesc{color:var(--hub-text-tertiary);margin-top:3px;font-size:11.5px;line-height:16px}._506LLG_card{border:1px solid var(--hub-border-1);background:var(--hub-bg-1);border-radius:8px;flex-direction:column;min-width:0;display:flex}._506LLG_settingRow{border-bottom:1px solid var(--hub-border-1);justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRow:last-child{border-bottom:none}._506LLG_settingLabel{flex:1;min-width:0}._506LLG_settingTitle{color:var(--hub-text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;font-weight:500;line-height:18px;overflow:hidden}._506LLG_settingDesc{color:var(--hub-text-tertiary);margin-top:2px;font-size:11px;line-height:15px}._506LLG_settingControl{flex:none;align-items:center;display:flex}._506LLG_settingRowStack{border-bottom:1px solid var(--hub-border-1);flex-direction:column;align-items:stretch;gap:8px;min-width:0;padding:10px 12px;display:flex}._506LLG_settingRowStack:last-child{border-bottom:none}._506LLG_settingControlStack{align-items:center;display:flex}._506LLG_settingControlStack ._506LLG_textInput{width:100%}._506LLG_proxyControl{flex-direction:column;align-items:stretch;gap:5px;width:100%;display:flex}._506LLG_proxyHint{color:var(--hub-text-disabled);font-size:11px;line-height:1.4}._506LLG_proxyHintOk{color:var(--hub-success)}._506LLG_proxyHintFail{color:var(--hub-warning)}._506LLG_controlDropdown{min-width:180px}._506LLG_textInput{width:240px;height:28px;color:var(--hub-text-primary);background:var(--hub-bg-1);border:1px solid var(--hub-border-input);border-radius:6px;outline:none;padding:0 9px;font-family:inherit;font-size:12px;transition:border-color .15s}._506LLG_textInput:focus{border-color:var(--hub-brand-border)}._506LLG_textInput::placeholder{color:var(--hub-text-disabled)}._506LLG_resetBtn{cursor:pointer;height:28px;color:var(--hub-danger-text);border:1px solid var(--hub-danger-border);background:0 0;border-radius:6px;flex:none;padding:0 14px;font-size:12px;font-weight:500;transition:background-color .15s,border-color .15s,color .15s}._506LLG_resetBtn:hover{background:var(--hub-danger-tint);border-color:var(--hub-danger-text)}";
4803
4871
  const tagId$5 = "dsh-plugin/SettingsView.module.css";
4804
4872
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
4805
4873
  const tag = document.createElement("style");
@@ -4814,26 +4882,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4814
4882
  css: css$5
4815
4883
  });
4816
4884
  var SettingsView_module_css_default = {
4817
- "root": "_506LLG_root",
4818
- "navItem": "_506LLG_navItem",
4819
- "pageHeader": "_506LLG_pageHeader",
4820
- "settingDesc": "_506LLG_settingDesc",
4885
+ "proxyControl": "_506LLG_proxyControl",
4821
4886
  "settingRowStack": "_506LLG_settingRowStack",
4887
+ "settingDesc": "_506LLG_settingDesc",
4888
+ "pageDesc": "_506LLG_pageDesc",
4889
+ "proxyHintFail": "_506LLG_proxyHintFail",
4822
4890
  "controlDropdown": "_506LLG_controlDropdown",
4823
- "settingLabel": "_506LLG_settingLabel",
4824
- "navItemActive": "_506LLG_navItemActive",
4825
- "card": "_506LLG_card",
4826
- "pageTitle": "_506LLG_pageTitle",
4891
+ "pageHeader": "_506LLG_pageHeader",
4892
+ "root": "_506LLG_root",
4893
+ "navItem": "_506LLG_navItem",
4827
4894
  "content": "_506LLG_content",
4895
+ "settingControl": "_506LLG_settingControl",
4828
4896
  "textInput": "_506LLG_textInput",
4829
- "pageDesc": "_506LLG_pageDesc",
4830
- "settingControlStack": "_506LLG_settingControlStack",
4831
- "resetBtn": "_506LLG_resetBtn",
4832
- "sidebar": "_506LLG_sidebar",
4833
4897
  "navIcon": "_506LLG_navIcon",
4898
+ "proxyHint": "_506LLG_proxyHint",
4899
+ "proxyHintOk": "_506LLG_proxyHintOk",
4900
+ "navItemActive": "_506LLG_navItemActive",
4901
+ "card": "_506LLG_card",
4902
+ "resetBtn": "_506LLG_resetBtn",
4834
4903
  "settingTitle": "_506LLG_settingTitle",
4904
+ "settingLabel": "_506LLG_settingLabel",
4905
+ "pageTitle": "_506LLG_pageTitle",
4906
+ "sidebar": "_506LLG_sidebar",
4835
4907
  "settingRow": "_506LLG_settingRow",
4836
- "settingControl": "_506LLG_settingControl"
4908
+ "settingControlStack": "_506LLG_settingControlStack"
4837
4909
  };
4838
4910
  //#endregion
4839
4911
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -4852,18 +4924,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4852
4924
  css: css$4
4853
4925
  });
4854
4926
  var Dropdown_module_css_default = {
4927
+ "dropdownCount": "B_Gxsq_dropdownCount",
4855
4928
  "dropdownBtn": "B_Gxsq_dropdownBtn",
4856
- "dropdownArrow": "B_Gxsq_dropdownArrow",
4857
- "dropdownItem": "B_Gxsq_dropdownItem",
4858
- "dropdownFill": "B_Gxsq_dropdownFill",
4859
- "dropdown": "B_Gxsq_dropdown",
4860
- "dropdownLabel": "B_Gxsq_dropdownLabel",
4861
- "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4862
4929
  "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4930
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4931
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
4863
4932
  "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4933
+ "dropdownFill": "B_Gxsq_dropdownFill",
4934
+ "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
4935
+ "dropdown": "B_Gxsq_dropdown",
4864
4936
  "dropdownPanel": "B_Gxsq_dropdownPanel",
4865
- "dropdownCount": "B_Gxsq_dropdownCount",
4866
- "dropdownItemLabel": "B_Gxsq_dropdownItemLabel"
4937
+ "dropdownArrow": "B_Gxsq_dropdownArrow",
4938
+ "dropdownItem": "B_Gxsq_dropdownItem"
4867
4939
  };
4868
4940
  //#endregion
4869
4941
  //#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
@@ -4882,9 +4954,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4882
4954
  css: css$3
4883
4955
  });
4884
4956
  var Toggle_module_css_default = {
4885
- "knob": "k-cD4G_knob",
4886
4957
  "toggle": "k-cD4G_toggle",
4887
- "toggleOn": "k-cD4G_toggleOn"
4958
+ "toggleOn": "k-cD4G_toggleOn",
4959
+ "knob": "k-cD4G_knob"
4888
4960
  };
4889
4961
  //#endregion
4890
4962
  //#region src/client/components/ui/Toggle.tsx
@@ -4984,29 +5056,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4984
5056
  css: css$2
4985
5057
  });
4986
5058
  var DiagnosticsView_module_css_default = {
4987
- "badgeFail": "k9eRya_badgeFail",
4988
- "row": "k9eRya_row",
4989
- "badge": "k9eRya_badge",
4990
- "summaryOk": "k9eRya_summaryOk",
4991
- "summaryRunning": "k9eRya_summaryRunning",
4992
- "head": "k9eRya_head",
4993
5059
  "envLabel": "k9eRya_envLabel",
4994
- "name": "k9eRya_name",
4995
5060
  "runBtn": "k9eRya_runBtn",
4996
- "envDesc": "k9eRya_envDesc",
4997
- "meta": "k9eRya_meta",
4998
- "envTitle": "k9eRya_envTitle",
4999
- "badgeIdle": "k9eRya_badgeIdle",
5000
- "summary": "k9eRya_summary",
5001
- "summaryFail": "k9eRya_summaryFail",
5002
5061
  "panel": "k9eRya_panel",
5003
- "badgeRunning": "k9eRya_badgeRunning",
5062
+ "row": "k9eRya_row",
5063
+ "summaryFail": "k9eRya_summaryFail",
5064
+ "head": "k9eRya_head",
5004
5065
  "display": "k9eRya_display",
5005
5066
  "diagPulse": "k9eRya_diagPulse",
5067
+ "badgeRunning": "k9eRya_badgeRunning",
5068
+ "badgeIdle": "k9eRya_badgeIdle",
5006
5069
  "envCopyBtn": "k9eRya_envCopyBtn",
5007
- "headHint": "k9eRya_headHint",
5008
5070
  "badgeOk": "k9eRya_badgeOk",
5009
- "envRow": "k9eRya_envRow"
5071
+ "badgeFail": "k9eRya_badgeFail",
5072
+ "envTitle": "k9eRya_envTitle",
5073
+ "name": "k9eRya_name",
5074
+ "meta": "k9eRya_meta",
5075
+ "summaryOk": "k9eRya_summaryOk",
5076
+ "envDesc": "k9eRya_envDesc",
5077
+ "summary": "k9eRya_summary",
5078
+ "summaryRunning": "k9eRya_summaryRunning",
5079
+ "headHint": "k9eRya_headHint",
5080
+ "envRow": "k9eRya_envRow",
5081
+ "badge": "k9eRya_badge"
5010
5082
  };
5011
5083
  //#endregion
5012
5084
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5044,7 +5116,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5044
5116
  },
5045
5117
  {
5046
5118
  key: "github",
5047
- display: "github.com",
5119
+ display: "github.com/dshplugin/hello-dsh",
5048
5120
  nameKey: "diagGithub",
5049
5121
  status: "idle",
5050
5122
  ms: null,
@@ -5059,8 +5131,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5059
5131
  statusCode: null
5060
5132
  }
5061
5133
  ];
5062
- function DiagnosticsView({ t, env, onCopy }) {
5063
- const [rows, setRows] = (0, react.useState)(INITIAL_ROWS);
5134
+ function DiagnosticsView({ t, env, proxy, onCopy }) {
5135
+ const [rows, setRows] = (0, react.useState)(() => {
5136
+ const base = INITIAL_ROWS.map((r) => ({ ...r }));
5137
+ if (proxy.trim() !== "") base.push({
5138
+ key: "proxy",
5139
+ display: proxy.trim(),
5140
+ nameKey: "diagProxy",
5141
+ status: "idle",
5142
+ ms: null,
5143
+ statusCode: null
5144
+ });
5145
+ return base;
5146
+ });
5064
5147
  /** 当前探测请求:重测/卸载时 abort 旧请求,避免乱序结果覆盖 */
5065
5148
  const runningRef = (0, react.useRef)(null);
5066
5149
  const patchRows = (key, patch) => {
@@ -5170,57 +5253,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5170
5253
  css: css$1
5171
5254
  });
5172
5255
  var LogsView_module_css_default = {
5173
- "footCount": "_3j77BW_footCount",
5174
- "footActions": "_3j77BW_footActions",
5175
- "catBadge": "_3j77BW_catBadge",
5176
- "catInstall": "_3j77BW_catInstall",
5177
- "pathDialogFoot": "_3j77BW_pathDialogFoot",
5178
- "pathDialogHint": "_3j77BW_pathDialogHint",
5179
- "badgeWarn": "_3j77BW_badgeWarn",
5180
- "badgeDebug": "_3j77BW_badgeDebug",
5181
- "catSystem": "_3j77BW_catSystem",
5182
- "badge": "_3j77BW_badge",
5183
- "linkBtn": "_3j77BW_linkBtn",
5184
- "actions": "_3j77BW_actions",
5185
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
5186
- "head": "_3j77BW_head",
5187
- "more": "_3j77BW_more",
5256
+ "filterBar": "_3j77BW_filterBar",
5188
5257
  "list": "_3j77BW_list",
5189
5258
  "pathDialogRow": "_3j77BW_pathDialogRow",
5190
- "searchInput": "_3j77BW_searchInput",
5191
- "filterChip": "_3j77BW_filterChip",
5192
- "panel": "_3j77BW_panel",
5259
+ "pathLabel": "_3j77BW_pathLabel",
5260
+ "pathText": "_3j77BW_pathText",
5261
+ "badge": "_3j77BW_badge",
5262
+ "badgeSuccess": "_3j77BW_badgeSuccess",
5263
+ "badgeError": "_3j77BW_badgeError",
5264
+ "catSystem": "_3j77BW_catSystem",
5193
5265
  "empty": "_3j77BW_empty",
5266
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5267
+ "previewRow": "_3j77BW_previewRow",
5268
+ "filterChip": "_3j77BW_filterChip",
5269
+ "actions": "_3j77BW_actions",
5270
+ "time": "_3j77BW_time",
5194
5271
  "headHint": "_3j77BW_headHint",
5272
+ "panel": "_3j77BW_panel",
5273
+ "headActions": "_3j77BW_headActions",
5274
+ "linkBtn": "_3j77BW_linkBtn",
5275
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5276
+ "foot": "_3j77BW_foot",
5277
+ "catInstall": "_3j77BW_catInstall",
5195
5278
  "catDiagnostics": "_3j77BW_catDiagnostics",
5196
- "clearBtn": "_3j77BW_clearBtn",
5197
- "event": "_3j77BW_event",
5198
- "footPath": "_3j77BW_footPath",
5199
- "catUninstall": "_3j77BW_catUninstall",
5200
- "catSettings": "_3j77BW_catSettings",
5201
- "logList": "_3j77BW_logList",
5202
- "moreEnd": "_3j77BW_moreEnd",
5203
- "message": "_3j77BW_message",
5204
- "pathLabel": "_3j77BW_pathLabel",
5205
5279
  "pathDraft": "_3j77BW_pathDraft",
5206
- "btn": "_3j77BW_btn",
5207
- "previewRow": "_3j77BW_previewRow",
5208
- "badgeSuccess": "_3j77BW_badgeSuccess",
5209
- "badgeInfo": "_3j77BW_badgeInfo",
5280
+ "clearBtn": "_3j77BW_clearBtn",
5281
+ "footActions": "_3j77BW_footActions",
5282
+ "head": "_3j77BW_head",
5210
5283
  "footFail": "_3j77BW_footFail",
5211
- "foot": "_3j77BW_foot",
5212
- "catUpdate": "_3j77BW_catUpdate",
5213
5284
  "entry": "_3j77BW_entry",
5214
- "filterChipActive": "_3j77BW_filterChipActive",
5215
- "time": "_3j77BW_time",
5216
- "headActions": "_3j77BW_headActions",
5217
- "filterBar": "_3j77BW_filterBar",
5218
- "pathText": "_3j77BW_pathText",
5285
+ "logList": "_3j77BW_logList",
5286
+ "more": "_3j77BW_more",
5287
+ "badgeDebug": "_3j77BW_badgeDebug",
5288
+ "footCount": "_3j77BW_footCount",
5289
+ "catSettings": "_3j77BW_catSettings",
5290
+ "btn": "_3j77BW_btn",
5291
+ "event": "_3j77BW_event",
5219
5292
  "search": "_3j77BW_search",
5293
+ "pathRow": "_3j77BW_pathRow",
5294
+ "badgeWarn": "_3j77BW_badgeWarn",
5295
+ "message": "_3j77BW_message",
5296
+ "filterChipActive": "_3j77BW_filterChipActive",
5297
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5298
+ "moreEnd": "_3j77BW_moreEnd",
5299
+ "footPath": "_3j77BW_footPath",
5220
5300
  "pathDialog": "_3j77BW_pathDialog",
5221
- "pathDialogReset": "_3j77BW_pathDialogReset",
5222
- "badgeError": "_3j77BW_badgeError",
5223
- "pathRow": "_3j77BW_pathRow"
5301
+ "badgeInfo": "_3j77BW_badgeInfo",
5302
+ "catUpdate": "_3j77BW_catUpdate",
5303
+ "searchInput": "_3j77BW_searchInput",
5304
+ "catBadge": "_3j77BW_catBadge",
5305
+ "catUninstall": "_3j77BW_catUninstall",
5306
+ "pathDialogHint": "_3j77BW_pathDialogHint"
5224
5307
  };
5225
5308
  //#endregion
5226
5309
  //#region src/client/components/modals/LogsModal.tsx
@@ -5847,12 +5930,52 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5847
5930
  function SettingRow({ title, desc, children, stack = false }) {
5848
5931
  return (0, react.createElement)("div", { className: stack ? SettingsView_module_css_default.settingRowStack : SettingsView_module_css_default.settingRow }, (0, react.createElement)("div", { className: SettingsView_module_css_default.settingLabel }, (0, react.createElement)("div", { className: SettingsView_module_css_default.settingTitle }, title), desc ? (0, react.createElement)("div", { className: SettingsView_module_css_default.settingDesc }, desc) : null), (0, react.createElement)("div", { className: stack ? SettingsView_module_css_default.settingControlStack : SettingsView_module_css_default.settingControl }, children));
5849
5932
  }
5850
- function SettingsView({ t, settings, update, reset, env, onCopy }) {
5933
+ function SettingsView({ t, settings, update, reset, env, onCopy, openSection, onConsumedOpenSection }) {
5851
5934
  /** 当前激活的分组:左侧导航点击切换,右侧只渲染这一组 */
5852
5935
  const [section, setSection] = (0, react.useState)("updates");
5853
5936
  /** 恢复默认确认弹窗:点按钮先弹窗询问,确认后才真正 reset(不做两段式按钮) */
5854
5937
  const [resetConfirm, setResetConfirm] = (0, react.useState)(false);
5855
- const onProxyChange = (e) => update({ proxy: e.target.value });
5938
+ (0, react.useEffect)(() => {
5939
+ if (!openSection) return;
5940
+ setSection(openSection);
5941
+ onConsumedOpenSection?.();
5942
+ }, [openSection, onConsumedOpenSection]);
5943
+ const [proxyProbe, setProxyProbe] = (0, react.useState)("idle");
5944
+ const proxyProbeTimer = (0, react.useRef)(null);
5945
+ const proxyProbeSeq = (0, react.useRef)(0);
5946
+ (0, react.useEffect)(() => () => {
5947
+ if (proxyProbeTimer.current !== null) window.clearTimeout(proxyProbeTimer.current);
5948
+ proxyProbeSeq.current += 1;
5949
+ }, []);
5950
+ (0, react.useEffect)(() => {
5951
+ if (settings.proxy === "") setProxyProbe("idle");
5952
+ }, [settings.proxy]);
5953
+ const probeProxyNow = (value) => {
5954
+ const v = value.trim();
5955
+ if (v === "") {
5956
+ setProxyProbe("idle");
5957
+ return;
5958
+ }
5959
+ const seq = ++proxyProbeSeq.current;
5960
+ setProxyProbe("checking");
5961
+ fetch("/dsh-plugin-hub/proxy-check", {
5962
+ method: "POST",
5963
+ headers: { "content-type": "application/json" },
5964
+ body: JSON.stringify({ proxy: v }),
5965
+ cache: "no-store"
5966
+ }).then((res) => res.json()).then((data) => {
5967
+ if (seq !== proxyProbeSeq.current) return;
5968
+ setProxyProbe(data.ok ? "ok" : "fail");
5969
+ }).catch(() => {
5970
+ if (seq === proxyProbeSeq.current) setProxyProbe("fail");
5971
+ });
5972
+ };
5973
+ const onProxyChange = (e) => {
5974
+ const value = e.target.value;
5975
+ update({ proxy: value });
5976
+ if (proxyProbeTimer.current !== null) window.clearTimeout(proxyProbeTimer.current);
5977
+ proxyProbeTimer.current = window.setTimeout(() => probeProxyNow(value), 700);
5978
+ };
5856
5979
  const onMirrorChange = (value) => update({ npmRegistry: value });
5857
5980
  /** 每个分组的页面副标题(导航标题之上再补一句说明,保持桌面设置质感) */
5858
5981
  const pageDesc = {
@@ -5889,14 +6012,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5889
6012
  title: t("settingsProxy"),
5890
6013
  desc: t("settingsProxyDesc"),
5891
6014
  stack: true,
5892
- children: (0, react.createElement)("input", {
6015
+ children: (0, react.createElement)("div", { className: SettingsView_module_css_default.proxyControl }, (0, react.createElement)("input", {
5893
6016
  className: SettingsView_module_css_default.textInput,
5894
6017
  type: "text",
5895
6018
  value: settings.proxy,
5896
6019
  placeholder: "http://127.0.0.1:7890",
5897
6020
  spellCheck: false,
5898
6021
  onChange: onProxyChange
5899
- })
6022
+ }), proxyProbe === "checking" ? (0, react.createElement)("div", { className: SettingsView_module_css_default.proxyHint }, t("proxyCheckChecking")) : proxyProbe === "ok" ? (0, react.createElement)("div", { className: `${SettingsView_module_css_default.proxyHint} ${SettingsView_module_css_default.proxyHintOk}` }, t("proxyCheckOk")) : proxyProbe === "fail" ? (0, react.createElement)("div", { className: `${SettingsView_module_css_default.proxyHint} ${SettingsView_module_css_default.proxyHintFail}` }, t("proxyCheckFail")) : null)
5900
6023
  }));
5901
6024
  const securityCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(SettingRow, {
5902
6025
  title: t("settingsEnableNpm"),
@@ -5926,6 +6049,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5926
6049
  const diagnosticsCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(DiagnosticsView, {
5927
6050
  t,
5928
6051
  env,
6052
+ proxy: settings.proxy,
5929
6053
  onCopy
5930
6054
  }));
5931
6055
  const logsCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(LogsView, {
@@ -5998,6 +6122,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5998
6122
  const { settings: hubSettings, ready: settingsReady, update: updateSettings, reset: resetSettings } = useSettings();
5999
6123
  /** 一级导航:插件中心 / 已安装 / 自定义安装 / 设置 */
6000
6124
  const [view, setView] = (0, react.useState)("market");
6125
+ /** 外部跳转设置分组的一次性信号(错误弹窗「去系统诊断」→ 设置 → 系统诊断):
6126
+ * 传给 SettingsView 消费后即清空,避免下次进设置被强制带跳 */
6127
+ const [settingsSection, setSettingsSection] = (0, react.useState)(null);
6128
+ /** 网络不通提示的「去系统诊断」直达:关掉所有弹窗(错误/通知/安装确认进度等,
6129
+ * 否则 InstallModal 失败后仍停驻原地盖住设置页)→ 切到设置页 → 切到系统诊断分组(自动跑连通性检测) */
6130
+ const openDiagnostics = () => {
6131
+ setErrorMsg(null);
6132
+ setShowNotifications(false);
6133
+ setConfirmPlugin(null);
6134
+ setConfirmCustomTarget(null);
6135
+ setConfirmGlobalNpm(null);
6136
+ setUninstallPlugin(null);
6137
+ setUninstallItem(null);
6138
+ setDetailItem(null);
6139
+ setShowHubUpdate(false);
6140
+ setShowAbout(false);
6141
+ setIgnoreTarget(null);
6142
+ setShowRestartConfirm(false);
6143
+ setView("settings");
6144
+ setSettingsSection("diagnostics");
6145
+ };
6001
6146
  /** 全局反馈 Toast:{id} 用于重复触发时重新走入场动画,kind 决定文案与配色 */
6002
6147
  const [toast, setToast] = (0, react.useState)(null);
6003
6148
  /** 复制反馈:记录刚复制安装命令的仓库,按钮短暂切换为「已复制」样式 */
@@ -6058,6 +6203,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6058
6203
  }, [view]);
6059
6204
  const queue = useTaskQueue({
6060
6205
  t,
6206
+ langKey,
6061
6207
  refreshInstalled: catalog.refreshInstalled,
6062
6208
  onInstallDone: (viaModal, repo, needsRestart, update) => {
6063
6209
  setInstallNeedsRestart(needsRestart);
@@ -6328,7 +6474,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6328
6474
  setUninstallDone(false);
6329
6475
  queue.clearModalTask();
6330
6476
  setUninstallPlugin(p);
6331
- }
6477
+ },
6478
+ hasProxy: (hubSettings.proxy ?? "").trim() !== "",
6479
+ onOpenDiagnostics: openDiagnostics
6332
6480
  }) : view === "installed" ? (0, react.createElement)(InstalledView, {
6333
6481
  items: catalog.installedItems,
6334
6482
  langKey,
@@ -6390,9 +6538,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6390
6538
  id: Date.now(),
6391
6539
  kind: "copied"
6392
6540
  });
6393
- }
6541
+ },
6542
+ openSection: settingsSection,
6543
+ onConsumedOpenSection: () => setSettingsSection(null)
6394
6544
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6395
- info: catalog.hubUpdateInfo ?? { version: "1.3.6" },
6545
+ info: catalog.hubUpdateInfo ?? { version: "1.3.8" },
6396
6546
  lang,
6397
6547
  t,
6398
6548
  hasUpdate: catalog.hubHasUpdate,
@@ -6443,6 +6593,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6443
6593
  cancelTask: queue.cancelTask,
6444
6594
  restarting,
6445
6595
  onRestart: () => setShowRestartConfirm(true),
6596
+ onRunDiagnostics: openDiagnostics,
6446
6597
  resolveRepo: (repo) => issueRepoOf(repo, catalog.installedItems, catalog.plugins)
6447
6598
  }), ignoreTarget && (0, react.createElement)("div", {
6448
6599
  className: Modal_module_css_default.overlay,
@@ -6607,6 +6758,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6607
6758
  kind: "errCopied"
6608
6759
  });
6609
6760
  },
6761
+ onRunDiagnostics: openDiagnostics,
6610
6762
  onClose: () => setErrorMsg(null)
6611
6763
  }), showRestartConfirm && (0, react.createElement)(RestartConfirmModal, {
6612
6764
  t,