dsh-plugin 1.6.12 → 2.0.1
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 +13 -13
- package/README.md +13 -13
- package/client/client.js +791 -761
- package/client/client.js.map +1 -1
- package/lib/http/catalog.js +2 -3
- package/lib/http/diagnostics.js +6 -7
- package/lib/http/install.js +47 -213
- package/lib/http/logs.js +1 -2
- package/lib/http/npm-release-age.js +42 -0
- package/lib/http/routes.js +8 -7
- package/lib/http/settings.js +2 -2
- package/lib/http/shared.js +2 -2
- package/lib/http/task.js +1 -2
- package/lib/index.js +5 -6
- package/lib/services/install/install-types.js +4 -4
- package/lib/services/install/install.js +1 -1
- package/lib/services/install/npm-check.js +3 -2
- package/lib/services/install/npm-resolve.js +9 -96
- package/lib/services/install/operation-log.js +53 -1
- package/lib/services/install/package-entry.js +6 -11
- package/lib/services/install/registry-check.js +2 -2
- package/lib/services/install/release-target.js +8 -9
- package/lib/services/install/task-queue.js +44 -48
- package/lib/services/npm-release-age.js +119 -0
- package/lib/services/probe.js +4 -4
- package/lib/services/profile/installed-versions.js +15 -21
- package/lib/services/profile/profile.js +16 -44
- package/lib/services/profile/progress.js +8 -11
- package/lib/services/settings.js +2 -5
- package/lib/types/http/catalog.d.ts +1 -1
- package/lib/types/http/install.d.ts +2 -2
- package/lib/types/http/npm-release-age.d.ts +2 -0
- package/lib/types/http/routes.d.ts +10 -12
- package/lib/types/http/shared.d.ts +5 -6
- package/lib/types/index.d.ts +7 -8
- package/lib/types/services/install/install-types.d.ts +12 -13
- package/lib/types/services/install/install.d.ts +1 -1
- package/lib/types/services/install/npm-resolve.d.ts +4 -16
- package/lib/types/services/install/operation-log.d.ts +9 -0
- package/lib/types/services/install/package-entry.d.ts +6 -11
- package/lib/types/services/install/release-target.d.ts +7 -8
- package/lib/types/services/install/task-queue.d.ts +25 -30
- package/lib/types/services/npm-release-age.d.ts +15 -0
- package/lib/types/services/probe.d.ts +4 -4
- package/lib/types/services/profile/installed-versions.d.ts +5 -7
- package/lib/types/services/profile/profile.d.ts +14 -18
- package/lib/types/services/profile/progress.d.ts +7 -10
- package/lib/types/services/settings.d.ts +0 -4
- package/package.json +1 -1
- package/src/client/components/PluginHubSection.tsx +26 -22
- package/src/client/components/catalog/CatalogList.tsx +2 -4
- package/src/client/components/catalog/PluginCard.tsx +2 -3
- package/src/client/components/layout/CatalogControls.tsx +5 -6
- package/src/client/components/layout/CatalogHeader.tsx +1 -2
- package/src/client/components/layout/CategoryTabs.tsx +2 -3
- package/src/client/components/layout/SectionTabs.tsx +3 -5
- package/src/client/components/modals/ConfirmDialog.tsx +4 -6
- package/src/client/components/modals/InstalledDetailModal.tsx +3 -6
- package/src/client/components/modals/LogsModal.tsx +7 -12
- package/src/client/components/modals/NotificationsModal.tsx +74 -24
- package/src/client/components/modals/ProgressView.tsx +3 -4
- package/src/client/components/modals/modals.tsx +75 -26
- package/src/client/components/ui/Dropdown.tsx +4 -6
- package/src/client/components/ui/Toggle.tsx +2 -3
- package/src/client/components/ui/icons.tsx +1 -2
- package/src/client/components/views/CustomInstallView.tsx +20 -178
- package/src/client/components/views/DiagnosticsView.tsx +3 -6
- package/src/client/components/views/InstalledView.tsx +6 -11
- package/src/client/components/views/MarketView.tsx +2 -4
- package/src/client/components/views/SettingsView.tsx +9 -32
- package/src/client/css-modules.d.ts +1 -1
- package/src/client/data/catalog.ts +2 -3
- package/src/client/data/host.ts +26 -3
- package/src/client/data/hub.ts +2 -3
- package/src/client/hooks/useCatalog.ts +79 -24
- package/src/client/hooks/useIncrementalList.ts +3 -5
- package/src/client/hooks/useLanguage.ts +4 -6
- package/src/client/hooks/useSettings.ts +4 -11
- package/src/client/hooks/useTaskQueue.ts +36 -42
- package/src/client/index.tsx +2 -3
- package/src/client/locales.ts +187 -114
- package/src/client/logic/constants.ts +1 -2
- package/src/client/logic/ensure-plugin-css.ts +8 -12
- package/src/client/logic/failures.ts +20 -19
- package/src/client/logic/format.ts +1 -1
- package/src/client/logic/install-command.ts +14 -35
- package/src/client/logic/installed.ts +15 -10
- package/src/client/logic/normalize.ts +3 -3
- package/src/client/logic/release-age.ts +19 -0
- package/src/client/logic/urls.ts +24 -21
- package/src/client/styles/CustomInstallView.module.css +3 -30
- package/src/client/styles/DiagnosticsView.module.css +3 -5
- package/src/client/styles/Dropdown.module.css +2 -4
- package/src/client/styles/Header.module.css +6 -7
- package/src/client/styles/InstalledView.module.css +4 -7
- package/src/client/styles/List.module.css +4 -5
- package/src/client/styles/LogsView.module.css +2 -3
- package/src/client/styles/Modal.module.css +46 -6
- package/src/client/styles/SectionTabs.module.css +2 -4
- package/src/client/styles/SettingsView.module.css +3 -5
- package/src/client/styles/Toggle.module.css +2 -4
- package/src/client/styles/tokens.module.css +14 -18
- package/src/client/types.ts +11 -11
- package/src/server/http/catalog.ts +2 -3
- package/src/server/http/diagnostics.ts +6 -7
- package/src/server/http/install.ts +47 -208
- package/src/server/http/logs.ts +1 -2
- package/src/server/http/npm-release-age.ts +42 -0
- package/src/server/http/routes.ts +12 -12
- package/src/server/http/settings.ts +2 -2
- package/src/server/http/shared.ts +5 -6
- package/src/server/http/task.ts +1 -2
- package/src/server/index.ts +7 -8
- package/src/server/services/install/install-types.ts +12 -13
- package/src/server/services/install/install.ts +0 -1
- package/src/server/services/install/npm-check.ts +3 -2
- package/src/server/services/install/npm-resolve.ts +9 -99
- package/src/server/services/install/operation-log.ts +47 -1
- package/src/server/services/install/package-entry.ts +6 -11
- package/src/server/services/install/registry-check.ts +2 -2
- package/src/server/services/install/release-target.ts +8 -9
- package/src/server/services/install/task-queue.ts +51 -54
- package/src/server/services/npm-release-age.ts +107 -0
- package/src/server/services/probe.ts +4 -4
- package/src/server/services/profile/installed-versions.ts +16 -22
- package/src/server/services/profile/profile.ts +16 -42
- package/src/server/services/profile/progress.ts +8 -11
- package/src/server/services/settings.ts +2 -9
- package/lib/services/install/preflight.js +0 -178
- package/lib/types/services/install/preflight.d.ts +0 -23
- package/src/server/services/install/preflight.ts +0 -184
package/src/client/locales.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Website: https://dsh-plugin.org
|
|
4
4
|
* GitHub: https://github.com/dshplugin/dsh-plugin-hub
|
|
5
5
|
*
|
|
6
|
-
* zh/en
|
|
6
|
+
* 插件中心设置板块的 zh/en 字典。
|
|
7
7
|
*/
|
|
8
8
|
export const zh = {
|
|
9
9
|
nav: '插件市场',
|
|
@@ -47,39 +47,26 @@ export const zh = {
|
|
|
47
47
|
viewSettings: '设置',
|
|
48
48
|
viewMarketHint: '浏览与发现插件',
|
|
49
49
|
viewInstalledHint: '管理已安装插件',
|
|
50
|
-
viewCustomHint: '手动安装 NPM
|
|
50
|
+
viewCustomHint: '手动安装 NPM 包',
|
|
51
51
|
viewSettingsHint: '网络通道与偏好设置',
|
|
52
52
|
// 已安装视图
|
|
53
53
|
installedEmpty: '还没有安装插件',
|
|
54
|
-
installedEmptyDesc: '可以去「自定义安装」,手动安装 NPM
|
|
54
|
+
installedEmptyDesc: '可以去「自定义安装」,手动安装 NPM 包',
|
|
55
55
|
npmInstallLabel: 'NPM 包 / 命令',
|
|
56
56
|
npmInstallPlaceholder: 'npm install <包名> 或直接输包名',
|
|
57
57
|
npmInstallExample: '支持原生命令:npm install lodash、npm i lodash、pnpm add @scope/pkg',
|
|
58
58
|
npmInstallExample2: '全局安装 CLI:npm install -g @scope/cli;或直接输入包名 lodash',
|
|
59
59
|
npmInstallInvalid: '请输入 npm 包名(如 lodash、@scope/pkg),或原生安装命令(如 npm install lodash、npm i lodash、pnpm add @scope/pkg、npm install -g @scope/cli)',
|
|
60
|
-
gitInstallLabel: 'GitHub 源码',
|
|
61
|
-
gitInstallPlaceholder: '输入仓库地址',
|
|
62
|
-
gitInstallExample: '例如:owner/repo 或 https://github.com/owner/repo',
|
|
63
|
-
gitInstallInvalid: '请输入 GitHub 仓库地址,例如:owner/repo 或 https://github.com/owner/repo',
|
|
64
|
-
dshCmdLabel: 'DeepSeek Harness 命令',
|
|
65
|
-
dshCmdPlaceholder: '粘贴官方 dsh plugin 命令',
|
|
66
|
-
dshCmdInsertHubUpdate: '插入更新命令',
|
|
67
|
-
// 示例/校验文案里的 profile 用运行时当前宿主 profile 渲染({profile} 占位符),
|
|
68
|
-
// 不写死 web —— 桌面端当前 profile 是 desktop,照抄写死的 web 会装进宿主永不加载的档
|
|
69
|
-
dshCmdExample: '例如:dsh plugin --profile {profile} add github:owner/repo,或 dsh plugin --profile {profile} update dsh-plugin',
|
|
70
|
-
dshCmdInvalid: '请输入官方 dsh plugin 命令(--profile 必填,支持 add / update)。例如:dsh plugin --profile {profile} update dsh-plugin',
|
|
71
60
|
installHelp: '帮助',
|
|
72
61
|
helpModalTitle: '支持的命令格式',
|
|
73
62
|
npmInstallHelp: 'lodash、@scope/pkg\t直接输入包名\nnpm install lodash\nnpm i lodash\npnpm add @scope/pkg\npnpm i @scope/pkg\nnpm install -g @scope/cli\t全局安装 CLI 工具,不进「已安装」列表',
|
|
74
|
-
gitInstallHelp: 'owner/repo\nhttps://github.com/owner/repo\ngithub:owner/repo\ngit+https://github.com/owner/repo.git\ngit@github.com:owner/repo.git',
|
|
75
|
-
dshCmdHelp: 'dsh plugin --profile {profile} add <目标>\t安装\ndsh plugin --profile {profile} update <目标>\t更新已安装目标到最新版本\ndsh plugin --profile={profile} add <目标>\ndsh plugin --profile={profile} update <目标>\n\t--profile 必填(此处已填当前 profile),官方 CLI 无 -p 简写;<目标> 可为 npm 包名或 github:owner/repo;卸载请用「已安装」列表',
|
|
76
63
|
globalNpmHint: '将全局安装 CLI 工具(npm install -g),不会出现在「已安装」列表,无需重启宿主',
|
|
77
64
|
installCliBtn: '安装',
|
|
78
65
|
// 安装通道关闭(安全信任开关关掉后,对应卡片禁用并引导去设置打开)
|
|
79
66
|
channelDisabledHint: '该安装通道已关闭,请在「设置 → 安全信任」中打开开关',
|
|
80
67
|
goToSettings: '前往设置',
|
|
81
68
|
// 自定义安装视图:独立一级导航,说明文字
|
|
82
|
-
customViewDesc: '手动安装目录外的 NPM
|
|
69
|
+
customViewDesc: '手动安装目录外的 NPM 包。装完的条目会出现在「已安装」列表,并标记为自定义安装。',
|
|
83
70
|
customLabel: '自定义安装',
|
|
84
71
|
installedSearch: '搜索已安装的插件…',
|
|
85
72
|
installedFilterCatalog: '目录插件',
|
|
@@ -134,13 +121,9 @@ export const zh = {
|
|
|
134
121
|
mirrorTencent: '腾讯云镜像',
|
|
135
122
|
mirrorTsinghua: '清华大学 TUNA 镜像',
|
|
136
123
|
settingsSecurity: '安全信任',
|
|
137
|
-
settingsSecurityDesc: '
|
|
124
|
+
settingsSecurityDesc: '命令行安装的开关:NPM 包',
|
|
138
125
|
settingsEnableNpm: '启用 NPM 安装',
|
|
139
126
|
settingsEnableNpmDesc: '允许通过命令行安装 npm 包;关闭后输入包名安装会被拦截',
|
|
140
|
-
settingsEnableGit: '启用 GitHub 源码安装',
|
|
141
|
-
settingsEnableGitDesc: '允许通过命令行安装 GitHub 源码;关闭后输入仓库地址安装会被拦截',
|
|
142
|
-
settingsEnableDsh: '启用 DSH 命令安装',
|
|
143
|
-
settingsEnableDshDesc: '允许通过命令行粘贴 dsh plugin 命令安装;关闭后命令输入会被禁用',
|
|
144
127
|
settingsDiagnostics: '系统诊断',
|
|
145
128
|
settingsDiagnosticsDesc: '检测 npm 源 / GitHub / 目录站点等安装通道的连通状态',
|
|
146
129
|
settingsLogs: '系统日志',
|
|
@@ -319,7 +302,7 @@ export const zh = {
|
|
|
319
302
|
failCopy: '复制完整错误信息',
|
|
320
303
|
failIssueHint: '带着错误日志去作者仓库一键提交 Issue(正文含官网收录链接)',
|
|
321
304
|
failIssueBig: '一键提交 BUG 到 GitHub Issue 为开源作贡献',
|
|
322
|
-
//
|
|
305
|
+
// 非插件侧失败(未知原因)改为引导到插件中心仓库排查
|
|
323
306
|
failHubIssueHint: '此失败已被判定为环境或插件中心自身问题(非插件作者问题),带着错误日志到插件中心仓库一键提交 Issue',
|
|
324
307
|
failHubIssueBig: '反馈给插件中心排查',
|
|
325
308
|
// 未知失败兜底:不归到插件作者,引导到插件中心仓库排查
|
|
@@ -331,20 +314,21 @@ export const zh = {
|
|
|
331
314
|
failProfileLockHint: 'DSH 在写入插件清单时等不到文件锁、超时中止 —— 通常是同时有另一个 DSH 进程或安装任务在写同一个 profile(也可能是上一次的进程没退干净留下的锁)。请先关掉其他 dsh 窗口或正在跑的命令,再重试一次;若反复出现,重启一次 DSH。这不是插件本身的问题,也不需要重复{action}。',
|
|
332
315
|
// 宿主自身入口起不来:环境问题,给提示、不引导提 Issue
|
|
333
316
|
failHostCliSpawnHint: 'DSH 没能启动自身来完成这次操作(系统报「找不到可执行文件」):通常是因为 DSH 的安装目录被移动或正在更新,或该 profile 目录还不存在。请重启一次 DSH 后重试;若反复出现,重新安装 DSH。这不是插件本身的问题,换别的插件也一样。',
|
|
334
|
-
// prepare
|
|
335
|
-
failPrepareHint: '该插件安装时的构建脚本执行失败(
|
|
336
|
-
//
|
|
317
|
+
// prepare 构建脚本实际执行失败:插件打包分发问题,应提 Issue
|
|
318
|
+
failPrepareHint: '该插件安装时的构建脚本执行失败(npm 分发物不完整),属插件打包分发问题。请向作者仓库提交 Issue 反馈。',
|
|
319
|
+
// 「插件打包问题」分支的次要入口:该判据由插件中心自己的装后校验产出(不是 pnpm 原文),
|
|
337
320
|
// 一旦误报,用户会被引导去作者仓库、插件中心永远收不到反馈 —— 故留一条反馈路径
|
|
338
321
|
failMisjudgeHint: '如果这个插件其实能正常安装(上面这个判定是插件中心误报的),请反馈给插件中心:文字提示里的判据由市场自身产出,误报只有靠你的反馈才能被发现。',
|
|
339
322
|
failMisjudgeLink: '插件能装却被拦下?反馈给插件中心',
|
|
340
|
-
//
|
|
341
|
-
failPackagingHint: '
|
|
342
|
-
// 原生依赖构建脚本被 pnpm 默认拦截(如 node-pty 的 ERR_PNPM_IGNORED_BUILDS
|
|
343
|
-
|
|
323
|
+
// 装后校验拦截([packaging]):npm 分发物缺插件需要的文件(入口 / 补丁 mount 的入口 / bundle 补丁)= 插件分发不完整
|
|
324
|
+
failPackagingHint: '该插件的 npm 分发物不完整:缺少它需要的文件(`main` / `exports` 声明的入口、补丁按本包名 mount 的入口,或 `dsh.bundle.patch` 声明的补丁)。请到作者仓库提交 Issue 反馈,请其发布包含完整构建产物的 npm 包。',
|
|
325
|
+
// 原生依赖构建脚本被 pnpm 默认拦截(如 node-pty 的 ERR_PNPM_IGNORED_BUILDS):插件的依赖需在用户机器上编译原生模块,
|
|
326
|
+
// 自动放行 allowBuilds 重试一次仍失败即任何用户都装不上 —— 属作者侧,引导到作者仓库提 Issue
|
|
327
|
+
failIgnoredBuild: '该插件(或其依赖)需要在安装时执行构建脚本,被 pnpm 的安全白名单(allowBuilds)默认拦截,本次操作因此失败(如原生模块 node-pty,或 git 安装时插件自己的 prepare 脚本)。安装器已自动放行该 key 并重试过一次;仍失败说明构建本身没通过、任何用户都装不上。可先在终端手动执行一次安装命令查看完整构建错误;这属插件的构建/分发问题,请到作者仓库反馈:建议作者预置构建产物、发布含构建产物的 npm 包或提供预构建 .tgz。',
|
|
344
328
|
// npm arborist 内部崩溃(edgesOut)+ 本机 npm 版本过低:npm 自身已知缺陷,不是插件问题,升级 npm 即可
|
|
345
329
|
failNpmTooLow: '怀疑本机 npm 版本过低:npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest',
|
|
346
330
|
failNpmTooLowV: '本机 npm 版本过低(当前 v{v}):npm 解析插件依赖时内部崩溃(这是 npm 自身的已知缺陷,不是插件问题)。请升级 npm 后重试:npm install -g npm@latest',
|
|
347
|
-
//
|
|
331
|
+
// 安装前连通性探测 / 安装日志里的连接失败([network] / 连接超时 / DNS / TLS):本机网络或代理问题,不是插件问题,不引导提 Issue
|
|
348
332
|
failNetworkHint: '{action}前检测到网络不通:无法连接到安装源(可能是断网、DNS 解析失败、被防火墙拦截,或代理配置有问题)。这不是插件本身的问题 —— 请检查网络连接,或到「设置」里确认 HTTP 代理配置,再到「系统诊断」运行一次连通性检测,然后重试。',
|
|
349
333
|
// 网络失败弹窗里的「无法访问 …」醒目行:直接告诉用户具体哪个地址连不上({url} 为提取的不可达地址)
|
|
350
334
|
failNetworkRegistryHint: '你的 npm/pnpm 源(registry)被配置为 {host},插件包需从该源下载但失败了。这通常是内网/自定义源没有同步该包(或需要内网认证)—— 请把 npm/pnpm 的 registry 指回官方源 https://registry.npmjs.org(或确认此源可访问该包)后重试。',
|
|
@@ -366,6 +350,62 @@ export const zh = {
|
|
|
366
350
|
failRegistryMirrorLagHint: '安装器调用 pnpm 时报「包不存在」(ERR_PNPM_FETCH_404):该包在官方 npm 源上是有的,但你本机配置的 npm/pnpm 源(registry 或镜像)没有同步到它。请把 npm/pnpm 的 registry 指回官方源 https://registry.npmjs.org(或换一个已同步该包的镜像)后重试。这不是插件本身的问题。',
|
|
367
351
|
failPluginMissingDepTarget: '{pkg} 在官方 npm 源上不存在',
|
|
368
352
|
failPluginMissingDepHint: '该插件依赖的包在官方 npm 源上并不存在(已删除或从未发布):这是插件作者侧的依赖问题,不是你环境的问题。请向插件作者仓库反馈,请作者补上或修正该依赖,或改为随插件一起分发。',
|
|
353
|
+
failHostIncompatibleKind: '插件不支持当前的 DSH 版本',
|
|
354
|
+
failHostIncompatibleReason: '当前 DSH {version} 不在该插件的兼容清单里,宿主在安装前就拒绝了 —— 什么都没装。',
|
|
355
|
+
failHostIncompatibleHint: '① 请作者把该版本加入兼容清单后发新版(下方按钮直达作者仓库)\n② 在桌面应用的插件管理器里为这个精确版本授权(宿主会提示崩溃/数据风险)',
|
|
356
|
+
// 统一失败卡片头部:报错类型标题 + 一句话原因(每类各自的详细指引见 fail*Hint)
|
|
357
|
+
failKind_npmTooOld: '本机 npm 版本过低',
|
|
358
|
+
failReason_npmTooOld: '当前 npm 版本处理不了这个包的依赖树,安装被中断。',
|
|
359
|
+
failKind_dshMissing: '本机缺少 dsh',
|
|
360
|
+
failReason_dshMissing: '安装器需要调用 dsh,但在你的机器上找不到它。',
|
|
361
|
+
failKind_gitMissing: '本机缺少 git',
|
|
362
|
+
failReason_gitMissing: '这个包的依赖需要 git,但机器上找不到 git。',
|
|
363
|
+
failKind_pnpmMissing: '本机缺少 pnpm',
|
|
364
|
+
failReason_pnpmMissing: '安装器通过 pnpm 安装插件,但机器上找不到 pnpm。',
|
|
365
|
+
failKind_npmMissing: '本机缺少 npm',
|
|
366
|
+
failReason_npmMissing: '安装流程需要 npm,但机器上找不到它。',
|
|
367
|
+
failKind_pnpmStore: 'pnpm store 版本不匹配',
|
|
368
|
+
failReason_pnpmStore: 'profile 里的依赖由另一大版本的 pnpm 生成,当前 pnpm 不认。',
|
|
369
|
+
failKind_pnpmWorkspace: 'workspace 根校验阻止了安装',
|
|
370
|
+
failReason_pnpmWorkspace: 'profile 被当作 workspace 根,但没有声明根操作,pnpm 中止了安装。',
|
|
371
|
+
failKind_originRejected: '本地服务的来源校验未通过',
|
|
372
|
+
failReason_originRejected: '请求根本没进安装流程:本地服务拒绝了它的来源。',
|
|
373
|
+
failKind_pnpmPolicy: '被 pnpm 供应链策略拦截',
|
|
374
|
+
failReason_pnpmPolicy: '版本未满最小发布年龄,或缺完整性校验 / 来源不可信。',
|
|
375
|
+
failKind_pnpmUnusedPatch: 'profile 残留旧补丁声明',
|
|
376
|
+
failReason_pnpmUnusedPatch: 'profile 里留着指向旧版本 dsh-plugin 的补丁,pnpm 出于安全中止了安装。',
|
|
377
|
+
failKind_pnpmMissingDep: '依赖包在 registry 上不存在',
|
|
378
|
+
failReason_pnpmMissingDep: 'profile 里有一条指向未发布包的依赖,pnpm 每次解析都卡在它上面。',
|
|
379
|
+
failKind_pluginMissingDep: '插件依赖未发布',
|
|
380
|
+
failReason_pluginMissingDep: '插件声明依赖的包在官方 npm 源上不存在(已删除或从未发布)。',
|
|
381
|
+
failKind_registryVersionStale: '该版本在所用源上不存在',
|
|
382
|
+
failReason_registryVersionStale: '实际安装用的源还没同步到这个版本,或版本号写错。',
|
|
383
|
+
failKind_pnpmLinkedDirMissing: 'profile 里有失效的本地依赖',
|
|
384
|
+
failReason_pnpmLinkedDirMissing: '有一条指向本机不存在目录的 link/file 依赖,pnpm 每次解析都卡住。',
|
|
385
|
+
failKind_fileLocked: '文件被其他程序占用',
|
|
386
|
+
failReason_fileLocked: 'pnpm 无法替换 profile 里的文件:有程序正持有它。',
|
|
387
|
+
failKind_accessDenied: '没有写入权限',
|
|
388
|
+
failReason_accessDenied: '系统拒绝 pnpm 写入 profile 里的文件。',
|
|
389
|
+
failKind_fsUnavailable: '磁盘不可写',
|
|
390
|
+
failReason_fsUnavailable: '磁盘已满、处于只读,或文件句柄耗尽。',
|
|
391
|
+
failKind_pnpmIgnoredBuild: '原生模块构建被拦截',
|
|
392
|
+
failReason_pnpmIgnoredBuild: '插件依赖需要在你的机器上现场编译,pnpm 默认拦住构建脚本。',
|
|
393
|
+
failKind_pluginPrepare: '插件分发不完整',
|
|
394
|
+
failReason_pluginPrepare: '作者发布的包里缺文件,或构建脚本执行失败。',
|
|
395
|
+
failKind_hostIncompatible: '插件不支持当前的 DSH 版本({version})',
|
|
396
|
+
failReason_hostIncompatible: '插件声明的兼容清单里没有你正在运行的 DSH 版本。',
|
|
397
|
+
failKind_network: '网络连接失败',
|
|
398
|
+
failReason_network: '安装过程中连不上 npm 源或代理,请求没有完成。',
|
|
399
|
+
failKind_hostCliSpawn: '无法启动 DSH 宿主',
|
|
400
|
+
failReason_hostCliSpawn: '解析到的宿主入口起不来,安装命令没有真正执行。',
|
|
401
|
+
failKind_hubState: '插件中心状态不同步',
|
|
402
|
+
failReason_hubState: '本地记录的安装状态与实际不一致,这次操作没有生效。',
|
|
403
|
+
failKind_timeout: '操作超时',
|
|
404
|
+
failReason_timeout: '安装耗时超过上限仍未完成,已经中止。',
|
|
405
|
+
failKind_profileLock: 'profile 被其他进程占用',
|
|
406
|
+
failReason_profileLock: '另一个 dsh 进程正在使用这个 profile。',
|
|
407
|
+
failKind_hub: '出现未知错误',
|
|
408
|
+
failReason_hub: '我们还没能识别这条报错,你可以一键反馈给我们。',
|
|
369
409
|
failRegistryVersionStaleHint: '安装器调用 pnpm 时报「找不到匹配的版本」(ERR_PNPM_NO_MATCHING_VERSION):要装的这个版本在实际执行安装的 npm 源里查不到。常见原因是你设置的 npmRegistry 与本机 ~/.npmrc 用的不是同一个源——官方源刚发布、镜像还没同步上来(快则几分钟、慢则几小时),也可能只是版本号写错了。这不是插件本身的问题。可在插件市场设置里把 npmRegistry 改成与本机 ~/.npmrc 一致(或反过来),或那一次显式走官方源(https://registry.npmjs.org)、改用离线包后重试;若该版本刚发布不久,等镜像同步后重试即可。',
|
|
370
410
|
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 条目或整个锁文件),或把该目录恢复回原路径后重试。',
|
|
371
411
|
failFileLockedHint: '安装过程中 pnpm 无法替换 profile 里的文件:有程序正占用着它(Windows 常见报错 os error 32「另一个程序正在使用此文件」)。通常是 DeepSeek Harness 自身或杀毒软件的实时扫描持有文件句柄。这不是插件本身的问题——请完全退出 DeepSeek Harness(Windows 可在任务管理器确认进程已结束,必要时临时关闭杀毒软件实时防护)后重试。',
|
|
@@ -377,10 +417,8 @@ export const zh = {
|
|
|
377
417
|
// minimumReleaseAge 专属:从报错里算出确切的可重试时刻({time}),让用户知道「何时能再装」,
|
|
378
418
|
// 而不是笼统地让等 24 小时
|
|
379
419
|
failPnpmReleaseAgeHint: '安装器调用 pnpm 时被其供应链安全策略拦住了,任何插件装进这个 profile 都会先撞上它——与插件本身无关。原因是这个包发布还不满 24 小时,pnpm 11 出于安全会拒收刚发布的新包,这段时间内该 profile 的安装与卸载都会被拦下。可重试时间:{time}(即该包发布满 24 小时后)。如确需立刻安装,可在 profile 目录(~/.dsh/profiles/<profile>)的 pnpm-workspace.yaml 里加 minimumReleaseAge: 0 豁免,但这会放宽整个 profile 的供应链保护。',
|
|
380
|
-
//
|
|
420
|
+
// 自定义安装入口的渠道名(报错/日志溯源:本次安装从哪个入口发起)
|
|
381
421
|
installChannelNpm: 'NPM 包',
|
|
382
|
-
installChannelGit: 'GitHub 源码',
|
|
383
|
-
installChannelDsh: 'DSH 命令',
|
|
384
422
|
// 报错/通知中心的入口溯源行:前缀在错误正文顶部,精准指出自定义安装是从哪张卡片发起的
|
|
385
423
|
installEntryLine: '安装入口:{c}。',
|
|
386
424
|
reportIssue: '去插件仓库提交 Issue',
|
|
@@ -427,7 +465,7 @@ export const zh = {
|
|
|
427
465
|
export const en = {
|
|
428
466
|
nav: 'Plugin Hub',
|
|
429
467
|
title: 'DSH Plugin Hub',
|
|
430
|
-
//
|
|
468
|
+
// 收录/精选数量由组件从实时 /api/stats.json({total}/{verified})填充,不写死
|
|
431
469
|
tagline: 'DSH Plugin Hub: a human-verified, free marketplace for DeepSeek Harness plugins',
|
|
432
470
|
adBadge: 'Featured',
|
|
433
471
|
ad: 'DSH Plugin Hub: {total} plugins indexed, {verified} human-verified, updated daily',
|
|
@@ -444,59 +482,48 @@ export const en = {
|
|
|
444
482
|
fork: 'Fork',
|
|
445
483
|
loading: 'Loading plugin data…',
|
|
446
484
|
failed: 'Failed to load plugin data',
|
|
447
|
-
//
|
|
485
|
+
// 目录加载失败时的精准提示:按是否配置了代理区分
|
|
448
486
|
failedDescNoProxy: 'Your network seems unreachable, so the plugin catalog could not be loaded. Please check your connection and retry; or open the hub in your browser with the button above.',
|
|
449
487
|
failedDescProxy: 'Your network seems unreachable, or the HTTP proxy in Settings is unreachable, so the plugin catalog could not be loaded. Please check the proxy address and your connection, then retry; or open the hub in your browser with the button above.',
|
|
450
488
|
retry: 'Retry',
|
|
451
489
|
install: 'Install',
|
|
452
|
-
//
|
|
453
|
-
//
|
|
454
|
-
|
|
490
|
+
// 需在终端手动安装的插件(webInstallable=false):两种情形共用一套措辞 ——
|
|
491
|
+
// 网页端完全跑不了该命令(npx 安装器 / 本地 link),或能跑但装机过程要在终端完成
|
|
492
|
+
//(仓库带 prepare 构建钩子、需要装配子目录)。
|
|
455
493
|
cliOnlyHint: 'This plugin has to be installed in your dsh terminal (the web UI cannot run the build or assembly steps it needs) — copy the command above and run it there',
|
|
456
|
-
//
|
|
457
|
-
//
|
|
494
|
+
// 人工干预标记(manualInstall):安装要在终端里跑构建/分步装配,网页一键安装替不了终端。
|
|
495
|
+
// 注意 key 不能叫 manualInstallHint —— 那个是「已安装」页来源筛选的文案(目录插件 / 手动安装)。
|
|
458
496
|
manualInstallOnlyHint: 'This plugin has to be installed by hand in your dsh terminal — one-click install from the web UI cannot run the build and assembly steps it needs. Copy the command above and run it there (Git Bash or PowerShell on Windows, Terminal on macOS/Linux); the author\'s repo has the full steps.',
|
|
459
497
|
failedCopyHint: 'Install failed. Copy the command above and run it manually in your dsh terminal (native build scripts may need manual approval, e.g. pnpm approve-builds)',
|
|
460
498
|
toastCopied: 'Install command copied — paste it in your dsh terminal',
|
|
461
499
|
installed: 'Installed',
|
|
462
|
-
//
|
|
500
|
+
// 一级导航:插件市场 / 已安装 / 自定义安装 / 设置
|
|
463
501
|
viewMarket: 'Market',
|
|
464
502
|
viewInstalled: 'Installed',
|
|
465
503
|
viewCustom: 'Custom',
|
|
466
504
|
viewSettings: 'Settings',
|
|
467
505
|
viewMarketHint: 'Browse and discover plugins',
|
|
468
506
|
viewInstalledHint: 'Manage installed plugins',
|
|
469
|
-
viewCustomHint: 'Install npm packages
|
|
507
|
+
viewCustomHint: 'Install npm packages manually',
|
|
470
508
|
viewSettingsHint: 'Network sources and preferences',
|
|
471
|
-
//
|
|
509
|
+
// 已安装视图
|
|
472
510
|
installedEmpty: 'No plugins installed yet',
|
|
473
|
-
installedEmptyDesc: 'Go to Custom to add an npm package
|
|
511
|
+
installedEmptyDesc: 'Go to Custom to add an npm package manually',
|
|
474
512
|
npmInstallLabel: 'npm package / command',
|
|
475
513
|
npmInstallPlaceholder: 'npm install <pkg> or a bare package name',
|
|
476
514
|
npmInstallExample: 'Native commands: npm install lodash, npm i lodash, pnpm add @scope/pkg',
|
|
477
515
|
npmInstallExample2: 'Global CLI: npm install -g @scope/cli; or just type a package name like lodash',
|
|
478
516
|
npmInstallInvalid: 'Enter an npm package name (e.g. lodash, @scope/pkg), or a native install command (e.g. npm install lodash, npm i lodash, pnpm add @scope/pkg, npm install -g @scope/cli)',
|
|
479
|
-
gitInstallLabel: 'GitHub source',
|
|
480
|
-
gitInstallPlaceholder: 'Repository address',
|
|
481
|
-
gitInstallExample: 'e.g. owner/repo or https://github.com/owner/repo',
|
|
482
|
-
gitInstallInvalid: 'Enter a GitHub repository address, e.g. owner/repo or https://github.com/owner/repo',
|
|
483
|
-
dshCmdLabel: 'DeepSeek Harness command',
|
|
484
|
-
dshCmdPlaceholder: 'Paste an official dsh plugin command',
|
|
485
|
-
dshCmdInsertHubUpdate: 'Insert update command',
|
|
486
|
-
dshCmdExample: 'e.g. dsh plugin --profile {profile} add github:owner/repo, or dsh plugin --profile {profile} update dsh-plugin',
|
|
487
|
-
dshCmdInvalid: 'Paste an official dsh plugin command (--profile required, add / update), e.g. dsh plugin --profile {profile} update dsh-plugin',
|
|
488
517
|
installHelp: 'Help',
|
|
489
518
|
helpModalTitle: 'Supported command formats',
|
|
490
519
|
npmInstallHelp: 'lodash or @scope/pkg\tjust type the package name\nnpm install lodash\nnpm i lodash\npnpm add @scope/pkg\npnpm i @scope/pkg\nnpm install -g @scope/cli\tinstalls the CLI globally, not shown in Installed',
|
|
491
|
-
gitInstallHelp: 'owner/repo\nhttps://github.com/owner/repo\ngithub:owner/repo\ngit+https://github.com/owner/repo.git\ngit@github.com:owner/repo.git',
|
|
492
|
-
dshCmdHelp: 'dsh plugin --profile {profile} add <target>\tinstall\ndsh plugin --profile {profile} update <target>\tupdate an installed target to the latest version\ndsh plugin --profile={profile} add <target>\ndsh plugin --profile={profile} update <target>\n\t--profile is required (prefilled with the current profile here) and there is no -p shorthand; <target> can be an npm package or github:owner/repo; uninstall from the Installed list',
|
|
493
520
|
globalNpmHint: 'This installs CLI tools globally (npm install -g). They won\'t appear in Installed and no host restart is needed.',
|
|
494
521
|
installCliBtn: 'Install',
|
|
495
|
-
//
|
|
522
|
+
// 安装通道关闭(安全信任开关关掉后,对应卡片禁用并引导去设置打开)
|
|
496
523
|
channelDisabledHint: 'This install channel is disabled — enable it in Settings → Security & Trust',
|
|
497
524
|
goToSettings: 'Go to Settings',
|
|
498
|
-
//
|
|
499
|
-
customViewDesc: 'Manually install an npm package
|
|
525
|
+
// 自定义安装视图:独立一级导航,说明文字
|
|
526
|
+
customViewDesc: 'Manually install an npm package outside the catalog. Finished installs appear in Installed, marked as custom.',
|
|
500
527
|
customLabel: 'Custom install',
|
|
501
528
|
installedSearch: 'Search installed plugins…',
|
|
502
529
|
installedFilterCatalog: 'Catalog',
|
|
@@ -530,7 +557,7 @@ export const en = {
|
|
|
530
557
|
detailCatalog: 'View details',
|
|
531
558
|
packageName: 'Package',
|
|
532
559
|
versionUpHint: 'v{from} → v{to} available — Update reinstalls in place',
|
|
533
|
-
//
|
|
560
|
+
// 设置视图:更新与通道 / 安全与信任 / 诊断 / 系统日志
|
|
534
561
|
settingsUpdate: 'Update Settings',
|
|
535
562
|
settingsUpdateDesc: 'Update checks and the network channels used for installs',
|
|
536
563
|
settingsCheckOnStart: 'Check for updates on startup',
|
|
@@ -539,12 +566,11 @@ export const en = {
|
|
|
539
566
|
settingsAutoInstallDesc: 'Install detected updates in the background without asking (a host restart applies them)',
|
|
540
567
|
settingsProxy: 'HTTP proxy',
|
|
541
568
|
settingsProxyDesc: 'Route npm, git and catalog requests through this proxy; leave empty to connect directly',
|
|
542
|
-
//
|
|
543
|
-
// address can still be saved — users may fill it in before actually starting the proxy)
|
|
569
|
+
// 代理连通性实时探测:输入停笔后提示检测结果(不通仍可保存,先填地址后开代理也合法)
|
|
544
570
|
proxyCheckChecking: 'Testing this proxy address…',
|
|
545
571
|
proxyCheckOk: 'Reachable — installs and catalog requests will route through it',
|
|
546
572
|
proxyCheckFail: 'Unreachable, but you can still save it; make sure the proxy is running and the address and port are correct',
|
|
547
|
-
//
|
|
573
|
+
// 失败细分原因:Windows Schannel 必须取到证书吊销信息,取不到即中断握手 —— 不是代理地址不通
|
|
548
574
|
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',
|
|
549
575
|
settingsMirror: 'npm mirror',
|
|
550
576
|
settingsMirrorDesc: 'Unset by default — follows local npm config; pick a domestic mirror if slow',
|
|
@@ -554,13 +580,9 @@ export const en = {
|
|
|
554
580
|
mirrorTencent: 'Tencent Cloud mirror',
|
|
555
581
|
mirrorTsinghua: 'Tsinghua TUNA mirror',
|
|
556
582
|
settingsSecurity: 'Security & Trust',
|
|
557
|
-
settingsSecurityDesc: 'Toggles for
|
|
583
|
+
settingsSecurityDesc: 'Toggles for command-line installs: npm packages',
|
|
558
584
|
settingsEnableNpm: 'Enable npm installs',
|
|
559
585
|
settingsEnableNpmDesc: 'Allow installing npm packages from the command line; turning this off rejects package-name installs',
|
|
560
|
-
settingsEnableGit: 'Enable GitHub source installs',
|
|
561
|
-
settingsEnableGitDesc: 'Allow installing from GitHub sources on the command line; turning this off rejects repository-address installs',
|
|
562
|
-
settingsEnableDsh: 'Enable DSH command installs',
|
|
563
|
-
settingsEnableDshDesc: 'Allow pasting a dsh plugin command to install; turning this off disables the command input',
|
|
564
586
|
settingsDiagnostics: 'System Diagnostics',
|
|
565
587
|
settingsDiagnosticsDesc: 'Check the connectivity of install channels: npm registry, GitHub and the catalog site',
|
|
566
588
|
settingsLogs: 'System Logs',
|
|
@@ -571,7 +593,7 @@ export const en = {
|
|
|
571
593
|
logsLoading: 'Reading log…',
|
|
572
594
|
logsEmpty: 'No log entries yet',
|
|
573
595
|
logsLoadFail: 'Failed to read the log; try again later',
|
|
574
|
-
//
|
|
596
|
+
// 日志查看器弹窗:内置窗口分页加载日志,可按类型 × 级别筛选
|
|
575
597
|
logModalTitle: 'Log viewer',
|
|
576
598
|
logViewerOpen: 'Open log viewer',
|
|
577
599
|
logViewerDesc: 'View the local log in a built-in window; filter by type and level to pinpoint install / uninstall / update incompatibilities',
|
|
@@ -616,9 +638,9 @@ export const en = {
|
|
|
616
638
|
logCount: '{n} entries',
|
|
617
639
|
logEmptyFilter: 'No matching log entries',
|
|
618
640
|
settingsDiagFail: 'Unreachable',
|
|
619
|
-
//
|
|
641
|
+
// 系统诊断通道列表:一键全检 + 每通道一行,点击重测
|
|
620
642
|
diagNpm: 'npm registry',
|
|
621
|
-
//
|
|
643
|
+
// 诊断 npm 行:未配置镜像时显示的兜底文案(探测仍打官方源)
|
|
622
644
|
diagNpmUnset: 'Unset (follow local npm config)',
|
|
623
645
|
diagGithub: 'GitHub',
|
|
624
646
|
diagCatalog: 'Catalog site',
|
|
@@ -633,20 +655,20 @@ export const en = {
|
|
|
633
655
|
diagSummaryRunning: 'Checking channels…',
|
|
634
656
|
diagSummaryOk: 'All channels reachable',
|
|
635
657
|
diagSummaryFail: 'Unreachable channel(s) — click a row to re-check',
|
|
636
|
-
//
|
|
658
|
+
// 失败细分原因:Windows Schannel 取不到证书吊销信息即中断握手(易被误判为网络不通)
|
|
637
659
|
diagFailRevocation: 'Cert check blocked',
|
|
638
660
|
diagFailRevocationHint: 'The system curl cannot fetch certificate revocation info (CRL/OCSP, required by Windows Schannel), so the TLS handshake is aborted — this is not a network outage, and npm/git may still work. curl 7.70+ downgrades the check to best-effort, or switch to a network that can reach the revocation service.',
|
|
639
661
|
settingsEnvSnapshot: 'System version',
|
|
640
662
|
settingsEnvSnapshotDesc: 'Copy host version and system info for pasting into issue reports',
|
|
641
663
|
settingsEnvCopy: 'Copy',
|
|
642
|
-
//
|
|
664
|
+
// 恢复默认:一级菜单 + 独立设置卡片
|
|
643
665
|
settingsReset: 'Restore Defaults',
|
|
644
666
|
settingsResetDesc: 'Restore update policy, npm mirror, proxy and security restrictions to factory defaults in one go',
|
|
645
667
|
settingsResetDetail: 'Reset update policy, npm mirror, proxy and security restrictions to factory defaults',
|
|
646
668
|
settingsResetRun: 'Restore Defaults',
|
|
647
669
|
settingsResetConfirm: 'Restore Defaults',
|
|
648
670
|
settingsResetConfirmDetail: 'Reset all settings to factory defaults? Update policy, npm mirror, proxy and security restrictions will be cleared.',
|
|
649
|
-
//
|
|
671
|
+
// 更新提醒(通知中心条目标题)
|
|
650
672
|
updateNoticeTitle: 'Update available',
|
|
651
673
|
updateNoticeGo: 'Update',
|
|
652
674
|
ignoreUpdateRun: 'Ignore this update',
|
|
@@ -674,11 +696,11 @@ export const en = {
|
|
|
674
696
|
installNow: 'Install',
|
|
675
697
|
installing: 'Installing…',
|
|
676
698
|
installDone: 'Installed',
|
|
677
|
-
//
|
|
699
|
+
// 已更新(通知中心区分安装/更新):更新 = 原位覆盖重装到最新版
|
|
678
700
|
updateDone: 'Updated',
|
|
679
701
|
installResultTitle: 'Plugin installed successfully',
|
|
680
702
|
installResultDesc: '',
|
|
681
|
-
//
|
|
703
|
+
// 更新语义:更新动作原位重跑 add —— 文案区分安装与更新
|
|
682
704
|
confirmUpdateTitle: 'Confirm update',
|
|
683
705
|
updateNow: 'Update',
|
|
684
706
|
updating: 'Updating…',
|
|
@@ -689,15 +711,14 @@ export const en = {
|
|
|
689
711
|
requestTimeout: 'Request timed out: GitHub may be unreachable or the network is unstable — try again later',
|
|
690
712
|
confirmCancel: 'Cancel',
|
|
691
713
|
doneBtn: 'Done',
|
|
692
|
-
//
|
|
693
|
-
//
|
|
714
|
+
// 结果视图兜底:仅刷新解决不了时(热挂载失败 / 非 dsh 插件 / 更新)才给单个「立即重启」;
|
|
715
|
+
// 关闭弹窗即视为「稍后」
|
|
694
716
|
restartNow: 'Restart now',
|
|
695
717
|
restarting: 'Restarting…',
|
|
696
718
|
restartHint: 'Restarting interrupts any in-progress install / uninstall task — its progress will be lost. Some plugins (such as plugin markets / top-level bundles) only take effect after a restart.',
|
|
697
|
-
//
|
|
719
|
+
// 桌面端:宿主由应用壳托管,插件重启不了它 —— 提示用户退出后重开
|
|
698
720
|
toastRestartDesktop: 'In the desktop app the host is managed by the app: quit from the app menu (or tray) and open it again — the change takes effect after that restart',
|
|
699
|
-
//
|
|
700
|
-
// the page auto-refreshes on close (no manual refresh button)
|
|
721
|
+
// 免重启即生效:安装已热挂载进运行中 loader;关闭弹窗时页面自动刷新(不给手动刷新按钮)
|
|
701
722
|
reloadHint: 'The plugin is loaded — closing this window will refresh the page automatically.',
|
|
702
723
|
toastInstalledLive: 'Installed — active now',
|
|
703
724
|
toastInstalledReload: 'Installed — refreshing the page automatically…',
|
|
@@ -726,9 +747,9 @@ export const en = {
|
|
|
726
747
|
errorTitle: 'Operation failed',
|
|
727
748
|
errorTitleInstall: 'Install failed',
|
|
728
749
|
errorTitleUninstall: 'Removal failed',
|
|
729
|
-
//
|
|
750
|
+
// 更新失败(通知中心区分安装/更新):更新目标覆盖重装失败
|
|
730
751
|
errorTitleUpdate: 'Update failed',
|
|
731
|
-
//
|
|
752
|
+
// 动作词:失败提示与上报正文的措辞都取自这里
|
|
732
753
|
actionInstall: 'install',
|
|
733
754
|
actionUpdate: 'update',
|
|
734
755
|
actionUninstall: 'removal',
|
|
@@ -739,41 +760,40 @@ export const en = {
|
|
|
739
760
|
failCopy: 'Copy full log',
|
|
740
761
|
failIssueHint: 'Open a pre-filled issue on the author repo with this error log (includes catalog links)',
|
|
741
762
|
failIssueBig: 'Report this bug to GitHub — contribute to open source',
|
|
742
|
-
//
|
|
763
|
+
// 非插件侧失败(未分类)改为投递到插件中心仓库分诊
|
|
743
764
|
failHubIssueHint: 'This failure was classified as an environment or Plugin Hub issue (not a plugin-author issue). Open a pre-filled issue on the Plugin Hub repo with this error log.',
|
|
744
765
|
failHubIssueBig: 'Report to the Plugin Hub for triage',
|
|
745
|
-
//
|
|
766
|
+
// 未知失败兜底:不投插件作者,改投插件中心仓库分诊
|
|
746
767
|
failUnclassifiedHint: 'The {action} failed and the cause could not be identified automatically. This is usually not the plugin itself (it may relate to your local environment or the Plugin Hub). Please report the error to the Plugin Hub so the maintainers can triage it.',
|
|
747
|
-
//
|
|
768
|
+
// 插件中心自身的状态守卫消息(未安装 / 不在此处卸载 / 已在队列中 / 已安装):已装列表与实读快照不同步 —— 不是插件问题,不引导提 Issue
|
|
748
769
|
failHubStateHint: 'The plugin list is out of date or out of sync: the target of this {action} may already be in the list (use "Update" to upgrade), may no longer be in the installed list, or may already be queued. This is not a plugin problem — refresh the page and retry.',
|
|
749
|
-
//
|
|
770
|
+
// 命令跑满本机时限被强杀:可能其实已生效(安装器超时后会复核已装列表)—— 给可行动提示,不引导提 Issue
|
|
750
771
|
failTimeoutHint: 'This operation exceeded the local time limit and was interrupted — but it may well have taken effect already (the installer re-checks the installed list after a timeout). Refresh the page to confirm the current state; if it did not take effect, run the corresponding command in a terminal to see the full output. This is not a plugin problem.',
|
|
751
772
|
failProfileLockHint: 'DSH timed out waiting for the file lock while writing the plugin list — usually because another DSH process or install task is writing the same profile (sometimes a previous run left the lock behind). Close other dsh windows or running commands, then retry; if it keeps happening, restart DSH once. This is not a plugin problem, and there is no need to repeat the {action}.',
|
|
752
|
-
//
|
|
773
|
+
// 宿主自身入口起不来:不是插件问题 —— 只给提示,不引导提 Issue
|
|
753
774
|
failHostCliSpawnHint: 'DSH could not start itself to perform this operation (the system reported that the executable was not found). This usually means the DSH installation folder has been moved or is being updated, or that the profile directory does not exist yet. Restart DSH and retry; if it keeps happening, reinstall DSH. This is not a plugin problem — other plugins would fail the same way.',
|
|
754
|
-
// prepare
|
|
755
|
-
failPrepareHint: 'This plugin failed while running its build scripts during install (
|
|
756
|
-
//
|
|
757
|
-
//
|
|
758
|
-
// repo and the hub never hears about it, so keep a feedback path here.
|
|
775
|
+
// prepare 构建脚本实际执行失败:插件自身打包分发问题 —— 引导提 Issue
|
|
776
|
+
failPrepareHint: 'This plugin failed while running its build scripts during install (the published npm package is incomplete). This is a packaging issue of the plugin itself — please report it to the author repository.',
|
|
777
|
+
// 「插件打包问题」分支的次要入口:该判定来自插件中心自己的装前/装后校验,不是 pnpm 原文 ——
|
|
778
|
+
// 一旦误报,用户会被送去作者仓库、我们永远收不到反馈,故在此保留一条反馈通道。
|
|
759
779
|
failMisjudgeHint: 'If this plugin actually installs fine (the verdict above is the Plugin Hub misjudging it), please report it to the Hub: that verdict is produced by the marketplace itself, so a false positive can only be found through your feedback.',
|
|
760
780
|
failMisjudgeLink: 'Plugin installs fine but got blocked? Report to the Plugin Hub',
|
|
761
|
-
//
|
|
781
|
+
// 装前/装后校验命中([packaging]):git 分发缺包所需的文件(入口 / 补丁按包名 mount 的入口 / bundle 补丁)= 未适配官方默认安装方式
|
|
762
782
|
failPackagingHint: 'This plugin does not support the official default install method: its git distribution lacks a file the package needs (the entry from `main` / `exports`, an entry its own patch mounts by name, or the patch declared by `dsh.bundle.patch`), so it has not been adapted to the official install flow. Please file an Issue on the author\'s repo asking for committed build output, a prebuilt release `.tgz` (`releases/download/<tag>/<asset>.tgz`), or a complete npm release.',
|
|
763
|
-
//
|
|
764
|
-
|
|
783
|
+
// pnpm 默认忽略的原生模块构建脚本(如 node-pty,ERR_PNPM_IGNORED_BUILDS):插件的依赖需在用户机器上编译原生模块,
|
|
784
|
+
// 自动放行 allowBuilds 重试一次仍失败即任何用户都装不上 —— 属作者侧,引导到作者仓库提 Issue
|
|
785
|
+
failIgnoredBuild: 'This plugin (or one of its dependencies) needs to run build scripts at install time, which pnpm blocks by default via its allowBuilds allowlist — so this operation fails (e.g. native modules like node-pty, or the plugin\'s own prepare script on git installs). The installer already auto-allows that key and retries once; if it still fails, the build itself is the problem, so no user can install it. Run the install command in a terminal to see the full build error; this is a build/distribution issue of the plugin itself — please report it to the author repository, asking them to ship prebuilt output, a complete npm release, or a prebuilt .tgz.',
|
|
765
786
|
failNpmTooLow: 'Your local npm may be too old: npm crashed internally while resolving the plugin\'s dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest',
|
|
766
787
|
failNpmTooLowV: 'Your local npm is too old (v{v}): npm crashed internally while resolving the plugin\'s dependencies (a known npm bug — not a plugin issue). Please upgrade npm and retry: npm install -g npm@latest',
|
|
767
|
-
//
|
|
788
|
+
// 安装前网络探测 / 安装日志里的连接失败([network] / git fetch 超时 / DNS / TLS):本机网络或代理问题,不是插件问题 —— 不引导提 Issue
|
|
768
789
|
failNetworkHint: 'The network could not be reached before the {action}: the install source is unreachable (offline, DNS failure, firewall block, or a misconfigured proxy). This is not a problem with the plugin itself — please check your connection, confirm the HTTP proxy in Settings, run a connectivity check under System Diagnostics, then retry.',
|
|
769
|
-
//
|
|
790
|
+
// 网络失败弹窗里的「无法访问 …」醒目行:显示具体的不可达地址({url})
|
|
770
791
|
failNetworkRegistryHint: 'Your npm/pnpm registry is set to {host}, and the package tarball could not be downloaded from it. This usually means a private/internal mirror that has not synced the package (or requires intranet auth) — point the registry back to https://registry.npmjs.org (or make sure this source can serve the package), then retry.',
|
|
771
792
|
failNetworkTarget: 'Cannot reach {url} — your network connection is down',
|
|
772
|
-
//
|
|
793
|
+
// 网络不通提示下的诊断快捷按钮:跳到设置 → 系统诊断
|
|
773
794
|
failNetworkRunDiag: 'Run a network diagnostic',
|
|
774
|
-
//
|
|
775
|
-
//
|
|
776
|
-
// and do not offer an issue link
|
|
795
|
+
// 请求来源没通过本地 hub 服务校验(403 untrusted origin):请求根本没进安装流程 ——
|
|
796
|
+
// 与插件无关,故引导从本机地址重开,不引导提 Issue。
|
|
777
797
|
failOriginRejectedHint: 'This install request did not pass the marketplace origin check and was rejected by the local service, so the install never started — this is not about the plugin itself. It usually means the marketplace page was not opened from a local address (for example a LAN IP), or the host page origin was not recognized. Reopen the marketplace from localhost and retry; on the desktop app, restart the host once. If it still fails after restarting the host, your dsh-plugin version is incompatible with the host — upgrade the marketplace with dsh plugin --profile {profile} add dsh-plugin@latest, then restart the host again.',
|
|
778
798
|
failDshMissingHint: 'The dsh command could not be found (it is not on the system PATH), so the installer could not run. Please make sure DeepSeek Harness is installed correctly and dsh is on your PATH (or reinstall it), then retry. This is not a problem with the plugin itself.',
|
|
779
799
|
failGitMissingHint: 'The git command could not be found (Git is not installed or not on the system PATH), so GitHub-source plugins cannot be installed. Please install Git (e.g. from git-scm.com/downloads) or add git to your PATH, restart DSH, then retry. This is not a problem with the plugin itself.',
|
|
@@ -781,13 +801,68 @@ export const en = {
|
|
|
781
801
|
failNpmMissingHint: 'The npm command could not be found (npm is not installed or not on the system PATH), so a global install cannot run. Please install Node.js (which bundles npm), make sure npm is on your PATH, then retry. This is not a problem with the plugin itself.',
|
|
782
802
|
failPnpmStoreHint: 'pnpm reported an unexpected store location (ERR_PNPM_UNEXPECTED_STORE): the profile directory was previously set up with a different major version of pnpm, and the current pnpm refuses to reuse it — no plugin can be installed into that profile. Delete node_modules and pnpm-lock.yaml under the profile directory (see System Logs or ~/.dsh/profiles/<profile>/hub.log for the full output), then reinstall. This is not a problem with the plugin itself.',
|
|
783
803
|
failPnpmUnusedPatchHint: 'pnpm reported that some patches were not used (ERR_PNPM_UNUSED_PATCH): your profile still holds a patch entry for an older dsh-plugin version (for example dsh-plugin@1.4.2), while this install resolved a different version, so pnpm aborts the whole install for safety — no plugin can be installed into that profile. This is not a problem with the plugin itself. Remove that dsh-plugin patch entry from pnpm-workspace.yaml (pnpm 11+) or from pnpm.patchedDependencies in package.json (pnpm 10) inside the profile directory (~/.dsh/profiles/<profile>), then retry.',
|
|
784
|
-
//
|
|
785
|
-
// then give the removal instructions
|
|
804
|
+
// 缺失依赖:点名 404 的包(解析不出时跳过该行),再给删除指引
|
|
786
805
|
failPnpmMissingDepTarget: '{pkg} was not found on the npm registry (404)',
|
|
787
806
|
failPnpmMissingDepHint: 'pnpm reported that a package does not exist on the npm registry (ERR_PNPM_FETCH_404): your profile keeps a dependency on a package that was never published, and pnpm hits it every time it resolves dependencies — no plugin can be installed into that profile. This is not a problem with the plugin itself. Remove that dependency from package.json inside the profile directory (~/.dsh/profiles/<profile>) — along with its entry in pnpm-lock.yaml, or the lockfile itself — then retry.',
|
|
788
807
|
failRegistryMirrorLagHint: 'pnpm reported that a package does not exist on the npm registry (ERR_PNPM_FETCH_404): that package does exist on the official npm registry, but the npm/pnpm registry (or mirror) configured on your machine has not synced it. Point the npm/pnpm registry back at the official one (https://registry.npmjs.org), or switch to a mirror that has the package, then retry. This is not a problem with the plugin itself.',
|
|
789
808
|
failPluginMissingDepTarget: '{pkg} does not exist on the official npm registry',
|
|
790
809
|
failPluginMissingDepHint: 'A package this plugin depends on does not exist on the official npm registry (removed, or never published). This is a dependency problem on the plugin author side, not a problem with your environment. Please report it to the plugin repository so the author can fix that dependency or ship it together with the plugin.',
|
|
810
|
+
failHostIncompatibleKind: 'Plugin does not support the DSH version in use',
|
|
811
|
+
failHostIncompatibleReason: 'The current DSH ({version}) is not in this plugin\'s compatibility list, so the host refused before installing anything.',
|
|
812
|
+
failHostIncompatibleHint: '① Ask the author to extend the supported dsh versions and publish a release (button below).\n② Grant an exact-version exemption in the plugin manager of the desktop app (the host warns about crash / data-loss risk).',
|
|
813
|
+
// Unified failure card header: kind label + one-line reason (per-kind details stay in fail*Hint)
|
|
814
|
+
failKind_npmTooOld: 'npm on this machine is too old',
|
|
815
|
+
failReason_npmTooOld: 'The installed npm cannot resolve the dependency tree of this package, so it aborted.',
|
|
816
|
+
failKind_dshMissing: 'dsh is not installed on this machine',
|
|
817
|
+
failReason_dshMissing: 'The installer needs to call dsh, but it cannot be found on your machine.',
|
|
818
|
+
failKind_gitMissing: 'git is not installed on this machine',
|
|
819
|
+
failReason_gitMissing: 'A dependency of this package needs git, but git cannot be found.',
|
|
820
|
+
failKind_pnpmMissing: 'pnpm is not installed on this machine',
|
|
821
|
+
failReason_pnpmMissing: 'The installer uses pnpm to add plugins, but pnpm cannot be found.',
|
|
822
|
+
failKind_npmMissing: 'npm is not installed on this machine',
|
|
823
|
+
failReason_npmMissing: 'The install flow needs npm, but it cannot be found.',
|
|
824
|
+
failKind_pnpmStore: 'pnpm store version mismatch',
|
|
825
|
+
failReason_pnpmStore: 'The profile dependencies were written by a different pnpm major, which the current pnpm does not accept.',
|
|
826
|
+
failKind_pnpmWorkspace: 'workspace-root check blocked the install',
|
|
827
|
+
failReason_pnpmWorkspace: 'The profile is treated as a workspace root without a root operation declared, so pnpm aborted.',
|
|
828
|
+
failKind_originRejected: 'request origin rejected by the local service',
|
|
829
|
+
failReason_originRejected: 'The request never reached the install flow: the local service rejected its origin.',
|
|
830
|
+
failKind_pnpmPolicy: 'blocked by the pnpm supply-chain policy',
|
|
831
|
+
failReason_pnpmPolicy: 'The version is younger than the minimum release age, or an integrity / trust check failed.',
|
|
832
|
+
failKind_pnpmUnusedPatch: 'stale patch entry in the profile',
|
|
833
|
+
failReason_pnpmUnusedPatch: 'The profile keeps a patch for an older dsh-plugin version, so pnpm aborted for safety.',
|
|
834
|
+
failKind_pnpmMissingDep: 'a dependency does not exist on the registry',
|
|
835
|
+
failReason_pnpmMissingDep: 'The profile keeps a dependency on an unpublished package, which pnpm hits on every resolve.',
|
|
836
|
+
failKind_pluginMissingDep: 'plugin dependency is not published',
|
|
837
|
+
failReason_pluginMissingDep: 'A package the plugin depends on does not exist on the official npm registry.',
|
|
838
|
+
failKind_registryVersionStale: 'this version is not available on the registry in use',
|
|
839
|
+
failReason_registryVersionStale: 'The registry that actually performs the install has not synced this version yet, or the version is mistyped.',
|
|
840
|
+
failKind_pnpmLinkedDirMissing: 'dangling local dependency in the profile',
|
|
841
|
+
failReason_pnpmLinkedDirMissing: 'A link/file dependency points at a directory that no longer exists, so pnpm stalls on it.',
|
|
842
|
+
failKind_fileLocked: 'a file is held by another program',
|
|
843
|
+
failReason_fileLocked: 'pnpm could not replace a file inside the profile because another program is holding it.',
|
|
844
|
+
failKind_accessDenied: 'write access denied',
|
|
845
|
+
failReason_accessDenied: 'The system denied pnpm write access to files inside the profile.',
|
|
846
|
+
failKind_fsUnavailable: 'the disk is not writable',
|
|
847
|
+
failReason_fsUnavailable: 'The disk is full or read-only, or file handles are exhausted.',
|
|
848
|
+
failKind_pnpmIgnoredBuild: 'native build scripts blocked',
|
|
849
|
+
failReason_pnpmIgnoredBuild: 'A plugin dependency has to be compiled on your machine, and pnpm blocks build scripts by default.',
|
|
850
|
+
failKind_pluginPrepare: 'plugin distribution is incomplete',
|
|
851
|
+
failReason_pluginPrepare: 'The published package is missing files, or its build script failed.',
|
|
852
|
+
failKind_hostIncompatible: 'plugin does not support the DSH version in use ({version})',
|
|
853
|
+
failReason_hostIncompatible: 'The plugin\'s declared compatibility list does not include the DSH version you are running.',
|
|
854
|
+
failKind_network: 'network connection failed',
|
|
855
|
+
failReason_network: 'The install could not reach the npm registry or the proxy, so the request never completed.',
|
|
856
|
+
failKind_hostCliSpawn: 'the DSH host could not be launched',
|
|
857
|
+
failReason_hostCliSpawn: 'The resolved host entry point would not start, so the install command never ran.',
|
|
858
|
+
failKind_hubState: 'plugin hub state is out of sync',
|
|
859
|
+
failReason_hubState: 'The locally recorded install state does not match reality, so this operation had no effect.',
|
|
860
|
+
failKind_timeout: 'operation timed out',
|
|
861
|
+
failReason_timeout: 'The install exceeded the time limit and was aborted.',
|
|
862
|
+
failKind_profileLock: 'profile is locked by another process',
|
|
863
|
+
failReason_profileLock: 'Another dsh process is using this profile right now.',
|
|
864
|
+
failKind_hub: 'unknown error',
|
|
865
|
+
failReason_hub: 'We could not identify this error yet — you can report it to us in one click.',
|
|
791
866
|
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.',
|
|
792
867
|
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.',
|
|
793
868
|
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.',
|
|
@@ -796,14 +871,12 @@ export const en = {
|
|
|
796
871
|
failPnpmWorkspaceHint: 'pnpm refused to add the dependency to the workspace root (ERR_PNPM_ADDING_TO_ROOT): the profile directory is treated as a pnpm workspace root, and this install command did not declare that it operates at the root, so pnpm rejected it outright — no plugin can be installed into that profile. This is not a problem with the plugin itself. Add `ignore-workspace-root-check=true` to the `.npmrc` inside the profile directory (~/.dsh/profiles/<profile>) and retry, or upgrade DeepSeek Harness and try again.',
|
|
797
872
|
failPnpmTarballIntegrityHint: 'pnpm reported ERR_PNPM_MISSING_TARBALL_INTEGRITY: a tarball entry in the lockfile has no checksum to verify the downloaded package. Read the full log, fully quit DeepSeek Harness, and inspect and back up package.json, pnpm-lock.yaml and pnpm-workspace.yaml in the affected profile. Once the dependency sources are verified, rename pnpm-lock.yaml to preserve it, then use the same DSH installer to install a plugin version compatible with the host and regenerate the lockfile. This resolves profile dependencies again: compare the old and new versions, and keep integrity checks enabled.',
|
|
798
873
|
failPnpmPolicyHint: 'The installer was blocked by pnpm supply-chain security policy — every plugin install would hit the same wall, so this is not a problem with the plugin itself. Two cases: ① "Minimum release age" (ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION): the package was published less than 24 hours ago, and pnpm 11 refuses freshly-published packages for safety. Add minimumReleaseAge: 0 to your pnpm config (pnpm-workspace.yaml) to opt out, or wait until the 24 hours have passed and retry. ② "untrusted origin" (ERR_PNPM_UNTRUSTED_ORIGIN): a dependency source is not trusted by this machine, usually because plugins were previously installed via github: or a non-official npm registry, so the lockfile records an untrusted source. Delete node_modules and pnpm-lock.yaml under the profile directory (see System Logs or ~/.dsh/profiles/<profile>/hub.log for the full output), then reinstall.',
|
|
799
|
-
// minimumReleaseAge
|
|
800
|
-
//
|
|
874
|
+
// 仅 minimumReleaseAge 场景:从报错算出确切的可重试时刻({time}),让用户知道何时能装,
|
|
875
|
+
// 而不是笼统的「等 24 小时」
|
|
801
876
|
failPnpmReleaseAgeHint: 'The installer was blocked by pnpm supply-chain security policy, and every plugin installed into this profile would hit the same wall — this is not a problem with the plugin itself. The package was published less than 24 hours ago, and pnpm 11 refuses freshly-published packages for safety, so both installs and removals are blocked for this profile in the meantime. Retry after: {time} (i.e. 24 hours after the package was published). If you must install right now, add minimumReleaseAge: 0 to pnpm-workspace.yaml inside the profile directory (~/.dsh/profiles/<profile>) to opt out, but that loosens supply-chain protection for the whole profile.',
|
|
802
|
-
//
|
|
877
|
+
// 自定义安装入口渠道名 —— 用于报错/日志溯源
|
|
803
878
|
installChannelNpm: 'NPM package',
|
|
804
|
-
|
|
805
|
-
installChannelDsh: 'DSH command',
|
|
806
|
-
// Entry traceability line prefixed at the top of the error text: which card initiated this install
|
|
879
|
+
// 错误正文顶部的入口溯源行:指出从哪张卡片发起本次安装
|
|
807
880
|
installEntryLine: 'Install entry: {c}.',
|
|
808
881
|
reportIssue: 'Report an Issue to the plugin repo',
|
|
809
882
|
detail: 'Open details',
|
|
@@ -814,12 +887,12 @@ export const en = {
|
|
|
814
887
|
monthsAgo: 'updated {months}mo ago',
|
|
815
888
|
yearsAgo: 'updated {years}y ago',
|
|
816
889
|
pluginsTotal: 'Results: {n} plugins',
|
|
817
|
-
//
|
|
890
|
+
// 分类 chip 不带计数;筛选结果数显示在列表头部
|
|
818
891
|
filterResults: 'Results: {n} plugins',
|
|
819
892
|
more: '{n} more on the website',
|
|
820
893
|
browseAll: 'Browse all {n} plugins',
|
|
821
894
|
verified: 'Verified',
|
|
822
|
-
//
|
|
895
|
+
// 版本与更新:有 release 的仓库比 tag,没有的比最近推送时间(有新提交即有更新)
|
|
823
896
|
version: 'Version',
|
|
824
897
|
update: 'Update',
|
|
825
898
|
updateAvailable: 'Update available',
|
|
@@ -833,10 +906,10 @@ export const en = {
|
|
|
833
906
|
versionHint: 'View version info and changelog',
|
|
834
907
|
hubCurrentTitle: 'Current version',
|
|
835
908
|
hubCurrentDesc: 'You are on v{version} — this is the latest version.',
|
|
836
|
-
//
|
|
909
|
+
// 暂缓提示:确有新版本,但仍在 pnpm 24h 供应链门禁窗口内
|
|
837
910
|
hubPendingDesc: 'v{version} has been released, but it is still within the 24-hour window where pnpm silently falls back to the older version, so the update is not offered yet. The update entry will appear here shortly.',
|
|
838
911
|
hubUpToDate: 'Up to date',
|
|
839
|
-
//
|
|
912
|
+
// 头部「关注我们」弹窗:平台介绍 + 用户反馈群二维码(内容由 Worker /about 以 Markdown 推送)
|
|
840
913
|
followUs: 'Follow us',
|
|
841
914
|
aboutTitle: 'Follow us',
|
|
842
915
|
aboutDesc: 'Learn what DSH Plugin Hub does and join our user feedback group.',
|