dsh-plugin 1.3.11 → 1.4.0

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 = {
677
- "header": "qikqja_header",
678
- "headerTitleRow": "qikqja_headerTitleRow",
681
+ "githubLink": "qikqja_githubLink",
682
+ "resultCount": "qikqja_resultCount",
683
+ "segLabel": "qikqja_segLabel",
684
+ "logoIcon": "qikqja_logoIcon",
685
+ "tagline": "qikqja_tagline",
686
+ "tab": "qikqja_tab",
679
687
  "search": "qikqja_search",
688
+ "copyIcon": "qikqja_copyIcon",
680
689
  "root": "qikqja_root",
690
+ "githubIcon": "qikqja_githubIcon",
691
+ "controls": "qikqja_controls",
692
+ "sortGroup": "qikqja_sortGroup",
693
+ "header": "qikqja_header",
694
+ "aboutBtn": "qikqja_aboutBtn",
681
695
  "resultSeg": "qikqja_resultSeg",
682
- "adText": "qikqja_adText",
683
- "tabs": "qikqja_tabs",
684
- "tagline": "qikqja_tagline",
685
- "langBtn": "qikqja_langBtn",
696
+ "headerTitleRow": "qikqja_headerTitleRow",
697
+ "segBtnActive": "qikqja_segBtnActive",
686
698
  "searchRow": "qikqja_searchRow",
699
+ "tabs": "qikqja_tabs",
700
+ "adText": "qikqja_adText",
701
+ "adArrow": "qikqja_adArrow",
702
+ "tabActive": "qikqja_tabActive",
687
703
  "segGroup": "qikqja_segGroup",
688
- "tab": "qikqja_tab",
689
- "tabCount": "qikqja_tabCount",
690
- "sortGroup": "qikqja_sortGroup",
691
- "brandTitle": "qikqja_brandTitle",
692
- "githubIcon": "qikqja_githubIcon",
693
- "taglineLink": "qikqja_taglineLink",
694
- "segBtnActive": "qikqja_segBtnActive",
695
- "copyIcon": "qikqja_copyIcon",
696
- "tabsRow": "qikqja_tabsRow",
704
+ "headerRight": "qikqja_headerRight",
705
+ "langBtn": "qikqja_langBtn",
706
+ "version": "qikqja_version",
697
707
  "segBtn": "qikqja_segBtn",
698
- "resultCount": "qikqja_resultCount",
699
708
  "adBadge": "qikqja_adBadge",
700
- "aboutBtn": "qikqja_aboutBtn",
709
+ "tabsRow": "qikqja_tabsRow",
701
710
  "hubUpdateBadge": "qikqja_hubUpdateBadge",
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",
709
- "title": "qikqja_title",
711
+ "taglineLink": "qikqja_taglineLink",
710
712
  "versionBtn": "qikqja_versionBtn",
711
- "headerRight": "qikqja_headerRight",
712
- "controls": "qikqja_controls"
713
+ "tabCount": "qikqja_tabCount",
714
+ "brandTitle": "qikqja_brandTitle",
715
+ "adBanner": "qikqja_adBanner",
716
+ "title": "qikqja_title"
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",
737
- "restartNowWarning": "BiQ1zG_restartNowWarning",
738
- "failCopy": "BiQ1zG_failCopy",
739
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
740
- "failEmpty": "BiQ1zG_failEmpty",
735
+ "confirmIcon": "BiQ1zG_confirmIcon",
736
+ "noticeRemove": "BiQ1zG_noticeRemove",
737
+ "modalTitle": "BiQ1zG_modalTitle",
738
+ "noticeHead": "BiQ1zG_noticeHead",
739
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
740
+ "modalBody": "BiQ1zG_modalBody",
741
+ "resultDesc": "BiQ1zG_resultDesc",
742
+ "noticeFoot": "BiQ1zG_noticeFoot",
743
+ "detailStatusText": "BiQ1zG_detailStatusText",
744
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
745
+ "restartLater": "BiQ1zG_restartLater",
741
746
  "queueRowTarget": "BiQ1zG_queueRowTarget",
742
- "noticeMain": "BiQ1zG_noticeMain",
743
- "toast": "BiQ1zG_toast",
744
- "detailGrid": "BiQ1zG_detailGrid",
745
- "progressTrack": "BiQ1zG_progressTrack",
746
- "noticeTextOk": "BiQ1zG_noticeTextOk",
747
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
748
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
749
+ "progressFill": "BiQ1zG_progressFill",
750
+ "modalHead": "BiQ1zG_modalHead",
751
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
752
+ "detailDim": "BiQ1zG_detailDim",
753
+ "detailLink": "BiQ1zG_detailLink",
754
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
755
+ "modalClose": "BiQ1zG_modalClose",
747
756
  "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
+ "modalCancel": "BiQ1zG_modalCancel",
758
+ "restartNow": "BiQ1zG_restartNow",
757
759
  "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
758
- "logModal": "BiQ1zG_logModal",
759
- "failRow": "BiQ1zG_failRow",
760
- "toastIn": "BiQ1zG_toastIn",
761
- "noticeVersion": "BiQ1zG_noticeVersion",
762
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
760
+ "failCopy": "BiQ1zG_failCopy",
761
+ "modalActions": "BiQ1zG_modalActions",
763
762
  "errorHint": "BiQ1zG_errorHint",
764
- "detailValue": "BiQ1zG_detailValue",
765
- "modalWide": "BiQ1zG_modalWide",
766
- "confirmIcon": "BiQ1zG_confirmIcon",
767
- "failKindInstall": "BiQ1zG_failKindInstall",
763
+ "detailModal": "BiQ1zG_detailModal",
764
+ "progressTrack": "BiQ1zG_progressTrack",
765
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
766
+ "queueRowHead": "BiQ1zG_queueRowHead",
767
+ "queueSectionTitle": "BiQ1zG_queueSectionTitle",
768
+ "modalRow": "BiQ1zG_modalRow",
768
769
  "overlay": "BiQ1zG_overlay",
770
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
771
+ "resultCheck": "BiQ1zG_resultCheck",
772
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
773
+ "restartNowWarning": "BiQ1zG_restartNowWarning",
774
+ "progressText": "BiQ1zG_progressText",
775
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
776
+ "toastIn": "BiQ1zG_toastIn",
777
+ "toast": "BiQ1zG_toast",
778
+ "queueRowPct": "BiQ1zG_queueRowPct",
779
+ "detailValue": "BiQ1zG_detailValue",
780
+ "failList": "BiQ1zG_failList",
781
+ "queueSection": "BiQ1zG_queueSection",
782
+ "modalCmd": "BiQ1zG_modalCmd",
769
783
  "modalCloseIcon": "BiQ1zG_modalCloseIcon",
770
- "progress": "BiQ1zG_progress",
771
- "detailLink": "BiQ1zG_detailLink",
772
- "overlayIn": "BiQ1zG_overlayIn",
773
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
774
- "failBigIssue": "BiQ1zG_failBigIssue",
775
- "aboutModal": "BiQ1zG_aboutModal",
776
- "detailPathBtn": "BiQ1zG_detailPathBtn",
777
784
  "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",
788
- "restartLater": "BiQ1zG_restartLater",
785
+ "queueRow": "BiQ1zG_queueRow",
786
+ "modalCopy": "BiQ1zG_modalCopy",
787
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
788
+ "modalInstall": "BiQ1zG_modalInstall",
789
789
  "noticeRowOk": "BiQ1zG_noticeRowOk",
790
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
791
- "errorBox": "BiQ1zG_errorBox",
792
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
793
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
794
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
795
- "errorCopySoft": "BiQ1zG_errorCopySoft",
796
- "queueRowPct": "BiQ1zG_queueRowPct",
797
- "detailRow": "BiQ1zG_detailRow",
798
- "noticeFoot": "BiQ1zG_noticeFoot",
799
- "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
800
- "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
801
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
802
- "modalClose": "BiQ1zG_modalClose",
803
790
  "queueRowTrack": "BiQ1zG_queueRowTrack",
804
791
  "failClear": "BiQ1zG_failClear",
805
- "detailDim": "BiQ1zG_detailDim",
806
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
807
- "aboutMeta": "BiQ1zG_aboutMeta",
792
+ "detailGrid": "BiQ1zG_detailGrid",
793
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
794
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
795
+ "modalValue": "BiQ1zG_modalValue",
796
+ "noticeList": "BiQ1zG_noticeList",
808
797
  "detailArrow": "BiQ1zG_detailArrow",
809
- "detailMono": "BiQ1zG_detailMono",
810
- "failKind": "BiQ1zG_failKind",
811
- "noticeTextFail": "BiQ1zG_noticeTextFail",
812
- "detailStatusPending": "BiQ1zG_detailStatusPending",
813
- "noticeRowMain": "BiQ1zG_noticeRowMain",
814
- "resultCheck": "BiQ1zG_resultCheck",
815
- "modalCopy": "BiQ1zG_modalCopy",
816
- "stripCancel": "BiQ1zG_stripCancel",
798
+ "modalIn": "BiQ1zG_modalIn",
799
+ "logModal": "BiQ1zG_logModal",
800
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
801
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
802
+ "failHead": "BiQ1zG_failHead",
803
+ "noticeTime": "BiQ1zG_noticeTime",
804
+ "detailRow": "BiQ1zG_detailRow",
817
805
  "progressFillFail": "BiQ1zG_progressFillFail",
818
- "progressFill": "BiQ1zG_progressFill",
819
- "noticeRemove": "BiQ1zG_noticeRemove",
820
- "noticeList": "BiQ1zG_noticeList",
821
- "detailPathActions": "BiQ1zG_detailPathActions",
822
- "dangerConfirm": "BiQ1zG_dangerConfirm",
806
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
807
+ "aboutMeta": "BiQ1zG_aboutMeta",
808
+ "failRepo": "BiQ1zG_failRepo",
809
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
810
+ "queueRowBody": "BiQ1zG_queueRowBody",
811
+ "queuedHint": "BiQ1zG_queuedHint",
812
+ "detailPathText": "BiQ1zG_detailPathText",
813
+ "noticeMain": "BiQ1zG_noticeMain",
814
+ "errorTitle": "BiQ1zG_errorTitle",
815
+ "resultRestarting": "BiQ1zG_resultRestarting",
816
+ "resultTitle": "BiQ1zG_resultTitle",
817
+ "noticeIgnore": "BiQ1zG_noticeIgnore",
823
818
  "toastFail": "BiQ1zG_toastFail",
824
- "progressHead": "BiQ1zG_progressHead",
819
+ "aboutModal": "BiQ1zG_aboutModal",
820
+ "failEmpty": "BiQ1zG_failEmpty",
821
+ "modalLink": "BiQ1zG_modalLink",
822
+ "noticeTextFail": "BiQ1zG_noticeTextFail",
825
823
  "detailPath": "BiQ1zG_detailPath",
826
- "modalActions": "BiQ1zG_modalActions",
824
+ "noticeVersion": "BiQ1zG_noticeVersion",
825
+ "trustHint": "BiQ1zG_trustHint",
826
+ "modalLabel": "BiQ1zG_modalLabel",
827
+ "aboutContent": "BiQ1zG_aboutContent",
828
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
829
+ "progress": "BiQ1zG_progress",
830
+ "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
831
+ "stripCancel": "BiQ1zG_stripCancel",
832
+ "detailMono": "BiQ1zG_detailMono",
833
+ "progressHead": "BiQ1zG_progressHead",
834
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
835
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
836
+ "confirmIconWrap": "BiQ1zG_confirmIconWrap",
837
+ "modalDesc": "BiQ1zG_modalDesc",
838
+ "detailLabel": "BiQ1zG_detailLabel",
839
+ "errorBox": "BiQ1zG_errorBox",
840
+ "noticeRow": "BiQ1zG_noticeRow",
841
+ "detailPathActions": "BiQ1zG_detailPathActions",
842
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
827
843
  "queueRowDesc": "BiQ1zG_queueRowDesc",
828
- "modalCancel": "BiQ1zG_modalCancel",
829
- "pendingRowActions": "BiQ1zG_pendingRowActions",
830
844
  "failedCopyHint": "BiQ1zG_failedCopyHint",
831
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
832
- "failList": "BiQ1zG_failList",
833
- "confirmPrimary": "BiQ1zG_confirmPrimary",
834
- "failHead": "BiQ1zG_failHead",
835
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
836
- "modalRow": "BiQ1zG_modalRow",
837
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
838
- "aboutContent": "BiQ1zG_aboutContent",
845
+ "errorModal": "BiQ1zG_errorModal",
846
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
839
847
  "helpModal": "BiQ1zG_helpModal",
840
- "modalHead": "BiQ1zG_modalHead",
841
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
842
- "modalBody": "BiQ1zG_modalBody",
843
- "queueSection": "BiQ1zG_queueSection",
844
- "modalTitle": "BiQ1zG_modalTitle",
845
- "trustHint": "BiQ1zG_trustHint",
846
848
  "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",
849
+ "modalWide": "BiQ1zG_modalWide",
850
+ "overlayIn": "BiQ1zG_overlayIn",
851
+ "result": "BiQ1zG_result",
852
+ "failKind": "BiQ1zG_failKind",
853
+ "failKindInstall": "BiQ1zG_failKindInstall",
854
+ "detailStars": "BiQ1zG_detailStars",
855
+ "pendingRowActions": "BiQ1zG_pendingRowActions",
856
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
857
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
858
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
859
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
860
+ "failRow": "BiQ1zG_failRow",
856
861
  "failDiagBtn": "BiQ1zG_failDiagBtn",
857
- "progressText": "BiQ1zG_progressText",
858
- "noticeHead": "BiQ1zG_noticeHead",
859
- "failNetworkTarget": "BiQ1zG_failNetworkTarget",
860
- "modalInstall": "BiQ1zG_modalInstall"
862
+ "failBigIssue": "BiQ1zG_failBigIssue",
863
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
864
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon"
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.0";
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.0") 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";
@@ -1900,8 +1930,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1900
1930
  `- Cause: ${reason}`,
1901
1931
  ...code ? [`- Key error: \`${code}\``] : [],
1902
1932
  "",
1903
- `## [DSH Plugin 插件中心](${SITE_URL}) · 安装 Plugin 失败错误信息`,
1904
- `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件中心的安装程序自动生成,随本次安装失败一并提交。`,
1933
+ `## [DSH Plugin 插件市场](${SITE_URL}) · 安装 Plugin 失败错误信息`,
1934
+ `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件市场的安装程序自动生成,随本次安装失败一并提交。`,
1905
1935
  `- 实际执行的安装命令:\`${command ?? `dsh plugin${env?.profile ? ` --profile ${env.profile}` : ""} add git+https://github.com/${repo}.git`}\``,
1906
1936
  `- 执行结果:安装失败,未能安装该插件。`,
1907
1937
  ...attempts && attempts.length > 0 ? [
@@ -1963,15 +1993,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1963
1993
  * Website: https://dsh-plugin.org
1964
1994
  * GitHub: https://github.com/dshplugin/dsh-plugin-hub
1965
1995
  *
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.
1996
+ * Language state for the section: the Hub shares the host (system) locale —
1997
+ * the header language toggle writes the host locale preference via setLocale,
1998
+ * so the host chrome (left sidebar, settings dialog) and the Hub panel switch
1999
+ * together instead of drifting apart. Exposes the localized dictionary lookup
2000
+ * `t()` plus the zh/en language flag and the /zh/ URL path prefix.
1970
2001
  */
1971
2002
  function useLanguage(locale) {
1972
- /** 界面语言:默认跟随宿主(系统)语言;右上角按钮可手动切换,切换后以手动选择为准 */
1973
- const [manualLang, setManualLang] = (0, react.useState)(null);
1974
- const lang = manualLang ?? locale.getSnapshot().active;
2003
+ const [, setRev] = (0, react.useState)(0);
2004
+ (0, react.useEffect)(() => locale.subscribe(() => setRev((r) => r + 1)), [locale]);
2005
+ const lang = locale.getSnapshot().active;
1975
2006
  const langKey = lang === "en" ? "en" : "zh";
1976
2007
  const langPath = langPathOf(lang);
1977
2008
  const dict = langKey === "en" ? en : zh;
@@ -1984,7 +2015,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1984
2015
  langKey,
1985
2016
  langPath,
1986
2017
  t,
1987
- toggleLang: () => setManualLang(lang === "en" ? "zh" : "en")
2018
+ toggleLang: () => locale.setLocale(lang === "en" ? "zh" : "en")
1988
2019
  };
1989
2020
  }
1990
2021
  //#endregion
@@ -2796,7 +2827,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2796
2827
  strokeLinejoin: "round"
2797
2828
  }));
2798
2829
  }
2799
- /** 插件中心图标:店面货架(stroke 继承 currentColor),一级导航「插件中心」tab 用。 */
2830
+ /** 插件市场图标:店面货架(stroke 继承 currentColor),一级导航「插件市场」tab 用。 */
2800
2831
  function MarketIcon() {
2801
2832
  return (0, react.createElement)("svg", {
2802
2833
  viewBox: "0 0 24 24",
@@ -3274,7 +3305,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3274
3305
  }, repo) : null, (0, react.createElement)("button", {
3275
3306
  className: Modal_module_css_default.errorCopySoft,
3276
3307
  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, [
3308
+ }, 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
3309
  (() => {
3279
3310
  const target = unreachableTargetOf(message);
3280
3311
  return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
@@ -3303,7 +3334,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3303
3334
  }
3304
3335
  /** 全局反馈 Toast:复制成功(反色)/ 安装完成(反色)/ 安装失败(红色)/ 卸载结果 */
3305
3336
  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");
3337
+ 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
3338
  const fail = toast.kind === "fail" || toast.kind === "removeFail" || toast.kind === "revealFail";
3308
3339
  return (0, react.createElement)("div", {
3309
3340
  key: toast.id,
@@ -3826,7 +3857,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3826
3857
  return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(v ? "failNpmTooLowV" : "failNpmTooLow", v ? { v } : void 0));
3827
3858
  }
3828
3859
  if (kind === "dshMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshMissingHint"));
3860
+ if (kind === "gitMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failGitMissingHint"));
3829
3861
  if (kind === "pnpmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingHint"));
3862
+ if (kind === "npmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint"));
3830
3863
  if (kind === "pnpmStore") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint"));
3831
3864
  if (kind === "pnpmPolicy") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmPolicyHint"));
3832
3865
  if (kind === "network") return (0, react.createElement)("div", null, [
@@ -4034,40 +4067,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4034
4067
  css: css$9
4035
4068
  });
4036
4069
  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
- "card": "_3XaZHa_card",
4045
- "fork": "_3XaZHa_fork",
4046
- "detailBtn": "_3XaZHa_detailBtn",
4047
- "list": "_3XaZHa_list",
4048
- "footer": "_3XaZHa_footer",
4049
4070
  "body": "_3XaZHa_body",
4050
- "star": "_3XaZHa_star",
4051
- "uninstallBtn": "_3XaZHa_uninstallBtn",
4052
- "footLink": "_3XaZHa_footLink",
4053
- "cardSide": "_3XaZHa_cardSide",
4054
- "state": "_3XaZHa_state",
4055
- "installBtn": "_3XaZHa_installBtn",
4056
4071
  "topics": "_3XaZHa_topics",
4057
- "date": "_3XaZHa_date",
4058
- "updateBadge": "_3XaZHa_updateBadge",
4059
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4072
+ "detailBtn": "_3XaZHa_detailBtn",
4073
+ "cardTitle": "_3XaZHa_cardTitle",
4074
+ "list": "_3XaZHa_list",
4075
+ "stateActions": "_3XaZHa_stateActions",
4060
4076
  "categoryBadge": "_3XaZHa_categoryBadge",
4061
- "installBtnCopied": "_3XaZHa_installBtnCopied",
4062
- "stateDesc": "_3XaZHa_stateDesc",
4063
- "moreSentinel": "_3XaZHa_moreSentinel",
4064
- "cardHead": "_3XaZHa_cardHead",
4065
- "cardMain": "_3XaZHa_cardMain",
4077
+ "verified": "_3XaZHa_verified",
4078
+ "state": "_3XaZHa_state",
4079
+ "footLink": "_3XaZHa_footLink",
4080
+ "updateBadge": "_3XaZHa_updateBadge",
4081
+ "versionBadge": "_3XaZHa_versionBadge",
4082
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
4083
+ "stats": "_3XaZHa_stats",
4084
+ "star": "_3XaZHa_star",
4085
+ "desc": "_3XaZHa_desc",
4086
+ "date": "_3XaZHa_date",
4066
4087
  "actions": "_3XaZHa_actions",
4067
4088
  "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4089
+ "cardMain": "_3XaZHa_cardMain",
4090
+ "topic": "_3XaZHa_topic",
4091
+ "stateDesc": "_3XaZHa_stateDesc",
4092
+ "uninstallBtn": "_3XaZHa_uninstallBtn",
4093
+ "cardHead": "_3XaZHa_cardHead",
4068
4094
  "stateTitle": "_3XaZHa_stateTitle",
4069
- "desc": "_3XaZHa_desc",
4070
- "cardTitle": "_3XaZHa_cardTitle"
4095
+ "card": "_3XaZHa_card",
4096
+ "footer": "_3XaZHa_footer",
4097
+ "cardSide": "_3XaZHa_cardSide",
4098
+ "diagBtn": "_3XaZHa_diagBtn",
4099
+ "fork": "_3XaZHa_fork",
4100
+ "moreSentinel": "_3XaZHa_moreSentinel",
4101
+ "retryBtn": "_3XaZHa_retryBtn",
4102
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4103
+ "installBtn": "_3XaZHa_installBtn"
4071
4104
  };
4072
4105
  //#endregion
4073
4106
  //#region src/client/hooks/useIncrementalList.ts
@@ -4078,7 +4111,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4078
4111
  *
4079
4112
  * Incremental list: renders only the first batch of a (potentially huge)
4080
4113
  * 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.
4114
+ * into view, so the plugin market never mounts thousands of cards at once.
4082
4115
  * The items reference is the list identity — category / search / sort
4083
4116
  * changes produce a new array, which resets the window to the first batch.
4084
4117
  */
@@ -4274,15 +4307,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4274
4307
  css: css$8
4275
4308
  });
4276
4309
  var SectionTabs_module_css_default = {
4277
- "tab": "_7tvizq_tab",
4310
+ "root": "_7tvizq_root",
4278
4311
  "noticeIcon": "_7tvizq_noticeIcon",
4279
- "noticeCount": "_7tvizq_noticeCount",
4312
+ "tabIcon": "_7tvizq_tabIcon",
4313
+ "tabActive": "_7tvizq_tabActive",
4280
4314
  "tabCountActive": "_7tvizq_tabCountActive",
4315
+ "noticeCount": "_7tvizq_noticeCount",
4281
4316
  "noticeBtn": "_7tvizq_noticeBtn",
4282
4317
  "tabCount": "_7tvizq_tabCount",
4283
- "tabActive": "_7tvizq_tabActive",
4284
- "tabIcon": "_7tvizq_tabIcon",
4285
- "root": "_7tvizq_root"
4318
+ "tab": "_7tvizq_tab"
4286
4319
  };
4287
4320
  //#endregion
4288
4321
  //#region src/client/components/layout/SectionTabs.tsx
@@ -4359,42 +4392,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4359
4392
  css: css$7
4360
4393
  });
4361
4394
  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
- "segGroup": "_1nXeGW_segGroup",
4395
+ "segLabel": "_1nXeGW_segLabel",
4396
+ "searchWrap": "_1nXeGW_searchWrap",
4374
4397
  "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4375
- "rowMeta": "_1nXeGW_rowMeta",
4376
4398
  "rowUninstall": "_1nXeGW_rowUninstall",
4377
- "rowRepo": "_1nXeGW_rowRepo",
4399
+ "emptyTitle": "_1nXeGW_emptyTitle",
4400
+ "empty": "_1nXeGW_empty",
4378
4401
  "segBtn": "_1nXeGW_segBtn",
4379
- "rowTitle": "_1nXeGW_rowTitle",
4380
- "rowUpdate": "_1nXeGW_rowUpdate",
4402
+ "emptyDesc": "_1nXeGW_emptyDesc",
4403
+ "updateBadge": "_1nXeGW_updateBadge",
4404
+ "rowRepo": "_1nXeGW_rowRepo",
4405
+ "rowMeta": "_1nXeGW_rowMeta",
4406
+ "root": "_1nXeGW_root",
4407
+ "rowRestart": "_1nXeGW_rowRestart",
4381
4408
  "rowDetail": "_1nXeGW_rowDetail",
4409
+ "rowTitle": "_1nXeGW_rowTitle",
4410
+ "toolbar": "_1nXeGW_toolbar",
4411
+ "searchInput": "_1nXeGW_searchInput",
4412
+ "statusDot": "_1nXeGW_statusDot",
4413
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
4414
+ "statusPending": "_1nXeGW_statusPending",
4415
+ "rowDesc": "_1nXeGW_rowDesc",
4382
4416
  "row": "_1nXeGW_row",
4417
+ "versionBadge": "_1nXeGW_versionBadge",
4418
+ "rowActions": "_1nXeGW_rowActions",
4419
+ "rowUpdate": "_1nXeGW_rowUpdate",
4383
4420
  "rowMain": "_1nXeGW_rowMain",
4384
- "rowRestart": "_1nXeGW_rowRestart",
4385
- "emptyTitle": "_1nXeGW_emptyTitle",
4386
- "updateBadge": "_1nXeGW_updateBadge",
4387
- "segLabel": "_1nXeGW_segLabel",
4388
- "segRow": "_1nXeGW_segRow",
4389
4421
  "segBtnActive": "_1nXeGW_segBtnActive",
4390
- "root": "_1nXeGW_root",
4422
+ "rowTitleLine": "_1nXeGW_rowTitleLine",
4423
+ "list": "_1nXeGW_list",
4424
+ "segGroup": "_1nXeGW_segGroup",
4425
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4426
+ "exampleBadge": "_1nXeGW_exampleBadge",
4391
4427
  "exampleRow": "_1nXeGW_exampleRow",
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
+ "rowCategory": "_1nXeGW_rowCategory",
4430
+ "segRow": "_1nXeGW_segRow"
4398
4431
  };
4399
4432
  //#endregion
4400
4433
  //#region src/client/components/views/InstalledView.tsx
@@ -4640,28 +4673,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4640
4673
  css: css$6
4641
4674
  });
4642
4675
  var CustomInstallView_module_css_default = {
4643
- "channelOffText": "zISxCG_channelOffText",
4644
- "installHelpBtn": "zISxCG_installHelpBtn",
4676
+ "root": "zISxCG_root",
4677
+ "installRow": "zISxCG_installRow",
4645
4678
  "installBtn": "zISxCG_installBtn",
4646
- "installInput": "zISxCG_installInput",
4679
+ "installExample": "zISxCG_installExample",
4647
4680
  "installCardHead": "zISxCG_installCardHead",
4648
- "installError": "zISxCG_installError",
4681
+ "installCardDisabled": "zISxCG_installCardDisabled",
4682
+ "installInput": "zISxCG_installInput",
4683
+ "helpLine": "zISxCG_helpLine",
4684
+ "helpCmd": "zISxCG_helpCmd",
4649
4685
  "installCards": "zISxCG_installCards",
4650
- "desc": "zISxCG_desc",
4686
+ "installError": "zISxCG_installError",
4651
4687
  "installCard": "zISxCG_installCard",
4652
- "channelOff": "zISxCG_channelOff",
4653
- "helpLine": "zISxCG_helpLine",
4654
- "installExample": "zISxCG_installExample",
4688
+ "installHelpBtn": "zISxCG_installHelpBtn",
4689
+ "helpBody": "zISxCG_helpBody",
4690
+ "channelOffBtn": "zISxCG_channelOffBtn",
4691
+ "installInsertBtn": "zISxCG_installInsertBtn",
4655
4692
  "helpNote": "zISxCG_helpNote",
4656
4693
  "installInputError": "zISxCG_installInputError",
4657
- "root": "zISxCG_root",
4658
- "installCardDisabled": "zISxCG_installCardDisabled",
4659
4694
  "installLabel": "zISxCG_installLabel",
4660
- "helpBody": "zISxCG_helpBody",
4661
- "installInsertBtn": "zISxCG_installInsertBtn",
4662
- "installRow": "zISxCG_installRow",
4663
- "helpCmd": "zISxCG_helpCmd",
4664
- "channelOffBtn": "zISxCG_channelOffBtn"
4695
+ "channelOff": "zISxCG_channelOff",
4696
+ "channelOffText": "zISxCG_channelOffText",
4697
+ "desc": "zISxCG_desc"
4665
4698
  };
4666
4699
  //#endregion
4667
4700
  //#region src/client/components/views/CustomInstallView.tsx
@@ -4951,30 +4984,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4951
4984
  css: css$5
4952
4985
  });
4953
4986
  var SettingsView_module_css_default = {
4954
- "navItemActive": "_506LLG_navItemActive",
4955
- "settingControlStack": "_506LLG_settingControlStack",
4956
- "pageHeader": "_506LLG_pageHeader",
4957
- "proxyControl": "_506LLG_proxyControl",
4958
- "navItem": "_506LLG_navItem",
4987
+ "navIcon": "_506LLG_navIcon",
4988
+ "pageTitle": "_506LLG_pageTitle",
4989
+ "sidebar": "_506LLG_sidebar",
4990
+ "settingControl": "_506LLG_settingControl",
4991
+ "proxyHintFail": "_506LLG_proxyHintFail",
4992
+ "settingTitle": "_506LLG_settingTitle",
4959
4993
  "settingRowStack": "_506LLG_settingRowStack",
4994
+ "navItem": "_506LLG_navItem",
4995
+ "content": "_506LLG_content",
4960
4996
  "controlDropdown": "_506LLG_controlDropdown",
4961
- "settingRow": "_506LLG_settingRow",
4962
- "resetBtn": "_506LLG_resetBtn",
4997
+ "settingLabel": "_506LLG_settingLabel",
4998
+ "card": "_506LLG_card",
4999
+ "pageHeader": "_506LLG_pageHeader",
5000
+ "pageDesc": "_506LLG_pageDesc",
4963
5001
  "proxyHint": "_506LLG_proxyHint",
4964
5002
  "proxyHintOk": "_506LLG_proxyHintOk",
4965
- "settingControl": "_506LLG_settingControl",
4966
- "card": "_506LLG_card",
4967
- "settingTitle": "_506LLG_settingTitle",
4968
- "settingDesc": "_506LLG_settingDesc",
5003
+ "navItemActive": "_506LLG_navItemActive",
4969
5004
  "root": "_506LLG_root",
4970
- "navIcon": "_506LLG_navIcon",
4971
- "settingLabel": "_506LLG_settingLabel",
4972
- "sidebar": "_506LLG_sidebar",
4973
- "content": "_506LLG_content",
4974
- "pageTitle": "_506LLG_pageTitle",
4975
- "pageDesc": "_506LLG_pageDesc",
5005
+ "settingDesc": "_506LLG_settingDesc",
5006
+ "proxyControl": "_506LLG_proxyControl",
5007
+ "resetBtn": "_506LLG_resetBtn",
4976
5008
  "textInput": "_506LLG_textInput",
4977
- "proxyHintFail": "_506LLG_proxyHintFail"
5009
+ "settingControlStack": "_506LLG_settingControlStack",
5010
+ "settingRow": "_506LLG_settingRow"
4978
5011
  };
4979
5012
  //#endregion
4980
5013
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -4994,17 +5027,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4994
5027
  });
4995
5028
  var Dropdown_module_css_default = {
4996
5029
  "dropdownCountActive": "B_Gxsq_dropdownCountActive",
4997
- "dropdownCount": "B_Gxsq_dropdownCount",
5030
+ "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
4998
5031
  "dropdownPanel": "B_Gxsq_dropdownPanel",
4999
- "dropdownBtn": "B_Gxsq_dropdownBtn",
5000
- "dropdownItem": "B_Gxsq_dropdownItem",
5001
- "dropdownArrow": "B_Gxsq_dropdownArrow",
5002
5032
  "dropdownLabel": "B_Gxsq_dropdownLabel",
5003
- "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5033
+ "dropdownArrow": "B_Gxsq_dropdownArrow",
5034
+ "dropdownBtn": "B_Gxsq_dropdownBtn",
5035
+ "dropdownFill": "B_Gxsq_dropdownFill",
5004
5036
  "dropdown": "B_Gxsq_dropdown",
5005
- "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
5037
+ "dropdownItem": "B_Gxsq_dropdownItem",
5006
5038
  "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5007
- "dropdownFill": "B_Gxsq_dropdownFill"
5039
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5040
+ "dropdownCount": "B_Gxsq_dropdownCount"
5008
5041
  };
5009
5042
  //#endregion
5010
5043
  //#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
@@ -5125,29 +5158,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5125
5158
  css: css$2
5126
5159
  });
5127
5160
  var DiagnosticsView_module_css_default = {
5128
- "display": "k9eRya_display",
5129
- "envCopyBtn": "k9eRya_envCopyBtn",
5130
- "summaryRunning": "k9eRya_summaryRunning",
5131
- "meta": "k9eRya_meta",
5161
+ "head": "k9eRya_head",
5132
5162
  "envLabel": "k9eRya_envLabel",
5133
- "name": "k9eRya_name",
5134
- "badge": "k9eRya_badge",
5135
- "badgeIdle": "k9eRya_badgeIdle",
5136
- "panel": "k9eRya_panel",
5137
- "badgeRunning": "k9eRya_badgeRunning",
5163
+ "diagPulse": "k9eRya_diagPulse",
5164
+ "summaryRunning": "k9eRya_summaryRunning",
5138
5165
  "runBtn": "k9eRya_runBtn",
5139
- "row": "k9eRya_row",
5140
- "summaryOk": "k9eRya_summaryOk",
5166
+ "badgeFail": "k9eRya_badgeFail",
5167
+ "envCopyBtn": "k9eRya_envCopyBtn",
5168
+ "badgeOk": "k9eRya_badgeOk",
5169
+ "summary": "k9eRya_summary",
5141
5170
  "envTitle": "k9eRya_envTitle",
5171
+ "summaryOk": "k9eRya_summaryOk",
5142
5172
  "summaryFail": "k9eRya_summaryFail",
5143
- "diagPulse": "k9eRya_diagPulse",
5144
- "summary": "k9eRya_summary",
5145
- "head": "k9eRya_head",
5146
- "badgeOk": "k9eRya_badgeOk",
5173
+ "badge": "k9eRya_badge",
5174
+ "meta": "k9eRya_meta",
5175
+ "display": "k9eRya_display",
5176
+ "envRow": "k9eRya_envRow",
5147
5177
  "headHint": "k9eRya_headHint",
5148
- "envDesc": "k9eRya_envDesc",
5149
- "badgeFail": "k9eRya_badgeFail",
5150
- "envRow": "k9eRya_envRow"
5178
+ "badgeRunning": "k9eRya_badgeRunning",
5179
+ "badgeIdle": "k9eRya_badgeIdle",
5180
+ "panel": "k9eRya_panel",
5181
+ "row": "k9eRya_row",
5182
+ "name": "k9eRya_name",
5183
+ "envDesc": "k9eRya_envDesc"
5151
5184
  };
5152
5185
  //#endregion
5153
5186
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5185,7 +5218,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5185
5218
  },
5186
5219
  {
5187
5220
  key: "github",
5188
- display: "github.com/dshplugin/hello-dsh",
5221
+ display: "github.com",
5189
5222
  nameKey: "diagGithub",
5190
5223
  status: "idle",
5191
5224
  ms: null,
@@ -5193,7 +5226,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5193
5226
  },
5194
5227
  {
5195
5228
  key: "catalog",
5196
- display: "api.dsh-plugin.org",
5229
+ display: "",
5197
5230
  nameKey: "diagCatalog",
5198
5231
  status: "idle",
5199
5232
  ms: null,
@@ -5302,7 +5335,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5302
5335
  disabled: r.status === "running",
5303
5336
  onClick: () => run(r.key),
5304
5337
  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);
5338
+ }, (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
5339
  }), (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
5340
  }
5308
5341
  //#endregion
@@ -5322,57 +5355,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5322
5355
  css: css$1
5323
5356
  });
5324
5357
  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",
5358
+ "searchInput": "_3j77BW_searchInput",
5359
+ "time": "_3j77BW_time",
5360
+ "badgeWarn": "_3j77BW_badgeWarn",
5361
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5362
+ "catSystem": "_3j77BW_catSystem",
5333
5363
  "search": "_3j77BW_search",
5334
- "list": "_3j77BW_list",
5364
+ "catInstall": "_3j77BW_catInstall",
5365
+ "pathDraft": "_3j77BW_pathDraft",
5335
5366
  "pathDialog": "_3j77BW_pathDialog",
5336
- "moreEnd": "_3j77BW_moreEnd",
5337
- "headActions": "_3j77BW_headActions",
5338
- "catBadge": "_3j77BW_catBadge",
5339
- "foot": "_3j77BW_foot",
5340
- "footPath": "_3j77BW_footPath",
5341
- "pathText": "_3j77BW_pathText",
5342
- "catUpdate": "_3j77BW_catUpdate",
5343
5367
  "catSettings": "_3j77BW_catSettings",
5368
+ "badgeDebug": "_3j77BW_badgeDebug",
5369
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5370
+ "catUpdate": "_3j77BW_catUpdate",
5371
+ "moreEnd": "_3j77BW_moreEnd",
5344
5372
  "empty": "_3j77BW_empty",
5345
- "filterBar": "_3j77BW_filterBar",
5346
- "catSystem": "_3j77BW_catSystem",
5347
- "pathDialogHint": "_3j77BW_pathDialogHint",
5373
+ "message": "_3j77BW_message",
5374
+ "clearBtn": "_3j77BW_clearBtn",
5375
+ "linkBtn": "_3j77BW_linkBtn",
5376
+ "catUninstall": "_3j77BW_catUninstall",
5377
+ "pathDialogRow": "_3j77BW_pathDialogRow",
5348
5378
  "pathLabel": "_3j77BW_pathLabel",
5349
- "pathDraft": "_3j77BW_pathDraft",
5379
+ "panel": "_3j77BW_panel",
5380
+ "badgeInfo": "_3j77BW_badgeInfo",
5381
+ "headHint": "_3j77BW_headHint",
5382
+ "catBadge": "_3j77BW_catBadge",
5383
+ "btn": "_3j77BW_btn",
5384
+ "list": "_3j77BW_list",
5385
+ "filterBar": "_3j77BW_filterBar",
5386
+ "filterChipActive": "_3j77BW_filterChipActive",
5387
+ "logList": "_3j77BW_logList",
5350
5388
  "footActions": "_3j77BW_footActions",
5351
- "badgeDebug": "_3j77BW_badgeDebug",
5352
5389
  "event": "_3j77BW_event",
5353
- "badgeSuccess": "_3j77BW_badgeSuccess",
5354
- "entry": "_3j77BW_entry",
5355
- "clearBtn": "_3j77BW_clearBtn",
5356
- "badgeWarn": "_3j77BW_badgeWarn",
5357
- "filterChipActive": "_3j77BW_filterChipActive",
5358
- "catDiagnostics": "_3j77BW_catDiagnostics",
5359
- "footFail": "_3j77BW_footFail",
5390
+ "head": "_3j77BW_head",
5391
+ "footPath": "_3j77BW_footPath",
5392
+ "actions": "_3j77BW_actions",
5393
+ "pathText": "_3j77BW_pathText",
5394
+ "headActions": "_3j77BW_headActions",
5360
5395
  "previewRow": "_3j77BW_previewRow",
5361
- "btn": "_3j77BW_btn",
5362
- "logList": "_3j77BW_logList",
5363
- "catInstall": "_3j77BW_catInstall",
5396
+ "footCount": "_3j77BW_footCount",
5397
+ "foot": "_3j77BW_foot",
5398
+ "badge": "_3j77BW_badge",
5399
+ "entry": "_3j77BW_entry",
5400
+ "badgeError": "_3j77BW_badgeError",
5364
5401
  "filterChip": "_3j77BW_filterChip",
5365
- "head": "_3j77BW_head",
5402
+ "pathDialogHint": "_3j77BW_pathDialogHint",
5403
+ "footFail": "_3j77BW_footFail",
5366
5404
  "pathRow": "_3j77BW_pathRow",
5367
- "pathDialogReset": "_3j77BW_pathDialogReset",
5368
- "panel": "_3j77BW_panel",
5369
5405
  "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"
5406
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5407
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5408
+ "badgeSuccess": "_3j77BW_badgeSuccess"
5376
5409
  };
5377
5410
  //#endregion
5378
5411
  //#region src/client/components/modals/LogsModal.tsx
@@ -6189,7 +6222,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6189
6222
  const catalog = useCatalog(lang);
6190
6223
  /** 设置状态:服务端 hub-settings.json 持久化,本地乐观更新即时生效 */
6191
6224
  const { settings: hubSettings, ready: settingsReady, update: updateSettings, reset: resetSettings } = useSettings();
6192
- /** 一级导航:插件中心 / 已安装 / 自定义安装 / 设置 */
6225
+ /** 一级导航:插件市场 / 已安装 / 自定义安装 / 设置 */
6193
6226
  const [view, setView] = (0, react.useState)("market");
6194
6227
  /** 外部跳转设置分组的一次性信号(错误弹窗「去系统诊断」→ 设置 → 系统诊断):
6195
6228
  * 传给 SettingsView 消费后即清空,避免下次进设置被强制带跳 */
@@ -6358,12 +6391,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6358
6391
  if (!settingsReady || catalog.plugins === null || catalog.failed) return;
6359
6392
  startupCheckedRef.current = true;
6360
6393
  if (!hubSettings.checkUpdatesOnStart) return;
6361
- const added = syncUpdateNotices();
6362
- if (added > 0) setToast({
6363
- id: Date.now(),
6364
- kind: "updates",
6365
- n: added
6366
- });
6394
+ syncUpdateNotices();
6367
6395
  }, [
6368
6396
  settingsReady,
6369
6397
  hubSettings,
@@ -6617,7 +6645,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6617
6645
  openSection: settingsSection,
6618
6646
  onConsumedOpenSection: () => setSettingsSection(null)
6619
6647
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6620
- info: catalog.hubUpdateInfo ?? { version: "1.3.11" },
6648
+ info: catalog.hubUpdateInfo ?? { version: "1.4.0" },
6621
6649
  lang,
6622
6650
  t,
6623
6651
  hasUpdate: catalog.hubHasUpdate,