dsh-plugin 1.3.11 → 1.4.1

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
@@ -14,11 +14,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
14
14
  * zh/en dictionaries for the DSH Plugin Hub settings section.
15
15
  */
16
16
  const zh = {
17
- nav: "插件中心",
17
+ nav: "插件市场",
18
18
  title: "DSH Plugin Hub",
19
- tagline: "DSH Plugin 插件中心:面向 DeepSeek Harness 插件收录平台,人工审验、来源可溯,免费安装",
19
+ tagline: "DSH Plugin 插件市场:面向 DeepSeek Harness 插件收录平台,人工审验、来源可溯,免费安装",
20
20
  adBadge: "推荐",
21
- ad: "DSH Plugin 插件中心:收录 {total} 款插件,{verified} 款人工精选验证,每日更新",
21
+ ad: "DSH Plugin 插件市场:收录 {total} 款插件,{verified} 款人工精选验证,每日更新",
22
22
  search: "搜索插件名称、描述、标签…",
23
23
  all: "全部",
24
24
  sortStars: "Star",
@@ -31,15 +31,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
31
31
  fork: "Fork",
32
32
  loading: "正在加载插件数据…",
33
33
  failed: "插件数据加载失败",
34
- failedDescNoProxy: "你的网络似乎不通,无法获取插件目录数据。请检查网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
35
- failedDescProxy: "你的网络似乎不通,或设置里的 HTTP 代理地址不可达,无法获取插件目录数据。请检查代理设置与网络连接后重试;或点击右上角按钮在浏览器中打开插件中心。",
34
+ failedDescNoProxy: "你的网络似乎不通,无法获取插件目录数据。请检查网络连接后重试;或点击右上角按钮在浏览器中打开插件市场。",
35
+ failedDescProxy: "你的网络似乎不通,或设置里的 HTTP 代理地址不可达,无法获取插件目录数据。请检查代理设置与网络连接后重试;或点击右上角按钮在浏览器中打开插件市场。",
36
36
  retry: "重试",
37
37
  install: "安装",
38
38
  cliOnlyHint: "此插件可能需命令行辅助,失败时复制上方命令到 dsh 终端",
39
39
  failedCopyHint: "安装失败。请复制上方安装命令到 dsh 终端手动执行(原生依赖构建脚本可能需要人工放行,如 pnpm approve-builds)",
40
40
  toastCopied: "安装命令已复制,去 dsh 终端粘贴即可安装",
41
41
  installed: "已安装",
42
- viewMarket: "插件中心",
42
+ viewMarket: "插件市场",
43
43
  viewInstalled: "已安装",
44
44
  viewCustom: "自定义安装",
45
45
  viewSettings: "设置",
@@ -76,8 +76,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
76
76
  customLabel: "自定义安装",
77
77
  installedSearch: "搜索已安装的插件…",
78
78
  installedFilterCatalog: "目录插件",
79
- hubInstall: "插件中心",
80
- hubInstallHint: "来自插件中心收录的目录插件",
79
+ hubInstall: "插件市场",
80
+ hubInstallHint: "来自插件市场收录的目录插件",
81
81
  manualInstall: "手动安装",
82
82
  manualInstallHint: "非目录收录,通过命令行手动安装",
83
83
  filterByLabel: "来源",
@@ -108,7 +108,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
108
108
  settingsUpdate: "更新设置",
109
109
  settingsUpdateDesc: "更新检查方式与安装走到的网络通道",
110
110
  settingsCheckOnStart: "启动时检查更新",
111
- settingsCheckOnStartDesc: "打开插件中心时检查已安装插件是否有新版,发现更新会提示",
111
+ settingsCheckOnStartDesc: "打开插件市场时检查已安装插件是否有新版,发现更新会提示",
112
112
  settingsProxy: "HTTP 代理",
113
113
  settingsProxyDesc: "npm / git / 目录数据请求统一走该代理;留空直连",
114
114
  proxyCheckChecking: "正在测试该代理地址…",
@@ -187,6 +187,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
187
187
  diagNpmUnset: "未配置(跟随本机 npm 配置)",
188
188
  diagGithub: "GitHub",
189
189
  diagCatalog: "目录站点",
190
+ diagCatalogTarget: "插件市场",
190
191
  diagProxy: "HTTP 代理",
191
192
  diagOk: "OK",
192
193
  diagChecking: "检测中…",
@@ -206,7 +207,6 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
206
207
  settingsResetRun: "恢复默认",
207
208
  settingsResetConfirm: "确认恢复",
208
209
  settingsResetConfirmDetail: "确定要恢复默认设置吗?更新策略、镜像源、代理与安全限制将全部回到出厂默认值。",
209
- updatesFound: "发现 {n} 个插件可更新,已加入通知中心",
210
210
  updateNoticeTitle: "发现新版本",
211
211
  updateNoticeGo: "去更新",
212
212
  ignoreUpdateRun: "忽略本次更新",
@@ -291,9 +291,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
291
291
  failNetworkTarget: "无法访问 {url} —— 你的网络连接不通",
292
292
  failNetworkRunDiag: "去系统诊断检测网络",
293
293
  failDshMissingHint: "系统找不到 dsh 命令(dsh 未加入系统 PATH),无法调用安装器执行安装。请确认 DeepSeek Harness 已正确安装、dsh 已加入 PATH(或重新安装),然后重试。这不是插件本身的问题。",
294
+ failGitMissingHint: "系统找不到 git 命令(Git 未安装或未加入系统 PATH),无法从 GitHub 源安装插件。请先安装 Git(如 git-scm.com/downloads)或把 git 加入 PATH,重启 DSH 后重试。这不是插件本身的问题。",
294
295
  failPnpmMissingHint: "安装器找到了 dsh,但系统里没有 pnpm 命令(dsh 用它来管理 profile 插件)。请先安装 pnpm(如 npm install -g pnpm),确认 pnpm 已加入 PATH 后重试。这不是插件本身的问题。",
296
+ failNpmMissingHint: "系统找不到 npm 命令(npm 未安装或未加入系统 PATH),无法执行全局安装。请先安装 Node.js(自带 npm),确认 npm 已加入 PATH 后重试。这不是插件本身的问题。",
295
297
  failPnpmStoreHint: "安装器调用 pnpm 时报「store 位置不匹配」(ERR_PNPM_UNEXPECTED_STORE):你的 profile 目录里旧插件依赖是用另一个大版本的 pnpm 生成的,当前 pnpm 出于安全不认旧目录,导致任何插件装进该 profile 都会失败。请删除该 profile 目录下的 node_modules 与 pnpm-lock.yaml(可先到「系统日志」或 ~/.dsh/profiles/<profile>/hub.log 查看完整报错),再重新安装。这不是插件本身的问题。",
296
- failPnpmPolicyHint: "安装器调用 pnpm 时被其供应链安全策略拦截(ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION / Minimum release age:锁文件里包的发布时间太近被拒;或 untrusted origin:依赖来源未受本机 pnpm 信任)。这是 pnpm 11 的默认安全策略,装任何「刚发布/新来源」的插件都会撞墙,不是插件本身的问题。请在 pnpm 配置(pnpm-workspace.yaml 或 .npmrc)里加入 minimumReleaseAge: 0 豁免,或等发布冷却一段时间后重试。",
298
+ failPnpmPolicyHint: "安装器调用 pnpm 时被其供应链安全策略拦截——装任何插件都会撞墙,不是插件本身的问题。分两种情况处理:① 提示「Minimum release age」(ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION):包发布还不满 24 小时,pnpm 11 出于安全会拒收这种刚发布的新包。可在 pnpm 配置(pnpm-workspace.yaml)里加 minimumReleaseAge: 0 豁免,或等满 24 小时后重试。② 提示「untrusted origin」(ERR_PNPM_UNTRUSTED_ORIGIN):依赖来源不被本机 pnpm 信任,通常是该 profile 里之前用 github: 或非官方 npm 源装过插件,锁文件记录了不受信任的来源。请删除该 profile 目录下的 node_modules 与 pnpm-lock.yaml 后重新安装(可先到「系统日志」或 ~/.dsh/profiles/<profile>/hub.log 查看完整报错)。",
297
299
  installChannelNpm: "NPM 包",
298
300
  installChannelGit: "GitHub 源码",
299
301
  installChannelDsh: "DSH 命令",
@@ -510,6 +512,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
510
512
  diagNpmUnset: "Unset (follow local npm config)",
511
513
  diagGithub: "GitHub",
512
514
  diagCatalog: "Catalog site",
515
+ diagCatalogTarget: "Plugin marketplace",
513
516
  diagProxy: "HTTP proxy",
514
517
  diagOk: "OK",
515
518
  diagChecking: "Checking…",
@@ -529,7 +532,6 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
529
532
  settingsResetRun: "Restore Defaults",
530
533
  settingsResetConfirm: "Restore Defaults",
531
534
  settingsResetConfirmDetail: "Reset all settings to factory defaults? Update policy, npm mirror, proxy and security restrictions will be cleared.",
532
- updatesFound: "{n} plugin(s) have updates — check the notification center",
533
535
  updateNoticeTitle: "Update available",
534
536
  updateNoticeGo: "Update",
535
537
  ignoreUpdateRun: "Ignore this update",
@@ -615,9 +617,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
615
617
  failNetworkTarget: "Cannot reach {url} — your network connection is down",
616
618
  failNetworkRunDiag: "Run a network diagnostic",
617
619
  failDshMissingHint: "The dsh command could not be found (it is not on the system PATH), so the installer could not run. Please make sure DeepSeek Harness is installed correctly and dsh is on your PATH (or reinstall it), then retry. This is not a problem with the plugin itself.",
620
+ failGitMissingHint: "The git command could not be found (Git is not installed or not on the system PATH), so GitHub-source plugins cannot be installed. Please install Git (e.g. from git-scm.com/downloads) or add git to your PATH, restart DSH, then retry. This is not a problem with the plugin itself.",
618
621
  failPnpmMissingHint: "The installer found dsh, but pnpm is missing on this machine (dsh uses it to manage profile plugins). Please install pnpm first (e.g. npm install -g pnpm), make sure it is on your PATH, then retry. This is not a problem with the plugin itself.",
622
+ failNpmMissingHint: "The npm command could not be found (npm is not installed or not on the system PATH), so a global install cannot run. Please install Node.js (which bundles npm), make sure npm is on your PATH, then retry. This is not a problem with the plugin itself.",
619
623
  failPnpmStoreHint: "pnpm reported an unexpected store location (ERR_PNPM_UNEXPECTED_STORE): the profile directory was previously set up with a different major version of pnpm, and the current pnpm refuses to reuse it — no plugin can be installed into that profile. Delete node_modules and pnpm-lock.yaml under the profile directory (see System Logs or ~/.dsh/profiles/<profile>/hub.log for the full output), then reinstall. This is not a problem with the plugin itself.",
620
- failPnpmPolicyHint: "The installer was blocked by pnpm supply-chain security policy (ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION / Minimum release age: a package in the lockfile was published too recently; or untrusted origin: a dependency source is not trusted by pnpm). This is pnpm 11 default security policy — installing any freshly published or new-origin plugin hits the same wall, so this is not a problem with the plugin itself. Add minimumReleaseAge: 0 to your pnpm config (pnpm-workspace.yaml or .npmrc) to opt out, or retry once the release has cooled down.",
624
+ failPnpmPolicyHint: "The installer was blocked by pnpm supply-chain security policy — every plugin install would hit the same wall, so this is not a problem with the plugin itself. Two cases: ① \"Minimum release age\" (ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION): the package was published less than 24 hours ago, and pnpm 11 refuses freshly-published packages for safety. Add minimumReleaseAge: 0 to your pnpm config (pnpm-workspace.yaml) to opt out, or wait until the 24 hours have passed and retry. ② \"untrusted origin\" (ERR_PNPM_UNTRUSTED_ORIGIN): a dependency source is not trusted by this machine, usually because plugins were previously installed via github: or a non-official npm registry, so the lockfile records an untrusted source. Delete node_modules and pnpm-lock.yaml under the profile directory (see System Logs or ~/.dsh/profiles/<profile>/hub.log for the full output), then reinstall.",
621
625
  installChannelNpm: "NPM package",
622
626
  installChannelGit: "GitHub source",
623
627
  installChannelDsh: "DSH command",
@@ -674,46 +678,46 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
674
678
  css: css$11
675
679
  });
676
680
  var Header_module_css_default = {
681
+ "resultCount": "qikqja_resultCount",
682
+ "controls": "qikqja_controls",
677
683
  "header": "qikqja_header",
678
- "headerTitleRow": "qikqja_headerTitleRow",
679
- "search": "qikqja_search",
680
- "root": "qikqja_root",
681
- "resultSeg": "qikqja_resultSeg",
682
- "adText": "qikqja_adText",
684
+ "aboutBtn": "qikqja_aboutBtn",
685
+ "tab": "qikqja_tab",
686
+ "githubLink": "qikqja_githubLink",
687
+ "version": "qikqja_version",
688
+ "adBanner": "qikqja_adBanner",
689
+ "tabsRow": "qikqja_tabsRow",
690
+ "headerRight": "qikqja_headerRight",
691
+ "copyIcon": "qikqja_copyIcon",
683
692
  "tabs": "qikqja_tabs",
684
- "tagline": "qikqja_tagline",
685
- "langBtn": "qikqja_langBtn",
686
- "searchRow": "qikqja_searchRow",
687
693
  "segGroup": "qikqja_segGroup",
688
- "tab": "qikqja_tab",
689
- "tabCount": "qikqja_tabCount",
690
- "sortGroup": "qikqja_sortGroup",
691
- "brandTitle": "qikqja_brandTitle",
692
- "githubIcon": "qikqja_githubIcon",
694
+ "logoIcon": "qikqja_logoIcon",
693
695
  "taglineLink": "qikqja_taglineLink",
694
- "segBtnActive": "qikqja_segBtnActive",
695
- "copyIcon": "qikqja_copyIcon",
696
- "tabsRow": "qikqja_tabsRow",
697
- "segBtn": "qikqja_segBtn",
698
- "resultCount": "qikqja_resultCount",
699
- "adBadge": "qikqja_adBadge",
700
- "aboutBtn": "qikqja_aboutBtn",
701
696
  "hubUpdateBadge": "qikqja_hubUpdateBadge",
697
+ "resultSeg": "qikqja_resultSeg",
698
+ "adBadge": "qikqja_adBadge",
699
+ "brandTitle": "qikqja_brandTitle",
700
+ "segBtnActive": "qikqja_segBtnActive",
701
+ "searchRow": "qikqja_searchRow",
702
702
  "adArrow": "qikqja_adArrow",
703
- "version": "qikqja_version",
704
- "tabActive": "qikqja_tabActive",
705
- "logoIcon": "qikqja_logoIcon",
706
- "adBanner": "qikqja_adBanner",
707
- "segLabel": "qikqja_segLabel",
708
- "githubLink": "qikqja_githubLink",
703
+ "adText": "qikqja_adText",
709
704
  "title": "qikqja_title",
705
+ "root": "qikqja_root",
710
706
  "versionBtn": "qikqja_versionBtn",
711
- "headerRight": "qikqja_headerRight",
712
- "controls": "qikqja_controls"
707
+ "segBtn": "qikqja_segBtn",
708
+ "segLabel": "qikqja_segLabel",
709
+ "sortGroup": "qikqja_sortGroup",
710
+ "tabCount": "qikqja_tabCount",
711
+ "tagline": "qikqja_tagline",
712
+ "githubIcon": "qikqja_githubIcon",
713
+ "search": "qikqja_search",
714
+ "tabActive": "qikqja_tabActive",
715
+ "langBtn": "qikqja_langBtn",
716
+ "headerTitleRow": "qikqja_headerTitleRow"
713
717
  };
714
718
  //#endregion
715
719
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
716
- 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}";
720
+ const css$10 = ".BiQ1zG_overlay{z-index:998;-webkit-user-select:none;user-select:none;background:#00000061;justify-content:center;align-items:center;animation:.16s ease-out BiQ1zG_overlayIn;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.BiQ1zG_modal,.BiQ1zG_errorModal{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:10px;flex-direction:column;gap:10px;width:540px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:14px 16px;animation:.18s ease-out BiQ1zG_modalIn;display:flex;box-shadow:0 12px 40px #0000003d}.BiQ1zG_errorModal{width:720px;max-width:calc(100vw - 48px)}.BiQ1zG_modalWide{width:640px;max-width:calc(100vw - 48px)}.BiQ1zG_helpModal{width:760px;max-width:calc(100vw - 48px)}.BiQ1zG_logModal{width:820px;max-width:calc(100vw - 48px);height:min(540px,100vh - 64px)}.BiQ1zG_modalHead{flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;display:flex}.BiQ1zG_modalTitle{color:var(--hub-text-primary);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_modalTitleBusy{color:var(--hub-brand)}.BiQ1zG_modalTitleQueued{color:var(--hub-warning)}.BiQ1zG_modalClose{width:24px;height:24px;color:var(--hub-text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:inline-flex}.BiQ1zG_modalClose:hover{color:var(--hub-text-primary);background:var(--hub-bg-hover)}.BiQ1zG_modalCloseIcon{flex-shrink:0;width:14px;height:14px}.BiQ1zG_confirmIconWrap{justify-content:center;padding:2px 0 6px;display:flex}.BiQ1zG_confirmIcon{background:var(--hub-brand);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex;box-shadow:0 4px 12px #4f6ef747}.BiQ1zG_confirmIconDanger{background:var(--hub-danger);box-shadow:0 4px 12px #d1242f4d}.BiQ1zG_dangerConfirm{color:#fff;background:var(--hub-danger);border:1px solid var(--hub-danger);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:background-color .12s,border-color .12s}.BiQ1zG_dangerConfirm:hover:not(:disabled){background:var(--hub-danger-hover);border-color:var(--hub-danger-hover)}.BiQ1zG_dangerConfirm:disabled{opacity:.55;cursor:default}.BiQ1zG_confirmPrimary{color:#fff;background:var(--hub-brand);border:1px solid var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;flex:none;height:28px;padding:0 14px;font-size:12px;font-weight:600;transition:filter .12s}.BiQ1zG_confirmPrimary:hover:not(:disabled){filter:brightness(1.08)}.BiQ1zG_confirmPrimary:disabled{opacity:.55;cursor:default}.BiQ1zG_modalDesc{color:var(--hub-text-secondary);font-size:12px;line-height:18px}.BiQ1zG_trustHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_cliOnlyHint{color:var(--hub-text-secondary);background:var(--hub-bg-hover);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_failedCopyHint{color:var(--hub-danger-text);background:var(--hub-danger-tint);border:1px solid var(--hub-danger-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;font-weight:500;line-height:18px}.BiQ1zG_modalRow{align-items:baseline;gap:8px;min-width:0;font-size:12px;line-height:18px;display:flex}.BiQ1zG_modalLabel{min-width:64px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_modalValue{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);font-weight:500;overflow:hidden}.BiQ1zG_modalLink{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex;overflow:hidden}.BiQ1zG_modalLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_linkIcon{flex-shrink:0}.BiQ1zG_modalCmd{color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:6px 6px 6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_modalCmd:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_modalCmdText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.BiQ1zG_modalCmdCopy{color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-family:inherit;font-size:11px;line-height:16px;transition:color .12s,background .12s;display:inline-flex}.BiQ1zG_modalCmdCopy:hover{color:var(--hub-brand-hover);background:var(--hub-bg-2)}.BiQ1zG_modalActions{justify-content:flex-end;align-items:center;gap:8px;margin-top:2px;display:flex}.BiQ1zG_modalBody{flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex;overflow-y:auto}.BiQ1zG_toast{z-index:1000;background:var(--hub-btn-fill);color:var(--hub-text-on-fill);pointer-events:none;white-space:nowrap;border:none;border-radius:8px;padding:10px 16px;font-size:12px;font-weight:500;line-height:18px;animation:.22s ease-out BiQ1zG_toastIn;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 6px 24px #00000047}@keyframes BiQ1zG_toastIn{0%{opacity:0;transform:translate(-50%,-44%)}to{opacity:1;transform:translate(-50%,-50%)}}.BiQ1zG_toastFail{background:var(--hub-danger);color:#fff;border-color:#ffffff3d}.BiQ1zG_queueSection{flex-direction:column;gap:6px;display:flex}.BiQ1zG_queueSectionTitle{color:var(--hub-text-secondary);padding:4px 2px 0;font-size:12px;font-weight:600;line-height:18px}.BiQ1zG_pendingRowStatus{color:var(--hub-warn);flex-shrink:0;font-weight:500}.BiQ1zG_pendingRowActions{flex-shrink:0;gap:8px;margin-left:auto;display:flex}.BiQ1zG_queueRow{border:1px solid var(--hub-border-2);background:var(--hub-bg-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;gap:5px;padding:8px 10px;font-size:12px;line-height:18px;transition:background .12s;display:flex}.BiQ1zG_queueRow:hover{background:var(--hub-brand-tint)}.BiQ1zG_queueRowHead{align-items:center;gap:10px;display:flex}.BiQ1zG_queueRowTarget{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hub-text-primary);flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.BiQ1zG_queueRowDesc{color:var(--hub-text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.BiQ1zG_queueRowBody{align-items:center;gap:8px;display:flex}.BiQ1zG_queueRowStatus{color:var(--hub-brand);flex-shrink:0;font-weight:500}.BiQ1zG_queueRowTrack{flex:1;min-width:0}.BiQ1zG_queueRowPct{color:var(--hub-text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0}.BiQ1zG_stripCancel{color:var(--hub-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:12px;line-height:18px;transition:background .12s,color .12s}.BiQ1zG_stripCancel:hover{background:var(--hub-danger-tint);color:var(--hub-danger-text)}.BiQ1zG_stripCancel:disabled{opacity:.45;cursor:default}.BiQ1zG_queuedHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:5px 10px;font-size:12px;line-height:18px}.BiQ1zG_errorTitle{color:var(--hub-danger-text);font-size:14px;font-weight:600;line-height:20px}.BiQ1zG_errorBox{border:1px solid var(--hub-danger-border);background:var(--hub-danger-tint-weak);max-height: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:560px;max-width:calc(100vw - 48px)}.BiQ1zG_aboutContent{min-height:0;max-height:340px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_aboutContent>:first-child{margin-top:0}.BiQ1zG_aboutContent>:last-child{margin-bottom:0}.BiQ1zG_aboutContent h2,.BiQ1zG_aboutContent h3,.BiQ1zG_aboutContent h4,.BiQ1zG_aboutContent h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_aboutContent h2{font-size:14px}.BiQ1zG_aboutContent p{margin:4px 0}.BiQ1zG_aboutContent ul,.BiQ1zG_aboutContent ol{margin:4px 0;padding-left:18px}.BiQ1zG_aboutContent li{margin:2px 0}.BiQ1zG_aboutContent code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_aboutContent pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_aboutContent pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_aboutContent blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_aboutContent a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_aboutContent a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_aboutContent img{border-radius:8px;max-width:100%;max-height:220px;margin:8px auto;display:block;box-shadow:0 2px 8px #0000001f}.BiQ1zG_aboutContent img[width=\"100\"]{object-fit:contain;width:100px;height:100px;max-height:100px}.BiQ1zG_aboutMeta{color:var(--hub-text-tertiary);font-size:11px;line-height:16px}.BiQ1zG_hubUpdateModal{width:620px;max-width:calc(100vw - 48px)}.BiQ1zG_hubUpdateMeta{flex-wrap:wrap;align-items:center;gap:4px 14px;font-size:12px;line-height:18px;display:flex}.BiQ1zG_hubUpdateMetaItem{color:var(--hub-text-tertiary)}.BiQ1zG_hubUpdateNotes{min-height:0;max-height:300px;color:var(--hub-text-secondary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:8px;flex:auto;padding:10px 12px;font-size:12px;line-height:18px;overflow-y:auto}.BiQ1zG_hubUpdateNotes>:first-child{margin-top:0}.BiQ1zG_hubUpdateNotes>:last-child{margin-bottom:0}.BiQ1zG_hubUpdateNotes h2,.BiQ1zG_hubUpdateNotes h3,.BiQ1zG_hubUpdateNotes h4,.BiQ1zG_hubUpdateNotes h5{color:var(--hub-text-primary);margin:10px 0 4px;font-size:13px;font-weight:600;line-height:20px}.BiQ1zG_hubUpdateNotes h2{font-size:14px}.BiQ1zG_hubUpdateNotes p{margin:4px 0}.BiQ1zG_hubUpdateNotes ul,.BiQ1zG_hubUpdateNotes ol{margin:4px 0;padding-left:18px}.BiQ1zG_hubUpdateNotes li{margin:2px 0}.BiQ1zG_hubUpdateNotes code{background:var(--hub-bg-hover);color:var(--hub-text-primary);border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.BiQ1zG_hubUpdateNotes pre{background:var(--hub-bg-1);border:1px solid var(--hub-border-2);border-radius:6px;margin:6px 0;padding:8px 10px;overflow-x:auto}.BiQ1zG_hubUpdateNotes pre code{background:0 0;border-radius:0;padding:0}.BiQ1zG_hubUpdateNotes blockquote{border-left:3px solid var(--hub-brand);background:var(--hub-bg-hover);color:var(--hub-text-tertiary);border-radius:0 6px 6px 0;margin:6px 0;padding:2px 10px}.BiQ1zG_hubUpdateNotes a{color:var(--hub-brand);text-decoration:none}.BiQ1zG_hubUpdateNotes a:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailModal{width:580px;max-width:calc(100vw - 48px)}.BiQ1zG_detailUpdateHint{color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);border-radius:6px;padding:6px 10px;font-size:12px;line-height:18px}.BiQ1zG_detailGrid{flex-direction:column;gap:6px;display:flex}.BiQ1zG_detailRow{align-items:baseline;gap:10px;min-width:0;font-size:12px;line-height:20px;display:flex}.BiQ1zG_detailLabel{text-align:right;width:76px;color:var(--hub-text-tertiary);flex-shrink:0}.BiQ1zG_detailValue{min-width:0;color:var(--hub-text-primary);flex-wrap:wrap;flex:auto;align-items:baseline;gap:4px 6px;font-weight:500;display:flex}.BiQ1zG_detailMono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500}.BiQ1zG_detailArrow{color:var(--hub-text-tertiary);align-items:baseline;gap:4px;display:inline-flex}.BiQ1zG_detailDim{color:var(--hub-text-tertiary);font-size:11px;font-weight:400}.BiQ1zG_detailLink{min-width:0;color:var(--hub-brand);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-weight:500;text-decoration:none;transition:color .12s;display:inline-flex}.BiQ1zG_detailLink:hover{color:var(--hub-brand-hover);text-decoration:underline}.BiQ1zG_detailStars{color:#b45309;font-weight:600}.BiQ1zG_detailPath{min-width:0;color:var(--hub-text-primary);background:var(--hub-bg-2);border:1px solid var(--hub-border-2);border-radius:6px;flex:auto;justify-content:space-between;align-items:center;gap:6px;padding:3px 3px 3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:18px;transition:border-color .12s,background .12s;display:flex}.BiQ1zG_detailPath:hover{border-color:var(--hub-border-ghost);background:var(--hub-bg-3)}.BiQ1zG_detailPathText{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0;overflow:hidden}.BiQ1zG_detailPathActions{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.BiQ1zG_detailPathBtn{width:28px;height:28px;color:var(--hub-brand);background:var(--hub-brand-tint);border:1px solid var(--hub-brand-border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:6px;justify-content:center;align-items:center;transition:color .12s,background .12s,border-color .12s;display:inline-flex}.BiQ1zG_detailPathBtn svg{width:15px;height:15px}.BiQ1zG_detailPathBtn:hover{color:#fff;background:var(--hub-brand);border-color:var(--hub-brand)}.BiQ1zG_detailStatusRunning,.BiQ1zG_detailStatusPending{border-radius:50%;flex-shrink:0;align-self:center;width:8px;height:8px}.BiQ1zG_detailStatusRunning{background:var(--hub-success)}.BiQ1zG_detailStatusPending{background:var(--hub-warning)}.BiQ1zG_detailStatusText{font-weight:500}";
717
721
  const tagId$10 = "dsh-plugin/Modal.module.css";
718
722
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$10) + "]") === null) {
719
723
  const tag = document.createElement("style");
@@ -728,136 +732,136 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
728
732
  css: css$10
729
733
  });
730
734
  var Modal_module_css_default = {
731
- "modalValue": "BiQ1zG_modalValue",
732
- "queueSectionTitle": "BiQ1zG_queueSectionTitle",
733
- "failKindUninstall": "BiQ1zG_failKindUninstall",
734
- "resultTitle": "BiQ1zG_resultTitle",
735
- "queueRowStatus": "BiQ1zG_queueRowStatus",
736
- "resultRestarting": "BiQ1zG_resultRestarting",
735
+ "helpModal": "BiQ1zG_helpModal",
736
+ "noticeRowOk": "BiQ1zG_noticeRowOk",
737
+ "noticeVersion": "BiQ1zG_noticeVersion",
738
+ "failList": "BiQ1zG_failList",
739
+ "restartNow": "BiQ1zG_restartNow",
737
740
  "restartNowWarning": "BiQ1zG_restartNowWarning",
738
- "failCopy": "BiQ1zG_failCopy",
739
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
740
- "failEmpty": "BiQ1zG_failEmpty",
741
- "queueRowTarget": "BiQ1zG_queueRowTarget",
742
741
  "noticeMain": "BiQ1zG_noticeMain",
743
- "toast": "BiQ1zG_toast",
744
- "detailGrid": "BiQ1zG_detailGrid",
745
- "progressTrack": "BiQ1zG_progressTrack",
746
- "noticeTextOk": "BiQ1zG_noticeTextOk",
747
- "linkIcon": "BiQ1zG_linkIcon",
748
- "queuedHint": "BiQ1zG_queuedHint",
749
- "result": "BiQ1zG_result",
750
- "detailStars": "BiQ1zG_detailStars",
751
- "modalLink": "BiQ1zG_modalLink",
752
- "queueRowBody": "BiQ1zG_queueRowBody",
753
- "resultDesc": "BiQ1zG_resultDesc",
754
- "detailModal": "BiQ1zG_detailModal",
755
- "detailLabel": "BiQ1zG_detailLabel",
756
- "detailPathText": "BiQ1zG_detailPathText",
757
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
758
- "logModal": "BiQ1zG_logModal",
759
- "failRow": "BiQ1zG_failRow",
760
- "toastIn": "BiQ1zG_toastIn",
761
- "noticeVersion": "BiQ1zG_noticeVersion",
762
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
742
+ "noticeRemove": "BiQ1zG_noticeRemove",
743
+ "modalRow": "BiQ1zG_modalRow",
744
+ "noticeFoot": "BiQ1zG_noticeFoot",
763
745
  "errorHint": "BiQ1zG_errorHint",
764
- "detailValue": "BiQ1zG_detailValue",
765
- "modalWide": "BiQ1zG_modalWide",
766
- "confirmIcon": "BiQ1zG_confirmIcon",
767
- "failKindInstall": "BiQ1zG_failKindInstall",
768
- "overlay": "BiQ1zG_overlay",
769
- "modalCloseIcon": "BiQ1zG_modalCloseIcon",
770
746
  "progress": "BiQ1zG_progress",
771
- "detailLink": "BiQ1zG_detailLink",
772
- "overlayIn": "BiQ1zG_overlayIn",
773
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
747
+ "detailDim": "BiQ1zG_detailDim",
774
748
  "failBigIssue": "BiQ1zG_failBigIssue",
775
- "aboutModal": "BiQ1zG_aboutModal",
776
- "detailPathBtn": "BiQ1zG_detailPathBtn",
777
- "modal": "BiQ1zG_modal",
778
- "detailStatusText": "BiQ1zG_detailStatusText",
779
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
780
- "errorTitle": "BiQ1zG_errorTitle",
781
- "noticeRow": "BiQ1zG_noticeRow",
782
- "modalLabel": "BiQ1zG_modalLabel",
783
- "restartNow": "BiQ1zG_restartNow",
784
- "failRepo": "BiQ1zG_failRepo",
785
- "queueRowHead": "BiQ1zG_queueRowHead",
786
- "failPrepareHint": "BiQ1zG_failPrepareHint",
787
- "detailUpdateHint": "BiQ1zG_detailUpdateHint",
749
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
750
+ "failRow": "BiQ1zG_failRow",
788
751
  "restartLater": "BiQ1zG_restartLater",
789
- "noticeRowOk": "BiQ1zG_noticeRowOk",
790
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
791
- "errorBox": "BiQ1zG_errorBox",
792
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
793
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
752
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
753
+ "aboutContent": "BiQ1zG_aboutContent",
794
754
  "modalTitleBusy": "BiQ1zG_modalTitleBusy",
795
- "errorCopySoft": "BiQ1zG_errorCopySoft",
796
- "queueRowPct": "BiQ1zG_queueRowPct",
797
- "detailRow": "BiQ1zG_detailRow",
798
- "noticeFoot": "BiQ1zG_noticeFoot",
799
- "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
755
+ "trustHint": "BiQ1zG_trustHint",
756
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
757
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
758
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
759
+ "errorModal": "BiQ1zG_errorModal",
760
+ "noticeList": "BiQ1zG_noticeList",
761
+ "stripCancel": "BiQ1zG_stripCancel",
762
+ "overlay": "BiQ1zG_overlay",
763
+ "noticeHead": "BiQ1zG_noticeHead",
764
+ "progressFillFail": "BiQ1zG_progressFillFail",
765
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
766
+ "detailLabel": "BiQ1zG_detailLabel",
767
+ "noticeRow": "BiQ1zG_noticeRow",
768
+ "resultDesc": "BiQ1zG_resultDesc",
800
769
  "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
801
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
802
- "modalClose": "BiQ1zG_modalClose",
770
+ "detailRow": "BiQ1zG_detailRow",
771
+ "queueRow": "BiQ1zG_queueRow",
772
+ "modalActions": "BiQ1zG_modalActions",
803
773
  "queueRowTrack": "BiQ1zG_queueRowTrack",
804
- "failClear": "BiQ1zG_failClear",
805
- "detailDim": "BiQ1zG_detailDim",
806
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
774
+ "modalCloseIcon": "BiQ1zG_modalCloseIcon",
775
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
776
+ "modalLink": "BiQ1zG_modalLink",
777
+ "modalDesc": "BiQ1zG_modalDesc",
778
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
779
+ "failedCopyHint": "BiQ1zG_failedCopyHint",
780
+ "modalCopy": "BiQ1zG_modalCopy",
781
+ "modalValue": "BiQ1zG_modalValue",
782
+ "linkIcon": "BiQ1zG_linkIcon",
807
783
  "aboutMeta": "BiQ1zG_aboutMeta",
808
- "detailArrow": "BiQ1zG_detailArrow",
809
- "detailMono": "BiQ1zG_detailMono",
784
+ "resultRestarting": "BiQ1zG_resultRestarting",
785
+ "detailModal": "BiQ1zG_detailModal",
786
+ "failKindInstall": "BiQ1zG_failKindInstall",
787
+ "modalLabel": "BiQ1zG_modalLabel",
788
+ "aboutModal": "BiQ1zG_aboutModal",
789
+ "resultCheck": "BiQ1zG_resultCheck",
790
+ "detailGrid": "BiQ1zG_detailGrid",
791
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
792
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
793
+ "logModal": "BiQ1zG_logModal",
794
+ "result": "BiQ1zG_result",
795
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
810
796
  "failKind": "BiQ1zG_failKind",
797
+ "queueRowBody": "BiQ1zG_queueRowBody",
811
798
  "noticeTextFail": "BiQ1zG_noticeTextFail",
812
- "detailStatusPending": "BiQ1zG_detailStatusPending",
799
+ "queueRowPct": "BiQ1zG_queueRowPct",
800
+ "overlayIn": "BiQ1zG_overlayIn",
801
+ "noticeTime": "BiQ1zG_noticeTime",
802
+ "modalHead": "BiQ1zG_modalHead",
813
803
  "noticeRowMain": "BiQ1zG_noticeRowMain",
814
- "resultCheck": "BiQ1zG_resultCheck",
815
- "modalCopy": "BiQ1zG_modalCopy",
816
- "stripCancel": "BiQ1zG_stripCancel",
817
- "progressFillFail": "BiQ1zG_progressFillFail",
804
+ "confirmIcon": "BiQ1zG_confirmIcon",
805
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
806
+ "modalCmd": "BiQ1zG_modalCmd",
807
+ "modalWide": "BiQ1zG_modalWide",
808
+ "modalTitle": "BiQ1zG_modalTitle",
809
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
810
+ "progressTrack": "BiQ1zG_progressTrack",
811
+ "modal": "BiQ1zG_modal",
812
+ "detailMono": "BiQ1zG_detailMono",
813
+ "toast": "BiQ1zG_toast",
814
+ "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
815
+ "modalClose": "BiQ1zG_modalClose",
816
+ "failHead": "BiQ1zG_failHead",
818
817
  "progressFill": "BiQ1zG_progressFill",
819
- "noticeRemove": "BiQ1zG_noticeRemove",
820
- "noticeList": "BiQ1zG_noticeList",
818
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
819
+ "modalIn": "BiQ1zG_modalIn",
820
+ "queuedHint": "BiQ1zG_queuedHint",
821
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
821
822
  "detailPathActions": "BiQ1zG_detailPathActions",
822
- "dangerConfirm": "BiQ1zG_dangerConfirm",
823
- "toastFail": "BiQ1zG_toastFail",
823
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
824
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
824
825
  "progressHead": "BiQ1zG_progressHead",
826
+ "modalBody": "BiQ1zG_modalBody",
827
+ "resultTitle": "BiQ1zG_resultTitle",
828
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
829
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
825
830
  "detailPath": "BiQ1zG_detailPath",
826
- "modalActions": "BiQ1zG_modalActions",
827
- "queueRowDesc": "BiQ1zG_queueRowDesc",
828
- "modalCancel": "BiQ1zG_modalCancel",
829
- "pendingRowActions": "BiQ1zG_pendingRowActions",
830
- "failedCopyHint": "BiQ1zG_failedCopyHint",
831
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
832
- "failList": "BiQ1zG_failList",
831
+ "modalInstall": "BiQ1zG_modalInstall",
832
+ "detailStatusText": "BiQ1zG_detailStatusText",
833
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
834
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
835
+ "failRepo": "BiQ1zG_failRepo",
836
+ "queueRowHead": "BiQ1zG_queueRowHead",
837
+ "errorTitle": "BiQ1zG_errorTitle",
838
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
839
+ "modalCmdText": "BiQ1zG_modalCmdText",
833
840
  "confirmPrimary": "BiQ1zG_confirmPrimary",
834
- "failHead": "BiQ1zG_failHead",
835
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
836
- "modalRow": "BiQ1zG_modalRow",
837
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
838
- "aboutContent": "BiQ1zG_aboutContent",
839
- "helpModal": "BiQ1zG_helpModal",
840
- "modalHead": "BiQ1zG_modalHead",
841
+ "detailLink": "BiQ1zG_detailLink",
841
842
  "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
842
- "modalBody": "BiQ1zG_modalBody",
843
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
843
844
  "queueSection": "BiQ1zG_queueSection",
844
- "modalTitle": "BiQ1zG_modalTitle",
845
- "trustHint": "BiQ1zG_trustHint",
846
- "modalCmdText": "BiQ1zG_modalCmdText",
847
- "errorModal": "BiQ1zG_errorModal",
848
- "confirmIconWrap": "BiQ1zG_confirmIconWrap",
849
- "queueRow": "BiQ1zG_queueRow",
850
- "modalIn": "BiQ1zG_modalIn",
851
- "noticeTime": "BiQ1zG_noticeTime",
852
- "noticeIgnore": "BiQ1zG_noticeIgnore",
853
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
854
- "modalDesc": "BiQ1zG_modalDesc",
855
- "modalCmd": "BiQ1zG_modalCmd",
856
- "failDiagBtn": "BiQ1zG_failDiagBtn",
845
+ "errorBox": "BiQ1zG_errorBox",
857
846
  "progressText": "BiQ1zG_progressText",
858
- "noticeHead": "BiQ1zG_noticeHead",
859
- "failNetworkTarget": "BiQ1zG_failNetworkTarget",
860
- "modalInstall": "BiQ1zG_modalInstall"
847
+ "failEmpty": "BiQ1zG_failEmpty",
848
+ "detailStars": "BiQ1zG_detailStars",
849
+ "detailPathText": "BiQ1zG_detailPathText",
850
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
851
+ "toastIn": "BiQ1zG_toastIn",
852
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
853
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
854
+ "detailArrow": "BiQ1zG_detailArrow",
855
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
856
+ "modalCancel": "BiQ1zG_modalCancel",
857
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
858
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
859
+ "detailValue": "BiQ1zG_detailValue",
860
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
861
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
862
+ "failClear": "BiQ1zG_failClear",
863
+ "toastFail": "BiQ1zG_toastFail",
864
+ "failCopy": "BiQ1zG_failCopy"
861
865
  };
862
866
  //#endregion
863
867
  //#region src/client/logic/install-command.ts
@@ -909,9 +913,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
909
913
  }
910
914
  //#endregion
911
915
  //#region src/client/logic/constants.ts
912
- /** 插件中心官网地址。 */
916
+ /** 插件市场官网地址。 */
913
917
  const SITE_URL = "https://dsh-plugin.org/";
914
- /** 插件中心源码仓库:头部右上角 GitHub 图标的跳转地址 */
918
+ /** 插件市场源码仓库:头部右上角 GitHub 图标的跳转地址 */
915
919
  const GITHUB_URL = "https://github.com/dshplugin/dsh-plugin-hub";
916
920
  /**
917
921
  * Hub 自我更新版本控制(接口中心 Pages:api.dsh-plugin.org,静态 JSON 发布)。
@@ -927,7 +931,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
927
931
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
928
932
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
929
933
  */
930
- const PLUGIN_VERSION = "1.3.11";
934
+ const PLUGIN_VERSION = "1.4.1";
931
935
  const CATEGORY_ORDER = [
932
936
  "interface",
933
937
  "session",
@@ -1557,10 +1561,22 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1557
1561
  * 以 Worker 版本控制中心返回的「最新版本」为准,与当前运行的版本号比对——
1558
1562
  * 构建时注入的 PLUGIN_VERSION 是运行 bundle 的真实版本;测试/异常场景缺失时
1559
1563
  * 回退到安装时记录的版本。版本号不等即新版(版本号只在发版时变更,绝无降级场景)。
1564
+ *
1565
+ * 另加 pnpm 供应链安全门槛:新版本发布还不满 24 小时(+30 分钟缓冲)时,pnpm 会静默
1566
+ * 回退到旧版本,此时若提示「可更新」用户点了也更新不到。publishedAt 由接口中心按 npm
1567
+ * registry 真实发布时间下发(同源),据此判断最准。
1560
1568
  */
1561
1569
  const hubHasUpdate = (() => {
1562
1570
  if (!hubUpdateInfo) return false;
1563
- return hubUpdateInfo.version !== "1.3.11";
1571
+ if (hubUpdateInfo.version === "1.4.1") return false;
1572
+ const publishedAt = hubUpdateInfo.publishedAt;
1573
+ if (publishedAt) {
1574
+ const publishedMs = Date.parse(publishedAt);
1575
+ if (!Number.isNaN(publishedMs)) {
1576
+ if (Date.now() - publishedMs < 882e5) return false;
1577
+ }
1578
+ }
1579
+ return true;
1564
1580
  })();
1565
1581
  (0, react.useMemo)(() => {
1566
1582
  if (!plugins) return [];
@@ -1748,19 +1764,31 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1748
1764
  * - dshMissing:安装器 spawn 的 `dsh` 命令找不到(Windows cmd「不是内部或外部命令」/ POSIX
1749
1765
  * 「command not found」/ spawn ENOENT)—— 是本机 DSH 未正确安装或不在 PATH,不是插件问题
1750
1766
  * → 提示检查 PATH/重装 DSH,不引导提 Issue
1767
+ * - gitMissing:安装器调用 `git` 时找不到可执行文件(Windows cmd「'git' is not recognized」/
1768
+ * POSIX「git: command not found」/ spawn ENOENT)—— 是本机 Git 未安装或不在 PATH,不是插件
1769
+ * 问题。pnpm 会把缺失 git 报成 `ERR_PNPM_GIT_RESOLVE_FAILED`(git ls-remote failed),若只看
1770
+ * 错误码会误归插件侧失败;且 dshMissing 的通用「not recognized」模式会先把它吞成 dsh 缺失,
1771
+ * 所以必须在 dshMissing 之前判断(dsh-plugin-hub#21:Win 下装 git 源插件,
1772
+ * `'git' is not recognized` 被误归仓库问题引导去提 Issue)→ 提示安装 Git / 加入 PATH,不引导提 Issue
1751
1773
  * - pnpmMissing:dsh 存在但调用的 `pnpm` 找不到(dsh 报 `pnpm not found on PATH`/POSIX
1752
1774
  * 「pnpm: command not found」/ spawn ENOENT)—— 本机缺 pnpm(dsh 用 pnpm 管理 profile 插件),
1753
1775
  * 不是插件问题(dsh-plugin-hub#13:Linux 下 `dsh: pnpm not found on PATH` 被误归插件侧失败)
1754
1776
  * → 提示安装/开启 pnpm,不引导提 Issue
1777
+ * - npmMissing:全局 npm 安装通道(`npm install -g ...`)spawn 的 `npm` 命令找不到
1778
+ * (Windows cmd「'npm' is not recognized」/ POSIX「npm: command not found」/ spawn ENOENT)——
1779
+ * 本机 npm 未安装或不在 PATH,不是插件问题。dshMissing 的通用「not recognized」模式会把
1780
+ * `'npm' is not recognized` 吞成 dsh 缺失,所以必须在 dshMissing 之前判断
1781
+ * → 提示安装 npm(Node.js 自带)/加入 PATH,不引导提 Issue
1755
1782
  * - pnpmStore:pnpm 存在但报 store 位置不匹配(`ERR_PNPM_UNEXPECTED_STORE` / `Unexpected store
1756
1783
  * location`)—— profile 目录的 node_modules 是用不同大版本的 pnpm 生成的,当前 pnpm 不认,
1757
1784
  * 任何插件装进该 profile 都会失败;不是插件问题(dsh-plugin-hub#14:macOS 下
1758
1785
  * `ERR_PNPM_UNEXPECTED_STORE` 被误归插件侧失败)→ 提示清理 profile 依赖目录重建,不引导提 Issue
1759
1786
  * - pnpmPolicy:pnpm 11 的供应链安全策略拒绝安装(`ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION` /
1760
- * `Minimum release age` —— 锁文件里包的发布时间太近被拒;`untrusted origin` —— 依赖来源未被
1761
- * 本机 pnpm 信任)。拦的是「发布太新的包」与「未被信任的来源」,装任何新插件都会撞墙,不是
1787
+ * `Minimum release age` —— 锁文件里包的发布时间还不满 24 小时被拒;`untrusted origin` —— 依赖来源未被
1788
+ * 本机 pnpm 信任)。拦的是「刚发布的新包」与「未被信任的来源」,装任何新插件都会撞墙,不是
1762
1789
  * 插件问题(dsh-plugin-hub#15/#16:用户装官方 dsh-plugin 也被这两类策略拦下并误归插件侧失败)
1763
- * → 提示在 pnpm 配置里豁免该策略(如 `minimumReleaseAge: 0`)或等发布冷却后重试,不引导提 Issue
1790
+ * → 提示按子场景给解法(发布未满 24 小时 → `minimumReleaseAge: 0` 豁免或等满 24 小时;untrusted
1791
+ * origin → 删除 profile 的 node_modules + pnpm-lock.yaml 清掉不受信任来源后重装),不引导提 Issue
1764
1792
  * - network:安装前连通性预检拦截(服务端 `[network]` 标记)或底层连接失败
1765
1793
  * (ERR_PNPM_GIT_FETCH_FAILED / ETIMEDOUT / DNS 解析 / TLS 握手 / 代理拒绝)——
1766
1794
  * 是本机网络不通/被墙/代理有问题,不是插件问题 → 提示检查网络,不引导提 Issue
@@ -1775,6 +1803,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1775
1803
  function classifyFailure(message) {
1776
1804
  if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
1777
1805
  if (/\[pnpm-missing\]|pnpm not found|pnpm: command not found|spawn pnpm ENOENT|'pnpm' 不是内部或外部命令|"pnpm" 不是内部或外部命令|pnpm['"]?\s*is not recognized/i.test(message)) return "pnpmMissing";
1806
+ if (/\[git-missing\]|spawn git ENOENT|'git' 不是内部或外部命令|"git" 不是内部或外部命令|git['"]?\s*is not recognized|git: command not found/i.test(message)) return "gitMissing";
1807
+ if (/\[npm-missing\]|spawn npm ENOENT|'npm' 不是内部或外部命令|"npm" 不是内部或外部命令|npm['"]?\s*is not recognized|npm: command not found/i.test(message)) return "npmMissing";
1778
1808
  if (/\[dsh-missing\]|不是内部或外部命令|is not recognized as an internal or external command|command not found|spawn dsh ENOENT/i.test(message)) return "dshMissing";
1779
1809
  if (/ERR_PNPM_UNEXPECTED_STORE|Unexpected store location/i.test(message)) return "pnpmStore";
1780
1810
  if (/ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|Minimum release age|untrusted origin/i.test(message)) return "pnpmPolicy";
@@ -1849,20 +1879,25 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1849
1879
  function langPathOf(lang) {
1850
1880
  return lang === "zh" ? "zh/" : "";
1851
1881
  }
1882
+ /** 官网链接统一携带 `?ref=hub` 来源参数:统计有多少访问是从插件商城跳转而来。
1883
+ * 所有「从商城跳官网」的链接(详情页/首页)都应经由此函数拼接,避免来源参数散落各处。 */
1884
+ function siteUrl(path) {
1885
+ return `${SITE_URL}${path}?ref=hub`;
1886
+ }
1852
1887
  /**
1853
1888
  * 官网详情页两级路径:/plugins/{ownerSlug}/{slug};
1854
1889
  * 缺 ownerSlug 时从 repo 推导(卡片详情按钮与弹窗来源行共用)。
1855
1890
  */
1856
1891
  function pluginDetailUrl(plugin, langPath) {
1857
1892
  const repo = plugin.source?.repo ?? "";
1858
- return `${SITE_URL}${langPath}plugins/${plugin.ownerSlug ?? repo.split("/")[0]?.toLowerCase() ?? ""}/${plugin.slug}`;
1893
+ return siteUrl(`${langPath}plugins/${plugin.ownerSlug ?? repo.split("/")[0]?.toLowerCase() ?? ""}/${plugin.slug}`);
1859
1894
  }
1860
1895
  /**
1861
1896
  * 失败弹窗里仓库地址的跳转目标:官网详情页(含插件收录信息),
1862
1897
  * 与 issue 正文的 Catalog 链接同一形式(单级 /plugins/{repo})。
1863
1898
  */
1864
1899
  function pluginSiteUrl(repo) {
1865
- return `${SITE_URL}plugins/${repo}`;
1900
+ return siteUrl(`plugins/${repo}`);
1866
1901
  }
1867
1902
  /** 按失败类型给出简洁的错误原因标题(对外用英文):
1868
1903
  * 标题直接点明问题出在哪一侧(构建白名单/分发物/本机 npm/网络/插件侧),
@@ -1900,8 +1935,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1900
1935
  `- Cause: ${reason}`,
1901
1936
  ...code ? [`- Key error: \`${code}\``] : [],
1902
1937
  "",
1903
- `## [DSH Plugin 插件中心](${SITE_URL}) · 安装 Plugin 失败错误信息`,
1904
- `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件中心的安装程序自动生成,随本次安装失败一并提交。`,
1938
+ `## [DSH Plugin 插件市场](${SITE_URL}) · 安装 Plugin 失败错误信息`,
1939
+ `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件市场的安装程序自动生成,随本次安装失败一并提交。`,
1905
1940
  `- 实际执行的安装命令:\`${command ?? `dsh plugin${env?.profile ? ` --profile ${env.profile}` : ""} add git+https://github.com/${repo}.git`}\``,
1906
1941
  `- 执行结果:安装失败,未能安装该插件。`,
1907
1942
  ...attempts && attempts.length > 0 ? [
@@ -1963,15 +1998,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1963
1998
  * Website: https://dsh-plugin.org
1964
1999
  * GitHub: https://github.com/dshplugin/dsh-plugin-hub
1965
2000
  *
1966
- * Language state for the section: follows the host (system) locale by
1967
- * default, with an optional manual toggle that wins until the user changes
1968
- * it back. Exposes the localized dictionary lookup `t()` plus the zh/en
1969
- * language flag and the /zh/ URL path prefix.
2001
+ * Language state for the section: the Hub shares the host (system) locale —
2002
+ * the header language toggle writes the host locale preference via setLocale,
2003
+ * so the host chrome (left sidebar, settings dialog) and the Hub panel switch
2004
+ * together instead of drifting apart. Exposes the localized dictionary lookup
2005
+ * `t()` plus the zh/en language flag and the /zh/ URL path prefix.
1970
2006
  */
1971
2007
  function useLanguage(locale) {
1972
- /** 界面语言:默认跟随宿主(系统)语言;右上角按钮可手动切换,切换后以手动选择为准 */
1973
- const [manualLang, setManualLang] = (0, react.useState)(null);
1974
- const lang = manualLang ?? locale.getSnapshot().active;
2008
+ const [, setRev] = (0, react.useState)(0);
2009
+ (0, react.useEffect)(() => locale.subscribe(() => setRev((r) => r + 1)), [locale]);
2010
+ const lang = locale.getSnapshot().active;
1975
2011
  const langKey = lang === "en" ? "en" : "zh";
1976
2012
  const langPath = langPathOf(lang);
1977
2013
  const dict = langKey === "en" ? en : zh;
@@ -1984,7 +2020,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1984
2020
  langKey,
1985
2021
  langPath,
1986
2022
  t,
1987
- toggleLang: () => setManualLang(lang === "en" ? "zh" : "en")
2023
+ toggleLang: () => locale.setLocale(lang === "en" ? "zh" : "en")
1988
2024
  };
1989
2025
  }
1990
2026
  //#endregion
@@ -2796,7 +2832,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2796
2832
  strokeLinejoin: "round"
2797
2833
  }));
2798
2834
  }
2799
- /** 插件中心图标:店面货架(stroke 继承 currentColor),一级导航「插件中心」tab 用。 */
2835
+ /** 插件市场图标:店面货架(stroke 继承 currentColor),一级导航「插件市场」tab 用。 */
2800
2836
  function MarketIcon() {
2801
2837
  return (0, react.createElement)("svg", {
2802
2838
  viewBox: "0 0 24 24",
@@ -3274,7 +3310,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3274
3310
  }, repo) : null, (0, react.createElement)("button", {
3275
3311
  className: Modal_module_css_default.errorCopySoft,
3276
3312
  onClick: () => onCopy(copyText)
3277
- }, 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 === "dshMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint")) : failureKind === "pnpmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint")) : failureKind === "pnpmStore" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint")) : failureKind === "pnpmPolicy" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmPolicyHint")) : failureKind === "network" ? (0, react.createElement)("div", null, [
3313
+ }, 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 === "dshMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint")) : failureKind === "gitMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failGitMissingHint")) : failureKind === "pnpmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint")) : failureKind === "npmMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint")) : failureKind === "pnpmStore" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint")) : failureKind === "pnpmPolicy" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmPolicyHint")) : failureKind === "network" ? (0, react.createElement)("div", null, [
3278
3314
  (() => {
3279
3315
  const target = unreachableTargetOf(message);
3280
3316
  return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
@@ -3303,7 +3339,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3303
3339
  }
3304
3340
  /** 全局反馈 Toast:复制成功(反色)/ 安装完成(反色)/ 安装失败(红色)/ 卸载结果 */
3305
3341
  function Toast({ toast, t }) {
3306
- const text = toast.kind === "copied" ? t("toastCopied") : toast.kind === "errCopied" ? t("errCopied") : toast.kind === "done" ? t("installDone") : toast.kind === "fail" ? t("installFail") : toast.kind === "removed" ? t("uninstallDone") : toast.kind === "revealFail" ? t("openFolderFail") : toast.kind === "updates" ? t("updatesFound", { n: toast.n ?? 0 }) : t("uninstallFail");
3342
+ const text = toast.kind === "copied" ? t("toastCopied") : toast.kind === "errCopied" ? t("errCopied") : toast.kind === "done" ? t("installDone") : toast.kind === "fail" ? t("installFail") : toast.kind === "removed" ? t("uninstallDone") : toast.kind === "revealFail" ? t("openFolderFail") : t("uninstallFail");
3307
3343
  const fail = toast.kind === "fail" || toast.kind === "removeFail" || toast.kind === "revealFail";
3308
3344
  return (0, react.createElement)("div", {
3309
3345
  key: toast.id,
@@ -3826,7 +3862,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3826
3862
  return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(v ? "failNpmTooLowV" : "failNpmTooLow", v ? { v } : void 0));
3827
3863
  }
3828
3864
  if (kind === "dshMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint"));
3865
+ if (kind === "gitMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failGitMissingHint"));
3829
3866
  if (kind === "pnpmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint"));
3867
+ if (kind === "npmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint"));
3830
3868
  if (kind === "pnpmStore") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint"));
3831
3869
  if (kind === "pnpmPolicy") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmPolicyHint"));
3832
3870
  if (kind === "network") return (0, react.createElement)("div", null, [
@@ -3901,7 +3939,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3901
3939
  function CatalogHeader({ t, langPath, statsTotal, statsVerified, onToggleLang, hubUpdate, onVersionClick, onAboutClick }) {
3902
3940
  return (0, react.createElement)(react.Fragment, null, (0, react.createElement)("div", { className: Header_module_css_default.header }, (0, react.createElement)("div", { className: Header_module_css_default.headerTitleRow }, (0, react.createElement)("a", {
3903
3941
  className: Header_module_css_default.brandTitle,
3904
- href: `${SITE_URL}${langPath}`,
3942
+ href: siteUrl(langPath),
3905
3943
  target: "_blank",
3906
3944
  rel: "noopener noreferrer",
3907
3945
  title: t("openHint"),
@@ -3933,7 +3971,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3933
3971
  "aria-label": t("githubHint")
3934
3972
  }, (0, react.createElement)(GitHubIcon)))), (0, react.createElement)("a", {
3935
3973
  className: Header_module_css_default.taglineLink,
3936
- href: `${SITE_URL}${langPath}`,
3974
+ href: siteUrl(langPath),
3937
3975
  target: "_blank",
3938
3976
  rel: "noopener noreferrer",
3939
3977
  title: t("openHint")
@@ -3942,7 +3980,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3942
3980
  verified: statsVerified
3943
3981
  })))), (0, react.createElement)("a", {
3944
3982
  className: Header_module_css_default.adBanner,
3945
- href: `${SITE_URL}${langPath}`,
3983
+ href: siteUrl(langPath),
3946
3984
  target: "_blank",
3947
3985
  rel: "noopener noreferrer"
3948
3986
  }, (0, react.createElement)("span", { className: Header_module_css_default.adBadge }, t("adBadge")), (0, react.createElement)("span", { className: Header_module_css_default.adText }, t("ad", {
@@ -4034,40 +4072,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4034
4072
  css: css$9
4035
4073
  });
4036
4074
  var List_module_css_default = {
4037
- "verified": "_3XaZHa_verified",
4038
- "retryBtn": "_3XaZHa_retryBtn",
4039
- "stateActions": "_3XaZHa_stateActions",
4040
- "versionBadge": "_3XaZHa_versionBadge",
4041
- "diagBtn": "_3XaZHa_diagBtn",
4042
- "topic": "_3XaZHa_topic",
4043
- "stats": "_3XaZHa_stats",
4044
4075
  "card": "_3XaZHa_card",
4045
- "fork": "_3XaZHa_fork",
4046
- "detailBtn": "_3XaZHa_detailBtn",
4047
- "list": "_3XaZHa_list",
4076
+ "verified": "_3XaZHa_verified",
4048
4077
  "footer": "_3XaZHa_footer",
4049
- "body": "_3XaZHa_body",
4050
- "star": "_3XaZHa_star",
4051
- "uninstallBtn": "_3XaZHa_uninstallBtn",
4078
+ "topics": "_3XaZHa_topics",
4079
+ "fork": "_3XaZHa_fork",
4080
+ "cardMain": "_3XaZHa_cardMain",
4081
+ "moreSentinel": "_3XaZHa_moreSentinel",
4052
4082
  "footLink": "_3XaZHa_footLink",
4083
+ "stateTitle": "_3XaZHa_stateTitle",
4084
+ "stateActions": "_3XaZHa_stateActions",
4085
+ "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4053
4086
  "cardSide": "_3XaZHa_cardSide",
4054
- "state": "_3XaZHa_state",
4055
- "installBtn": "_3XaZHa_installBtn",
4056
- "topics": "_3XaZHa_topics",
4057
4087
  "date": "_3XaZHa_date",
4058
- "updateBadge": "_3XaZHa_updateBadge",
4059
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4088
+ "body": "_3XaZHa_body",
4089
+ "retryBtn": "_3XaZHa_retryBtn",
4090
+ "topic": "_3XaZHa_topic",
4091
+ "cardHead": "_3XaZHa_cardHead",
4092
+ "cardTitle": "_3XaZHa_cardTitle",
4093
+ "stats": "_3XaZHa_stats",
4094
+ "versionBadge": "_3XaZHa_versionBadge",
4060
4095
  "categoryBadge": "_3XaZHa_categoryBadge",
4096
+ "star": "_3XaZHa_star",
4061
4097
  "installBtnCopied": "_3XaZHa_installBtnCopied",
4062
- "stateDesc": "_3XaZHa_stateDesc",
4063
- "moreSentinel": "_3XaZHa_moreSentinel",
4064
- "cardHead": "_3XaZHa_cardHead",
4065
- "cardMain": "_3XaZHa_cardMain",
4098
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4099
+ "diagBtn": "_3XaZHa_diagBtn",
4100
+ "installBtn": "_3XaZHa_installBtn",
4101
+ "list": "_3XaZHa_list",
4102
+ "updateBadge": "_3XaZHa_updateBadge",
4066
4103
  "actions": "_3XaZHa_actions",
4067
- "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4068
- "stateTitle": "_3XaZHa_stateTitle",
4069
- "desc": "_3XaZHa_desc",
4070
- "cardTitle": "_3XaZHa_cardTitle"
4104
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
4105
+ "state": "_3XaZHa_state",
4106
+ "stateDesc": "_3XaZHa_stateDesc",
4107
+ "detailBtn": "_3XaZHa_detailBtn",
4108
+ "desc": "_3XaZHa_desc"
4071
4109
  };
4072
4110
  //#endregion
4073
4111
  //#region src/client/hooks/useIncrementalList.ts
@@ -4078,7 +4116,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4078
4116
  *
4079
4117
  * Incremental list: renders only the first batch of a (potentially huge)
4080
4118
  * result set and appends the next batch whenever the end sentinel scrolls
4081
- * into view, so the plugin center never mounts thousands of cards at once.
4119
+ * into view, so the plugin market never mounts thousands of cards at once.
4082
4120
  * The items reference is the list identity — category / search / sort
4083
4121
  * changes produce a new array, which resets the window to the first batch.
4084
4122
  */
@@ -4205,7 +4243,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4205
4243
  "aria-hidden": "true"
4206
4244
  })), plugins !== null && !failed && (0, react.createElement)("div", { className: List_module_css_default.footer }, (0, react.createElement)("a", {
4207
4245
  className: List_module_css_default.footLink,
4208
- href: `https://dsh-plugin.org/${langPath}`,
4246
+ href: siteUrl(langPath),
4209
4247
  target: "_blank",
4210
4248
  rel: "noopener noreferrer"
4211
4249
  }, t("browseAll", { n: total }))));
@@ -4274,15 +4312,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4274
4312
  css: css$8
4275
4313
  });
4276
4314
  var SectionTabs_module_css_default = {
4277
- "tab": "_7tvizq_tab",
4278
- "noticeIcon": "_7tvizq_noticeIcon",
4279
- "noticeCount": "_7tvizq_noticeCount",
4280
4315
  "tabCountActive": "_7tvizq_tabCountActive",
4281
4316
  "noticeBtn": "_7tvizq_noticeBtn",
4317
+ "noticeCount": "_7tvizq_noticeCount",
4282
4318
  "tabCount": "_7tvizq_tabCount",
4319
+ "root": "_7tvizq_root",
4283
4320
  "tabActive": "_7tvizq_tabActive",
4284
4321
  "tabIcon": "_7tvizq_tabIcon",
4285
- "root": "_7tvizq_root"
4322
+ "noticeIcon": "_7tvizq_noticeIcon",
4323
+ "tab": "_7tvizq_tab"
4286
4324
  };
4287
4325
  //#endregion
4288
4326
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4359,42 +4397,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4359
4397
  css: css$7
4360
4398
  });
4361
4399
  var InstalledView_module_css_default = {
4362
- "toolbar": "_1nXeGW_toolbar",
4363
- "versionBadge": "_1nXeGW_versionBadge",
4364
- "exampleBadge": "_1nXeGW_exampleBadge",
4365
- "rowCategory": "_1nXeGW_rowCategory",
4366
- "rowActions": "_1nXeGW_rowActions",
4367
- "searchInput": "_1nXeGW_searchInput",
4368
- "statusPending": "_1nXeGW_statusPending",
4369
- "rowTitleLine": "_1nXeGW_rowTitleLine",
4370
- "list": "_1nXeGW_list",
4371
- "empty": "_1nXeGW_empty",
4372
- "rowDesc": "_1nXeGW_rowDesc",
4373
4400
  "segGroup": "_1nXeGW_segGroup",
4374
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4375
- "rowMeta": "_1nXeGW_rowMeta",
4376
- "rowUninstall": "_1nXeGW_rowUninstall",
4401
+ "emptyDesc": "_1nXeGW_emptyDesc",
4402
+ "row": "_1nXeGW_row",
4403
+ "rowDesc": "_1nXeGW_rowDesc",
4404
+ "searchInput": "_1nXeGW_searchInput",
4405
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
4377
4406
  "rowRepo": "_1nXeGW_rowRepo",
4407
+ "exampleBadge": "_1nXeGW_exampleBadge",
4378
4408
  "segBtn": "_1nXeGW_segBtn",
4379
- "rowTitle": "_1nXeGW_rowTitle",
4380
- "rowUpdate": "_1nXeGW_rowUpdate",
4381
- "rowDetail": "_1nXeGW_rowDetail",
4382
- "row": "_1nXeGW_row",
4409
+ "statusPending": "_1nXeGW_statusPending",
4410
+ "root": "_1nXeGW_root",
4411
+ "versionBadge": "_1nXeGW_versionBadge",
4412
+ "toolbar": "_1nXeGW_toolbar",
4413
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4414
+ "segRow": "_1nXeGW_segRow",
4415
+ "empty": "_1nXeGW_empty",
4383
4416
  "rowMain": "_1nXeGW_rowMain",
4384
- "rowRestart": "_1nXeGW_rowRestart",
4385
4417
  "emptyTitle": "_1nXeGW_emptyTitle",
4386
- "updateBadge": "_1nXeGW_updateBadge",
4418
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4387
4419
  "segLabel": "_1nXeGW_segLabel",
4388
- "segRow": "_1nXeGW_segRow",
4389
- "segBtnActive": "_1nXeGW_segBtnActive",
4390
- "root": "_1nXeGW_root",
4420
+ "statusDot": "_1nXeGW_statusDot",
4421
+ "rowMeta": "_1nXeGW_rowMeta",
4422
+ "updateBadge": "_1nXeGW_updateBadge",
4423
+ "rowRestart": "_1nXeGW_rowRestart",
4424
+ "rowActions": "_1nXeGW_rowActions",
4425
+ "searchWrap": "_1nXeGW_searchWrap",
4391
4426
  "exampleRow": "_1nXeGW_exampleRow",
4427
+ "rowDetail": "_1nXeGW_rowDetail",
4392
4428
  "statusInactive": "_1nXeGW_statusInactive",
4393
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4394
- "emptyDesc": "_1nXeGW_emptyDesc",
4395
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4396
- "searchWrap": "_1nXeGW_searchWrap",
4397
- "statusDot": "_1nXeGW_statusDot"
4429
+ "rowTitle": "_1nXeGW_rowTitle",
4430
+ "segBtnActive": "_1nXeGW_segBtnActive",
4431
+ "list": "_1nXeGW_list",
4432
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
4433
+ "rowUninstall": "_1nXeGW_rowUninstall",
4434
+ "rowUpdate": "_1nXeGW_rowUpdate",
4435
+ "rowCategory": "_1nXeGW_rowCategory"
4398
4436
  };
4399
4437
  //#endregion
4400
4438
  //#region src/client/components/views/InstalledView.tsx
@@ -4640,28 +4678,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4640
4678
  css: css$6
4641
4679
  });
4642
4680
  var CustomInstallView_module_css_default = {
4643
- "channelOffText": "zISxCG_channelOffText",
4644
- "installHelpBtn": "zISxCG_installHelpBtn",
4645
- "installBtn": "zISxCG_installBtn",
4646
- "installInput": "zISxCG_installInput",
4647
4681
  "installCardHead": "zISxCG_installCardHead",
4648
- "installError": "zISxCG_installError",
4649
4682
  "installCards": "zISxCG_installCards",
4650
- "desc": "zISxCG_desc",
4651
- "installCard": "zISxCG_installCard",
4652
- "channelOff": "zISxCG_channelOff",
4653
- "helpLine": "zISxCG_helpLine",
4683
+ "helpBody": "zISxCG_helpBody",
4654
4684
  "installExample": "zISxCG_installExample",
4685
+ "helpLine": "zISxCG_helpLine",
4686
+ "installRow": "zISxCG_installRow",
4687
+ "channelOff": "zISxCG_channelOff",
4688
+ "installHelpBtn": "zISxCG_installHelpBtn",
4689
+ "installError": "zISxCG_installError",
4690
+ "installCardDisabled": "zISxCG_installCardDisabled",
4691
+ "installInput": "zISxCG_installInput",
4692
+ "desc": "zISxCG_desc",
4693
+ "helpCmd": "zISxCG_helpCmd",
4655
4694
  "helpNote": "zISxCG_helpNote",
4695
+ "channelOffBtn": "zISxCG_channelOffBtn",
4656
4696
  "installInputError": "zISxCG_installInputError",
4657
4697
  "root": "zISxCG_root",
4658
- "installCardDisabled": "zISxCG_installCardDisabled",
4698
+ "installBtn": "zISxCG_installBtn",
4699
+ "installCard": "zISxCG_installCard",
4659
4700
  "installLabel": "zISxCG_installLabel",
4660
- "helpBody": "zISxCG_helpBody",
4661
4701
  "installInsertBtn": "zISxCG_installInsertBtn",
4662
- "installRow": "zISxCG_installRow",
4663
- "helpCmd": "zISxCG_helpCmd",
4664
- "channelOffBtn": "zISxCG_channelOffBtn"
4702
+ "channelOffText": "zISxCG_channelOffText"
4665
4703
  };
4666
4704
  //#endregion
4667
4705
  //#region src/client/components/views/CustomInstallView.tsx
@@ -4951,30 +4989,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4951
4989
  css: css$5
4952
4990
  });
4953
4991
  var SettingsView_module_css_default = {
4954
- "navItemActive": "_506LLG_navItemActive",
4955
- "settingControlStack": "_506LLG_settingControlStack",
4956
- "pageHeader": "_506LLG_pageHeader",
4957
4992
  "proxyControl": "_506LLG_proxyControl",
4958
- "navItem": "_506LLG_navItem",
4993
+ "resetBtn": "_506LLG_resetBtn",
4994
+ "root": "_506LLG_root",
4959
4995
  "settingRowStack": "_506LLG_settingRowStack",
4996
+ "settingTitle": "_506LLG_settingTitle",
4997
+ "textInput": "_506LLG_textInput",
4998
+ "sidebar": "_506LLG_sidebar",
4999
+ "proxyHintFail": "_506LLG_proxyHintFail",
4960
5000
  "controlDropdown": "_506LLG_controlDropdown",
4961
- "settingRow": "_506LLG_settingRow",
4962
- "resetBtn": "_506LLG_resetBtn",
4963
- "proxyHint": "_506LLG_proxyHint",
5001
+ "navItem": "_506LLG_navItem",
4964
5002
  "proxyHintOk": "_506LLG_proxyHintOk",
4965
- "settingControl": "_506LLG_settingControl",
5003
+ "pageDesc": "_506LLG_pageDesc",
5004
+ "proxyHint": "_506LLG_proxyHint",
5005
+ "pageHeader": "_506LLG_pageHeader",
5006
+ "navItemActive": "_506LLG_navItemActive",
4966
5007
  "card": "_506LLG_card",
4967
- "settingTitle": "_506LLG_settingTitle",
4968
- "settingDesc": "_506LLG_settingDesc",
4969
- "root": "_506LLG_root",
5008
+ "settingRow": "_506LLG_settingRow",
4970
5009
  "navIcon": "_506LLG_navIcon",
4971
5010
  "settingLabel": "_506LLG_settingLabel",
4972
- "sidebar": "_506LLG_sidebar",
4973
5011
  "content": "_506LLG_content",
4974
5012
  "pageTitle": "_506LLG_pageTitle",
4975
- "pageDesc": "_506LLG_pageDesc",
4976
- "textInput": "_506LLG_textInput",
4977
- "proxyHintFail": "_506LLG_proxyHintFail"
5013
+ "settingDesc": "_506LLG_settingDesc",
5014
+ "settingControl": "_506LLG_settingControl",
5015
+ "settingControlStack": "_506LLG_settingControlStack"
4978
5016
  };
4979
5017
  //#endregion
4980
5018
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -4993,18 +5031,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4993
5031
  css: css$4
4994
5032
  });
4995
5033
  var Dropdown_module_css_default = {
4996
- "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4997
- "dropdownCount": "B_Gxsq_dropdownCount",
4998
- "dropdownPanel": "B_Gxsq_dropdownPanel",
4999
- "dropdownBtn": "B_Gxsq_dropdownBtn",
5000
- "dropdownItem": "B_Gxsq_dropdownItem",
5001
- "dropdownArrow": "B_Gxsq_dropdownArrow",
5002
- "dropdownLabel": "B_Gxsq_dropdownLabel",
5003
- "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5004
5034
  "dropdown": "B_Gxsq_dropdown",
5035
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5005
5036
  "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
5037
+ "dropdownBtn": "B_Gxsq_dropdownBtn",
5038
+ "dropdownFill": "B_Gxsq_dropdownFill",
5039
+ "dropdownArrow": "B_Gxsq_dropdownArrow",
5040
+ "dropdownCount": "B_Gxsq_dropdownCount",
5041
+ "dropdownPanel": "B_Gxsq_dropdownPanel",
5006
5042
  "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5007
- "dropdownFill": "B_Gxsq_dropdownFill"
5043
+ "dropdownCountActive": "B_Gxsq_dropdownCountActive",
5044
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
5045
+ "dropdownItem": "B_Gxsq_dropdownItem"
5008
5046
  };
5009
5047
  //#endregion
5010
5048
  //#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
@@ -5024,8 +5062,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5024
5062
  });
5025
5063
  var Toggle_module_css_default = {
5026
5064
  "knob": "k-cD4G_knob",
5027
- "toggle": "k-cD4G_toggle",
5028
- "toggleOn": "k-cD4G_toggleOn"
5065
+ "toggleOn": "k-cD4G_toggleOn",
5066
+ "toggle": "k-cD4G_toggle"
5029
5067
  };
5030
5068
  //#endregion
5031
5069
  //#region src/client/components/ui/Toggle.tsx
@@ -5125,29 +5163,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5125
5163
  css: css$2
5126
5164
  });
5127
5165
  var DiagnosticsView_module_css_default = {
5128
- "display": "k9eRya_display",
5129
- "envCopyBtn": "k9eRya_envCopyBtn",
5130
5166
  "summaryRunning": "k9eRya_summaryRunning",
5131
- "meta": "k9eRya_meta",
5167
+ "badgeRunning": "k9eRya_badgeRunning",
5132
5168
  "envLabel": "k9eRya_envLabel",
5169
+ "envCopyBtn": "k9eRya_envCopyBtn",
5170
+ "badgeFail": "k9eRya_badgeFail",
5171
+ "badgeOk": "k9eRya_badgeOk",
5172
+ "runBtn": "k9eRya_runBtn",
5173
+ "display": "k9eRya_display",
5133
5174
  "name": "k9eRya_name",
5175
+ "envRow": "k9eRya_envRow",
5176
+ "head": "k9eRya_head",
5177
+ "meta": "k9eRya_meta",
5134
5178
  "badge": "k9eRya_badge",
5135
- "badgeIdle": "k9eRya_badgeIdle",
5136
5179
  "panel": "k9eRya_panel",
5137
- "badgeRunning": "k9eRya_badgeRunning",
5138
- "runBtn": "k9eRya_runBtn",
5139
- "row": "k9eRya_row",
5180
+ "diagPulse": "k9eRya_diagPulse",
5181
+ "envDesc": "k9eRya_envDesc",
5182
+ "badgeIdle": "k9eRya_badgeIdle",
5183
+ "headHint": "k9eRya_headHint",
5140
5184
  "summaryOk": "k9eRya_summaryOk",
5185
+ "row": "k9eRya_row",
5141
5186
  "envTitle": "k9eRya_envTitle",
5142
- "summaryFail": "k9eRya_summaryFail",
5143
- "diagPulse": "k9eRya_diagPulse",
5144
5187
  "summary": "k9eRya_summary",
5145
- "head": "k9eRya_head",
5146
- "badgeOk": "k9eRya_badgeOk",
5147
- "headHint": "k9eRya_headHint",
5148
- "envDesc": "k9eRya_envDesc",
5149
- "badgeFail": "k9eRya_badgeFail",
5150
- "envRow": "k9eRya_envRow"
5188
+ "summaryFail": "k9eRya_summaryFail"
5151
5189
  };
5152
5190
  //#endregion
5153
5191
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5185,7 +5223,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5185
5223
  },
5186
5224
  {
5187
5225
  key: "github",
5188
- display: "github.com/dshplugin/hello-dsh",
5226
+ display: "github.com",
5189
5227
  nameKey: "diagGithub",
5190
5228
  status: "idle",
5191
5229
  ms: null,
@@ -5193,7 +5231,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5193
5231
  },
5194
5232
  {
5195
5233
  key: "catalog",
5196
- display: "api.dsh-plugin.org",
5234
+ display: "",
5197
5235
  nameKey: "diagCatalog",
5198
5236
  status: "idle",
5199
5237
  ms: null,
@@ -5302,7 +5340,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5302
5340
  disabled: r.status === "running",
5303
5341
  onClick: () => run(r.key),
5304
5342
  title: t("diagRecheck")
5305
- }, (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.name }, t(r.nameKey)), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.display }, r.display !== "" ? r.display : t("diagNpmUnset")), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.meta }, r.status === "ok" && r.ms !== null ? `${r.ms} ms` : ""), badge);
5343
+ }, (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.name }, t(r.nameKey)), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.display }, r.key === "catalog" ? t("diagCatalogTarget") : r.display !== "" ? r.display : t("diagNpmUnset")), (0, react.createElement)("span", { className: DiagnosticsView_module_css_default.meta }, r.status === "ok" && r.ms !== null ? `${r.ms} ms` : ""), badge);
5306
5344
  }), (0, react.createElement)("div", { className: `${DiagnosticsView_module_css_default.summary} ${anyRunning ? DiagnosticsView_module_css_default.summaryRunning : allOk ? DiagnosticsView_module_css_default.summaryOk : DiagnosticsView_module_css_default.summaryFail}` }, anyRunning ? t("diagSummaryRunning") : allOk ? t("diagSummaryOk") : t("diagSummaryFail")));
5307
5345
  }
5308
5346
  //#endregion
@@ -5322,57 +5360,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5322
5360
  css: css$1
5323
5361
  });
5324
5362
  var LogsView_module_css_default = {
5325
- "badge": "_3j77BW_badge",
5326
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
5327
- "pathDialogRow": "_3j77BW_pathDialogRow",
5328
- "badgeInfo": "_3j77BW_badgeInfo",
5329
- "catUninstall": "_3j77BW_catUninstall",
5330
- "actions": "_3j77BW_actions",
5331
- "message": "_3j77BW_message",
5332
- "pathDialogFoot": "_3j77BW_pathDialogFoot",
5333
- "search": "_3j77BW_search",
5363
+ "pathDraft": "_3j77BW_pathDraft",
5364
+ "clearBtn": "_3j77BW_clearBtn",
5334
5365
  "list": "_3j77BW_list",
5335
- "pathDialog": "_3j77BW_pathDialog",
5336
- "moreEnd": "_3j77BW_moreEnd",
5337
- "headActions": "_3j77BW_headActions",
5338
- "catBadge": "_3j77BW_catBadge",
5366
+ "linkBtn": "_3j77BW_linkBtn",
5367
+ "head": "_3j77BW_head",
5368
+ "logList": "_3j77BW_logList",
5369
+ "filterBar": "_3j77BW_filterBar",
5370
+ "more": "_3j77BW_more",
5371
+ "filterChip": "_3j77BW_filterChip",
5372
+ "badgeSuccess": "_3j77BW_badgeSuccess",
5373
+ "catSystem": "_3j77BW_catSystem",
5374
+ "catInstall": "_3j77BW_catInstall",
5375
+ "searchInput": "_3j77BW_searchInput",
5376
+ "badgeDebug": "_3j77BW_badgeDebug",
5377
+ "search": "_3j77BW_search",
5378
+ "footFail": "_3j77BW_footFail",
5339
5379
  "foot": "_3j77BW_foot",
5340
- "footPath": "_3j77BW_footPath",
5380
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5381
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5382
+ "badgeInfo": "_3j77BW_badgeInfo",
5341
5383
  "pathText": "_3j77BW_pathText",
5342
5384
  "catUpdate": "_3j77BW_catUpdate",
5385
+ "panel": "_3j77BW_panel",
5386
+ "time": "_3j77BW_time",
5387
+ "pathDialog": "_3j77BW_pathDialog",
5388
+ "pathRow": "_3j77BW_pathRow",
5389
+ "filterChipActive": "_3j77BW_filterChipActive",
5390
+ "entry": "_3j77BW_entry",
5391
+ "catUninstall": "_3j77BW_catUninstall",
5343
5392
  "catSettings": "_3j77BW_catSettings",
5344
- "empty": "_3j77BW_empty",
5345
- "filterBar": "_3j77BW_filterBar",
5346
- "catSystem": "_3j77BW_catSystem",
5347
- "pathDialogHint": "_3j77BW_pathDialogHint",
5348
5393
  "pathLabel": "_3j77BW_pathLabel",
5349
- "pathDraft": "_3j77BW_pathDraft",
5394
+ "actions": "_3j77BW_actions",
5395
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5396
+ "badgeError": "_3j77BW_badgeError",
5397
+ "empty": "_3j77BW_empty",
5398
+ "catBadge": "_3j77BW_catBadge",
5350
5399
  "footActions": "_3j77BW_footActions",
5351
- "badgeDebug": "_3j77BW_badgeDebug",
5400
+ "btn": "_3j77BW_btn",
5401
+ "headHint": "_3j77BW_headHint",
5402
+ "footPath": "_3j77BW_footPath",
5403
+ "moreEnd": "_3j77BW_moreEnd",
5404
+ "headActions": "_3j77BW_headActions",
5405
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5406
+ "footCount": "_3j77BW_footCount",
5407
+ "badge": "_3j77BW_badge",
5352
5408
  "event": "_3j77BW_event",
5353
- "badgeSuccess": "_3j77BW_badgeSuccess",
5354
- "entry": "_3j77BW_entry",
5355
- "clearBtn": "_3j77BW_clearBtn",
5356
- "badgeWarn": "_3j77BW_badgeWarn",
5357
- "filterChipActive": "_3j77BW_filterChipActive",
5409
+ "pathDialogHint": "_3j77BW_pathDialogHint",
5410
+ "message": "_3j77BW_message",
5358
5411
  "catDiagnostics": "_3j77BW_catDiagnostics",
5359
- "footFail": "_3j77BW_footFail",
5360
5412
  "previewRow": "_3j77BW_previewRow",
5361
- "btn": "_3j77BW_btn",
5362
- "logList": "_3j77BW_logList",
5363
- "catInstall": "_3j77BW_catInstall",
5364
- "filterChip": "_3j77BW_filterChip",
5365
- "head": "_3j77BW_head",
5366
- "pathRow": "_3j77BW_pathRow",
5367
- "pathDialogReset": "_3j77BW_pathDialogReset",
5368
- "panel": "_3j77BW_panel",
5369
- "more": "_3j77BW_more",
5370
- "footCount": "_3j77BW_footCount",
5371
- "time": "_3j77BW_time",
5372
- "badgeError": "_3j77BW_badgeError",
5373
- "linkBtn": "_3j77BW_linkBtn",
5374
- "headHint": "_3j77BW_headHint",
5375
- "searchInput": "_3j77BW_searchInput"
5413
+ "badgeWarn": "_3j77BW_badgeWarn"
5376
5414
  };
5377
5415
  //#endregion
5378
5416
  //#region src/client/components/modals/LogsModal.tsx
@@ -6189,7 +6227,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6189
6227
  const catalog = useCatalog(lang);
6190
6228
  /** 设置状态:服务端 hub-settings.json 持久化,本地乐观更新即时生效 */
6191
6229
  const { settings: hubSettings, ready: settingsReady, update: updateSettings, reset: resetSettings } = useSettings();
6192
- /** 一级导航:插件中心 / 已安装 / 自定义安装 / 设置 */
6230
+ /** 一级导航:插件市场 / 已安装 / 自定义安装 / 设置 */
6193
6231
  const [view, setView] = (0, react.useState)("market");
6194
6232
  /** 外部跳转设置分组的一次性信号(错误弹窗「去系统诊断」→ 设置 → 系统诊断):
6195
6233
  * 传给 SettingsView 消费后即清空,避免下次进设置被强制带跳 */
@@ -6358,12 +6396,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6358
6396
  if (!settingsReady || catalog.plugins === null || catalog.failed) return;
6359
6397
  startupCheckedRef.current = true;
6360
6398
  if (!hubSettings.checkUpdatesOnStart) return;
6361
- const added = syncUpdateNotices();
6362
- if (added > 0) setToast({
6363
- id: Date.now(),
6364
- kind: "updates",
6365
- n: added
6366
- });
6399
+ syncUpdateNotices();
6367
6400
  }, [
6368
6401
  settingsReady,
6369
6402
  hubSettings,
@@ -6617,7 +6650,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6617
6650
  openSection: settingsSection,
6618
6651
  onConsumedOpenSection: () => setSettingsSection(null)
6619
6652
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6620
- info: catalog.hubUpdateInfo ?? { version: "1.3.11" },
6653
+ info: catalog.hubUpdateInfo ?? { version: "1.4.1" },
6621
6654
  lang,
6622
6655
  t,
6623
6656
  hasUpdate: catalog.hubHasUpdate,