dsh-plugin 1.6.4 → 1.6.6
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/README.en.md +11 -11
- package/README.md +11 -11
- package/client/client.js +450 -405
- package/client/client.js.map +1 -1
- package/lib/http/catalog.js +132 -0
- package/lib/http/diagnostics.js +201 -0
- package/lib/http/install.js +399 -0
- package/lib/http/logs.js +164 -0
- package/lib/http/routes.js +19 -1261
- package/lib/http/settings.js +77 -0
- package/lib/http/shared.js +169 -0
- package/lib/http/task.js +208 -0
- package/lib/services/install/install.js +1 -1
- package/lib/services/install/npm-resolve.js +44 -15
- package/lib/services/install/task-queue.js +45 -16
- package/lib/services/probe.js +18 -1
- package/lib/types/http/catalog.d.ts +10 -0
- package/lib/types/http/diagnostics.d.ts +4 -0
- package/lib/types/http/install.d.ts +11 -0
- package/lib/types/http/logs.d.ts +2 -0
- package/lib/types/http/routes.d.ts +15 -20
- package/lib/types/http/settings.d.ts +2 -0
- package/lib/types/http/shared.d.ts +44 -0
- package/lib/types/http/task.d.ts +3 -0
- package/lib/types/services/install/install.d.ts +1 -1
- package/lib/types/services/install/npm-resolve.d.ts +3 -2
- package/lib/types/services/probe.d.ts +8 -0
- package/package.json +1 -1
- package/src/client/components/PluginHubSection.tsx +7 -2
- package/src/client/components/modals/HubUpdateModal.tsx +19 -10
- package/src/client/components/modals/NotificationsModal.tsx +34 -18
- package/src/client/components/modals/modals.tsx +38 -28
- package/src/client/components/views/InstalledView.tsx +23 -11
- package/src/client/hooks/useCatalog.ts +13 -9
- package/src/client/locales.ts +28 -8
- package/src/client/logic/failures.ts +36 -157
- package/src/client/logic/urls.ts +72 -1
- package/src/client/types.ts +11 -0
- package/src/server/http/catalog.ts +143 -0
- package/src/server/http/diagnostics.ts +193 -0
- package/src/server/http/install.ts +391 -0
- package/src/server/http/logs.ts +149 -0
- package/src/server/http/routes.ts +22 -1220
- package/src/server/http/settings.ts +73 -0
- package/src/server/http/shared.ts +191 -0
- package/src/server/http/task.ts +194 -0
- package/src/server/services/install/install-types.ts +9 -1
- package/src/server/services/install/install.ts +11 -1
- package/src/server/services/install/npm-resolve.ts +41 -13
- package/src/server/services/install/task-queue.ts +45 -16
- package/src/server/services/probe.ts +19 -1
package/client/client.js
CHANGED
|
@@ -35,7 +35,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
35
35
|
failedDescProxy: "你的网络似乎不通,或设置里的 HTTP 代理地址不可达,无法获取插件目录数据。请检查代理设置与网络连接后重试;或点击右上角按钮在浏览器中打开插件市场。",
|
|
36
36
|
retry: "重试",
|
|
37
37
|
install: "安装",
|
|
38
|
-
cliOnlyHint: "
|
|
38
|
+
cliOnlyHint: "此插件需在命令行安装(网页端无法代执行),请复制上方命令到终端运行",
|
|
39
39
|
failedCopyHint: "安装失败。请复制上方安装命令到 dsh 终端手动执行(原生依赖构建脚本可能需要人工放行,如 pnpm approve-builds)",
|
|
40
40
|
toastCopied: "安装命令已复制,去 dsh 终端粘贴即可安装",
|
|
41
41
|
installed: "已安装",
|
|
@@ -90,6 +90,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
90
90
|
statusLabel: "安装状态",
|
|
91
91
|
statusRunning: "运行中",
|
|
92
92
|
statusPending: "待重启",
|
|
93
|
+
statusInactive: "未激活(宿主加载失败,可能不是有效的 dsh 插件)",
|
|
93
94
|
exampleLabel: "DeepSeek Harness 内置示例项目",
|
|
94
95
|
exampleHint: "DeepSeek Harness 内置示例项目:不是插件市场的 dsh 插件,宿主不会加载它,无需重启",
|
|
95
96
|
restart: "重启",
|
|
@@ -288,9 +289,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
288
289
|
failCopy: "复制完整错误信息",
|
|
289
290
|
failIssueHint: "带着错误日志去作者仓库一键提交 Issue(正文含官网收录链接)",
|
|
290
291
|
failIssueBig: "一键提交 BUG 到 GitHub Issue 为开源作贡献",
|
|
292
|
+
failHubIssueHint: "此失败已被判定为环境或插件中心自身问题(非插件作者问题),带着错误日志到插件中心仓库一键提交 Issue",
|
|
293
|
+
failHubIssueBig: "反馈给插件中心排查",
|
|
294
|
+
failUnclassifiedHint: "安装失败,原因未能自动识别。这通常不是插件自身的问题(可能与本机环境或插件中心有关),请将错误信息反馈给插件中心,由维护者排查。",
|
|
291
295
|
failPrepareHint: "该插件安装时的构建脚本执行失败(git 分发常缺失子模块或构建产物),属插件打包分发问题。请向作者仓库提交 Issue 反馈。",
|
|
292
296
|
failPackagingHint: "该插件不支持官方默认安装方式:其 git 分发缺少构建产物(package.json 声明的入口文件在仓库中不存在),说明作者未适配官方安装流程。请到作者仓库提交 Issue 反馈,请其提交构建产物、改用预构建 release `.tgz` 直链(`releases/download/<tag>/<asset>.tgz`),或发布完整的 npm 版。",
|
|
293
|
-
failIgnoredBuild: "该插件或其依赖需要执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截导致安装失败(如原生模块 node-pty、或 git 安装时插件的 prepare
|
|
297
|
+
failIgnoredBuild: "该插件或其依赖需要执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截导致安装失败(如原生模块 node-pty、或 git 安装时插件的 prepare 脚本)。这不一定是插件自身的问题(也可能是插件中心反查失败后回退到 git 安装所致),请先反馈给插件中心排查;若确认为插件依赖问题,可建议作者改用预编译版本(如 node-pty-prebuilt-multiarch)或移除安装期构建。",
|
|
294
298
|
failNpmTooLow: "怀疑本机 npm 版本过低:npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
|
|
295
299
|
failNpmTooLowV: "本机 npm 版本过低(当前 v{v}):npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest",
|
|
296
300
|
failNetworkHint: "安装前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。",
|
|
@@ -306,6 +310,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
306
310
|
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 补丁条目后重试。",
|
|
307
311
|
failPnpmMissingDepTarget: "{pkg} 在 npm registry 上不存在(404)",
|
|
308
312
|
failPnpmMissingDepHint: "安装器调用 pnpm 时报「包不存在」(ERR_PNPM_FETCH_404):你的 profile 里留着一条指向 registry 上未发布包的依赖,pnpm 每次解析依赖都会先卡在它上面,因此任何插件都装不进来。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)的 package.json 里删除该依赖条目(同时删掉对应的 pnpm-lock.yaml 条目或整个锁文件)后重试。",
|
|
313
|
+
failRegistryVersionStaleHint: "安装器调用 pnpm 时报「找不到匹配的版本」(ERR_PNPM_NO_MATCHING_VERSION):要装的这个版本在实际执行安装的 npm 源里查不到。常见原因是你设置的 npmRegistry 与本机 ~/.npmrc 用的不是同一个源——官方源刚发布、镜像还没同步上来(快则几分钟、慢则几小时),也可能只是版本号写错了。这不是插件本身的问题。可在插件市场设置里把 npmRegistry 改成与本机 ~/.npmrc 一致(或反过来),或那一次显式走官方源(https://registry.npmjs.org)、改用离线包后重试;若该版本刚发布不久,等镜像同步后重试即可。",
|
|
314
|
+
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 条目或整个锁文件),或把该目录恢复回原路径后重试。",
|
|
309
315
|
failFileLockedHint: "安装过程中 pnpm 无法替换 profile 里的文件:有程序正占用着它(Windows 常见报错 os error 32「另一个程序正在使用此文件」)。通常是 DeepSeek Harness 自身或杀毒软件的实时扫描持有文件句柄。这不是插件本身的问题——请完全退出 DeepSeek Harness(Windows 可在任务管理器确认进程已结束,必要时临时关闭杀毒软件实时防护)后重试。",
|
|
310
316
|
failAccessDeniedHint: "安装过程中 pnpm 写入 profile 里的文件被系统拒绝访问(Windows 常见报错 os error 5「拒绝访问」,英文为 Access is denied;Node 下的 EPERM / EACCES 同理)。常见原因是该文件或目录正被其他进程占用、文件带只读属性、目录权限受限,或杀毒软件实时防护拦截了写入——这与「文件正被占用」(os error 32)同属本机文件系统问题,任何插件装进该目录都会一样失败,不是插件本身的问题。请完全退出 DeepSeek Harness(Windows 可在任务管理器确认进程已结束,必要时临时关闭杀毒软件实时防护)后重试;若仍然失败,请检查 profile 目录及其文件是否被设为只读,并以管理员身份重新运行。",
|
|
311
317
|
failFsUnavailableHint: "安装过程中 pnpm 无法把文件写进本机磁盘(这类报错与装哪个插件无关,任何插件装在同一目录都会失败,不是插件本身的问题)。请按报错对号入座:① 磁盘空间不足(ENOSPC / no space left on device,Windows 为 os error 112)——请清理 profile 所在磁盘的剩余空间后重试;② 磁盘或挂载点只读、带写保护(EROFS / read-only file system,Windows 为 os error 19)——请确认 profile 目录所在磁盘可写(外接盘/U 盘、带写保护的移动盘或只读挂载的分区都会触发),必要时把插件目录换到系统盘的可写位置;③ 进程可用的文件句柄被耗尽(EMFILE / ENFILE / too many open files)——请关闭占用大量文件的程序并重启 DeepSeek Harness 后重试。",
|
|
@@ -343,6 +349,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
343
349
|
versionHint: "查看版本信息与更新记录",
|
|
344
350
|
hubCurrentTitle: "当前版本",
|
|
345
351
|
hubCurrentDesc: "你正在使用 v{version},已是最新版本。",
|
|
352
|
+
hubPendingDesc: "最新版 v{version} 已发布,但发布尚未满 24 小时:此时更新会被 pnpm 静默回退到旧版本,因此暂不提示。稍后这里会自动出现更新入口。",
|
|
346
353
|
hubUpToDate: "已是最新版本",
|
|
347
354
|
followUs: "关注我们",
|
|
348
355
|
aboutTitle: "关注我们",
|
|
@@ -375,7 +382,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
375
382
|
failedDescProxy: "Your network seems unreachable, or the HTTP proxy in Settings is unreachable, so the plugin catalog could not be loaded. Please check the proxy address and your connection, then retry; or open the hub in your browser with the button above.",
|
|
376
383
|
retry: "Retry",
|
|
377
384
|
install: "Install",
|
|
378
|
-
cliOnlyHint: "This plugin
|
|
385
|
+
cliOnlyHint: "This plugin must be installed from the command line (it cannot be run from the web UI) — copy the command above and run it in your terminal",
|
|
379
386
|
failedCopyHint: "Install failed. Copy the command above and run it manually in your dsh terminal (native build scripts may need manual approval, e.g. pnpm approve-builds)",
|
|
380
387
|
toastCopied: "Install command copied — paste it in your dsh terminal",
|
|
381
388
|
installed: "Installed",
|
|
@@ -430,6 +437,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
430
437
|
statusLabel: "Status",
|
|
431
438
|
statusRunning: "Running",
|
|
432
439
|
statusPending: "Restart pending",
|
|
440
|
+
statusInactive: "Not active (the host failed to load it — possibly not a valid dsh plugin)",
|
|
433
441
|
exampleLabel: "DeepSeek Harness built-in example",
|
|
434
442
|
exampleHint: "DeepSeek Harness built-in example — not a marketplace dsh plugin, the host does not load it, no restart needed",
|
|
435
443
|
restart: "Restart",
|
|
@@ -631,9 +639,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
631
639
|
failCopy: "Copy full log",
|
|
632
640
|
failIssueHint: "Open a pre-filled issue on the author repo with this error log (includes catalog links)",
|
|
633
641
|
failIssueBig: "Report this bug to GitHub — contribute to open source",
|
|
642
|
+
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.",
|
|
643
|
+
failHubIssueBig: "Report to the Plugin Hub for triage",
|
|
644
|
+
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.",
|
|
634
645
|
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.",
|
|
635
646
|
failPackagingHint: "This plugin does not support the official default install method: its git distribution lacks the build output (the entry file declared in package.json is not in the repository), so it has not been adapted to the official install flow. Please file an Issue on the author's repo asking for committed build output, a prebuilt release `.tgz` (`releases/download/<tag>/<asset>.tgz`), or a complete npm release.",
|
|
636
|
-
failIgnoredBuild: "This plugin (or its dependencies) needs to run build scripts, which pnpm blocks by default via its allowBuilds allowlist, so the install fails (e.g. native modules like node-pty, or the plugin's own prepare script on git installs)
|
|
647
|
+
failIgnoredBuild: "This plugin (or its dependencies) needs to run build scripts, which pnpm blocks by default via its allowBuilds allowlist, so the install fails (e.g. native modules like node-pty, or the plugin's own prepare script on git installs). This is not necessarily the plugin itself (it may be caused by the hub falling back to a git install after npm lookup failed). Please report it to the Plugin Hub first; if it turns out to be a plugin dependency issue, the author can ship a prebuilt variant (e.g. node-pty-prebuilt-multiarch) or drop install-time builds.",
|
|
637
648
|
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",
|
|
638
649
|
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",
|
|
639
650
|
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.",
|
|
@@ -649,6 +660,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
649
660
|
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.",
|
|
650
661
|
failPnpmMissingDepTarget: "{pkg} was not found on the npm registry (404)",
|
|
651
662
|
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.",
|
|
663
|
+
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.",
|
|
664
|
+
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.",
|
|
652
665
|
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.",
|
|
653
666
|
failAccessDeniedHint: "During install, Windows denied pnpm access to a file inside the profile (this shows as os error 5, \"Access is denied\"; on Node the equivalent codes are EPERM / EACCES). Typical causes: the file or directory is held by another process, the file is marked read-only, the directory permissions are restricted, or a real-time antivirus scan blocked the write. This is the same class of local file-system problem as a locked file (os error 32) — no plugin can be installed into that directory, so it 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. If it still fails, check whether the profile directory or its files are read-only and run as administrator.",
|
|
654
667
|
failFsUnavailableHint: "During install, pnpm could not write files to the local disk — this has nothing to do with which plugin you are installing: any plugin installed into the same directory would fail the same way, so it is not a problem with the plugin itself. Match the error you see: ① Out of space (ENOSPC / no space left on device, os error 112 on Windows) — free up space on the drive that holds the profile and retry. ② Read-only or write-protected volume (EROFS / read-only file system, os error 19 on Windows) — make sure the drive holding the profile directory is writable (external or USB drives, write-protected media, and read-only mounts all trigger this); move the plugin directory to a writable location on the system drive if needed. ③ File handles exhausted (EMFILE / ENFILE / too many open files) — close programs that hold many files open, restart DeepSeek Harness, then retry.",
|
|
@@ -686,6 +699,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
686
699
|
versionHint: "View version info and changelog",
|
|
687
700
|
hubCurrentTitle: "Current version",
|
|
688
701
|
hubCurrentDesc: "You are on v{version} — this is the latest version.",
|
|
702
|
+
hubPendingDesc: "v{version} has been released, but it is still within the 24-hour window where pnpm silently falls back to the older version, so the update is not offered yet. The update entry will appear here shortly.",
|
|
689
703
|
hubUpToDate: "Up to date",
|
|
690
704
|
followUs: "Follow us",
|
|
691
705
|
aboutTitle: "Follow us",
|
|
@@ -712,42 +726,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
712
726
|
css: css$11
|
|
713
727
|
});
|
|
714
728
|
var Header_module_css_default = {
|
|
729
|
+
"tabs": "qikqja_tabs",
|
|
730
|
+
"githubLink": "qikqja_githubLink",
|
|
731
|
+
"githubIcon": "qikqja_githubIcon",
|
|
732
|
+
"tab": "qikqja_tab",
|
|
733
|
+
"tabsRow": "qikqja_tabsRow",
|
|
734
|
+
"header": "qikqja_header",
|
|
735
|
+
"version": "qikqja_version",
|
|
715
736
|
"resultSeg": "qikqja_resultSeg",
|
|
737
|
+
"segGroup": "qikqja_segGroup",
|
|
716
738
|
"aboutBtn": "qikqja_aboutBtn",
|
|
717
|
-
"
|
|
739
|
+
"adText": "qikqja_adText",
|
|
740
|
+
"tabActive": "qikqja_tabActive",
|
|
741
|
+
"controls": "qikqja_controls",
|
|
742
|
+
"root": "qikqja_root",
|
|
743
|
+
"langBtn": "qikqja_langBtn",
|
|
718
744
|
"adArrow": "qikqja_adArrow",
|
|
719
|
-
"tabsRow": "qikqja_tabsRow",
|
|
720
|
-
"resultCount": "qikqja_resultCount",
|
|
721
|
-
"searchRow": "qikqja_searchRow",
|
|
722
|
-
"segGroup": "qikqja_segGroup",
|
|
723
745
|
"brandTitle": "qikqja_brandTitle",
|
|
724
|
-
"segBtn": "qikqja_segBtn",
|
|
725
746
|
"tabCount": "qikqja_tabCount",
|
|
726
|
-
"
|
|
727
|
-
"githubLink": "qikqja_githubLink",
|
|
728
|
-
"controls": "qikqja_controls",
|
|
729
|
-
"root": "qikqja_root",
|
|
730
|
-
"title": "qikqja_title",
|
|
731
|
-
"copyIcon": "qikqja_copyIcon",
|
|
732
|
-
"tabs": "qikqja_tabs",
|
|
733
|
-
"adText": "qikqja_adText",
|
|
734
|
-
"taglineLink": "qikqja_taglineLink",
|
|
735
|
-
"search": "qikqja_search",
|
|
736
|
-
"tab": "qikqja_tab",
|
|
737
|
-
"header": "qikqja_header",
|
|
738
|
-
"sortGroup": "qikqja_sortGroup",
|
|
747
|
+
"versionBtn": "qikqja_versionBtn",
|
|
739
748
|
"segLabel": "qikqja_segLabel",
|
|
740
|
-
"
|
|
749
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
750
|
+
"taglineLink": "qikqja_taglineLink",
|
|
751
|
+
"headerRight": "qikqja_headerRight",
|
|
741
752
|
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
742
|
-
"
|
|
743
|
-
"
|
|
753
|
+
"title": "qikqja_title",
|
|
754
|
+
"resultCount": "qikqja_resultCount",
|
|
755
|
+
"tagline": "qikqja_tagline",
|
|
744
756
|
"logoIcon": "qikqja_logoIcon",
|
|
745
|
-
"
|
|
746
|
-
"
|
|
747
|
-
"
|
|
757
|
+
"sortGroup": "qikqja_sortGroup",
|
|
758
|
+
"adBanner": "qikqja_adBanner",
|
|
759
|
+
"searchRow": "qikqja_searchRow",
|
|
760
|
+
"copyIcon": "qikqja_copyIcon",
|
|
761
|
+
"search": "qikqja_search",
|
|
762
|
+
"segBtn": "qikqja_segBtn",
|
|
748
763
|
"segBtnActive": "qikqja_segBtnActive",
|
|
749
|
-
"
|
|
750
|
-
"tagline": "qikqja_tagline"
|
|
764
|
+
"adBadge": "qikqja_adBadge"
|
|
751
765
|
};
|
|
752
766
|
//#endregion
|
|
753
767
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
@@ -766,136 +780,136 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
766
780
|
css: css$10
|
|
767
781
|
});
|
|
768
782
|
var Modal_module_css_default = {
|
|
783
|
+
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
784
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
785
|
+
"noticeHead": "BiQ1zG_noticeHead",
|
|
786
|
+
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
787
|
+
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
769
788
|
"modal": "BiQ1zG_modal",
|
|
770
|
-
"
|
|
771
|
-
"
|
|
772
|
-
"
|
|
773
|
-
"
|
|
774
|
-
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
775
|
-
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
776
|
-
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
777
|
-
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
778
|
-
"detailGrid": "BiQ1zG_detailGrid",
|
|
779
|
-
"failRepo": "BiQ1zG_failRepo",
|
|
780
|
-
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
781
|
-
"modalBody": "BiQ1zG_modalBody",
|
|
782
|
-
"modalCmd": "BiQ1zG_modalCmd",
|
|
789
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
790
|
+
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
791
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
792
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
783
793
|
"errorTitle": "BiQ1zG_errorTitle",
|
|
784
|
-
"
|
|
785
|
-
"
|
|
786
|
-
"
|
|
787
|
-
"
|
|
788
|
-
"
|
|
789
|
-
"
|
|
790
|
-
"detailPath": "BiQ1zG_detailPath",
|
|
791
|
-
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
792
|
-
"progressText": "BiQ1zG_progressText",
|
|
793
|
-
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
794
|
-
"noticeMain": "BiQ1zG_noticeMain",
|
|
794
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
795
|
+
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
796
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
797
|
+
"modalHead": "BiQ1zG_modalHead",
|
|
798
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
799
|
+
"progress": "BiQ1zG_progress",
|
|
795
800
|
"linkIcon": "BiQ1zG_linkIcon",
|
|
796
|
-
"
|
|
801
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
802
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
803
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
804
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
805
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
806
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
807
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
808
|
+
"modalBody": "BiQ1zG_modalBody",
|
|
797
809
|
"queuedHint": "BiQ1zG_queuedHint",
|
|
798
|
-
"
|
|
799
|
-
"
|
|
800
|
-
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
801
|
-
"overlay": "BiQ1zG_overlay",
|
|
802
|
-
"failRow": "BiQ1zG_failRow",
|
|
803
|
-
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
804
|
-
"restartLater": "BiQ1zG_restartLater",
|
|
805
|
-
"resultDesc": "BiQ1zG_resultDesc",
|
|
806
|
-
"aboutContent": "BiQ1zG_aboutContent",
|
|
807
|
-
"detailLabel": "BiQ1zG_detailLabel",
|
|
808
|
-
"errorHint": "BiQ1zG_errorHint",
|
|
809
|
-
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
810
|
-
"resultCheck": "BiQ1zG_resultCheck",
|
|
811
|
-
"modalLabel": "BiQ1zG_modalLabel",
|
|
812
|
-
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
813
|
-
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
814
|
-
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
815
|
-
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
816
|
-
"modalClose": "BiQ1zG_modalClose",
|
|
817
|
-
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
818
|
-
"detailLink": "BiQ1zG_detailLink",
|
|
810
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
811
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
819
812
|
"detailStars": "BiQ1zG_detailStars",
|
|
820
|
-
"
|
|
821
|
-
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
822
|
-
"toast": "BiQ1zG_toast",
|
|
823
|
-
"logModal": "BiQ1zG_logModal",
|
|
824
|
-
"noticeHead": "BiQ1zG_noticeHead",
|
|
825
|
-
"errorModal": "BiQ1zG_errorModal",
|
|
826
|
-
"modalDesc": "BiQ1zG_modalDesc",
|
|
827
|
-
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
813
|
+
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
828
814
|
"detailPathText": "BiQ1zG_detailPathText",
|
|
829
|
-
"
|
|
830
|
-
"
|
|
831
|
-
"
|
|
832
|
-
"
|
|
833
|
-
"
|
|
834
|
-
"
|
|
835
|
-
"
|
|
815
|
+
"failList": "BiQ1zG_failList",
|
|
816
|
+
"failClear": "BiQ1zG_failClear",
|
|
817
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
818
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
819
|
+
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
820
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
821
|
+
"resultTitle": "BiQ1zG_resultTitle",
|
|
822
|
+
"modalActions": "BiQ1zG_modalActions",
|
|
823
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
824
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
825
|
+
"aboutModal": "BiQ1zG_aboutModal",
|
|
826
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
836
827
|
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
828
|
+
"modalCmd": "BiQ1zG_modalCmd",
|
|
829
|
+
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
830
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
837
831
|
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
838
|
-
"
|
|
839
|
-
"
|
|
840
|
-
"
|
|
841
|
-
"modalValue": "BiQ1zG_modalValue",
|
|
842
|
-
"modalRow": "BiQ1zG_modalRow",
|
|
843
|
-
"toastFail": "BiQ1zG_toastFail",
|
|
844
|
-
"modalTitle": "BiQ1zG_modalTitle",
|
|
845
|
-
"queueSection": "BiQ1zG_queueSection",
|
|
846
|
-
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
832
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
833
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
834
|
+
"logModal": "BiQ1zG_logModal",
|
|
847
835
|
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
848
|
-
"
|
|
849
|
-
"
|
|
850
|
-
"
|
|
851
|
-
"
|
|
852
|
-
"
|
|
853
|
-
"
|
|
854
|
-
"detailRow": "BiQ1zG_detailRow",
|
|
836
|
+
"noticeRow": "BiQ1zG_noticeRow",
|
|
837
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
838
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
839
|
+
"toast": "BiQ1zG_toast",
|
|
840
|
+
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
841
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
855
842
|
"modalCancel": "BiQ1zG_modalCancel",
|
|
856
|
-
"
|
|
857
|
-
"
|
|
858
|
-
"
|
|
859
|
-
"
|
|
860
|
-
"
|
|
861
|
-
"
|
|
843
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
844
|
+
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
845
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
846
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
847
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
848
|
+
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
849
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
850
|
+
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
851
|
+
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
852
|
+
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
853
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
854
|
+
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
862
855
|
"detailArrow": "BiQ1zG_detailArrow",
|
|
863
|
-
"
|
|
864
|
-
"
|
|
856
|
+
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
857
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
858
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
859
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
860
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
861
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
865
862
|
"failHead": "BiQ1zG_failHead",
|
|
866
|
-
"
|
|
863
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
864
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
865
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
866
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
867
|
+
"restartLater": "BiQ1zG_restartLater",
|
|
868
|
+
"progressText": "BiQ1zG_progressText",
|
|
869
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
870
|
+
"overlay": "BiQ1zG_overlay",
|
|
871
|
+
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
872
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
873
|
+
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
874
|
+
"failKind": "BiQ1zG_failKind",
|
|
875
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
867
876
|
"modalIn": "BiQ1zG_modalIn",
|
|
868
|
-
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
869
|
-
"detailMono": "BiQ1zG_detailMono",
|
|
870
|
-
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
871
|
-
"modalWide": "BiQ1zG_modalWide",
|
|
872
877
|
"trustHint": "BiQ1zG_trustHint",
|
|
873
|
-
"
|
|
878
|
+
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
879
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
880
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
881
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
882
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
883
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
884
|
+
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
885
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
886
|
+
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
887
|
+
"noticeTime": "BiQ1zG_noticeTime",
|
|
888
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
889
|
+
"modalWide": "BiQ1zG_modalWide",
|
|
890
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
874
891
|
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
875
|
-
"
|
|
876
|
-
"
|
|
877
|
-
"
|
|
878
|
-
"
|
|
879
|
-
"
|
|
880
|
-
"
|
|
881
|
-
"helpModal": "BiQ1zG_helpModal",
|
|
882
|
-
"resultTitle": "BiQ1zG_resultTitle",
|
|
883
|
-
"failClear": "BiQ1zG_failClear",
|
|
884
|
-
"detailValue": "BiQ1zG_detailValue",
|
|
885
|
-
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
886
|
-
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
887
|
-
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
892
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
893
|
+
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
894
|
+
"modalDesc": "BiQ1zG_modalDesc",
|
|
895
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
896
|
+
"result": "BiQ1zG_result",
|
|
897
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
888
898
|
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
889
|
-
"
|
|
890
|
-
"
|
|
891
|
-
"
|
|
892
|
-
"
|
|
893
|
-
"
|
|
894
|
-
"
|
|
895
|
-
"
|
|
896
|
-
"
|
|
899
|
+
"modalClose": "BiQ1zG_modalClose",
|
|
900
|
+
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
901
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
902
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
903
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
904
|
+
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
905
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
906
|
+
"failRow": "BiQ1zG_failRow",
|
|
907
|
+
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
897
908
|
"progressFill": "BiQ1zG_progressFill",
|
|
898
|
-
"
|
|
909
|
+
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
910
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
911
|
+
"failRepo": "BiQ1zG_failRepo",
|
|
912
|
+
"detailLabel": "BiQ1zG_detailLabel"
|
|
899
913
|
};
|
|
900
914
|
//#endregion
|
|
901
915
|
//#region src/server/services/install/release-target.ts
|
|
@@ -993,6 +1007,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
993
1007
|
const SITE_URL = "https://dsh-plugin.org/";
|
|
994
1008
|
/** 插件市场源码仓库:头部右上角 GitHub 图标的跳转地址 */
|
|
995
1009
|
const GITHUB_URL = "https://github.com/dshplugin/dsh-plugin-hub";
|
|
1010
|
+
/** Hub 自身在目录数据里的仓库标识:头部版本号旁的「可更新」徽标按它定位自己。 */
|
|
1011
|
+
const HUB_REPO = "dshplugin/dsh-plugin-hub";
|
|
996
1012
|
/**
|
|
997
1013
|
* Hub 自我更新版本控制(接口中心 Pages:api.dsh-plugin.org,静态 JSON 发布)。
|
|
998
1014
|
* 发新版 = 在 api-center 的 releases/ 写发版记录 + 重新部署,hub.json 随之更新,
|
|
@@ -1007,7 +1023,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1007
1023
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
1008
1024
|
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
|
|
1009
1025
|
*/
|
|
1010
|
-
const PLUGIN_VERSION = "1.6.
|
|
1026
|
+
const PLUGIN_VERSION = "1.6.6";
|
|
1011
1027
|
const CATEGORY_ORDER = [
|
|
1012
1028
|
"interface",
|
|
1013
1029
|
"session",
|
|
@@ -1633,27 +1649,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1633
1649
|
dshCapableNames
|
|
1634
1650
|
]);
|
|
1635
1651
|
/**
|
|
1636
|
-
* Hub
|
|
1652
|
+
* Hub 自身更新状态:Hub 就是当前运行的应用(始终已安装,无需 installedName 命中)。
|
|
1637
1653
|
* 以 Worker 版本控制中心返回的「最新版本」为准,与当前运行的版本号比对——
|
|
1638
1654
|
* 构建时注入的 PLUGIN_VERSION 是运行 bundle 的真实版本;测试/异常场景缺失时
|
|
1639
1655
|
* 回退到安装时记录的版本。版本号不等即新版(版本号只在发版时变更,绝无降级场景)。
|
|
1640
1656
|
*
|
|
1641
1657
|
* 另加 pnpm 供应链安全门槛:新版本发布还不满 24 小时(+30 分钟缓冲)时,pnpm 会静默
|
|
1642
1658
|
* 回退到旧版本,此时若提示「可更新」用户点了也更新不到。publishedAt 由接口中心按 npm
|
|
1643
|
-
* registry
|
|
1659
|
+
* registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
|
|
1660
|
+
* 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
|
|
1644
1661
|
*/
|
|
1645
|
-
const
|
|
1646
|
-
|
|
1647
|
-
if (hubUpdateInfo
|
|
1662
|
+
const hubCurrentVersion = "1.6.6";
|
|
1663
|
+
const hubUpdateState = (() => {
|
|
1664
|
+
if (!hubUpdateInfo) return "none";
|
|
1665
|
+
if (hubUpdateInfo.version === hubCurrentVersion) return "latest";
|
|
1648
1666
|
const publishedAt = hubUpdateInfo.publishedAt;
|
|
1649
1667
|
if (publishedAt) {
|
|
1650
1668
|
const publishedMs = Date.parse(publishedAt);
|
|
1651
1669
|
if (!Number.isNaN(publishedMs)) {
|
|
1652
|
-
if (Date.now() - publishedMs < 882e5) return
|
|
1670
|
+
if (Date.now() - publishedMs < 882e5) return "pending";
|
|
1653
1671
|
}
|
|
1654
1672
|
}
|
|
1655
|
-
return
|
|
1673
|
+
return "available";
|
|
1656
1674
|
})();
|
|
1675
|
+
const hubHasUpdate = hubUpdateState === "available";
|
|
1657
1676
|
(0, react.useMemo)(() => {
|
|
1658
1677
|
if (!plugins) return [];
|
|
1659
1678
|
if (category === "all") return plugins;
|
|
@@ -1703,6 +1722,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1703
1722
|
installedVersion,
|
|
1704
1723
|
hasUpdate,
|
|
1705
1724
|
hubHasUpdate,
|
|
1725
|
+
hubUpdateState,
|
|
1726
|
+
hubCurrentVersion,
|
|
1706
1727
|
hubUpdateInfo,
|
|
1707
1728
|
hubAboutInfo,
|
|
1708
1729
|
refreshHub,
|
|
@@ -1849,7 +1870,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1849
1870
|
*/
|
|
1850
1871
|
function pnpmPolicyHintOf(message) {
|
|
1851
1872
|
if (missingTarballIntegrity(message)) return "failPnpmTarballIntegrityHint";
|
|
1852
|
-
if (/ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|Minimum release age/i.test(message) && releaseAgeRetryAfter(message) !== null) return "failPnpmReleaseAgeHint";
|
|
1873
|
+
if (/ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|ERR_PNPM_NO_MATURE_MATCHING_VERSION|Minimum release age|minimumReleaseAge/i.test(message) && releaseAgeRetryAfter(message) !== null) return "failPnpmReleaseAgeHint";
|
|
1853
1874
|
return "failPnpmPolicyHint";
|
|
1854
1875
|
}
|
|
1855
1876
|
/** 与 pnpmPolicyHintOf 配套的文案参数:release-age 场景给出可重试时刻({time})。 */
|
|
@@ -1857,73 +1878,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1857
1878
|
return { time: releaseAgeRetryAfter(message) ?? "" };
|
|
1858
1879
|
}
|
|
1859
1880
|
/**
|
|
1860
|
-
*
|
|
1861
|
-
* 分界是「本机环境问题」(装任何插件都会同样失败 → 不引导提 Issue
|
|
1862
|
-
*
|
|
1863
|
-
* 原因见 classifyFailure 内注释。
|
|
1864
|
-
*
|
|
1865
|
-
* 本机环境问题:
|
|
1866
|
-
* - npmTooOld:本机 npm 版本过低或自身缺陷 —— npm arborist 解 peer 依赖时抛 `edgesOut`
|
|
1867
|
-
* (build-ideal-tree.js 内部报错),或服务端已核实版本低于阈值并打了 `[npm-too-low]` 标记
|
|
1868
|
-
* → 引导升级 npm
|
|
1869
|
-
* - dshMissing:安装器 spawn 的 `dsh` 命令找不到(Windows cmd「不是内部或外部命令」/ POSIX
|
|
1870
|
-
* 「command not found」/ spawn ENOENT)→ 提示检查 PATH / 重装 DSH
|
|
1871
|
-
* - gitMissing:安装器调用 `git` 时找不到可执行文件(Windows cmd「'git' is not recognized」/
|
|
1872
|
-
* POSIX「git: command not found」/ spawn ENOENT)→ 提示安装 Git / 加入 PATH
|
|
1873
|
-
* - pnpmMissing:dsh 存在但调用的 `pnpm` 找不到(dsh 报 `pnpm not found on PATH` / POSIX
|
|
1874
|
-
* 「pnpm: command not found」/ spawn ENOENT)—— dsh 用 pnpm 管理 profile 插件
|
|
1875
|
-
* → 提示安装 / 开启 pnpm
|
|
1876
|
-
* - npmMissing:全局 npm 安装通道(`npm install -g …`)spawn 的 `npm` 命令找不到,形态同上
|
|
1877
|
-
* → 提示安装 npm(Node.js 自带)/ 加入 PATH
|
|
1878
|
-
* - pnpmStore:pnpm 报 store / virtual store 位置不匹配(`ERR_PNPM_UNEXPECTED_STORE` /
|
|
1879
|
-
* `ERR_PNPM_UNEXPECTED_VIRTUAL_STORE` / `Unexpected store location`)—— profile 目录里的依赖
|
|
1880
|
-
* 是另一个大版本的 pnpm 生成的(或 profile 目录被复制/移动、virtual-store-dir 配置变化),
|
|
1881
|
-
* 当前 pnpm 出于安全不认 → 提示清理 profile 依赖目录后用当前 pnpm 重建
|
|
1882
|
-
* - pnpmWorkspace:pnpm 拒绝在 workspace 根目录下安装(`ERR_PNPM_ADDING_TO_ROOT`)—— profile
|
|
1883
|
-
* 目录含 pnpm-workspace.yaml 即被 pnpm 视为 workspace 根,宿主调 `pnpm add` 时未声明在根
|
|
1884
|
-
* 操作(缺 `-w`/`--workspace-root`),整条命令被拒 → 提示在 profile 的 .npmrc 里加
|
|
1885
|
-
* `ignore-workspace-root-check=true` 或升级宿主
|
|
1886
|
-
* - originRejected:请求的来源没通过本地 hub 服务的校验(服务端 403,正文是裸的
|
|
1887
|
-
* `untrusted origin`)—— 请求在进入安装流程前就被拒,与 pnpm 无关;常见于用非 localhost 的
|
|
1888
|
-
* 地址(如局域网 IP)打开市场页面,或宿主页面的 origin 未被识别 → 提示从本机地址打开市场后重试
|
|
1889
|
-
* - pnpmPolicy:pnpm 的供应链安全策略拒绝安装(缺少 tarball integrity、`ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION` /
|
|
1890
|
-
* `Minimum release age` —— 锁文件里包的发布时间还不满 24 小时被拒;`untrusted origin` ——
|
|
1891
|
-
* 依赖来源未被本机 pnpm 信任)→ 提示按子场景给解法(发布未满 24 小时 → `minimumReleaseAge: 0`
|
|
1892
|
-
* 豁免或等满 24 小时;untrusted origin → 删除 profile 的 node_modules + pnpm-lock.yaml 清掉
|
|
1893
|
-
* 不受信任来源后重装)
|
|
1894
|
-
* - pnpmUnusedPatch:profile 里留着指向旧版本 dsh-plugin 的 patch 声明,本次安装解析到的版本
|
|
1895
|
-
* 已经不是它(`ERR_PNPM_UNUSED_PATCH` / `The following patches were not used: dsh-plugin@1.4.2`)
|
|
1896
|
-
* —— pnpm 发现补丁没被用上即中止整次安装 → 提示删掉该条目后重试
|
|
1897
|
-
* - pnpmMissingDep:profile 里留着一条指向 registry 上不存在的包的依赖,pnpm 解析时收到 404
|
|
1898
|
-
* (`ERR_PNPM_FETCH_404` / `Not Found - 404`)—— 该 profile 的任何安装都会先卡在这条依赖上
|
|
1899
|
-
* → 提示按包名删掉该条目后重试(404 的包通常不是正在安装的插件,故不引导提 Issue)
|
|
1900
|
-
* - fileLocked:pnpm 无法替换 profile 里被其他进程占用的文件(Windows `os error 32`
|
|
1901
|
-
* 「另一个程序正在使用此文件」/ `EBUSY` / `resource busy or locked`)—— 通常是宿主进程或
|
|
1902
|
-
* 杀毒软件实时扫描持有句柄 → 提示完全退出宿主后重试
|
|
1903
|
-
* - accessDenied:pnpm 在 profile 里替换文件时被系统拒绝写入(Windows `os error 5`
|
|
1904
|
-
* 「拒绝访问」= ERROR_ACCESS_DENIED / Node 的 `EPERM` `EACCES` / `Access is denied`)——
|
|
1905
|
-
* 文件/目录被其他进程占用、只读属性、目录 ACL 受限,或杀毒软件实时防护拦截写入
|
|
1906
|
-
* → 提示退出宿主 / 关杀软后重试,仍失败则检查只读属性并以管理员身份运行
|
|
1907
|
-
* - fsUnavailable:本机文件系统层面根本写不进去 —— 磁盘/分区空间耗尽(`ENOSPC` /
|
|
1908
|
-
* `no space left on device`,Windows 为 `os error 112`)、目标分卷或挂载点为只读
|
|
1909
|
-
* (`EROFS` / `read-only file system`,Windows 写保护为 `os error 19`)、进程可用的文件句柄
|
|
1910
|
-
* 被耗尽(`EMFILE` / `ENFILE` / `too many open files`),都发生在 pnpm 落盘阶段
|
|
1911
|
-
* → 提示按报错代码对号入座(清空间 / 换可写目录 / 重启宿主释放句柄)
|
|
1912
|
-
* - network:安装前连通性预检拦截(服务端 `[network]` 标记)、底层连接失败
|
|
1913
|
-
* (ERR_PNPM_GIT_FETCH_FAILED / ETIMEDOUT / DNS 解析 / TLS 握手 / 代理拒绝),或
|
|
1914
|
-
* registry tarball 拉取失败(`fetch failed` / `GET …/-/…tgz error (n)` —— 常见于本机
|
|
1915
|
-
* npm/pnpm 的 registry 被指向内网/自定义源,该源取不到包),或界面请求压根没送达宿主服务
|
|
1916
|
-
* (浏览器 fetch 的 `Failed to fetch` —— 宿主未就绪/正在重启,或本地代理拦了回环地址)
|
|
1917
|
-
* → 提示检查网络,registry 指向自定义源时给出换源指引
|
|
1918
|
-
*
|
|
1919
|
-
* 插件分发/依赖问题(引导去仓库提 Issue):
|
|
1920
|
-
* - pnpmIgnoredBuild:插件自身或依赖的构建脚本被 pnpm 安全白名单(allowBuilds)默认拦截
|
|
1921
|
-
* (`ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED` / `ERR_PNPM_IGNORED_BUILDS`)—— 只影响带安装期
|
|
1922
|
-
* 构建的插件 → 建议改用预编译版本或关闭安装期构建
|
|
1923
|
-
* - pluginPrepare:插件的 prepare/构建脚本实际执行失败(git tarball 常因缺失子模块或构建产物
|
|
1924
|
-
* 导致),或装后校验发现 package.json 声明的入口文件不在发布物里(服务端 `[packaging]` 标记)
|
|
1925
|
-
* —— 属插件打包/分发问题
|
|
1926
|
-
* - repo:其余失败,默认按插件仓库问题处理
|
|
1881
|
+
* 失败归类:把安装输出归到具体成因,供弹窗文案与是否引导提 Issue 使用。
|
|
1882
|
+
* 分界是「本机环境问题」(装任何插件都会同样失败 → 不引导提 Issue)与「插件分发问题」
|
|
1883
|
+
* (只影响这个插件 → 才引导提 Issue)。各分支判定顺序有依赖,见函数内注释。
|
|
1927
1884
|
*/
|
|
1928
1885
|
function classifyFailure(message) {
|
|
1929
1886
|
if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
|
|
@@ -1934,7 +1891,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1934
1891
|
if (/ERR_PNPM_UNEXPECTED_(VIRTUAL_)?STORE|Unexpected (virtual )?store location/i.test(message)) return "pnpmStore";
|
|
1935
1892
|
if (/ERR_PNPM_ADDING_TO_ROOT|add the dependency to the workspace root/i.test(message)) return "pnpmWorkspace";
|
|
1936
1893
|
if (/(^|\n)untrusted origin\s*$/.test(message)) return "originRejected";
|
|
1937
|
-
if (missingTarballIntegrity(message) || /ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|Minimum release age|untrusted origin/i.test(message)) return "pnpmPolicy";
|
|
1894
|
+
if (missingTarballIntegrity(message) || /ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|ERR_PNPM_NO_MATURE_MATCHING_VERSION|Minimum release age|minimumReleaseAge|untrusted origin/i.test(message)) return "pnpmPolicy";
|
|
1938
1895
|
if (/ERR_PNPM_UNUSED_PATCH|patches were not used/i.test(message)) return "pnpmUnusedPatch";
|
|
1939
1896
|
if (/os error 32|EBUSY|resource busy or locked|being used by another process/i.test(message)) return "fileLocked";
|
|
1940
1897
|
if (/os error 5\b|ERROR_ACCESS_DENIED|\bEPERM\b|\bEACCES\b|access is denied/i.test(message)) return "accessDenied";
|
|
@@ -1943,8 +1900,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1943
1900
|
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";
|
|
1944
1901
|
if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
|
|
1945
1902
|
if (/ERR_PNPM_FETCH_404|404 Not Found|Not Found - 404/i.test(message)) return "pnpmMissingDep";
|
|
1903
|
+
if (/\bERR_PNPM_NO_MATCHING_VERSION\b|\bETARGET\b|No matching version found/i.test(message)) return "registryVersionStale";
|
|
1904
|
+
if (/\bERR_PNPM_LINKED_PKG_DIR_NOT_FOUND\b|Could not install from .+ as it does not exist/i.test(message)) return "pnpmLinkedDirMissing";
|
|
1946
1905
|
if (/ERR_PNPM_PREPARE_PACKAGE|ELIFECYCLE|prepare-guard/i.test(message) || /Command failed/.test(message)) return "pluginPrepare";
|
|
1947
|
-
return "
|
|
1906
|
+
return "hub";
|
|
1948
1907
|
}
|
|
1949
1908
|
/** 从服务端 `[npm-too-low]` 标记行提取本机 npm 版本(如 `[npm-too-low] npm@11.3.0` → "11.3.0");
|
|
1950
1909
|
* 历史记录无标记时返回 null,前端据此决定提示文案是否带具体版本。 */
|
|
@@ -2086,12 +2045,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2086
2045
|
case "pnpmPolicy": return "pnpm supply-chain policy blocked the install on the user machine";
|
|
2087
2046
|
case "pnpmUnusedPatch": return "stale pnpm patch entry on the user machine";
|
|
2088
2047
|
case "pnpmMissingDep": return "dependency not found on the npm registry on the user machine";
|
|
2048
|
+
case "registryVersionStale": return "requested version not available on the npm registry in use on the user machine";
|
|
2049
|
+
case "pnpmLinkedDirMissing": return "dangling local (link:) dependency in the user profile";
|
|
2089
2050
|
case "fileLocked": return "file locked by another process on the user machine";
|
|
2090
2051
|
case "accessDenied": return "file write access denied on the user machine";
|
|
2091
2052
|
case "fsUnavailable": return "local file system unavailable on the user machine";
|
|
2092
2053
|
case "pnpmIgnoredBuild": return "build scripts blocked by pnpm allowlist";
|
|
2093
2054
|
case "pluginPrepare": return "plugin distribution incomplete";
|
|
2094
2055
|
case "network": return "network failure on the user side";
|
|
2056
|
+
case "hub": return "install failed (cause unclassified)";
|
|
2095
2057
|
default: return "plugin install failed";
|
|
2096
2058
|
}
|
|
2097
2059
|
}
|
|
@@ -2172,6 +2134,76 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2172
2134
|
}
|
|
2173
2135
|
return url;
|
|
2174
2136
|
}
|
|
2137
|
+
/**
|
|
2138
|
+
* 插件中心自身仓库的预填 Issue 链接:用于「非插件侧」失败(无法识别的未知原因、
|
|
2139
|
+
* 以及 pnpm allowBuilds 拦截这类不再归到插件作者的情形)。正文带上目标插件与完整
|
|
2140
|
+
* 错误摘要,供插件中心维护者分诊 —— 不再把环境问题/插件中心自身问题误投给插件作者。
|
|
2141
|
+
*/
|
|
2142
|
+
function hubIssueUrl(pluginRepo, message, env, command, attempts) {
|
|
2143
|
+
const kind = classifyFailure(message);
|
|
2144
|
+
const executed = executedCommandOf(command, attempts);
|
|
2145
|
+
const repo = pluginRepo && pluginRepo.trim() !== "" ? pluginRepo.trim() : "unknown";
|
|
2146
|
+
const title = `[dsh-plugin-hub] ${reasonTitleOf(kind)}: ${repo}`;
|
|
2147
|
+
const code = coreErrorCode(message);
|
|
2148
|
+
const build = (coreChars) => {
|
|
2149
|
+
const body = [
|
|
2150
|
+
"## Summary",
|
|
2151
|
+
`- Auto-classified cause: ${reasonTitleOf(kind)}`,
|
|
2152
|
+
`- Target plugin: \`${repo}\``,
|
|
2153
|
+
...code ? [`- Key error: \`${code}\``] : [],
|
|
2154
|
+
"- 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.",
|
|
2155
|
+
"",
|
|
2156
|
+
`## [DSH Plugin 插件市场](${SITE_URL}) · 安装 Plugin 失败错误信息`,
|
|
2157
|
+
`本错误信息由 [dsh-plugin-hub](${GITHUB_URL}) 插件市场的安装程序自动生成,随本次安装失败一并提交。`,
|
|
2158
|
+
`- 实际执行的安装命令:${executed ? `\`${executed}\`` : "unknown (no executed command recorded)"}`,
|
|
2159
|
+
`- 执行结果:安装失败,未能安装该插件。`,
|
|
2160
|
+
...attempts && attempts.length > 0 ? [
|
|
2161
|
+
"",
|
|
2162
|
+
"## Attempted install channels(已尝试的安装方式)",
|
|
2163
|
+
...attempts.map((a) => `- ${a}`)
|
|
2164
|
+
] : [],
|
|
2165
|
+
"",
|
|
2166
|
+
"## Environment",
|
|
2167
|
+
`- Plugin: \`${repo}\``,
|
|
2168
|
+
...env ? [
|
|
2169
|
+
`- DSH: ${env.dshVersion ? `v${env.dshVersion}` : "unknown"}`,
|
|
2170
|
+
`- Plugin Hub: v${PLUGIN_VERSION}`,
|
|
2171
|
+
`- Node: ${env.nodeVersion}`,
|
|
2172
|
+
`- pnpm: ${env.pnpmVersion ? `v${env.pnpmVersion}` : "unknown"}`,
|
|
2173
|
+
`- npm: ${env.npmVersion ? `v${env.npmVersion}` : "unknown"}`,
|
|
2174
|
+
`- git: ${env.gitVersion ? `v${env.gitVersion}` : "unknown"}`,
|
|
2175
|
+
`- OS: ${env.platform} ${env.arch} (${env.release})`,
|
|
2176
|
+
`- Profile: \`${env.profile}\``,
|
|
2177
|
+
`- DSH Home: \`${env.dshHome}\``,
|
|
2178
|
+
`- Full log: \`~/.dsh/profiles/${env.profile}/hub.log\` (paste or attach for the full output)`
|
|
2179
|
+
] : [],
|
|
2180
|
+
...repo !== "unknown" ? [`- Catalog: [${pluginSiteUrl(repo)}](${pluginSiteUrl(repo)})`] : [],
|
|
2181
|
+
"",
|
|
2182
|
+
"## Error (core)",
|
|
2183
|
+
"",
|
|
2184
|
+
"```",
|
|
2185
|
+
summarizeError(message, coreChars),
|
|
2186
|
+
"```",
|
|
2187
|
+
"",
|
|
2188
|
+
"---",
|
|
2189
|
+
`This error was produced by the [dsh-plugin-hub](${GITHUB_URL}) installer bundled with DeepSeek Harness.`
|
|
2190
|
+
].join("\n");
|
|
2191
|
+
return `https://github.com/${HUB_REPO}/issues/new?title=${encodeURIComponent(title)}&body=${encodeURIComponent(body)}`;
|
|
2192
|
+
};
|
|
2193
|
+
const MAX_URL_CHARS = 7600;
|
|
2194
|
+
let url = build(MAX_CORE_CHARS);
|
|
2195
|
+
if (url.length > MAX_URL_CHARS) for (const budget of [
|
|
2196
|
+
4e3,
|
|
2197
|
+
2500,
|
|
2198
|
+
1400,
|
|
2199
|
+
800,
|
|
2200
|
+
400
|
|
2201
|
+
]) {
|
|
2202
|
+
url = build(budget);
|
|
2203
|
+
if (url.length <= MAX_URL_CHARS) break;
|
|
2204
|
+
}
|
|
2205
|
+
return url;
|
|
2206
|
+
}
|
|
2175
2207
|
//#endregion
|
|
2176
2208
|
//#region src/client/hooks/useLanguage.ts
|
|
2177
2209
|
/**
|
|
@@ -3405,7 +3437,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3405
3437
|
className: Modal_module_css_default.modalCopy,
|
|
3406
3438
|
disabled: busy,
|
|
3407
3439
|
onClick: onCopy
|
|
3408
|
-
}, t("copyInstallCommand")), (0, react.createElement)("button", {
|
|
3440
|
+
}, t("copyInstallCommand")), cliOnly ? null : (0, react.createElement)("button", {
|
|
3409
3441
|
className: Modal_module_css_default.modalInstall,
|
|
3410
3442
|
disabled: busy,
|
|
3411
3443
|
onClick: onInstall
|
|
@@ -3497,7 +3529,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3497
3529
|
}, 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, [(() => {
|
|
3498
3530
|
const pkg = missingRegistryPackageOf(message);
|
|
3499
3531
|
return pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPnpmMissingDepTarget", { pkg })) : null;
|
|
3500
|
-
})(), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmMissingDepHint"))]) : 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, [
|
|
3532
|
+
})(), (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, [
|
|
3501
3533
|
(() => {
|
|
3502
3534
|
const target = unreachableTargetOf(message);
|
|
3503
3535
|
return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
|
|
@@ -3511,19 +3543,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3511
3543
|
className: Modal_module_css_default.failDiagBtn,
|
|
3512
3544
|
onClick: onRunDiagnostics
|
|
3513
3545
|
}, t("failNetworkRunDiag")) : null
|
|
3514
|
-
]) : failureKind === "pluginPrepare"
|
|
3546
|
+
]) : failureKind === "pluginPrepare" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, /\[packaging\]/i.test(message) ? t("failPackagingHint") : t("failPrepareHint")), repo ? (0, react.createElement)("a", {
|
|
3515
3547
|
className: Modal_module_css_default.failBigIssue,
|
|
3516
3548
|
href: pluginIssueUrl(repo, message, env, command, attempts),
|
|
3517
3549
|
target: "_blank",
|
|
3518
3550
|
rel: "noopener noreferrer",
|
|
3519
3551
|
title: t("failIssueHint")
|
|
3520
|
-
}, t("failIssueBig")) : null]) :
|
|
3552
|
+
}, t("failIssueBig")) : null]) : (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", {
|
|
3521
3553
|
className: Modal_module_css_default.failBigIssue,
|
|
3522
|
-
href:
|
|
3554
|
+
href: hubIssueUrl(repo, message, env, command, attempts),
|
|
3523
3555
|
target: "_blank",
|
|
3524
3556
|
rel: "noopener noreferrer",
|
|
3525
|
-
title: t("
|
|
3526
|
-
}, t("
|
|
3557
|
+
title: t("failHubIssueHint")
|
|
3558
|
+
}, t("failHubIssueBig"))])), (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, (0, react.createElement)("button", {
|
|
3527
3559
|
className: Modal_module_css_default.restartLater,
|
|
3528
3560
|
onClick: onClose
|
|
3529
3561
|
}, t("errorClose"))))));
|
|
@@ -3717,13 +3749,19 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3717
3749
|
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
3718
3750
|
*
|
|
3719
3751
|
* Hub 版本信息 / 自我更新说明弹窗:
|
|
3720
|
-
* - 有更新(
|
|
3752
|
+
* - 有更新(state='available'):标题「有新版本」,展示新版本号、发布时间与 Worker 下发的
|
|
3721
3753
|
* Markdown 变更记录(renderMarkdown 渲染,双语言按界面语言取 {zh,en} 对象),
|
|
3722
3754
|
* 按钮「稍后再说 / 直接更新」,确认后进入安装弹窗执行覆盖重装。
|
|
3723
|
-
* -
|
|
3755
|
+
* - 暂缓提示(state='pending'):远端确有新版本,但发布未满供应链安全门槛,pnpm 此时会
|
|
3756
|
+
* 静默回退到旧版本 —— 仍按「有新版本」展示,只给「稍后再说」,并说明稍后会自动提示。
|
|
3757
|
+
* - 无更新 / 信息缺失(state='latest' / 'none'):标题「当前版本」,版本号与本机版本取自
|
|
3758
|
+
* currentVersion(构建注入的 PLUGIN_VERSION),**不得**用远端最新版号冒充本机版本。
|
|
3724
3759
|
* 点击头部版本号(或「可更新」徽标)打开 —— 无论有无更新都能看到更新内容。
|
|
3725
3760
|
*/
|
|
3726
|
-
function HubUpdateModal({ info, lang, t,
|
|
3761
|
+
function HubUpdateModal({ info, state, currentVersion, lang, t, onProceed, onClose }) {
|
|
3762
|
+
const hasUpdate = state === "available";
|
|
3763
|
+
const pending = state === "pending";
|
|
3764
|
+
const shownVersion = hasUpdate || pending ? info.version : currentVersion || info.version;
|
|
3727
3765
|
const notesRaw = typeof info.notes === "string" ? info.notes : info.notes && typeof info.notes === "object" ? lang === "en" ? info.notes.en ?? info.notes.zh ?? "" : info.notes.zh ?? info.notes.en ?? "" : "";
|
|
3728
3766
|
const notesHtml = notesRaw.trim() ? renderMarkdown(notesRaw) : null;
|
|
3729
3767
|
let published = null;
|
|
@@ -3740,11 +3778,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3740
3778
|
className: `${Modal_module_css_default.modal} ${Modal_module_css_default.hubUpdateModal}`,
|
|
3741
3779
|
role: "dialog",
|
|
3742
3780
|
"aria-modal": "true"
|
|
3743
|
-
}, (0, react.createElement)("div", { className: Modal_module_css_default.modalHead }, (0, react.createElement)("div", { className: Modal_module_css_default.modalTitle }, t(hasUpdate ? "hubUpdateTitle" : "hubCurrentTitle")), (0, react.createElement)("button", {
|
|
3781
|
+
}, (0, react.createElement)("div", { className: Modal_module_css_default.modalHead }, (0, react.createElement)("div", { className: Modal_module_css_default.modalTitle }, t(hasUpdate || pending ? "hubUpdateTitle" : "hubCurrentTitle")), (0, react.createElement)("button", {
|
|
3744
3782
|
className: Modal_module_css_default.modalClose,
|
|
3745
3783
|
"aria-label": t("confirmCancel"),
|
|
3746
3784
|
onClick: () => onClose()
|
|
3747
|
-
}, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalDesc }, t(hasUpdate ? "hubUpdateDesc" : "hubCurrentDesc", { version:
|
|
3785
|
+
}, (0, react.createElement)(CloseIcon))), (0, react.createElement)("div", { className: Modal_module_css_default.modalDesc }, t(hasUpdate ? "hubUpdateDesc" : pending ? "hubPendingDesc" : "hubCurrentDesc", { version: shownVersion })), (0, react.createElement)("div", { className: Modal_module_css_default.hubUpdateMeta }, (0, react.createElement)("span", { className: Modal_module_css_default.hubUpdateMetaItem }, `${t("version")} ${shownVersion}`), published ? (0, react.createElement)("span", { className: Modal_module_css_default.hubUpdateMetaItem }, `${t("hubUpdatePublished")} ${published}`) : null), notesHtml ? (0, react.createElement)("div", {
|
|
3748
3786
|
className: Modal_module_css_default.hubUpdateNotes,
|
|
3749
3787
|
dangerouslySetInnerHTML: { __html: notesHtml }
|
|
3750
3788
|
}) : null, (0, react.createElement)("div", { className: Modal_module_css_default.modalActions }, hasUpdate ? [(0, react.createElement)("button", {
|
|
@@ -3756,7 +3794,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3756
3794
|
}, t("updateNow"))] : (0, react.createElement)("button", {
|
|
3757
3795
|
className: Modal_module_css_default.modalInstall,
|
|
3758
3796
|
onClick: onClose
|
|
3759
|
-
}, t("hubUpToDate")))));
|
|
3797
|
+
}, t(pending ? "hubUpdateLater" : "hubUpToDate")))));
|
|
3760
3798
|
}
|
|
3761
3799
|
//#endregion
|
|
3762
3800
|
//#region src/client/logic/format.ts
|
|
@@ -4065,6 +4103,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4065
4103
|
const pkg = missingRegistryPackageOf(r.message);
|
|
4066
4104
|
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"))]);
|
|
4067
4105
|
}
|
|
4106
|
+
if (kind === "registryVersionStale") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failRegistryVersionStaleHint"));
|
|
4107
|
+
if (kind === "pnpmLinkedDirMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmLinkedDirMissingHint"));
|
|
4068
4108
|
if (kind === "fileLocked") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFileLockedHint"));
|
|
4069
4109
|
if (kind === "accessDenied") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failAccessDeniedHint"));
|
|
4070
4110
|
if (kind === "fsUnavailable") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFsUnavailableHint"));
|
|
@@ -4084,20 +4124,20 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4084
4124
|
onClick: onRunDiagnostics
|
|
4085
4125
|
}, t("failNetworkRunDiag")) : null
|
|
4086
4126
|
]);
|
|
4087
|
-
if (kind === "pluginPrepare"
|
|
4127
|
+
if (kind === "pluginPrepare") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, /\[packaging\]/i.test(r.message) ? t("failPackagingHint") : t("failPrepareHint")), r.repo && shownRepo ? (0, react.createElement)("a", {
|
|
4088
4128
|
className: Modal_module_css_default.failBigIssue,
|
|
4089
4129
|
href: pluginIssueUrl(shownRepo, r.message, env, r.command, r.attempts),
|
|
4090
4130
|
target: "_blank",
|
|
4091
4131
|
rel: "noopener noreferrer",
|
|
4092
4132
|
title: t("failIssueHint")
|
|
4093
4133
|
}, t("failIssueBig")) : null]);
|
|
4094
|
-
return
|
|
4134
|
+
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", {
|
|
4095
4135
|
className: Modal_module_css_default.failBigIssue,
|
|
4096
|
-
href:
|
|
4136
|
+
href: hubIssueUrl(shownRepo || r.repo, r.message, env, r.command, r.attempts),
|
|
4097
4137
|
target: "_blank",
|
|
4098
4138
|
rel: "noopener noreferrer",
|
|
4099
|
-
title: t("
|
|
4100
|
-
}, t("
|
|
4139
|
+
title: t("failHubIssueHint")
|
|
4140
|
+
}, t("failHubIssueBig"))]);
|
|
4101
4141
|
})())), !r.ok ? (0, react.createElement)("div", { className: Modal_module_css_default.noticeFoot }, (0, react.createElement)("span", {
|
|
4102
4142
|
className: Modal_module_css_default.noticeTime,
|
|
4103
4143
|
title: new Date(r.at).toLocaleString()
|
|
@@ -4279,39 +4319,39 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4279
4319
|
});
|
|
4280
4320
|
var List_module_css_default = {
|
|
4281
4321
|
"star": "_3XaZHa_star",
|
|
4282
|
-
"
|
|
4283
|
-
"
|
|
4322
|
+
"cardTitle": "_3XaZHa_cardTitle",
|
|
4323
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
4284
4324
|
"state": "_3XaZHa_state",
|
|
4285
|
-
"
|
|
4286
|
-
"stateDesc": "_3XaZHa_stateDesc",
|
|
4287
|
-
"card": "_3XaZHa_card",
|
|
4288
|
-
"cardMain": "_3XaZHa_cardMain",
|
|
4289
|
-
"list": "_3XaZHa_list",
|
|
4290
|
-
"body": "_3XaZHa_body",
|
|
4291
|
-
"detailBtn": "_3XaZHa_detailBtn",
|
|
4292
|
-
"verified": "_3XaZHa_verified",
|
|
4293
|
-
"installBtn": "_3XaZHa_installBtn",
|
|
4294
|
-
"stats": "_3XaZHa_stats",
|
|
4325
|
+
"cardHead": "_3XaZHa_cardHead",
|
|
4295
4326
|
"cardSide": "_3XaZHa_cardSide",
|
|
4296
|
-
"
|
|
4327
|
+
"installBtn": "_3XaZHa_installBtn",
|
|
4328
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
4329
|
+
"detailBtn": "_3XaZHa_detailBtn",
|
|
4330
|
+
"fork": "_3XaZHa_fork",
|
|
4331
|
+
"date": "_3XaZHa_date",
|
|
4332
|
+
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
4333
|
+
"stats": "_3XaZHa_stats",
|
|
4334
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
4335
|
+
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
4336
|
+
"card": "_3XaZHa_card",
|
|
4337
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
4338
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
4339
|
+
"desc": "_3XaZHa_desc",
|
|
4340
|
+
"footLink": "_3XaZHa_footLink",
|
|
4341
|
+
"stateActions": "_3XaZHa_stateActions",
|
|
4297
4342
|
"topics": "_3XaZHa_topics",
|
|
4298
|
-
"
|
|
4299
|
-
"
|
|
4343
|
+
"versionBadge": "_3XaZHa_versionBadge",
|
|
4344
|
+
"cardMain": "_3XaZHa_cardMain",
|
|
4345
|
+
"stateDesc": "_3XaZHa_stateDesc",
|
|
4300
4346
|
"diagBtn": "_3XaZHa_diagBtn",
|
|
4301
4347
|
"footer": "_3XaZHa_footer",
|
|
4302
|
-
"
|
|
4303
|
-
"cardTitle": "_3XaZHa_cardTitle",
|
|
4348
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
4304
4349
|
"topic": "_3XaZHa_topic",
|
|
4305
|
-
"desc": "_3XaZHa_desc",
|
|
4306
|
-
"cardHead": "_3XaZHa_cardHead",
|
|
4307
|
-
"date": "_3XaZHa_date",
|
|
4308
|
-
"footLink": "_3XaZHa_footLink",
|
|
4309
|
-
"fork": "_3XaZHa_fork",
|
|
4310
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
4311
4350
|
"actions": "_3XaZHa_actions",
|
|
4312
|
-
"
|
|
4313
|
-
"
|
|
4314
|
-
"
|
|
4351
|
+
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
4352
|
+
"list": "_3XaZHa_list",
|
|
4353
|
+
"verified": "_3XaZHa_verified",
|
|
4354
|
+
"body": "_3XaZHa_body"
|
|
4315
4355
|
};
|
|
4316
4356
|
//#endregion
|
|
4317
4357
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -4518,15 +4558,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4518
4558
|
css: css$8
|
|
4519
4559
|
});
|
|
4520
4560
|
var SectionTabs_module_css_default = {
|
|
4521
|
-
"noticeCount": "_7tvizq_noticeCount",
|
|
4522
|
-
"noticeIcon": "_7tvizq_noticeIcon",
|
|
4523
|
-
"root": "_7tvizq_root",
|
|
4524
|
-
"noticeBtn": "_7tvizq_noticeBtn",
|
|
4525
4561
|
"tab": "_7tvizq_tab",
|
|
4562
|
+
"noticeBtn": "_7tvizq_noticeBtn",
|
|
4563
|
+
"root": "_7tvizq_root",
|
|
4526
4564
|
"tabCount": "_7tvizq_tabCount",
|
|
4565
|
+
"noticeCount": "_7tvizq_noticeCount",
|
|
4527
4566
|
"tabCountActive": "_7tvizq_tabCountActive",
|
|
4528
|
-
"
|
|
4529
|
-
"tabActive": "_7tvizq_tabActive"
|
|
4567
|
+
"noticeIcon": "_7tvizq_noticeIcon",
|
|
4568
|
+
"tabActive": "_7tvizq_tabActive",
|
|
4569
|
+
"tabIcon": "_7tvizq_tabIcon"
|
|
4530
4570
|
};
|
|
4531
4571
|
//#endregion
|
|
4532
4572
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -4603,42 +4643,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4603
4643
|
css: css$7
|
|
4604
4644
|
});
|
|
4605
4645
|
var InstalledView_module_css_default = {
|
|
4606
|
-
"
|
|
4607
|
-
"
|
|
4608
|
-
"
|
|
4609
|
-
"
|
|
4610
|
-
"segRow": "_1nXeGW_segRow",
|
|
4646
|
+
"rowMain": "_1nXeGW_rowMain",
|
|
4647
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
4648
|
+
"rowDetail": "_1nXeGW_rowDetail",
|
|
4649
|
+
"toolbar": "_1nXeGW_toolbar",
|
|
4611
4650
|
"list": "_1nXeGW_list",
|
|
4612
|
-
"
|
|
4613
|
-
"
|
|
4651
|
+
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
4652
|
+
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
4614
4653
|
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
4654
|
+
"versionBadge": "_1nXeGW_versionBadge",
|
|
4655
|
+
"rowDesc": "_1nXeGW_rowDesc",
|
|
4656
|
+
"segRow": "_1nXeGW_segRow",
|
|
4657
|
+
"rowTitle": "_1nXeGW_rowTitle",
|
|
4615
4658
|
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
4616
|
-
"
|
|
4617
|
-
"rowMain": "_1nXeGW_rowMain",
|
|
4618
|
-
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
4659
|
+
"exampleRow": "_1nXeGW_exampleRow",
|
|
4619
4660
|
"segGroup": "_1nXeGW_segGroup",
|
|
4620
|
-
"statusPending": "_1nXeGW_statusPending",
|
|
4621
|
-
"searchWrap": "_1nXeGW_searchWrap",
|
|
4622
|
-
"rowDetail": "_1nXeGW_rowDetail",
|
|
4623
|
-
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
4624
|
-
"toolbar": "_1nXeGW_toolbar",
|
|
4625
|
-
"rowActions": "_1nXeGW_rowActions",
|
|
4626
|
-
"rowCategory": "_1nXeGW_rowCategory",
|
|
4627
|
-
"rowRestart": "_1nXeGW_rowRestart",
|
|
4628
4661
|
"segBtn": "_1nXeGW_segBtn",
|
|
4629
4662
|
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
4630
4663
|
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
4631
|
-
"
|
|
4632
|
-
"
|
|
4633
|
-
"
|
|
4634
|
-
"rowTitle": "_1nXeGW_rowTitle",
|
|
4664
|
+
"statusDot": "_1nXeGW_statusDot",
|
|
4665
|
+
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
4666
|
+
"root": "_1nXeGW_root",
|
|
4635
4667
|
"statusInactive": "_1nXeGW_statusInactive",
|
|
4636
|
-
"versionBadge": "_1nXeGW_versionBadge",
|
|
4637
4668
|
"updateBadge": "_1nXeGW_updateBadge",
|
|
4638
|
-
"
|
|
4669
|
+
"rowCategory": "_1nXeGW_rowCategory",
|
|
4670
|
+
"rowRestart": "_1nXeGW_rowRestart",
|
|
4639
4671
|
"rowRepo": "_1nXeGW_rowRepo",
|
|
4640
|
-
"
|
|
4641
|
-
"
|
|
4672
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
4673
|
+
"statusPending": "_1nXeGW_statusPending",
|
|
4674
|
+
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
4675
|
+
"row": "_1nXeGW_row",
|
|
4676
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
4677
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
4678
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
4679
|
+
"searchWrap": "_1nXeGW_searchWrap",
|
|
4680
|
+
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
4681
|
+
"empty": "_1nXeGW_empty"
|
|
4642
4682
|
};
|
|
4643
4683
|
//#endregion
|
|
4644
4684
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -4683,7 +4723,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4683
4723
|
onClick
|
|
4684
4724
|
}, label, icon);
|
|
4685
4725
|
}
|
|
4686
|
-
function InstalledRow({ item, t, langKey, canReveal, revealLabel, onOpenDetail, onReveal, onUpdate, onUninstall, onRestart }) {
|
|
4726
|
+
function InstalledRow({ item, t, langKey, canReveal, revealLabel, pendingRestart, onOpenDetail, onReveal, onUpdate, onUninstall, onRestart }) {
|
|
4687
4727
|
const name = item.plugin?.displayName ?? item.name;
|
|
4688
4728
|
const repo = item.repo;
|
|
4689
4729
|
const category = item.plugin?.category;
|
|
@@ -4702,9 +4742,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4702
4742
|
}
|
|
4703
4743
|
}
|
|
4704
4744
|
}, (0, react.createElement)("div", { className: InstalledView_module_css_default.rowTitleLine }, (0, react.createElement)("span", {
|
|
4705
|
-
className: item.loaded ? InstalledView_module_css_default.statusDot : item.dshCapable ? `${InstalledView_module_css_default.statusDot} ${InstalledView_module_css_default.statusPending}` : `${InstalledView_module_css_default.statusDot} ${InstalledView_module_css_default.statusInactive}`,
|
|
4706
|
-
title: item.loaded ? t("statusRunning") : item.dshCapable ? t("statusPending") : t("exampleHint"),
|
|
4707
|
-
"aria-label": item.loaded ? t("statusRunning") : item.dshCapable ? t("statusPending") : t("exampleHint")
|
|
4745
|
+
className: item.loaded ? InstalledView_module_css_default.statusDot : item.dshCapable && pendingRestart ? `${InstalledView_module_css_default.statusDot} ${InstalledView_module_css_default.statusPending}` : `${InstalledView_module_css_default.statusDot} ${InstalledView_module_css_default.statusInactive}`,
|
|
4746
|
+
title: item.loaded ? t("statusRunning") : item.dshCapable && pendingRestart ? t("statusPending") : item.dshCapable ? t("statusInactive") : t("exampleHint"),
|
|
4747
|
+
"aria-label": item.loaded ? t("statusRunning") : item.dshCapable && pendingRestart ? t("statusPending") : item.dshCapable ? t("statusInactive") : t("exampleHint")
|
|
4708
4748
|
}), (0, react.createElement)("div", { className: InstalledView_module_css_default.rowMain }, (0, react.createElement)("span", { className: InstalledView_module_css_default.rowTitle }, name), item.installedVersion ? (0, react.createElement)("span", {
|
|
4709
4749
|
className: InstalledView_module_css_default.versionBadge,
|
|
4710
4750
|
title: t("installedVersionLabel")
|
|
@@ -4714,7 +4754,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4714
4754
|
}, t("updateAvailable")) : null), (0, react.createElement)("span", {
|
|
4715
4755
|
className: isCustom ? `${InstalledView_module_css_default.rowSourceTag} ${InstalledView_module_css_default.rowSourceTagManual}` : `${InstalledView_module_css_default.rowSourceTag} ${InstalledView_module_css_default.rowSourceTagHub}`,
|
|
4716
4756
|
title: isCustom ? t("manualInstallHint") : t("hubInstallHint")
|
|
4717
|
-
}, isCustom ? t("manualInstall") : t("hubInstall")), (0, react.createElement)("div", { className: InstalledView_module_css_default.rowActions }, !item.loaded && item.dshCapable ? (0, react.createElement)("button", {
|
|
4757
|
+
}, isCustom ? t("manualInstall") : t("hubInstall")), (0, react.createElement)("div", { className: InstalledView_module_css_default.rowActions }, !item.loaded && item.dshCapable && pendingRestart ? (0, react.createElement)("button", {
|
|
4718
4758
|
className: InstalledView_module_css_default.rowRestart,
|
|
4719
4759
|
type: "button",
|
|
4720
4760
|
title: t("restartPendingHint"),
|
|
@@ -4753,7 +4793,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4753
4793
|
}, desc) : null);
|
|
4754
4794
|
}
|
|
4755
4795
|
/** 行列表:单个已安装列表(自定义安装与目录插件混排,靠徽标区分)。 */
|
|
4756
|
-
function RowList({ items, t, langKey, canReveal, revealLabel, onOpenDetail, onReveal, onUpdate, onUninstall, onRestart }) {
|
|
4796
|
+
function RowList({ items, t, langKey, canReveal, revealLabel, pendingRestarts, onOpenDetail, onReveal, onUpdate, onUninstall, onRestart }) {
|
|
4797
|
+
const pendingSet = new Set(pendingRestarts.map((r) => r.toLowerCase()));
|
|
4757
4798
|
return (0, react.createElement)("ul", { className: InstalledView_module_css_default.list }, items.map((item) => (0, react.createElement)(InstalledRow, {
|
|
4758
4799
|
key: item.name,
|
|
4759
4800
|
item,
|
|
@@ -4761,6 +4802,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4761
4802
|
langKey,
|
|
4762
4803
|
canReveal,
|
|
4763
4804
|
revealLabel,
|
|
4805
|
+
pendingRestart: item.repo !== null && pendingSet.has(item.repo.toLowerCase()),
|
|
4764
4806
|
onOpenDetail,
|
|
4765
4807
|
onReveal,
|
|
4766
4808
|
onUpdate,
|
|
@@ -4768,7 +4810,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4768
4810
|
onRestart
|
|
4769
4811
|
})));
|
|
4770
4812
|
}
|
|
4771
|
-
function InstalledView({ items, t, langKey, platform, onOpenDetail, onReveal, onUpdate, onUninstall, onRestart }) {
|
|
4813
|
+
function InstalledView({ items, t, langKey, platform, pendingRestarts, onOpenDetail, onReveal, onUpdate, onUninstall, onRestart }) {
|
|
4772
4814
|
const [query, setQuery] = (0, react.useState)("");
|
|
4773
4815
|
/** 默认按「最近安装」排序(最新在前);点其他排序按钮用该排序的默认方向(Star/Fork 最多在前、名称正序) */
|
|
4774
4816
|
const [sort, setSort] = (0, react.useState)("sortInstalledAt");
|
|
@@ -4823,6 +4865,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4823
4865
|
langKey,
|
|
4824
4866
|
canReveal: platform === "darwin" || platform === "win32" || platform === "linux",
|
|
4825
4867
|
revealLabel: platform === "darwin" ? t("revealFolder") : t("openFolder"),
|
|
4868
|
+
pendingRestarts,
|
|
4826
4869
|
onOpenDetail,
|
|
4827
4870
|
onReveal,
|
|
4828
4871
|
onUpdate,
|
|
@@ -4884,28 +4927,28 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4884
4927
|
css: css$6
|
|
4885
4928
|
});
|
|
4886
4929
|
var CustomInstallView_module_css_default = {
|
|
4887
|
-
"installError": "zISxCG_installError",
|
|
4888
|
-
"installInput": "zISxCG_installInput",
|
|
4889
4930
|
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
4890
|
-
"installInputError": "zISxCG_installInputError",
|
|
4891
|
-
"installBtn": "zISxCG_installBtn",
|
|
4892
|
-
"channelOff": "zISxCG_channelOff",
|
|
4893
|
-
"helpLine": "zISxCG_helpLine",
|
|
4894
4931
|
"desc": "zISxCG_desc",
|
|
4895
|
-
"
|
|
4896
|
-
"channelOffText": "zISxCG_channelOffText",
|
|
4897
|
-
"helpNote": "zISxCG_helpNote",
|
|
4932
|
+
"installCardHead": "zISxCG_installCardHead",
|
|
4898
4933
|
"installCard": "zISxCG_installCard",
|
|
4899
4934
|
"installLabel": "zISxCG_installLabel",
|
|
4900
4935
|
"installInsertBtn": "zISxCG_installInsertBtn",
|
|
4901
|
-
"
|
|
4902
|
-
"helpCmd": "zISxCG_helpCmd",
|
|
4903
|
-
"installRow": "zISxCG_installRow",
|
|
4904
|
-
"helpBody": "zISxCG_helpBody",
|
|
4936
|
+
"installBtn": "zISxCG_installBtn",
|
|
4905
4937
|
"installExample": "zISxCG_installExample",
|
|
4938
|
+
"channelOff": "zISxCG_channelOff",
|
|
4939
|
+
"helpNote": "zISxCG_helpNote",
|
|
4940
|
+
"helpLine": "zISxCG_helpLine",
|
|
4941
|
+
"channelOffText": "zISxCG_channelOffText",
|
|
4942
|
+
"installError": "zISxCG_installError",
|
|
4943
|
+
"helpBody": "zISxCG_helpBody",
|
|
4944
|
+
"installRow": "zISxCG_installRow",
|
|
4945
|
+
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
4946
|
+
"helpCmd": "zISxCG_helpCmd",
|
|
4906
4947
|
"installCards": "zISxCG_installCards",
|
|
4907
|
-
"
|
|
4908
|
-
"
|
|
4948
|
+
"root": "zISxCG_root",
|
|
4949
|
+
"installInputError": "zISxCG_installInputError",
|
|
4950
|
+
"installInput": "zISxCG_installInput",
|
|
4951
|
+
"installCardDisabled": "zISxCG_installCardDisabled"
|
|
4909
4952
|
};
|
|
4910
4953
|
//#endregion
|
|
4911
4954
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -5195,30 +5238,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5195
5238
|
css: css$5
|
|
5196
5239
|
});
|
|
5197
5240
|
var SettingsView_module_css_default = {
|
|
5198
|
-
"
|
|
5241
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
5242
|
+
"settingControlStack": "_506LLG_settingControlStack",
|
|
5199
5243
|
"pageHeader": "_506LLG_pageHeader",
|
|
5200
5244
|
"card": "_506LLG_card",
|
|
5201
|
-
"pageTitle": "_506LLG_pageTitle",
|
|
5202
|
-
"settingTitle": "_506LLG_settingTitle",
|
|
5203
|
-
"proxyControl": "_506LLG_proxyControl",
|
|
5204
|
-
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5205
|
-
"settingDesc": "_506LLG_settingDesc",
|
|
5206
|
-
"content": "_506LLG_content",
|
|
5207
|
-
"navItem": "_506LLG_navItem",
|
|
5208
|
-
"settingRowStack": "_506LLG_settingRowStack",
|
|
5209
|
-
"pageDesc": "_506LLG_pageDesc",
|
|
5210
|
-
"navIcon": "_506LLG_navIcon",
|
|
5211
|
-
"navItemActive": "_506LLG_navItemActive",
|
|
5212
5245
|
"root": "_506LLG_root",
|
|
5246
|
+
"settingDesc": "_506LLG_settingDesc",
|
|
5213
5247
|
"textInput": "_506LLG_textInput",
|
|
5214
|
-
"
|
|
5215
|
-
"
|
|
5248
|
+
"settingRow": "_506LLG_settingRow",
|
|
5249
|
+
"settingLabel": "_506LLG_settingLabel",
|
|
5250
|
+
"settingControl": "_506LLG_settingControl",
|
|
5216
5251
|
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
5252
|
+
"controlDropdown": "_506LLG_controlDropdown",
|
|
5253
|
+
"pageTitle": "_506LLG_pageTitle",
|
|
5217
5254
|
"resetBtn": "_506LLG_resetBtn",
|
|
5255
|
+
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5218
5256
|
"sidebar": "_506LLG_sidebar",
|
|
5219
|
-
"
|
|
5220
|
-
"
|
|
5221
|
-
"
|
|
5257
|
+
"proxyHint": "_506LLG_proxyHint",
|
|
5258
|
+
"content": "_506LLG_content",
|
|
5259
|
+
"settingTitle": "_506LLG_settingTitle",
|
|
5260
|
+
"pageDesc": "_506LLG_pageDesc",
|
|
5261
|
+
"navItem": "_506LLG_navItem",
|
|
5262
|
+
"navIcon": "_506LLG_navIcon",
|
|
5263
|
+
"settingRowStack": "_506LLG_settingRowStack",
|
|
5264
|
+
"proxyControl": "_506LLG_proxyControl"
|
|
5222
5265
|
};
|
|
5223
5266
|
//#endregion
|
|
5224
5267
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -5237,18 +5280,18 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5237
5280
|
css: css$4
|
|
5238
5281
|
});
|
|
5239
5282
|
var Dropdown_module_css_default = {
|
|
5240
|
-
"
|
|
5241
|
-
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
5242
|
-
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
5283
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
5243
5284
|
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
5244
|
-
"
|
|
5245
|
-
"
|
|
5285
|
+
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
5286
|
+
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
5246
5287
|
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
5247
5288
|
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
5248
|
-
"
|
|
5249
|
-
"
|
|
5289
|
+
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
5290
|
+
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
5291
|
+
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
5250
5292
|
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
5251
|
-
"
|
|
5293
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
5294
|
+
"dropdown": "B_Gxsq_dropdown"
|
|
5252
5295
|
};
|
|
5253
5296
|
//#endregion
|
|
5254
5297
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -5268,8 +5311,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5268
5311
|
});
|
|
5269
5312
|
var Toggle_module_css_default = {
|
|
5270
5313
|
"toggle": "k-cD4G_toggle",
|
|
5271
|
-
"
|
|
5272
|
-
"
|
|
5314
|
+
"knob": "k-cD4G_knob",
|
|
5315
|
+
"toggleOn": "k-cD4G_toggleOn"
|
|
5273
5316
|
};
|
|
5274
5317
|
//#endregion
|
|
5275
5318
|
//#region src/client/components/ui/Toggle.tsx
|
|
@@ -5369,29 +5412,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5369
5412
|
css: css$2
|
|
5370
5413
|
});
|
|
5371
5414
|
var DiagnosticsView_module_css_default = {
|
|
5372
|
-
"panel": "k9eRya_panel",
|
|
5373
|
-
"meta": "k9eRya_meta",
|
|
5374
|
-
"badge": "k9eRya_badge",
|
|
5375
|
-
"badgeFail": "k9eRya_badgeFail",
|
|
5376
5415
|
"head": "k9eRya_head",
|
|
5377
|
-
"
|
|
5378
|
-
"summaryRunning": "k9eRya_summaryRunning",
|
|
5379
|
-
"envTitle": "k9eRya_envTitle",
|
|
5416
|
+
"row": "k9eRya_row",
|
|
5380
5417
|
"display": "k9eRya_display",
|
|
5418
|
+
"name": "k9eRya_name",
|
|
5419
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
5420
|
+
"summaryOk": "k9eRya_summaryOk",
|
|
5421
|
+
"envTitle": "k9eRya_envTitle",
|
|
5422
|
+
"summaryFail": "k9eRya_summaryFail",
|
|
5381
5423
|
"envLabel": "k9eRya_envLabel",
|
|
5382
5424
|
"runBtn": "k9eRya_runBtn",
|
|
5425
|
+
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
5426
|
+
"headHint": "k9eRya_headHint",
|
|
5427
|
+
"envDesc": "k9eRya_envDesc",
|
|
5383
5428
|
"diagPulse": "k9eRya_diagPulse",
|
|
5384
|
-
"
|
|
5429
|
+
"panel": "k9eRya_panel",
|
|
5385
5430
|
"badgeRunning": "k9eRya_badgeRunning",
|
|
5386
|
-
"
|
|
5387
|
-
"
|
|
5388
|
-
"envDesc": "k9eRya_envDesc",
|
|
5389
|
-
"headHint": "k9eRya_headHint",
|
|
5390
|
-
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
5391
|
-
"row": "k9eRya_row",
|
|
5392
|
-
"badgeOk": "k9eRya_badgeOk",
|
|
5431
|
+
"badgeIdle": "k9eRya_badgeIdle",
|
|
5432
|
+
"envRow": "k9eRya_envRow",
|
|
5393
5433
|
"summary": "k9eRya_summary",
|
|
5394
|
-
"
|
|
5434
|
+
"meta": "k9eRya_meta",
|
|
5435
|
+
"badge": "k9eRya_badge",
|
|
5436
|
+
"summaryRunning": "k9eRya_summaryRunning",
|
|
5437
|
+
"badgeOk": "k9eRya_badgeOk"
|
|
5395
5438
|
};
|
|
5396
5439
|
//#endregion
|
|
5397
5440
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -5569,57 +5612,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5569
5612
|
css: css$1
|
|
5570
5613
|
});
|
|
5571
5614
|
var LogsView_module_css_default = {
|
|
5572
|
-
"
|
|
5573
|
-
"headActions": "_3j77BW_headActions",
|
|
5574
|
-
"filterBar": "_3j77BW_filterBar",
|
|
5575
|
-
"footPath": "_3j77BW_footPath",
|
|
5576
|
-
"badgeWarn": "_3j77BW_badgeWarn",
|
|
5577
|
-
"list": "_3j77BW_list",
|
|
5578
|
-
"more": "_3j77BW_more",
|
|
5579
|
-
"actions": "_3j77BW_actions",
|
|
5580
|
-
"catInstall": "_3j77BW_catInstall",
|
|
5581
|
-
"panel": "_3j77BW_panel",
|
|
5582
|
-
"pathRow": "_3j77BW_pathRow",
|
|
5583
|
-
"entry": "_3j77BW_entry",
|
|
5615
|
+
"btn": "_3j77BW_btn",
|
|
5584
5616
|
"badgeInfo": "_3j77BW_badgeInfo",
|
|
5585
|
-
"headHint": "_3j77BW_headHint",
|
|
5586
5617
|
"catSystem": "_3j77BW_catSystem",
|
|
5587
|
-
"empty": "_3j77BW_empty",
|
|
5588
|
-
"footActions": "_3j77BW_footActions",
|
|
5589
|
-
"badgeError": "_3j77BW_badgeError",
|
|
5590
|
-
"badge": "_3j77BW_badge",
|
|
5591
|
-
"searchInput": "_3j77BW_searchInput",
|
|
5592
|
-
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
5593
|
-
"filterChipActive": "_3j77BW_filterChipActive",
|
|
5594
|
-
"head": "_3j77BW_head",
|
|
5595
|
-
"catBadge": "_3j77BW_catBadge",
|
|
5596
|
-
"pathLabel": "_3j77BW_pathLabel",
|
|
5597
5618
|
"clearBtn": "_3j77BW_clearBtn",
|
|
5598
|
-
"footCount": "_3j77BW_footCount",
|
|
5599
|
-
"footFail": "_3j77BW_footFail",
|
|
5600
|
-
"linkBtn": "_3j77BW_linkBtn",
|
|
5601
|
-
"btn": "_3j77BW_btn",
|
|
5602
|
-
"previewRow": "_3j77BW_previewRow",
|
|
5603
5619
|
"time": "_3j77BW_time",
|
|
5604
|
-
"
|
|
5620
|
+
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
5621
|
+
"previewRow": "_3j77BW_previewRow",
|
|
5622
|
+
"event": "_3j77BW_event",
|
|
5623
|
+
"list": "_3j77BW_list",
|
|
5624
|
+
"filterChipActive": "_3j77BW_filterChipActive",
|
|
5605
5625
|
"search": "_3j77BW_search",
|
|
5626
|
+
"foot": "_3j77BW_foot",
|
|
5627
|
+
"pathRow": "_3j77BW_pathRow",
|
|
5628
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
5606
5629
|
"logList": "_3j77BW_logList",
|
|
5630
|
+
"footCount": "_3j77BW_footCount",
|
|
5607
5631
|
"moreEnd": "_3j77BW_moreEnd",
|
|
5608
|
-
"
|
|
5609
|
-
"
|
|
5610
|
-
"
|
|
5611
|
-
"
|
|
5632
|
+
"badgeWarn": "_3j77BW_badgeWarn",
|
|
5633
|
+
"badgeDebug": "_3j77BW_badgeDebug",
|
|
5634
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
5635
|
+
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
5612
5636
|
"pathDialog": "_3j77BW_pathDialog",
|
|
5613
|
-
"
|
|
5637
|
+
"catBadge": "_3j77BW_catBadge",
|
|
5614
5638
|
"catSettings": "_3j77BW_catSettings",
|
|
5615
|
-
"
|
|
5616
|
-
"
|
|
5617
|
-
"
|
|
5639
|
+
"empty": "_3j77BW_empty",
|
|
5640
|
+
"head": "_3j77BW_head",
|
|
5641
|
+
"footFail": "_3j77BW_footFail",
|
|
5642
|
+
"entry": "_3j77BW_entry",
|
|
5643
|
+
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
5644
|
+
"actions": "_3j77BW_actions",
|
|
5645
|
+
"panel": "_3j77BW_panel",
|
|
5646
|
+
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
5647
|
+
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
5648
|
+
"footActions": "_3j77BW_footActions",
|
|
5618
5649
|
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
5619
|
-
"
|
|
5650
|
+
"message": "_3j77BW_message",
|
|
5651
|
+
"filterChip": "_3j77BW_filterChip",
|
|
5652
|
+
"filterBar": "_3j77BW_filterBar",
|
|
5653
|
+
"searchInput": "_3j77BW_searchInput",
|
|
5654
|
+
"more": "_3j77BW_more",
|
|
5655
|
+
"headActions": "_3j77BW_headActions",
|
|
5656
|
+
"pathText": "_3j77BW_pathText",
|
|
5657
|
+
"footPath": "_3j77BW_footPath",
|
|
5658
|
+
"linkBtn": "_3j77BW_linkBtn",
|
|
5659
|
+
"headHint": "_3j77BW_headHint",
|
|
5620
5660
|
"pathDraft": "_3j77BW_pathDraft",
|
|
5621
|
-
"
|
|
5622
|
-
"
|
|
5661
|
+
"catInstall": "_3j77BW_catInstall",
|
|
5662
|
+
"badge": "_3j77BW_badge",
|
|
5663
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
5664
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
5665
|
+
"badgeError": "_3j77BW_badgeError"
|
|
5623
5666
|
};
|
|
5624
5667
|
//#endregion
|
|
5625
5668
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -6833,6 +6876,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6833
6876
|
langKey,
|
|
6834
6877
|
t,
|
|
6835
6878
|
platform: env?.platform ?? "",
|
|
6879
|
+
pendingRestarts: queue.pendingRestarts.map((p) => p.target),
|
|
6836
6880
|
onOpenDetail: (item) => setDetailItem(item),
|
|
6837
6881
|
onReveal: (item) => {
|
|
6838
6882
|
revealFolder(item);
|
|
@@ -6895,10 +6939,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6895
6939
|
openSection: settingsSection,
|
|
6896
6940
|
onConsumedOpenSection: () => setSettingsSection(null)
|
|
6897
6941
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
6898
|
-
info: catalog.hubUpdateInfo ?? { version: "1.6.
|
|
6942
|
+
info: catalog.hubUpdateInfo ?? { version: "1.6.6" },
|
|
6943
|
+
state: catalog.hubUpdateState,
|
|
6944
|
+
currentVersion: catalog.hubCurrentVersion,
|
|
6899
6945
|
lang,
|
|
6900
6946
|
t,
|
|
6901
|
-
hasUpdate: catalog.hubHasUpdate,
|
|
6902
6947
|
onClose: () => setShowHubUpdate(false),
|
|
6903
6948
|
onProceed: () => {
|
|
6904
6949
|
setShowHubUpdate(false);
|