dsh-plugin 1.3.6 → 1.3.7

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
@@ -110,6 +110,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
110
110
  settingsCheckOnStartDesc: "打开插件中心时检查已安装插件是否有新版,发现更新会提示",
111
111
  settingsProxy: "HTTP 代理",
112
112
  settingsProxyDesc: "npm / git / 目录数据请求统一走该代理;留空直连",
113
+ proxyCheckChecking: "正在测试该代理地址…",
114
+ proxyCheckOk: "测试可达,安装与目录请求将统一走该代理",
115
+ proxyCheckFail: "此地址测试不通,仍可保存;请确认代理已开启、地址与端口无误",
113
116
  settingsMirror: "npm 镜像源",
114
117
  settingsMirrorDesc: "默认跟随本机 npm 配置;官方源慢可换国内镜像",
115
118
  mirrorNone: "未配置(跟随本机 npm 配置)",
@@ -183,6 +186,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
183
186
  diagNpmUnset: "未配置(跟随本机 npm 配置)",
184
187
  diagGithub: "GitHub",
185
188
  diagCatalog: "目录站点",
189
+ diagProxy: "HTTP 代理",
186
190
  diagOk: "OK",
187
191
  diagChecking: "检测中…",
188
192
  diagIdle: "未检测",
@@ -279,9 +283,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
279
283
  failIssueBig: "一键提交 BUG 到 GitHub Issue 为开源作贡献",
280
284
  failPrepareHint: "该插件安装时的构建脚本执行失败(git 分发常缺失子模块或构建产物),属插件打包分发问题。请向作者仓库提交 Issue 反馈。",
281
285
  failPackagingHint: "该插件不支持官方默认安装方式:其 git 分发缺少构建产物(package.json 声明的入口文件在仓库中不存在),说明作者未适配官方安装流程。请到作者仓库提交 Issue 反馈,请其提交构建产物或发布 npm 版。",
282
- failIgnoredBuild: "该插件依赖了需要编译的原生模块(如 node-pty),pnpm 默认拦截这类构建脚本导致安装失败 —— 其他插件不受影响,属该插件的依赖/打包问题。建议向作者仓库一键反馈,请作者改用预编译版本(如 node-pty-prebuilt-multiarch)。",
286
+ failIgnoredBuild: "该插件或其依赖需要执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截导致安装失败(如原生模块 node-pty、或 git 安装时插件的 prepare 脚本)—— 其他插件不受影响,属该插件的依赖/打包问题。建议向作者仓库一键反馈,请作者改用预编译版本(如 node-pty-prebuilt-multiarch)或移除安装期构建。",
283
287
  failNpmTooLow: "怀疑本机 npm 版本过低:npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
284
288
  failNpmTooLowV: "本机 npm 版本过低(当前 v{v}):npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
289
+ failNetworkHint: "安装前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。",
290
+ failNetworkTarget: "无法访问 {url} —— 你的网络连接不通",
291
+ failNetworkRunDiag: "去系统诊断检测网络",
285
292
  reportIssue: "去插件仓库提交 Issue",
286
293
  detail: "打开详情",
287
294
  noResult: "没有找到匹配的插件",
@@ -417,6 +424,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
417
424
  settingsAutoInstallDesc: "Install detected updates in the background without asking (a host restart applies them)",
418
425
  settingsProxy: "HTTP proxy",
419
426
  settingsProxyDesc: "Route npm, git and catalog requests through this proxy; leave empty to connect directly",
427
+ proxyCheckChecking: "Testing this proxy address…",
428
+ proxyCheckOk: "Reachable — installs and catalog requests will route through it",
429
+ proxyCheckFail: "Unreachable, but you can still save it; make sure the proxy is running and the address and port are correct",
420
430
  settingsMirror: "npm mirror",
421
431
  settingsMirrorDesc: "Unset by default — follows local npm config; pick a domestic mirror if slow",
422
432
  mirrorNone: "Unset (follow local npm config)",
@@ -490,6 +500,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
490
500
  diagNpmUnset: "Unset (follow local npm config)",
491
501
  diagGithub: "GitHub",
492
502
  diagCatalog: "Catalog site",
503
+ diagProxy: "HTTP proxy",
493
504
  diagOk: "OK",
494
505
  diagChecking: "Checking…",
495
506
  diagIdle: "Not checked",
@@ -587,9 +598,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
587
598
  failIssueBig: "Report this bug to GitHub — contribute to open source",
588
599
  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
600
  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).",
601
+ 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
602
  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
603
  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",
604
+ 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.",
605
+ failNetworkTarget: "Cannot reach {url} — your network connection is down",
606
+ failNetworkRunDiag: "Run a network diagnostic",
593
607
  reportIssue: "Report an Issue to the plugin repo",
594
608
  detail: "Open details",
595
609
  noResult: "No plugins match your search",
@@ -642,46 +656,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
642
656
  css: css$11
643
657
  });
644
658
  var Header_module_css_default = {
645
- "adBanner": "qikqja_adBanner",
646
- "githubIcon": "qikqja_githubIcon",
647
- "tabsRow": "qikqja_tabsRow",
648
- "segBtnActive": "qikqja_segBtnActive",
649
- "segBtn": "qikqja_segBtn",
650
- "aboutBtn": "qikqja_aboutBtn",
651
- "version": "qikqja_version",
652
- "segGroup": "qikqja_segGroup",
653
- "tabs": "qikqja_tabs",
659
+ "copyIcon": "qikqja_copyIcon",
660
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
661
+ "resultCount": "qikqja_resultCount",
654
662
  "taglineLink": "qikqja_taglineLink",
655
- "tabCount": "qikqja_tabCount",
656
- "tagline": "qikqja_tagline",
657
- "headerTitleRow": "qikqja_headerTitleRow",
658
- "resultSeg": "qikqja_resultSeg",
659
- "adText": "qikqja_adText",
660
- "root": "qikqja_root",
661
- "langBtn": "qikqja_langBtn",
662
663
  "sortGroup": "qikqja_sortGroup",
663
- "adArrow": "qikqja_adArrow",
664
- "controls": "qikqja_controls",
665
- "tabActive": "qikqja_tabActive",
666
- "adBadge": "qikqja_adBadge",
667
- "brandTitle": "qikqja_brandTitle",
668
- "resultCount": "qikqja_resultCount",
669
664
  "header": "qikqja_header",
670
- "logoIcon": "qikqja_logoIcon",
671
- "search": "qikqja_search",
672
- "headerRight": "qikqja_headerRight",
673
665
  "tab": "qikqja_tab",
666
+ "segGroup": "qikqja_segGroup",
674
667
  "versionBtn": "qikqja_versionBtn",
675
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
668
+ "tabCount": "qikqja_tabCount",
669
+ "tabsRow": "qikqja_tabsRow",
670
+ "brandTitle": "qikqja_brandTitle",
671
+ "tabs": "qikqja_tabs",
676
672
  "title": "qikqja_title",
677
- "copyIcon": "qikqja_copyIcon",
673
+ "logoIcon": "qikqja_logoIcon",
674
+ "githubIcon": "qikqja_githubIcon",
675
+ "tagline": "qikqja_tagline",
676
+ "adText": "qikqja_adText",
677
+ "segLabel": "qikqja_segLabel",
678
+ "headerRight": "qikqja_headerRight",
678
679
  "githubLink": "qikqja_githubLink",
680
+ "resultSeg": "qikqja_resultSeg",
681
+ "headerTitleRow": "qikqja_headerTitleRow",
682
+ "controls": "qikqja_controls",
683
+ "adBadge": "qikqja_adBadge",
684
+ "root": "qikqja_root",
685
+ "aboutBtn": "qikqja_aboutBtn",
686
+ "version": "qikqja_version",
679
687
  "searchRow": "qikqja_searchRow",
680
- "segLabel": "qikqja_segLabel"
688
+ "search": "qikqja_search",
689
+ "segBtnActive": "qikqja_segBtnActive",
690
+ "adBanner": "qikqja_adBanner",
691
+ "langBtn": "qikqja_langBtn",
692
+ "adArrow": "qikqja_adArrow",
693
+ "segBtn": "qikqja_segBtn",
694
+ "tabActive": "qikqja_tabActive"
681
695
  };
682
696
  //#endregion
683
697
  //#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}";
698
+ 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
699
  const tagId$10 = "dsh-plugin/Modal.module.css";
686
700
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
687
701
  const tag = document.createElement("style");
@@ -696,134 +710,136 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
696
710
  css: css$10
697
711
  });
698
712
  var Modal_module_css_default = {
699
- "modalCancel": "BiQ1zG_modalCancel",
713
+ "aboutMeta": "BiQ1zG_aboutMeta",
714
+ "resultDesc": "BiQ1zG_resultDesc",
715
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
716
+ "progressTrack": "BiQ1zG_progressTrack",
700
717
  "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",
718
+ "modal": "BiQ1zG_modal",
719
+ "restartNow": "BiQ1zG_restartNow",
720
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
721
+ "restartLater": "BiQ1zG_restartLater",
722
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
723
+ "modalHead": "BiQ1zG_modalHead",
724
+ "progressText": "BiQ1zG_progressText",
714
725
  "resultTitle": "BiQ1zG_resultTitle",
715
- "noticeRowMain": "BiQ1zG_noticeRowMain",
716
- "detailPathBtn": "BiQ1zG_detailPathBtn",
717
- "errorBox": "BiQ1zG_errorBox",
718
- "trustHint": "BiQ1zG_trustHint",
726
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
727
+ "failRepo": "BiQ1zG_failRepo",
728
+ "failCopy": "BiQ1zG_failCopy",
719
729
  "queueRowHead": "BiQ1zG_queueRowHead",
720
- "failedCopyHint": "BiQ1zG_failedCopyHint",
721
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
722
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
723
- "restartLater": "BiQ1zG_restartLater",
724
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
725
- "confirmIcon": "BiQ1zG_confirmIcon",
730
+ "modalLink": "BiQ1zG_modalLink",
731
+ "queueRowPct": "BiQ1zG_queueRowPct",
732
+ "detailValue": "BiQ1zG_detailValue",
733
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
734
+ "failKindInstall": "BiQ1zG_failKindInstall",
735
+ "detailModal": "BiQ1zG_detailModal",
736
+ "detailGrid": "BiQ1zG_detailGrid",
737
+ "modalIn": "BiQ1zG_modalIn",
738
+ "modalLabel": "BiQ1zG_modalLabel",
739
+ "failBigIssue": "BiQ1zG_failBigIssue",
726
740
  "toastIn": "BiQ1zG_toastIn",
727
- "resultCheck": "BiQ1zG_resultCheck",
728
- "modalInstall": "BiQ1zG_modalInstall",
729
- "result": "BiQ1zG_result",
741
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
730
742
  "noticeMain": "BiQ1zG_noticeMain",
731
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
732
- "detailPath": "BiQ1zG_detailPath",
733
- "detailLink": "BiQ1zG_detailLink",
734
- "resultRestarting": "BiQ1zG_resultRestarting",
735
- "failCopy": "BiQ1zG_failCopy",
743
+ "aboutContent": "BiQ1zG_aboutContent",
744
+ "errorHint": "BiQ1zG_errorHint",
745
+ "noticeTime": "BiQ1zG_noticeTime",
746
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
747
+ "result": "BiQ1zG_result",
736
748
  "noticeRowOk": "BiQ1zG_noticeRowOk",
737
- "failList": "BiQ1zG_failList",
738
- "modalRow": "BiQ1zG_modalRow",
739
- "failKindInstall": "BiQ1zG_failKindInstall",
740
- "modalLabel": "BiQ1zG_modalLabel",
741
- "queueRowDesc": "BiQ1zG_queueRowDesc",
742
- "detailRow": "BiQ1zG_detailRow",
749
+ "errorBox": "BiQ1zG_errorBox",
750
+ "detailStars": "BiQ1zG_detailStars",
743
751
  "hubUpdateModal": "BiQ1zG_hubUpdateModal",
744
752
  "logModal": "BiQ1zG_logModal",
753
+ "detailStatusText": "BiQ1zG_detailStatusText",
754
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
745
755
  "linkIcon": "BiQ1zG_linkIcon",
746
- "aboutContent": "BiQ1zG_aboutContent",
756
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
757
+ "toastFail": "BiQ1zG_toastFail",
758
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
759
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
760
+ "progressFillFail": "BiQ1zG_progressFillFail",
761
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
762
+ "modalWide": "BiQ1zG_modalWide",
763
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
764
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
765
+ "detailDim": "BiQ1zG_detailDim",
766
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
767
+ "detailLabel": "BiQ1zG_detailLabel",
768
+ "modalTitle": "BiQ1zG_modalTitle",
769
+ "modalCancel": "BiQ1zG_modalCancel",
770
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
747
771
  "pendingRowStatus": "BiQ1zG_pendingRowStatus",
772
+ "noticeList": "BiQ1zG_noticeList",
773
+ "modalInstall": "BiQ1zG_modalInstall",
774
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
775
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
776
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
777
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
778
+ "modalCmdText": "BiQ1zG_modalCmdText",
779
+ "resultCheck": "BiQ1zG_resultCheck",
780
+ "failKind": "BiQ1zG_failKind",
781
+ "aboutModal": "BiQ1zG_aboutModal",
782
+ "detailLink": "BiQ1zG_detailLink",
783
+ "modalDesc": "BiQ1zG_modalDesc",
784
+ "confirmIcon": "BiQ1zG_confirmIcon",
785
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
748
786
  "restartNowWarning": "BiQ1zG_restartNowWarning",
749
787
  "detailPathText": "BiQ1zG_detailPathText",
750
- "failKindUninstall": "BiQ1zG_failKindUninstall",
751
- "detailStars": "BiQ1zG_detailStars",
752
- "noticeTextOk": "BiQ1zG_noticeTextOk",
753
- "detailStatusText": "BiQ1zG_detailStatusText",
754
- "confirmPrimary": "BiQ1zG_confirmPrimary",
755
- "modalClose": "BiQ1zG_modalClose",
756
- "pendingRowActions": "BiQ1zG_pendingRowActions",
757
- "dangerConfirm": "BiQ1zG_dangerConfirm",
788
+ "overlay": "BiQ1zG_overlay",
789
+ "noticeRow": "BiQ1zG_noticeRow",
790
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
791
+ "modalValue": "BiQ1zG_modalValue",
792
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
793
+ "noticeRemove": "BiQ1zG_noticeRemove",
794
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
795
+ "modalCopy": "BiQ1zG_modalCopy",
796
+ "stripCancel": "BiQ1zG_stripCancel",
797
+ "detailPathActions": "BiQ1zG_detailPathActions",
758
798
  "errorModal": "BiQ1zG_errorModal",
759
- "modalActions": "BiQ1zG_modalActions",
799
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
800
+ "helpModal": "BiQ1zG_helpModal",
801
+ "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
802
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
760
803
  "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",
771
- "noticeVersion": "BiQ1zG_noticeVersion",
772
- "progressFillFail": "BiQ1zG_progressFillFail",
804
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
805
+ "modalClose": "BiQ1zG_modalClose",
806
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
807
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
773
808
  "queueRowTrack": "BiQ1zG_queueRowTrack",
774
- "modalIn": "BiQ1zG_modalIn",
775
- "modalHead": "BiQ1zG_modalHead",
776
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
777
- "progressHead": "BiQ1zG_progressHead",
778
- "progressTrack": "BiQ1zG_progressTrack",
779
- "stripCancel": "BiQ1zG_stripCancel",
780
- "aboutModal": "BiQ1zG_aboutModal",
781
- "errorCopySoft": "BiQ1zG_errorCopySoft",
782
- "failPrepareHint": "BiQ1zG_failPrepareHint",
783
- "modal": "BiQ1zG_modal",
784
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
785
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
786
- "detailArrow": "BiQ1zG_detailArrow",
809
+ "resultRestarting": "BiQ1zG_resultRestarting",
787
810
  "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",
803
811
  "noticeTextFail": "BiQ1zG_noticeTextFail",
804
- "progressText": "BiQ1zG_progressText",
805
- "failHead": "BiQ1zG_failHead",
806
- "helpModal": "BiQ1zG_helpModal",
807
- "toast": "BiQ1zG_toast",
812
+ "queuedHint": "BiQ1zG_queuedHint",
813
+ "modalCmd": "BiQ1zG_modalCmd",
814
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
808
815
  "queueRowBody": "BiQ1zG_queueRowBody",
809
- "modalCmdText": "BiQ1zG_modalCmdText",
810
- "restartNow": "BiQ1zG_restartNow",
811
- "noticeList": "BiQ1zG_noticeList",
812
- "detailStatusPending": "BiQ1zG_detailStatusPending",
816
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
817
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
818
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
819
+ "trustHint": "BiQ1zG_trustHint",
820
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
821
+ "modalActions": "BiQ1zG_modalActions",
822
+ "toast": "BiQ1zG_toast",
823
+ "progressHead": "BiQ1zG_progressHead",
824
+ "noticeVersion": "BiQ1zG_noticeVersion",
813
825
  "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",
820
- "failClear": "BiQ1zG_failClear",
821
- "queueRowTarget": "BiQ1zG_queueRowTarget",
826
+ "modalRow": "BiQ1zG_modalRow",
827
+ "detailRow": "BiQ1zG_detailRow",
822
828
  "failEmpty": "BiQ1zG_failEmpty",
823
- "modalCmd": "BiQ1zG_modalCmd",
829
+ "queueRow": "BiQ1zG_queueRow",
830
+ "noticeHead": "BiQ1zG_noticeHead",
831
+ "failRow": "BiQ1zG_failRow",
824
832
  "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
833
+ "queueSection": "BiQ1zG_queueSection",
834
+ "modalBody": "BiQ1zG_modalBody",
835
+ "failClear": "BiQ1zG_failClear",
836
+ "detailArrow": "BiQ1zG_detailArrow",
837
+ "progress": "BiQ1zG_progress",
838
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
839
+ "detailPath": "BiQ1zG_detailPath",
825
840
  "noticeFoot": "BiQ1zG_noticeFoot",
826
- "failBigIssue": "BiQ1zG_failBigIssue"
841
+ "failList": "BiQ1zG_failList",
842
+ "failHead": "BiQ1zG_failHead"
827
843
  };
828
844
  //#endregion
829
845
  //#region src/client/logic/install-command.ts
@@ -893,7 +909,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
893
909
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
894
910
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
895
911
  */
896
- const PLUGIN_VERSION = "1.3.6";
912
+ const PLUGIN_VERSION = "1.3.7";
897
913
  const CATEGORY_ORDER = [
898
914
  "interface",
899
915
  "session",
@@ -1526,7 +1542,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1526
1542
  */
1527
1543
  const hubHasUpdate = (() => {
1528
1544
  if (!hubUpdateInfo) return false;
1529
- return hubUpdateInfo.version !== "1.3.6";
1545
+ return hubUpdateInfo.version !== "1.3.7";
1530
1546
  })();
1531
1547
  (0, react.useMemo)(() => {
1532
1548
  if (!plugins) return [];
@@ -1705,23 +1721,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1705
1721
  return next;
1706
1722
  }
1707
1723
  /**
1708
- * 失败归类,四态。无论底层机制如何(pnpm 白名单拦截 / 构建脚本被忽略 / prepare 失败),
1724
+ * 失败归类,五态。无论底层机制如何(pnpm 白名单拦截 / 构建脚本被忽略 / prepare 失败),
1709
1725
  * 对用户而言结果都一样 —— 当前安装通道(npm 或 git)装不上,就是插件分发/依赖的问题,
1710
- * 一律引导提 Issue;唯一例外是本机 npm 自身版本过低导致的内部崩溃(见 npmTooOld):
1726
+ * 一律引导提 Issue;唯一的两个例外是本机环境问题(npm 版本过低 / 网络不通):
1711
1727
  * - npmTooOld:失败输出含 npm arborist 的 `edgesOut` 崩溃特征(build-ideal-tree.js 解 peer 依赖时
1712
1728
  * 内部抛错,npm 11.6.0 前必现的已知缺陷,npm/cli#8261、#9787),或服务端已核实本机版本低于
1713
1729
  * 阈值并打了 `[npm-too-low]` 标记 —— 是本机 npm 版本过低/自身缺陷,不是插件问题 → 引导升级 npm
1714
- * - pnpmIgnoredBuild:插件依赖里的原生模块构建脚本被 pnpm 默认拦截(如 node-pty,
1715
- * `ERR_PNPM_IGNORED_BUILDS`)。只影响带原生模块的插件,其他插件不受影响 —— 差异在
1716
- * 插件的依赖选择,属插件依赖/打包问题 → 引导去仓库提 Issue(建议改用预编译版本)
1730
+ * - network:安装前连通性预检拦截(服务端 `[network]` 标记)或底层连接失败
1731
+ * (ERR_PNPM_GIT_FETCH_FAILED / ETIMEDOUT / DNS 解析 / TLS 握手 / 代理拒绝)——
1732
+ * 是本机网络不通/被墙/代理有问题,不是插件问题 → 提示检查网络,不引导提 Issue
1733
+ * - pnpmIgnoredBuild:插件自身或依赖的构建脚本被 pnpm 安全白名单(allowBuilds)默认拦截
1734
+ * (`ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED` / `ERR_PNPM_IGNORED_BUILDS`)。只影响带安装期
1735
+ * 构建的插件,其他插件不受影响 —— 差异在插件的依赖/打包方式,属插件依赖/打包问题
1736
+ * → 引导去仓库提 Issue(建议改用预编译版本或关闭安装期构建)
1717
1737
  * - pluginPrepare:插件的 prepare/构建脚本实际执行失败(git tarball 常因缺失子模块或
1718
1738
  * 构建产物导致)—— 属插件打包/分发问题,应引导去仓库提 Issue
1719
1739
  * - repo:其余失败(含 git prepare 被 pnpm 白名单拦截等),默认按插件仓库问题引导提 Issue
1720
1740
  */
1721
1741
  function classifyFailure(message) {
1722
1742
  if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
1743
+ if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
1744
+ 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
1745
  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
1746
  if (/ERR_PNPM_PREPARE_PACKAGE|ELIFECYCLE|Command failed|prepare-guard/i.test(message)) return "pluginPrepare";
1726
1747
  return "repo";
1727
1748
  }
@@ -1772,6 +1793,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1772
1793
  const m = message.match(/\[?ERR_[A-Z_]+\]?/);
1773
1794
  return m ? m[0].replace(/^\[|\]$/g, "") : null;
1774
1795
  }
1796
+ /**
1797
+ * 从网络类失败消息里提取「具体连不上的地址」,供弹窗精准提示(你的网络无法访问什么)。
1798
+ * 优先取服务端 [network] 预检消息括号里的探测地址(中文「(…)」/ 英文「(…)」),
1799
+ * 否则取消息里出现的第一个 URL(git fetch 的仓库地址、registry 域名等)。
1800
+ * 提取不到返回 null —— 调用方据此跳过地址行。
1801
+ */
1802
+ function unreachableTargetOf(message) {
1803
+ const paren = message.match(/[((](https?:\/\/[^\s'"`<>()+]+)[))]/);
1804
+ if (paren) return paren[1];
1805
+ const url = message.match(/https?:\/\/[^\s'"`<>()()]+/);
1806
+ return url ? url[0].replace(/[.,;:))\]]+$/, "") : null;
1807
+ }
1775
1808
  //#endregion
1776
1809
  //#region src/client/logic/urls.ts
1777
1810
  /** dsh-plugin.org 中文页挂在 /zh/ 前缀下,英文在根路径。 */
@@ -1793,17 +1826,21 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1793
1826
  function pluginSiteUrl(repo) {
1794
1827
  return `${SITE_URL}plugins/${repo}`;
1795
1828
  }
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";
1829
+ /** 按失败类型给出简洁的错误原因标题(对外用英文):
1830
+ * 标题直接点明问题出在哪一侧(构建白名单/分发物/本机 npm/网络/插件侧),
1831
+ * 作者与用户扫一眼列表就能分流 —— 不再用含糊的 Install/Remove 动作词。 */
1832
+ function reasonTitleOf(kind) {
1833
+ switch (kind) {
1834
+ case "npmTooOld": return "npm too old to install";
1835
+ case "pnpmIgnoredBuild": return "build scripts blocked by pnpm allowlist";
1836
+ case "pluginPrepare": return "plugin distribution incomplete";
1837
+ case "network": return "network failure on the user side";
1838
+ default: return "plugin install failed";
1839
+ }
1803
1840
  }
1804
1841
  /**
1805
- * 一键反馈 GitHub Issue 的预填链接:标题带「来自 dsh-plugin.org」标识,正文只带
1806
- * 核心信息 —— 原因判定 + 关键错误代码 + 尝试过的安装方式 + 宿主机器环境快照 +
1842
+ * 一键反馈 GitHub Issue 的预填链接:标题带「来自 dsh-plugin.org」标识 + 错误原因,
1843
+ * 正文只带核心信息 —— 原因判定 + 关键错误代码 + 尝试过的安装方式 + 宿主机器环境快照 +
1807
1844
  * 错误核心摘要(完整日志太长,塞进 URL 会被 GitHub 以「request URL too long」拒绝,
1808
1845
  * 故只收集重点)。错误弹窗、失败记录共用此逻辑。
1809
1846
  * env 取不到时为 null,链接照常生成、只是少环境段。
@@ -1811,9 +1848,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1811
1848
  * 组织 scope 与 GitHub 用户名不一致时也能直接指认正确的 npm 包名。
1812
1849
  */
1813
1850
  function pluginIssueUrl(repo, message, env, command, attempts) {
1814
- const title = `[dsh-plugin.org | dsh-plugin-hub] ${actionLabelOf(command)} failed: ${repo}`;
1815
1851
  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";
1852
+ const title = `[dsh-plugin.org | dsh-plugin-hub] ${reasonTitleOf(kind)}: ${repo}`;
1853
+ 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
1854
  const code = coreErrorCode(message);
1818
1855
  const build = (coreChars) => {
1819
1856
  const body = [
@@ -1997,7 +2034,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1997
2034
  * 给足余量;超时主动中止,避免服务端 preflight 网络挂起时前端永久卡「安装中 0%」。 */
1998
2035
  const REQUEST_TIMEOUT_MS = 6e4;
1999
2036
  function useTaskQueue(opts) {
2000
- const { t, refreshInstalled, onInstallDone, onUninstallDone, onError, installPlugin, installCustomTarget, installGlobalTarget, uninstallPlugin, uninstallName, installedName, resolvePending } = opts;
2037
+ const { t, langKey, refreshInstalled, onInstallDone, onUninstallDone, onError, installPlugin, installCustomTarget, installGlobalTarget, uninstallPlugin, uninstallName, installedName, resolvePending } = opts;
2001
2038
  const [queue, setQueue] = (0, react.useState)([]);
2002
2039
  const queueRef = (0, react.useRef)([]);
2003
2040
  /** 待重启列表(服务端内存态 + 本地展示信息补齐);与 queue 一样以 ref 为唯一事实来源。 */
@@ -2307,6 +2344,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2307
2344
  display: input.repo,
2308
2345
  source: input.source,
2309
2346
  mode: input.update ? "update" : void 0,
2347
+ ...langKey ? { lang: langKey } : {},
2310
2348
  ...input.globalNpm && input.globalNpm.length > 0 ? { globalNpm: input.globalNpm } : {}
2311
2349
  }),
2312
2350
  signal: controller.signal
@@ -3142,7 +3180,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3142
3180
  }
3143
3181
  /** 预填插件仓库的 GitHub Issue 链接:标题带插件名,正文附完整错误信息,方便用户一键反馈。 */
3144
3182
  /** 安装/卸载失败弹窗:布局与失败记录一致(类型徽标 + 仓库超链接 + 隐蔽复制按钮),报错完整展示,底部一键提交 Issue。 */
3145
- function ErrorModal({ message, repo, kind, command, attempts, t, env, onCopy, onClose }) {
3183
+ function ErrorModal({ message, repo, kind, command, attempts, t, env, onCopy, onClose, onRunDiagnostics }) {
3146
3184
  const failureKind = classifyFailure(message);
3147
3185
  const npmVersion = npmTooLowVersion(message);
3148
3186
  const copyText = [
@@ -3172,7 +3210,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3172
3210
  }, repo) : null, (0, react.createElement)("button", {
3173
3211
  className: Modal_module_css_default.errorCopySoft,
3174
3212
  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", {
3213
+ }, 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, [
3214
+ (() => {
3215
+ const target = unreachableTargetOf(message);
3216
+ return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
3217
+ })(),
3218
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
3219
+ onRunDiagnostics ? (0, react.createElement)("button", {
3220
+ className: Modal_module_css_default.failDiagBtn,
3221
+ onClick: onRunDiagnostics
3222
+ }, t("failNetworkRunDiag")) : null
3223
+ ]) : 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
3224
  className: Modal_module_css_default.failBigIssue,
3177
3225
  href: pluginIssueUrl(repo, message, env, command, attempts),
3178
3226
  target: "_blank",
@@ -3259,7 +3307,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3259
3307
  out = out.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g, (m, alt, url) => {
3260
3308
  const src = String(url);
3261
3309
  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">`;
3310
+ if (/\/dsh-plugin-user-group-qr-[^/]*$/i.test(src)) return `<img src="${src}" alt="${String(alt)}" width="100" height="100" loading="lazy">`;
3263
3311
  return `<img src="${src}" alt="${String(alt)}" loading="lazy">`;
3264
3312
  });
3265
3313
  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 +3652,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3604
3652
  strokeLinecap: "round"
3605
3653
  }));
3606
3654
  }
3607
- function NotificationsModal({ records, tasks, pendingRestarts, t, env, onClose, onCopy, onClear, onRemove, onUpdate, onIgnoreUpdate, cancelTask, restarting, onRestart, resolveRepo }) {
3655
+ function NotificationsModal({ records, tasks, pendingRestarts, t, env, onClose, onCopy, onClear, onRemove, onUpdate, onIgnoreUpdate, cancelTask, restarting, onRestart, onRunDiagnostics, resolveRepo }) {
3608
3656
  const [confirmClear, setConfirmClear] = (0, react.useState)(false);
3609
3657
  const [confirmRemoveId, setConfirmRemoveId] = (0, react.useState)(null);
3610
3658
  return (0, react.createElement)("div", {
@@ -3713,6 +3761,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3713
3761
  const v = npmTooLowVersion(r.message);
3714
3762
  return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(v ? "failNpmTooLowV" : "failNpmTooLow", v ? { v } : void 0));
3715
3763
  }
3764
+ if (kind === "network") return (0, react.createElement)("div", null, [
3765
+ (() => {
3766
+ const target = unreachableTargetOf(r.message);
3767
+ return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
3768
+ })(),
3769
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
3770
+ onRunDiagnostics ? (0, react.createElement)("button", {
3771
+ className: Modal_module_css_default.failDiagBtn,
3772
+ onClick: onRunDiagnostics
3773
+ }, t("failNetworkRunDiag")) : null
3774
+ ]);
3716
3775
  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
3776
  className: Modal_module_css_default.failBigIssue,
3718
3777
  href: pluginIssueUrl(shownRepo, r.message, env, r.command, r.attempts),
@@ -3907,38 +3966,38 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3907
3966
  css: css$9
3908
3967
  });
3909
3968
  var List_module_css_default = {
3910
- "cardSide": "_3XaZHa_cardSide",
3911
- "card": "_3XaZHa_card",
3912
- "actions": "_3XaZHa_actions",
3913
- "topics": "_3XaZHa_topics",
3914
- "cardMain": "_3XaZHa_cardMain",
3915
- "body": "_3XaZHa_body",
3916
- "list": "_3XaZHa_list",
3969
+ "stats": "_3XaZHa_stats",
3970
+ "detailBtn": "_3XaZHa_detailBtn",
3971
+ "date": "_3XaZHa_date",
3917
3972
  "installBtnInstalled": "_3XaZHa_installBtnInstalled",
3918
- "footer": "_3XaZHa_footer",
3919
- "cardTitle": "_3XaZHa_cardTitle",
3920
- "retryBtn": "_3XaZHa_retryBtn",
3921
3973
  "uninstallBtn": "_3XaZHa_uninstallBtn",
3922
- "date": "_3XaZHa_date",
3923
- "topic": "_3XaZHa_topic",
3924
- "fork": "_3XaZHa_fork",
3925
- "categoryBadge": "_3XaZHa_categoryBadge",
3926
- "versionBadge": "_3XaZHa_versionBadge",
3927
- "installBtn": "_3XaZHa_installBtn",
3928
- "detailBtn": "_3XaZHa_detailBtn",
3974
+ "footer": "_3XaZHa_footer",
3929
3975
  "desc": "_3XaZHa_desc",
3930
- "verified": "_3XaZHa_verified",
3931
- "star": "_3XaZHa_star",
3932
- "installBtnUpdate": "_3XaZHa_installBtnUpdate",
3933
- "stateDesc": "_3XaZHa_stateDesc",
3976
+ "card": "_3XaZHa_card",
3934
3977
  "footLink": "_3XaZHa_footLink",
3978
+ "installBtn": "_3XaZHa_installBtn",
3979
+ "cardTitle": "_3XaZHa_cardTitle",
3980
+ "stateDesc": "_3XaZHa_stateDesc",
3981
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
3982
+ "list": "_3XaZHa_list",
3935
3983
  "state": "_3XaZHa_state",
3936
- "moreSentinel": "_3XaZHa_moreSentinel",
3937
- "updateBadge": "_3XaZHa_updateBadge",
3938
- "stats": "_3XaZHa_stats",
3939
3984
  "stateTitle": "_3XaZHa_stateTitle",
3985
+ "cardSide": "_3XaZHa_cardSide",
3986
+ "moreSentinel": "_3XaZHa_moreSentinel",
3987
+ "star": "_3XaZHa_star",
3940
3988
  "cardHead": "_3XaZHa_cardHead",
3941
- "installBtnCopied": "_3XaZHa_installBtnCopied"
3989
+ "updateBadge": "_3XaZHa_updateBadge",
3990
+ "installBtnUpdate": "_3XaZHa_installBtnUpdate",
3991
+ "categoryBadge": "_3XaZHa_categoryBadge",
3992
+ "body": "_3XaZHa_body",
3993
+ "actions": "_3XaZHa_actions",
3994
+ "cardMain": "_3XaZHa_cardMain",
3995
+ "verified": "_3XaZHa_verified",
3996
+ "versionBadge": "_3XaZHa_versionBadge",
3997
+ "retryBtn": "_3XaZHa_retryBtn",
3998
+ "topic": "_3XaZHa_topic",
3999
+ "topics": "_3XaZHa_topics",
4000
+ "fork": "_3XaZHa_fork"
3942
4001
  };
3943
4002
  //#endregion
3944
4003
  //#region src/client/hooks/useIncrementalList.ts
@@ -4140,15 +4199,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4140
4199
  css: css$8
4141
4200
  });
4142
4201
  var SectionTabs_module_css_default = {
4143
- "tabCount": "_7tvizq_tabCount",
4144
- "tabActive": "_7tvizq_tabActive",
4145
- "tabIcon": "_7tvizq_tabIcon",
4146
- "noticeIcon": "_7tvizq_noticeIcon",
4202
+ "tab": "_7tvizq_tab",
4147
4203
  "noticeBtn": "_7tvizq_noticeBtn",
4148
- "noticeCount": "_7tvizq_noticeCount",
4149
4204
  "root": "_7tvizq_root",
4150
- "tab": "_7tvizq_tab",
4151
- "tabCountActive": "_7tvizq_tabCountActive"
4205
+ "noticeIcon": "_7tvizq_noticeIcon",
4206
+ "noticeCount": "_7tvizq_noticeCount",
4207
+ "tabCountActive": "_7tvizq_tabCountActive",
4208
+ "tabActive": "_7tvizq_tabActive",
4209
+ "tabIcon": "_7tvizq_tabIcon",
4210
+ "tabCount": "_7tvizq_tabCount"
4152
4211
  };
4153
4212
  //#endregion
4154
4213
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4225,42 +4284,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4225
4284
  css: css$7
4226
4285
  });
4227
4286
  var InstalledView_module_css_default = {
4228
- "segBtn": "_1nXeGW_segBtn",
4229
- "list": "_1nXeGW_list",
4230
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4231
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4287
+ "rowRestart": "_1nXeGW_rowRestart",
4288
+ "statusDot": "_1nXeGW_statusDot",
4289
+ "rowActions": "_1nXeGW_rowActions",
4290
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
4232
4291
  "rowUpdate": "_1nXeGW_rowUpdate",
4292
+ "emptyTitle": "_1nXeGW_emptyTitle",
4293
+ "toolbar": "_1nXeGW_toolbar",
4294
+ "root": "_1nXeGW_root",
4295
+ "rowTitle": "_1nXeGW_rowTitle",
4233
4296
  "segBtnActive": "_1nXeGW_segBtnActive",
4297
+ "exampleRow": "_1nXeGW_exampleRow",
4234
4298
  "statusInactive": "_1nXeGW_statusInactive",
4299
+ "rowMain": "_1nXeGW_rowMain",
4235
4300
  "rowCategory": "_1nXeGW_rowCategory",
4236
- "emptyDesc": "_1nXeGW_emptyDesc",
4237
- "rowTitleLine": "_1nXeGW_rowTitleLine",
4238
4301
  "segLabel": "_1nXeGW_segLabel",
4302
+ "list": "_1nXeGW_list",
4303
+ "rowDetail": "_1nXeGW_rowDetail",
4304
+ "exampleBadge": "_1nXeGW_exampleBadge",
4305
+ "versionBadge": "_1nXeGW_versionBadge",
4306
+ "segBtn": "_1nXeGW_segBtn",
4307
+ "emptyDesc": "_1nXeGW_emptyDesc",
4308
+ "statusPending": "_1nXeGW_statusPending",
4309
+ "searchInput": "_1nXeGW_searchInput",
4310
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4311
+ "rowDesc": "_1nXeGW_rowDesc",
4312
+ "rowRepo": "_1nXeGW_rowRepo",
4313
+ "rowUninstall": "_1nXeGW_rowUninstall",
4314
+ "empty": "_1nXeGW_empty",
4239
4315
  "row": "_1nXeGW_row",
4240
- "statusDot": "_1nXeGW_statusDot",
4241
4316
  "rowMeta": "_1nXeGW_rowMeta",
4242
- "searchInput": "_1nXeGW_searchInput",
4243
- "updateBadge": "_1nXeGW_updateBadge",
4244
4317
  "searchWrap": "_1nXeGW_searchWrap",
4245
- "root": "_1nXeGW_root",
4246
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4247
- "exampleRow": "_1nXeGW_exampleRow",
4248
- "rowDesc": "_1nXeGW_rowDesc",
4249
4318
  "segRow": "_1nXeGW_segRow",
4250
- "emptyTitle": "_1nXeGW_emptyTitle",
4251
- "rowActions": "_1nXeGW_rowActions",
4252
- "versionBadge": "_1nXeGW_versionBadge",
4319
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
4320
+ "updateBadge": "_1nXeGW_updateBadge",
4253
4321
  "segGroup": "_1nXeGW_segGroup",
4254
- "statusPending": "_1nXeGW_statusPending",
4255
- "rowTitle": "_1nXeGW_rowTitle",
4256
- "exampleBadge": "_1nXeGW_exampleBadge",
4257
- "empty": "_1nXeGW_empty",
4258
- "rowRepo": "_1nXeGW_rowRepo",
4259
- "rowRestart": "_1nXeGW_rowRestart",
4260
- "rowMain": "_1nXeGW_rowMain",
4261
- "rowUninstall": "_1nXeGW_rowUninstall",
4262
- "toolbar": "_1nXeGW_toolbar",
4263
- "rowDetail": "_1nXeGW_rowDetail"
4322
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub"
4264
4323
  };
4265
4324
  //#endregion
4266
4325
  //#region src/client/components/views/InstalledView.tsx
@@ -4506,28 +4565,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4506
4565
  css: css$6
4507
4566
  });
4508
4567
  var CustomInstallView_module_css_default = {
4568
+ "installLabel": "zISxCG_installLabel",
4569
+ "installHelpBtn": "zISxCG_installHelpBtn",
4570
+ "installRow": "zISxCG_installRow",
4509
4571
  "installInput": "zISxCG_installInput",
4510
- "installExample": "zISxCG_installExample",
4511
- "desc": "zISxCG_desc",
4512
- "installCards": "zISxCG_installCards",
4513
- "installInsertBtn": "zISxCG_installInsertBtn",
4572
+ "installCardDisabled": "zISxCG_installCardDisabled",
4573
+ "installError": "zISxCG_installError",
4574
+ "installCardHead": "zISxCG_installCardHead",
4575
+ "helpLine": "zISxCG_helpLine",
4514
4576
  "helpNote": "zISxCG_helpNote",
4515
- "installLabel": "zISxCG_installLabel",
4577
+ "desc": "zISxCG_desc",
4516
4578
  "channelOffText": "zISxCG_channelOffText",
4517
- "channelOffBtn": "zISxCG_channelOffBtn",
4518
- "helpLine": "zISxCG_helpLine",
4519
- "installCardDisabled": "zISxCG_installCardDisabled",
4520
- "root": "zISxCG_root",
4521
- "channelOff": "zISxCG_channelOff",
4579
+ "installInsertBtn": "zISxCG_installInsertBtn",
4580
+ "installExample": "zISxCG_installExample",
4522
4581
  "helpBody": "zISxCG_helpBody",
4523
- "installCardHead": "zISxCG_installCardHead",
4524
- "installHelpBtn": "zISxCG_installHelpBtn",
4525
- "installRow": "zISxCG_installRow",
4526
- "installBtn": "zISxCG_installBtn",
4527
- "helpCmd": "zISxCG_helpCmd",
4582
+ "channelOffBtn": "zISxCG_channelOffBtn",
4528
4583
  "installInputError": "zISxCG_installInputError",
4584
+ "helpCmd": "zISxCG_helpCmd",
4585
+ "installBtn": "zISxCG_installBtn",
4586
+ "installCards": "zISxCG_installCards",
4587
+ "root": "zISxCG_root",
4529
4588
  "installCard": "zISxCG_installCard",
4530
- "installError": "zISxCG_installError"
4589
+ "channelOff": "zISxCG_channelOff"
4531
4590
  };
4532
4591
  //#endregion
4533
4592
  //#region src/client/components/views/CustomInstallView.tsx
@@ -4799,7 +4858,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4799
4858
  }
4800
4859
  //#endregion
4801
4860
  //#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)}";
4861
+ 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
4862
  const tagId$5 = "dsh-plugin/SettingsView.module.css";
4804
4863
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
4805
4864
  const tag = document.createElement("style");
@@ -4814,26 +4873,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4814
4873
  css: css$5
4815
4874
  });
4816
4875
  var SettingsView_module_css_default = {
4817
- "root": "_506LLG_root",
4818
- "navItem": "_506LLG_navItem",
4819
- "pageHeader": "_506LLG_pageHeader",
4820
- "settingDesc": "_506LLG_settingDesc",
4821
4876
  "settingRowStack": "_506LLG_settingRowStack",
4877
+ "proxyHint": "_506LLG_proxyHint",
4878
+ "pageHeader": "_506LLG_pageHeader",
4822
4879
  "controlDropdown": "_506LLG_controlDropdown",
4823
- "settingLabel": "_506LLG_settingLabel",
4880
+ "settingControlStack": "_506LLG_settingControlStack",
4881
+ "proxyHintOk": "_506LLG_proxyHintOk",
4824
4882
  "navItemActive": "_506LLG_navItemActive",
4825
- "card": "_506LLG_card",
4826
- "pageTitle": "_506LLG_pageTitle",
4827
- "content": "_506LLG_content",
4883
+ "settingDesc": "_506LLG_settingDesc",
4828
4884
  "textInput": "_506LLG_textInput",
4829
- "pageDesc": "_506LLG_pageDesc",
4830
- "settingControlStack": "_506LLG_settingControlStack",
4831
- "resetBtn": "_506LLG_resetBtn",
4832
- "sidebar": "_506LLG_sidebar",
4833
- "navIcon": "_506LLG_navIcon",
4834
4885
  "settingTitle": "_506LLG_settingTitle",
4886
+ "proxyControl": "_506LLG_proxyControl",
4887
+ "navItem": "_506LLG_navItem",
4888
+ "content": "_506LLG_content",
4889
+ "sidebar": "_506LLG_sidebar",
4890
+ "settingControl": "_506LLG_settingControl",
4891
+ "root": "_506LLG_root",
4892
+ "proxyHintFail": "_506LLG_proxyHintFail",
4893
+ "resetBtn": "_506LLG_resetBtn",
4835
4894
  "settingRow": "_506LLG_settingRow",
4836
- "settingControl": "_506LLG_settingControl"
4895
+ "card": "_506LLG_card",
4896
+ "pageDesc": "_506LLG_pageDesc",
4897
+ "settingLabel": "_506LLG_settingLabel",
4898
+ "pageTitle": "_506LLG_pageTitle",
4899
+ "navIcon": "_506LLG_navIcon"
4837
4900
  };
4838
4901
  //#endregion
4839
4902
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -4852,17 +4915,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4852
4915
  css: css$4
4853
4916
  });
4854
4917
  var Dropdown_module_css_default = {
4855
- "dropdownBtn": "B_Gxsq_dropdownBtn",
4856
4918
  "dropdownArrow": "B_Gxsq_dropdownArrow",
4857
- "dropdownItem": "B_Gxsq_dropdownItem",
4858
- "dropdownFill": "B_Gxsq_dropdownFill",
4859
- "dropdown": "B_Gxsq_dropdown",
4860
- "dropdownLabel": "B_Gxsq_dropdownLabel",
4919
+ "dropdownBtn": "B_Gxsq_dropdownBtn",
4861
4920
  "dropdownItemActive": "B_Gxsq_dropdownItemActive",
4862
4921
  "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4922
+ "dropdownCount": "B_Gxsq_dropdownCount",
4923
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
4924
+ "dropdown": "B_Gxsq_dropdown",
4925
+ "dropdownFill": "B_Gxsq_dropdownFill",
4926
+ "dropdownItem": "B_Gxsq_dropdownItem",
4863
4927
  "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4864
4928
  "dropdownPanel": "B_Gxsq_dropdownPanel",
4865
- "dropdownCount": "B_Gxsq_dropdownCount",
4866
4929
  "dropdownItemLabel": "B_Gxsq_dropdownItemLabel"
4867
4930
  };
4868
4931
  //#endregion
@@ -4882,9 +4945,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4882
4945
  css: css$3
4883
4946
  });
4884
4947
  var Toggle_module_css_default = {
4885
- "knob": "k-cD4G_knob",
4886
4948
  "toggle": "k-cD4G_toggle",
4887
- "toggleOn": "k-cD4G_toggleOn"
4949
+ "toggleOn": "k-cD4G_toggleOn",
4950
+ "knob": "k-cD4G_knob"
4888
4951
  };
4889
4952
  //#endregion
4890
4953
  //#region src/client/components/ui/Toggle.tsx
@@ -4984,29 +5047,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4984
5047
  css: css$2
4985
5048
  });
4986
5049
  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
5050
  "head": "k9eRya_head",
4993
- "envLabel": "k9eRya_envLabel",
5051
+ "panel": "k9eRya_panel",
5052
+ "summary": "k9eRya_summary",
4994
5053
  "name": "k9eRya_name",
5054
+ "badgeOk": "k9eRya_badgeOk",
5055
+ "badge": "k9eRya_badge",
5056
+ "summaryFail": "k9eRya_summaryFail",
4995
5057
  "runBtn": "k9eRya_runBtn",
4996
- "envDesc": "k9eRya_envDesc",
4997
5058
  "meta": "k9eRya_meta",
4998
- "envTitle": "k9eRya_envTitle",
4999
- "badgeIdle": "k9eRya_badgeIdle",
5000
- "summary": "k9eRya_summary",
5001
- "summaryFail": "k9eRya_summaryFail",
5002
- "panel": "k9eRya_panel",
5059
+ "summaryOk": "k9eRya_summaryOk",
5060
+ "envLabel": "k9eRya_envLabel",
5061
+ "envRow": "k9eRya_envRow",
5062
+ "row": "k9eRya_row",
5003
5063
  "badgeRunning": "k9eRya_badgeRunning",
5004
- "display": "k9eRya_display",
5064
+ "summaryRunning": "k9eRya_summaryRunning",
5005
5065
  "diagPulse": "k9eRya_diagPulse",
5006
5066
  "envCopyBtn": "k9eRya_envCopyBtn",
5067
+ "badgeFail": "k9eRya_badgeFail",
5068
+ "badgeIdle": "k9eRya_badgeIdle",
5069
+ "display": "k9eRya_display",
5007
5070
  "headHint": "k9eRya_headHint",
5008
- "badgeOk": "k9eRya_badgeOk",
5009
- "envRow": "k9eRya_envRow"
5071
+ "envTitle": "k9eRya_envTitle",
5072
+ "envDesc": "k9eRya_envDesc"
5010
5073
  };
5011
5074
  //#endregion
5012
5075
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5044,7 +5107,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5044
5107
  },
5045
5108
  {
5046
5109
  key: "github",
5047
- display: "github.com",
5110
+ display: "github.com/dshplugin/hello-dsh",
5048
5111
  nameKey: "diagGithub",
5049
5112
  status: "idle",
5050
5113
  ms: null,
@@ -5059,8 +5122,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5059
5122
  statusCode: null
5060
5123
  }
5061
5124
  ];
5062
- function DiagnosticsView({ t, env, onCopy }) {
5063
- const [rows, setRows] = (0, react.useState)(INITIAL_ROWS);
5125
+ function DiagnosticsView({ t, env, proxy, onCopy }) {
5126
+ const [rows, setRows] = (0, react.useState)(() => {
5127
+ const base = INITIAL_ROWS.map((r) => ({ ...r }));
5128
+ if (proxy.trim() !== "") base.push({
5129
+ key: "proxy",
5130
+ display: proxy.trim(),
5131
+ nameKey: "diagProxy",
5132
+ status: "idle",
5133
+ ms: null,
5134
+ statusCode: null
5135
+ });
5136
+ return base;
5137
+ });
5064
5138
  /** 当前探测请求:重测/卸载时 abort 旧请求,避免乱序结果覆盖 */
5065
5139
  const runningRef = (0, react.useRef)(null);
5066
5140
  const patchRows = (key, patch) => {
@@ -5170,57 +5244,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5170
5244
  css: css$1
5171
5245
  });
5172
5246
  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",
5247
+ "catUpdate": "_3j77BW_catUpdate",
5248
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5249
+ "badgeError": "_3j77BW_badgeError",
5250
+ "pathDialog": "_3j77BW_pathDialog",
5251
+ "empty": "_3j77BW_empty",
5252
+ "message": "_3j77BW_message",
5253
+ "list": "_3j77BW_list",
5186
5254
  "head": "_3j77BW_head",
5255
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5256
+ "previewRow": "_3j77BW_previewRow",
5187
5257
  "more": "_3j77BW_more",
5188
- "list": "_3j77BW_list",
5189
- "pathDialogRow": "_3j77BW_pathDialogRow",
5190
- "searchInput": "_3j77BW_searchInput",
5191
- "filterChip": "_3j77BW_filterChip",
5192
- "panel": "_3j77BW_panel",
5193
- "empty": "_3j77BW_empty",
5194
- "headHint": "_3j77BW_headHint",
5195
- "catDiagnostics": "_3j77BW_catDiagnostics",
5196
- "clearBtn": "_3j77BW_clearBtn",
5197
- "event": "_3j77BW_event",
5198
5258
  "footPath": "_3j77BW_footPath",
5199
- "catUninstall": "_3j77BW_catUninstall",
5200
- "catSettings": "_3j77BW_catSettings",
5201
5259
  "logList": "_3j77BW_logList",
5202
- "moreEnd": "_3j77BW_moreEnd",
5203
- "message": "_3j77BW_message",
5204
- "pathLabel": "_3j77BW_pathLabel",
5205
- "pathDraft": "_3j77BW_pathDraft",
5206
- "btn": "_3j77BW_btn",
5207
- "previewRow": "_3j77BW_previewRow",
5208
- "badgeSuccess": "_3j77BW_badgeSuccess",
5260
+ "filterChip": "_3j77BW_filterChip",
5209
5261
  "badgeInfo": "_3j77BW_badgeInfo",
5262
+ "pathRow": "_3j77BW_pathRow",
5263
+ "footActions": "_3j77BW_footActions",
5264
+ "catSystem": "_3j77BW_catSystem",
5265
+ "btn": "_3j77BW_btn",
5266
+ "event": "_3j77BW_event",
5267
+ "badgeWarn": "_3j77BW_badgeWarn",
5268
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5210
5269
  "footFail": "_3j77BW_footFail",
5211
- "foot": "_3j77BW_foot",
5212
- "catUpdate": "_3j77BW_catUpdate",
5213
- "entry": "_3j77BW_entry",
5214
- "filterChipActive": "_3j77BW_filterChipActive",
5215
- "time": "_3j77BW_time",
5216
- "headActions": "_3j77BW_headActions",
5270
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5271
+ "moreEnd": "_3j77BW_moreEnd",
5217
5272
  "filterBar": "_3j77BW_filterBar",
5273
+ "pathDraft": "_3j77BW_pathDraft",
5274
+ "catBadge": "_3j77BW_catBadge",
5275
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5276
+ "filterChipActive": "_3j77BW_filterChipActive",
5277
+ "pathDialogHint": "_3j77BW_pathDialogHint",
5278
+ "badgeDebug": "_3j77BW_badgeDebug",
5279
+ "catSettings": "_3j77BW_catSettings",
5280
+ "catInstall": "_3j77BW_catInstall",
5281
+ "actions": "_3j77BW_actions",
5282
+ "clearBtn": "_3j77BW_clearBtn",
5218
5283
  "pathText": "_3j77BW_pathText",
5219
5284
  "search": "_3j77BW_search",
5220
- "pathDialog": "_3j77BW_pathDialog",
5221
- "pathDialogReset": "_3j77BW_pathDialogReset",
5222
- "badgeError": "_3j77BW_badgeError",
5223
- "pathRow": "_3j77BW_pathRow"
5285
+ "foot": "_3j77BW_foot",
5286
+ "panel": "_3j77BW_panel",
5287
+ "headActions": "_3j77BW_headActions",
5288
+ "time": "_3j77BW_time",
5289
+ "linkBtn": "_3j77BW_linkBtn",
5290
+ "searchInput": "_3j77BW_searchInput",
5291
+ "footCount": "_3j77BW_footCount",
5292
+ "pathLabel": "_3j77BW_pathLabel",
5293
+ "badge": "_3j77BW_badge",
5294
+ "entry": "_3j77BW_entry",
5295
+ "headHint": "_3j77BW_headHint",
5296
+ "catUninstall": "_3j77BW_catUninstall",
5297
+ "badgeSuccess": "_3j77BW_badgeSuccess"
5224
5298
  };
5225
5299
  //#endregion
5226
5300
  //#region src/client/components/modals/LogsModal.tsx
@@ -5847,12 +5921,52 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5847
5921
  function SettingRow({ title, desc, children, stack = false }) {
5848
5922
  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
5923
  }
5850
- function SettingsView({ t, settings, update, reset, env, onCopy }) {
5924
+ function SettingsView({ t, settings, update, reset, env, onCopy, openSection, onConsumedOpenSection }) {
5851
5925
  /** 当前激活的分组:左侧导航点击切换,右侧只渲染这一组 */
5852
5926
  const [section, setSection] = (0, react.useState)("updates");
5853
5927
  /** 恢复默认确认弹窗:点按钮先弹窗询问,确认后才真正 reset(不做两段式按钮) */
5854
5928
  const [resetConfirm, setResetConfirm] = (0, react.useState)(false);
5855
- const onProxyChange = (e) => update({ proxy: e.target.value });
5929
+ (0, react.useEffect)(() => {
5930
+ if (!openSection) return;
5931
+ setSection(openSection);
5932
+ onConsumedOpenSection?.();
5933
+ }, [openSection, onConsumedOpenSection]);
5934
+ const [proxyProbe, setProxyProbe] = (0, react.useState)("idle");
5935
+ const proxyProbeTimer = (0, react.useRef)(null);
5936
+ const proxyProbeSeq = (0, react.useRef)(0);
5937
+ (0, react.useEffect)(() => () => {
5938
+ if (proxyProbeTimer.current !== null) window.clearTimeout(proxyProbeTimer.current);
5939
+ proxyProbeSeq.current += 1;
5940
+ }, []);
5941
+ (0, react.useEffect)(() => {
5942
+ if (settings.proxy === "") setProxyProbe("idle");
5943
+ }, [settings.proxy]);
5944
+ const probeProxyNow = (value) => {
5945
+ const v = value.trim();
5946
+ if (v === "") {
5947
+ setProxyProbe("idle");
5948
+ return;
5949
+ }
5950
+ const seq = ++proxyProbeSeq.current;
5951
+ setProxyProbe("checking");
5952
+ fetch("/dsh-plugin-hub/proxy-check", {
5953
+ method: "POST",
5954
+ headers: { "content-type": "application/json" },
5955
+ body: JSON.stringify({ proxy: v }),
5956
+ cache: "no-store"
5957
+ }).then((res) => res.json()).then((data) => {
5958
+ if (seq !== proxyProbeSeq.current) return;
5959
+ setProxyProbe(data.ok ? "ok" : "fail");
5960
+ }).catch(() => {
5961
+ if (seq === proxyProbeSeq.current) setProxyProbe("fail");
5962
+ });
5963
+ };
5964
+ const onProxyChange = (e) => {
5965
+ const value = e.target.value;
5966
+ update({ proxy: value });
5967
+ if (proxyProbeTimer.current !== null) window.clearTimeout(proxyProbeTimer.current);
5968
+ proxyProbeTimer.current = window.setTimeout(() => probeProxyNow(value), 700);
5969
+ };
5856
5970
  const onMirrorChange = (value) => update({ npmRegistry: value });
5857
5971
  /** 每个分组的页面副标题(导航标题之上再补一句说明,保持桌面设置质感) */
5858
5972
  const pageDesc = {
@@ -5889,14 +6003,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5889
6003
  title: t("settingsProxy"),
5890
6004
  desc: t("settingsProxyDesc"),
5891
6005
  stack: true,
5892
- children: (0, react.createElement)("input", {
6006
+ children: (0, react.createElement)("div", { className: SettingsView_module_css_default.proxyControl }, (0, react.createElement)("input", {
5893
6007
  className: SettingsView_module_css_default.textInput,
5894
6008
  type: "text",
5895
6009
  value: settings.proxy,
5896
6010
  placeholder: "http://127.0.0.1:7890",
5897
6011
  spellCheck: false,
5898
6012
  onChange: onProxyChange
5899
- })
6013
+ }), 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
6014
  }));
5901
6015
  const securityCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(SettingRow, {
5902
6016
  title: t("settingsEnableNpm"),
@@ -5926,6 +6040,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5926
6040
  const diagnosticsCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(DiagnosticsView, {
5927
6041
  t,
5928
6042
  env,
6043
+ proxy: settings.proxy,
5929
6044
  onCopy
5930
6045
  }));
5931
6046
  const logsCard = (0, react.createElement)("div", { className: SettingsView_module_css_default.card }, (0, react.createElement)(LogsView, {
@@ -5998,6 +6113,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5998
6113
  const { settings: hubSettings, ready: settingsReady, update: updateSettings, reset: resetSettings } = useSettings();
5999
6114
  /** 一级导航:插件中心 / 已安装 / 自定义安装 / 设置 */
6000
6115
  const [view, setView] = (0, react.useState)("market");
6116
+ /** 外部跳转设置分组的一次性信号(错误弹窗「去系统诊断」→ 设置 → 系统诊断):
6117
+ * 传给 SettingsView 消费后即清空,避免下次进设置被强制带跳 */
6118
+ const [settingsSection, setSettingsSection] = (0, react.useState)(null);
6119
+ /** 网络不通提示的「去系统诊断」直达:关掉所有弹窗(错误/通知/安装确认进度等,
6120
+ * 否则 InstallModal 失败后仍停驻原地盖住设置页)→ 切到设置页 → 切到系统诊断分组(自动跑连通性检测) */
6121
+ const openDiagnostics = () => {
6122
+ setErrorMsg(null);
6123
+ setShowNotifications(false);
6124
+ setConfirmPlugin(null);
6125
+ setConfirmCustomTarget(null);
6126
+ setConfirmGlobalNpm(null);
6127
+ setUninstallPlugin(null);
6128
+ setUninstallItem(null);
6129
+ setDetailItem(null);
6130
+ setShowHubUpdate(false);
6131
+ setShowAbout(false);
6132
+ setIgnoreTarget(null);
6133
+ setShowRestartConfirm(false);
6134
+ setView("settings");
6135
+ setSettingsSection("diagnostics");
6136
+ };
6001
6137
  /** 全局反馈 Toast:{id} 用于重复触发时重新走入场动画,kind 决定文案与配色 */
6002
6138
  const [toast, setToast] = (0, react.useState)(null);
6003
6139
  /** 复制反馈:记录刚复制安装命令的仓库,按钮短暂切换为「已复制」样式 */
@@ -6058,6 +6194,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6058
6194
  }, [view]);
6059
6195
  const queue = useTaskQueue({
6060
6196
  t,
6197
+ langKey,
6061
6198
  refreshInstalled: catalog.refreshInstalled,
6062
6199
  onInstallDone: (viaModal, repo, needsRestart, update) => {
6063
6200
  setInstallNeedsRestart(needsRestart);
@@ -6390,9 +6527,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6390
6527
  id: Date.now(),
6391
6528
  kind: "copied"
6392
6529
  });
6393
- }
6530
+ },
6531
+ openSection: settingsSection,
6532
+ onConsumedOpenSection: () => setSettingsSection(null)
6394
6533
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6395
- info: catalog.hubUpdateInfo ?? { version: "1.3.6" },
6534
+ info: catalog.hubUpdateInfo ?? { version: "1.3.7" },
6396
6535
  lang,
6397
6536
  t,
6398
6537
  hasUpdate: catalog.hubHasUpdate,
@@ -6443,6 +6582,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6443
6582
  cancelTask: queue.cancelTask,
6444
6583
  restarting,
6445
6584
  onRestart: () => setShowRestartConfirm(true),
6585
+ onRunDiagnostics: openDiagnostics,
6446
6586
  resolveRepo: (repo) => issueRepoOf(repo, catalog.installedItems, catalog.plugins)
6447
6587
  }), ignoreTarget && (0, react.createElement)("div", {
6448
6588
  className: Modal_module_css_default.overlay,
@@ -6607,6 +6747,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6607
6747
  kind: "errCopied"
6608
6748
  });
6609
6749
  },
6750
+ onRunDiagnostics: openDiagnostics,
6610
6751
  onClose: () => setErrorMsg(null)
6611
6752
  }), showRestartConfirm && (0, react.createElement)(RestartConfirmModal, {
6612
6753
  t,