dsh-plugin 1.6.10 → 1.6.12

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
@@ -283,6 +283,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
283
283
  errorTitleInstall: "安装失败",
284
284
  errorTitleUninstall: "卸载失败",
285
285
  errorTitleUpdate: "更新失败",
286
+ actionInstall: "安装",
287
+ actionUpdate: "更新",
288
+ actionUninstall: "卸载",
286
289
  errorPlugin: "插件",
287
290
  errorClose: "知道了",
288
291
  errorCopy: "复制错误信息",
@@ -292,18 +295,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
292
295
  failIssueBig: "一键提交 BUG 到 GitHub Issue 为开源作贡献",
293
296
  failHubIssueHint: "此失败已被判定为环境或插件中心自身问题(非插件作者问题),带着错误日志到插件中心仓库一键提交 Issue",
294
297
  failHubIssueBig: "反馈给插件中心排查",
295
- failUnclassifiedHint: "安装失败,原因未能自动识别。这通常不是插件自身的问题(可能与本机环境或插件中心有关),请将错误信息反馈给插件中心,由维护者排查。",
296
- failHubStateHint: "插件列表状态已过期或与本地不一致:该插件可能已经装过了(无需重复安装,要升级请点「更新」),也可能已不在已安装列表中,或已在队列中。这不是插件本身的问题 —— 请刷新页面后重试。",
297
- failTimeoutHint: "安装耗时超过本地上限、已被中断 —— 但很可能其实已经装上了(安装器在超时后会先核对本地已安装列表)。请刷新页面确认该插件是否已装上;若确实没装上,可在终端手动执行一次安装命令查看完整输出。这不是插件本身的问题。",
298
- failProfileLockHint: "DSH 在写入插件清单时等不到文件锁、超时中止 —— 通常是同时有另一个 DSH 进程或安装任务在写同一个 profile(也可能是上一次的进程没退干净留下的锁)。请先关掉其他 dsh 窗口或正在跑的命令,再重试一次;若反复出现,重启一次 DSH。这不是插件本身的问题,也不需要重复安装。",
298
+ failUnclassifiedHint: "{action}失败,原因未能自动识别。这通常不是插件自身的问题(可能与本机环境或插件中心有关),请将错误信息反馈给插件中心,由维护者排查。",
299
+ failHubStateHint: "插件列表状态已过期或与本地不一致:这次{action}的目标可能已经在列表里了(要升级请点「更新」),也可能已经不在已安装列表中,或已在队列中。这不是插件本身的问题 —— 请刷新页面后重试。",
300
+ failTimeoutHint: "本次操作耗时超过本地上限、已被中断 —— 但很可能其实已经生效了(安装器在超时后会先核对本地已安装列表)。请刷新页面确认当前状态;若确实没生效,可在终端手动执行一次对应命令查看完整输出。这不是插件本身的问题。",
301
+ failProfileLockHint: "DSH 在写入插件清单时等不到文件锁、超时中止 —— 通常是同时有另一个 DSH 进程或安装任务在写同一个 profile(也可能是上一次的进程没退干净留下的锁)。请先关掉其他 dsh 窗口或正在跑的命令,再重试一次;若反复出现,重启一次 DSH。这不是插件本身的问题,也不需要重复{action}。",
302
+ failHostCliSpawnHint: "DSH 没能启动自身来完成这次操作(系统报「找不到可执行文件」):通常是因为 DSH 的安装目录被移动或正在更新,或该 profile 目录还不存在。请重启一次 DSH 后重试;若反复出现,重新安装 DSH。这不是插件本身的问题,换别的插件也一样。",
299
303
  failPrepareHint: "该插件安装时的构建脚本执行失败(git 分发常缺失子模块或构建产物),属插件打包分发问题。请向作者仓库提交 Issue 反馈。",
300
304
  failMisjudgeHint: "如果这个插件其实能正常安装(上面这个判定是插件中心误报的),请反馈给插件中心:文字提示里的判据由市场自身产出,误报只有靠你的反馈才能被发现。",
301
305
  failMisjudgeLink: "插件能装却被拦下?反馈给插件中心",
302
306
  failPackagingHint: "该插件不支持官方默认安装方式:其 git 分发缺少它需要的文件(`main` / `exports` 声明的入口、补丁按本包名 mount 的入口,或 `dsh.bundle.patch` 声明的补丁),说明作者未适配官方安装流程。请到作者仓库提交 Issue 反馈,请其提交构建产物、改用预构建 release `.tgz` 直链(`releases/download/<tag>/<asset>.tgz`),或发布完整的 npm 版。",
303
- failIgnoredBuild: "该插件(或其依赖)需要在安装时执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截,安装因此失败(如原生模块 node-pty,或 git 安装时插件自己的 prepare 脚本)。安装器已自动放行该 key 并重试过一次;仍失败通常说明构建本身没通过。可先在终端手动执行一次安装命令查看完整构建错误;若确属插件的构建/分发问题,建议作者预置构建产物、发布 npm 包或预构建 .tgz。需要协助排查时也可反馈给插件中心。",
307
+ failIgnoredBuild: "该插件(或其依赖)需要在安装时执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截,本次操作因此失败(如原生模块 node-pty,或 git 安装时插件自己的 prepare 脚本)。安装器已自动放行该 key 并重试过一次;仍失败通常说明构建本身没通过。可先在终端手动执行一次安装命令查看完整构建错误;若确属插件的构建/分发问题,建议作者预置构建产物、发布 npm 包或预构建 .tgz。需要协助排查时也可反馈给插件中心。",
304
308
  failNpmTooLow: "怀疑本机 npm 版本过低:npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
305
309
  failNpmTooLowV: "本机 npm 版本过低(当前 v{v}):npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
306
- failNetworkHint: "安装前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。",
310
+ failNetworkHint: "{action}前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。",
307
311
  failNetworkRegistryHint: "你的 npm/pnpm 源(registry)被配置为 {host},插件包需从该源下载但失败了。这通常是内网/自定义源没有同步该包(或需要内网认证)—— 请把 npm/pnpm 的 registry 指回官方源 https://registry.npmjs.org(或确认此源可访问该包)后重试。",
308
312
  failNetworkTarget: "无法访问 {url} —— 你的网络连接不通",
309
313
  failNetworkRunDiag: "去系统诊断检测网络",
@@ -316,6 +320,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
316
320
  failPnpmUnusedPatchHint: "安装器调用 pnpm 时报「有些补丁没有被使用」(ERR_PNPM_UNUSED_PATCH):你的 profile 里留着一条指向旧版本 dsh-plugin 的补丁声明(例如 dsh-plugin@1.4.2),而本次安装解析到的版本已经不是它,pnpm 出于安全直接中止整次安装,因此任何插件都装不进来。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)的 pnpm-workspace.yaml(pnpm 11 及以上)或 package.json 的 pnpm.patchedDependencies(pnpm 10)里删除该 dsh-plugin 补丁条目后重试。",
317
321
  failPnpmMissingDepTarget: "{pkg} 在 npm registry 上不存在(404)",
318
322
  failPnpmMissingDepHint: "安装器调用 pnpm 时报「包不存在」(ERR_PNPM_FETCH_404):你的 profile 里留着一条指向 registry 上未发布包的依赖,pnpm 每次解析依赖都会先卡在它上面,因此任何插件都装不进来。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)的 package.json 里删除该依赖条目(同时删掉对应的 pnpm-lock.yaml 条目或整个锁文件)后重试。",
323
+ failRegistryMirrorLagHint: "安装器调用 pnpm 时报「包不存在」(ERR_PNPM_FETCH_404):该包在官方 npm 源上是有的,但你本机配置的 npm/pnpm 源(registry 或镜像)没有同步到它。请把 npm/pnpm 的 registry 指回官方源 https://registry.npmjs.org(或换一个已同步该包的镜像)后重试。这不是插件本身的问题。",
324
+ failPluginMissingDepTarget: "{pkg} 在官方 npm 源上不存在",
325
+ failPluginMissingDepHint: "该插件依赖的包在官方 npm 源上并不存在(已删除或从未发布):这是插件作者侧的依赖问题,不是你环境的问题。请向插件作者仓库反馈,请作者补上或修正该依赖,或改为随插件一起分发。",
319
326
  failRegistryVersionStaleHint: "安装器调用 pnpm 时报「找不到匹配的版本」(ERR_PNPM_NO_MATCHING_VERSION):要装的这个版本在实际执行安装的 npm 源里查不到。常见原因是你设置的 npmRegistry 与本机 ~/.npmrc 用的不是同一个源——官方源刚发布、镜像还没同步上来(快则几分钟、慢则几小时),也可能只是版本号写错了。这不是插件本身的问题。可在插件市场设置里把 npmRegistry 改成与本机 ~/.npmrc 一致(或反过来),或那一次显式走官方源(https://registry.npmjs.org)、改用离线包后重试;若该版本刚发布不久,等镜像同步后重试即可。",
320
327
  failPnpmLinkedDirMissingHint: "安装器调用 pnpm 时报「要安装的目录不存在」(ERR_PNPM_LINKED_PKG_DIR_NOT_FOUND):你的 profile 里留着一条指向本机不存在目录的本地依赖(link: / file: 形式,例如用 dsh plugin add <本地路径> 装过开发中的插件,之后那个目录被删除或移动了)。pnpm 每次解析 profile 依赖都会先卡在它上面,因此任何插件都装不进来。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)的 package.json 里删除该本地依赖条目(同时删掉对应的 pnpm-lock.yaml 条目或整个锁文件),或把该目录恢复回原路径后重试。",
321
328
  failFileLockedHint: "安装过程中 pnpm 无法替换 profile 里的文件:有程序正占用着它(Windows 常见报错 os error 32「另一个程序正在使用此文件」)。通常是 DeepSeek Harness 自身或杀毒软件的实时扫描持有文件句柄。这不是插件本身的问题——请完全退出 DeepSeek Harness(Windows 可在任务管理器确认进程已结束,必要时临时关闭杀毒软件实时防护)后重试。",
@@ -639,6 +646,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
639
646
  errorTitleInstall: "Install failed",
640
647
  errorTitleUninstall: "Removal failed",
641
648
  errorTitleUpdate: "Update failed",
649
+ actionInstall: "install",
650
+ actionUpdate: "update",
651
+ actionUninstall: "removal",
642
652
  errorPlugin: "Plugin",
643
653
  errorClose: "Got it",
644
654
  errorCopy: "Copy error",
@@ -648,18 +658,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
648
658
  failIssueBig: "Report this bug to GitHub — contribute to open source",
649
659
  failHubIssueHint: "This failure was classified as an environment or Plugin Hub issue (not a plugin-author issue). Open a pre-filled issue on the Plugin Hub repo with this error log.",
650
660
  failHubIssueBig: "Report to the Plugin Hub for triage",
651
- failUnclassifiedHint: "The install failed and the cause could not be identified automatically. This is usually not the plugin itself (it may relate to your local environment or the Plugin Hub). Please report the error to the Plugin Hub so the maintainers can triage it.",
652
- failHubStateHint: "The plugin list is out of date or out of sync: this plugin may already be installed (no need to reinstall — use \"Update\" to upgrade), or may no longer be in the installed list, or may already be queued. This is not a plugin problem — refresh the page and retry.",
653
- failTimeoutHint: "The install exceeded the local time limit and was interrupted — but it may well have completed already (the installer re-checks your installed list after a timeout). Refresh the page to see whether the plugin is installed; if it is not, run the install command in a terminal to see the full output. This is not a plugin problem.",
654
- failProfileLockHint: "DSH timed out waiting for the file lock while writing the plugin list — usually because another DSH process or install task is writing the same profile (sometimes a previous run left the lock behind). Close other dsh windows or running commands, then retry; if it keeps happening, restart DSH once. This is not a plugin problem, and the plugin does not need to be reinstalled.",
661
+ failUnclassifiedHint: "The {action} failed and the cause could not be identified automatically. This is usually not the plugin itself (it may relate to your local environment or the Plugin Hub). Please report the error to the Plugin Hub so the maintainers can triage it.",
662
+ failHubStateHint: "The plugin list is out of date or out of sync: the target of this {action} may already be in the list (use \"Update\" to upgrade), may no longer be in the installed list, or may already be queued. This is not a plugin problem — refresh the page and retry.",
663
+ failTimeoutHint: "This operation exceeded the local time limit and was interrupted — but it may well have taken effect already (the installer re-checks the installed list after a timeout). Refresh the page to confirm the current state; if it did not take effect, run the corresponding command in a terminal to see the full output. This is not a plugin problem.",
664
+ failProfileLockHint: "DSH timed out waiting for the file lock while writing the plugin list — usually because another DSH process or install task is writing the same profile (sometimes a previous run left the lock behind). Close other dsh windows or running commands, then retry; if it keeps happening, restart DSH once. This is not a plugin problem, and there is no need to repeat the {action}.",
665
+ failHostCliSpawnHint: "DSH could not start itself to perform this operation (the system reported that the executable was not found). This usually means the DSH installation folder has been moved or is being updated, or that the profile directory does not exist yet. Restart DSH and retry; if it keeps happening, reinstall DSH. This is not a plugin problem — other plugins would fail the same way.",
655
666
  failPrepareHint: "This plugin failed while running its build scripts during install (git tarballs often miss submodules or build output). This is a packaging issue of the plugin itself — please report it to the author repository.",
656
667
  failMisjudgeHint: "If this plugin actually installs fine (the verdict above is the Plugin Hub misjudging it), please report it to the Hub: that verdict is produced by the marketplace itself, so a false positive can only be found through your feedback.",
657
668
  failMisjudgeLink: "Plugin installs fine but got blocked? Report to the Plugin Hub",
658
669
  failPackagingHint: "This plugin does not support the official default install method: its git distribution lacks a file the package needs (the entry from `main` / `exports`, an entry its own patch mounts by name, or the patch declared by `dsh.bundle.patch`), so it has not been adapted to the official install flow. Please file an Issue on the author's repo asking for committed build output, a prebuilt release `.tgz` (`releases/download/<tag>/<asset>.tgz`), or a complete npm release.",
659
- failIgnoredBuild: "This plugin (or one of its dependencies) needs to run build scripts at install time, which pnpm blocks by default via its allowBuilds allowlist — so the install fails (e.g. native modules like node-pty, or the plugin's own prepare script on git installs). The installer already auto-allows that key and retries once; if it still fails, the build itself is usually the problem. Run the install command in a terminal to see the full build error; if it is indeed the plugin's build or distribution, the author can ship prebuilt output, an npm release, or a prebuilt .tgz. You can also report it to the Plugin Hub for triage.",
670
+ failIgnoredBuild: "This plugin (or one of its dependencies) needs to run build scripts at install time, which pnpm blocks by default via its allowBuilds allowlist — so this operation fails (e.g. native modules like node-pty, or the plugin's own prepare script on git installs). The installer already auto-allows that key and retries once; if it still fails, the build itself is usually the problem. Run the install command in a terminal to see the full build error; if it is indeed the plugin's build or distribution, the author can ship prebuilt output, an npm release, or a prebuilt .tgz. You can also report it to the Plugin Hub for triage.",
660
671
  failNpmTooLow: "Your local npm may be too old: npm crashed internally while resolving the plugin's dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest",
661
672
  failNpmTooLowV: "Your local npm is too old (v{v}): npm crashed internally while resolving the plugin's dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest",
662
- failNetworkHint: "The network could not be reached before install: the install source is unreachable (offline, DNS failure, firewall block, or a misconfigured proxy). This is not a problem with the plugin itself — please check your connection, confirm the HTTP proxy in Settings, run a connectivity check under System Diagnostics, then retry.",
673
+ failNetworkHint: "The network could not be reached before the {action}: the install source is unreachable (offline, DNS failure, firewall block, or a misconfigured proxy). This is not a problem with the plugin itself — please check your connection, confirm the HTTP proxy in Settings, run a connectivity check under System Diagnostics, then retry.",
663
674
  failNetworkRegistryHint: "Your npm/pnpm registry is set to {host}, and the package tarball could not be downloaded from it. This usually means a private/internal mirror that has not synced the package (or requires intranet auth) — point the registry back to https://registry.npmjs.org (or make sure this source can serve the package), then retry.",
664
675
  failNetworkTarget: "Cannot reach {url} — your network connection is down",
665
676
  failNetworkRunDiag: "Run a network diagnostic",
@@ -672,6 +683,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
672
683
  failPnpmUnusedPatchHint: "pnpm reported that some patches were not used (ERR_PNPM_UNUSED_PATCH): your profile still holds a patch entry for an older dsh-plugin version (for example dsh-plugin@1.4.2), while this install resolved a different version, so pnpm aborts the whole install for safety — no plugin can be installed into that profile. This is not a problem with the plugin itself. Remove that dsh-plugin patch entry from pnpm-workspace.yaml (pnpm 11+) or from pnpm.patchedDependencies in package.json (pnpm 10) inside the profile directory (~/.dsh/profiles/<profile>), then retry.",
673
684
  failPnpmMissingDepTarget: "{pkg} was not found on the npm registry (404)",
674
685
  failPnpmMissingDepHint: "pnpm reported that a package does not exist on the npm registry (ERR_PNPM_FETCH_404): your profile keeps a dependency on a package that was never published, and pnpm hits it every time it resolves dependencies — no plugin can be installed into that profile. This is not a problem with the plugin itself. Remove that dependency from package.json inside the profile directory (~/.dsh/profiles/<profile>) — along with its entry in pnpm-lock.yaml, or the lockfile itself — then retry.",
686
+ failRegistryMirrorLagHint: "pnpm reported that a package does not exist on the npm registry (ERR_PNPM_FETCH_404): that package does exist on the official npm registry, but the npm/pnpm registry (or mirror) configured on your machine has not synced it. Point the npm/pnpm registry back at the official one (https://registry.npmjs.org), or switch to a mirror that has the package, then retry. This is not a problem with the plugin itself.",
687
+ failPluginMissingDepTarget: "{pkg} does not exist on the official npm registry",
688
+ failPluginMissingDepHint: "A package this plugin depends on does not exist on the official npm registry (removed, or never published). This is a dependency problem on the plugin author side, not a problem with your environment. Please report it to the plugin repository so the author can fix that dependency or ship it together with the plugin.",
675
689
  failRegistryVersionStaleHint: "pnpm reported that no matching version was found (ERR_PNPM_NO_MATCHING_VERSION): the version being installed does not exist in the npm registry that actually performs the install. This usually means the npmRegistry configured in the hub differs from the source in your local ~/.npmrc — the official registry has published it but the mirror has not synced yet (it can take minutes to hours) — or the version number was simply mistyped. This is not a problem with the plugin itself. Align the hub's npmRegistry with your local ~/.npmrc (or the other way round), or explicitly use the official registry (https://registry.npmjs.org) for that one install, or use an offline package, then retry; if the version was published only recently, waiting for the mirror to sync is enough.",
676
690
  failPnpmLinkedDirMissingHint: "pnpm reported that a directory it needs to install from does not exist (ERR_PNPM_LINKED_PKG_DIR_NOT_FOUND): your profile keeps a local dependency (a link: / file: entry, e.g. from `dsh plugin add <local path>`) whose target directory has since been deleted or moved. pnpm hits it every time it resolves profile dependencies, so no plugin can be installed into that profile. This is not a problem with the plugin itself. Remove that local dependency from package.json inside the profile directory (~/.dsh/profiles/<profile>) — along with its entry in pnpm-lock.yaml, or the lockfile itself — or restore the directory to its original path, then retry.",
677
691
  failFileLockedHint: "During install, pnpm could not replace a file inside the profile because another program is holding it (on Windows this shows as os error 32, \"the process cannot access the file because it is being used by another process\"). Usually DeepSeek Harness itself or a real-time antivirus scan holds the handle. This is not a problem with the plugin itself — fully quit DeepSeek Harness (on Windows, confirm in Task Manager that the process has ended, and temporarily disable real-time antivirus protection if needed), then retry.",
@@ -738,42 +752,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
738
752
  css: css$11
739
753
  });
740
754
  var Header_module_css_default = {
741
- "brandTitle": "qikqja_brandTitle",
742
- "sortGroup": "qikqja_sortGroup",
743
- "tabActive": "qikqja_tabActive",
744
- "adBanner": "qikqja_adBanner",
745
- "segLabel": "qikqja_segLabel",
746
- "version": "qikqja_version",
755
+ "taglineLink": "qikqja_taglineLink",
756
+ "copyIcon": "qikqja_copyIcon",
757
+ "resultSeg": "qikqja_resultSeg",
758
+ "searchRow": "qikqja_searchRow",
747
759
  "logoIcon": "qikqja_logoIcon",
760
+ "tab": "qikqja_tab",
761
+ "adText": "qikqja_adText",
762
+ "versionBtn": "qikqja_versionBtn",
763
+ "segGroup": "qikqja_segGroup",
764
+ "headerRight": "qikqja_headerRight",
765
+ "segLabel": "qikqja_segLabel",
766
+ "adBadge": "qikqja_adBadge",
767
+ "controls": "qikqja_controls",
748
768
  "tabCount": "qikqja_tabCount",
749
- "taglineLink": "qikqja_taglineLink",
750
- "langBtn": "qikqja_langBtn",
769
+ "adArrow": "qikqja_adArrow",
751
770
  "githubLink": "qikqja_githubLink",
752
- "header": "qikqja_header",
753
- "title": "qikqja_title",
754
- "hubUpdateBadge": "qikqja_hubUpdateBadge",
771
+ "version": "qikqja_version",
755
772
  "segBtnActive": "qikqja_segBtnActive",
756
- "tabs": "qikqja_tabs",
757
- "tab": "qikqja_tab",
758
- "adArrow": "qikqja_adArrow",
759
- "tabsRow": "qikqja_tabsRow",
760
- "versionBtn": "qikqja_versionBtn",
761
- "tagline": "qikqja_tagline",
773
+ "tabActive": "qikqja_tabActive",
774
+ "sortGroup": "qikqja_sortGroup",
775
+ "hubUpdateBadge": "qikqja_hubUpdateBadge",
776
+ "langBtn": "qikqja_langBtn",
762
777
  "githubIcon": "qikqja_githubIcon",
763
778
  "aboutBtn": "qikqja_aboutBtn",
764
- "searchRow": "qikqja_searchRow",
779
+ "tagline": "qikqja_tagline",
765
780
  "segBtn": "qikqja_segBtn",
766
- "copyIcon": "qikqja_copyIcon",
767
- "adBadge": "qikqja_adBadge",
768
781
  "root": "qikqja_root",
769
782
  "resultCount": "qikqja_resultCount",
770
- "search": "qikqja_search",
771
- "headerRight": "qikqja_headerRight",
783
+ "header": "qikqja_header",
784
+ "adBanner": "qikqja_adBanner",
785
+ "tabsRow": "qikqja_tabsRow",
786
+ "tabs": "qikqja_tabs",
787
+ "title": "qikqja_title",
772
788
  "headerTitleRow": "qikqja_headerTitleRow",
773
- "controls": "qikqja_controls",
774
- "resultSeg": "qikqja_resultSeg",
775
- "adText": "qikqja_adText",
776
- "segGroup": "qikqja_segGroup"
789
+ "brandTitle": "qikqja_brandTitle",
790
+ "search": "qikqja_search"
777
791
  };
778
792
  //#endregion
779
793
  //#region \0dsh-css:src/client/styles/Modal.module.css.mjs
@@ -792,137 +806,137 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
792
806
  css: css$10
793
807
  });
794
808
  var Modal_module_css_default = {
795
- "noticeFoot": "BiQ1zG_noticeFoot",
796
- "hubUpdateModal": "BiQ1zG_hubUpdateModal",
797
- "uninstallConfirm": "BiQ1zG_uninstallConfirm",
798
- "progressHead": "BiQ1zG_progressHead",
799
- "overlayIn": "BiQ1zG_overlayIn",
800
- "failHead": "BiQ1zG_failHead",
801
- "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
802
- "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
803
- "queueRowTrack": "BiQ1zG_queueRowTrack",
804
- "failList": "BiQ1zG_failList",
805
- "modalWide": "BiQ1zG_modalWide",
806
- "modalClose": "BiQ1zG_modalClose",
807
- "confirmIcon": "BiQ1zG_confirmIcon",
808
809
  "modalCloseIcon": "BiQ1zG_modalCloseIcon",
809
- "queueRowTarget": "BiQ1zG_queueRowTarget",
810
- "linkIcon": "BiQ1zG_linkIcon",
811
- "modalTitleQueued": "BiQ1zG_modalTitleQueued",
812
- "dangerConfirm": "BiQ1zG_dangerConfirm",
813
- "toastIn": "BiQ1zG_toastIn",
814
- "toast": "BiQ1zG_toast",
815
- "queueRow": "BiQ1zG_queueRow",
816
- "modalCancel": "BiQ1zG_modalCancel",
817
- "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
818
- "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
819
- "failClear": "BiQ1zG_failClear",
820
- "noticeTextFail": "BiQ1zG_noticeTextFail",
821
- "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
822
- "errorCopySoft": "BiQ1zG_errorCopySoft",
823
- "detailRow": "BiQ1zG_detailRow",
824
- "aboutMeta": "BiQ1zG_aboutMeta",
825
- "errorBox": "BiQ1zG_errorBox",
826
- "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
827
- "detailArrow": "BiQ1zG_detailArrow",
828
- "cliOnlyHint": "BiQ1zG_cliOnlyHint",
829
- "noticeRowMain": "BiQ1zG_noticeRowMain",
830
- "failDiagBtn": "BiQ1zG_failDiagBtn",
831
- "noticeTextOk": "BiQ1zG_noticeTextOk",
832
- "detailPathBtn": "BiQ1zG_detailPathBtn",
833
- "failBigIssue": "BiQ1zG_failBigIssue",
834
- "toastFail": "BiQ1zG_toastFail",
835
- "queueRowStatus": "BiQ1zG_queueRowStatus",
836
- "modalIn": "BiQ1zG_modalIn",
837
- "failPrepareHint": "BiQ1zG_failPrepareHint",
838
- "detailModal": "BiQ1zG_detailModal",
839
- "confirmPrimary": "BiQ1zG_confirmPrimary",
840
- "queueRowPct": "BiQ1zG_queueRowPct",
841
810
  "progressFillFail": "BiQ1zG_progressFillFail",
842
- "detailUpdateHint": "BiQ1zG_detailUpdateHint",
843
- "detailStatusPending": "BiQ1zG_detailStatusPending",
844
- "noticeMain": "BiQ1zG_noticeMain",
845
- "noticeVersion": "BiQ1zG_noticeVersion",
846
- "queueSection": "BiQ1zG_queueSection",
847
- "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
848
- "detailDim": "BiQ1zG_detailDim",
849
- "detailStars": "BiQ1zG_detailStars",
850
- "logModal": "BiQ1zG_logModal",
851
811
  "resultDesc": "BiQ1zG_resultDesc",
852
- "failRow": "BiQ1zG_failRow",
853
- "confirmIconDanger": "BiQ1zG_confirmIconDanger",
854
- "failNetworkTarget": "BiQ1zG_failNetworkTarget",
812
+ "modalCmdText": "BiQ1zG_modalCmdText",
813
+ "resultTitle": "BiQ1zG_resultTitle",
814
+ "detailPathBtn": "BiQ1zG_detailPathBtn",
815
+ "errorCopySoft": "BiQ1zG_errorCopySoft",
855
816
  "modalInstall": "BiQ1zG_modalInstall",
856
- "resultCheck": "BiQ1zG_resultCheck",
817
+ "hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
818
+ "noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
819
+ "restartNow": "BiQ1zG_restartNow",
820
+ "modalActions": "BiQ1zG_modalActions",
821
+ "noticeMain": "BiQ1zG_noticeMain",
822
+ "queueRowStatus": "BiQ1zG_queueRowStatus",
823
+ "noticeVersion": "BiQ1zG_noticeVersion",
824
+ "failPrepareHint": "BiQ1zG_failPrepareHint",
825
+ "queueRow": "BiQ1zG_queueRow",
826
+ "progressHead": "BiQ1zG_progressHead",
827
+ "failList": "BiQ1zG_failList",
828
+ "detailArrow": "BiQ1zG_detailArrow",
829
+ "noticeList": "BiQ1zG_noticeList",
830
+ "failKindUninstall": "BiQ1zG_failKindUninstall",
857
831
  "modalLabel": "BiQ1zG_modalLabel",
832
+ "errorBox": "BiQ1zG_errorBox",
833
+ "resultCheck": "BiQ1zG_resultCheck",
834
+ "progressTrack": "BiQ1zG_progressTrack",
835
+ "confirmIcon": "BiQ1zG_confirmIcon",
836
+ "modalClose": "BiQ1zG_modalClose",
837
+ "linkIcon": "BiQ1zG_linkIcon",
838
+ "queueSection": "BiQ1zG_queueSection",
839
+ "stripCancel": "BiQ1zG_stripCancel",
840
+ "confirmPrimary": "BiQ1zG_confirmPrimary",
841
+ "progressFill": "BiQ1zG_progressFill",
842
+ "noticeRow": "BiQ1zG_noticeRow",
843
+ "noticeTextOk": "BiQ1zG_noticeTextOk",
844
+ "errorHint": "BiQ1zG_errorHint",
858
845
  "noticeRemove": "BiQ1zG_noticeRemove",
859
- "aboutContent": "BiQ1zG_aboutContent",
860
- "resultCheckIcon": "BiQ1zG_resultCheckIcon",
861
- "modalTitleBusy": "BiQ1zG_modalTitleBusy",
862
- "aboutModal": "BiQ1zG_aboutModal",
846
+ "failKindInstall": "BiQ1zG_failKindInstall",
847
+ "detailRow": "BiQ1zG_detailRow",
848
+ "detailStatusRunning": "BiQ1zG_detailStatusRunning",
849
+ "modalHead": "BiQ1zG_modalHead",
850
+ "errorModal": "BiQ1zG_errorModal",
851
+ "dangerConfirm": "BiQ1zG_dangerConfirm",
852
+ "detailMono": "BiQ1zG_detailMono",
853
+ "noticeTime": "BiQ1zG_noticeTime",
854
+ "toastFail": "BiQ1zG_toastFail",
855
+ "modalWide": "BiQ1zG_modalWide",
856
+ "hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
863
857
  "confirmIconWrap": "BiQ1zG_confirmIconWrap",
864
- "modalCmdText": "BiQ1zG_modalCmdText",
865
- "pendingRowStatus": "BiQ1zG_pendingRowStatus",
866
- "helpModal": "BiQ1zG_helpModal",
867
- "progressText": "BiQ1zG_progressText",
858
+ "detailStars": "BiQ1zG_detailStars",
868
859
  "queueSectionTitle": "BiQ1zG_queueSectionTitle",
869
- "modalCmd": "BiQ1zG_modalCmd",
870
- "failKindInstall": "BiQ1zG_failKindInstall",
871
- "noticeRow": "BiQ1zG_noticeRow",
860
+ "resultCheckIcon": "BiQ1zG_resultCheckIcon",
872
861
  "noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
873
- "detailMono": "BiQ1zG_detailMono",
874
- "restartNow": "BiQ1zG_restartNow",
875
- "result": "BiQ1zG_result",
876
- "modalBody": "BiQ1zG_modalBody",
877
- "trustHint": "BiQ1zG_trustHint",
878
- "detailValue": "BiQ1zG_detailValue",
879
- "detailLink": "BiQ1zG_detailLink",
880
- "detailStatusRunning": "BiQ1zG_detailStatusRunning",
881
- "errorHint": "BiQ1zG_errorHint",
882
- "modalLink": "BiQ1zG_modalLink",
883
- "failRepo": "BiQ1zG_failRepo",
884
- "modalDesc": "BiQ1zG_modalDesc",
885
- "modalCopy": "BiQ1zG_modalCopy",
886
- "modalRow": "BiQ1zG_modalRow",
887
- "queuedHint": "BiQ1zG_queuedHint",
888
- "detailPathActions": "BiQ1zG_detailPathActions",
889
- "modalCmdCopy": "BiQ1zG_modalCmdCopy",
890
- "modal": "BiQ1zG_modal",
891
- "stripCancel": "BiQ1zG_stripCancel",
892
862
  "noticeHead": "BiQ1zG_noticeHead",
863
+ "pendingRowStatus": "BiQ1zG_pendingRowStatus",
893
864
  "failCopy": "BiQ1zG_failCopy",
894
- "resultRestarting": "BiQ1zG_resultRestarting",
895
- "progressFill": "BiQ1zG_progressFill",
896
- "overlay": "BiQ1zG_overlay",
897
- "modalHead": "BiQ1zG_modalHead",
898
- "detailGrid": "BiQ1zG_detailGrid",
865
+ "hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
866
+ "detailDim": "BiQ1zG_detailDim",
867
+ "toast": "BiQ1zG_toast",
868
+ "failRow": "BiQ1zG_failRow",
869
+ "detailPathActions": "BiQ1zG_detailPathActions",
870
+ "trustHint": "BiQ1zG_trustHint",
899
871
  "pendingRowActions": "BiQ1zG_pendingRowActions",
900
- "modalValue": "BiQ1zG_modalValue",
872
+ "aboutMeta": "BiQ1zG_aboutMeta",
873
+ "detailValue": "BiQ1zG_detailValue",
901
874
  "modalTitle": "BiQ1zG_modalTitle",
875
+ "detailModal": "BiQ1zG_detailModal",
902
876
  "restartNowWarning": "BiQ1zG_restartNowWarning",
903
- "queueRowHead": "BiQ1zG_queueRowHead",
904
- "progress": "BiQ1zG_progress",
905
- "errorTitle": "BiQ1zG_errorTitle",
906
877
  "noticeIgnore": "BiQ1zG_noticeIgnore",
907
- "failEmpty": "BiQ1zG_failEmpty",
878
+ "detailStatusPending": "BiQ1zG_detailStatusPending",
879
+ "failBigIssue": "BiQ1zG_failBigIssue",
880
+ "modalRow": "BiQ1zG_modalRow",
881
+ "noticeFoot": "BiQ1zG_noticeFoot",
882
+ "modalCmdCopy": "BiQ1zG_modalCmdCopy",
883
+ "queueRowPct": "BiQ1zG_queueRowPct",
908
884
  "failedCopyHint": "BiQ1zG_failedCopyHint",
909
- "restartLater": "BiQ1zG_restartLater",
910
- "noticeTime": "BiQ1zG_noticeTime",
911
- "errorModal": "BiQ1zG_errorModal",
885
+ "modalCancel": "BiQ1zG_modalCancel",
886
+ "queueRowBody": "BiQ1zG_queueRowBody",
887
+ "failDiagBtn": "BiQ1zG_failDiagBtn",
888
+ "failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
889
+ "logModal": "BiQ1zG_logModal",
890
+ "cliOnlyHint": "BiQ1zG_cliOnlyHint",
891
+ "failClear": "BiQ1zG_failClear",
892
+ "noticeRowMain": "BiQ1zG_noticeRowMain",
893
+ "detailStatusText": "BiQ1zG_detailStatusText",
894
+ "modalCopy": "BiQ1zG_modalCopy",
895
+ "errorTitle": "BiQ1zG_errorTitle",
896
+ "result": "BiQ1zG_result",
897
+ "noticeTextFail": "BiQ1zG_noticeTextFail",
898
+ "failHead": "BiQ1zG_failHead",
899
+ "queueRowTarget": "BiQ1zG_queueRowTarget",
912
900
  "detailPath": "BiQ1zG_detailPath",
913
- "resultTitle": "BiQ1zG_resultTitle",
914
- "failKind": "BiQ1zG_failKind",
915
- "detailPathText": "BiQ1zG_detailPathText",
916
- "failKindUninstall": "BiQ1zG_failKindUninstall",
917
- "noticeList": "BiQ1zG_noticeList",
918
- "queueRowDesc": "BiQ1zG_queueRowDesc",
919
- "progressTrack": "BiQ1zG_progressTrack",
901
+ "hubUpdateModal": "BiQ1zG_hubUpdateModal",
902
+ "failRepo": "BiQ1zG_failRepo",
903
+ "uninstallConfirm": "BiQ1zG_uninstallConfirm",
904
+ "modalBody": "BiQ1zG_modalBody",
905
+ "modalValue": "BiQ1zG_modalValue",
906
+ "helpModal": "BiQ1zG_helpModal",
907
+ "failEmpty": "BiQ1zG_failEmpty",
908
+ "modalCmd": "BiQ1zG_modalCmd",
920
909
  "noticeRowOk": "BiQ1zG_noticeRowOk",
910
+ "detailLink": "BiQ1zG_detailLink",
911
+ "modalIn": "BiQ1zG_modalIn",
912
+ "noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
913
+ "confirmIconDanger": "BiQ1zG_confirmIconDanger",
914
+ "overlay": "BiQ1zG_overlay",
915
+ "toastIn": "BiQ1zG_toastIn",
916
+ "queueRowDesc": "BiQ1zG_queueRowDesc",
917
+ "noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
918
+ "modalTitleBusy": "BiQ1zG_modalTitleBusy",
919
+ "detailUpdateHint": "BiQ1zG_detailUpdateHint",
920
+ "modalDesc": "BiQ1zG_modalDesc",
921
+ "aboutContent": "BiQ1zG_aboutContent",
922
+ "queueRowHead": "BiQ1zG_queueRowHead",
923
+ "noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
924
+ "failKind": "BiQ1zG_failKind",
925
+ "progressText": "BiQ1zG_progressText",
926
+ "resultRestarting": "BiQ1zG_resultRestarting",
927
+ "failNetworkTarget": "BiQ1zG_failNetworkTarget",
928
+ "modalLink": "BiQ1zG_modalLink",
929
+ "detailGrid": "BiQ1zG_detailGrid",
930
+ "overlayIn": "BiQ1zG_overlayIn",
931
+ "progress": "BiQ1zG_progress",
932
+ "aboutModal": "BiQ1zG_aboutModal",
921
933
  "detailLabel": "BiQ1zG_detailLabel",
922
- "queueRowBody": "BiQ1zG_queueRowBody",
923
- "detailStatusText": "BiQ1zG_detailStatusText",
924
- "failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
925
- "modalActions": "BiQ1zG_modalActions"
934
+ "modalTitleQueued": "BiQ1zG_modalTitleQueued",
935
+ "restartLater": "BiQ1zG_restartLater",
936
+ "queueRowTrack": "BiQ1zG_queueRowTrack",
937
+ "queuedHint": "BiQ1zG_queuedHint",
938
+ "modal": "BiQ1zG_modal",
939
+ "detailPathText": "BiQ1zG_detailPathText"
926
940
  };
927
941
  //#endregion
928
942
  //#region src/server/services/install/release-target.ts
@@ -1036,7 +1050,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1036
1050
  * tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
1037
1051
  * node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
1038
1052
  */
1039
- const PLUGIN_VERSION = "1.6.10";
1053
+ const PLUGIN_VERSION = "1.6.12";
1040
1054
  const CATEGORY_ORDER = [
1041
1055
  "interface",
1042
1056
  "session",
@@ -1673,7 +1687,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1673
1687
  * registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
1674
1688
  * 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
1675
1689
  */
1676
- const hubCurrentVersion = "1.6.10";
1690
+ const hubCurrentVersion = "1.6.12";
1677
1691
  const hubUpdateState = (() => {
1678
1692
  if (!hubUpdateInfo) return "none";
1679
1693
  if (hubUpdateInfo.version === hubCurrentVersion) return "latest";
@@ -1865,6 +1879,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1865
1879
  save(next);
1866
1880
  return next;
1867
1881
  }
1882
+ /** 动作词(英文):名词短语,标题与句子里都成立。 */
1883
+ function actionWordEn(action) {
1884
+ return action === "uninstall" ? "removal" : action === "update" ? "update" : "install";
1885
+ }
1886
+ /** 动作词(中文):安装 / 更新 / 卸载。 */
1887
+ function actionWordZh(action) {
1888
+ return action === "uninstall" ? "卸载" : action === "update" ? "更新" : "安装";
1889
+ }
1890
+ /** 记录的动作:老记录只有 kind,按 kind 兜底。 */
1891
+ function actionOfRecord(rec) {
1892
+ if (rec.action !== void 0) return rec.action;
1893
+ return rec.kind === "uninstall" ? "uninstall" : rec.kind === "update" ? "update" : "install";
1894
+ }
1868
1895
  /** Match the pnpm error code, not a generic mention of checksum or integrity. */
1869
1896
  function missingTarballIntegrity(message) {
1870
1897
  return /\bERR_PNPM_MISSING_TARBALL_INTEGRITY\b/.test(message);
@@ -1913,6 +1940,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1913
1940
  if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
1914
1941
  if (/\[network\]|ERR_PNPM_GIT_FETCH_FAILED|ETIMEDOUT|ECONNREFUSED|ECONNRESET|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH|getaddrinfo|Could not connect|Could not resolve host|Network unreachable|Failed to connect|socket hang up|CERT_HAS_EXPIRED|SSL certificate problem|\bTLS\b|\bSSL\b|fetch failed|failed to fetch|\bGET https?:\/\/\S+\.tgz\s+error \(\d+\)/i.test(message)) return "network";
1915
1942
  if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
1943
+ if (/\[registry-missing\]/i.test(message)) return "pluginMissingDep";
1916
1944
  if (/ERR_PNPM_FETCH_404|404 Not Found|Not Found - 404/i.test(message)) return "pnpmMissingDep";
1917
1945
  if (/\bERR_PNPM_NO_MATCHING_VERSION\b|\bETARGET\b|No matching version found/i.test(message)) return "registryVersionStale";
1918
1946
  if (/\bERR_PNPM_LINKED_PKG_DIR_NOT_FOUND\b|Could not install from .+ as it does not exist/i.test(message)) return "pnpmLinkedDirMissing";
@@ -1920,6 +1948,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1920
1948
  if (/plugin is not installed|plugin cannot be uninstalled here|already queued:|^already installed: \S+$/im.test(message)) return "hubState";
1921
1949
  if (/^\[timed out\]$/m.test(message)) return "timeout";
1922
1950
  if (/atomic-write: timed out waiting for the writer lock|timed out waiting for the writer lock/i.test(message)) return "profileLock";
1951
+ if (/git-hosted plugins build on install via their prepare script|add the exact key pnpm printed above under allowBuilds/i.test(message)) return "pnpmIgnoredBuild";
1952
+ if (/\[host-spawn\]/i.test(message)) return "hostCliSpawn";
1923
1953
  return "hub";
1924
1954
  }
1925
1955
  /** 从服务端 `[npm-too-low]` 标记行提取本机 npm 版本(如 `[npm-too-low] npm@11.3.0` → "11.3.0");
@@ -1977,13 +2007,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
1977
2007
  const m = message.match(/\[?ERR_[A-Z0-9_]+\]?/);
1978
2008
  return m ? m[0].replace(/^\[|\]$/g, "") : null;
1979
2009
  }
2010
+ /** 「包在 registry 不存在」失败的提示变体:服务端用官方源复核过(会注入 `[registry-mirror-lag]`)
2011
+ * 时,说明包在官方源上存在、是本机镜像源未同步 → 提示换源;否则沿用既有的「profile 残留依赖」
2012
+ * 提示(#73:指向从未发布包的残留条目,任何插件都装不进来)。 */
2013
+ function registryMissingHintOf(message) {
2014
+ return /\[registry-mirror-lag\]/i.test(message) ? "failRegistryMirrorLagHint" : "failPnpmMissingDepHint";
2015
+ }
1980
2016
  /** 提取「registry 上不存在的包名」:从 404 行(`ERR_PNPM_FETCH_404 GET <registry>/<pkg>: Not Found - 404`)
1981
2017
  * 里取请求路径中的包名(含 scope,如 `@scope/name`);非 404 或提取不到返回 null。 */
1982
2018
  function missingRegistryPackageOf(message) {
1983
2019
  for (const line of message.split(/\r?\n/)) {
1984
2020
  if (!/ERR_PNPM_FETCH_404|404/.test(line)) continue;
1985
2021
  const m = line.match(/GET\s+https?:\/\/[^\s/]+\/((?:@[^/\s:]+\/)?[^/\s:]+)/);
1986
- if (m) return m[1];
2022
+ if (m) return m[1].replace(/%40/gi, "@").replace(/%2f/gi, "/");
1987
2023
  }
1988
2024
  return null;
1989
2025
  }
@@ -2048,18 +2084,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2048
2084
  function pluginSiteUrl(repo) {
2049
2085
  return siteUrl(`plugins/${repo}`);
2050
2086
  }
2051
- /** 按失败类型给出简洁的错误原因标题(对外用英文):
2052
- * 标题直接点明问题出在哪一侧(构建白名单/分发物/本机 npm/网络/插件侧),
2053
- * 让作者与用户扫一眼列表就能分流,而不是笼统的 Install/Remove 动作词。 */
2054
- function reasonTitleOf(kind) {
2087
+ /** 错误原因标题(对外英文):点明问题出在哪一侧,便于 issue 列表分流;
2088
+ * 动作级原因(未分类/超时…)带动作词,卸载失败不写成 install failed。 */
2089
+ function reasonTitleOf(kind, action) {
2090
+ const word = actionWordEn(action);
2055
2091
  switch (kind) {
2056
- case "npmTooOld": return "npm too old to install";
2092
+ case "npmTooOld": return `npm too old for this ${word}`;
2057
2093
  case "dshMissing": return "dsh command not found on the user machine";
2058
2094
  case "pnpmMissing": return "pnpm command not found on the user machine";
2059
2095
  case "pnpmStore": return "pnpm store version mismatch on the user machine";
2060
- case "pnpmWorkspace": return "pnpm workspace-root check blocked the install on the user machine";
2096
+ case "pnpmWorkspace": return `pnpm workspace-root check blocked the ${word} on the user machine`;
2061
2097
  case "originRejected": return "request origin rejected by the local service on the user machine";
2062
- case "pnpmPolicy": return "pnpm supply-chain policy blocked the install on the user machine";
2098
+ case "pnpmPolicy": return `pnpm supply-chain policy blocked the ${word} on the user machine`;
2063
2099
  case "pnpmUnusedPatch": return "stale pnpm patch entry on the user machine";
2064
2100
  case "pnpmMissingDep": return "dependency not found on the npm registry on the user machine";
2065
2101
  case "registryVersionStale": return "requested version not available on the npm registry in use on the user machine";
@@ -2070,11 +2106,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2070
2106
  case "pnpmIgnoredBuild": return "build scripts blocked by pnpm allowlist";
2071
2107
  case "pluginPrepare": return "plugin distribution incomplete";
2072
2108
  case "network": return "network failure on the user side";
2073
- case "hubState": return "stale install state in the plugin hub";
2074
- case "timeout": return "install timed out";
2109
+ case "hostCliSpawn": return "the DSH host could not be launched on the user machine";
2110
+ case "hubState": return `stale ${word} state in the plugin hub`;
2111
+ case "timeout": return `${word} timed out`;
2075
2112
  case "profileLock": return "DSH profile is locked by another process";
2076
- case "hub": return "install failed (cause unclassified)";
2077
- default: return "plugin install failed";
2113
+ case "pluginMissingDep": return "a dependency of the plugin is not published on npm";
2114
+ case "hub": return `${word} failed (cause unclassified)`;
2115
+ default: return `plugin ${word} failed`;
2078
2116
  }
2079
2117
  }
2080
2118
  /**
@@ -2086,11 +2124,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2086
2124
  * attempts(尝试过的安装方式,npm 反查 + 实际执行命令):作者看到我们查过/试过的命令,
2087
2125
  * 组织 scope 与 GitHub 用户名不一致时也能直接指认正确的 npm 包名。
2088
2126
  */
2089
- function pluginIssueUrl(repo, message, env, command, attempts) {
2127
+ function pluginIssueUrl(repo, message, env, command, attempts, action = "install") {
2090
2128
  const kind = classifyFailure(message);
2091
2129
  const executed = executedCommandOf(command, attempts);
2092
- const title = `[dsh-plugin.org | dsh-plugin-hub] ${reasonTitleOf(kind)}: ${repo}`;
2093
- const reason = /\[packaging\]/i.test(message) ? "plugin distribution is incomplete — a file the package needs (its entry from main / exports, an entry a bundled patch mounts, or the patch declared by dsh.bundle.patch) is missing from the published package (github tarball or npm package); please commit build output or publish a complete package" : kind === "network" ? "network connectivity issue on the user side (DNS, proxy, firewall, or a blocked connection)" : kind === "pluginPrepare" ? "plugin prepare/build script failed during install (packaging/distribution issue)" : kind === "pnpmIgnoredBuild" ? "plugin depends on a native module whose build script pnpm blocks by default (use a prebuilt variant)" : kind === "originRejected" ? "the request never reached the install flow — the local service rejected its origin (local environment issue)" : kind === "pnpmPolicy" ? pnpmPolicyHintOf(message) === "failPnpmTarballIntegrityHint" ? "pnpm rejected a lockfile entry without tarball integrity; inspect and back up the profile lockfile before resolving it again, keeping integrity checks enabled" : "the pnpm supply-chain policy on the user machine blocked the install (minimum release age for freshly published packages / untrusted origin)" : kind === "pnpmUnusedPatch" ? "the profile keeps a pnpm patch entry for an older dsh-plugin version, so pnpm aborted the install (local config issue)" : kind === "fileLocked" ? "a file in the profile is locked by another process on the user machine (local environment issue)" : kind === "accessDenied" ? "the system denied write access to a file in the profile on the user machine (local environment issue)" : kind === "fsUnavailable" ? "the local file system could not accept the write — no space left, read-only volume, or too many open file handles on the user machine (local environment issue)" : "plugin-side install failure";
2130
+ const zhWord = actionWordZh(action);
2131
+ const title = `[dsh-plugin.org | dsh-plugin-hub] ${reasonTitleOf(kind, action)}: ${repo}`;
2132
+ const reason = /\[packaging\]/i.test(message) ? "plugin distribution is incomplete — a file the package needs (its entry from main / exports, an entry a bundled patch mounts, or the patch declared by dsh.bundle.patch) is missing from the published package (github tarball or npm package); please commit build output or publish a complete package" : /\[registry-missing\]/i.test(message) ? "a dependency declared by the plugin is not published on the public npm registry (missing, removed, or never released); please publish or correct that dependency, or ship it with the plugin" : kind === "network" ? "network connectivity issue on the user side (DNS, proxy, firewall, or a blocked connection)" : kind === "pluginPrepare" ? "plugin prepare/build script failed during install (packaging/distribution issue)" : kind === "pnpmIgnoredBuild" ? "plugin depends on a native module whose build script pnpm blocks by default (use a prebuilt variant)" : kind === "originRejected" ? "the request never reached the install flow — the local service rejected its origin (local environment issue)" : kind === "pnpmPolicy" ? pnpmPolicyHintOf(message) === "failPnpmTarballIntegrityHint" ? "pnpm rejected a lockfile entry without tarball integrity; inspect and back up the profile lockfile before resolving it again, keeping integrity checks enabled" : "the pnpm supply-chain policy on the user machine blocked the install (minimum release age for freshly published packages / untrusted origin)" : kind === "pnpmUnusedPatch" ? "the profile keeps a pnpm patch entry for an older dsh-plugin version, so pnpm aborted the install (local config issue)" : kind === "fileLocked" ? "a file in the profile is locked by another process on the user machine (local environment issue)" : kind === "accessDenied" ? "the system denied write access to a file in the profile on the user machine (local environment issue)" : kind === "fsUnavailable" ? "the local file system could not accept the write — no space left, read-only volume, or too many open file handles on the user machine (local environment issue)" : "plugin-side install failure";
2094
2133
  const code = coreErrorCode(message);
2095
2134
  const build = (coreChars) => {
2096
2135
  const body = [
@@ -2098,13 +2137,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2098
2137
  `- Cause: ${reason}`,
2099
2138
  ...code ? [`- Key error: \`${code}\``] : [],
2100
2139
  "",
2101
- `## [DSH Plugin 插件市场](${SITE_URL}) · 安装 Plugin 失败错误信息`,
2102
- `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件市场的安装程序自动生成,随本次安装失败一并提交。`,
2103
- `- 实际执行的安装命令:${executed ? `\`${executed}\`` : "unknown (no executed command recorded)"}`,
2104
- `- 执行结果:安装失败,未能安装该插件。`,
2140
+ `## [DSH Plugin 插件市场](${SITE_URL}) · ${zhWord} Plugin 失败错误信息`,
2141
+ `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件市场的安装程序自动生成,随本次${zhWord}失败一并提交。`,
2142
+ `- 实际执行的${zhWord}命令:${executed ? `\`${executed}\`` : "unknown (no executed command recorded)"}`,
2143
+ `- 执行结果:${zhWord}失败,未能${zhWord}该插件。`,
2105
2144
  ...attempts && attempts.length > 0 ? [
2106
2145
  "",
2107
- "## Attempted install channels(已尝试的安装方式)",
2146
+ "## Attempted channels(已尝试的方式)",
2108
2147
  ...attempts.map((a) => `- ${a}`)
2109
2148
  ] : [],
2110
2149
  .../\[packaging\]/i.test(message) ? [
@@ -2154,27 +2193,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
2154
2193
  }
2155
2194
  return url;
2156
2195
  }
2157
- function hubIssueUrl(pluginRepo, message, env, command, attempts, variant = "triage") {
2196
+ function hubIssueUrl(pluginRepo, message, env, command, attempts, variant = "triage", action = "install") {
2158
2197
  const kind = classifyFailure(message);
2159
2198
  const executed = executedCommandOf(command, attempts);
2199
+ const zhWord = actionWordZh(action);
2160
2200
  const repo = pluginRepo && pluginRepo.trim() !== "" ? pluginRepo.trim() : "unknown";
2161
- const title = variant === "misjudge" ? `[dsh-plugin-hub] possible misjudgment: ${repo}` : `[dsh-plugin-hub] ${reasonTitleOf(kind)}: ${repo}`;
2201
+ const title = variant === "misjudge" ? `[dsh-plugin-hub] possible misjudgment: ${repo}` : `[dsh-plugin-hub] ${reasonTitleOf(kind, action)}: ${repo}`;
2162
2202
  const code = coreErrorCode(message);
2163
2203
  const build = (coreChars) => {
2164
2204
  const body = [
2165
2205
  "## Summary",
2166
- `- Auto-classified cause: ${reasonTitleOf(kind)}`,
2206
+ `- Auto-classified cause: ${reasonTitleOf(kind, action)}`,
2167
2207
  `- Target plugin: \`${repo}\``,
2168
2208
  ...code ? [`- Key error: \`${code}\``] : [],
2169
2209
  ...variant === "misjudge" ? ["- Filed from: the plugin-prepare path (which normally routes to the plugin repo) — filed here because that verdict may be our own misjudgment.", "- Source of that verdict: produced by dsh-plugin-hub's own pre/post-install check, not by pnpm output."] : ["- Why filed here: the installer only routes a failure to the plugin repo when there is positive evidence the plugin build itself failed (pluginPrepare). This failure does not match that, so it is routed here for triage."],
2170
2210
  "",
2171
- `## [DSH Plugin 插件市场](${SITE_URL}) · 安装 Plugin 失败错误信息`,
2172
- `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件市场的安装程序自动生成,随本次安装失败一并提交。`,
2173
- `- 实际执行的安装命令:${executed ? `\`${executed}\`` : "unknown (no executed command recorded)"}`,
2174
- `- 执行结果:安装失败,未能安装该插件。`,
2211
+ `## [DSH Plugin 插件市场](${SITE_URL}) · ${zhWord} Plugin 失败错误信息`,
2212
+ `本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件市场的安装程序自动生成,随本次${zhWord}失败一并提交。`,
2213
+ `- 实际执行的${zhWord}命令:${executed ? `\`${executed}\`` : "unknown (no executed command recorded)"}`,
2214
+ `- 执行结果:${zhWord}失败,未能${zhWord}该插件。`,
2175
2215
  ...attempts && attempts.length > 0 ? [
2176
2216
  "",
2177
- "## Attempted install channels(已尝试的安装方式)",
2217
+ "## Attempted channels(已尝试的方式)",
2178
2218
  ...attempts.map((a) => `- ${a}`)
2179
2219
  ] : [],
2180
2220
  "",
@@ -3509,10 +3549,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3509
3549
  onClick: onConfirm
3510
3550
  }, busy ? task && task.status === "pending" ? t("queuedUninstallTitle") : t("uninstalling") : t("uninstallConfirm"))))));
3511
3551
  }
3512
- /** 预填插件仓库的 GitHub Issue 链接:标题带插件名,正文附完整错误信息,方便用户一键反馈。 */
3513
- /** 安装/卸载失败弹窗:布局与失败记录一致(类型徽标 + 仓库超链接 + 隐蔽复制按钮),报错完整展示,底部一键提交 Issue。 */
3514
- function ErrorModal({ message, repo, kind, command, attempts, t, env, onCopy, onClose, onRunDiagnostics }) {
3552
+ /** 安装/更新/卸载失败弹窗:标题、徽标、提示文案与 issue 正文都按传入的动作取词。 */
3553
+ function ErrorModal({ message, repo, action, command, attempts, t, env, onCopy, onClose, onRunDiagnostics }) {
3515
3554
  const failureKind = classifyFailure(message);
3555
+ const actionWord = t(action === "uninstall" ? "actionUninstall" : action === "update" ? "actionUpdate" : "actionInstall");
3516
3556
  const npmVersion = npmTooLowVersion(message);
3517
3557
  const copyText = [
3518
3558
  ...command ? [command] : [],
@@ -3528,11 +3568,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3528
3568
  className: Modal_module_css_default.errorModal,
3529
3569
  role: "dialog",
3530
3570
  "aria-modal": "true"
3531
- }, (0, react.createElement)("div", { className: Modal_module_css_default.modalHead }, (0, react.createElement)("div", { className: Modal_module_css_default.errorTitle }, kind === "install" ? t("errorTitleInstall") : t("errorTitleUninstall")), (0, react.createElement)("button", {
3571
+ }, (0, react.createElement)("div", { className: Modal_module_css_default.modalHead }, (0, react.createElement)("div", { className: Modal_module_css_default.errorTitle }, t(action === "uninstall" ? "errorTitleUninstall" : action === "update" ? "errorTitleUpdate" : "errorTitleInstall")), (0, react.createElement)("button", {
3532
3572
  className: Modal_module_css_default.modalClose,
3533
3573
  "aria-label": t("errorClose"),
3534
3574
  onClick: onClose
3535
- }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.failRow }, (0, react.createElement)("div", { className: Modal_module_css_default.failHead }, (0, react.createElement)("span", { className: kind === "install" ? Modal_module_css_default.failKindInstall : Modal_module_css_default.failKindUninstall }, kind === "install" ? t("install") : t("uninstall")), repo ? (0, react.createElement)("a", {
3575
+ }, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalBody }, (0, react.createElement)("div", { className: Modal_module_css_default.failRow }, (0, react.createElement)("div", { className: Modal_module_css_default.failHead }, (0, react.createElement)("span", { className: action === "install" ? Modal_module_css_default.failKindInstall : Modal_module_css_default.failKindUninstall }, actionWord), repo ? (0, react.createElement)("a", {
3536
3576
  className: Modal_module_css_default.failRepo,
3537
3577
  href: pluginSiteUrl(repo),
3538
3578
  target: "_blank",
@@ -3544,7 +3584,20 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3544
3584
  }, 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 === "pnpmWorkspace" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint")) : 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(pnpmPolicyHintOf(message), pnpmPolicyHintParams(message))) : failureKind === "pnpmUnusedPatch" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint")) : failureKind === "pnpmMissingDep" ? (0, react.createElement)("div", null, [(() => {
3545
3585
  const pkg = missingRegistryPackageOf(message);
3546
3586
  return pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPnpmMissingDepTarget", { pkg })) : null;
3547
- })(), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingDepHint"))]) : failureKind === "registryVersionStale" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failRegistryVersionStaleHint")) : failureKind === "pnpmLinkedDirMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmLinkedDirMissingHint")) : failureKind === "fileLocked" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFileLockedHint")) : failureKind === "accessDenied" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failAccessDeniedHint")) : failureKind === "fsUnavailable" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFsUnavailableHint")) : failureKind === "originRejected" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failOriginRejectedHint", { profile: env?.profile ?? "<profile>" })) : failureKind === "network" ? (0, react.createElement)("div", null, [
3587
+ })(), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(registryMissingHintOf(message)))]) : failureKind === "pluginMissingDep" ? (0, react.createElement)("div", null, [
3588
+ (() => {
3589
+ const pkg = missingRegistryPackageOf(message);
3590
+ return pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPluginMissingDepTarget", { pkg })) : null;
3591
+ })(),
3592
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPluginMissingDepHint")),
3593
+ repo ? (0, react.createElement)("a", {
3594
+ className: Modal_module_css_default.failBigIssue,
3595
+ href: pluginIssueUrl(repo, message, env, command, attempts, action),
3596
+ target: "_blank",
3597
+ rel: "noopener noreferrer",
3598
+ title: t("failIssueHint")
3599
+ }, t("failIssueBig")) : null
3600
+ ]) : failureKind === "registryVersionStale" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failRegistryVersionStaleHint")) : failureKind === "pnpmLinkedDirMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmLinkedDirMissingHint")) : failureKind === "fileLocked" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFileLockedHint")) : failureKind === "accessDenied" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failAccessDeniedHint")) : failureKind === "fsUnavailable" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFsUnavailableHint")) : failureKind === "originRejected" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failOriginRejectedHint", { profile: env?.profile ?? "<profile>" })) : failureKind === "network" ? (0, react.createElement)("div", null, [
3548
3601
  (() => {
3549
3602
  const target = unreachableTargetOf(message);
3550
3603
  return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
@@ -3553,7 +3606,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3553
3606
  const host = registryHostOf(message);
3554
3607
  return host ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkRegistryHint", { host })) : null;
3555
3608
  })(),
3556
- (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
3609
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint", { action: actionWord })),
3557
3610
  onRunDiagnostics ? (0, react.createElement)("button", {
3558
3611
  className: Modal_module_css_default.failDiagBtn,
3559
3612
  onClick: onRunDiagnostics
@@ -3562,21 +3615,21 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
3562
3615
  (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, /\[packaging\]/i.test(message) ? t("failPackagingHint") : t("failPrepareHint")),
3563
3616
  repo ? (0, react.createElement)("a", {
3564
3617
  className: Modal_module_css_default.failBigIssue,
3565
- href: pluginIssueUrl(repo, message, env, command, attempts),
3618
+ href: pluginIssueUrl(repo, message, env, command, attempts, action),
3566
3619
  target: "_blank",
3567
3620
  rel: "noopener noreferrer",
3568
3621
  title: t("failIssueHint")
3569
3622
  }, t("failIssueBig")) : null,
3570
3623
  repo ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failMisjudgeHint")), (0, react.createElement)("a", {
3571
3624
  className: Modal_module_css_default.failMisjudgeLink,
3572
- href: hubIssueUrl(repo, message, env, command, attempts, "misjudge"),
3625
+ href: hubIssueUrl(repo, message, env, command, attempts, "misjudge", action),
3573
3626
  target: "_blank",
3574
3627
  rel: "noopener noreferrer",
3575
3628
  title: t("failHubIssueHint")
3576
3629
  }, t("failMisjudgeLink"))]) : null
3577
- ]) : failureKind === "hubState" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failHubStateHint"))]) : failureKind === "timeout" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failTimeoutHint"))]) : failureKind === "profileLock" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileLockHint"))]) : (0, react.createElement)("div", null, [failureKind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failIgnoredBuild")) : (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failUnclassifiedHint")), (0, react.createElement)("a", {
3630
+ ]) : failureKind === "hubState" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failHubStateHint", { action: actionWord }))]) : failureKind === "timeout" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failTimeoutHint"))]) : failureKind === "profileLock" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileLockHint", { action: actionWord }))]) : failureKind === "hostCliSpawn" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failHostCliSpawnHint"))]) : (0, react.createElement)("div", null, [failureKind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failIgnoredBuild")) : (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failUnclassifiedHint", { action: actionWord })), (0, react.createElement)("a", {
3578
3631
  className: Modal_module_css_default.failBigIssue,
3579
- href: hubIssueUrl(repo, message, env, command, attempts),
3632
+ href: hubIssueUrl(repo, message, env, command, attempts, "triage", action),
3580
3633
  target: "_blank",
3581
3634
  rel: "noopener noreferrer",
3582
3635
  title: t("failHubIssueHint")
@@ -4112,6 +4165,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4112
4165
  }
4113
4166
  }, (0, react.createElement)(CloseIcon))), !r.ok && (() => {
4114
4167
  const kind = classifyFailure(r.message);
4168
+ const action = actionOfRecord(r);
4169
+ const actionWord = t(action === "uninstall" ? "actionUninstall" : action === "update" ? "actionUpdate" : "actionInstall");
4115
4170
  if (kind === "npmTooOld") {
4116
4171
  const v = npmTooLowVersion(r.message);
4117
4172
  return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(v ? "failNpmTooLowV" : "failNpmTooLow", v ? { v } : void 0));
@@ -4126,7 +4181,21 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4126
4181
  if (kind === "pnpmUnusedPatch") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint"));
4127
4182
  if (kind === "pnpmMissingDep") {
4128
4183
  const pkg = missingRegistryPackageOf(r.message);
4129
- return (0, react.createElement)("div", null, [pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPnpmMissingDepTarget", { pkg })) : null, (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingDepHint"))]);
4184
+ return (0, react.createElement)("div", null, [pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPnpmMissingDepTarget", { pkg })) : null, (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(registryMissingHintOf(r.message)))]);
4185
+ }
4186
+ if (kind === "pluginMissingDep") {
4187
+ const pkg = missingRegistryPackageOf(r.message);
4188
+ return (0, react.createElement)("div", null, [
4189
+ pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPluginMissingDepTarget", { pkg })) : null,
4190
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPluginMissingDepHint")),
4191
+ r.repo && shownRepo ? (0, react.createElement)("a", {
4192
+ className: Modal_module_css_default.failBigIssue,
4193
+ href: pluginIssueUrl(shownRepo, r.message, env, r.command, r.attempts, action),
4194
+ target: "_blank",
4195
+ rel: "noopener noreferrer",
4196
+ title: t("failIssueHint")
4197
+ }, t("failIssueBig")) : null
4198
+ ]);
4130
4199
  }
4131
4200
  if (kind === "registryVersionStale") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failRegistryVersionStaleHint"));
4132
4201
  if (kind === "pnpmLinkedDirMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmLinkedDirMissingHint"));
@@ -4143,7 +4212,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4143
4212
  const host = registryHostOf(r.message);
4144
4213
  return host ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkRegistryHint", { host })) : null;
4145
4214
  })(),
4146
- (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint")),
4215
+ (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNetworkHint", { action: actionWord })),
4147
4216
  onRunDiagnostics ? (0, react.createElement)("button", {
4148
4217
  className: Modal_module_css_default.failDiagBtn,
4149
4218
  onClick: onRunDiagnostics
@@ -4153,25 +4222,26 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4153
4222
  (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, /\[packaging\]/i.test(r.message) ? t("failPackagingHint") : t("failPrepareHint")),
4154
4223
  r.repo && shownRepo ? (0, react.createElement)("a", {
4155
4224
  className: Modal_module_css_default.failBigIssue,
4156
- href: pluginIssueUrl(shownRepo, r.message, env, r.command, r.attempts),
4225
+ href: pluginIssueUrl(shownRepo, r.message, env, r.command, r.attempts, action),
4157
4226
  target: "_blank",
4158
4227
  rel: "noopener noreferrer",
4159
4228
  title: t("failIssueHint")
4160
4229
  }, t("failIssueBig")) : null,
4161
4230
  r.repo && shownRepo ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failMisjudgeHint")), (0, react.createElement)("a", {
4162
4231
  className: Modal_module_css_default.failMisjudgeLink,
4163
- href: hubIssueUrl(shownRepo, r.message, env, r.command, r.attempts, "misjudge"),
4232
+ href: hubIssueUrl(shownRepo, r.message, env, r.command, r.attempts, "misjudge", action),
4164
4233
  target: "_blank",
4165
4234
  rel: "noopener noreferrer",
4166
4235
  title: t("failHubIssueHint")
4167
4236
  }, t("failMisjudgeLink"))]) : null
4168
4237
  ]);
4169
- if (kind === "hubState") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failHubStateHint"))]);
4238
+ if (kind === "hubState") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failHubStateHint", { action: actionWord }))]);
4170
4239
  if (kind === "timeout") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failTimeoutHint"))]);
4171
- if (kind === "profileLock") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileLockHint"))]);
4172
- return (0, react.createElement)("div", null, [kind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failIgnoredBuild")) : (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failUnclassifiedHint")), (0, react.createElement)("a", {
4240
+ if (kind === "profileLock") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileLockHint", { action: actionWord }))]);
4241
+ if (kind === "hostCliSpawn") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failHostCliSpawnHint"))]);
4242
+ return (0, react.createElement)("div", null, [kind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failIgnoredBuild")) : (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failUnclassifiedHint", { action: actionWord })), (0, react.createElement)("a", {
4173
4243
  className: Modal_module_css_default.failBigIssue,
4174
- href: hubIssueUrl(shownRepo || r.repo, r.message, env, r.command, r.attempts),
4244
+ href: hubIssueUrl(shownRepo || r.repo, r.message, env, r.command, r.attempts, "triage", action),
4175
4245
  target: "_blank",
4176
4246
  rel: "noopener noreferrer",
4177
4247
  title: t("failHubIssueHint")
@@ -4356,40 +4426,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4356
4426
  css: css$9
4357
4427
  });
4358
4428
  var List_module_css_default = {
4429
+ "list": "_3XaZHa_list",
4430
+ "verified": "_3XaZHa_verified",
4431
+ "body": "_3XaZHa_body",
4432
+ "topics": "_3XaZHa_topics",
4433
+ "cardSide": "_3XaZHa_cardSide",
4359
4434
  "state": "_3XaZHa_state",
4360
- "actions": "_3XaZHa_actions",
4361
- "stats": "_3XaZHa_stats",
4435
+ "stateDesc": "_3XaZHa_stateDesc",
4362
4436
  "retryBtn": "_3XaZHa_retryBtn",
4363
- "list": "_3XaZHa_list",
4364
4437
  "stateActions": "_3XaZHa_stateActions",
4365
- "moreSentinel": "_3XaZHa_moreSentinel",
4366
- "diagBtn": "_3XaZHa_diagBtn",
4367
- "uninstallBtn": "_3XaZHa_uninstallBtn",
4368
- "installBtnCopied": "_3XaZHa_installBtnCopied",
4369
- "categoryBadge": "_3XaZHa_categoryBadge",
4370
- "topics": "_3XaZHa_topics",
4371
- "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4372
- "body": "_3XaZHa_body",
4438
+ "versionBadge": "_3XaZHa_versionBadge",
4439
+ "cardTitle": "_3XaZHa_cardTitle",
4373
4440
  "desc": "_3XaZHa_desc",
4374
- "stateDesc": "_3XaZHa_stateDesc",
4375
- "star": "_3XaZHa_star",
4376
- "stateTitle": "_3XaZHa_stateTitle",
4377
- "cardHead": "_3XaZHa_cardHead",
4378
- "updateBadge": "_3XaZHa_updateBadge",
4379
- "installBtn": "_3XaZHa_installBtn",
4380
- "cardSide": "_3XaZHa_cardSide",
4381
- "footer": "_3XaZHa_footer",
4382
- "topic": "_3XaZHa_topic",
4383
- "card": "_3XaZHa_card",
4441
+ "stateTitle": "_3XaZHa_stateTitle",
4384
4442
  "fork": "_3XaZHa_fork",
4443
+ "installBtnInstalled": "_3XaZHa_installBtnInstalled",
4385
4444
  "installBtnUpdate": "_3XaZHa_installBtnUpdate",
4386
- "verified": "_3XaZHa_verified",
4387
4445
  "detailBtn": "_3XaZHa_detailBtn",
4388
- "versionBadge": "_3XaZHa_versionBadge",
4389
- "date": "_3XaZHa_date",
4446
+ "card": "_3XaZHa_card",
4447
+ "diagBtn": "_3XaZHa_diagBtn",
4390
4448
  "footLink": "_3XaZHa_footLink",
4449
+ "actions": "_3XaZHa_actions",
4450
+ "moreSentinel": "_3XaZHa_moreSentinel",
4451
+ "installBtn": "_3XaZHa_installBtn",
4452
+ "installBtnCopied": "_3XaZHa_installBtnCopied",
4453
+ "footer": "_3XaZHa_footer",
4391
4454
  "cardMain": "_3XaZHa_cardMain",
4392
- "cardTitle": "_3XaZHa_cardTitle"
4455
+ "cardHead": "_3XaZHa_cardHead",
4456
+ "topic": "_3XaZHa_topic",
4457
+ "date": "_3XaZHa_date",
4458
+ "stats": "_3XaZHa_stats",
4459
+ "updateBadge": "_3XaZHa_updateBadge",
4460
+ "star": "_3XaZHa_star",
4461
+ "categoryBadge": "_3XaZHa_categoryBadge",
4462
+ "uninstallBtn": "_3XaZHa_uninstallBtn"
4393
4463
  };
4394
4464
  //#endregion
4395
4465
  //#region src/client/hooks/useIncrementalList.ts
@@ -4597,13 +4667,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4597
4667
  });
4598
4668
  var SectionTabs_module_css_default = {
4599
4669
  "tabActive": "_7tvizq_tabActive",
4600
- "tabCountActive": "_7tvizq_tabCountActive",
4601
4670
  "tabIcon": "_7tvizq_tabIcon",
4602
- "tabCount": "_7tvizq_tabCount",
4603
- "root": "_7tvizq_root",
4671
+ "noticeBtn": "_7tvizq_noticeBtn",
4604
4672
  "tab": "_7tvizq_tab",
4673
+ "root": "_7tvizq_root",
4674
+ "tabCountActive": "_7tvizq_tabCountActive",
4605
4675
  "noticeIcon": "_7tvizq_noticeIcon",
4606
- "noticeBtn": "_7tvizq_noticeBtn",
4676
+ "tabCount": "_7tvizq_tabCount",
4607
4677
  "noticeCount": "_7tvizq_noticeCount"
4608
4678
  };
4609
4679
  //#endregion
@@ -4681,42 +4751,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4681
4751
  css: css$7
4682
4752
  });
4683
4753
  var InstalledView_module_css_default = {
4684
- "rowDesc": "_1nXeGW_rowDesc",
4685
- "toolbar": "_1nXeGW_toolbar",
4686
- "list": "_1nXeGW_list",
4687
- "segBtn": "_1nXeGW_segBtn",
4688
- "root": "_1nXeGW_root",
4689
- "rowUpdate": "_1nXeGW_rowUpdate",
4754
+ "rowUninstall": "_1nXeGW_rowUninstall",
4755
+ "rowDetail": "_1nXeGW_rowDetail",
4756
+ "empty": "_1nXeGW_empty",
4690
4757
  "exampleRow": "_1nXeGW_exampleRow",
4691
- "segGroup": "_1nXeGW_segGroup",
4692
- "searchInput": "_1nXeGW_searchInput",
4693
- "rowTitle": "_1nXeGW_rowTitle",
4694
- "statusPending": "_1nXeGW_statusPending",
4695
- "rowSourceTag": "_1nXeGW_rowSourceTag",
4696
- "versionBadge": "_1nXeGW_versionBadge",
4697
- "rowMain": "_1nXeGW_rowMain",
4698
- "updateBadge": "_1nXeGW_updateBadge",
4699
- "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4700
- "segBtnActive": "_1nXeGW_segBtnActive",
4701
- "rowActions": "_1nXeGW_rowActions",
4758
+ "rowCategory": "_1nXeGW_rowCategory",
4759
+ "list": "_1nXeGW_list",
4702
4760
  "rowMeta": "_1nXeGW_rowMeta",
4703
- "searchWrap": "_1nXeGW_searchWrap",
4704
- "statusInactive": "_1nXeGW_statusInactive",
4761
+ "rowActions": "_1nXeGW_rowActions",
4762
+ "emptyTitle": "_1nXeGW_emptyTitle",
4705
4763
  "exampleBadge": "_1nXeGW_exampleBadge",
4706
- "empty": "_1nXeGW_empty",
4707
- "segLabel": "_1nXeGW_segLabel",
4764
+ "rowTitle": "_1nXeGW_rowTitle",
4765
+ "root": "_1nXeGW_root",
4766
+ "segBtnActive": "_1nXeGW_segBtnActive",
4767
+ "rowRestart": "_1nXeGW_rowRestart",
4768
+ "rowMain": "_1nXeGW_rowMain",
4708
4769
  "row": "_1nXeGW_row",
4709
- "emptyDesc": "_1nXeGW_emptyDesc",
4710
- "rowCategory": "_1nXeGW_rowCategory",
4711
4770
  "rowRepo": "_1nXeGW_rowRepo",
4712
- "rowUninstall": "_1nXeGW_rowUninstall",
4771
+ "statusInactive": "_1nXeGW_statusInactive",
4772
+ "versionBadge": "_1nXeGW_versionBadge",
4773
+ "segRow": "_1nXeGW_segRow",
4774
+ "segGroup": "_1nXeGW_segGroup",
4775
+ "rowSourceTag": "_1nXeGW_rowSourceTag",
4776
+ "rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
4777
+ "rowDesc": "_1nXeGW_rowDesc",
4778
+ "updateBadge": "_1nXeGW_updateBadge",
4779
+ "searchInput": "_1nXeGW_searchInput",
4780
+ "toolbar": "_1nXeGW_toolbar",
4713
4781
  "rowTitleLine": "_1nXeGW_rowTitleLine",
4714
- "rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
4715
- "emptyTitle": "_1nXeGW_emptyTitle",
4716
4782
  "statusDot": "_1nXeGW_statusDot",
4717
- "segRow": "_1nXeGW_segRow",
4718
- "rowRestart": "_1nXeGW_rowRestart",
4719
- "rowDetail": "_1nXeGW_rowDetail"
4783
+ "emptyDesc": "_1nXeGW_emptyDesc",
4784
+ "searchWrap": "_1nXeGW_searchWrap",
4785
+ "rowUpdate": "_1nXeGW_rowUpdate",
4786
+ "segLabel": "_1nXeGW_segLabel",
4787
+ "segBtn": "_1nXeGW_segBtn",
4788
+ "statusPending": "_1nXeGW_statusPending",
4789
+ "rowSourceTagManual": "_1nXeGW_rowSourceTagManual"
4720
4790
  };
4721
4791
  //#endregion
4722
4792
  //#region src/client/components/views/InstalledView.tsx
@@ -4965,28 +5035,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
4965
5035
  css: css$6
4966
5036
  });
4967
5037
  var CustomInstallView_module_css_default = {
4968
- "installLabel": "zISxCG_installLabel",
4969
- "installHelpBtn": "zISxCG_installHelpBtn",
4970
- "installRow": "zISxCG_installRow",
4971
- "installCards": "zISxCG_installCards",
4972
- "channelOffText": "zISxCG_channelOffText",
4973
- "desc": "zISxCG_desc",
4974
5038
  "helpCmd": "zISxCG_helpCmd",
5039
+ "helpBody": "zISxCG_helpBody",
5040
+ "helpLine": "zISxCG_helpLine",
5041
+ "channelOffText": "zISxCG_channelOffText",
5042
+ "installError": "zISxCG_installError",
5043
+ "installHelpBtn": "zISxCG_installHelpBtn",
4975
5044
  "root": "zISxCG_root",
4976
- "channelOffBtn": "zISxCG_channelOffBtn",
5045
+ "desc": "zISxCG_desc",
4977
5046
  "installBtn": "zISxCG_installBtn",
4978
- "installExample": "zISxCG_installExample",
4979
- "installError": "zISxCG_installError",
4980
- "installInputError": "zISxCG_installInputError",
4981
- "helpLine": "zISxCG_helpLine",
5047
+ "installCards": "zISxCG_installCards",
4982
5048
  "helpNote": "zISxCG_helpNote",
4983
- "helpBody": "zISxCG_helpBody",
5049
+ "installInsertBtn": "zISxCG_installInsertBtn",
5050
+ "channelOff": "zISxCG_channelOff",
5051
+ "installCard": "zISxCG_installCard",
5052
+ "installRow": "zISxCG_installRow",
4984
5053
  "installCardHead": "zISxCG_installCardHead",
4985
- "installInput": "zISxCG_installInput",
4986
5054
  "installCardDisabled": "zISxCG_installCardDisabled",
4987
- "channelOff": "zISxCG_channelOff",
4988
- "installInsertBtn": "zISxCG_installInsertBtn",
4989
- "installCard": "zISxCG_installCard"
5055
+ "installLabel": "zISxCG_installLabel",
5056
+ "installInput": "zISxCG_installInput",
5057
+ "installInputError": "zISxCG_installInputError",
5058
+ "installExample": "zISxCG_installExample",
5059
+ "channelOffBtn": "zISxCG_channelOffBtn"
4990
5060
  };
4991
5061
  //#endregion
4992
5062
  //#region src/client/components/views/CustomInstallView.tsx
@@ -5276,30 +5346,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5276
5346
  css: css$5
5277
5347
  });
5278
5348
  var SettingsView_module_css_default = {
5349
+ "settingRowStack": "_506LLG_settingRowStack",
5350
+ "content": "_506LLG_content",
5351
+ "settingTitle": "_506LLG_settingTitle",
5352
+ "navItemActive": "_506LLG_navItemActive",
5353
+ "pageDesc": "_506LLG_pageDesc",
5279
5354
  "card": "_506LLG_card",
5355
+ "proxyHintOk": "_506LLG_proxyHintOk",
5356
+ "root": "_506LLG_root",
5357
+ "navIcon": "_506LLG_navIcon",
5358
+ "settingControlStack": "_506LLG_settingControlStack",
5359
+ "textInput": "_506LLG_textInput",
5280
5360
  "proxyControl": "_506LLG_proxyControl",
5281
- "navItemActive": "_506LLG_navItemActive",
5282
- "navItem": "_506LLG_navItem",
5283
- "pageHeader": "_506LLG_pageHeader",
5361
+ "sidebar": "_506LLG_sidebar",
5284
5362
  "settingLabel": "_506LLG_settingLabel",
5285
5363
  "settingDesc": "_506LLG_settingDesc",
5286
- "settingControl": "_506LLG_settingControl",
5287
- "settingControlStack": "_506LLG_settingControlStack",
5288
- "root": "_506LLG_root",
5289
- "proxyHint": "_506LLG_proxyHint",
5290
- "proxyHintFail": "_506LLG_proxyHintFail",
5291
- "resetBtn": "_506LLG_resetBtn",
5292
- "proxyHintOk": "_506LLG_proxyHintOk",
5293
- "content": "_506LLG_content",
5294
- "textInput": "_506LLG_textInput",
5295
- "pageDesc": "_506LLG_pageDesc",
5296
5364
  "controlDropdown": "_506LLG_controlDropdown",
5297
- "navIcon": "_506LLG_navIcon",
5298
- "sidebar": "_506LLG_sidebar",
5365
+ "resetBtn": "_506LLG_resetBtn",
5366
+ "pageHeader": "_506LLG_pageHeader",
5299
5367
  "settingRow": "_506LLG_settingRow",
5300
- "settingRowStack": "_506LLG_settingRowStack",
5368
+ "navItem": "_506LLG_navItem",
5301
5369
  "pageTitle": "_506LLG_pageTitle",
5302
- "settingTitle": "_506LLG_settingTitle"
5370
+ "settingControl": "_506LLG_settingControl",
5371
+ "proxyHint": "_506LLG_proxyHint",
5372
+ "proxyHintFail": "_506LLG_proxyHintFail"
5303
5373
  };
5304
5374
  //#endregion
5305
5375
  //#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
@@ -5318,18 +5388,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5318
5388
  css: css$4
5319
5389
  });
5320
5390
  var Dropdown_module_css_default = {
5321
- "dropdown": "B_Gxsq_dropdown",
5322
- "dropdownFill": "B_Gxsq_dropdownFill",
5323
5391
  "dropdownBtn": "B_Gxsq_dropdownBtn",
5324
- "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5392
+ "dropdownFill": "B_Gxsq_dropdownFill",
5325
5393
  "dropdownCount": "B_Gxsq_dropdownCount",
5326
5394
  "dropdownCountActive": "B_Gxsq_dropdownCountActive",
5327
- "dropdownPanel": "B_Gxsq_dropdownPanel",
5395
+ "dropdown": "B_Gxsq_dropdown",
5328
5396
  "dropdownItem": "B_Gxsq_dropdownItem",
5329
- "dropdownLabel": "B_Gxsq_dropdownLabel",
5330
- "dropdownArrow": "B_Gxsq_dropdownArrow",
5397
+ "dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
5331
5398
  "dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
5332
- "dropdownItemActive": "B_Gxsq_dropdownItemActive"
5399
+ "dropdownLabel": "B_Gxsq_dropdownLabel",
5400
+ "dropdownPanel": "B_Gxsq_dropdownPanel",
5401
+ "dropdownItemActive": "B_Gxsq_dropdownItemActive",
5402
+ "dropdownArrow": "B_Gxsq_dropdownArrow"
5333
5403
  };
5334
5404
  //#endregion
5335
5405
  //#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
@@ -5348,9 +5418,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5348
5418
  css: css$3
5349
5419
  });
5350
5420
  var Toggle_module_css_default = {
5421
+ "toggleOn": "k-cD4G_toggleOn",
5351
5422
  "toggle": "k-cD4G_toggle",
5352
- "knob": "k-cD4G_knob",
5353
- "toggleOn": "k-cD4G_toggleOn"
5423
+ "knob": "k-cD4G_knob"
5354
5424
  };
5355
5425
  //#endregion
5356
5426
  //#region src/client/components/ui/Toggle.tsx
@@ -5450,29 +5520,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5450
5520
  css: css$2
5451
5521
  });
5452
5522
  var DiagnosticsView_module_css_default = {
5453
- "name": "k9eRya_name",
5454
- "badgeIdle": "k9eRya_badgeIdle",
5523
+ "envTitle": "k9eRya_envTitle",
5455
5524
  "runBtn": "k9eRya_runBtn",
5456
5525
  "headHint": "k9eRya_headHint",
5457
- "summary": "k9eRya_summary",
5458
- "display": "k9eRya_display",
5459
- "envTitle": "k9eRya_envTitle",
5460
- "envLabel": "k9eRya_envLabel",
5461
- "panel": "k9eRya_panel",
5462
5526
  "badgeOk": "k9eRya_badgeOk",
5463
- "badgeRunning": "k9eRya_badgeRunning",
5464
- "meta": "k9eRya_meta",
5465
5527
  "summaryFail": "k9eRya_summaryFail",
5466
- "head": "k9eRya_head",
5467
- "diagPulse": "k9eRya_diagPulse",
5468
- "badge": "k9eRya_badge",
5528
+ "panel": "k9eRya_panel",
5529
+ "badgeIdle": "k9eRya_badgeIdle",
5530
+ "envDesc": "k9eRya_envDesc",
5531
+ "envRow": "k9eRya_envRow",
5532
+ "display": "k9eRya_display",
5469
5533
  "envCopyBtn": "k9eRya_envCopyBtn",
5470
- "badgeFail": "k9eRya_badgeFail",
5471
- "summaryRunning": "k9eRya_summaryRunning",
5534
+ "diagPulse": "k9eRya_diagPulse",
5535
+ "summary": "k9eRya_summary",
5536
+ "row": "k9eRya_row",
5537
+ "badgeRunning": "k9eRya_badgeRunning",
5472
5538
  "summaryOk": "k9eRya_summaryOk",
5473
- "envRow": "k9eRya_envRow",
5474
- "envDesc": "k9eRya_envDesc",
5475
- "row": "k9eRya_row"
5539
+ "head": "k9eRya_head",
5540
+ "name": "k9eRya_name",
5541
+ "badgeFail": "k9eRya_badgeFail",
5542
+ "envLabel": "k9eRya_envLabel",
5543
+ "meta": "k9eRya_meta",
5544
+ "badge": "k9eRya_badge",
5545
+ "summaryRunning": "k9eRya_summaryRunning"
5476
5546
  };
5477
5547
  //#endregion
5478
5548
  //#region src/client/components/views/DiagnosticsView.tsx
@@ -5650,57 +5720,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
5650
5720
  css: css$1
5651
5721
  });
5652
5722
  var LogsView_module_css_default = {
5653
- "pathDialogHint": "_3j77BW_pathDialogHint",
5654
- "badge": "_3j77BW_badge",
5655
- "actions": "_3j77BW_actions",
5656
- "headActions": "_3j77BW_headActions",
5657
- "message": "_3j77BW_message",
5658
- "pathLabel": "_3j77BW_pathLabel",
5659
- "more": "_3j77BW_more",
5660
- "previewRow": "_3j77BW_previewRow",
5661
- "foot": "_3j77BW_foot",
5662
- "linkBtn": "_3j77BW_linkBtn",
5663
- "badgeSuccess": "_3j77BW_badgeSuccess",
5664
- "footFail": "_3j77BW_footFail",
5665
- "time": "_3j77BW_time",
5666
- "panel": "_3j77BW_panel",
5667
- "pathDialogDesc": "_3j77BW_pathDialogDesc",
5668
- "head": "_3j77BW_head",
5669
- "searchInput": "_3j77BW_searchInput",
5670
5723
  "pathDialog": "_3j77BW_pathDialog",
5724
+ "pathDialogReset": "_3j77BW_pathDialogReset",
5671
5725
  "pathDraft": "_3j77BW_pathDraft",
5672
- "filterChip": "_3j77BW_filterChip",
5673
- "filterChipActive": "_3j77BW_filterChipActive",
5674
- "logList": "_3j77BW_logList",
5675
- "pathDialogFoot": "_3j77BW_pathDialogFoot",
5726
+ "filterBar": "_3j77BW_filterBar",
5727
+ "catUpdate": "_3j77BW_catUpdate",
5676
5728
  "moreEnd": "_3j77BW_moreEnd",
5677
- "footCount": "_3j77BW_footCount",
5678
5729
  "footActions": "_3j77BW_footActions",
5679
- "search": "_3j77BW_search",
5680
- "badgeWarn": "_3j77BW_badgeWarn",
5681
- "list": "_3j77BW_list",
5682
- "pathDialogReset": "_3j77BW_pathDialogReset",
5683
- "filterBar": "_3j77BW_filterBar",
5730
+ "badgeDebug": "_3j77BW_badgeDebug",
5731
+ "actions": "_3j77BW_actions",
5684
5732
  "badgeInfo": "_3j77BW_badgeInfo",
5685
- "catBadge": "_3j77BW_catBadge",
5686
- "pathText": "_3j77BW_pathText",
5687
- "catDiagnostics": "_3j77BW_catDiagnostics",
5688
- "entry": "_3j77BW_entry",
5689
- "event": "_3j77BW_event",
5733
+ "pathLabel": "_3j77BW_pathLabel",
5690
5734
  "catInstall": "_3j77BW_catInstall",
5691
- "clearBtn": "_3j77BW_clearBtn",
5735
+ "entry": "_3j77BW_entry",
5736
+ "badgeSuccess": "_3j77BW_badgeSuccess",
5737
+ "pathDialogHint": "_3j77BW_pathDialogHint",
5738
+ "empty": "_3j77BW_empty",
5739
+ "filterChipActive": "_3j77BW_filterChipActive",
5740
+ "btn": "_3j77BW_btn",
5741
+ "head": "_3j77BW_head",
5742
+ "panel": "_3j77BW_panel",
5743
+ "search": "_3j77BW_search",
5744
+ "time": "_3j77BW_time",
5692
5745
  "pathDialogRow": "_3j77BW_pathDialogRow",
5693
5746
  "catSettings": "_3j77BW_catSettings",
5747
+ "headActions": "_3j77BW_headActions",
5748
+ "pathDialogDesc": "_3j77BW_pathDialogDesc",
5694
5749
  "pathRow": "_3j77BW_pathRow",
5695
- "headHint": "_3j77BW_headHint",
5696
- "btn": "_3j77BW_btn",
5697
- "badgeError": "_3j77BW_badgeError",
5698
- "footPath": "_3j77BW_footPath",
5699
- "badgeDebug": "_3j77BW_badgeDebug",
5750
+ "linkBtn": "_3j77BW_linkBtn",
5751
+ "footCount": "_3j77BW_footCount",
5700
5752
  "catUninstall": "_3j77BW_catUninstall",
5753
+ "list": "_3j77BW_list",
5754
+ "catDiagnostics": "_3j77BW_catDiagnostics",
5755
+ "pathDialogFoot": "_3j77BW_pathDialogFoot",
5756
+ "clearBtn": "_3j77BW_clearBtn",
5757
+ "logList": "_3j77BW_logList",
5758
+ "badge": "_3j77BW_badge",
5759
+ "message": "_3j77BW_message",
5701
5760
  "catSystem": "_3j77BW_catSystem",
5702
- "catUpdate": "_3j77BW_catUpdate",
5703
- "empty": "_3j77BW_empty"
5761
+ "searchInput": "_3j77BW_searchInput",
5762
+ "more": "_3j77BW_more",
5763
+ "filterChip": "_3j77BW_filterChip",
5764
+ "headHint": "_3j77BW_headHint",
5765
+ "pathText": "_3j77BW_pathText",
5766
+ "footPath": "_3j77BW_footPath",
5767
+ "event": "_3j77BW_event",
5768
+ "footFail": "_3j77BW_footFail",
5769
+ "badgeError": "_3j77BW_badgeError",
5770
+ "badgeWarn": "_3j77BW_badgeWarn",
5771
+ "catBadge": "_3j77BW_catBadge",
5772
+ "previewRow": "_3j77BW_previewRow",
5773
+ "foot": "_3j77BW_foot"
5704
5774
  };
5705
5775
  //#endregion
5706
5776
  //#region src/client/components/modals/LogsModal.tsx
@@ -6593,7 +6663,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6593
6663
  const [uninstallNeedsReload, setUninstallNeedsReload] = (0, react.useState)(false);
6594
6664
  /** 结果视图「立即重启」:请求宿主重启后进入等待,服务回来后整页刷新 */
6595
6665
  const [restarting, setRestarting] = (0, react.useState)(false);
6596
- /** 操作失败完整信息 + 所属插件仓库 + 失败类型(决定弹窗标题「安装失败/卸载失败」)+ 实际执行的安装命令 + 尝试过的安装方式(issue 预填用) */
6666
+ /** 操作失败信息 + 归属仓库 + 动作(决定弹窗标题与上报措辞)+ 命令与尝试记录(issue 预填用) */
6597
6667
  const [errorMsg, setErrorMsg] = (0, react.useState)(null);
6598
6668
  /** 通知中心记录:localStorage 持久化,每次安装/卸载任务成败都留痕(启动时读回) */
6599
6669
  const [notifications, setNotifications] = (0, react.useState)(() => loadNotifications());
@@ -6660,7 +6730,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6660
6730
  setErrorMsg({
6661
6731
  message,
6662
6732
  repo: issueRepo,
6663
- kind,
6733
+ action: update ? "update" : kind,
6664
6734
  command,
6665
6735
  attempts
6666
6736
  });
@@ -6977,7 +7047,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
6977
7047
  openSection: settingsSection,
6978
7048
  onConsumedOpenSection: () => setSettingsSection(null)
6979
7049
  }), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
6980
- info: catalog.hubUpdateInfo ?? { version: "1.6.10" },
7050
+ info: catalog.hubUpdateInfo ?? { version: "1.6.12" },
6981
7051
  state: catalog.hubUpdateState,
6982
7052
  currentVersion: catalog.hubCurrentVersion,
6983
7053
  lang,
@@ -7201,7 +7271,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
7201
7271
  }), errorMsg && (0, react.createElement)(ErrorModal, {
7202
7272
  message: errorMsg.message,
7203
7273
  repo: errorMsg.repo,
7204
- kind: errorMsg.kind,
7274
+ action: errorMsg.action,
7205
7275
  command: errorMsg.command,
7206
7276
  attempts: errorMsg.attempts,
7207
7277
  t,