dsh-plugin 2.2.0 → 2.2.2
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 +515 -362
- package/client/client.js.map +1 -1
- package/lib/services/install/operation-log.js +1 -1
- package/lib/services/install/registry-fallback.js +5 -0
- package/lib/services/install/task-queue.js +40 -3
- package/lib/services/npm-release-age.js +10 -6
- package/lib/services/profile/installed-versions.js +32 -4
- package/lib/types/services/install/install-types.d.ts +5 -0
- package/lib/types/services/install/registry-fallback.d.ts +2 -0
- package/lib/types/services/install/task-queue.d.ts +5 -0
- package/lib/types/services/npm-release-age.d.ts +1 -1
- package/lib/types/services/profile/installed-versions.d.ts +3 -0
- package/package.json +1 -1
- package/src/client/components/modals/NotificationsModal.tsx +29 -4
- package/src/client/components/modals/modals.tsx +28 -4
- package/src/client/hooks/useCatalog.ts +45 -25
- package/src/client/hooks/useTaskQueue.ts +30 -8
- package/src/client/locales.ts +32 -8
- package/src/client/logic/failures.ts +34 -8
- package/src/client/logic/installed.ts +12 -5
- package/src/client/logic/release-age.ts +53 -5
- package/src/client/logic/urls.ts +11 -3
- package/src/server/services/install/install-types.ts +5 -0
- package/src/server/services/install/operation-log.ts +1 -1
- package/src/server/services/install/registry-fallback.ts +5 -0
- package/src/server/services/install/task-queue.ts +37 -3
- package/src/server/services/npm-release-age.ts +10 -6
- package/src/server/services/profile/installed-versions.ts +30 -4
package/client/client.js
CHANGED
|
@@ -28,6 +28,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
28
28
|
sortAria: "插件排序方式",
|
|
29
29
|
openHint: "打开 dsh-plugin.org",
|
|
30
30
|
toggleLangHint: "切换界面语言",
|
|
31
|
+
githubHint: "在 GitHub 查看源码",
|
|
31
32
|
fork: "Fork",
|
|
32
33
|
loading: "正在加载插件数据…",
|
|
33
34
|
failed: "插件数据加载失败",
|
|
@@ -267,6 +268,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
267
268
|
queuedUninstallTitle: "已加入卸载排队",
|
|
268
269
|
queuedHint: "已加入排队,前序任务完成后将自动开始,可关闭本窗口继续浏览。",
|
|
269
270
|
cancelTask: "取消任务",
|
|
271
|
+
cancel: "取消",
|
|
270
272
|
cancelling: "正在取消…",
|
|
271
273
|
errorTitle: "操作失败",
|
|
272
274
|
errorTitleInstall: "安装失败",
|
|
@@ -309,6 +311,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
309
311
|
bundleDeselectedHint: "注意:插件市场在当前 profile 的 bundle 列表中被取消勾选,重启宿主后它不会出现。请到「设置 → 插件」重新勾选 dsh-plugin。",
|
|
310
312
|
failPnpmStoreHint: "安装器调用 pnpm 时报「store 位置不匹配」(ERR_PNPM_UNEXPECTED_STORE):你的 profile 目录里旧插件依赖是用另一个大版本的 pnpm 生成的,当前 pnpm 出于安全不认旧目录,导致任何插件装进该 profile 都会失败。请删除该 profile 目录下的 node_modules 与 pnpm-lock.yaml(可先到「系统日志」或 ~/.dsh/profiles/<profile>/hub.log 查看完整报错),再重新安装。这不是插件本身的问题。",
|
|
311
313
|
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 补丁条目后重试。",
|
|
314
|
+
failProfileStateHint: "安装器调用 pnpm 时报 profile 的元数据与当前环境对不上(如 ERR_PNPM_OUTDATED_LOCKFILE / ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND / ERR_PNPM_BAD_PM_VERSION / ERR_PNPM_PATCH_NOT_APPLIED):profile 里的 pnpm-lock.yaml、package.json 或补丁声明与当前 pnpm 版本不一致,pnpm 在真正装插件之前就中止了,所以这个 profile 里装任何插件都会失败。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)里删除 pnpm-lock.yaml 后重试(pnpm 会按当前依赖重新生成);若报的是 packageManager 版本不符,把 package.json 里的 packageManager 字段改成当前 pnpm 的大版本或直接删掉该字段;仍不行请重建该 profile 的依赖。",
|
|
315
|
+
failNodeEngineHint: "这个插件(或它的某个依赖)声明了更高的 Node / pnpm 版本要求(ERR_PNPM_UNSUPPORTED_ENGINE / EBADENGINE),当前版本不满足,pnpm 在安装阶段直接拒绝。这不是插件本身的问题——请把 Node 升级到要求的版本(nvm / fnm 切换,或安装新版 Node.js),确认 node -v 与 pnpm -v 都满足要求后重试。",
|
|
312
316
|
failPnpmMissingDepTarget: "{pkg} 在 npm registry 上不存在(404)",
|
|
313
317
|
failPnpmMissingDepHint: "安装器调用 pnpm 时报「包不存在」(ERR_PNPM_FETCH_404):你的 profile 里留着一条指向 registry 上未发布包的依赖,pnpm 每次解析依赖都会先卡在它上面,因此任何插件都装不进来。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)的 package.json 里删除该依赖条目(同时删掉对应的 pnpm-lock.yaml 条目或整个锁文件)后重试。",
|
|
314
318
|
failRegistryMirrorLagHint: "安装器调用 pnpm 时报「包不存在」(ERR_PNPM_FETCH_404):该包在官方 npm 源上是有的,但你本机配置的 npm/pnpm 源(registry 或镜像)没有同步到它。请把 npm/pnpm 的 registry 指回官方源 https://registry.npmjs.org(或换一个已同步该包的镜像)后重试。这不是插件本身的问题。",
|
|
@@ -331,9 +335,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
331
335
|
failReason_buildToolchainMissing: "这个插件依赖需要在本机编译的原生模块,但找不到可用的编译器。",
|
|
332
336
|
failKind_pnpmStore: "pnpm store 版本不匹配",
|
|
333
337
|
failReason_pnpmStore: "profile 里的依赖由另一大版本的 pnpm 生成,当前 pnpm 不认。",
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
338
|
+
failKind_pnpmModulesMismatch: "profile 的依赖目录与当前 pnpm 配置不一致",
|
|
339
|
+
failReason_pnpmModulesMismatch: "node_modules 是用另一套 pnpm 配置(hoist / 虚拟目录长度等)创建的,pnpm 拒绝复用。",
|
|
340
|
+
failPnpmModulesMismatchHint: "安装器调用 pnpm 时报「modules 目录与当前配置不一致」(`ERR_PNPM_*_DIFF`,例如 virtual-store-dir-max-length、public-hoist-pattern、hoist 规则、node-linker):profile 里的 node_modules 是在另一套 pnpm 配置下生成的(常见于改过 .npmrc、换过 pnpm 大版本,或桌面端内置 pnpm 与 PATH 上的 pnpm 不是同一个),当前 pnpm 出于安全拒绝在它上面继续操作 —— 所以这个 profile 里的安装/卸载都会失败。修复(任选其一,在 profile 目录 ~/.dsh/profiles/<profile> 下操作):① 执行一次 pnpm install,让它按当前配置重建 modules 目录;② 删掉该目录下的 node_modules,下次安装/卸载会自动重建;③ 如果你在 .npmrc 里设过这些配置项,把它们统一成同一个值(或删掉自定义、回到默认)。这不是插件本身的问题。",
|
|
337
341
|
failKind_pnpmWorkspace: "workspace 根校验阻止了安装",
|
|
338
342
|
failReason_pnpmWorkspace: "profile 被当作 workspace 根,但没有声明根操作,pnpm 中止了安装。",
|
|
339
343
|
failKind_originRejected: "本地服务的来源校验未通过",
|
|
@@ -342,6 +346,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
342
346
|
failReason_pnpmPolicy: "版本未满最小发布年龄,或缺完整性校验 / 来源不可信。",
|
|
343
347
|
failKind_pnpmUnusedPatch: "profile 残留旧补丁声明",
|
|
344
348
|
failReason_pnpmUnusedPatch: "profile 里留着指向旧版本 dsh-plugin 的补丁,pnpm 出于安全中止了安装。",
|
|
349
|
+
failKind_profileState: "profile 的 pnpm 元数据与本机不一致",
|
|
350
|
+
failReason_profileState: "profile 的 lockfile / package.json / packageManager 版本与当前 pnpm 对不上,安装没开始就被中止。",
|
|
351
|
+
failKind_nodeEngine: "本机 Node / pnpm 版本不满足要求",
|
|
352
|
+
failReason_nodeEngine: "这个插件(或其依赖)要求更高的 Node / pnpm 版本,当前版本被 pnpm 拒绝。",
|
|
345
353
|
failKind_pnpmMissingDep: "依赖包在 registry 上不存在",
|
|
346
354
|
failReason_pnpmMissingDep: "profile 里有一条指向未发布包的依赖,pnpm 每次解析都卡在它上面。",
|
|
347
355
|
failKind_pluginMissingDep: "插件依赖未发布",
|
|
@@ -368,10 +376,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
368
376
|
failReason_hostIncompatible: "插件声明的兼容清单里没有你正在运行的 DSH 版本。",
|
|
369
377
|
failKind_network: "网络连接失败",
|
|
370
378
|
failReason_network: "安装过程中连不上 npm 源或代理,请求没有完成。",
|
|
379
|
+
failKind_tlsTrust: "HTTPS 证书校验失败",
|
|
380
|
+
failReason_tlsTrust: "本机有程序替换了 HTTPS 证书,Node / pnpm 不信任它的根证书。",
|
|
381
|
+
failTlsTrustHint: "安装器访问 npm 源时 TLS 证书校验失败(`ERR_PNPM_META_FETCH_FAIL` / unable to verify the first certificate):本机有程序在替换 HTTPS 证书 —— 公司网络的 SSL 审计、杀毒软件的网页防护、Fiddler / Charles 这类抓包工具,或本机代理的 HTTPS 解密 —— 而 Node / pnpm 不信任它的根证书。这不是插件本身的问题,任何插件都会一样失败。按顺序处理:① 如果公司网络有 SSL 审计,找 IT 要根证书(.cer / .pem),把环境变量 NODE_EXTRA_CA_CERTS 指向该文件后重试;② Node ≥ 22.15 可以设置 NODE_OPTIONS=--use-system-ca,让 Node 直接信任系统证书库;③ 如果只是本机代理开了 HTTPS 解密,把 registry.npmjs.org 加进直连(跳过 MITM);④ 也可以先临时切到公共镜像源 https://registry.npmmirror.com 重试。不建议直接关闭 strict-ssl:那等于放弃校验,会把你暴露在中间人攻击下。",
|
|
371
382
|
failKind_hostCliSpawn: "无法启动 DSH 宿主",
|
|
372
383
|
failReason_hostCliSpawn: "解析到的宿主入口起不来,安装命令没有真正执行。",
|
|
373
384
|
failKind_hubState: "插件中心状态不同步",
|
|
374
385
|
failReason_hubState: "本地记录的安装状态与实际不一致,这次操作没有生效。",
|
|
386
|
+
failKind_profileBundleMissing: "profile 的依赖没装全",
|
|
387
|
+
failReason_profileBundleMissing: "宿主找不到 profile 里声明的某个 bundle,安装命令还没执行就失败了。",
|
|
388
|
+
failProfileBundleMissingHint: "宿主在启动插件管理时找不到 profile 依赖「{pkg}」—— 说明这个 profile 里声明的依赖没有装全(node_modules 被删过、上次安装中断,或桌面应用升级不完整)。这与你要装的插件无关,换任何插件都会一样失败。修复:① 让宿主把这个 profile 的依赖装回来(在桌面应用内重新打开插件中心,或执行 `dsh plugin --profile {profile} install`;桌面 profile 需在应用内执行,外部 CLI 无权管理);② 仍然报同样的错,说明是应用本体不完整,请重装或升级 DeepSeek Harness 桌面端。",
|
|
375
389
|
failKind_timeout: "操作超时",
|
|
376
390
|
failReason_timeout: "安装耗时超过上限仍未完成,已经中止。",
|
|
377
391
|
failKind_profileLock: "profile 被其他进程占用",
|
|
@@ -528,8 +542,6 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
528
542
|
settingsUpdateDesc: "Update checks and the network channels used for installs",
|
|
529
543
|
settingsCheckOnStart: "Check for updates on startup",
|
|
530
544
|
settingsCheckOnStartDesc: "Check installed plugins for new versions when the hub opens; you will be notified when updates are found",
|
|
531
|
-
settingsAutoInstall: "Auto-install updates",
|
|
532
|
-
settingsAutoInstallDesc: "Install detected updates in the background without asking (a host restart applies them)",
|
|
533
545
|
settingsProxy: "HTTP proxy",
|
|
534
546
|
settingsProxyDesc: "Route npm, git and catalog requests through this proxy; leave empty to connect directly",
|
|
535
547
|
proxyCheckChecking: "Testing this proxy address…",
|
|
@@ -738,6 +750,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
738
750
|
bundleDeselectedHint: "Note: the marketplace is unchecked in this profile's bundle list, so it will not appear after the host restarts. Re-check dsh-plugin under Settings → Plugins.",
|
|
739
751
|
failPnpmStoreHint: "pnpm reported an unexpected store location (ERR_PNPM_UNEXPECTED_STORE): the profile directory was previously set up with a different major version of pnpm, and the current pnpm refuses to reuse it — no plugin can be installed into that profile. Delete node_modules and pnpm-lock.yaml under the profile directory (see System Logs or ~/.dsh/profiles/<profile>/hub.log for the full output), then reinstall. This is not a problem with the plugin itself.",
|
|
740
752
|
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.",
|
|
753
|
+
failProfileStateHint: "pnpm reported that the profile metadata does not match the current environment (e.g. ERR_PNPM_OUTDATED_LOCKFILE / ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND / ERR_PNPM_BAD_PM_VERSION / ERR_PNPM_PATCH_NOT_APPLIED): pnpm-lock.yaml, package.json or the patch declarations inside the profile disagree with the pnpm version in use, so pnpm aborts before installing anything — every plugin install into this profile will fail. This is not a problem with the plugin itself. Delete pnpm-lock.yaml inside the profile directory (~/.dsh/profiles/<profile>) and retry (pnpm regenerates it from the declared dependencies); if the error is about packageManager, set that field in package.json to the current pnpm major or remove it; if it still fails, rebuild the profile dependencies.",
|
|
754
|
+
failNodeEngineHint: "This plugin (or one of its dependencies) declares a higher Node / pnpm version (ERR_PNPM_UNSUPPORTED_ENGINE / EBADENGINE), which the current one does not satisfy, so pnpm refuses at install time. This is not a problem with the plugin itself. Upgrade Node to the required version (switch with nvm / fnm, or install a newer Node.js), confirm node -v and pnpm -v both satisfy it, then retry.",
|
|
741
755
|
failPnpmMissingDepTarget: "{pkg} was not found on the npm registry (404)",
|
|
742
756
|
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.",
|
|
743
757
|
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.",
|
|
@@ -760,9 +774,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
760
774
|
failReason_buildToolchainMissing: "A dependency of this plugin must be compiled locally, but no usable compiler was found.",
|
|
761
775
|
failKind_pnpmStore: "pnpm store version mismatch",
|
|
762
776
|
failReason_pnpmStore: "The profile dependencies were written by a different pnpm major, which the current pnpm does not accept.",
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
777
|
+
failKind_pnpmModulesMismatch: "profile dependency directory does not match the current pnpm config",
|
|
778
|
+
failReason_pnpmModulesMismatch: "node_modules was created with a different pnpm config (hoisting / virtual store length), so pnpm refuses to reuse it.",
|
|
779
|
+
failPnpmModulesMismatchHint: "pnpm reported that the modules directory does not match the current configuration (`ERR_PNPM_*_DIFF`, e.g. virtual-store-dir-max-length, public-hoist-pattern, hoisting rules, node-linker): node_modules inside the profile was built under a different pnpm config (typically after editing .npmrc, switching pnpm majors, or when the pnpm bundled with the desktop app differs from the one on PATH), so the current pnpm refuses to operate on it — installs and removals in this profile will keep failing. Fix it (any one of these, run inside the profile directory ~/.dsh/profiles/<profile>): ① run pnpm install once so it recreates the modules directory with the current config; ② delete node_modules there — the next install/removal recreates it; ③ if you set these options in .npmrc, make the values consistent (or drop the overrides and go back to the defaults). This is not a problem with the plugin itself.",
|
|
766
780
|
failKind_pnpmWorkspace: "workspace-root check blocked the install",
|
|
767
781
|
failReason_pnpmWorkspace: "The profile is treated as a workspace root without a root operation declared, so pnpm aborted.",
|
|
768
782
|
failKind_originRejected: "request origin rejected by the local service",
|
|
@@ -771,6 +785,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
771
785
|
failReason_pnpmPolicy: "The version is younger than the minimum release age, or an integrity / trust check failed.",
|
|
772
786
|
failKind_pnpmUnusedPatch: "stale patch entry in the profile",
|
|
773
787
|
failReason_pnpmUnusedPatch: "The profile keeps a patch for an older dsh-plugin version, so pnpm aborted for safety.",
|
|
788
|
+
failKind_profileState: "profile pnpm metadata does not match this machine",
|
|
789
|
+
failReason_profileState: "The profile lockfile / package.json / packageManager version disagrees with the current pnpm, so the install aborts before starting.",
|
|
790
|
+
failKind_nodeEngine: "Node / pnpm on this machine is below the required version",
|
|
791
|
+
failReason_nodeEngine: "This plugin (or a dependency) requires a newer Node / pnpm, so pnpm rejects the install.",
|
|
774
792
|
failKind_pnpmMissingDep: "a dependency does not exist on the registry",
|
|
775
793
|
failReason_pnpmMissingDep: "The profile keeps a dependency on an unpublished package, which pnpm hits on every resolve.",
|
|
776
794
|
failKind_pluginMissingDep: "plugin dependency is not published",
|
|
@@ -797,10 +815,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
797
815
|
failReason_hostIncompatible: "The plugin's declared compatibility list does not include the DSH version you are running.",
|
|
798
816
|
failKind_network: "network connection failed",
|
|
799
817
|
failReason_network: "The install could not reach the npm registry or the proxy, so the request never completed.",
|
|
818
|
+
failKind_tlsTrust: "HTTPS certificate verification failed",
|
|
819
|
+
failReason_tlsTrust: "Something on this machine is replacing HTTPS certificates, and Node / pnpm does not trust its root CA.",
|
|
820
|
+
failTlsTrustHint: "TLS certificate verification failed while reaching the npm registry (`ERR_PNPM_META_FETCH_FAIL` / unable to verify the first certificate): something on this machine is replacing HTTPS certificates — corporate SSL inspection, an antivirus web shield, a debugging proxy such as Fiddler / Charles, or HTTPS decryption in a local proxy — and Node / pnpm does not trust its root CA. This is not a problem with the plugin; every plugin would fail the same way. In order: ① if your network performs SSL inspection, ask IT for the root certificate (.cer / .pem) and point the NODE_EXTRA_CA_CERTS environment variable at it; ② on Node ≥ 22.15 you can set NODE_OPTIONS=--use-system-ca so Node trusts the system certificate store; ③ if only your local proxy decrypts HTTPS, add registry.npmjs.org to its direct (no-MITM) list; ④ as a temporary workaround, switch to a public mirror such as https://registry.npmmirror.com and retry. We do not recommend disabling strict-ssl: that gives up verification entirely and exposes you to man-in-the-middle attacks.",
|
|
800
821
|
failKind_hostCliSpawn: "the DSH host could not be launched",
|
|
801
822
|
failReason_hostCliSpawn: "The resolved host entry point would not start, so the install command never ran.",
|
|
802
823
|
failKind_hubState: "plugin hub state is out of sync",
|
|
803
824
|
failReason_hubState: "The locally recorded install state does not match reality, so this operation had no effect.",
|
|
825
|
+
failKind_profileBundleMissing: "profile dependencies are incomplete",
|
|
826
|
+
failReason_profileBundleMissing: "The host cannot find a bundle the profile declares, so the install failed before it even started.",
|
|
827
|
+
failProfileBundleMissingHint: "The host could not resolve the profile dependency \"{pkg}\" while starting plugin management — the dependencies declared by this profile are not fully installed (node_modules was deleted, a previous install was interrupted, or the desktop app update was incomplete). This has nothing to do with the plugin you were installing; any plugin would fail the same way. Fix it: ① let the host install the profile dependencies again (reopen the Plugin Hub inside the desktop app, or run `dsh plugin --profile {profile} install`; a desktop-managed profile has to be handled from inside the app, an external CLI is not allowed); ② if the same error persists, the app installation itself is incomplete — reinstall or upgrade DeepSeek Harness Desktop.",
|
|
804
828
|
failKind_timeout: "operation timed out",
|
|
805
829
|
failReason_timeout: "The install exceeded the time limit and was aborted.",
|
|
806
830
|
failKind_profileLock: "profile is locked by another process",
|
|
@@ -885,41 +909,41 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
885
909
|
});
|
|
886
910
|
var Header_module_css_default = {
|
|
887
911
|
"aboutBtn": "qikqja_aboutBtn",
|
|
888
|
-
"
|
|
912
|
+
"title": "qikqja_title",
|
|
913
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
914
|
+
"version": "qikqja_version",
|
|
915
|
+
"adBadge": "qikqja_adBadge",
|
|
916
|
+
"logoIcon": "qikqja_logoIcon",
|
|
917
|
+
"adArrow": "qikqja_adArrow",
|
|
889
918
|
"root": "qikqja_root",
|
|
890
|
-
"brandTitle": "qikqja_brandTitle",
|
|
891
|
-
"tagline": "qikqja_tagline",
|
|
892
|
-
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
893
919
|
"header": "qikqja_header",
|
|
894
|
-
"controls": "qikqja_controls",
|
|
895
|
-
"copyIcon": "qikqja_copyIcon",
|
|
896
|
-
"segBtnActive": "qikqja_segBtnActive",
|
|
897
|
-
"headerTitleRow": "qikqja_headerTitleRow",
|
|
898
920
|
"langBtn": "qikqja_langBtn",
|
|
921
|
+
"brandTitle": "qikqja_brandTitle",
|
|
922
|
+
"taglineLink": "qikqja_taglineLink",
|
|
923
|
+
"controls": "qikqja_controls",
|
|
899
924
|
"segLabel": "qikqja_segLabel",
|
|
900
|
-
"
|
|
901
|
-
"
|
|
902
|
-
"title": "qikqja_title",
|
|
903
|
-
"githubIcon": "qikqja_githubIcon",
|
|
904
|
-
"sortGroup": "qikqja_sortGroup",
|
|
905
|
-
"version": "qikqja_version",
|
|
906
|
-
"tabsRow": "qikqja_tabsRow",
|
|
907
|
-
"tabs": "qikqja_tabs",
|
|
908
|
-
"logoIcon": "qikqja_logoIcon",
|
|
909
|
-
"tabCount": "qikqja_tabCount",
|
|
910
|
-
"githubLink": "qikqja_githubLink",
|
|
925
|
+
"searchRow": "qikqja_searchRow",
|
|
926
|
+
"tagline": "qikqja_tagline",
|
|
911
927
|
"segGroup": "qikqja_segGroup",
|
|
928
|
+
"adBanner": "qikqja_adBanner",
|
|
929
|
+
"versionBtn": "qikqja_versionBtn",
|
|
930
|
+
"search": "qikqja_search",
|
|
931
|
+
"githubLink": "qikqja_githubLink",
|
|
912
932
|
"resultSeg": "qikqja_resultSeg",
|
|
913
|
-
"tabActive": "qikqja_tabActive",
|
|
914
933
|
"segBtn": "qikqja_segBtn",
|
|
915
|
-
"
|
|
916
|
-
"headerRight": "qikqja_headerRight",
|
|
917
|
-
"versionBtn": "qikqja_versionBtn",
|
|
934
|
+
"segBtnActive": "qikqja_segBtnActive",
|
|
918
935
|
"adText": "qikqja_adText",
|
|
919
|
-
"
|
|
920
|
-
"
|
|
921
|
-
"
|
|
922
|
-
"
|
|
936
|
+
"headerRight": "qikqja_headerRight",
|
|
937
|
+
"sortGroup": "qikqja_sortGroup",
|
|
938
|
+
"tabActive": "qikqja_tabActive",
|
|
939
|
+
"resultCount": "qikqja_resultCount",
|
|
940
|
+
"copyIcon": "qikqja_copyIcon",
|
|
941
|
+
"tab": "qikqja_tab",
|
|
942
|
+
"tabCount": "qikqja_tabCount",
|
|
943
|
+
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
944
|
+
"tabsRow": "qikqja_tabsRow",
|
|
945
|
+
"tabs": "qikqja_tabs",
|
|
946
|
+
"githubIcon": "qikqja_githubIcon"
|
|
923
947
|
};
|
|
924
948
|
//#endregion
|
|
925
949
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
@@ -938,142 +962,142 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
938
962
|
css: css$10
|
|
939
963
|
});
|
|
940
964
|
var Modal_module_css_default = {
|
|
941
|
-
"
|
|
942
|
-
"detailGrid": "BiQ1zG_detailGrid",
|
|
943
|
-
"detailModal": "BiQ1zG_detailModal",
|
|
944
|
-
"queueRow": "BiQ1zG_queueRow",
|
|
945
|
-
"detailMono": "BiQ1zG_detailMono",
|
|
946
|
-
"modalInstall": "BiQ1zG_modalInstall",
|
|
947
|
-
"failReason": "BiQ1zG_failReason",
|
|
948
|
-
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
949
|
-
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
950
|
-
"toast": "BiQ1zG_toast",
|
|
951
|
-
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
952
|
-
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
953
|
-
"toastIn": "BiQ1zG_toastIn",
|
|
954
|
-
"queuedHint": "BiQ1zG_queuedHint",
|
|
965
|
+
"resultTitle": "BiQ1zG_resultTitle",
|
|
955
966
|
"modalBody": "BiQ1zG_modalBody",
|
|
956
|
-
"
|
|
957
|
-
"
|
|
958
|
-
"
|
|
959
|
-
"
|
|
960
|
-
"
|
|
961
|
-
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
962
|
-
"linkIcon": "BiQ1zG_linkIcon",
|
|
967
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
968
|
+
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
969
|
+
"overlayIn": "BiQ1zG_overlayIn",
|
|
970
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
971
|
+
"modalCmd": "BiQ1zG_modalCmd",
|
|
963
972
|
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
964
|
-
"
|
|
973
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
974
|
+
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
975
|
+
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
976
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
977
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
978
|
+
"modalIn": "BiQ1zG_modalIn",
|
|
979
|
+
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
980
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
981
|
+
"modalTitle": "BiQ1zG_modalTitle",
|
|
965
982
|
"noticeTime": "BiQ1zG_noticeTime",
|
|
966
|
-
"
|
|
983
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
967
984
|
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
968
|
-
"
|
|
969
|
-
"
|
|
970
|
-
"
|
|
985
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
986
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
987
|
+
"failRepo": "BiQ1zG_failRepo",
|
|
988
|
+
"detailModal": "BiQ1zG_detailModal",
|
|
989
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
990
|
+
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
991
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
992
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
993
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
994
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
971
995
|
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
972
|
-
"
|
|
973
|
-
"
|
|
974
|
-
"
|
|
975
|
-
"
|
|
976
|
-
"
|
|
977
|
-
"progressText": "BiQ1zG_progressText",
|
|
996
|
+
"noticeRow": "BiQ1zG_noticeRow",
|
|
997
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
998
|
+
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
999
|
+
"modal": "BiQ1zG_modal",
|
|
1000
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
978
1001
|
"failKind": "BiQ1zG_failKind",
|
|
979
|
-
"
|
|
980
|
-
"
|
|
981
|
-
"
|
|
982
|
-
"
|
|
983
|
-
"
|
|
984
|
-
"
|
|
985
|
-
"
|
|
986
|
-
"
|
|
987
|
-
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
988
|
-
"detailPathText": "BiQ1zG_detailPathText",
|
|
989
|
-
"failDiagBtn": "BiQ1zG_failDiagBtn",
|
|
990
|
-
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
991
|
-
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
992
|
-
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
993
|
-
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
994
|
-
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
995
|
-
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
996
|
-
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
1002
|
+
"aboutModal": "BiQ1zG_aboutModal",
|
|
1003
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
1004
|
+
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
1005
|
+
"progress": "BiQ1zG_progress",
|
|
1006
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
1007
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
1008
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
1009
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
997
1010
|
"modalValue": "BiQ1zG_modalValue",
|
|
998
|
-
"
|
|
999
|
-
"
|
|
1000
|
-
"modalClose": "BiQ1zG_modalClose",
|
|
1001
|
-
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
1011
|
+
"overlay": "BiQ1zG_overlay",
|
|
1012
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
1002
1013
|
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
1003
|
-
"
|
|
1004
|
-
"
|
|
1005
|
-
"
|
|
1006
|
-
"
|
|
1007
|
-
"
|
|
1008
|
-
"
|
|
1009
|
-
"
|
|
1010
|
-
"
|
|
1011
|
-
"
|
|
1014
|
+
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
1015
|
+
"detailMono": "BiQ1zG_detailMono",
|
|
1016
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
1017
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
1018
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
1019
|
+
"queueRow": "BiQ1zG_queueRow",
|
|
1020
|
+
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
1021
|
+
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
1022
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
1012
1023
|
"failClear": "BiQ1zG_failClear",
|
|
1024
|
+
"failRepoLabel": "BiQ1zG_failRepoLabel",
|
|
1025
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
1013
1026
|
"modalHead": "BiQ1zG_modalHead",
|
|
1014
|
-
"
|
|
1015
|
-
"
|
|
1027
|
+
"failPrepareHint": "BiQ1zG_failPrepareHint",
|
|
1028
|
+
"failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
|
|
1029
|
+
"toast": "BiQ1zG_toast",
|
|
1016
1030
|
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
1017
|
-
"
|
|
1018
|
-
"
|
|
1019
|
-
"
|
|
1031
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
1032
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
1033
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
1034
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
1035
|
+
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
1036
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
1037
|
+
"modalActions": "BiQ1zG_modalActions",
|
|
1020
1038
|
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
1021
|
-
"
|
|
1022
|
-
"
|
|
1023
|
-
"
|
|
1024
|
-
"
|
|
1025
|
-
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
1026
|
-
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
1027
|
-
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
1039
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
1040
|
+
"modalInstall": "BiQ1zG_modalInstall",
|
|
1041
|
+
"resultDesc": "BiQ1zG_resultDesc",
|
|
1042
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
1028
1043
|
"progressFill": "BiQ1zG_progressFill",
|
|
1044
|
+
"failList": "BiQ1zG_failList",
|
|
1045
|
+
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
1046
|
+
"failReason": "BiQ1zG_failReason",
|
|
1047
|
+
"logModal": "BiQ1zG_logModal",
|
|
1048
|
+
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
1049
|
+
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
1050
|
+
"detailStars": "BiQ1zG_detailStars",
|
|
1051
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
1052
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
1053
|
+
"modalDesc": "BiQ1zG_modalDesc",
|
|
1054
|
+
"trustHint": "BiQ1zG_trustHint",
|
|
1055
|
+
"detailArrow": "BiQ1zG_detailArrow",
|
|
1029
1056
|
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
1030
|
-
"
|
|
1031
|
-
"
|
|
1057
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
1058
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
1059
|
+
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
1060
|
+
"detailPathText": "BiQ1zG_detailPathText",
|
|
1061
|
+
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
1032
1062
|
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
1033
|
-
"
|
|
1034
|
-
"
|
|
1035
|
-
"
|
|
1063
|
+
"restartLater": "BiQ1zG_restartLater",
|
|
1064
|
+
"modalWide": "BiQ1zG_modalWide",
|
|
1065
|
+
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
1066
|
+
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
1067
|
+
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
1068
|
+
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
1069
|
+
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
1036
1070
|
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
1037
|
-
"
|
|
1038
|
-
"
|
|
1039
|
-
"
|
|
1040
|
-
"
|
|
1041
|
-
"
|
|
1042
|
-
"
|
|
1043
|
-
"
|
|
1044
|
-
"
|
|
1045
|
-
"
|
|
1046
|
-
"
|
|
1071
|
+
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
1072
|
+
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
1073
|
+
"modalTitleBusy": "BiQ1zG_modalTitleBusy",
|
|
1074
|
+
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
1075
|
+
"queueSectionTitle": "BiQ1zG_queueSectionTitle",
|
|
1076
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
1077
|
+
"detailLabel": "BiQ1zG_detailLabel",
|
|
1078
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
1079
|
+
"failRow": "BiQ1zG_failRow",
|
|
1080
|
+
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
1081
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
1047
1082
|
"errorTitle": "BiQ1zG_errorTitle",
|
|
1048
|
-
"
|
|
1049
|
-
"modalRow": "BiQ1zG_modalRow",
|
|
1083
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
1050
1084
|
"failHead": "BiQ1zG_failHead",
|
|
1051
|
-
"
|
|
1052
|
-
"
|
|
1053
|
-
"
|
|
1054
|
-
"
|
|
1055
|
-
"
|
|
1056
|
-
"failRow": "BiQ1zG_failRow",
|
|
1057
|
-
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
1058
|
-
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
1059
|
-
"overlayIn": "BiQ1zG_overlayIn",
|
|
1060
|
-
"failRepo": "BiQ1zG_failRepo",
|
|
1061
|
-
"resultDesc": "BiQ1zG_resultDesc",
|
|
1062
|
-
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
1085
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
1086
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
1087
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
1088
|
+
"modalClose": "BiQ1zG_modalClose",
|
|
1089
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
1063
1090
|
"noticeHead": "BiQ1zG_noticeHead",
|
|
1064
|
-
"
|
|
1065
|
-
"
|
|
1066
|
-
"
|
|
1067
|
-
"
|
|
1068
|
-
"
|
|
1069
|
-
"
|
|
1070
|
-
"
|
|
1071
|
-
"
|
|
1072
|
-
"
|
|
1073
|
-
"
|
|
1074
|
-
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
1075
|
-
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
1076
|
-
"failList": "BiQ1zG_failList"
|
|
1091
|
+
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
1092
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
1093
|
+
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1094
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
1095
|
+
"result": "BiQ1zG_result",
|
|
1096
|
+
"progressText": "BiQ1zG_progressText",
|
|
1097
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
1098
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
1099
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
1100
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget"
|
|
1077
1101
|
};
|
|
1078
1102
|
//#endregion
|
|
1079
1103
|
//#region src/server/services/install/release-target.ts
|
|
@@ -1163,7 +1187,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1163
1187
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
1164
1188
|
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
|
|
1165
1189
|
*/
|
|
1166
|
-
const PLUGIN_VERSION = "2.2.
|
|
1190
|
+
const PLUGIN_VERSION = "2.2.2";
|
|
1167
1191
|
const CATEGORY_ORDER = [
|
|
1168
1192
|
"interface",
|
|
1169
1193
|
"session",
|
|
@@ -1502,19 +1526,56 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1502
1526
|
if (Number.isNaN(ms)) return false;
|
|
1503
1527
|
return now - ms < MIN_RELEASE_AGE_MS;
|
|
1504
1528
|
}
|
|
1505
|
-
/** 版本号比较(逐段数字;缺失段按 0)。返回负数/0/正数,非法输入按相等处理。
|
|
1529
|
+
/** 版本号比较(逐段数字;缺失段按 0)。返回负数/0/正数,非法输入按相等处理。
|
|
1530
|
+
* 兼容目录里的 `v1.1.8` 与 npm 的 `1.1.8`:每段先剥掉前导非数字,再取整。
|
|
1531
|
+
* 预发布后缀单独处理:`1.0.0` 高于 `1.0.0-beta.1`,两个预发布版按标识符比较
|
|
1532
|
+
* (纯数字段按数值,数字段低于字母段)。 */
|
|
1506
1533
|
function compareVersions(a, b) {
|
|
1507
|
-
const
|
|
1508
|
-
const
|
|
1509
|
-
|
|
1534
|
+
const core = (v) => (v ?? "").split("+")[0].split("-")[0].split(".").map((part) => Number.parseInt(part.replace(/^[^\d]+/, ""), 10)).filter((n) => !Number.isNaN(n));
|
|
1535
|
+
const pre = (v) => {
|
|
1536
|
+
const rest = (v ?? "").split("+")[0].split("-").slice(1);
|
|
1537
|
+
return rest.length === 0 ? [] : rest.join("-").split(".");
|
|
1538
|
+
};
|
|
1539
|
+
const va = core(a);
|
|
1540
|
+
const vb = core(b);
|
|
1510
1541
|
const len = Math.max(va.length, vb.length);
|
|
1511
1542
|
for (let i = 0; i < len; i++) {
|
|
1512
1543
|
const d = (va[i] ?? 0) - (vb[i] ?? 0);
|
|
1513
1544
|
if (d !== 0) return d;
|
|
1514
1545
|
}
|
|
1546
|
+
const pa = pre(a);
|
|
1547
|
+
const pb = pre(b);
|
|
1548
|
+
if (pa.length === 0 && pb.length === 0) return 0;
|
|
1549
|
+
if (pa.length === 0) return 1;
|
|
1550
|
+
if (pb.length === 0) return -1;
|
|
1551
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
1552
|
+
const x = pa[i];
|
|
1553
|
+
const y = pb[i];
|
|
1554
|
+
if (x === void 0) return -1;
|
|
1555
|
+
if (y === void 0) return 1;
|
|
1556
|
+
const nx = /^\d+$/.test(x) ? Number(x) : null;
|
|
1557
|
+
const ny = /^\d+$/.test(y) ? Number(y) : null;
|
|
1558
|
+
if (nx !== null && ny !== null) {
|
|
1559
|
+
if (nx !== ny) return nx - ny;
|
|
1560
|
+
} else if (x !== y) return x < y ? -1 : 1;
|
|
1561
|
+
}
|
|
1515
1562
|
return 0;
|
|
1516
1563
|
}
|
|
1517
1564
|
/**
|
|
1565
|
+
* 是否值得提示「可更新」:npm 上最新可安装版本确实比已装版本新,且已过供应链门禁。
|
|
1566
|
+
*
|
|
1567
|
+
* 更新命令执行的是 `pkg@latest`,所以「目录里标的版本」不是最终能装上的版本:
|
|
1568
|
+
* 作者可能只打了 GitHub release 没发 npm —— 此时提示会变成永远点不掉的循环。
|
|
1569
|
+
* 任一信息缺失(查不到发布信息 / 没有已装版本记录)返回 true,交回调用方原有判定:
|
|
1570
|
+
* 宁可提示,也不因为一次查询失败把真实更新吃掉。
|
|
1571
|
+
*/
|
|
1572
|
+
function isUpdateOffered(release, installedVersion, now) {
|
|
1573
|
+
if (release === null) return true;
|
|
1574
|
+
if (isReleaseTooFresh(release.publishedAt, now)) return false;
|
|
1575
|
+
if (installedVersion !== null && compareVersions(release.version, installedVersion) <= 0) return false;
|
|
1576
|
+
return true;
|
|
1577
|
+
}
|
|
1578
|
+
/**
|
|
1518
1579
|
* 选出本次真正该提示的更新版本。
|
|
1519
1580
|
*
|
|
1520
1581
|
* 只看最新版会漏更新:连续发版时间隔小于供应链门禁时,最新版永远「太新」,
|
|
@@ -1581,7 +1642,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1581
1642
|
function installedVersionOf(plugin, versions) {
|
|
1582
1643
|
const repo = plugin.source?.repo;
|
|
1583
1644
|
if (!repo) return null;
|
|
1584
|
-
return versions
|
|
1645
|
+
return signalOf(repo, versions)?.version || null;
|
|
1585
1646
|
}
|
|
1586
1647
|
/** 该插件对应的 npm 包名(目录下发,或安装时持久化的映射);无则 null。决定更新是否走 npm registry。 */
|
|
1587
1648
|
function npmPackageOf(plugin, versions) {
|
|
@@ -1593,6 +1654,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1593
1654
|
* 是否有更新:仅对已安装插件有意义。
|
|
1594
1655
|
* 双信号判定——有 release 版本的比版本;无版本(repo 不打 tag)的比仓库最近更新时间
|
|
1595
1656
|
* (repoUpdatedAt,ISO 字符串字典序 = 时间序),更新时间变新说明有新提交。
|
|
1657
|
+
* 版本用「目录 > 已装」判断,不做 != 比较:目录可能滞后于 npm,若直接用不等,
|
|
1658
|
+
* 会把「已装 1.1.10、目录还写 1.1.8」判成有更新,反而引导用户降级。
|
|
1596
1659
|
*/
|
|
1597
1660
|
function hasUpdateOf(plugin, installed, versions) {
|
|
1598
1661
|
if (installedNameOf(plugin, installed, versions) === null) return false;
|
|
@@ -1600,9 +1663,11 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1600
1663
|
if (!repo) return false;
|
|
1601
1664
|
const rec = versions[repo.toLowerCase()];
|
|
1602
1665
|
if (!rec) return false;
|
|
1603
|
-
|
|
1666
|
+
const recorded = typeof rec.version === "string" ? rec.version : "";
|
|
1667
|
+
if (plugin.version && recorded !== "") return compareVersions(plugin.version, recorded) > 0;
|
|
1604
1668
|
const current = plugin.dates?.repoUpdatedAt;
|
|
1605
|
-
|
|
1669
|
+
const seen = typeof rec.updatedAt === "string" ? rec.updatedAt : "";
|
|
1670
|
+
return Boolean(current && seen && current > seen);
|
|
1606
1671
|
}
|
|
1607
1672
|
/** 依赖 spec 能否解析出仓库身份(owner/repo 形态才算)。 */
|
|
1608
1673
|
function isRepoLike(value) {
|
|
@@ -1679,7 +1744,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1679
1744
|
plugin: p,
|
|
1680
1745
|
repo,
|
|
1681
1746
|
installPath: paths?.[name] ?? null,
|
|
1682
|
-
installedVersion: rec?.version
|
|
1747
|
+
installedVersion: rec?.version || null,
|
|
1683
1748
|
installedAt: rec?.installedAt ?? null,
|
|
1684
1749
|
catalogVersion: p.version ?? null,
|
|
1685
1750
|
hasUpdate: hasUpdateOf(p, installed, versions),
|
|
@@ -1699,7 +1764,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1699
1764
|
plugin: null,
|
|
1700
1765
|
repo,
|
|
1701
1766
|
installPath: paths?.[name] ?? null,
|
|
1702
|
-
installedVersion: rec?.version
|
|
1767
|
+
installedVersion: rec?.version || null,
|
|
1703
1768
|
installedAt: rec?.installedAt ?? null,
|
|
1704
1769
|
catalogVersion: null,
|
|
1705
1770
|
hasUpdate: false,
|
|
@@ -1723,8 +1788,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1723
1788
|
*/
|
|
1724
1789
|
/** 插件市场自身仓库:DSH Plugin Hub 不显示在目录里(自己不进自己的插件列表) */
|
|
1725
1790
|
const SELF_REPO = "dshplugin/dsh-plugin-hub";
|
|
1726
|
-
/**
|
|
1727
|
-
const
|
|
1791
|
+
/** 共享的空发布信息表:无候选包时复用,避免每次渲染新建对象。 */
|
|
1792
|
+
const EMPTY_RELEASES = {};
|
|
1728
1793
|
/** 市场各排序的默认方向:全部按倒序(Star/Fork 多、更新/收录近的在前) */
|
|
1729
1794
|
const SORT_DEFAULT_DIR$1 = {
|
|
1730
1795
|
sortStars: "desc",
|
|
@@ -1869,14 +1934,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1869
1934
|
/** 该插件安装时记录的目录版本(无记录/未安装 → null)。 */
|
|
1870
1935
|
const installedVersion = (p) => installedVersionOf(p, versions);
|
|
1871
1936
|
/**
|
|
1872
|
-
*
|
|
1937
|
+
* 更新可用性校验状态:npm registry 上每个包的最新可安装版本与发布时间。
|
|
1873
1938
|
* key 是这批候选包名的指纹,与已查出的 key 一致才算就绪,避免查询未回来时先显示更新。
|
|
1874
1939
|
*/
|
|
1875
1940
|
const [releaseAge, setReleaseAge] = (0, react.useState)({
|
|
1876
1941
|
key: "",
|
|
1877
|
-
|
|
1942
|
+
releases: EMPTY_RELEASES
|
|
1878
1943
|
});
|
|
1879
|
-
/**
|
|
1944
|
+
/** 已安装项原始列表(未套校验):先算出来才能收集需要查发布信息的候选包名。 */
|
|
1880
1945
|
const rawInstalledItems = (0, react.useMemo)(() => installedItemsOf(plugins, installed, versions, installPaths, loadedNames, dshCapableNames), [
|
|
1881
1946
|
plugins,
|
|
1882
1947
|
installed,
|
|
@@ -1885,7 +1950,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1885
1950
|
loadedNames,
|
|
1886
1951
|
dshCapableNames
|
|
1887
1952
|
]);
|
|
1888
|
-
/**
|
|
1953
|
+
/** 校验候选:有更新、且有 npm 包名(更新走 npm registry)的已安装插件包名。 */
|
|
1889
1954
|
const releaseAgeCandidates = (0, react.useMemo)(() => {
|
|
1890
1955
|
const names = /* @__PURE__ */ new Set();
|
|
1891
1956
|
for (const item of rawInstalledItems) {
|
|
@@ -1896,61 +1961,83 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1896
1961
|
return [...names].sort();
|
|
1897
1962
|
}, [rawInstalledItems, versions]);
|
|
1898
1963
|
const releaseAgeKey = releaseAgeCandidates.join("\n");
|
|
1964
|
+
/** 包名 → 已装版本:判断 npm 上最新版是否真的比已装版本新。 */
|
|
1965
|
+
const installedByPackage = (0, react.useMemo)(() => {
|
|
1966
|
+
const map = /* @__PURE__ */ new Map();
|
|
1967
|
+
for (const item of rawInstalledItems) {
|
|
1968
|
+
if (!item.plugin) continue;
|
|
1969
|
+
const pkg = npmPackageOf(item.plugin, versions);
|
|
1970
|
+
const version = installedVersionOf(item.plugin, versions);
|
|
1971
|
+
if (pkg !== null && version !== null) map.set(pkg, version);
|
|
1972
|
+
}
|
|
1973
|
+
return map;
|
|
1974
|
+
}, [rawInstalledItems, versions]);
|
|
1899
1975
|
(0, react.useEffect)(() => {
|
|
1900
1976
|
if (releaseAgeKey === releaseAge.key) return;
|
|
1901
1977
|
if (releaseAgeCandidates.length === 0) {
|
|
1902
1978
|
setReleaseAge({
|
|
1903
1979
|
key: "",
|
|
1904
|
-
|
|
1980
|
+
releases: EMPTY_RELEASES
|
|
1905
1981
|
});
|
|
1906
1982
|
return;
|
|
1907
1983
|
}
|
|
1908
1984
|
let cancelled = false;
|
|
1909
1985
|
fetchNpmReleaseAge(releaseAgeCandidates).then((result) => {
|
|
1910
1986
|
if (cancelled) return;
|
|
1911
|
-
const now = Date.now();
|
|
1912
|
-
const held = /* @__PURE__ */ new Set();
|
|
1913
|
-
for (const name of releaseAgeCandidates) {
|
|
1914
|
-
const info = result?.[name];
|
|
1915
|
-
if (info && isReleaseTooFresh(info.publishedAt, now)) held.add(name);
|
|
1916
|
-
}
|
|
1917
1987
|
setReleaseAge({
|
|
1918
1988
|
key: releaseAgeKey,
|
|
1919
|
-
|
|
1989
|
+
releases: result ?? EMPTY_RELEASES
|
|
1920
1990
|
});
|
|
1921
1991
|
});
|
|
1922
1992
|
return () => {
|
|
1923
1993
|
cancelled = true;
|
|
1924
1994
|
};
|
|
1925
1995
|
}, [releaseAgeKey, releaseAge.key]);
|
|
1926
|
-
/**
|
|
1996
|
+
/** 校验结果是否已就绪(候选为空也算就绪):未就绪时不写更新提醒,等查询回来再定。 */
|
|
1927
1997
|
const releaseAgeReady = releaseAgeKey === releaseAge.key;
|
|
1928
|
-
|
|
1998
|
+
/**
|
|
1999
|
+
* 不能提示更新的包:
|
|
2000
|
+
* - npm 上最新版还没过供应链门禁(发布不满 24h,pnpm 会静默回退,点了也装不上);
|
|
2001
|
+
* - npm 上最新版并不高于已装版本 —— 更新走的是 `pkg@latest`,此时无论目录标到哪个 tag,
|
|
2002
|
+
* 都不可能装上(作者可能只打了 GitHub release 没发 npm),提示只会变成永远点不掉的循环。
|
|
2003
|
+
*/
|
|
2004
|
+
const updateBlocked = (0, react.useMemo)(() => {
|
|
2005
|
+
const blocked = /* @__PURE__ */ new Set();
|
|
2006
|
+
if (!releaseAgeReady) return blocked;
|
|
2007
|
+
const now = Date.now();
|
|
2008
|
+
for (const pkg of releaseAgeCandidates) if (!isUpdateOffered(releaseAge.releases[pkg] ?? null, installedByPackage.get(pkg) ?? null, now)) blocked.add(pkg);
|
|
2009
|
+
return blocked;
|
|
2010
|
+
}, [
|
|
2011
|
+
releaseAgeReady,
|
|
2012
|
+
releaseAgeCandidates,
|
|
2013
|
+
releaseAge.releases,
|
|
2014
|
+
installedByPackage
|
|
2015
|
+
]);
|
|
1929
2016
|
/**
|
|
1930
2017
|
* 是否有更新:仅对已安装插件有意义。
|
|
1931
2018
|
* 双信号判定——有 release 版本的比版本;无版本(repo 不打 tag)的比仓库最近更新时间
|
|
1932
2019
|
* (repoUpdatedAt,ISO 字符串字典序 = 时间序),更新时间变新说明有新提交。
|
|
1933
|
-
*
|
|
2020
|
+
* 再用 npm registry 的实际最新版本复核:装不上的(太新 / 不比已装新)不打更新标记。
|
|
1934
2021
|
*/
|
|
1935
2022
|
const hasUpdate = (p) => {
|
|
1936
2023
|
if (!hasUpdateOf(p, installed, versions)) return false;
|
|
1937
2024
|
const pkg = npmPackageOf(p, versions);
|
|
1938
|
-
return pkg === null || !
|
|
2025
|
+
return pkg === null || !updateBlocked.has(pkg);
|
|
1939
2026
|
};
|
|
1940
|
-
/** 已安装项统一列表(目录元数据 +
|
|
2027
|
+
/** 已安装项统一列表(目录元数据 + 运行时信息合并):被拦下的去掉更新标记,驱动「已安装」tab。 */
|
|
1941
2028
|
const installedItems = (0, react.useMemo)(() => {
|
|
1942
|
-
if (
|
|
2029
|
+
if (updateBlocked.size === 0) return rawInstalledItems;
|
|
1943
2030
|
return rawInstalledItems.map((item) => {
|
|
1944
2031
|
if (!item.hasUpdate || !item.plugin) return item;
|
|
1945
2032
|
const pkg = npmPackageOf(item.plugin, versions);
|
|
1946
|
-
return pkg !== null &&
|
|
2033
|
+
return pkg !== null && updateBlocked.has(pkg) ? {
|
|
1947
2034
|
...item,
|
|
1948
2035
|
hasUpdate: false
|
|
1949
2036
|
} : item;
|
|
1950
2037
|
});
|
|
1951
2038
|
}, [
|
|
1952
2039
|
rawInstalledItems,
|
|
1953
|
-
|
|
2040
|
+
updateBlocked,
|
|
1954
2041
|
versions
|
|
1955
2042
|
]);
|
|
1956
2043
|
/**
|
|
@@ -1964,7 +2051,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1964
2051
|
* registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
|
|
1965
2052
|
* 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
|
|
1966
2053
|
*/
|
|
1967
|
-
const hubCurrentVersion = "2.2.
|
|
2054
|
+
const hubCurrentVersion = "2.2.2";
|
|
1968
2055
|
const hubUpdateResult = hubUpdateInfo === null ? {
|
|
1969
2056
|
state: "none",
|
|
1970
2057
|
target: null
|
|
@@ -2214,23 +2301,26 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2214
2301
|
if (/installation rejected:.*incompatible with dsh/i.test(message)) return "hostIncompatible";
|
|
2215
2302
|
if (/is managed exclusively by the Electron application|managed exclusively by the desktop app/i.test(message)) return "profileExclusive";
|
|
2216
2303
|
if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
|
|
2304
|
+
if (/ERR_PNPM_UNSUPPORTED_ENGINE|ERR_PNPM_INVALID_NODE_VERSION|\bEBADENGINE\b/i.test(message)) return "nodeEngine";
|
|
2217
2305
|
if (/\[pnpm-missing\]|pnpm not found|pnpm: command not found|spawn pnpm ENOENT|'pnpm' 不是内部或外部命令|"pnpm" 不是内部或外部命令|pnpm['"]?\s*is not recognized/i.test(message)) return "pnpmMissing";
|
|
2218
2306
|
if (/\[git-missing\]|spawn git ENOENT|'git' 不是内部或外部命令|"git" 不是内部或外部命令|git['"]?\s*is not recognized|git: command not found/i.test(message)) return "gitMissing";
|
|
2219
2307
|
if (/\[npm-missing\]|spawn npm ENOENT|'npm' 不是内部或外部命令|"npm" 不是内部或外部命令|npm['"]?\s*is not recognized|npm: command not found/i.test(message)) return "npmMissing";
|
|
2220
2308
|
if (/\[dsh-missing\]|不是内部或外部命令|is not recognized as an internal or external command|command not found|spawn dsh ENOENT/i.test(message)) return "dshMissing";
|
|
2221
|
-
if (/
|
|
2222
|
-
if (/ERR_PNPM_UNEXPECTED_(VIRTUAL_)?STORE|Unexpected (virtual )?store location/i.test(message)) return "pnpmStore";
|
|
2309
|
+
if (/ERR_PNPM_[A-Z0-9_]*DIFF\b|modules directory was created using a different/i.test(message)) return "pnpmModulesMismatch";
|
|
2310
|
+
if (/ERR_PNPM_UNEXPECTED_(VIRTUAL_)?STORE|ERR_PNPM_UNEXPECTED_PKG_CONTENT_IN_STORE|Unexpected (virtual )?store location/i.test(message)) return "pnpmStore";
|
|
2223
2311
|
if (/ERR_PNPM_ADDING_TO_ROOT|add the dependency to the workspace root/i.test(message)) return "pnpmWorkspace";
|
|
2224
2312
|
if (/(^|\n)untrusted origin\s*$/.test(message)) return "originRejected";
|
|
2225
2313
|
if (missingTarballIntegrity(message) || mismatchedTarballIntegrity(message) || /ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION|ERR_PNPM_NO_MATURE_MATCHING_VERSION|Minimum release age|minimumReleaseAge|untrusted origin/i.test(message)) return "pnpmPolicy";
|
|
2226
2314
|
if (/ERR_PNPM_UNUSED_PATCH|patches were not used/i.test(message)) return "pnpmUnusedPatch";
|
|
2315
|
+
if (/ERR_PNPM_OUTDATED_LOCKFILE|ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND|ERR_PNPM_NO_PKG_MANIFEST|ERR_PNPM_BAD_PM_VERSION|ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY|ERR_PNPM_PATCH_NOT_APPLIED|ERR_PNPM_WORKSPACE_PKG_NOT_FOUND|ERR_PNPM_JSON_PARSE|ERR_PNPM_PKG_MANIFEST_IS_NOT_OBJECT|ERR_PNPM_MISSING_HOIST_PATTERN|Cannot install with "frozen-lockfile"/i.test(message)) return "profileState";
|
|
2227
2316
|
if (/os error 32|EBUSY|resource busy or locked|being used by another process/i.test(message)) return "fileLocked";
|
|
2228
2317
|
if (/os error 5\b|ERROR_ACCESS_DENIED|\bEPERM\b|\bEACCES\b|access is denied/i.test(message)) return "accessDenied";
|
|
2229
2318
|
if (/os error 112\b|os error 19\b|ERROR_DISK_FULL|ERROR_WRITE_PROTECT|\bENOSPC\b|\bEROFS\b|\bEMFILE\b|\bENFILE\b|no space left on device|read-only file system|too many open files/i.test(message)) return "fsUnavailable";
|
|
2230
2319
|
if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
|
|
2231
2320
|
if (/ERR_PNPM_FETCH_40[13]\b|\bE40[13]\b|(?:Unauthorized|Forbidden)\s*-\s*40[13]\b/i.test(message)) return "registryAuth";
|
|
2232
2321
|
if (/ERR_PNPM_LINKED_PKG_DIR_NOT_FOUND|Could not install from .+ as it does not exist|pnpm:\s*ENOENT: no such file or directory,\s*(?:lstat|scandir|readlink)/i.test(message)) return "pnpmLinkedDirMissing";
|
|
2233
|
-
if (
|
|
2322
|
+
if (/unable to verify the first certificate|SELF_SIGNED_CERT_IN_CHAIN|UNABLE_TO_VERIFY_LEAF_SIGNATURE|ERR_TLS_CERT_ALTNAME_INVALID|CERT_HAS_EXPIRED|certificate has expired|UNABLE_TO_GET_ISSUER_CERT|CERT_UNTRUSTED|ERR_TLS_CERT/i.test(message)) return "tlsTrust";
|
|
2323
|
+
if (/\[network\]|ERR_PNPM_GIT_FETCH_FAILED|ERR_PNPM_FETCH_5\d\d|ERR_PNPM_META_FETCH_FAIL|ERR_SOCKET_TIMEOUT|ETIMEDOUT|ECONNREFUSED|ECONNRESET|ENOTFOUND|EAI_AGAIN|EPIPE|EHOSTUNREACH|ENETUNREACH|UND_ERR_[A-Z0-9_]+|getaddrinfo|Could not connect|Could not resolve host|Network unreachable|Failed to connect|socket hang up|CERT_HAS_EXPIRED|SSL certificate problem|SSL routines|TLS handshake|SSL handshake|ERR_SSL_|ssl_error|fetch failed|failed to fetch|\bGET https?:\/\/\S+\.tgz\s+error \([A-Za-z0-9_]+\)/i.test(message)) return "network";
|
|
2234
2324
|
if (/\[request-timeout\]/i.test(message)) return "network";
|
|
2235
2325
|
if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
|
|
2236
2326
|
if (/\[registry-missing\]/i.test(message)) return "pluginMissingDep";
|
|
@@ -2242,6 +2332,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2242
2332
|
if (/^\[timed out\]$/m.test(message)) return "timeout";
|
|
2243
2333
|
if (/atomic-write: timed out waiting for the writer lock|timed out waiting for the writer lock/i.test(message)) return "profileLock";
|
|
2244
2334
|
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";
|
|
2335
|
+
if (/cannot resolve profile bundle/i.test(message)) return "profileBundleMissing";
|
|
2245
2336
|
if (/\[host-spawn\]/i.test(message)) return "hostCliSpawn";
|
|
2246
2337
|
if (/\[dsh-too-old\]/i.test(message)) return "dshTooOld";
|
|
2247
2338
|
if (/spawn .+ ENOENT/i.test(message)) return "hub";
|
|
@@ -2251,7 +2342,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2251
2342
|
/** 「特征指向本机环境但说不清具体哪一类」的兜底判据:系统调用错误码(权限/路径过长/设备异常)、
|
|
2252
2343
|
* 证书与代理校验失败、本地配置文件(~/.npmrc、profile 的 package.json)损坏。
|
|
2253
2344
|
* 只做排除用:命中它表示「不是插件侧问题」,不代表我们已经定位到原因。 */
|
|
2254
|
-
const LOCAL_ENV_RE = /os error \d{1,3}\b|ERROR_[A-Z_]{4,}|\bE(?:ACCES|PERM|NOENT|NAMETOOLONG|INVAL|PROTO|ISDIR|NOTDIR|EXIST|BADF|NOTEMPTY|JSONPARSE)\b|Unexpected token .{0,60}in JSON|SELF_SIGNED_CERT_IN_CHAIN|UNABLE_TO_VERIFY_LEAF_SIGNATURE|ERR_TLS_CERT_ALTNAME_INVALID|unable to verify the first certificate|self[- ]signed certificate|ERR_INVALID_URL|invalid registry|proxy authentication|407 Proxy/i;
|
|
2345
|
+
const LOCAL_ENV_RE = /os error \d{1,3}\b|ERROR_[A-Z_]{4,}|\bE(?:ACCES|PERM|NOENT|NAMETOOLONG|INVAL|PROTO|ISDIR|NOTDIR|EXIST|BADF|NOTEMPTY|JSONPARSE|NOMEM)\b|JavaScript heap out of memory|Unexpected token .{0,60}in JSON|SELF_SIGNED_CERT_IN_CHAIN|UNABLE_TO_VERIFY_LEAF_SIGNATURE|ERR_TLS_CERT_ALTNAME_INVALID|unable to verify the first certificate|self[- ]signed certificate|ERR_INVALID_URL|invalid registry|proxy authentication|407 Proxy/i;
|
|
2255
2346
|
/** 从服务端 `[npm-too-low]` 标记行提取本机 npm 版本(如 `[npm-too-low] npm@11.3.0` → "11.3.0");
|
|
2256
2347
|
* 历史记录无标记时返回 null,前端据此决定提示文案是否带具体版本。 */
|
|
2257
2348
|
function npmTooLowVersion(message) {
|
|
@@ -2269,7 +2360,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2269
2360
|
/** 安装器自己打的诊断标记行:它们本身就是「为什么没有日志 / 卡在哪一步」的证据,
|
|
2270
2361
|
* 不含 CORE_LINE_RE 的关键词,必须无条件保留 —— 否则上报正文会退回成只剩宿主那句摘要,
|
|
2271
2362
|
* 我们又拿不到任何可排查的信息(#382/#393 就是这样)。 */
|
|
2272
|
-
const MARKER_LINE_RE = /^\[(?:pnpm log|no-output|desktop-cli-fallback|dsh-too-old|host-spawn|npm-too-low|git-missing|npm-missing|pnpm-missing|dsh-missing|network|packaging|registry-missing|registry-mirror-lag|internal|exit\b|timed out)/i;
|
|
2363
|
+
const MARKER_LINE_RE = /^\[(?:pnpm log|no-output|desktop-cli-fallback|dsh-too-old|host-spawn|npm-too-low|git-missing|npm-missing|pnpm-missing|dsh-missing|network|packaging|registry-missing|registry-mirror-lag|registry-fallback|allow build|stale pipe|install-channel|internal|exit\b|timed out)/i;
|
|
2273
2364
|
/** 提交 issue 时正文里错误摘要的上限字符数。GitHub 请求行上限 8192 字节,
|
|
2274
2365
|
* 固定模板与 URL 编码开销约 1~2K,核心错误(以 ASCII 日志为主)可安全带到 ~5K;
|
|
2275
2366
|
* 仍超长时 pluginIssueUrl 会逐档缩小核心预算,最终 URL 不会超限。 */
|
|
@@ -2415,6 +2506,22 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2415
2506
|
};
|
|
2416
2507
|
}
|
|
2417
2508
|
/**
|
|
2509
|
+
* `cannot resolve profile bundle "<pkg>" from the dsh installation or <profileDir>` 里的
|
|
2510
|
+
* 缺失包名与 profile 目录;只取到包名也算成功(profile 目录可能被换行截断)。
|
|
2511
|
+
*/
|
|
2512
|
+
function unresolvedBundleOf(message) {
|
|
2513
|
+
const m = /cannot resolve profile bundle\s+"([^"]+)"\s+from the dsh installation or\s+(.+?)\s*(?:;|$)/im.exec(message);
|
|
2514
|
+
if (m !== null) return {
|
|
2515
|
+
pkg: m[1],
|
|
2516
|
+
profileDir: m[2].trim()
|
|
2517
|
+
};
|
|
2518
|
+
const only = /cannot resolve profile bundle\s+"([^"]+)"/i.exec(message);
|
|
2519
|
+
return only === null ? null : {
|
|
2520
|
+
pkg: only[1],
|
|
2521
|
+
profileDir: ""
|
|
2522
|
+
};
|
|
2523
|
+
}
|
|
2524
|
+
/**
|
|
2418
2525
|
* 鉴权失败(401/403)时被拒绝的源主机名:从 `ERR_PNPM_FETCH_401 GET https://host/pkg: Unauthorized - 401`
|
|
2419
2526
|
* 里取,取不到返回 null(提示文案退回通用说法,不拼出残缺句子)。
|
|
2420
2527
|
*/
|
|
@@ -2454,10 +2561,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2454
2561
|
const word = actionWordEn(action);
|
|
2455
2562
|
switch (kind) {
|
|
2456
2563
|
case "npmTooOld": return `npm too old for this ${word}`;
|
|
2564
|
+
case "nodeEngine": return `Node / pnpm on the user machine is below the version this ${word} requires`;
|
|
2565
|
+
case "profileState": return `the user profile's pnpm metadata does not match the local pnpm for this ${word}`;
|
|
2457
2566
|
case "dshMissing": return "dsh command not found on the user machine";
|
|
2458
2567
|
case "pnpmMissing": return "pnpm command not found on the user machine";
|
|
2459
2568
|
case "pnpmStore": return "pnpm store version mismatch on the user machine";
|
|
2460
|
-
case "
|
|
2569
|
+
case "pnpmModulesMismatch": return "the profile modules directory was built with a different pnpm config on the user machine";
|
|
2461
2570
|
case "pnpmWorkspace": return `pnpm workspace-root check blocked the ${word} on the user machine`;
|
|
2462
2571
|
case "originRejected": return "request origin rejected by the local service on the user machine";
|
|
2463
2572
|
case "pnpmPolicy": return `pnpm supply-chain policy blocked the ${word} on the user machine`;
|
|
@@ -2474,8 +2583,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2474
2583
|
case "pluginPrepare": return "plugin distribution incomplete";
|
|
2475
2584
|
case "hostIncompatible": return "plugin does not support the DSH version in use";
|
|
2476
2585
|
case "network": return "network failure on the user side";
|
|
2586
|
+
case "tlsTrust": return `TLS certificate verification failed on the user machine during the ${word}`;
|
|
2477
2587
|
case "hostCliSpawn": return "the DSH host could not be launched on the user machine";
|
|
2478
2588
|
case "hubState": return `stale ${word} state in the plugin hub`;
|
|
2589
|
+
case "profileBundleMissing": return "the DSH profile is missing a bundle it declares";
|
|
2479
2590
|
case "timeout": return `${word} timed out`;
|
|
2480
2591
|
case "profileLock": return "DSH profile is locked by another process";
|
|
2481
2592
|
case "pluginMissingDep": return "a dependency of the plugin is not published on npm";
|
|
@@ -2499,7 +2610,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2499
2610
|
const executed = executedCommandOf(command, attempts);
|
|
2500
2611
|
const zhWord = actionWordZh(action);
|
|
2501
2612
|
const title = `[dsh-plugin.org | dsh-plugin-hub] ${reasonTitleOf(kind, action)}: ${repo}`;
|
|
2502
|
-
const reason = kind === "hostIncompatible" ? "the plugin declares a dsh compatibility range that does not include the runtime in use, so the host rejects it before installing anything; please extend the supported dsh versions or publish a compatible release" : /\[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 npm package; please 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 === "localEnv" ? "no evidence of a plugin-side cause; the log shows local-environment signals (system error codes, certificates/proxy, or a broken local config), so this is reported for triage of the classifier only" : kind === "dshTooOld" ? "the plugin declares a minimum DSH version this host does not meet — upgrade DSH first (local environment issue)" : kind === "
|
|
2613
|
+
const reason = kind === "hostIncompatible" ? "the plugin declares a dsh compatibility range that does not include the runtime in use, so the host rejects it before installing anything; please extend the supported dsh versions or publish a compatible release" : /\[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 npm package; please 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 === "tlsTrust" ? "the local certificate chain is not trusted by Node/pnpm (corporate SSL inspection, antivirus web shield, or a local MITM proxy) — local environment issue" : kind === "localEnv" ? "no evidence of a plugin-side cause; the log shows local-environment signals (system error codes, certificates/proxy, or a broken local config), so this is reported for triage of the classifier only" : kind === "dshTooOld" ? "the plugin declares a minimum DSH version this host does not meet — upgrade DSH first (local environment issue)" : kind === "pnpmModulesMismatch" ? "the profile node_modules was created with a different pnpm config (hoisting / virtual store settings), so pnpm refuses to reuse it (local environment issue)" : kind === "profileBundleMissing" ? "the profile declares a bundle that is not installed in it (interrupted install or incomplete app update), so the host aborts before installing anything (local environment issue)" : kind === "registryAuth" ? "the npm registry rejected the request with 401/403 — the configured registry needs credentials or blocks this network (local environment issue)" : kind === "profileExclusive" ? "the desktop profile can only be managed by the Electron app, and the install was attempted from an external CLI (local environment issue)" : 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";
|
|
2503
2614
|
const code = coreErrorCode(message);
|
|
2504
2615
|
const build = (coreChars) => {
|
|
2505
2616
|
const body = [
|
|
@@ -2832,34 +2943,51 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2832
2943
|
pendingRef.current = next;
|
|
2833
2944
|
setPendingRestarts(next);
|
|
2834
2945
|
};
|
|
2835
|
-
/** 向宿主记录某插件的安装时目录信号(version + updatedAt
|
|
2946
|
+
/** 向宿主记录某插件的安装时目录信号(version + updatedAt)。
|
|
2947
|
+
* 版本未知时**不写**:服务端把空版本当作「卸载清理」会删掉整条记录(连 npm 包名映射一起),
|
|
2948
|
+
* 刷新页面后任务丢了快照就会走到这条路径 —— 宁可保留旧记录,也不能把账本清空。 */
|
|
2836
2949
|
const syncInstalledVersion = async (repo, version, updatedAt) => {
|
|
2837
|
-
if (!repo) return;
|
|
2950
|
+
if (!repo || version === void 0 || version === "") return;
|
|
2838
2951
|
try {
|
|
2839
2952
|
await fetch("/dsh-plugin-hub/installed-version", {
|
|
2840
2953
|
method: "POST",
|
|
2841
2954
|
headers: { "content-type": "application/json" },
|
|
2842
2955
|
body: JSON.stringify({
|
|
2843
2956
|
repo,
|
|
2844
|
-
version
|
|
2957
|
+
version,
|
|
2845
2958
|
updatedAt
|
|
2846
2959
|
})
|
|
2847
2960
|
});
|
|
2848
2961
|
} catch {}
|
|
2849
2962
|
};
|
|
2963
|
+
/** 清除某仓库的版本记录(卸载成功后调用):空版本是服务端的「删除记录」语义,只在这里显式发送。 */
|
|
2964
|
+
const clearInstalledVersion = async (repo) => {
|
|
2965
|
+
if (!repo) return;
|
|
2966
|
+
try {
|
|
2967
|
+
await fetch("/dsh-plugin-hub/installed-version", {
|
|
2968
|
+
method: "POST",
|
|
2969
|
+
headers: { "content-type": "application/json" },
|
|
2970
|
+
body: JSON.stringify({
|
|
2971
|
+
repo,
|
|
2972
|
+
version: null
|
|
2973
|
+
})
|
|
2974
|
+
});
|
|
2975
|
+
} catch {}
|
|
2976
|
+
};
|
|
2850
2977
|
/** 后台任务结束(active 中消失后查终态确认):完成 → 刷新安装表 + 结果视图/toast;失败 → 完整错误弹窗 */
|
|
2851
2978
|
const finishQueueTask = (ok, q, lines) => {
|
|
2852
2979
|
applyQueue((prev) => prev.filter((x) => x.id !== q.id));
|
|
2853
2980
|
if (ok) {
|
|
2854
2981
|
refreshInstalled();
|
|
2855
2982
|
if (q.kind === "uninstall") {
|
|
2856
|
-
|
|
2983
|
+
clearInstalledVersion(q.repo);
|
|
2857
2984
|
onUninstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.needsReload ?? false);
|
|
2858
2985
|
} else {
|
|
2859
|
-
|
|
2986
|
+
const recordedVersion = q.installedVersion ?? q.version;
|
|
2987
|
+
syncInstalledVersion(q.repo, recordedVersion, q.updatedAt);
|
|
2860
2988
|
pendingInfoRef.current.set(q.target, {
|
|
2861
2989
|
desc: q.desc,
|
|
2862
|
-
version:
|
|
2990
|
+
version: recordedVersion
|
|
2863
2991
|
});
|
|
2864
2992
|
onInstallDone(modalTaskRef.current === q.id, q.repo, q.needsRestart, q.action === "update", q.needsReload ?? false, q.bundleDeselected === true);
|
|
2865
2993
|
}
|
|
@@ -2903,6 +3031,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2903
3031
|
let lines = [];
|
|
2904
3032
|
let attempts;
|
|
2905
3033
|
let bundleDeselected;
|
|
3034
|
+
let installedVersion;
|
|
2906
3035
|
try {
|
|
2907
3036
|
const res = await fetch(`/dsh-plugin-hub/status?task=${q.id}`, { cache: "no-store" });
|
|
2908
3037
|
if (res.ok) {
|
|
@@ -2912,6 +3041,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2912
3041
|
lines = task.lines ?? [];
|
|
2913
3042
|
attempts = Array.isArray(task.attempts) ? task.attempts : void 0;
|
|
2914
3043
|
bundleDeselected = task.bundleDeselected === true ? true : void 0;
|
|
3044
|
+
installedVersion = typeof task.installedVersion === "string" && task.installedVersion !== "" ? task.installedVersion : void 0;
|
|
2915
3045
|
const needsRestart = typeof task.needsRestart === "boolean" ? task.needsRestart : q.needsRestart;
|
|
2916
3046
|
const needsReload = typeof task.needsReload === "boolean" ? task.needsReload : q.needsReload ?? false;
|
|
2917
3047
|
if (status === "done") {
|
|
@@ -2919,7 +3049,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2919
3049
|
...q,
|
|
2920
3050
|
needsRestart,
|
|
2921
3051
|
needsReload,
|
|
2922
|
-
bundleDeselected: bundleDeselected === true ? true : q.bundleDeselected
|
|
3052
|
+
bundleDeselected: bundleDeselected === true ? true : q.bundleDeselected,
|
|
3053
|
+
installedVersion
|
|
2923
3054
|
};
|
|
2924
3055
|
if (q.kind === "uninstall") settleDone(settled, lines);
|
|
2925
3056
|
else finishQueueTask(true, settled, lines);
|
|
@@ -3950,7 +4081,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3950
4081
|
})() : null, (0, react.createElement)("button", {
|
|
3951
4082
|
className: Modal_module_css_default.errorCopySoft,
|
|
3952
4083
|
onClick: () => onCopy(copyText)
|
|
3953
|
-
}, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, displayMessage), (0, react.createElement)("div", { className: Modal_module_css_default.failKindTitle }, t(`failKind_${failureKind}`, failureKind === "hostIncompatible" ? { version: /incompatible with dsh\s+([^\s:;,]+)/i.exec(message)?.[1] ?? "" } : void 0)), failureKind === "hostIncompatible" ? null : (0, react.createElement)("div", { className: Modal_module_css_default.failReason }, t(`failReason_${failureKind}`)), 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 === "buildToolchainMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failBuildToolchainHint")) : failureKind === "pnpmWorkspace" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint")) : failureKind === "
|
|
4084
|
+
}, t("errorCopy"))), (0, react.createElement)("pre", { className: Modal_module_css_default.errorBox }, displayMessage), (0, react.createElement)("div", { className: Modal_module_css_default.failKindTitle }, t(`failKind_${failureKind}`, failureKind === "hostIncompatible" ? { version: /incompatible with dsh\s+([^\s:;,]+)/i.exec(message)?.[1] ?? "" } : void 0)), failureKind === "hostIncompatible" ? null : (0, react.createElement)("div", { className: Modal_module_css_default.failReason }, t(`failReason_${failureKind}`)), 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 === "buildToolchainMissing" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failBuildToolchainHint")) : failureKind === "pnpmWorkspace" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint")) : failureKind === "pnpmModulesMismatch" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmModulesMismatchHint")) : 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 === "profileState" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileStateHint")) : failureKind === "nodeEngine" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNodeEngineHint")) : failureKind === "pnpmMissingDep" ? (0, react.createElement)("div", null, [(() => {
|
|
3954
4085
|
const pkg = missingRegistryPackageOf(message);
|
|
3955
4086
|
return pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPnpmMissingDepTarget", { pkg })) : null;
|
|
3956
4087
|
})(), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(registryMissingHintOf(message)))]) : failureKind === "pluginMissingDep" ? (0, react.createElement)("div", null, [
|
|
@@ -4015,7 +4146,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4015
4146
|
rel: "noopener noreferrer",
|
|
4016
4147
|
title: t("failHubIssueHint")
|
|
4017
4148
|
}, t("failMisjudgeLink"))])
|
|
4018
|
-
]) : failureKind === "
|
|
4149
|
+
]) : failureKind === "tlsTrust" ? (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failTlsTrustHint")), onRunDiagnostics ? (0, react.createElement)("button", {
|
|
4150
|
+
className: Modal_module_css_default.failDiagBtn,
|
|
4151
|
+
onClick: onRunDiagnostics
|
|
4152
|
+
}, t("failNetworkRunDiag")) : null]) : failureKind === "network" ? (0, react.createElement)("div", null, [
|
|
4019
4153
|
(() => {
|
|
4020
4154
|
const target = unreachableTargetOf(message);
|
|
4021
4155
|
return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
|
|
@@ -4045,7 +4179,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4045
4179
|
rel: "noopener noreferrer",
|
|
4046
4180
|
title: t("failHubIssueHint")
|
|
4047
4181
|
}, t("failMisjudgeLink"))]) : null
|
|
4048
|
-
]) : failureKind === "
|
|
4182
|
+
]) : failureKind === "profileBundleMissing" ? (() => {
|
|
4183
|
+
const info = unresolvedBundleOf(message);
|
|
4184
|
+
return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileBundleMissingHint", {
|
|
4185
|
+
pkg: info?.pkg ?? "unknown",
|
|
4186
|
+
profile: env?.profile ?? "<profile>"
|
|
4187
|
+
}));
|
|
4188
|
+
})() : 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"))]) : failureKind === "pnpmIgnoredBuild" ? (0, react.createElement)("div", null, [
|
|
4049
4189
|
(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failIgnoredBuild")),
|
|
4050
4190
|
repo ? (0, react.createElement)("a", {
|
|
4051
4191
|
className: Modal_module_css_default.failBigIssue,
|
|
@@ -4608,10 +4748,12 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4608
4748
|
if (kind === "npmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint"));
|
|
4609
4749
|
if (kind === "buildToolchainMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failBuildToolchainHint"));
|
|
4610
4750
|
if (kind === "pnpmWorkspace") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint"));
|
|
4611
|
-
if (kind === "
|
|
4751
|
+
if (kind === "pnpmModulesMismatch") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmModulesMismatchHint"));
|
|
4612
4752
|
if (kind === "pnpmStore") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint"));
|
|
4613
4753
|
if (kind === "pnpmPolicy") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(pnpmPolicyHintOf(r.message), pnpmPolicyHintParams(r.message)));
|
|
4614
4754
|
if (kind === "pnpmUnusedPatch") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint"));
|
|
4755
|
+
if (kind === "profileState") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileStateHint"));
|
|
4756
|
+
if (kind === "nodeEngine") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNodeEngineHint"));
|
|
4615
4757
|
if (kind === "pnpmMissingDep") {
|
|
4616
4758
|
const pkg = missingRegistryPackageOf(r.message);
|
|
4617
4759
|
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)))]);
|
|
@@ -4694,6 +4836,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4694
4836
|
title: t("failHubIssueHint")
|
|
4695
4837
|
}, t("failMisjudgeLink"))])
|
|
4696
4838
|
]);
|
|
4839
|
+
if (kind === "tlsTrust") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failTlsTrustHint")), onRunDiagnostics ? (0, react.createElement)("button", {
|
|
4840
|
+
className: Modal_module_css_default.failDiagBtn,
|
|
4841
|
+
onClick: onRunDiagnostics
|
|
4842
|
+
}, t("failNetworkRunDiag")) : null]);
|
|
4697
4843
|
if (kind === "network") return (0, react.createElement)("div", null, [
|
|
4698
4844
|
(() => {
|
|
4699
4845
|
const target = unreachableTargetOf(r.message);
|
|
@@ -4726,6 +4872,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4726
4872
|
title: t("failHubIssueHint")
|
|
4727
4873
|
}, t("failMisjudgeLink"))]) : null
|
|
4728
4874
|
]);
|
|
4875
|
+
if (kind === "profileBundleMissing") {
|
|
4876
|
+
const info = unresolvedBundleOf(r.message);
|
|
4877
|
+
return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileBundleMissingHint", {
|
|
4878
|
+
pkg: info?.pkg ?? "unknown",
|
|
4879
|
+
profile: env?.profile ?? "<profile>"
|
|
4880
|
+
}));
|
|
4881
|
+
}
|
|
4729
4882
|
if (kind === "hubState") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failHubStateHint", { action: actionWord }))]);
|
|
4730
4883
|
if (kind === "timeout") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failTimeoutHint"))]);
|
|
4731
4884
|
if (kind === "profileLock") return (0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failProfileLockHint", { action: actionWord }))]);
|
|
@@ -4931,40 +5084,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4931
5084
|
css: css$9
|
|
4932
5085
|
});
|
|
4933
5086
|
var List_module_css_default = {
|
|
5087
|
+
"stats": "_3XaZHa_stats",
|
|
5088
|
+
"cardSide": "_3XaZHa_cardSide",
|
|
4934
5089
|
"fork": "_3XaZHa_fork",
|
|
4935
|
-
"
|
|
4936
|
-
"
|
|
4937
|
-
"
|
|
4938
|
-
"
|
|
5090
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
5091
|
+
"detailBtn": "_3XaZHa_detailBtn",
|
|
5092
|
+
"topics": "_3XaZHa_topics",
|
|
5093
|
+
"stateActions": "_3XaZHa_stateActions",
|
|
5094
|
+
"stateTitle": "_3XaZHa_stateTitle",
|
|
4939
5095
|
"footLink": "_3XaZHa_footLink",
|
|
4940
|
-
"
|
|
4941
|
-
"cardMain": "_3XaZHa_cardMain",
|
|
4942
|
-
"desc": "_3XaZHa_desc",
|
|
5096
|
+
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
4943
5097
|
"body": "_3XaZHa_body",
|
|
5098
|
+
"topic": "_3XaZHa_topic",
|
|
5099
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
5100
|
+
"diagBtn": "_3XaZHa_diagBtn",
|
|
5101
|
+
"footer": "_3XaZHa_footer",
|
|
5102
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
5103
|
+
"star": "_3XaZHa_star",
|
|
5104
|
+
"actions": "_3XaZHa_actions",
|
|
5105
|
+
"state": "_3XaZHa_state",
|
|
5106
|
+
"cardHead": "_3XaZHa_cardHead",
|
|
5107
|
+
"updateBadge": "_3XaZHa_updateBadge",
|
|
4944
5108
|
"list": "_3XaZHa_list",
|
|
4945
|
-
"card": "_3XaZHa_card",
|
|
4946
|
-
"stateTitle": "_3XaZHa_stateTitle",
|
|
4947
|
-
"topics": "_3XaZHa_topics",
|
|
4948
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
4949
|
-
"verified": "_3XaZHa_verified",
|
|
4950
|
-
"date": "_3XaZHa_date",
|
|
4951
5109
|
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
4952
|
-
"
|
|
4953
|
-
"stateActions": "_3XaZHa_stateActions",
|
|
4954
|
-
"stats": "_3XaZHa_stats",
|
|
4955
|
-
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
4956
|
-
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
4957
|
-
"detailBtn": "_3XaZHa_detailBtn",
|
|
4958
|
-
"actions": "_3XaZHa_actions",
|
|
4959
|
-
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
5110
|
+
"cardTitle": "_3XaZHa_cardTitle",
|
|
4960
5111
|
"stateDesc": "_3XaZHa_stateDesc",
|
|
4961
|
-
"
|
|
5112
|
+
"date": "_3XaZHa_date",
|
|
5113
|
+
"desc": "_3XaZHa_desc",
|
|
5114
|
+
"versionBadge": "_3XaZHa_versionBadge",
|
|
4962
5115
|
"installBtn": "_3XaZHa_installBtn",
|
|
4963
|
-
"
|
|
4964
|
-
"
|
|
4965
|
-
"
|
|
4966
|
-
"
|
|
4967
|
-
"
|
|
5116
|
+
"cardMain": "_3XaZHa_cardMain",
|
|
5117
|
+
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
5118
|
+
"verified": "_3XaZHa_verified",
|
|
5119
|
+
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
5120
|
+
"card": "_3XaZHa_card"
|
|
4968
5121
|
};
|
|
4969
5122
|
//#endregion
|
|
4970
5123
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -5169,16 +5322,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5169
5322
|
css: css$8
|
|
5170
5323
|
});
|
|
5171
5324
|
var SectionTabs_module_css_default = {
|
|
5172
|
-
"noticeCount": "_7tvizq_noticeCount",
|
|
5173
|
-
"tabActive": "_7tvizq_tabActive",
|
|
5174
|
-
"tab": "_7tvizq_tab",
|
|
5175
|
-
"tabIcon": "_7tvizq_tabIcon",
|
|
5176
5325
|
"tabLabel": "_7tvizq_tabLabel",
|
|
5177
|
-
"root": "_7tvizq_root",
|
|
5178
|
-
"noticeBtn": "_7tvizq_noticeBtn",
|
|
5179
5326
|
"tabCount": "_7tvizq_tabCount",
|
|
5180
5327
|
"noticeIcon": "_7tvizq_noticeIcon",
|
|
5181
|
-
"
|
|
5328
|
+
"noticeBtn": "_7tvizq_noticeBtn",
|
|
5329
|
+
"noticeCount": "_7tvizq_noticeCount",
|
|
5330
|
+
"tabActive": "_7tvizq_tabActive",
|
|
5331
|
+
"tabCountActive": "_7tvizq_tabCountActive",
|
|
5332
|
+
"root": "_7tvizq_root",
|
|
5333
|
+
"tab": "_7tvizq_tab",
|
|
5334
|
+
"tabIcon": "_7tvizq_tabIcon"
|
|
5182
5335
|
};
|
|
5183
5336
|
//#endregion
|
|
5184
5337
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -5254,42 +5407,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5254
5407
|
css: css$7
|
|
5255
5408
|
});
|
|
5256
5409
|
var InstalledView_module_css_default = {
|
|
5257
|
-
"
|
|
5410
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
5411
|
+
"list": "_1nXeGW_list",
|
|
5412
|
+
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
5413
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
5414
|
+
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
5258
5415
|
"statusPending": "_1nXeGW_statusPending",
|
|
5259
|
-
"rowMain": "_1nXeGW_rowMain",
|
|
5260
5416
|
"exampleRow": "_1nXeGW_exampleRow",
|
|
5261
|
-
"
|
|
5417
|
+
"empty": "_1nXeGW_empty",
|
|
5418
|
+
"rowTitle": "_1nXeGW_rowTitle",
|
|
5262
5419
|
"rowDetail": "_1nXeGW_rowDetail",
|
|
5263
|
-
"
|
|
5264
|
-
"
|
|
5265
|
-
"
|
|
5266
|
-
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
5420
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
5421
|
+
"row": "_1nXeGW_row",
|
|
5422
|
+
"statusInactive": "_1nXeGW_statusInactive",
|
|
5267
5423
|
"segBtn": "_1nXeGW_segBtn",
|
|
5268
|
-
"rowTitle": "_1nXeGW_rowTitle",
|
|
5269
|
-
"segRow": "_1nXeGW_segRow",
|
|
5270
|
-
"updateBadge": "_1nXeGW_updateBadge",
|
|
5271
|
-
"root": "_1nXeGW_root",
|
|
5272
|
-
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
5273
|
-
"statusDot": "_1nXeGW_statusDot",
|
|
5274
5424
|
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5275
|
-
"
|
|
5276
|
-
"
|
|
5277
|
-
"
|
|
5278
|
-
"
|
|
5425
|
+
"versionBadge": "_1nXeGW_versionBadge",
|
|
5426
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
5427
|
+
"rowMeta": "_1nXeGW_rowMeta",
|
|
5428
|
+
"rowDesc": "_1nXeGW_rowDesc",
|
|
5429
|
+
"rowCategory": "_1nXeGW_rowCategory",
|
|
5279
5430
|
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
5280
|
-
"
|
|
5281
|
-
"
|
|
5431
|
+
"segGroup": "_1nXeGW_segGroup",
|
|
5432
|
+
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
5433
|
+
"rowRepo": "_1nXeGW_rowRepo",
|
|
5434
|
+
"segRow": "_1nXeGW_segRow",
|
|
5435
|
+
"rowRestart": "_1nXeGW_rowRestart",
|
|
5436
|
+
"root": "_1nXeGW_root",
|
|
5282
5437
|
"searchWrap": "_1nXeGW_searchWrap",
|
|
5283
|
-
"
|
|
5438
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
5284
5439
|
"searchInput": "_1nXeGW_searchInput",
|
|
5285
|
-
"
|
|
5286
|
-
"
|
|
5287
|
-
"
|
|
5288
|
-
"
|
|
5289
|
-
"
|
|
5290
|
-
"
|
|
5291
|
-
"rowDesc": "_1nXeGW_rowDesc",
|
|
5292
|
-
"rowMeta": "_1nXeGW_rowMeta"
|
|
5440
|
+
"statusDot": "_1nXeGW_statusDot",
|
|
5441
|
+
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
5442
|
+
"rowMain": "_1nXeGW_rowMain",
|
|
5443
|
+
"toolbar": "_1nXeGW_toolbar",
|
|
5444
|
+
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
5445
|
+
"rowUninstall": "_1nXeGW_rowUninstall"
|
|
5293
5446
|
};
|
|
5294
5447
|
//#endregion
|
|
5295
5448
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -5533,27 +5686,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5533
5686
|
css: css$6
|
|
5534
5687
|
});
|
|
5535
5688
|
var CustomInstallView_module_css_default = {
|
|
5689
|
+
"channelOffText": "zISxCG_channelOffText",
|
|
5536
5690
|
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
5537
5691
|
"installCards": "zISxCG_installCards",
|
|
5538
|
-
"
|
|
5539
|
-
"channelOffText": "zISxCG_channelOffText",
|
|
5540
|
-
"channelOff": "zISxCG_channelOff",
|
|
5541
|
-
"helpNote": "zISxCG_helpNote",
|
|
5692
|
+
"helpLine": "zISxCG_helpLine",
|
|
5542
5693
|
"helpCmd": "zISxCG_helpCmd",
|
|
5543
|
-
"installExample": "zISxCG_installExample",
|
|
5544
|
-
"installError": "zISxCG_installError",
|
|
5545
5694
|
"installBtn": "zISxCG_installBtn",
|
|
5695
|
+
"root": "zISxCG_root",
|
|
5546
5696
|
"installCard": "zISxCG_installCard",
|
|
5547
|
-
"
|
|
5548
|
-
"installRow": "zISxCG_installRow",
|
|
5549
|
-
"installInput": "zISxCG_installInput",
|
|
5697
|
+
"installLabel": "zISxCG_installLabel",
|
|
5550
5698
|
"desc": "zISxCG_desc",
|
|
5699
|
+
"installError": "zISxCG_installError",
|
|
5551
5700
|
"installInputError": "zISxCG_installInputError",
|
|
5552
|
-
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
5553
|
-
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5554
5701
|
"helpBody": "zISxCG_helpBody",
|
|
5555
|
-
"
|
|
5556
|
-
"
|
|
5702
|
+
"helpNote": "zISxCG_helpNote",
|
|
5703
|
+
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5704
|
+
"installCardHead": "zISxCG_installCardHead",
|
|
5705
|
+
"installInput": "zISxCG_installInput",
|
|
5706
|
+
"channelOff": "zISxCG_channelOff",
|
|
5707
|
+
"installRow": "zISxCG_installRow",
|
|
5708
|
+
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
5709
|
+
"installExample": "zISxCG_installExample"
|
|
5557
5710
|
};
|
|
5558
5711
|
//#endregion
|
|
5559
5712
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -5709,30 +5862,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5709
5862
|
css: css$5
|
|
5710
5863
|
});
|
|
5711
5864
|
var SettingsView_module_css_default = {
|
|
5712
|
-
"pageHeader": "_506LLG_pageHeader",
|
|
5713
|
-
"proxyControl": "_506LLG_proxyControl",
|
|
5714
|
-
"navIcon": "_506LLG_navIcon",
|
|
5715
|
-
"navItemActive": "_506LLG_navItemActive",
|
|
5716
|
-
"settingRow": "_506LLG_settingRow",
|
|
5717
5865
|
"textInput": "_506LLG_textInput",
|
|
5866
|
+
"navItem": "_506LLG_navItem",
|
|
5718
5867
|
"pageDesc": "_506LLG_pageDesc",
|
|
5868
|
+
"pageTitle": "_506LLG_pageTitle",
|
|
5869
|
+
"pageHeader": "_506LLG_pageHeader",
|
|
5870
|
+
"settingRow": "_506LLG_settingRow",
|
|
5871
|
+
"settingTitle": "_506LLG_settingTitle",
|
|
5719
5872
|
"proxyHint": "_506LLG_proxyHint",
|
|
5720
|
-
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
5721
|
-
"resetBtn": "_506LLG_resetBtn",
|
|
5722
|
-
"sidebar": "_506LLG_sidebar",
|
|
5723
|
-
"navItem": "_506LLG_navItem",
|
|
5724
|
-
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5725
|
-
"controlDropdown": "_506LLG_controlDropdown",
|
|
5726
5873
|
"root": "_506LLG_root",
|
|
5727
|
-
"settingTitle": "_506LLG_settingTitle",
|
|
5728
|
-
"content": "_506LLG_content",
|
|
5729
|
-
"settingRowStack": "_506LLG_settingRowStack",
|
|
5730
5874
|
"settingControl": "_506LLG_settingControl",
|
|
5731
|
-
"settingControlStack": "_506LLG_settingControlStack",
|
|
5732
5875
|
"card": "_506LLG_card",
|
|
5876
|
+
"proxyControl": "_506LLG_proxyControl",
|
|
5877
|
+
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5878
|
+
"controlDropdown": "_506LLG_controlDropdown",
|
|
5879
|
+
"resetBtn": "_506LLG_resetBtn",
|
|
5880
|
+
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
5881
|
+
"navIcon": "_506LLG_navIcon",
|
|
5733
5882
|
"settingDesc": "_506LLG_settingDesc",
|
|
5883
|
+
"content": "_506LLG_content",
|
|
5884
|
+
"sidebar": "_506LLG_sidebar",
|
|
5734
5885
|
"settingLabel": "_506LLG_settingLabel",
|
|
5735
|
-
"
|
|
5886
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
5887
|
+
"settingControlStack": "_506LLG_settingControlStack",
|
|
5888
|
+
"settingRowStack": "_506LLG_settingRowStack"
|
|
5736
5889
|
};
|
|
5737
5890
|
//#endregion
|
|
5738
5891
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -5752,17 +5905,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5752
5905
|
});
|
|
5753
5906
|
var Dropdown_module_css_default = {
|
|
5754
5907
|
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
5908
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
5909
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
5910
|
+
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
5911
|
+
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
5755
5912
|
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
5756
5913
|
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
5757
|
-
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
5758
|
-
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
5759
5914
|
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
5760
|
-
"
|
|
5761
|
-
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
5915
|
+
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
5762
5916
|
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
5763
|
-
"
|
|
5764
|
-
"
|
|
5765
|
-
"dropdownPanel": "B_Gxsq_dropdownPanel"
|
|
5917
|
+
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
5918
|
+
"dropdown": "B_Gxsq_dropdown"
|
|
5766
5919
|
};
|
|
5767
5920
|
//#endregion
|
|
5768
5921
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -5782,8 +5935,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5782
5935
|
});
|
|
5783
5936
|
var Toggle_module_css_default = {
|
|
5784
5937
|
"knob": "k-cD4G_knob",
|
|
5785
|
-
"
|
|
5786
|
-
"
|
|
5938
|
+
"toggleOn": "k-cD4G_toggleOn",
|
|
5939
|
+
"toggle": "k-cD4G_toggle"
|
|
5787
5940
|
};
|
|
5788
5941
|
//#endregion
|
|
5789
5942
|
//#region src/client/components/ui/Toggle.tsx
|
|
@@ -5880,29 +6033,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5880
6033
|
css: css$2
|
|
5881
6034
|
});
|
|
5882
6035
|
var DiagnosticsView_module_css_default = {
|
|
5883
|
-
"
|
|
5884
|
-
"
|
|
6036
|
+
"envLabel": "k9eRya_envLabel",
|
|
6037
|
+
"envRow": "k9eRya_envRow",
|
|
6038
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
6039
|
+
"summaryRunning": "k9eRya_summaryRunning",
|
|
5885
6040
|
"panel": "k9eRya_panel",
|
|
5886
|
-
"
|
|
5887
|
-
"
|
|
6041
|
+
"badge": "k9eRya_badge",
|
|
6042
|
+
"envTitle": "k9eRya_envTitle",
|
|
5888
6043
|
"runBtn": "k9eRya_runBtn",
|
|
5889
|
-
"summaryRunning": "k9eRya_summaryRunning",
|
|
5890
|
-
"summary": "k9eRya_summary",
|
|
5891
|
-
"badgeRunning": "k9eRya_badgeRunning",
|
|
5892
|
-
"envDesc": "k9eRya_envDesc",
|
|
5893
|
-
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
5894
|
-
"head": "k9eRya_head",
|
|
5895
6044
|
"diagPulse": "k9eRya_diagPulse",
|
|
5896
|
-
"
|
|
6045
|
+
"display": "k9eRya_display",
|
|
6046
|
+
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
6047
|
+
"badgeIdle": "k9eRya_badgeIdle",
|
|
5897
6048
|
"summaryOk": "k9eRya_summaryOk",
|
|
5898
|
-
"
|
|
6049
|
+
"summaryFail": "k9eRya_summaryFail",
|
|
6050
|
+
"envDesc": "k9eRya_envDesc",
|
|
6051
|
+
"name": "k9eRya_name",
|
|
6052
|
+
"head": "k9eRya_head",
|
|
5899
6053
|
"badgeOk": "k9eRya_badgeOk",
|
|
5900
|
-
"
|
|
5901
|
-
"
|
|
5902
|
-
"
|
|
5903
|
-
"
|
|
5904
|
-
"
|
|
5905
|
-
"summaryFail": "k9eRya_summaryFail"
|
|
6054
|
+
"summary": "k9eRya_summary",
|
|
6055
|
+
"row": "k9eRya_row",
|
|
6056
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
6057
|
+
"meta": "k9eRya_meta",
|
|
6058
|
+
"headHint": "k9eRya_headHint"
|
|
5906
6059
|
};
|
|
5907
6060
|
//#endregion
|
|
5908
6061
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -6077,57 +6230,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6077
6230
|
css: css$1
|
|
6078
6231
|
});
|
|
6079
6232
|
var LogsView_module_css_default = {
|
|
6080
|
-
"
|
|
6081
|
-
"
|
|
6082
|
-
"
|
|
6083
|
-
"badgeDebug": "_3j77BW_badgeDebug",
|
|
6084
|
-
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
6085
|
-
"clearBtn": "_3j77BW_clearBtn",
|
|
6086
|
-
"searchInput": "_3j77BW_searchInput",
|
|
6087
|
-
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
6088
|
-
"filterChip": "_3j77BW_filterChip",
|
|
6089
|
-
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
6233
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
6234
|
+
"footFail": "_3j77BW_footFail",
|
|
6235
|
+
"catBadge": "_3j77BW_catBadge",
|
|
6090
6236
|
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
6091
|
-
"
|
|
6092
|
-
"
|
|
6093
|
-
"
|
|
6094
|
-
"
|
|
6095
|
-
"
|
|
6096
|
-
"pathText": "_3j77BW_pathText",
|
|
6097
|
-
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6098
|
-
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
6237
|
+
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
6238
|
+
"list": "_3j77BW_list",
|
|
6239
|
+
"filterChipActive": "_3j77BW_filterChipActive",
|
|
6240
|
+
"time": "_3j77BW_time",
|
|
6241
|
+
"actions": "_3j77BW_actions",
|
|
6099
6242
|
"badge": "_3j77BW_badge",
|
|
6100
|
-
"
|
|
6101
|
-
"
|
|
6102
|
-
"
|
|
6103
|
-
"
|
|
6243
|
+
"footActions": "_3j77BW_footActions",
|
|
6244
|
+
"catInstall": "_3j77BW_catInstall",
|
|
6245
|
+
"headHint": "_3j77BW_headHint",
|
|
6246
|
+
"footPath": "_3j77BW_footPath",
|
|
6247
|
+
"clearBtn": "_3j77BW_clearBtn",
|
|
6104
6248
|
"catSystem": "_3j77BW_catSystem",
|
|
6105
|
-
"pathDraft": "_3j77BW_pathDraft",
|
|
6106
|
-
"pathLabel": "_3j77BW_pathLabel",
|
|
6107
|
-
"list": "_3j77BW_list",
|
|
6108
|
-
"btn": "_3j77BW_btn",
|
|
6109
|
-
"entry": "_3j77BW_entry",
|
|
6110
|
-
"badgeWarn": "_3j77BW_badgeWarn",
|
|
6111
|
-
"catSettings": "_3j77BW_catSettings",
|
|
6112
6249
|
"foot": "_3j77BW_foot",
|
|
6250
|
+
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
6251
|
+
"pathText": "_3j77BW_pathText",
|
|
6252
|
+
"badgeWarn": "_3j77BW_badgeWarn",
|
|
6113
6253
|
"logList": "_3j77BW_logList",
|
|
6114
|
-
"
|
|
6115
|
-
"
|
|
6254
|
+
"panel": "_3j77BW_panel",
|
|
6255
|
+
"footCount": "_3j77BW_footCount",
|
|
6256
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
6257
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
6258
|
+
"filterChip": "_3j77BW_filterChip",
|
|
6259
|
+
"previewRow": "_3j77BW_previewRow",
|
|
6116
6260
|
"search": "_3j77BW_search",
|
|
6117
|
-
"
|
|
6261
|
+
"message": "_3j77BW_message",
|
|
6262
|
+
"btn": "_3j77BW_btn",
|
|
6118
6263
|
"head": "_3j77BW_head",
|
|
6119
|
-
"catBadge": "_3j77BW_catBadge",
|
|
6120
|
-
"footFail": "_3j77BW_footFail",
|
|
6121
|
-
"filterChipActive": "_3j77BW_filterChipActive",
|
|
6122
6264
|
"pathDialog": "_3j77BW_pathDialog",
|
|
6123
|
-
"
|
|
6265
|
+
"moreEnd": "_3j77BW_moreEnd",
|
|
6266
|
+
"badgeError": "_3j77BW_badgeError",
|
|
6124
6267
|
"event": "_3j77BW_event",
|
|
6268
|
+
"badgeInfo": "_3j77BW_badgeInfo",
|
|
6269
|
+
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
6270
|
+
"linkBtn": "_3j77BW_linkBtn",
|
|
6125
6271
|
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6272
|
+
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
6273
|
+
"badgeDebug": "_3j77BW_badgeDebug",
|
|
6274
|
+
"searchInput": "_3j77BW_searchInput",
|
|
6275
|
+
"catSettings": "_3j77BW_catSettings",
|
|
6276
|
+
"empty": "_3j77BW_empty",
|
|
6277
|
+
"more": "_3j77BW_more",
|
|
6278
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
6279
|
+
"entry": "_3j77BW_entry",
|
|
6280
|
+
"pathDraft": "_3j77BW_pathDraft",
|
|
6126
6281
|
"headActions": "_3j77BW_headActions",
|
|
6127
|
-
"
|
|
6128
|
-
"
|
|
6129
|
-
"actions": "_3j77BW_actions",
|
|
6130
|
-
"moreEnd": "_3j77BW_moreEnd"
|
|
6282
|
+
"pathRow": "_3j77BW_pathRow",
|
|
6283
|
+
"filterBar": "_3j77BW_filterBar"
|
|
6131
6284
|
};
|
|
6132
6285
|
//#endregion
|
|
6133
6286
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -7401,7 +7554,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7401
7554
|
openSection: settingsSection,
|
|
7402
7555
|
onConsumedOpenSection: () => setSettingsSection(null)
|
|
7403
7556
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
7404
|
-
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.2.
|
|
7557
|
+
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.2.2" },
|
|
7405
7558
|
state: catalog.hubUpdateState,
|
|
7406
7559
|
currentVersion: catalog.hubCurrentVersion,
|
|
7407
7560
|
lang,
|