dsh-plugin 2.0.6 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +11 -11
- package/README.md +11 -11
- package/client/client.js +585 -328
- package/client/client.js.map +1 -1
- package/lib/http/diagnostics.js +2 -63
- package/lib/http/install.js +42 -11
- package/lib/http/settings.js +1 -1
- package/lib/services/host-version.js +72 -0
- package/lib/services/install/decode-output.js +23 -0
- package/lib/services/install/dsh-compat.js +105 -0
- package/lib/services/install/operation-log.js +61 -11
- package/lib/services/install/registry-fallback.js +89 -0
- package/lib/services/install/task-queue.js +95 -19
- package/lib/services/settings.js +1 -0
- package/lib/types/services/host-version.d.ts +10 -0
- package/lib/types/services/install/decode-output.d.ts +4 -0
- package/lib/types/services/install/dsh-compat.d.ts +19 -0
- package/lib/types/services/install/install-types.d.ts +4 -0
- package/lib/types/services/install/operation-log.d.ts +10 -4
- package/lib/types/services/install/registry-fallback.d.ts +18 -0
- package/lib/types/services/install/task-queue.d.ts +18 -0
- package/lib/types/services/settings.d.ts +3 -1
- package/package.json +1 -1
- package/src/client/components/PluginHubSection.tsx +11 -2
- package/src/client/components/modals/NotificationsModal.tsx +62 -5
- package/src/client/components/modals/modals.tsx +68 -5
- package/src/client/components/views/SettingsView.tsx +10 -0
- package/src/client/hooks/useCatalog.ts +10 -8
- package/src/client/hooks/useSettings.ts +4 -1
- package/src/client/hooks/useTaskQueue.ts +7 -1
- package/src/client/locales.ts +42 -0
- package/src/client/logic/failures.ts +86 -5
- package/src/client/logic/release-age.ts +40 -0
- package/src/client/logic/urls.ts +19 -4
- package/src/client/types.ts +13 -0
- package/src/server/http/diagnostics.ts +2 -59
- package/src/server/http/install.ts +46 -11
- package/src/server/http/settings.ts +1 -1
- package/src/server/services/host-version.ts +69 -0
- package/src/server/services/install/decode-output.ts +22 -0
- package/src/server/services/install/dsh-compat.ts +99 -0
- package/src/server/services/install/install-types.ts +4 -0
- package/src/server/services/install/operation-log.ts +58 -11
- package/src/server/services/install/registry-fallback.ts +89 -0
- package/src/server/services/install/task-queue.ts +107 -19
- package/src/server/services/settings.ts +4 -1
package/client/client.js
CHANGED
|
@@ -110,6 +110,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
110
110
|
proxyCheckRevocation: "证书吊销检查受阻(Windows Schannel 取不到 CRL/OCSP),握手被中断;属本机 TLS 环境问题,非代理地址不通",
|
|
111
111
|
settingsMirror: "npm 镜像源",
|
|
112
112
|
settingsMirrorDesc: "默认跟随本机 npm 配置;官方源慢可换国内镜像",
|
|
113
|
+
settingsRegistryFallback: "连不上时自动换源",
|
|
114
|
+
settingsRegistryFallbackDesc: "公共源超时或被拦截时,自动改用下一个镜像重试(最多 3 个);自定义/内网源不会切换,避免私有包名外泄",
|
|
113
115
|
mirrorNone: "未配置(跟随本机 npm 配置)",
|
|
114
116
|
mirrorOfficial: "官方源 registry.npmjs.org",
|
|
115
117
|
mirrorNpmmirror: "阿里云 npmmirror",
|
|
@@ -329,6 +331,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
329
331
|
failReason_buildToolchainMissing: "这个插件依赖需要在本机编译的原生模块,但找不到可用的编译器。",
|
|
330
332
|
failKind_pnpmStore: "pnpm store 版本不匹配",
|
|
331
333
|
failReason_pnpmStore: "profile 里的依赖由另一大版本的 pnpm 生成,当前 pnpm 不认。",
|
|
334
|
+
failKind_pnpmVirtualStore: "profile 的依赖目录与当前 pnpm 配置不一致",
|
|
335
|
+
failReason_pnpmVirtualStore: "node_modules 是用另一套 virtual-store-dir-max-length 配置创建的,pnpm 拒绝复用。",
|
|
336
|
+
failPnpmVirtualStoreHint: "安装器调用 pnpm 时报「modules 目录由另一套 virtual-store-dir-max-length 配置创建」(ERR_PNPM_VIRTUAL_STORE_DIR_MAX_LENGTH_DIFF):profile 里的 node_modules 是在别的 pnpm 配置下生成的(常见于在 .npmrc 里改过 virtual-store-dir-max-length,或换过 pnpm 大版本),当前 pnpm 出于安全拒绝在它上面继续操作——所以这个 profile 里的安装/卸载都会失败。修复(任选其一,在 profile 目录 ~/.dsh/profiles/<profile> 下操作):① 先执行一次 pnpm install,让它按当前配置重建 modules 目录;② 删掉该目录下的 node_modules,下次安装/卸载会自动重建;③ 如果你在 .npmrc 里设过 virtual-store-dir-max-length,把它统一成同一个值(或删掉自定义、回到默认)。这不是插件本身的问题。",
|
|
332
337
|
failKind_pnpmWorkspace: "workspace 根校验阻止了安装",
|
|
333
338
|
failReason_pnpmWorkspace: "profile 被当作 workspace 根,但没有声明根操作,pnpm 中止了安装。",
|
|
334
339
|
failKind_originRejected: "本地服务的来源校验未通过",
|
|
@@ -343,6 +348,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
343
348
|
failReason_pluginMissingDep: "插件声明依赖的包在官方 npm 源上不存在(已删除或从未发布)。",
|
|
344
349
|
failKind_registryVersionStale: "该版本在所用源上不存在",
|
|
345
350
|
failReason_registryVersionStale: "实际安装用的源还没同步到这个版本,或版本号写错。",
|
|
351
|
+
failKind_registryAuth: "npm 源拒绝了访问",
|
|
352
|
+
failReason_registryAuth: "registry 返回 401/403:这个源需要登录凭据,或当前网络不被允许。",
|
|
353
|
+
failKind_profileExclusive: "profile 由桌面应用独占管理",
|
|
354
|
+
failReason_profileExclusive: "命令行 dsh 无权管理桌面应用的 profile,安装前就被宿主拒绝。",
|
|
346
355
|
failKind_pnpmLinkedDirMissing: "profile 里有失效的本地依赖",
|
|
347
356
|
failReason_pnpmLinkedDirMissing: "有一条指向本机不存在目录的 link/file 依赖,pnpm 每次解析都卡住。",
|
|
348
357
|
failKind_fileLocked: "文件被其他程序占用",
|
|
@@ -369,8 +378,20 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
369
378
|
failReason_profileLock: "另一个 dsh 进程正在使用这个 profile。",
|
|
370
379
|
failKind_hub: "出现未知错误",
|
|
371
380
|
failReason_hub: "我们还没能识别这条报错,你可以一键反馈给我们。",
|
|
381
|
+
failKind_localEnv: "本机环境异常",
|
|
382
|
+
failReason_localEnv: "报错特征指向你的本机环境(系统错误码 / 证书代理 / 本地配置),没有发现插件侧原因。",
|
|
383
|
+
failKind_dshTooOld: "DSH 版本低于插件要求",
|
|
384
|
+
failReason_dshTooOld: "插件声明的最低 DSH 版本高于你当前运行的宿主版本。",
|
|
385
|
+
failDshTooOldHint: "插件「{pkg}」声明需要 DSH {floor} 或更高,而你当前运行的是 {current} —— 版本不够时装不上(或装上后无法正常加载),这不是插件本身的问题,也不是插件市场的误判。请先把 DeepSeek Harness 升级到 {floor} 以上,再回到插件中心重试。如果升级后仍然失败,把新的报错发给我们。",
|
|
386
|
+
failLocalEnvHint: "从日志能确认的只有一点:没有插件侧的失败证据;报错特征落在本机环境(系统调用错误码、证书/代理校验、本地配置文件损坏等),但还不足以精确到某一类。这类问题装别的插件同样会失败,不是插件本身的问题。请按顺序自查:① 点下面的「运行系统诊断」看本机检查项;② 确认 profile 目录(~/.dsh/profiles/<profile>)可写、磁盘有空间、杀毒软件没拦截;③ 若在用代理或公司镜像源,先临时切回官方源 https://registry.npmjs.org 重试;④ 完全退出 DeepSeek Harness 后重试。排查后仍然失败、且你确信环境没问题,再用下面的链接反馈给我们,并附上通知中心里复制的完整日志。",
|
|
372
387
|
failRegistryVersionStaleHint: "安装器调用 pnpm 时报「找不到匹配的版本」(ERR_PNPM_NO_MATCHING_VERSION):要装的这个版本在实际执行安装的 npm 源里查不到。常见原因是你设置的 npmRegistry 与本机 ~/.npmrc 用的不是同一个源——官方源刚发布、镜像还没同步上来(快则几分钟、慢则几小时),也可能只是版本号写错了。这不是插件本身的问题。可在插件市场设置里把 npmRegistry 改成与本机 ~/.npmrc 一致(或反过来),或那一次显式走官方源(https://registry.npmjs.org)、改用离线包后重试;若该版本刚发布不久,等镜像同步后重试即可。",
|
|
388
|
+
failRegistryAuthHint: "安装器访问 npm 源时被拒绝(HTTP 401/403):这个源需要登录凭据,或不允许当前网络/IP 访问。如果你在用公司或私有源,请先配好认证(npm login,或在 ~/.npmrc 写入 //{host}/:_authToken=…);如果不需要私有源,把 registry 换回官方源 https://registry.npmjs.org,或在插件市场设置里切换到公共镜像后重试。这不是插件本身的问题。",
|
|
389
|
+
failRegistryAuthHintNoHost: "安装器访问 npm 源时被拒绝(HTTP 401/403):这个源需要登录凭据,或不允许当前网络/IP 访问。如果你在用公司或私有源,请先配好认证(npm login,或在 ~/.npmrc 写入 //<registry>/:_authToken=…);如果不需要私有源,把 registry 换回官方源 https://registry.npmjs.org,或在插件市场设置里切换到公共镜像后重试。这不是插件本身的问题。",
|
|
390
|
+
failProfileExclusiveHint: "profile「{profile}」由桌面应用独占管理,命令行 dsh 无权安装 —— 这不是插件本身的问题。请在 DeepSeek Harness 桌面应用的「设置 → 插件市场」里安装;或改用非桌面独占的 profile(例如 web)后重试。如果你就是在桌面应用内看到这条错误,请到插件市场的「通知」里打开这条失败记录点「复制」,把完整日志发给我们。",
|
|
391
|
+
failProfileExclusiveHintNoProfile: "当前 profile 由桌面应用独占管理,命令行 dsh 无权安装 —— 这不是插件本身的问题。请在 DeepSeek Harness 桌面应用的「设置 → 插件市场」里安装;或改用非桌面独占的 profile(例如 web)后重试。如果你就是在桌面应用内看到这条错误,请到插件市场的「通知」里打开这条失败记录点「复制」,把完整日志发给我们。",
|
|
392
|
+
failDesktopCliFallbackHint: "这次是安装器没找到桌面应用内置的 CLI 引导脚本、退回命令行 dsh 才被拒绝 —— 属于插件中心自身的问题,不是你的环境问题。点下面的按钮把完整日志发给我们,我们会补上路径推导。",
|
|
373
393
|
failPnpmLinkedDirMissingHint: "安装器调用 pnpm 时报「要安装的目录不存在」(ERR_PNPM_LINKED_PKG_DIR_NOT_FOUND):你的 profile 里留着一条指向本机不存在目录的本地依赖(link: / file: 形式,例如用 dsh plugin add <本地路径> 装过开发中的插件,之后那个目录被删除或移动了)。pnpm 每次解析 profile 依赖都会先卡在它上面,因此任何插件都装不进来。这不是插件本身的问题——请在 profile 目录(~/.dsh/profiles/<profile>)的 package.json 里删除该本地依赖条目(同时删掉对应的 pnpm-lock.yaml 条目或整个锁文件),或把该目录恢复回原路径后重试。",
|
|
394
|
+
failLinkedDirTarget: "缺失的本地目录:{path}",
|
|
374
395
|
failFileLockedHint: "安装过程中 pnpm 无法替换 profile 里的文件:有程序正占用着它(Windows 常见报错 os error 32「另一个程序正在使用此文件」)。通常是 DeepSeek Harness 自身或杀毒软件的实时扫描持有文件句柄。这不是插件本身的问题——请完全退出 DeepSeek Harness(Windows 可在任务管理器确认进程已结束,必要时临时关闭杀毒软件实时防护)后重试。",
|
|
375
396
|
failAccessDeniedHint: "安装过程中 pnpm 写入 profile 里的文件被系统拒绝访问(Windows 常见报错 os error 5「拒绝访问」,英文为 Access is denied;Node 下的 EPERM / EACCES 同理)。常见原因是该文件或目录正被其他进程占用、文件带只读属性、目录权限受限,或杀毒软件实时防护拦截了写入——这与「文件正被占用」(os error 32)同属本机文件系统问题,任何插件装进该目录都会一样失败,不是插件本身的问题。请完全退出 DeepSeek Harness(Windows 可在任务管理器确认进程已结束,必要时临时关闭杀毒软件实时防护)后重试;若仍然失败,请检查 profile 目录及其文件是否被设为只读,并以管理员身份重新运行。",
|
|
376
397
|
failFsUnavailableHint: "安装过程中 pnpm 无法把文件写进本机磁盘(这类报错与装哪个插件无关,任何插件装在同一目录都会失败,不是插件本身的问题)。请按报错对号入座:① 磁盘空间不足(ENOSPC / no space left on device,Windows 为 os error 112)——请清理 profile 所在磁盘的剩余空间后重试;② 磁盘或挂载点只读、带写保护(EROFS / read-only file system,Windows 为 os error 19)——请确认 profile 目录所在磁盘可写(外接盘/U 盘、带写保护的移动盘或只读挂载的分区都会触发),必要时把插件目录换到系统盘的可写位置;③ 进程可用的文件句柄被耗尽(EMFILE / ENFILE / too many open files)——请关闭占用大量文件的程序并重启 DeepSeek Harness 后重试。",
|
|
@@ -517,6 +538,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
517
538
|
proxyCheckRevocation: "Certificate revocation check blocked (Windows Schannel could not fetch CRL/OCSP), so the handshake was aborted — a local TLS issue, not a bad proxy address",
|
|
518
539
|
settingsMirror: "npm mirror",
|
|
519
540
|
settingsMirrorDesc: "Unset by default — follows local npm config; pick a domestic mirror if slow",
|
|
541
|
+
settingsRegistryFallback: "Switch mirrors on failure",
|
|
542
|
+
settingsRegistryFallbackDesc: "When a public registry times out or is blocked, retry with the next mirror (up to 3). Custom/intranet registries are never switched, so private package names do not leak.",
|
|
520
543
|
mirrorNone: "Unset (follow local npm config)",
|
|
521
544
|
mirrorOfficial: "Official registry.npmjs.org",
|
|
522
545
|
mirrorNpmmirror: "Alibaba npmmirror",
|
|
@@ -737,6 +760,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
737
760
|
failReason_buildToolchainMissing: "A dependency of this plugin must be compiled locally, but no usable compiler was found.",
|
|
738
761
|
failKind_pnpmStore: "pnpm store version mismatch",
|
|
739
762
|
failReason_pnpmStore: "The profile dependencies were written by a different pnpm major, which the current pnpm does not accept.",
|
|
763
|
+
failKind_pnpmVirtualStore: "profile dependency directory does not match the current pnpm config",
|
|
764
|
+
failReason_pnpmVirtualStore: "node_modules was created with a different virtual-store-dir-max-length, so pnpm refuses to reuse it.",
|
|
765
|
+
failPnpmVirtualStoreHint: "pnpm reported that the modules directory was created with a different virtual-store-dir-max-length value (ERR_PNPM_VIRTUAL_STORE_DIR_MAX_LENGTH_DIFF): node_modules inside the profile was built under a different pnpm config (typically after editing virtual-store-dir-max-length in .npmrc, or switching pnpm majors), 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 virtual-store-dir-max-length in .npmrc, make it the same value everywhere (or drop the override and go back to the default). This is not a problem with the plugin itself.",
|
|
740
766
|
failKind_pnpmWorkspace: "workspace-root check blocked the install",
|
|
741
767
|
failReason_pnpmWorkspace: "The profile is treated as a workspace root without a root operation declared, so pnpm aborted.",
|
|
742
768
|
failKind_originRejected: "request origin rejected by the local service",
|
|
@@ -751,6 +777,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
751
777
|
failReason_pluginMissingDep: "A package the plugin depends on does not exist on the official npm registry.",
|
|
752
778
|
failKind_registryVersionStale: "this version is not available on the registry in use",
|
|
753
779
|
failReason_registryVersionStale: "The registry that actually performs the install has not synced this version yet, or the version is mistyped.",
|
|
780
|
+
failKind_registryAuth: "the npm registry rejected access",
|
|
781
|
+
failReason_registryAuth: "The registry returned 401/403: it needs credentials, or the current network is not allowed.",
|
|
782
|
+
failKind_profileExclusive: "the profile is managed only by the desktop app",
|
|
783
|
+
failReason_profileExclusive: "The dsh CLI may not manage the desktop profile, so the host refused before installing.",
|
|
754
784
|
failKind_pnpmLinkedDirMissing: "dangling local dependency in the profile",
|
|
755
785
|
failReason_pnpmLinkedDirMissing: "A link/file dependency points at a directory that no longer exists, so pnpm stalls on it.",
|
|
756
786
|
failKind_fileLocked: "a file is held by another program",
|
|
@@ -777,8 +807,20 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
777
807
|
failReason_profileLock: "Another dsh process is using this profile right now.",
|
|
778
808
|
failKind_hub: "unknown error",
|
|
779
809
|
failReason_hub: "We could not identify this error yet — you can report it to us in one click.",
|
|
810
|
+
failKind_localEnv: "local environment failure",
|
|
811
|
+
failReason_localEnv: "The error points at your local environment (system error codes, certificates/proxy, or local config), and no plugin-side cause was found.",
|
|
812
|
+
failKind_dshTooOld: "DSH is older than the plugin requires",
|
|
813
|
+
failReason_dshTooOld: "The plugin declares a minimum DSH version that is newer than the host you are running.",
|
|
814
|
+
failDshTooOldHint: "The plugin \"{pkg}\" requires DSH {floor} or newer, but this host runs {current} — the install cannot succeed on an older host (or the plugin will not load properly). This is not a problem with the plugin itself, and not a mistake by the marketplace. Upgrade DeepSeek Harness to {floor} or newer, then retry from the Plugin Hub. If it still fails after upgrading, send us the new error.",
|
|
815
|
+
failLocalEnvHint: "The log only tells us one thing for sure: there is no evidence of a plugin-side failure — the signals point at your local environment (system call error codes, certificate/proxy validation, a broken local config file), but not precisely enough to name one. Any plugin would fail the same way on this machine, so it is not a problem with the plugin itself. Check in order: ① press \"Run diagnostics\" below; ② make sure the profile directory (~/.dsh/profiles/<profile>) is writable, the disk has free space, and antivirus is not blocking it; ③ if you use a proxy or a company mirror, switch back to the official registry (https://registry.npmjs.org) for one retry; ④ fully quit DeepSeek Harness and retry. If it still fails and you are sure your environment is fine, use the link below to report it with the full log copied from the Hub notifications.",
|
|
780
816
|
failRegistryVersionStaleHint: "pnpm reported that no matching version was found (ERR_PNPM_NO_MATCHING_VERSION): the version being installed does not exist in the npm registry that actually performs the install. This usually means the npmRegistry configured in the hub differs from the source in your local ~/.npmrc — the official registry has published it but the mirror has not synced yet (it can take minutes to hours) — or the version number was simply mistyped. This is not a problem with the plugin itself. Align the hub's npmRegistry with your local ~/.npmrc (or the other way round), or explicitly use the official registry (https://registry.npmjs.org) for that one install, or use an offline package, then retry; if the version was published only recently, waiting for the mirror to sync is enough.",
|
|
817
|
+
failRegistryAuthHint: "The installer was denied access to the npm registry (HTTP 401/403): that registry requires credentials, or it does not allow the current network/IP. If you are using a company or private registry, configure authentication first (npm login, or write //{host}/:_authToken=… into ~/.npmrc). If you do not need a private registry, point the registry back to the official one (https://registry.npmjs.org), or switch to a public mirror in the hub settings, then retry. This is not a problem with the plugin itself.",
|
|
818
|
+
failRegistryAuthHintNoHost: "The installer was denied access to the npm registry (HTTP 401/403): that registry requires credentials, or it does not allow the current network/IP. If you are using a company or private registry, configure authentication first (npm login, or write //<registry>/:_authToken=… into ~/.npmrc). If you do not need a private registry, point the registry back to the official one (https://registry.npmjs.org), or switch to a public mirror in the hub settings, then retry. This is not a problem with the plugin itself.",
|
|
819
|
+
failProfileExclusiveHint: "Profile \"{profile}\" is managed exclusively by the desktop app, and the command-line dsh is not allowed to install into it — this is not a problem with the plugin itself. Install from \"Settings → Plugin Hub\" inside DeepSeek Harness Desktop, or retry with a profile that is not desktop-managed (for example web). If you hit this inside the desktop app, open the Hub notifications, select the failed record and press \"Copy\" so you can send us the full log.",
|
|
820
|
+
failProfileExclusiveHintNoProfile: "The current profile is managed exclusively by the desktop app, and the command-line dsh is not allowed to install into it — this is not a problem with the plugin itself. Install from \"Settings → Plugin Hub\" inside DeepSeek Harness Desktop, or retry with a profile that is not desktop-managed (for example web). If you hit this inside the desktop app, open the Hub notifications, select the failed record and press \"Copy\" so you can send us the full log.",
|
|
821
|
+
failDesktopCliFallbackHint: "This failed because the installer could not find the desktop app's bundled CLI bootstrap and fell back to the command-line dsh, which is then refused — that is a bug in the plugin hub, not your environment. Use the button below to send us the full log and we will fix the path detection.",
|
|
781
822
|
failPnpmLinkedDirMissingHint: "pnpm reported that a directory it needs to install from does not exist (ERR_PNPM_LINKED_PKG_DIR_NOT_FOUND): your profile keeps a local dependency (a link: / file: entry, e.g. from `dsh plugin add <local path>`) whose target directory has since been deleted or moved. pnpm hits it every time it resolves profile dependencies, so no plugin can be installed into that profile. This is not a problem with the plugin itself. Remove that local dependency from package.json inside the profile directory (~/.dsh/profiles/<profile>) — along with its entry in pnpm-lock.yaml, or the lockfile itself — or restore the directory to its original path, then retry.",
|
|
823
|
+
failLinkedDirTarget: "Missing local directory: {path}",
|
|
782
824
|
failFileLockedHint: "During install, pnpm could not replace a file inside the profile because another program is holding it (on Windows this shows as os error 32, \"the process cannot access the file because it is being used by another process\"). Usually DeepSeek Harness itself or a real-time antivirus scan holds the handle. This is not a problem with the plugin itself — fully quit DeepSeek Harness (on Windows, confirm in Task Manager that the process has ended, and temporarily disable real-time antivirus protection if needed), then retry.",
|
|
783
825
|
failAccessDeniedHint: "During install, Windows denied pnpm access to a file inside the profile (this shows as os error 5, \"Access is denied\"; on Node the equivalent codes are EPERM / EACCES). Typical causes: the file or directory is held by another process, the file is marked read-only, the directory permissions are restricted, or a real-time antivirus scan blocked the write. This is the same class of local file-system problem as a locked file (os error 32) — no plugin can be installed into that directory, so it is not a problem with the plugin itself. Fully quit DeepSeek Harness (on Windows, confirm in Task Manager that the process has ended, and temporarily disable real-time antivirus protection if needed), then retry. If it still fails, check whether the profile directory or its files are read-only and run as administrator.",
|
|
784
826
|
failFsUnavailableHint: "During install, pnpm could not write files to the local disk — this has nothing to do with which plugin you are installing: any plugin installed into the same directory would fail the same way, so it is not a problem with the plugin itself. Match the error you see: ① Out of space (ENOSPC / no space left on device, os error 112 on Windows) — free up space on the drive that holds the profile and retry. ② Read-only or write-protected volume (EROFS / read-only file system, os error 19 on Windows) — make sure the drive holding the profile directory is writable (external or USB drives, write-protected media, and read-only mounts all trigger this); move the plugin directory to a writable location on the system drive if needed. ③ File handles exhausted (EMFILE / ENFILE / too many open files) — close programs that hold many files open, restart DeepSeek Harness, then retry.",
|
|
@@ -843,41 +885,41 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
843
885
|
});
|
|
844
886
|
var Header_module_css_default = {
|
|
845
887
|
"aboutBtn": "qikqja_aboutBtn",
|
|
846
|
-
"version": "qikqja_version",
|
|
847
|
-
"resultCount": "qikqja_resultCount",
|
|
848
888
|
"taglineLink": "qikqja_taglineLink",
|
|
849
|
-
"
|
|
850
|
-
"
|
|
851
|
-
"
|
|
889
|
+
"root": "qikqja_root",
|
|
890
|
+
"brandTitle": "qikqja_brandTitle",
|
|
891
|
+
"tagline": "qikqja_tagline",
|
|
852
892
|
"hubUpdateBadge": "qikqja_hubUpdateBadge",
|
|
853
|
-
"
|
|
893
|
+
"header": "qikqja_header",
|
|
894
|
+
"controls": "qikqja_controls",
|
|
895
|
+
"copyIcon": "qikqja_copyIcon",
|
|
896
|
+
"segBtnActive": "qikqja_segBtnActive",
|
|
897
|
+
"headerTitleRow": "qikqja_headerTitleRow",
|
|
898
|
+
"langBtn": "qikqja_langBtn",
|
|
854
899
|
"segLabel": "qikqja_segLabel",
|
|
855
|
-
"
|
|
856
|
-
"
|
|
857
|
-
"
|
|
858
|
-
"tabCount": "qikqja_tabCount",
|
|
859
|
-
"root": "qikqja_root",
|
|
900
|
+
"tab": "qikqja_tab",
|
|
901
|
+
"resultCount": "qikqja_resultCount",
|
|
902
|
+
"title": "qikqja_title",
|
|
860
903
|
"githubIcon": "qikqja_githubIcon",
|
|
861
|
-
"
|
|
862
|
-
"
|
|
904
|
+
"sortGroup": "qikqja_sortGroup",
|
|
905
|
+
"version": "qikqja_version",
|
|
906
|
+
"tabsRow": "qikqja_tabsRow",
|
|
863
907
|
"tabs": "qikqja_tabs",
|
|
864
|
-
"
|
|
865
|
-
"
|
|
866
|
-
"adArrow": "qikqja_adArrow",
|
|
867
|
-
"brandTitle": "qikqja_brandTitle",
|
|
868
|
-
"searchRow": "qikqja_searchRow",
|
|
869
|
-
"header": "qikqja_header",
|
|
908
|
+
"logoIcon": "qikqja_logoIcon",
|
|
909
|
+
"tabCount": "qikqja_tabCount",
|
|
870
910
|
"githubLink": "qikqja_githubLink",
|
|
911
|
+
"segGroup": "qikqja_segGroup",
|
|
912
|
+
"resultSeg": "qikqja_resultSeg",
|
|
913
|
+
"tabActive": "qikqja_tabActive",
|
|
871
914
|
"segBtn": "qikqja_segBtn",
|
|
872
|
-
"
|
|
915
|
+
"adArrow": "qikqja_adArrow",
|
|
916
|
+
"headerRight": "qikqja_headerRight",
|
|
873
917
|
"versionBtn": "qikqja_versionBtn",
|
|
874
|
-
"
|
|
875
|
-
"
|
|
876
|
-
"
|
|
877
|
-
"
|
|
878
|
-
"
|
|
879
|
-
"tabActive": "qikqja_tabActive",
|
|
880
|
-
"logoIcon": "qikqja_logoIcon"
|
|
918
|
+
"adText": "qikqja_adText",
|
|
919
|
+
"searchRow": "qikqja_searchRow",
|
|
920
|
+
"adBanner": "qikqja_adBanner",
|
|
921
|
+
"adBadge": "qikqja_adBadge",
|
|
922
|
+
"search": "qikqja_search"
|
|
881
923
|
};
|
|
882
924
|
//#endregion
|
|
883
925
|
//#region \0dsh-css:src/client/styles/Modal.module.css.mjs
|
|
@@ -896,142 +938,142 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
896
938
|
css: css$10
|
|
897
939
|
});
|
|
898
940
|
var Modal_module_css_default = {
|
|
899
|
-
"queueSection": "BiQ1zG_queueSection",
|
|
900
|
-
"resultCheck": "BiQ1zG_resultCheck",
|
|
901
|
-
"noticeRemove": "BiQ1zG_noticeRemove",
|
|
902
|
-
"helpModal": "BiQ1zG_helpModal",
|
|
903
|
-
"failList": "BiQ1zG_failList",
|
|
904
|
-
"detailStars": "BiQ1zG_detailStars",
|
|
905
|
-
"detailPath": "BiQ1zG_detailPath",
|
|
906
|
-
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
907
|
-
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
908
|
-
"resultTitle": "BiQ1zG_resultTitle",
|
|
909
|
-
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
910
|
-
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
911
|
-
"detailDim": "BiQ1zG_detailDim",
|
|
912
|
-
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
913
|
-
"stripCancel": "BiQ1zG_stripCancel",
|
|
914
941
|
"noticeRowOk": "BiQ1zG_noticeRowOk",
|
|
915
|
-
"
|
|
916
|
-
"hubUpdateMetaItem": "BiQ1zG_hubUpdateMetaItem",
|
|
917
|
-
"noticeTextFail": "BiQ1zG_noticeTextFail",
|
|
918
|
-
"noticeRow": "BiQ1zG_noticeRow",
|
|
919
|
-
"restartLater": "BiQ1zG_restartLater",
|
|
920
|
-
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
921
|
-
"modalCmd": "BiQ1zG_modalCmd",
|
|
922
|
-
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
923
|
-
"detailRow": "BiQ1zG_detailRow",
|
|
924
|
-
"detailMono": "BiQ1zG_detailMono",
|
|
925
|
-
"overlayIn": "BiQ1zG_overlayIn",
|
|
926
|
-
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
927
|
-
"modalValue": "BiQ1zG_modalValue",
|
|
928
|
-
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
929
|
-
"restartNow": "BiQ1zG_restartNow",
|
|
930
|
-
"failRepo": "BiQ1zG_failRepo",
|
|
942
|
+
"detailGrid": "BiQ1zG_detailGrid",
|
|
931
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",
|
|
932
950
|
"toast": "BiQ1zG_toast",
|
|
933
|
-
"
|
|
951
|
+
"cliOnlyHint": "BiQ1zG_cliOnlyHint",
|
|
934
952
|
"noticeRowUpdate": "BiQ1zG_noticeRowUpdate",
|
|
935
|
-
"
|
|
953
|
+
"toastIn": "BiQ1zG_toastIn",
|
|
954
|
+
"queuedHint": "BiQ1zG_queuedHint",
|
|
955
|
+
"modalBody": "BiQ1zG_modalBody",
|
|
956
|
+
"aboutContent": "BiQ1zG_aboutContent",
|
|
957
|
+
"failEmpty": "BiQ1zG_failEmpty",
|
|
958
|
+
"progressHead": "BiQ1zG_progressHead",
|
|
936
959
|
"modalTitle": "BiQ1zG_modalTitle",
|
|
937
|
-
"
|
|
938
|
-
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
939
|
-
"noticeMain": "BiQ1zG_noticeMain",
|
|
940
|
-
"noticeHead": "BiQ1zG_noticeHead",
|
|
941
|
-
"linkIcon": "BiQ1zG_linkIcon",
|
|
942
|
-
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
960
|
+
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
943
961
|
"detailStatusPending": "BiQ1zG_detailStatusPending",
|
|
944
|
-
"
|
|
945
|
-
"
|
|
946
|
-
"
|
|
947
|
-
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
948
|
-
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
949
|
-
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
950
|
-
"queueRowPct": "BiQ1zG_queueRowPct",
|
|
951
|
-
"modalInstall": "BiQ1zG_modalInstall",
|
|
952
|
-
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
953
|
-
"noticeIgnore": "BiQ1zG_noticeIgnore",
|
|
954
|
-
"aboutContent": "BiQ1zG_aboutContent",
|
|
955
|
-
"detailArrow": "BiQ1zG_detailArrow",
|
|
962
|
+
"linkIcon": "BiQ1zG_linkIcon",
|
|
963
|
+
"queueRowDesc": "BiQ1zG_queueRowDesc",
|
|
964
|
+
"helpModal": "BiQ1zG_helpModal",
|
|
956
965
|
"noticeTime": "BiQ1zG_noticeTime",
|
|
957
|
-
"modalHead": "BiQ1zG_modalHead",
|
|
958
|
-
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
959
|
-
"errorModal": "BiQ1zG_errorModal",
|
|
960
|
-
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
961
|
-
"errorBox": "BiQ1zG_errorBox",
|
|
962
|
-
"failHead": "BiQ1zG_failHead",
|
|
963
|
-
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
964
|
-
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
965
|
-
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
966
|
-
"progressTrack": "BiQ1zG_progressTrack",
|
|
967
|
-
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
968
|
-
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
969
|
-
"noticeVersion": "BiQ1zG_noticeVersion",
|
|
970
|
-
"failKind": "BiQ1zG_failKind",
|
|
971
|
-
"resultDesc": "BiQ1zG_resultDesc",
|
|
972
|
-
"noticeList": "BiQ1zG_noticeList",
|
|
973
|
-
"failClear": "BiQ1zG_failClear",
|
|
974
966
|
"aboutModal": "BiQ1zG_aboutModal",
|
|
975
|
-
"detailStatusRunning": "BiQ1zG_detailStatusRunning",
|
|
976
|
-
"failedCopyHint": "BiQ1zG_failedCopyHint",
|
|
977
|
-
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
978
967
|
"uninstallConfirm": "BiQ1zG_uninstallConfirm",
|
|
968
|
+
"progressTrack": "BiQ1zG_progressTrack",
|
|
969
|
+
"noticeRow": "BiQ1zG_noticeRow",
|
|
979
970
|
"resultCheckIcon": "BiQ1zG_resultCheckIcon",
|
|
980
|
-
"
|
|
981
|
-
"
|
|
982
|
-
"
|
|
983
|
-
"
|
|
984
|
-
"
|
|
985
|
-
"
|
|
986
|
-
"
|
|
987
|
-
"
|
|
971
|
+
"noticeTextOk": "BiQ1zG_noticeTextOk",
|
|
972
|
+
"detailDim": "BiQ1zG_detailDim",
|
|
973
|
+
"restartLater": "BiQ1zG_restartLater",
|
|
974
|
+
"confirmIcon": "BiQ1zG_confirmIcon",
|
|
975
|
+
"modalCmdCopy": "BiQ1zG_modalCmdCopy",
|
|
976
|
+
"progress": "BiQ1zG_progress",
|
|
977
|
+
"progressText": "BiQ1zG_progressText",
|
|
978
|
+
"failKind": "BiQ1zG_failKind",
|
|
979
|
+
"noticeMain": "BiQ1zG_noticeMain",
|
|
988
980
|
"dangerConfirm": "BiQ1zG_dangerConfirm",
|
|
989
|
-
"
|
|
981
|
+
"failMisjudgeLink": "BiQ1zG_failMisjudgeLink",
|
|
982
|
+
"detailStars": "BiQ1zG_detailStars",
|
|
983
|
+
"modalIn": "BiQ1zG_modalIn",
|
|
984
|
+
"failRepoUrl": "BiQ1zG_failRepoUrl",
|
|
985
|
+
"modalCmd": "BiQ1zG_modalCmd",
|
|
986
|
+
"detailArrow": "BiQ1zG_detailArrow",
|
|
990
987
|
"modalTitleQueued": "BiQ1zG_modalTitleQueued",
|
|
991
|
-
"
|
|
992
|
-
"
|
|
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",
|
|
997
|
+
"modalValue": "BiQ1zG_modalValue",
|
|
998
|
+
"hubUpdateNotes": "BiQ1zG_hubUpdateNotes",
|
|
999
|
+
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1000
|
+
"modalClose": "BiQ1zG_modalClose",
|
|
1001
|
+
"queueRowStatus": "BiQ1zG_queueRowStatus",
|
|
993
1002
|
"resultRestarting": "BiQ1zG_resultRestarting",
|
|
994
|
-
"
|
|
995
|
-
"
|
|
996
|
-
"
|
|
997
|
-
"
|
|
998
|
-
"
|
|
1003
|
+
"failKindInstall": "BiQ1zG_failKindInstall",
|
|
1004
|
+
"hubUpdateModal": "BiQ1zG_hubUpdateModal",
|
|
1005
|
+
"detailUpdateHint": "BiQ1zG_detailUpdateHint",
|
|
1006
|
+
"detailRow": "BiQ1zG_detailRow",
|
|
1007
|
+
"queueRowBody": "BiQ1zG_queueRowBody",
|
|
1008
|
+
"detailLabel": "BiQ1zG_detailLabel",
|
|
1009
|
+
"confirmIconWrap": "BiQ1zG_confirmIconWrap",
|
|
1010
|
+
"detailLink": "BiQ1zG_detailLink",
|
|
1011
|
+
"noticeBadgeFail": "BiQ1zG_noticeBadgeFail",
|
|
1012
|
+
"failClear": "BiQ1zG_failClear",
|
|
1013
|
+
"modalHead": "BiQ1zG_modalHead",
|
|
1014
|
+
"detailPath": "BiQ1zG_detailPath",
|
|
1015
|
+
"toastFail": "BiQ1zG_toastFail",
|
|
1016
|
+
"hubUpdateMeta": "BiQ1zG_hubUpdateMeta",
|
|
1017
|
+
"progressFillFail": "BiQ1zG_progressFillFail",
|
|
1018
|
+
"queueSection": "BiQ1zG_queueSection",
|
|
1019
|
+
"result": "BiQ1zG_result",
|
|
1020
|
+
"queueRowHead": "BiQ1zG_queueRowHead",
|
|
1021
|
+
"modalCmdText": "BiQ1zG_modalCmdText",
|
|
1022
|
+
"restartNow": "BiQ1zG_restartNow",
|
|
1023
|
+
"failKindUninstall": "BiQ1zG_failKindUninstall",
|
|
1024
|
+
"errorModal": "BiQ1zG_errorModal",
|
|
999
1025
|
"noticeBadgeOk": "BiQ1zG_noticeBadgeOk",
|
|
1000
|
-
"
|
|
1001
|
-
"
|
|
1026
|
+
"noticeBadgeIcon": "BiQ1zG_noticeBadgeIcon",
|
|
1027
|
+
"queueRowTarget": "BiQ1zG_queueRowTarget",
|
|
1002
1028
|
"progressFill": "BiQ1zG_progressFill",
|
|
1003
|
-
"bundleDeselectedHint": "BiQ1zG_bundleDeselectedHint",
|
|
1004
|
-
"toastIn": "BiQ1zG_toastIn",
|
|
1005
|
-
"modalIn": "BiQ1zG_modalIn",
|
|
1006
1029
|
"modalCloseIcon": "BiQ1zG_modalCloseIcon",
|
|
1030
|
+
"pendingRowStatus": "BiQ1zG_pendingRowStatus",
|
|
1007
1031
|
"errorCopySoft": "BiQ1zG_errorCopySoft",
|
|
1008
|
-
"
|
|
1009
|
-
"
|
|
1010
|
-
"
|
|
1011
|
-
"
|
|
1012
|
-
"modalCopy": "BiQ1zG_modalCopy",
|
|
1013
|
-
"modalCancel": "BiQ1zG_modalCancel",
|
|
1014
|
-
"detailGrid": "BiQ1zG_detailGrid",
|
|
1015
|
-
"queueRow": "BiQ1zG_queueRow",
|
|
1016
|
-
"logModal": "BiQ1zG_logModal",
|
|
1017
|
-
"result": "BiQ1zG_result",
|
|
1018
|
-
"detailPathBtn": "BiQ1zG_detailPathBtn",
|
|
1032
|
+
"detailPathActions": "BiQ1zG_detailPathActions",
|
|
1033
|
+
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
1034
|
+
"noticeRowMain": "BiQ1zG_noticeRowMain",
|
|
1035
|
+
"pendingRowActions": "BiQ1zG_pendingRowActions",
|
|
1019
1036
|
"aboutMeta": "BiQ1zG_aboutMeta",
|
|
1020
|
-
"
|
|
1021
|
-
"
|
|
1022
|
-
"
|
|
1023
|
-
"
|
|
1024
|
-
"
|
|
1025
|
-
"
|
|
1037
|
+
"modalCopy": "BiQ1zG_modalCopy",
|
|
1038
|
+
"noticeList": "BiQ1zG_noticeList",
|
|
1039
|
+
"resultCheck": "BiQ1zG_resultCheck",
|
|
1040
|
+
"modalDesc": "BiQ1zG_modalDesc",
|
|
1041
|
+
"noticeUpdateGo": "BiQ1zG_noticeUpdateGo",
|
|
1042
|
+
"modalLabel": "BiQ1zG_modalLabel",
|
|
1043
|
+
"failKindTitle": "BiQ1zG_failKindTitle",
|
|
1026
1044
|
"modal": "BiQ1zG_modal",
|
|
1027
|
-
"
|
|
1028
|
-
"restartNowWarning": "BiQ1zG_restartNowWarning",
|
|
1029
|
-
"failNetworkTarget": "BiQ1zG_failNetworkTarget",
|
|
1045
|
+
"detailStatusText": "BiQ1zG_detailStatusText",
|
|
1030
1046
|
"modalActions": "BiQ1zG_modalActions",
|
|
1031
|
-
"
|
|
1047
|
+
"errorTitle": "BiQ1zG_errorTitle",
|
|
1048
|
+
"confirmPrimary": "BiQ1zG_confirmPrimary",
|
|
1049
|
+
"modalRow": "BiQ1zG_modalRow",
|
|
1050
|
+
"failHead": "BiQ1zG_failHead",
|
|
1051
|
+
"overlay": "BiQ1zG_overlay",
|
|
1032
1052
|
"trustHint": "BiQ1zG_trustHint",
|
|
1033
|
-
"
|
|
1034
|
-
"
|
|
1053
|
+
"errorBox": "BiQ1zG_errorBox",
|
|
1054
|
+
"resultTitle": "BiQ1zG_resultTitle",
|
|
1055
|
+
"logModal": "BiQ1zG_logModal",
|
|
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",
|
|
1063
|
+
"noticeHead": "BiQ1zG_noticeHead",
|
|
1064
|
+
"errorHint": "BiQ1zG_errorHint",
|
|
1065
|
+
"noticeFoot": "BiQ1zG_noticeFoot",
|
|
1066
|
+
"failCopy": "BiQ1zG_failCopy",
|
|
1067
|
+
"detailValue": "BiQ1zG_detailValue",
|
|
1068
|
+
"modalWide": "BiQ1zG_modalWide",
|
|
1069
|
+
"modalLink": "BiQ1zG_modalLink",
|
|
1070
|
+
"stripCancel": "BiQ1zG_stripCancel",
|
|
1071
|
+
"failRepoLabel": "BiQ1zG_failRepoLabel",
|
|
1072
|
+
"queueRowTrack": "BiQ1zG_queueRowTrack",
|
|
1073
|
+
"modalCancel": "BiQ1zG_modalCancel",
|
|
1074
|
+
"failBigIssue": "BiQ1zG_failBigIssue",
|
|
1075
|
+
"confirmIconDanger": "BiQ1zG_confirmIconDanger",
|
|
1076
|
+
"failList": "BiQ1zG_failList"
|
|
1035
1077
|
};
|
|
1036
1078
|
//#endregion
|
|
1037
1079
|
//#region src/server/services/install/release-target.ts
|
|
@@ -1121,7 +1163,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1121
1163
|
* tsdown 构建时用 define 把 __PLUGIN_VERSION__ 替换成 package.json 的版本号;
|
|
1122
1164
|
* node --test 直接 import 本模块时该标识符不存在,typeof 守卫兜底为空串。
|
|
1123
1165
|
*/
|
|
1124
|
-
const PLUGIN_VERSION = "2.0
|
|
1166
|
+
const PLUGIN_VERSION = "2.2.0";
|
|
1125
1167
|
const CATEGORY_ORDER = [
|
|
1126
1168
|
"interface",
|
|
1127
1169
|
"session",
|
|
@@ -1451,14 +1493,6 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1451
1493
|
}
|
|
1452
1494
|
//#endregion
|
|
1453
1495
|
//#region src/client/logic/release-age.ts
|
|
1454
|
-
/**
|
|
1455
|
-
* DSH Plugin Hub — the community plugin marketplace for DeepSeek Harness.
|
|
1456
|
-
* Website: https://dsh-plugin.org
|
|
1457
|
-
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
1458
|
-
*
|
|
1459
|
-
* 供应链门禁的时间判定(纯函数):pnpm 会静默回退发布未满门槛的版本,
|
|
1460
|
-
* 故发布太新的版本不该提示更新。Hub 自身更新与插件更新共用同一门槛。
|
|
1461
|
-
*/
|
|
1462
1496
|
/** pnpm 供应链门禁:dsh profile 默认 minimumReleaseAge=1440(分钟);+30 分钟缓冲抵消网络/CDN 边缘时间偏差。 */
|
|
1463
1497
|
const MIN_RELEASE_AGE_MS = 882e5;
|
|
1464
1498
|
/** 发布时间是否仍在门禁窗口内(太新 → 暂缓提示);无值/解析不出返回 false(不拦真实更新)。 */
|
|
@@ -1468,6 +1502,55 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1468
1502
|
if (Number.isNaN(ms)) return false;
|
|
1469
1503
|
return now - ms < MIN_RELEASE_AGE_MS;
|
|
1470
1504
|
}
|
|
1505
|
+
/** 版本号比较(逐段数字;缺失段按 0)。返回负数/0/正数,非法输入按相等处理。 */
|
|
1506
|
+
function compareVersions(a, b) {
|
|
1507
|
+
const parse = (v) => v.split(/[.+-]/).map((part) => Number.parseInt(part, 10)).filter((n) => !Number.isNaN(n));
|
|
1508
|
+
const va = parse(a);
|
|
1509
|
+
const vb = parse(b);
|
|
1510
|
+
const len = Math.max(va.length, vb.length);
|
|
1511
|
+
for (let i = 0; i < len; i++) {
|
|
1512
|
+
const d = (va[i] ?? 0) - (vb[i] ?? 0);
|
|
1513
|
+
if (d !== 0) return d;
|
|
1514
|
+
}
|
|
1515
|
+
return 0;
|
|
1516
|
+
}
|
|
1517
|
+
/**
|
|
1518
|
+
* 选出本次真正该提示的更新版本。
|
|
1519
|
+
*
|
|
1520
|
+
* 只看最新版会漏更新:连续发版时间隔小于供应链门禁时,最新版永远「太新」,
|
|
1521
|
+
* 提示被整体跳过。这里把最新版与 recentVersions 一起当候选,取「高于当前版本且已过门禁」
|
|
1522
|
+
* 的最高版本;一个都没有但仍存在更高版本 → pending(暂缓,不谎称已是最新)。
|
|
1523
|
+
*/
|
|
1524
|
+
function pickHubUpdate(info, currentVersion, now) {
|
|
1525
|
+
if (currentVersion === "") return {
|
|
1526
|
+
state: "latest",
|
|
1527
|
+
target: null
|
|
1528
|
+
};
|
|
1529
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1530
|
+
const candidates = [];
|
|
1531
|
+
for (const entry of [{
|
|
1532
|
+
version: info.version,
|
|
1533
|
+
publishedAt: info.publishedAt,
|
|
1534
|
+
notes: info.notes
|
|
1535
|
+
}, ...info.recentVersions ?? []]) {
|
|
1536
|
+
if (typeof entry.version !== "string" || entry.version === "" || seen.has(entry.version)) continue;
|
|
1537
|
+
seen.add(entry.version);
|
|
1538
|
+
candidates.push(entry);
|
|
1539
|
+
}
|
|
1540
|
+
const higher = candidates.filter((c) => compareVersions(c.version, currentVersion) > 0).sort((a, b) => compareVersions(b.version, a.version));
|
|
1541
|
+
if (higher.length === 0) return {
|
|
1542
|
+
state: "latest",
|
|
1543
|
+
target: null
|
|
1544
|
+
};
|
|
1545
|
+
const ready = higher.find((c) => !isReleaseTooFresh(c.publishedAt, now));
|
|
1546
|
+
return ready !== void 0 ? {
|
|
1547
|
+
state: "available",
|
|
1548
|
+
target: ready
|
|
1549
|
+
} : {
|
|
1550
|
+
state: "pending",
|
|
1551
|
+
target: higher[0]
|
|
1552
|
+
};
|
|
1553
|
+
}
|
|
1471
1554
|
//#endregion
|
|
1472
1555
|
//#region src/client/logic/installed.ts
|
|
1473
1556
|
/** 本地路径安装(file:/link:/绝对或相对路径):身份在本机,不能按 npm 包名认领目录条目。 */
|
|
@@ -1881,13 +1964,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1881
1964
|
* registry 真实发布时间下发(同源),据此判断最准。门槛命中要单列成 `pending` 而不是
|
|
1882
1965
|
* 落回「无更新」——回落会让弹窗在本机版本落后时谎称「已是最新」。
|
|
1883
1966
|
*/
|
|
1884
|
-
const hubCurrentVersion = "2.0
|
|
1885
|
-
const
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1967
|
+
const hubCurrentVersion = "2.2.0";
|
|
1968
|
+
const hubUpdateResult = hubUpdateInfo === null ? {
|
|
1969
|
+
state: "none",
|
|
1970
|
+
target: null
|
|
1971
|
+
} : pickHubUpdate(hubUpdateInfo, hubCurrentVersion, Date.now());
|
|
1972
|
+
const hubUpdateState = hubUpdateResult.state;
|
|
1973
|
+
/** 本次提示的目标版本(available 时有值;pending 时是暂缓中的最高版本) */
|
|
1974
|
+
const hubUpdateTarget = hubUpdateResult.target;
|
|
1891
1975
|
const hubHasUpdate = hubUpdateState === "available";
|
|
1892
1976
|
(0, react.useMemo)(() => {
|
|
1893
1977
|
if (!plugins) return [];
|
|
@@ -1945,6 +2029,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
1945
2029
|
hasUpdate,
|
|
1946
2030
|
hubHasUpdate,
|
|
1947
2031
|
hubUpdateState,
|
|
2032
|
+
hubUpdateTarget,
|
|
1948
2033
|
releaseAgeReady,
|
|
1949
2034
|
hubCurrentVersion,
|
|
1950
2035
|
hubUpdateInfo,
|
|
@@ -2127,11 +2212,13 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2127
2212
|
*/
|
|
2128
2213
|
function classifyFailure(message) {
|
|
2129
2214
|
if (/installation rejected:.*incompatible with dsh/i.test(message)) return "hostIncompatible";
|
|
2215
|
+
if (/is managed exclusively by the Electron application|managed exclusively by the desktop app/i.test(message)) return "profileExclusive";
|
|
2130
2216
|
if (/\[npm-too-low\]|edgesOut/i.test(message)) return "npmTooOld";
|
|
2131
2217
|
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";
|
|
2132
2218
|
if (/\[git-missing\]|spawn git ENOENT|'git' 不是内部或外部命令|"git" 不是内部或外部命令|git['"]?\s*is not recognized|git: command not found/i.test(message)) return "gitMissing";
|
|
2133
2219
|
if (/\[npm-missing\]|spawn npm ENOENT|'npm' 不是内部或外部命令|"npm" 不是内部或外部命令|npm['"]?\s*is not recognized|npm: command not found/i.test(message)) return "npmMissing";
|
|
2134
2220
|
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 (/ERR_PNPM_VIRTUAL_STORE_DIR_MAX_LENGTH_DIFF|virtual-store-dir-max-length/i.test(message)) return "pnpmVirtualStore";
|
|
2135
2222
|
if (/ERR_PNPM_UNEXPECTED_(VIRTUAL_)?STORE|Unexpected (virtual )?store location/i.test(message)) return "pnpmStore";
|
|
2136
2223
|
if (/ERR_PNPM_ADDING_TO_ROOT|add the dependency to the workspace root/i.test(message)) return "pnpmWorkspace";
|
|
2137
2224
|
if (/(^|\n)untrusted origin\s*$/.test(message)) return "originRejected";
|
|
@@ -2141,13 +2228,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2141
2228
|
if (/os error 5\b|ERROR_ACCESS_DENIED|\bEPERM\b|\bEACCES\b|access is denied/i.test(message)) return "accessDenied";
|
|
2142
2229
|
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";
|
|
2143
2230
|
if (/ERR_PNPM_IGNORED_BUILDS|Ignored build scripts:|ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED/i.test(message)) return "pnpmIgnoredBuild";
|
|
2231
|
+
if (/ERR_PNPM_FETCH_40[13]\b|\bE40[13]\b|(?:Unauthorized|Forbidden)\s*-\s*40[13]\b/i.test(message)) return "registryAuth";
|
|
2232
|
+
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";
|
|
2144
2233
|
if (/\[network\]|ERR_PNPM_GIT_FETCH_FAILED|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|\bTLS\b|\bSSL\b|fetch failed|failed to fetch|\bGET https?:\/\/\S+\.tgz\s+error \([A-Za-z0-9_]+\)/i.test(message)) return "network";
|
|
2145
2234
|
if (/\[request-timeout\]/i.test(message)) return "network";
|
|
2146
2235
|
if (/\[packaging\]|entry file missing/i.test(message)) return "pluginPrepare";
|
|
2147
2236
|
if (/\[registry-missing\]/i.test(message)) return "pluginMissingDep";
|
|
2148
2237
|
if (/ERR_PNPM_FETCH_404|404 Not Found|Not Found - 404/i.test(message)) return "pnpmMissingDep";
|
|
2149
2238
|
if (/\bERR_PNPM_NO_MATCHING_VERSION\b|\bETARGET\b|No matching version found/i.test(message)) return "registryVersionStale";
|
|
2150
|
-
if (/\bERR_PNPM_LINKED_PKG_DIR_NOT_FOUND\b|Could not install from .+ as it does not exist/i.test(message)) return "pnpmLinkedDirMissing";
|
|
2151
2239
|
if (/Unable to detect compiler type|gyp ERR!|Could not find any Visual Studio|No Xcode or CLT version detected|xcode-select|python(?:3)? is (?:not set|not found)|Could not find Python|\bmake: not found\b|\bgcc: not found\b|\bg\+\+: not found\b|\bMSB\d{4}\b/i.test(message)) return "buildToolchainMissing";
|
|
2152
2240
|
if (/ERR_PNPM_PREPARE_PACKAGE|ELIFECYCLE|prepare-guard/i.test(message) || /Command failed/.test(message)) return "pluginPrepare";
|
|
2153
2241
|
if (/plugin is not installed|plugin cannot be uninstalled here|already queued:|^already installed: \S+$/im.test(message)) return "hubState";
|
|
@@ -2155,8 +2243,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2155
2243
|
if (/atomic-write: timed out waiting for the writer lock|timed out waiting for the writer lock/i.test(message)) return "profileLock";
|
|
2156
2244
|
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";
|
|
2157
2245
|
if (/\[host-spawn\]/i.test(message)) return "hostCliSpawn";
|
|
2246
|
+
if (/\[dsh-too-old\]/i.test(message)) return "dshTooOld";
|
|
2247
|
+
if (/spawn .+ ENOENT/i.test(message)) return "hub";
|
|
2248
|
+
if (LOCAL_ENV_RE.test(message)) return "localEnv";
|
|
2158
2249
|
return "hub";
|
|
2159
2250
|
}
|
|
2251
|
+
/** 「特征指向本机环境但说不清具体哪一类」的兜底判据:系统调用错误码(权限/路径过长/设备异常)、
|
|
2252
|
+
* 证书与代理校验失败、本地配置文件(~/.npmrc、profile 的 package.json)损坏。
|
|
2253
|
+
* 只做排除用:命中它表示「不是插件侧问题」,不代表我们已经定位到原因。 */
|
|
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;
|
|
2160
2255
|
/** 从服务端 `[npm-too-low]` 标记行提取本机 npm 版本(如 `[npm-too-low] npm@11.3.0` → "11.3.0");
|
|
2161
2256
|
* 历史记录无标记时返回 null,前端据此决定提示文案是否带具体版本。 */
|
|
2162
2257
|
function npmTooLowVersion(message) {
|
|
@@ -2171,6 +2266,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2171
2266
|
* 无关 —— 抓核心错误时必须跳过,否则会被 CORE_LINE_RE 的 `missing` 分支误抓、淹没真正的
|
|
2172
2267
|
* 错误码(如 git 源的 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED),让 issue 正文只剩一堆 peer WARN。 */
|
|
2173
2268
|
const PEER_WARN_RE = /missing peer|issues with peer dependencies|peer dependencies that should be installed/i;
|
|
2269
|
+
/** 安装器自己打的诊断标记行:它们本身就是「为什么没有日志 / 卡在哪一步」的证据,
|
|
2270
|
+
* 不含 CORE_LINE_RE 的关键词,必须无条件保留 —— 否则上报正文会退回成只剩宿主那句摘要,
|
|
2271
|
+
* 我们又拿不到任何可排查的信息(#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;
|
|
2174
2273
|
/** 提交 issue 时正文里错误摘要的上限字符数。GitHub 请求行上限 8192 字节,
|
|
2175
2274
|
* 固定模板与 URL 编码开销约 1~2K,核心错误(以 ASCII 日志为主)可安全带到 ~5K;
|
|
2176
2275
|
* 仍超长时 pluginIssueUrl 会逐档缩小核心预算,最终 URL 不会超限。 */
|
|
@@ -2201,7 +2300,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2201
2300
|
const core = [];
|
|
2202
2301
|
for (const raw of message.split(/\r?\n/)) {
|
|
2203
2302
|
const line = raw.trim();
|
|
2204
|
-
if (!line || PEER_WARN_RE.test(line)
|
|
2303
|
+
if (!line || PEER_WARN_RE.test(line)) continue;
|
|
2304
|
+
if (!MARKER_LINE_RE.test(line) && !CORE_LINE_RE.test(line)) continue;
|
|
2205
2305
|
const short = line.length > MAX_LINE_CHARS ? `${line.slice(0, MAX_LINE_CHARS)}…` : line;
|
|
2206
2306
|
if (!seen.has(short)) {
|
|
2207
2307
|
seen.add(short);
|
|
@@ -2210,6 +2310,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2210
2310
|
}
|
|
2211
2311
|
let out;
|
|
2212
2312
|
if (core.length === 0) {
|
|
2313
|
+
const whole = message.trim();
|
|
2314
|
+
if (whole.length <= maxChars) return whole;
|
|
2213
2315
|
const tail = message.trimEnd().slice(-1e3);
|
|
2214
2316
|
const sep = "\n…\n";
|
|
2215
2317
|
const headBudget = Math.max(maxChars - tail.length - 3, 0);
|
|
@@ -2276,6 +2378,50 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2276
2378
|
const host = m[1].replace(/:\d+$/, "");
|
|
2277
2379
|
return PUBLIC_REGISTRY_HOSTS.has(host) ? null : host;
|
|
2278
2380
|
}
|
|
2381
|
+
/**
|
|
2382
|
+
* 「本地依赖目录不存在」失败里缺失的路径:
|
|
2383
|
+
* `pnpm: ENOENT: no such file or directory, lstat '<path>'`
|
|
2384
|
+
* 或 `Could not install from "<path>" as it does not exist`。取不到返回 null。
|
|
2385
|
+
*/
|
|
2386
|
+
function missingLocalDirOf(message) {
|
|
2387
|
+
const lstat = /ENOENT: no such file or directory,\s*(?:lstat|scandir|readlink)\s+'([^']+)'/i.exec(message);
|
|
2388
|
+
if (lstat !== null) return lstat[1];
|
|
2389
|
+
const quoted = /Could not install from\s+"([^"]+)"\s+as it does not exist/i.exec(message) ?? /Could not install from\s+'([^']+)'\s+as it does not exist/i.exec(message);
|
|
2390
|
+
return quoted === null ? null : quoted[1];
|
|
2391
|
+
}
|
|
2392
|
+
/**
|
|
2393
|
+
* 「profile 由桌面应用独占」错误里的 profile 名:
|
|
2394
|
+
* `error: profile "desktop" is managed exclusively by the Electron application`。
|
|
2395
|
+
* 取不到返回 null(提示文案退回通用说法)。
|
|
2396
|
+
*/
|
|
2397
|
+
function exclusiveProfileOf(message) {
|
|
2398
|
+
const m = /profile\s+"?([A-Za-z0-9_-]+)"?\s+is managed exclusively/i.exec(message);
|
|
2399
|
+
return m === null ? null : m[1];
|
|
2400
|
+
}
|
|
2401
|
+
/**
|
|
2402
|
+
* 日志里有安装器的 `[desktop-cli-fallback]` 标记:没找到桌面应用内置的 CLI 引导脚本,
|
|
2403
|
+
* 退回 PATH 上的 dsh 才被「profile 独占」拒绝 —— 是我们的路径推导问题,不是用户环境问题。
|
|
2404
|
+
*/
|
|
2405
|
+
function desktopCliFallbackOf(message) {
|
|
2406
|
+
return /\[desktop-cli-fallback\]/i.test(message);
|
|
2407
|
+
}
|
|
2408
|
+
/** `[dsh-too-old]` 标记里的三方信息(包名 / 插件要求的 DSH 下限 / 当前宿主版本);取不到返回 null。 */
|
|
2409
|
+
function dshTooOldInfoOf(message) {
|
|
2410
|
+
const m = /\[dsh-too-old\]\s*(\S+)\s+requires DSH >= (\S+).*?runs (\S+)/i.exec(message);
|
|
2411
|
+
return m === null ? null : {
|
|
2412
|
+
pkg: m[1],
|
|
2413
|
+
floor: m[2],
|
|
2414
|
+
current: m[3]
|
|
2415
|
+
};
|
|
2416
|
+
}
|
|
2417
|
+
/**
|
|
2418
|
+
* 鉴权失败(401/403)时被拒绝的源主机名:从 `ERR_PNPM_FETCH_401 GET https://host/pkg: Unauthorized - 401`
|
|
2419
|
+
* 里取,取不到返回 null(提示文案退回通用说法,不拼出残缺句子)。
|
|
2420
|
+
*/
|
|
2421
|
+
function authRegistryHostOf(message) {
|
|
2422
|
+
const m = /ERR_PNPM_FETCH_40[13]\s+GET\s+https?:\/\/([^\s/:]+)/i.exec(message) ?? /GET\s+https?:\/\/([^\s/:]+)\S*\s*:?\s*(?:Unauthorized|Forbidden)\s*-\s*40[13]/i.exec(message);
|
|
2423
|
+
return m === null ? null : m[1];
|
|
2424
|
+
}
|
|
2279
2425
|
//#endregion
|
|
2280
2426
|
//#region src/client/logic/urls.ts
|
|
2281
2427
|
/** dsh-plugin.org 中文页挂在 /zh/ 前缀下,英文在根路径。 */
|
|
@@ -2311,12 +2457,15 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2311
2457
|
case "dshMissing": return "dsh command not found on the user machine";
|
|
2312
2458
|
case "pnpmMissing": return "pnpm command not found on the user machine";
|
|
2313
2459
|
case "pnpmStore": return "pnpm store version mismatch on the user machine";
|
|
2460
|
+
case "pnpmVirtualStore": return "the profile modules directory was built with a different virtual-store-dir-max-length on the user machine";
|
|
2314
2461
|
case "pnpmWorkspace": return `pnpm workspace-root check blocked the ${word} on the user machine`;
|
|
2315
2462
|
case "originRejected": return "request origin rejected by the local service on the user machine";
|
|
2316
2463
|
case "pnpmPolicy": return `pnpm supply-chain policy blocked the ${word} on the user machine`;
|
|
2317
2464
|
case "pnpmUnusedPatch": return "stale pnpm patch entry on the user machine";
|
|
2318
2465
|
case "pnpmMissingDep": return "dependency not found on the npm registry on the user machine";
|
|
2319
|
-
case "registryVersionStale": return
|
|
2466
|
+
case "registryVersionStale": return `requested version not available on the npm registry in use on the user machine`;
|
|
2467
|
+
case "registryAuth": return `npm registry rejected the credentials for this ${word} on the user machine`;
|
|
2468
|
+
case "profileExclusive": return `the desktop profile is managed only by the Electron app, so the CLI refused the ${word}`;
|
|
2320
2469
|
case "pnpmLinkedDirMissing": return "dangling local (link:) dependency in the user profile";
|
|
2321
2470
|
case "fileLocked": return "file locked by another process on the user machine";
|
|
2322
2471
|
case "accessDenied": return "file write access denied on the user machine";
|
|
@@ -2330,6 +2479,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2330
2479
|
case "timeout": return `${word} timed out`;
|
|
2331
2480
|
case "profileLock": return "DSH profile is locked by another process";
|
|
2332
2481
|
case "pluginMissingDep": return "a dependency of the plugin is not published on npm";
|
|
2482
|
+
case "dshTooOld": return "the plugin requires a newer DSH than the host runs";
|
|
2483
|
+
case "localEnv": return `no plugin-side cause found — the failure points at the local environment for this ${word}`;
|
|
2333
2484
|
case "hub": return `${word} failed (cause unclassified)`;
|
|
2334
2485
|
default: return `plugin ${word} failed`;
|
|
2335
2486
|
}
|
|
@@ -2348,7 +2499,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2348
2499
|
const executed = executedCommandOf(command, attempts);
|
|
2349
2500
|
const zhWord = actionWordZh(action);
|
|
2350
2501
|
const title = `[dsh-plugin.org | dsh-plugin-hub] ${reasonTitleOf(kind, action)}: ${repo}`;
|
|
2351
|
-
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 === "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";
|
|
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 === "pnpmVirtualStore" ? "the profile node_modules was created with a different virtual-store-dir-max-length (or a different pnpm config), so pnpm refuses to reuse it (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";
|
|
2352
2503
|
const code = coreErrorCode(message);
|
|
2353
2504
|
const build = (coreChars) => {
|
|
2354
2505
|
const body = [
|
|
@@ -2383,7 +2534,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2383
2534
|
`- OS: ${env.platform} ${env.arch} (${env.release})`,
|
|
2384
2535
|
`- Profile: \`${env.profile}\``,
|
|
2385
2536
|
`- DSH Home: \`${env.dshHome}\``,
|
|
2386
|
-
|
|
2537
|
+
"- Full log: open the Hub notifications, select the failed record and press \"Copy\""
|
|
2387
2538
|
] : [],
|
|
2388
2539
|
`- Catalog: [${pluginSiteUrl(repo)}](${pluginSiteUrl(repo)})`,
|
|
2389
2540
|
"",
|
|
@@ -2449,7 +2600,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2449
2600
|
`- OS: ${env.platform} ${env.arch} (${env.release})`,
|
|
2450
2601
|
`- Profile: \`${env.profile}\``,
|
|
2451
2602
|
`- DSH Home: \`${env.dshHome}\``,
|
|
2452
|
-
|
|
2603
|
+
"- Full log: open the Hub notifications, select the failed record and press \"Copy\""
|
|
2453
2604
|
] : [],
|
|
2454
2605
|
...repo !== "unknown" ? [`- Catalog: [${pluginSiteUrl(repo)}](${pluginSiteUrl(repo)})`] : [],
|
|
2455
2606
|
"",
|
|
@@ -2524,6 +2675,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2524
2675
|
checkUpdatesOnStart: true,
|
|
2525
2676
|
proxy: "",
|
|
2526
2677
|
npmRegistry: "",
|
|
2678
|
+
registryFallback: true,
|
|
2527
2679
|
enableNpmInstall: true,
|
|
2528
2680
|
logPath: ""
|
|
2529
2681
|
};
|
|
@@ -2920,6 +3072,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2920
3072
|
display: input.repo,
|
|
2921
3073
|
source: input.source,
|
|
2922
3074
|
mode: input.update ? "update" : void 0,
|
|
3075
|
+
...input.pinVersion ? { version: input.pinVersion } : {},
|
|
2923
3076
|
...langKey ? { lang: langKey } : {},
|
|
2924
3077
|
...input.channel ? { installChannel: input.channel } : {},
|
|
2925
3078
|
...input.globalNpm && input.globalNpm.length > 0 ? { globalNpm: input.globalNpm } : {}
|
|
@@ -2972,7 +3125,8 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
2972
3125
|
updatedAt: p.dates?.repoUpdatedAt,
|
|
2973
3126
|
command: installCommandOf(p, true),
|
|
2974
3127
|
source: "catalog",
|
|
2975
|
-
update: opts?.update
|
|
3128
|
+
update: opts?.update,
|
|
3129
|
+
pinVersion: opts?.pinVersion
|
|
2976
3130
|
});
|
|
2977
3131
|
};
|
|
2978
3132
|
/** 命令行安装:用户手输 npm 包名,走 custom 源(受安全开关控制)。
|
|
@@ -3796,7 +3950,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3796
3950
|
})() : null, (0, react.createElement)("button", {
|
|
3797
3951
|
className: Modal_module_css_default.errorCopySoft,
|
|
3798
3952
|
onClick: () => onCopy(copyText)
|
|
3799
|
-
}, 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 === "pnpmStore" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint")) : failureKind === "pnpmPolicy" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(pnpmPolicyHintOf(message), pnpmPolicyHintParams(message))) : failureKind === "pnpmUnusedPatch" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint")) : failureKind === "pnpmMissingDep" ? (0, react.createElement)("div", null, [(() => {
|
|
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 === "pnpmVirtualStore" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmVirtualStoreHint")) : failureKind === "pnpmStore" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint")) : failureKind === "pnpmPolicy" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(pnpmPolicyHintOf(message), pnpmPolicyHintParams(message))) : failureKind === "pnpmUnusedPatch" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint")) : failureKind === "pnpmMissingDep" ? (0, react.createElement)("div", null, [(() => {
|
|
3800
3954
|
const pkg = missingRegistryPackageOf(message);
|
|
3801
3955
|
return pkg ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failPnpmMissingDepTarget", { pkg })) : null;
|
|
3802
3956
|
})(), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(registryMissingHintOf(message)))]) : failureKind === "pluginMissingDep" ? (0, react.createElement)("div", null, [
|
|
@@ -3821,7 +3975,47 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
3821
3975
|
target: "_blank",
|
|
3822
3976
|
rel: "noopener noreferrer",
|
|
3823
3977
|
title: t("failIssueHint")
|
|
3824
|
-
}, t("failIssueBig")) : null]) : failureKind === "registryVersionStale" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failRegistryVersionStaleHint")) : failureKind === "pnpmLinkedDirMissing" ? (0, react.createElement)("div",
|
|
3978
|
+
}, t("failIssueBig")) : null]) : failureKind === "registryVersionStale" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failRegistryVersionStaleHint")) : failureKind === "pnpmLinkedDirMissing" ? (0, react.createElement)("div", null, [(() => {
|
|
3979
|
+
const dir = missingLocalDirOf(message);
|
|
3980
|
+
return dir ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failLinkedDirTarget", { path: dir })) : null;
|
|
3981
|
+
})(), (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmLinkedDirMissingHint"))]) : failureKind === "fileLocked" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFileLockedHint")) : failureKind === "accessDenied" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failAccessDeniedHint")) : failureKind === "fsUnavailable" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFsUnavailableHint")) : failureKind === "originRejected" ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failOriginRejectedHint", { profile: env?.profile ?? "<profile>" })) : failureKind === "profileExclusive" ? (() => {
|
|
3982
|
+
const profile = exclusiveProfileOf(message);
|
|
3983
|
+
const ourBug = desktopCliFallbackOf(message);
|
|
3984
|
+
return (0, react.createElement)("div", null, [
|
|
3985
|
+
(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(profile ? "failProfileExclusiveHint" : "failProfileExclusiveHintNoProfile", profile ? { profile } : void 0)),
|
|
3986
|
+
ourBug ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDesktopCliFallbackHint")) : null,
|
|
3987
|
+
ourBug ? (0, react.createElement)("a", {
|
|
3988
|
+
className: Modal_module_css_default.failBigIssue,
|
|
3989
|
+
href: hubIssueUrl(repo, message, env, command, attempts, "triage", action),
|
|
3990
|
+
target: "_blank",
|
|
3991
|
+
rel: "noopener noreferrer",
|
|
3992
|
+
title: t("failHubIssueHint")
|
|
3993
|
+
}, t("failIssueBig")) : null
|
|
3994
|
+
]);
|
|
3995
|
+
})() : failureKind === "registryAuth" ? (() => {
|
|
3996
|
+
const host = authRegistryHostOf(message);
|
|
3997
|
+
return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(host ? "failRegistryAuthHint" : "failRegistryAuthHintNoHost", host ? { host } : void 0));
|
|
3998
|
+
})() : failureKind === "dshTooOld" ? (() => {
|
|
3999
|
+
const info = dshTooOldInfoOf(message);
|
|
4000
|
+
return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshTooOldHint", info ?? {
|
|
4001
|
+
pkg: repo ?? "plugin",
|
|
4002
|
+
floor: "?",
|
|
4003
|
+
current: "?"
|
|
4004
|
+
}));
|
|
4005
|
+
})() : failureKind === "localEnv" ? (0, react.createElement)("div", null, [
|
|
4006
|
+
(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failLocalEnvHint")),
|
|
4007
|
+
onRunDiagnostics ? (0, react.createElement)("button", {
|
|
4008
|
+
className: Modal_module_css_default.failDiagBtn,
|
|
4009
|
+
onClick: onRunDiagnostics
|
|
4010
|
+
}, t("failNetworkRunDiag")) : null,
|
|
4011
|
+
(0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failMisjudgeHint")), (0, react.createElement)("a", {
|
|
4012
|
+
className: Modal_module_css_default.failMisjudgeLink,
|
|
4013
|
+
href: hubIssueUrl(repo, message, env, command, attempts, "triage", action),
|
|
4014
|
+
target: "_blank",
|
|
4015
|
+
rel: "noopener noreferrer",
|
|
4016
|
+
title: t("failHubIssueHint")
|
|
4017
|
+
}, t("failMisjudgeLink"))])
|
|
4018
|
+
]) : failureKind === "network" ? (0, react.createElement)("div", null, [
|
|
3825
4019
|
(() => {
|
|
3826
4020
|
const target = unreachableTargetOf(message);
|
|
3827
4021
|
return target ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failNetworkTarget", { url: target })) : null;
|
|
@@ -4414,6 +4608,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4414
4608
|
if (kind === "npmMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failNpmMissingHint"));
|
|
4415
4609
|
if (kind === "buildToolchainMissing") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failBuildToolchainHint"));
|
|
4416
4610
|
if (kind === "pnpmWorkspace") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmWorkspaceHint"));
|
|
4611
|
+
if (kind === "pnpmVirtualStore") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmVirtualStoreHint"));
|
|
4417
4612
|
if (kind === "pnpmStore") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmStoreHint"));
|
|
4418
4613
|
if (kind === "pnpmPolicy") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(pnpmPolicyHintOf(r.message), pnpmPolicyHintParams(r.message)));
|
|
4419
4614
|
if (kind === "pnpmUnusedPatch") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmUnusedPatchHint"));
|
|
@@ -4450,11 +4645,55 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4450
4645
|
]);
|
|
4451
4646
|
}
|
|
4452
4647
|
if (kind === "registryVersionStale") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failRegistryVersionStaleHint"));
|
|
4453
|
-
if (kind === "pnpmLinkedDirMissing")
|
|
4648
|
+
if (kind === "pnpmLinkedDirMissing") {
|
|
4649
|
+
const dir = missingLocalDirOf(r.message);
|
|
4650
|
+
return (0, react.createElement)("div", null, [dir ? (0, react.createElement)("div", { className: Modal_module_css_default.failNetworkTarget }, t("failLinkedDirTarget", { path: dir })) : null, (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failPnpmLinkedDirMissingHint"))]);
|
|
4651
|
+
}
|
|
4454
4652
|
if (kind === "fileLocked") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFileLockedHint"));
|
|
4455
4653
|
if (kind === "accessDenied") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failAccessDeniedHint"));
|
|
4456
4654
|
if (kind === "fsUnavailable") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failFsUnavailableHint"));
|
|
4457
4655
|
if (kind === "originRejected") return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failOriginRejectedHint", { profile: env?.profile ?? "<profile>" }));
|
|
4656
|
+
if (kind === "profileExclusive") {
|
|
4657
|
+
const profile = exclusiveProfileOf(r.message);
|
|
4658
|
+
const ourBug = desktopCliFallbackOf(r.message);
|
|
4659
|
+
return (0, react.createElement)("div", null, [
|
|
4660
|
+
(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(profile ? "failProfileExclusiveHint" : "failProfileExclusiveHintNoProfile", profile ? { profile } : void 0)),
|
|
4661
|
+
ourBug ? (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDesktopCliFallbackHint")) : null,
|
|
4662
|
+
ourBug ? (0, react.createElement)("a", {
|
|
4663
|
+
className: Modal_module_css_default.failBigIssue,
|
|
4664
|
+
href: hubIssueUrl(shownRepo || r.repo, r.message, env, r.command, r.attempts, "triage", action),
|
|
4665
|
+
target: "_blank",
|
|
4666
|
+
rel: "noopener noreferrer",
|
|
4667
|
+
title: t("failHubIssueHint")
|
|
4668
|
+
}, t("failIssueBig")) : null
|
|
4669
|
+
]);
|
|
4670
|
+
}
|
|
4671
|
+
if (kind === "registryAuth") {
|
|
4672
|
+
const host = authRegistryHostOf(r.message);
|
|
4673
|
+
return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t(host ? "failRegistryAuthHint" : "failRegistryAuthHintNoHost", host ? { host } : void 0));
|
|
4674
|
+
}
|
|
4675
|
+
if (kind === "dshTooOld") {
|
|
4676
|
+
const info = dshTooOldInfoOf(r.message);
|
|
4677
|
+
return (0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failDshTooOldHint", info ?? {
|
|
4678
|
+
pkg: shownRepo || r.repo || "plugin",
|
|
4679
|
+
floor: "?",
|
|
4680
|
+
current: "?"
|
|
4681
|
+
}));
|
|
4682
|
+
}
|
|
4683
|
+
if (kind === "localEnv") return (0, react.createElement)("div", null, [
|
|
4684
|
+
(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failLocalEnvHint")),
|
|
4685
|
+
onRunDiagnostics ? (0, react.createElement)("button", {
|
|
4686
|
+
className: Modal_module_css_default.failDiagBtn,
|
|
4687
|
+
onClick: onRunDiagnostics
|
|
4688
|
+
}, t("failNetworkRunDiag")) : null,
|
|
4689
|
+
(0, react.createElement)("div", null, [(0, react.createElement)("div", { className: Modal_module_css_default.failPrepareHint }, t("failMisjudgeHint")), (0, react.createElement)("a", {
|
|
4690
|
+
className: Modal_module_css_default.failMisjudgeLink,
|
|
4691
|
+
href: hubIssueUrl(shownRepo || r.repo, r.message, env, r.command, r.attempts, "triage", action),
|
|
4692
|
+
target: "_blank",
|
|
4693
|
+
rel: "noopener noreferrer",
|
|
4694
|
+
title: t("failHubIssueHint")
|
|
4695
|
+
}, t("failMisjudgeLink"))])
|
|
4696
|
+
]);
|
|
4458
4697
|
if (kind === "network") return (0, react.createElement)("div", null, [
|
|
4459
4698
|
(() => {
|
|
4460
4699
|
const target = unreachableTargetOf(r.message);
|
|
@@ -4692,40 +4931,40 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4692
4931
|
css: css$9
|
|
4693
4932
|
});
|
|
4694
4933
|
var List_module_css_default = {
|
|
4695
|
-
"diagBtn": "_3XaZHa_diagBtn",
|
|
4696
|
-
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
4697
|
-
"stateTitle": "_3XaZHa_stateTitle",
|
|
4698
|
-
"card": "_3XaZHa_card",
|
|
4699
|
-
"date": "_3XaZHa_date",
|
|
4700
4934
|
"fork": "_3XaZHa_fork",
|
|
4701
|
-
"
|
|
4702
|
-
"topics": "_3XaZHa_topics",
|
|
4703
|
-
"body": "_3XaZHa_body",
|
|
4704
|
-
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
4705
|
-
"verified": "_3XaZHa_verified",
|
|
4706
|
-
"star": "_3XaZHa_star",
|
|
4707
|
-
"cardHead": "_3XaZHa_cardHead",
|
|
4708
|
-
"desc": "_3XaZHa_desc",
|
|
4709
|
-
"topic": "_3XaZHa_topic",
|
|
4710
|
-
"list": "_3XaZHa_list",
|
|
4711
|
-
"actions": "_3XaZHa_actions",
|
|
4935
|
+
"versionBadge": "_3XaZHa_versionBadge",
|
|
4712
4936
|
"updateBadge": "_3XaZHa_updateBadge",
|
|
4713
|
-
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
4714
4937
|
"cardTitle": "_3XaZHa_cardTitle",
|
|
4715
|
-
"
|
|
4938
|
+
"footer": "_3XaZHa_footer",
|
|
4716
4939
|
"footLink": "_3XaZHa_footLink",
|
|
4717
|
-
"
|
|
4718
|
-
"stats": "_3XaZHa_stats",
|
|
4719
|
-
"state": "_3XaZHa_state",
|
|
4720
|
-
"stateActions": "_3XaZHa_stateActions",
|
|
4721
|
-
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
4722
|
-
"installBtnUpdate": "_3XaZHa_installBtnUpdate",
|
|
4723
|
-
"retryBtn": "_3XaZHa_retryBtn",
|
|
4724
|
-
"versionBadge": "_3XaZHa_versionBadge",
|
|
4940
|
+
"topic": "_3XaZHa_topic",
|
|
4725
4941
|
"cardMain": "_3XaZHa_cardMain",
|
|
4942
|
+
"desc": "_3XaZHa_desc",
|
|
4943
|
+
"body": "_3XaZHa_body",
|
|
4944
|
+
"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
|
+
"installBtnCopied": "_3XaZHa_installBtnCopied",
|
|
4952
|
+
"installBtnInstalled": "_3XaZHa_installBtnInstalled",
|
|
4953
|
+
"stateActions": "_3XaZHa_stateActions",
|
|
4954
|
+
"stats": "_3XaZHa_stats",
|
|
4726
4955
|
"uninstallBtn": "_3XaZHa_uninstallBtn",
|
|
4956
|
+
"moreSentinel": "_3XaZHa_moreSentinel",
|
|
4727
4957
|
"detailBtn": "_3XaZHa_detailBtn",
|
|
4728
|
-
"
|
|
4958
|
+
"actions": "_3XaZHa_actions",
|
|
4959
|
+
"categoryBadge": "_3XaZHa_categoryBadge",
|
|
4960
|
+
"stateDesc": "_3XaZHa_stateDesc",
|
|
4961
|
+
"retryBtn": "_3XaZHa_retryBtn",
|
|
4962
|
+
"installBtn": "_3XaZHa_installBtn",
|
|
4963
|
+
"star": "_3XaZHa_star",
|
|
4964
|
+
"diagBtn": "_3XaZHa_diagBtn",
|
|
4965
|
+
"state": "_3XaZHa_state",
|
|
4966
|
+
"cardSide": "_3XaZHa_cardSide",
|
|
4967
|
+
"cardHead": "_3XaZHa_cardHead"
|
|
4729
4968
|
};
|
|
4730
4969
|
//#endregion
|
|
4731
4970
|
//#region src/client/hooks/useIncrementalList.ts
|
|
@@ -4930,16 +5169,16 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
4930
5169
|
css: css$8
|
|
4931
5170
|
});
|
|
4932
5171
|
var SectionTabs_module_css_default = {
|
|
4933
|
-
"
|
|
5172
|
+
"noticeCount": "_7tvizq_noticeCount",
|
|
5173
|
+
"tabActive": "_7tvizq_tabActive",
|
|
4934
5174
|
"tab": "_7tvizq_tab",
|
|
4935
|
-
"
|
|
5175
|
+
"tabIcon": "_7tvizq_tabIcon",
|
|
4936
5176
|
"tabLabel": "_7tvizq_tabLabel",
|
|
4937
|
-
"tabCountActive": "_7tvizq_tabCountActive",
|
|
4938
|
-
"noticeBtn": "_7tvizq_noticeBtn",
|
|
4939
5177
|
"root": "_7tvizq_root",
|
|
4940
|
-
"
|
|
4941
|
-
"
|
|
4942
|
-
"
|
|
5178
|
+
"noticeBtn": "_7tvizq_noticeBtn",
|
|
5179
|
+
"tabCount": "_7tvizq_tabCount",
|
|
5180
|
+
"noticeIcon": "_7tvizq_noticeIcon",
|
|
5181
|
+
"tabCountActive": "_7tvizq_tabCountActive"
|
|
4943
5182
|
};
|
|
4944
5183
|
//#endregion
|
|
4945
5184
|
//#region src/client/components/layout/SectionTabs.tsx
|
|
@@ -5015,42 +5254,42 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5015
5254
|
css: css$7
|
|
5016
5255
|
});
|
|
5017
5256
|
var InstalledView_module_css_default = {
|
|
5018
|
-
"
|
|
5019
|
-
"
|
|
5020
|
-
"
|
|
5257
|
+
"rowRestart": "_1nXeGW_rowRestart",
|
|
5258
|
+
"statusPending": "_1nXeGW_statusPending",
|
|
5259
|
+
"rowMain": "_1nXeGW_rowMain",
|
|
5260
|
+
"exampleRow": "_1nXeGW_exampleRow",
|
|
5021
5261
|
"rowRepo": "_1nXeGW_rowRepo",
|
|
5022
|
-
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
5023
|
-
"root": "_1nXeGW_root",
|
|
5024
5262
|
"rowDetail": "_1nXeGW_rowDetail",
|
|
5025
|
-
"toolbar": "_1nXeGW_toolbar",
|
|
5026
|
-
"rowRestart": "_1nXeGW_rowRestart",
|
|
5027
|
-
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
5028
5263
|
"rowCategory": "_1nXeGW_rowCategory",
|
|
5029
|
-
"
|
|
5030
|
-
"
|
|
5264
|
+
"rowActions": "_1nXeGW_rowActions",
|
|
5265
|
+
"toolbar": "_1nXeGW_toolbar",
|
|
5031
5266
|
"rowUpdate": "_1nXeGW_rowUpdate",
|
|
5032
|
-
"
|
|
5033
|
-
"updateBadge": "_1nXeGW_updateBadge",
|
|
5034
|
-
"statusPending": "_1nXeGW_statusPending",
|
|
5035
|
-
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5036
|
-
"rowDesc": "_1nXeGW_rowDesc",
|
|
5037
|
-
"rowMeta": "_1nXeGW_rowMeta",
|
|
5038
|
-
"segRow": "_1nXeGW_segRow",
|
|
5267
|
+
"segBtn": "_1nXeGW_segBtn",
|
|
5039
5268
|
"rowTitle": "_1nXeGW_rowTitle",
|
|
5040
|
-
"
|
|
5041
|
-
"
|
|
5042
|
-
"
|
|
5043
|
-
"
|
|
5269
|
+
"segRow": "_1nXeGW_segRow",
|
|
5270
|
+
"updateBadge": "_1nXeGW_updateBadge",
|
|
5271
|
+
"root": "_1nXeGW_root",
|
|
5272
|
+
"rowSourceTagHub": "_1nXeGW_rowSourceTagHub",
|
|
5044
5273
|
"statusDot": "_1nXeGW_statusDot",
|
|
5045
|
-
"
|
|
5274
|
+
"exampleBadge": "_1nXeGW_exampleBadge",
|
|
5275
|
+
"row": "_1nXeGW_row",
|
|
5276
|
+
"rowUninstall": "_1nXeGW_rowUninstall",
|
|
5277
|
+
"rowTitleLine": "_1nXeGW_rowTitleLine",
|
|
5046
5278
|
"rowSourceTag": "_1nXeGW_rowSourceTag",
|
|
5279
|
+
"emptyTitle": "_1nXeGW_emptyTitle",
|
|
5047
5280
|
"emptyDesc": "_1nXeGW_emptyDesc",
|
|
5048
|
-
"
|
|
5049
|
-
"
|
|
5281
|
+
"statusInactive": "_1nXeGW_statusInactive",
|
|
5282
|
+
"searchWrap": "_1nXeGW_searchWrap",
|
|
5050
5283
|
"versionBadge": "_1nXeGW_versionBadge",
|
|
5051
|
-
"
|
|
5052
|
-
"
|
|
5053
|
-
"
|
|
5284
|
+
"searchInput": "_1nXeGW_searchInput",
|
|
5285
|
+
"list": "_1nXeGW_list",
|
|
5286
|
+
"segBtnActive": "_1nXeGW_segBtnActive",
|
|
5287
|
+
"rowSourceTagManual": "_1nXeGW_rowSourceTagManual",
|
|
5288
|
+
"empty": "_1nXeGW_empty",
|
|
5289
|
+
"segLabel": "_1nXeGW_segLabel",
|
|
5290
|
+
"segGroup": "_1nXeGW_segGroup",
|
|
5291
|
+
"rowDesc": "_1nXeGW_rowDesc",
|
|
5292
|
+
"rowMeta": "_1nXeGW_rowMeta"
|
|
5054
5293
|
};
|
|
5055
5294
|
//#endregion
|
|
5056
5295
|
//#region src/client/components/views/InstalledView.tsx
|
|
@@ -5294,27 +5533,27 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5294
5533
|
css: css$6
|
|
5295
5534
|
});
|
|
5296
5535
|
var CustomInstallView_module_css_default = {
|
|
5297
|
-
"helpCmd": "zISxCG_helpCmd",
|
|
5298
|
-
"installCard": "zISxCG_installCard",
|
|
5299
5536
|
"channelOffBtn": "zISxCG_channelOffBtn",
|
|
5300
|
-
"installError": "zISxCG_installError",
|
|
5301
|
-
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5302
|
-
"root": "zISxCG_root",
|
|
5303
5537
|
"installCards": "zISxCG_installCards",
|
|
5304
|
-
"
|
|
5305
|
-
"desc": "zISxCG_desc",
|
|
5306
|
-
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
5307
|
-
"installBtn": "zISxCG_installBtn",
|
|
5538
|
+
"installLabel": "zISxCG_installLabel",
|
|
5308
5539
|
"channelOffText": "zISxCG_channelOffText",
|
|
5309
|
-
"
|
|
5540
|
+
"channelOff": "zISxCG_channelOff",
|
|
5310
5541
|
"helpNote": "zISxCG_helpNote",
|
|
5311
|
-
"
|
|
5542
|
+
"helpCmd": "zISxCG_helpCmd",
|
|
5543
|
+
"installExample": "zISxCG_installExample",
|
|
5544
|
+
"installError": "zISxCG_installError",
|
|
5545
|
+
"installBtn": "zISxCG_installBtn",
|
|
5546
|
+
"installCard": "zISxCG_installCard",
|
|
5312
5547
|
"installCardHead": "zISxCG_installCardHead",
|
|
5548
|
+
"installRow": "zISxCG_installRow",
|
|
5313
5549
|
"installInput": "zISxCG_installInput",
|
|
5550
|
+
"desc": "zISxCG_desc",
|
|
5551
|
+
"installInputError": "zISxCG_installInputError",
|
|
5552
|
+
"installHelpBtn": "zISxCG_installHelpBtn",
|
|
5553
|
+
"installCardDisabled": "zISxCG_installCardDisabled",
|
|
5314
5554
|
"helpBody": "zISxCG_helpBody",
|
|
5315
|
-
"
|
|
5316
|
-
"
|
|
5317
|
-
"installLabel": "zISxCG_installLabel"
|
|
5555
|
+
"root": "zISxCG_root",
|
|
5556
|
+
"helpLine": "zISxCG_helpLine"
|
|
5318
5557
|
};
|
|
5319
5558
|
//#endregion
|
|
5320
5559
|
//#region src/client/components/views/CustomInstallView.tsx
|
|
@@ -5470,30 +5709,30 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5470
5709
|
css: css$5
|
|
5471
5710
|
});
|
|
5472
5711
|
var SettingsView_module_css_default = {
|
|
5473
|
-
"
|
|
5474
|
-
"navItemActive": "_506LLG_navItemActive",
|
|
5475
|
-
"settingLabel": "_506LLG_settingLabel",
|
|
5712
|
+
"pageHeader": "_506LLG_pageHeader",
|
|
5476
5713
|
"proxyControl": "_506LLG_proxyControl",
|
|
5477
|
-
"
|
|
5478
|
-
"
|
|
5479
|
-
"card": "_506LLG_card",
|
|
5480
|
-
"settingTitle": "_506LLG_settingTitle",
|
|
5714
|
+
"navIcon": "_506LLG_navIcon",
|
|
5715
|
+
"navItemActive": "_506LLG_navItemActive",
|
|
5481
5716
|
"settingRow": "_506LLG_settingRow",
|
|
5482
|
-
"
|
|
5483
|
-
"
|
|
5717
|
+
"textInput": "_506LLG_textInput",
|
|
5718
|
+
"pageDesc": "_506LLG_pageDesc",
|
|
5484
5719
|
"proxyHint": "_506LLG_proxyHint",
|
|
5485
|
-
"root": "_506LLG_root",
|
|
5486
5720
|
"proxyHintOk": "_506LLG_proxyHintOk",
|
|
5487
|
-
"controlDropdown": "_506LLG_controlDropdown",
|
|
5488
5721
|
"resetBtn": "_506LLG_resetBtn",
|
|
5489
|
-
"navIcon": "_506LLG_navIcon",
|
|
5490
|
-
"pageHeader": "_506LLG_pageHeader",
|
|
5491
|
-
"settingControlStack": "_506LLG_settingControlStack",
|
|
5492
|
-
"navItem": "_506LLG_navItem",
|
|
5493
|
-
"textInput": "_506LLG_textInput",
|
|
5494
5722
|
"sidebar": "_506LLG_sidebar",
|
|
5723
|
+
"navItem": "_506LLG_navItem",
|
|
5495
5724
|
"proxyHintFail": "_506LLG_proxyHintFail",
|
|
5496
|
-
"
|
|
5725
|
+
"controlDropdown": "_506LLG_controlDropdown",
|
|
5726
|
+
"root": "_506LLG_root",
|
|
5727
|
+
"settingTitle": "_506LLG_settingTitle",
|
|
5728
|
+
"content": "_506LLG_content",
|
|
5729
|
+
"settingRowStack": "_506LLG_settingRowStack",
|
|
5730
|
+
"settingControl": "_506LLG_settingControl",
|
|
5731
|
+
"settingControlStack": "_506LLG_settingControlStack",
|
|
5732
|
+
"card": "_506LLG_card",
|
|
5733
|
+
"settingDesc": "_506LLG_settingDesc",
|
|
5734
|
+
"settingLabel": "_506LLG_settingLabel",
|
|
5735
|
+
"pageTitle": "_506LLG_pageTitle"
|
|
5497
5736
|
};
|
|
5498
5737
|
//#endregion
|
|
5499
5738
|
//#region \0dsh-css:src/client/styles/Dropdown.module.css.mjs
|
|
@@ -5513,17 +5752,17 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5513
5752
|
});
|
|
5514
5753
|
var Dropdown_module_css_default = {
|
|
5515
5754
|
"dropdownLabel": "B_Gxsq_dropdownLabel",
|
|
5516
|
-
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
5517
5755
|
"dropdownItemActive": "B_Gxsq_dropdownItemActive",
|
|
5518
|
-
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
5519
|
-
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
5520
|
-
"dropdownPanel": "B_Gxsq_dropdownPanel",
|
|
5521
5756
|
"dropdownBtn": "B_Gxsq_dropdownBtn",
|
|
5522
|
-
"dropdown": "B_Gxsq_dropdown",
|
|
5523
5757
|
"dropdownItemLabel": "B_Gxsq_dropdownItemLabel",
|
|
5758
|
+
"dropdownCount": "B_Gxsq_dropdownCount",
|
|
5759
|
+
"dropdownItem": "B_Gxsq_dropdownItem",
|
|
5760
|
+
"dropdownArrowOpen": "B_Gxsq_dropdownArrowOpen",
|
|
5761
|
+
"dropdownArrow": "B_Gxsq_dropdownArrow",
|
|
5524
5762
|
"dropdownCountActive": "B_Gxsq_dropdownCountActive",
|
|
5763
|
+
"dropdown": "B_Gxsq_dropdown",
|
|
5525
5764
|
"dropdownFill": "B_Gxsq_dropdownFill",
|
|
5526
|
-
"
|
|
5765
|
+
"dropdownPanel": "B_Gxsq_dropdownPanel"
|
|
5527
5766
|
};
|
|
5528
5767
|
//#endregion
|
|
5529
5768
|
//#region \0dsh-css:src/client/styles/Toggle.module.css.mjs
|
|
@@ -5542,9 +5781,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5542
5781
|
css: css$3
|
|
5543
5782
|
});
|
|
5544
5783
|
var Toggle_module_css_default = {
|
|
5545
|
-
"toggleOn": "k-cD4G_toggleOn",
|
|
5546
5784
|
"knob": "k-cD4G_knob",
|
|
5547
|
-
"toggle": "k-cD4G_toggle"
|
|
5785
|
+
"toggle": "k-cD4G_toggle",
|
|
5786
|
+
"toggleOn": "k-cD4G_toggleOn"
|
|
5548
5787
|
};
|
|
5549
5788
|
//#endregion
|
|
5550
5789
|
//#region src/client/components/ui/Toggle.tsx
|
|
@@ -5641,29 +5880,29 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5641
5880
|
css: css$2
|
|
5642
5881
|
});
|
|
5643
5882
|
var DiagnosticsView_module_css_default = {
|
|
5644
|
-
"diagPulse": "k9eRya_diagPulse",
|
|
5645
|
-
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
5646
|
-
"panel": "k9eRya_panel",
|
|
5647
|
-
"envRow": "k9eRya_envRow",
|
|
5648
|
-
"envDesc": "k9eRya_envDesc",
|
|
5649
|
-
"summaryRunning": "k9eRya_summaryRunning",
|
|
5650
5883
|
"row": "k9eRya_row",
|
|
5651
|
-
"
|
|
5652
|
-
"
|
|
5653
|
-
"head": "k9eRya_head",
|
|
5654
|
-
"envTitle": "k9eRya_envTitle",
|
|
5655
|
-
"badgeRunning": "k9eRya_badgeRunning",
|
|
5656
|
-
"runBtn": "k9eRya_runBtn",
|
|
5657
|
-
"badgeOk": "k9eRya_badgeOk",
|
|
5658
|
-
"badgeIdle": "k9eRya_badgeIdle",
|
|
5884
|
+
"name": "k9eRya_name",
|
|
5885
|
+
"panel": "k9eRya_panel",
|
|
5659
5886
|
"meta": "k9eRya_meta",
|
|
5660
|
-
"
|
|
5887
|
+
"badgeIdle": "k9eRya_badgeIdle",
|
|
5888
|
+
"runBtn": "k9eRya_runBtn",
|
|
5889
|
+
"summaryRunning": "k9eRya_summaryRunning",
|
|
5661
5890
|
"summary": "k9eRya_summary",
|
|
5662
|
-
"
|
|
5663
|
-
"
|
|
5891
|
+
"badgeRunning": "k9eRya_badgeRunning",
|
|
5892
|
+
"envDesc": "k9eRya_envDesc",
|
|
5893
|
+
"envCopyBtn": "k9eRya_envCopyBtn",
|
|
5894
|
+
"head": "k9eRya_head",
|
|
5895
|
+
"diagPulse": "k9eRya_diagPulse",
|
|
5896
|
+
"headHint": "k9eRya_headHint",
|
|
5664
5897
|
"summaryOk": "k9eRya_summaryOk",
|
|
5898
|
+
"badgeFail": "k9eRya_badgeFail",
|
|
5899
|
+
"badgeOk": "k9eRya_badgeOk",
|
|
5900
|
+
"envRow": "k9eRya_envRow",
|
|
5665
5901
|
"badge": "k9eRya_badge",
|
|
5666
|
-
"
|
|
5902
|
+
"envLabel": "k9eRya_envLabel",
|
|
5903
|
+
"display": "k9eRya_display",
|
|
5904
|
+
"envTitle": "k9eRya_envTitle",
|
|
5905
|
+
"summaryFail": "k9eRya_summaryFail"
|
|
5667
5906
|
};
|
|
5668
5907
|
//#endregion
|
|
5669
5908
|
//#region src/client/components/views/DiagnosticsView.tsx
|
|
@@ -5838,57 +6077,57 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
5838
6077
|
css: css$1
|
|
5839
6078
|
});
|
|
5840
6079
|
var LogsView_module_css_default = {
|
|
5841
|
-
"
|
|
5842
|
-
"
|
|
5843
|
-
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
5844
|
-
"linkBtn": "_3j77BW_linkBtn",
|
|
5845
|
-
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
5846
|
-
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
5847
|
-
"empty": "_3j77BW_empty",
|
|
5848
|
-
"searchInput": "_3j77BW_searchInput",
|
|
6080
|
+
"pathRow": "_3j77BW_pathRow",
|
|
6081
|
+
"footCount": "_3j77BW_footCount",
|
|
5849
6082
|
"footActions": "_3j77BW_footActions",
|
|
5850
6083
|
"badgeDebug": "_3j77BW_badgeDebug",
|
|
5851
|
-
"
|
|
6084
|
+
"badgeSuccess": "_3j77BW_badgeSuccess",
|
|
5852
6085
|
"clearBtn": "_3j77BW_clearBtn",
|
|
5853
|
-
"
|
|
5854
|
-
"
|
|
5855
|
-
"
|
|
5856
|
-
"
|
|
5857
|
-
"
|
|
5858
|
-
"catBadge": "_3j77BW_catBadge",
|
|
5859
|
-
"moreEnd": "_3j77BW_moreEnd",
|
|
5860
|
-
"catSettings": "_3j77BW_catSettings",
|
|
5861
|
-
"filterChipActive": "_3j77BW_filterChipActive",
|
|
5862
|
-
"message": "_3j77BW_message",
|
|
5863
|
-
"pathDraft": "_3j77BW_pathDraft",
|
|
5864
|
-
"pathRow": "_3j77BW_pathRow",
|
|
5865
|
-
"entry": "_3j77BW_entry",
|
|
5866
|
-
"catInstall": "_3j77BW_catInstall",
|
|
5867
|
-
"pathDialog": "_3j77BW_pathDialog",
|
|
5868
|
-
"search": "_3j77BW_search",
|
|
5869
|
-
"head": "_3j77BW_head",
|
|
5870
|
-
"logList": "_3j77BW_logList",
|
|
5871
|
-
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6086
|
+
"searchInput": "_3j77BW_searchInput",
|
|
6087
|
+
"pathDialogRow": "_3j77BW_pathDialogRow",
|
|
6088
|
+
"filterChip": "_3j77BW_filterChip",
|
|
6089
|
+
"catDiagnostics": "_3j77BW_catDiagnostics",
|
|
6090
|
+
"pathDialogHint": "_3j77BW_pathDialogHint",
|
|
5872
6091
|
"more": "_3j77BW_more",
|
|
5873
|
-
"event": "_3j77BW_event",
|
|
5874
|
-
"panel": "_3j77BW_panel",
|
|
5875
6092
|
"previewRow": "_3j77BW_previewRow",
|
|
6093
|
+
"footPath": "_3j77BW_footPath",
|
|
6094
|
+
"headHint": "_3j77BW_headHint",
|
|
6095
|
+
"panel": "_3j77BW_panel",
|
|
5876
6096
|
"pathText": "_3j77BW_pathText",
|
|
5877
|
-
"
|
|
5878
|
-
"filterChip": "_3j77BW_filterChip",
|
|
5879
|
-
"foot": "_3j77BW_foot",
|
|
5880
|
-
"badgeWarn": "_3j77BW_badgeWarn",
|
|
6097
|
+
"pathDialogReset": "_3j77BW_pathDialogReset",
|
|
5881
6098
|
"pathDialogFoot": "_3j77BW_pathDialogFoot",
|
|
5882
|
-
"
|
|
6099
|
+
"badge": "_3j77BW_badge",
|
|
6100
|
+
"badgeError": "_3j77BW_badgeError",
|
|
5883
6101
|
"badgeInfo": "_3j77BW_badgeInfo",
|
|
6102
|
+
"catUpdate": "_3j77BW_catUpdate",
|
|
6103
|
+
"catUninstall": "_3j77BW_catUninstall",
|
|
6104
|
+
"catSystem": "_3j77BW_catSystem",
|
|
6105
|
+
"pathDraft": "_3j77BW_pathDraft",
|
|
6106
|
+
"pathLabel": "_3j77BW_pathLabel",
|
|
5884
6107
|
"list": "_3j77BW_list",
|
|
6108
|
+
"btn": "_3j77BW_btn",
|
|
6109
|
+
"entry": "_3j77BW_entry",
|
|
6110
|
+
"badgeWarn": "_3j77BW_badgeWarn",
|
|
6111
|
+
"catSettings": "_3j77BW_catSettings",
|
|
6112
|
+
"foot": "_3j77BW_foot",
|
|
6113
|
+
"logList": "_3j77BW_logList",
|
|
6114
|
+
"filterBar": "_3j77BW_filterBar",
|
|
6115
|
+
"linkBtn": "_3j77BW_linkBtn",
|
|
6116
|
+
"search": "_3j77BW_search",
|
|
6117
|
+
"empty": "_3j77BW_empty",
|
|
6118
|
+
"head": "_3j77BW_head",
|
|
6119
|
+
"catBadge": "_3j77BW_catBadge",
|
|
6120
|
+
"footFail": "_3j77BW_footFail",
|
|
6121
|
+
"filterChipActive": "_3j77BW_filterChipActive",
|
|
6122
|
+
"pathDialog": "_3j77BW_pathDialog",
|
|
5885
6123
|
"time": "_3j77BW_time",
|
|
5886
|
-
"
|
|
5887
|
-
"
|
|
5888
|
-
"
|
|
6124
|
+
"event": "_3j77BW_event",
|
|
6125
|
+
"pathDialogDesc": "_3j77BW_pathDialogDesc",
|
|
6126
|
+
"headActions": "_3j77BW_headActions",
|
|
6127
|
+
"message": "_3j77BW_message",
|
|
6128
|
+
"catInstall": "_3j77BW_catInstall",
|
|
5889
6129
|
"actions": "_3j77BW_actions",
|
|
5890
|
-
"
|
|
5891
|
-
"catSystem": "_3j77BW_catSystem"
|
|
6130
|
+
"moreEnd": "_3j77BW_moreEnd"
|
|
5892
6131
|
};
|
|
5893
6132
|
//#endregion
|
|
5894
6133
|
//#region src/client/components/modals/LogsModal.tsx
|
|
@@ -6594,6 +6833,14 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6594
6833
|
title: t("settingsMirror"),
|
|
6595
6834
|
className: `${SettingsView_module_css_default.controlDropdown} ${Dropdown_module_css_default.dropdownFill}`
|
|
6596
6835
|
})
|
|
6836
|
+
}), (0, react.createElement)(SettingRow, {
|
|
6837
|
+
title: t("settingsRegistryFallback"),
|
|
6838
|
+
desc: t("settingsRegistryFallbackDesc"),
|
|
6839
|
+
children: (0, react.createElement)(Toggle, {
|
|
6840
|
+
checked: settings.registryFallback,
|
|
6841
|
+
onChange: (v) => update({ registryFallback: v }),
|
|
6842
|
+
title: t("settingsRegistryFallback")
|
|
6843
|
+
})
|
|
6597
6844
|
}), (0, react.createElement)(SettingRow, {
|
|
6598
6845
|
title: t("settingsProxy"),
|
|
6599
6846
|
desc: t("settingsProxyDesc"),
|
|
@@ -6719,6 +6966,9 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
6719
6966
|
const [confirmPlugin, setConfirmPlugin] = (0, react.useState)(null);
|
|
6720
6967
|
/** 弹窗动作是否为「更新」:已安装插件点「更新」→ 走同一条 add 命令原位覆盖重装,文案区分安装/更新 */
|
|
6721
6968
|
const [confirmIsUpdate, setConfirmIsUpdate] = (0, react.useState)(false);
|
|
6969
|
+
/** Hub 自我更新指定的精确版本:连续发版时提示的是「已过供应链门禁」的旧一版,
|
|
6970
|
+
* 安装必须钉在该版本上,否则又会被 @latest 带回门禁内的最新版。 */
|
|
6971
|
+
const [confirmPinVersion, setConfirmPinVersion] = (0, react.useState)(null);
|
|
6722
6972
|
/** 命令行安装确认弹窗:记录待安装的裸目标(npm 包名)——
|
|
6723
6973
|
* 与应用商店同一套确认/进度/结果弹窗,提供时 plugin 传 null 走 customTarget 模式 */
|
|
6724
6974
|
const [confirmCustomTarget, setConfirmCustomTarget] = (0, react.useState)(null);
|
|
@@ -7074,6 +7324,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7074
7324
|
onInstall: (p, opts) => {
|
|
7075
7325
|
setInstallDone(false);
|
|
7076
7326
|
setConfirmIsUpdate(opts?.update ?? false);
|
|
7327
|
+
setConfirmPinVersion(null);
|
|
7077
7328
|
queue.clearModalTask();
|
|
7078
7329
|
setConfirmPlugin(p);
|
|
7079
7330
|
},
|
|
@@ -7099,6 +7350,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7099
7350
|
setDetailItem(null);
|
|
7100
7351
|
setInstallDone(false);
|
|
7101
7352
|
setConfirmIsUpdate(true);
|
|
7353
|
+
setConfirmPinVersion(null);
|
|
7102
7354
|
queue.clearModalTask();
|
|
7103
7355
|
setConfirmPlugin(item.plugin);
|
|
7104
7356
|
},
|
|
@@ -7149,7 +7401,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7149
7401
|
openSection: settingsSection,
|
|
7150
7402
|
onConsumedOpenSection: () => setSettingsSection(null)
|
|
7151
7403
|
}), showHubUpdate && (0, react.createElement)(HubUpdateModal, {
|
|
7152
|
-
info: catalog.hubUpdateInfo ?? { version: "2.0
|
|
7404
|
+
info: catalog.hubUpdateTarget ?? catalog.hubUpdateInfo ?? { version: "2.2.0" },
|
|
7153
7405
|
state: catalog.hubUpdateState,
|
|
7154
7406
|
currentVersion: catalog.hubCurrentVersion,
|
|
7155
7407
|
lang,
|
|
@@ -7160,6 +7412,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7160
7412
|
if (hubEntry) {
|
|
7161
7413
|
setInstallDone(false);
|
|
7162
7414
|
setConfirmIsUpdate(true);
|
|
7415
|
+
setConfirmPinVersion(catalog.hubUpdateTarget?.version ?? null);
|
|
7163
7416
|
queue.clearModalTask();
|
|
7164
7417
|
setConfirmPlugin(hubEntry);
|
|
7165
7418
|
}
|
|
@@ -7191,6 +7444,7 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7191
7444
|
setShowNotifications(false);
|
|
7192
7445
|
setInstallDone(false);
|
|
7193
7446
|
setConfirmIsUpdate(true);
|
|
7447
|
+
setConfirmPinVersion(null);
|
|
7194
7448
|
queue.clearModalTask();
|
|
7195
7449
|
setConfirmPlugin(plugin);
|
|
7196
7450
|
},
|
|
@@ -7249,7 +7503,10 @@ window.__ModuleLoader__.load({ id: "dsh-plugin", factory: (require) => {
|
|
|
7249
7503
|
if (reload) window.location.reload();
|
|
7250
7504
|
},
|
|
7251
7505
|
onCopy: () => copyCommand(confirmPlugin),
|
|
7252
|
-
onInstall: () => queue.installNow(confirmPlugin, confirmIsUpdate ? {
|
|
7506
|
+
onInstall: () => queue.installNow(confirmPlugin, confirmIsUpdate ? {
|
|
7507
|
+
update: true,
|
|
7508
|
+
pinVersion: confirmPinVersion ?? void 0
|
|
7509
|
+
} : void 0),
|
|
7253
7510
|
onRestart: () => setShowRestartConfirm(true)
|
|
7254
7511
|
}), confirmCustomTarget && (0, react.createElement)(InstallModal, {
|
|
7255
7512
|
plugin: null,
|