dsh-plugin-manager-companion 0.1.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/LICENSE +21 -0
- package/README.en.md +144 -0
- package/README.md +142 -0
- package/cordis.patch.yml +9 -0
- package/dist/about.d.ts +77 -0
- package/dist/about.js +179 -0
- package/dist/cli.d.ts +226 -0
- package/dist/cli.js +856 -0
- package/dist/client/AboutPage.d.ts +75 -0
- package/dist/client/ConsolePage.d.ts +79 -0
- package/dist/client/KindsPage.d.ts +21 -0
- package/dist/client/MarketplacePage.d.ts +36 -0
- package/dist/client/OfficialSlots.d.ts +35 -0
- package/dist/client/UpgradeRow.d.ts +108 -0
- package/dist/client/index.d.ts +26 -0
- package/dist/client/locales.d.ts +475 -0
- package/dist/client/pmSelect.d.ts +38 -0
- package/dist/client/shared.d.ts +928 -0
- package/dist/client/upgradeView.d.ts +278 -0
- package/dist/client/wire.d.ts +401 -0
- package/dist/client.js +9194 -0
- package/dist/diagnostics.d.ts +332 -0
- package/dist/diagnostics.js +2631 -0
- package/dist/envManager.d.ts +1047 -0
- package/dist/envManager.js +3214 -0
- package/dist/fix.d.ts +60 -0
- package/dist/fix.js +168 -0
- package/dist/guard.d.ts +133 -0
- package/dist/guard.js +232 -0
- package/dist/index.d.ts +121 -0
- package/dist/index.js +1150 -0
- package/dist/installSession.d.ts +111 -0
- package/dist/installSession.js +150 -0
- package/dist/kinds.d.ts +464 -0
- package/dist/kinds.js +1029 -0
- package/dist/marketView.d.ts +261 -0
- package/dist/marketView.js +406 -0
- package/dist/marketplace.d.ts +248 -0
- package/dist/marketplace.js +500 -0
- package/dist/match.d.ts +67 -0
- package/dist/match.js +203 -0
- package/dist/net.d.ts +108 -0
- package/dist/net.js +163 -0
- package/dist/official.d.ts +145 -0
- package/dist/official.js +205 -0
- package/dist/paths.d.ts +108 -0
- package/dist/paths.js +236 -0
- package/dist/presets.d.ts +299 -0
- package/dist/presets.js +578 -0
- package/dist/qualityGate.d.ts +66 -0
- package/dist/qualityGate.js +247 -0
- package/dist/rank.d.ts +88 -0
- package/dist/rank.js +164 -0
- package/dist/registry.d.ts +295 -0
- package/dist/registry.js +686 -0
- package/dist/rest.d.ts +122 -0
- package/dist/rest.js +219 -0
- package/dist/scan.d.ts +134 -0
- package/dist/scan.js +396 -0
- package/dist/settings.d.ts +447 -0
- package/dist/settings.js +263 -0
- package/dist/tags.d.ts +119 -0
- package/dist/tags.js +166 -0
- package/dist/tools.d.ts +131 -0
- package/dist/tools.js +377 -0
- package/dist/types.d.ts +651 -0
- package/dist/types.js +13 -0
- package/dist/upgrade.d.ts +428 -0
- package/dist/upgrade.js +1100 -0
- package/dist/upgradeView.d.ts +313 -0
- package/dist/upgradeView.js +273 -0
- package/docs/images/readme/01-console-health.png +0 -0
- package/docs/images/readme/02-console-envs.png +0 -0
- package/docs/images/readme/03-marketplace.png +0 -0
- package/docs/images/readme/04-official-plugin-page.png +0 -0
- package/package.json +104 -0
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 客户端字典 — 本插件全部产品文案(zh 为 key 的 source of truth)。
|
|
3
|
+
*
|
|
4
|
+
* 归属:A 类·重写(旧仓库把文案散在十个 tsx 文件里,这里集中成一份带类型的字典)。
|
|
5
|
+
* 官方复用:ctx.locale.register(NS, { zh, en }) + LocaleNamespaceMap 声明合并;
|
|
6
|
+
* 组件通过注册项声明的 `locale` 拿到框架合成的 t 座位,字典键即 t 的键域。
|
|
7
|
+
* 前提检查:官方客户端禁止硬编码产品文案(verify-client-ui-i18n);类型上
|
|
8
|
+
* en 必须是 zh 键集的完整 Record,缺一个键就编译失败。
|
|
9
|
+
*
|
|
10
|
+
* 约定:`{name}` 形式的占位符由 t(key, params) 替换;键名按页面分组。
|
|
11
|
+
*/
|
|
12
|
+
/** 本插件在客户端 locale 注册表里的命名空间。 */
|
|
13
|
+
export declare const NS = "plugin-manager-companion";
|
|
14
|
+
/** 简体中文文案(键的 source of truth)。 */
|
|
15
|
+
export declare const zh: {
|
|
16
|
+
readonly 'nav.marketplace': "插件市场";
|
|
17
|
+
readonly 'nav.console': "环境控制台";
|
|
18
|
+
readonly 'nav.kinds': "技能与预设";
|
|
19
|
+
readonly 'nav.about': "关于";
|
|
20
|
+
readonly 'about.title': "关于";
|
|
21
|
+
readonly 'about.tabs': "关于的子页面";
|
|
22
|
+
readonly 'about.tab.dsh': "DSH 信息";
|
|
23
|
+
readonly 'about.loading': "正在读取";
|
|
24
|
+
readonly 'about.notLoaded': "还没有读到";
|
|
25
|
+
readonly 'about.unknown': "未知";
|
|
26
|
+
readonly 'about.readFailed': "读取失败:{message}";
|
|
27
|
+
readonly 'about.retry': "重试";
|
|
28
|
+
readonly 'about.group.runtime': "运行时";
|
|
29
|
+
readonly 'about.group.profile': "当前环境";
|
|
30
|
+
readonly 'about.group.companion': "本插件";
|
|
31
|
+
readonly 'about.group.files': "文件与缓存";
|
|
32
|
+
readonly 'about.dshVersion': "DSH 版本";
|
|
33
|
+
readonly 'about.installAnchor': "安装位置";
|
|
34
|
+
readonly 'about.node': "Node 版本";
|
|
35
|
+
readonly 'about.platform': "平台";
|
|
36
|
+
readonly 'about.arch': "架构";
|
|
37
|
+
readonly 'about.profileName': "环境名";
|
|
38
|
+
readonly 'about.profileDir': "环境目录";
|
|
39
|
+
readonly 'about.companionVersion': "本插件版本";
|
|
40
|
+
readonly 'about.settingsPath': "设置文件";
|
|
41
|
+
readonly 'about.registryCache': "市场索引缓存";
|
|
42
|
+
readonly 'about.registryCacheAge': "缓存年龄";
|
|
43
|
+
readonly 'about.tab.software': "软件升级";
|
|
44
|
+
readonly 'about.software.none': "这套软件里没有可检查的升级单元";
|
|
45
|
+
readonly 'about.unit.installation': "官方运行时(全局安装的那份)";
|
|
46
|
+
readonly 'about.unit.experimental': "官方实验包";
|
|
47
|
+
readonly 'about.unit.self': "本插件自身";
|
|
48
|
+
readonly 'about.unit.other': "其它单元";
|
|
49
|
+
readonly 'about.unitUpToDate': "已经是最新版本";
|
|
50
|
+
readonly 'common.cancel': "取消";
|
|
51
|
+
readonly 'common.readOnly': "只读";
|
|
52
|
+
readonly 'common.close': "关闭";
|
|
53
|
+
readonly 'common.confirm': "确认";
|
|
54
|
+
readonly 'common.loading': "加载中…";
|
|
55
|
+
readonly 'error.incompletePayload': "宿主返回的数据不完整(缺少必需字段),已按失败处理";
|
|
56
|
+
readonly 'console.title': "环境控制台";
|
|
57
|
+
readonly 'console.tabs': "控制台子页面";
|
|
58
|
+
readonly 'console.tab.health': "体检";
|
|
59
|
+
readonly 'console.tab.env': "环境";
|
|
60
|
+
readonly 'console.tab.settings': "设置";
|
|
61
|
+
readonly 'health.title': "体检";
|
|
62
|
+
readonly 'health.refresh': "开始体检";
|
|
63
|
+
readonly 'health.refreshing': "体检中…";
|
|
64
|
+
readonly 'health.runAgain': "重新体检";
|
|
65
|
+
readonly 'health.score': "健康分";
|
|
66
|
+
readonly 'health.scoreHint': "满分 100;可自动修复扣 5 分,需确认扣 10 分,只报告扣 20 分。";
|
|
67
|
+
readonly 'health.generatedAt': "生成于 {at}";
|
|
68
|
+
readonly 'health.environment': "被诊断环境:{name}";
|
|
69
|
+
readonly 'health.layer.dependency': "L1 依赖";
|
|
70
|
+
readonly 'health.layer.composition': "L2 组合";
|
|
71
|
+
readonly 'health.layer.runtime': "L3 运行时";
|
|
72
|
+
readonly 'health.layer.consistency': "L4 一致性";
|
|
73
|
+
readonly 'health.layer.ecosystem': "L5 生态";
|
|
74
|
+
readonly 'health.empty': "未发现任何问题";
|
|
75
|
+
readonly 'health.needRun': "尚未体检";
|
|
76
|
+
readonly 'health.failed': "体检失败:{message}";
|
|
77
|
+
readonly 'health.fixFailed': "修复失败:{message}";
|
|
78
|
+
readonly 'health.layerSkipped': "未查";
|
|
79
|
+
readonly 'health.evidence': "证据";
|
|
80
|
+
readonly 'health.subjects': "涉及对象";
|
|
81
|
+
readonly 'health.fixSafe': "一键修复";
|
|
82
|
+
readonly 'health.fixConfirm': "确认修复";
|
|
83
|
+
readonly 'health.reportOnly': "仅报告";
|
|
84
|
+
readonly 'health.fixing': "修复中…";
|
|
85
|
+
readonly 'health.skipped': "因能力缺失而跳过的检查";
|
|
86
|
+
readonly 'health.capabilities': "官方能力缺口";
|
|
87
|
+
readonly 'health.grouped': "同类发现已归并为 {groups} 组";
|
|
88
|
+
readonly 'health.groupCount': "{count} 条同类";
|
|
89
|
+
readonly 'health.groupMoreScopes': "另有 {count} 个作用域";
|
|
90
|
+
readonly 'health.groupRest': "未归入任何组的 {count} 条";
|
|
91
|
+
readonly 'health.target': "诊断目标环境";
|
|
92
|
+
readonly 'health.foreignTag': "非当前环境";
|
|
93
|
+
readonly 'severity.safe-fix': "可自动修复";
|
|
94
|
+
readonly 'severity.confirm-fix': "需确认";
|
|
95
|
+
readonly 'severity.report-only': "只报告";
|
|
96
|
+
readonly 'env.title': "环境";
|
|
97
|
+
readonly 'env.intro': "本机全部环境及其运行状态";
|
|
98
|
+
readonly 'env.refresh': "刷新";
|
|
99
|
+
readonly 'env.empty': "未发现任何环境";
|
|
100
|
+
readonly 'env.current': "当前环境";
|
|
101
|
+
readonly 'env.builtin': "内置";
|
|
102
|
+
readonly 'env.running': "运行中";
|
|
103
|
+
readonly 'env.stopped': "未运行";
|
|
104
|
+
readonly 'env.port': "端口 {port}";
|
|
105
|
+
readonly 'env.pid': "进程 {pid}";
|
|
106
|
+
readonly 'env.start': "终端启动";
|
|
107
|
+
readonly 'env.startBackground': "后台启动";
|
|
108
|
+
readonly 'env.stop': "停止";
|
|
109
|
+
readonly 'env.create': "新建环境";
|
|
110
|
+
readonly 'env.createTitle': "新建环境";
|
|
111
|
+
readonly 'env.createHint': "名称只用小写字母、数字与连字符;同名目录已存在时会失败";
|
|
112
|
+
readonly 'env.name': "名称";
|
|
113
|
+
readonly 'env.template': "模板";
|
|
114
|
+
readonly 'env.templateAuto': "自动选择";
|
|
115
|
+
readonly 'env.templateLoadFailed': "模板清单读取失败:{message}";
|
|
116
|
+
readonly 'env.rename': "重命名";
|
|
117
|
+
readonly 'env.renameTitle': "重命名环境";
|
|
118
|
+
readonly 'env.remove': "删除";
|
|
119
|
+
readonly 'env.removeTitle': "删除环境 {name}";
|
|
120
|
+
readonly 'env.removeDesc': "删除该环境的目录与其中配置,且不可撤销。内置环境与当前运行环境由官方保护。";
|
|
121
|
+
readonly 'env.copy': "复制插件";
|
|
122
|
+
readonly 'env.copyTitle': "把插件复制到另一个环境";
|
|
123
|
+
readonly 'env.copyHint': "插件名用逗号分隔;目标环境已有的同名插件会被覆盖";
|
|
124
|
+
readonly 'env.copyNames': "插件名";
|
|
125
|
+
readonly 'env.backupExport': "导出备份";
|
|
126
|
+
readonly 'env.backupImport': "导入备份";
|
|
127
|
+
readonly 'env.backupDiff': "差异对比";
|
|
128
|
+
readonly 'env.backupRestore': "导入并恢复";
|
|
129
|
+
readonly 'env.backupTarget': "目标环境";
|
|
130
|
+
readonly 'env.backupLoaded': "已读取备份:{name}(导出于 {at})";
|
|
131
|
+
readonly 'env.diffTitle': "备份与目标环境的差异";
|
|
132
|
+
readonly 'env.diffConfirm': "存在无法恢复的差异,导入前请自行确认";
|
|
133
|
+
readonly 'env.diffOk': "没有不可恢复的差异";
|
|
134
|
+
readonly 'env.diffMissing': "需要重装";
|
|
135
|
+
readonly 'env.diffAlready': "目标环境已装(无需处理):{count} 项";
|
|
136
|
+
readonly 'env.diffMissingProfiles': "本机没有的环境";
|
|
137
|
+
readonly 'env.diffUnrestorable': "无法恢复的来源";
|
|
138
|
+
readonly 'env.diffBundlesMissing': "缺少的组合包";
|
|
139
|
+
readonly 'env.busy': "正在执行:{name}";
|
|
140
|
+
readonly 'env.notice': "上一次操作结果";
|
|
141
|
+
readonly 'env.failed': "操作失败:{message}";
|
|
142
|
+
readonly 'env.selectEnv': "请先选择环境";
|
|
143
|
+
readonly 'env.bundles': "{count} 个组合包";
|
|
144
|
+
readonly 'env.unknown': "未知";
|
|
145
|
+
readonly 'env.factsIncomplete': "环境事实不完整:{reason}";
|
|
146
|
+
readonly 'env.dependencies': "{count} 个依赖";
|
|
147
|
+
readonly 'env.more': "更多操作";
|
|
148
|
+
readonly 'env.renameTo': "新名称";
|
|
149
|
+
readonly 'env.copyTo': "目标环境";
|
|
150
|
+
readonly 'env.doCreate': "创建";
|
|
151
|
+
readonly 'env.doRename': "重命名";
|
|
152
|
+
readonly 'env.doCopy': "复制";
|
|
153
|
+
readonly 'env.doRemove': "删除";
|
|
154
|
+
readonly 'env.backupSection': "备份与恢复";
|
|
155
|
+
readonly 'env.backupNone': "尚未读入备份文件";
|
|
156
|
+
readonly 'env.backupInvalid': "这个文件不是本插件的备份(格式标识不符),未载入";
|
|
157
|
+
readonly 'env.backupInspect': "查看备份内容";
|
|
158
|
+
readonly 'env.restoreWarnTitle': "用备份覆盖环境 {name}";
|
|
159
|
+
readonly 'env.restoreWarnDesc': "导入会按备份改写目标环境的 manifest、用户 patch 层与依赖声明;已存在的文件会被覆盖,且不可撤销。";
|
|
160
|
+
readonly 'env.acknowledge': "我明白这会覆盖目标环境的配置";
|
|
161
|
+
readonly 'env.doRestore': "导入并恢复";
|
|
162
|
+
readonly 'config.title': "设置";
|
|
163
|
+
readonly 'config.scope': "配置对所有环境生效";
|
|
164
|
+
readonly 'config.unavailable': "当前宿主没有提供本插件的设置命名空间,配置暂不可编辑";
|
|
165
|
+
readonly 'config.loading': "正在读取配置…";
|
|
166
|
+
readonly 'config.incomplete': "宿主只提供了部分配置字段:缺失项按默认值显示,保存时只写入你改动过的字段";
|
|
167
|
+
readonly 'config.readOnly': "改动无法保存";
|
|
168
|
+
readonly 'config.save': "保存";
|
|
169
|
+
readonly 'config.saving': "保存中…";
|
|
170
|
+
readonly 'config.discard': "放弃修改";
|
|
171
|
+
readonly 'config.dirty': "有未保存的修改";
|
|
172
|
+
readonly 'config.clean': "没有未保存的修改";
|
|
173
|
+
readonly 'config.saved': "已保存";
|
|
174
|
+
readonly 'config.saveFailed': "保存失败,已回读宿主状态";
|
|
175
|
+
readonly 'config.qualityGate': "质量门(安装前扫描)";
|
|
176
|
+
readonly 'config.qualityGate.enabled': "安装前扫描";
|
|
177
|
+
readonly 'config.qualityGate.enabledHint': "关闭后安装不再做前置检查";
|
|
178
|
+
readonly 'config.qualityGate.mode': "拦截强度";
|
|
179
|
+
readonly 'config.qualityGate.mode.block': "发现问题即回滚";
|
|
180
|
+
readonly 'config.qualityGate.mode.warn': "只报告,仍完成安装";
|
|
181
|
+
readonly 'config.diagnostics': "诊断分层";
|
|
182
|
+
readonly 'config.diagnostics.hint': "关闭的层会在体检里跳过";
|
|
183
|
+
readonly 'config.diagnostics.dependency': "L1 依赖";
|
|
184
|
+
readonly 'config.diagnostics.composition': "L2 组合";
|
|
185
|
+
readonly 'config.diagnostics.runtime': "L3 运行时";
|
|
186
|
+
readonly 'config.diagnostics.consistency': "L4 一致性";
|
|
187
|
+
readonly 'config.diagnostics.ecosystem': "L5 生态(需要联网)";
|
|
188
|
+
readonly 'config.marketplace': "市场";
|
|
189
|
+
readonly 'config.marketplace.enabled': "启用远程索引";
|
|
190
|
+
readonly 'config.marketplace.cacheTtlMinutes': "索引缓存有效期(分钟)";
|
|
191
|
+
readonly 'config.marketplace.timeoutMs': "网络请求超时(毫秒)";
|
|
192
|
+
readonly 'config.marketplace.indexUrl': "自定义索引源";
|
|
193
|
+
readonly 'config.marketplace.indexUrlPlaceholder': "留空即用内置源";
|
|
194
|
+
readonly 'config.marketplace.indexUrlHint': "非空时优先访问这个地址(自定义/镜像索引),失败仍回退内置源;清空即恢复只用内置源。";
|
|
195
|
+
readonly 'config.trial': "试装";
|
|
196
|
+
readonly 'config.trial.enabled': "试装总开关";
|
|
197
|
+
readonly 'config.trial.factExecutes': "试装会在你的机器上真实安装候选包,并执行它自带的安装脚本";
|
|
198
|
+
readonly 'config.trial.factMemory': "一次验证启动的内存峰值约 {mib} MiB";
|
|
199
|
+
readonly 'config.trial.factMeasurement': "{measurement}";
|
|
200
|
+
readonly 'config.trial.disclosureUnknown': "试装会做什么:未知";
|
|
201
|
+
readonly 'config.trial.disclosureReason': "披露事实读不到:{reason}";
|
|
202
|
+
readonly 'config.trial.depth': "验证深度";
|
|
203
|
+
readonly 'config.trial.depth.auto': "自动(先建轻量副本)";
|
|
204
|
+
readonly 'config.trial.depth.shallow': "只用轻量副本";
|
|
205
|
+
readonly 'config.trial.depth.full': "每次都用完整副本";
|
|
206
|
+
readonly 'config.trial.depth.autoHint': "先建轻量副本;只有基线明确起不来,才升级为完整副本并重跑一次基线";
|
|
207
|
+
readonly 'config.trial.depth.shallowHint': "只用轻量副本:省一次官方安装,但组合层不全时会把缺依赖报成基线起不来";
|
|
208
|
+
readonly 'config.trial.depth.fullHint': "每次都建完整副本:最保真,也最慢";
|
|
209
|
+
readonly 'config.trial.baseline': "试装前做基线启动";
|
|
210
|
+
readonly 'config.trial.baselineHint': "关掉省一次启动;失败时说不清是环境本来就起不来,还是候选包把它弄坏了,结论会降级为「无法试装」。";
|
|
211
|
+
readonly 'config.trial.allowNetwork': "允许联网拉取候选包";
|
|
212
|
+
readonly 'config.trial.allowNetworkHint': "关掉只用本地 pnpm store:store 里没有的包直接判「无法试装」";
|
|
213
|
+
readonly 'config.trial.onFailure': "试装失败时的行为";
|
|
214
|
+
readonly 'config.trial.onFailure.block': "阻止安装";
|
|
215
|
+
readonly 'config.trial.onFailure.warn': "只警告,照常安装";
|
|
216
|
+
readonly 'config.trial.onFailure.blockHint': "不安装:回滚候选包,并给出原因链";
|
|
217
|
+
readonly 'config.trial.onFailure.warnHint': "照常安装,但结论仍是「未通过」——放行不等于通过";
|
|
218
|
+
readonly 'config.trial.autoCleanup': "自动清理测试环境";
|
|
219
|
+
readonly 'config.trial.retentionDays': "保留天数";
|
|
220
|
+
readonly 'config.trial.retentionHint': "超过保留天数没用过的会被清理;正在运行的永远不删";
|
|
221
|
+
readonly 'config.trial.maxKept': "最多保留数量(0 = 不限)";
|
|
222
|
+
readonly 'config.trial.maxKeptHint': "达到上限时新的试装会拒绝执行;它不会为了腾位删掉任何一个测试环境";
|
|
223
|
+
readonly 'trial.title': "测试环境";
|
|
224
|
+
readonly 'trial.loading': "读取中…";
|
|
225
|
+
readonly 'trial.failed': "读取测试环境失败:{message}";
|
|
226
|
+
readonly 'trial.empty': "没有测试环境";
|
|
227
|
+
readonly 'trial.count': "{count} 个测试环境";
|
|
228
|
+
readonly 'trial.total': "已知占地 {size}";
|
|
229
|
+
readonly 'trial.bytes': "占地 {size}";
|
|
230
|
+
readonly 'trial.unknownBytes': "{count} 个环境的占地统计不出来";
|
|
231
|
+
readonly 'trial.age': "{days} 天未使用";
|
|
232
|
+
readonly 'trial.modifiedAt': "最后物化:{at}";
|
|
233
|
+
readonly 'trial.owner': "归属:{name}";
|
|
234
|
+
readonly 'trial.orphan': "归属环境已不存在";
|
|
235
|
+
readonly 'trial.ownerUnknown': "归属读不到";
|
|
236
|
+
readonly 'trial.runningUnknown': "运行状态读不到";
|
|
237
|
+
readonly 'trial.snapshotCurrent': "副本与真实环境一致";
|
|
238
|
+
readonly 'trial.snapshotStale': "副本已过期,下次试装会重新建立";
|
|
239
|
+
readonly 'trial.snapshotNotApplicable': "副本比对不适用";
|
|
240
|
+
readonly 'trial.factsUnreadable': "进程事实读不到:{reason}";
|
|
241
|
+
readonly 'trial.factsUnreadableNote': "这些测试环境一律按「运行中」处理,不删除";
|
|
242
|
+
readonly 'trial.overCap': "已达保留上限,新的试装会拒绝执行";
|
|
243
|
+
readonly 'trial.cleanup': "清理过期";
|
|
244
|
+
readonly 'trial.cleanupTitle': "清理过期测试环境";
|
|
245
|
+
readonly 'trial.cleanupDesc': "按当前计划删除 {count} 个测试环境;正在运行的不会被删";
|
|
246
|
+
readonly 'trial.cleanupNone': "没有需要清理的测试环境";
|
|
247
|
+
readonly 'trial.cleanupUnknown': "读不到清理计划,无法确认会删几个";
|
|
248
|
+
readonly 'trial.cleanupDone': "已清理 {count} 个测试环境";
|
|
249
|
+
readonly 'trial.cleanupNothing': "没有清理任何测试环境";
|
|
250
|
+
readonly 'trial.planTitle': "下次清理";
|
|
251
|
+
readonly 'trial.planRemove': "会删这 {count} 个";
|
|
252
|
+
readonly 'trial.planKeep': "会留这 {count} 个";
|
|
253
|
+
readonly 'trial.removeTitle': "删除测试环境 {name}";
|
|
254
|
+
readonly 'trial.removeDesc': "删除该测试环境的目录,不可撤销";
|
|
255
|
+
readonly 'trial.doRemove': "删除";
|
|
256
|
+
readonly 'trial.bytesUnknown': "占地读不出来:{reason}";
|
|
257
|
+
readonly 'trial.sharedFiles': "{count} 个文件与 pnpm store 共用,实际独占磁盘更小";
|
|
258
|
+
readonly 'market.title': "插件市场";
|
|
259
|
+
readonly 'market.refresh': "刷新索引";
|
|
260
|
+
readonly 'market.refreshing': "刷新中…";
|
|
261
|
+
readonly 'market.search': "搜索名称、描述或主题";
|
|
262
|
+
readonly 'market.category': "分类";
|
|
263
|
+
readonly 'market.kind': "类型";
|
|
264
|
+
readonly 'market.all': "全部";
|
|
265
|
+
readonly 'market.kind.cordis-plugin': "插件";
|
|
266
|
+
readonly 'market.kind.skill': "技能";
|
|
267
|
+
readonly 'market.kind.agent-preset': "预设";
|
|
268
|
+
readonly 'market.kind.unknown': "未知";
|
|
269
|
+
readonly 'market.install': "安装";
|
|
270
|
+
readonly 'market.installing': "安装中…";
|
|
271
|
+
readonly 'market.installed': "已安装";
|
|
272
|
+
readonly 'market.updatable': "可更新 {version}";
|
|
273
|
+
readonly 'market.upgradeTo': "升级到 {version}";
|
|
274
|
+
readonly 'market.stars': "{count} 星";
|
|
275
|
+
readonly 'market.updatedAt': "更新于 {at}";
|
|
276
|
+
readonly 'market.empty': "没有匹配的条目";
|
|
277
|
+
readonly 'market.failed': "市场索引读取失败:{message}";
|
|
278
|
+
readonly 'market.cached': "来自缓存";
|
|
279
|
+
readonly 'market.fresh': "刚生成";
|
|
280
|
+
readonly 'market.generatedAt': "索引生成于 {at}";
|
|
281
|
+
readonly 'market.tag.risk': "风险";
|
|
282
|
+
readonly 'market.tag.caution': "需注意";
|
|
283
|
+
readonly 'market.tag.manual': "需手动安装";
|
|
284
|
+
readonly 'market.tag.pick': "社区精选";
|
|
285
|
+
readonly 'market.tag.archived': "已归档";
|
|
286
|
+
readonly 'market.filter': "筛选";
|
|
287
|
+
readonly 'market.filter.all': "全部";
|
|
288
|
+
readonly 'market.filter.installed': "只看已安装";
|
|
289
|
+
readonly 'market.filter.updatable': "只看可更新";
|
|
290
|
+
readonly 'market.showNonPlugin': "显示非插件条目";
|
|
291
|
+
readonly 'market.detailShow': "详情";
|
|
292
|
+
readonly 'market.detailHide': "收起";
|
|
293
|
+
readonly 'market.detail.kind': "类型";
|
|
294
|
+
readonly 'market.detail.category': "分类";
|
|
295
|
+
readonly 'market.detail.topics': "主题";
|
|
296
|
+
readonly 'market.detail.risk': "风险等级";
|
|
297
|
+
readonly 'market.detail.riskFlags': "风险明细";
|
|
298
|
+
readonly 'market.detail.verified': "独立校验";
|
|
299
|
+
readonly 'market.detail.license': "许可证";
|
|
300
|
+
readonly 'market.detail.npm': "npm 包";
|
|
301
|
+
readonly 'market.detail.version': "版本";
|
|
302
|
+
readonly 'market.unavailable': "插件索引不可用:{reason}";
|
|
303
|
+
readonly 'market.unavailableHint': "索引不可用,暂无条目";
|
|
304
|
+
readonly 'market.failedUnknown': "全部索引来源都失败了";
|
|
305
|
+
readonly 'market.stale': "可能不是最新";
|
|
306
|
+
readonly 'market.retry': "重试";
|
|
307
|
+
readonly 'market.installTitle': "安装 {name}";
|
|
308
|
+
readonly 'market.installDesc': "安装前会先检查;不合格会回滚,环境保持可用";
|
|
309
|
+
readonly 'market.gateIssues': "质量门发现的问题";
|
|
310
|
+
readonly 'market.rolledBack': "已回滚";
|
|
311
|
+
readonly 'market.installFailed': "安装失败:{message}";
|
|
312
|
+
readonly 'market.openRepo': "打开仓库";
|
|
313
|
+
readonly 'market.sort': "排序";
|
|
314
|
+
readonly 'market.sortDirection': "排序方向";
|
|
315
|
+
readonly 'market.moreTags': "还有 {count} 个标签";
|
|
316
|
+
readonly 'market.window': "已显示 {loaded} / 共 {total} 条";
|
|
317
|
+
readonly 'market.windowAll': "已显示全部 {total} 条";
|
|
318
|
+
readonly 'market.loadMore': "加载更多";
|
|
319
|
+
readonly 'market.windowCap': "已达单页渲染上限,请用搜索或筛选缩小范围";
|
|
320
|
+
readonly 'market.sort.stars': "按星数";
|
|
321
|
+
readonly 'market.sort.trending': "按热度";
|
|
322
|
+
readonly 'market.sort.az': "按名称";
|
|
323
|
+
readonly 'market.sort.updated': "按更新时间";
|
|
324
|
+
readonly 'market.sort.category': "按分类";
|
|
325
|
+
readonly 'market.sort.asc': "升序";
|
|
326
|
+
readonly 'market.sort.desc': "降序";
|
|
327
|
+
readonly 'market.filterCategory': "分类筛选";
|
|
328
|
+
readonly 'market.type.cordis-plugin': "插件";
|
|
329
|
+
readonly 'market.type.skill': "技能";
|
|
330
|
+
readonly 'market.type.agent-preset': "预设";
|
|
331
|
+
readonly 'market.status.verified': "已认证";
|
|
332
|
+
readonly 'market.status.archived': "已归档";
|
|
333
|
+
readonly 'market.status.pending': "待认证";
|
|
334
|
+
readonly 'market.security.low': "风险低";
|
|
335
|
+
readonly 'market.security.medium': "风险中";
|
|
336
|
+
readonly 'market.security.high': "风险高";
|
|
337
|
+
readonly 'market.security.unknown': "风险未知";
|
|
338
|
+
readonly 'market.trial': "试装结论";
|
|
339
|
+
readonly 'market.trial.unknownValue': "未识别:{value}";
|
|
340
|
+
readonly 'market.trial.conclusion.passed': "试装通过";
|
|
341
|
+
readonly 'market.trial.conclusion.baseline-broken': "基线起不来:问题在环境本身";
|
|
342
|
+
readonly 'market.trial.conclusion.candidate-broken': "候选包导致启动失败";
|
|
343
|
+
readonly 'market.trial.conclusion.cannot-trial': "无法试装:这次没有完成验证";
|
|
344
|
+
readonly 'market.trial.policy.passed': "安装照常";
|
|
345
|
+
readonly 'market.trial.policy.blocked': "已阻止安装并回滚";
|
|
346
|
+
readonly 'market.trial.policy.warned': "未通过,按警告模式放行";
|
|
347
|
+
readonly 'market.trial.policy.skipped': "这次没有执行试装";
|
|
348
|
+
readonly 'market.trial.warned': "放行不等于通过:这次安装没有通过验证";
|
|
349
|
+
readonly 'market.trial.cannotTrial': "这次没有完成验证,结论不是「通过」";
|
|
350
|
+
readonly 'market.trial.skipped': "按设置或豁免名单跳过了试装";
|
|
351
|
+
readonly 'market.trial.depth': "验证深度:{depth}";
|
|
352
|
+
readonly 'market.trial.depthValue.shallow': "轻量副本";
|
|
353
|
+
readonly 'market.trial.depthValue.full': "完整副本";
|
|
354
|
+
readonly 'market.trial.escalated': "已从轻量副本升级为完整副本:{reason}";
|
|
355
|
+
readonly 'market.trial.baseline': "基线启动:{verdict}";
|
|
356
|
+
readonly 'market.trial.candidate': "装入候选包后:{verdict}";
|
|
357
|
+
readonly 'market.trial.verdict.mounted': "启动成功";
|
|
358
|
+
readonly 'market.trial.verdict.failed': "启动失败";
|
|
359
|
+
readonly 'market.trial.verdict.undetermined': "判不出来";
|
|
360
|
+
readonly 'market.trial.elapsed': "耗时 {ms} ms";
|
|
361
|
+
readonly 'kinds.title': "技能与预设";
|
|
362
|
+
readonly 'kinds.intro': "本插件安装过的 SKILL.md 与 agent.cordis.yml 资源";
|
|
363
|
+
readonly 'kinds.refresh': "刷新";
|
|
364
|
+
readonly 'kinds.empty': "还没有通过本插件安装的技能或预设";
|
|
365
|
+
readonly 'kinds.orphans': "未登记的目录";
|
|
366
|
+
readonly 'kinds.orphansHint': "磁盘上存在、但没有安装记录的目录";
|
|
367
|
+
readonly 'kinds.uninstall': "卸载";
|
|
368
|
+
readonly 'kinds.uninstallTitle': "卸载 {repo}";
|
|
369
|
+
readonly 'kinds.uninstallDesc': "只删除本插件安装时落地的目录,且不可撤销。手工放置的目录不会被删除。";
|
|
370
|
+
readonly 'kinds.installedAt': "安装于 {at}";
|
|
371
|
+
readonly 'kinds.commit': "提交";
|
|
372
|
+
readonly 'kinds.dir': "目录";
|
|
373
|
+
readonly 'kinds.failed': "读取失败:{message}";
|
|
374
|
+
readonly 'kinds.acknowledge': "我明白这会删除该目录且不可撤销";
|
|
375
|
+
readonly 'time.now': "刚刚";
|
|
376
|
+
readonly 'time.minutes': "{n} 分钟前";
|
|
377
|
+
readonly 'time.hours': "{n} 小时前";
|
|
378
|
+
readonly 'time.days': "{n} 天前";
|
|
379
|
+
readonly 'time.months': "{n} 个月前";
|
|
380
|
+
readonly 'time.years': "{n} 年前";
|
|
381
|
+
readonly 'trace.signal': "信号 {signal}";
|
|
382
|
+
readonly 'trace.exitCode': "退出码 {exitCode}";
|
|
383
|
+
readonly 'trace.noExitCode': "无退出码";
|
|
384
|
+
readonly 'trace.running': "运行中";
|
|
385
|
+
readonly 'trace.failed': "失败";
|
|
386
|
+
readonly 'trace.done': "完成";
|
|
387
|
+
readonly 'trace.copy': "复制输出";
|
|
388
|
+
readonly 'trace.copied': "已复制";
|
|
389
|
+
readonly 'trace.noOutput': "(无输出)";
|
|
390
|
+
readonly 'trace.collapse': "收起";
|
|
391
|
+
readonly 'trace.collapseAria': "收起输出";
|
|
392
|
+
readonly 'trace.expand': "展开 {hidden} 行";
|
|
393
|
+
readonly 'trace.expandAria': "展开隐藏的 {hidden} 行";
|
|
394
|
+
readonly 'json.copyValue': "复制值";
|
|
395
|
+
readonly 'json.copyJson': "复制 JSON";
|
|
396
|
+
readonly 'json.copyPath': "复制路径";
|
|
397
|
+
readonly 'json.copyPretty': "复制格式化 JSON";
|
|
398
|
+
readonly 'json.copyCompact': "复制压缩 JSON";
|
|
399
|
+
readonly 'json.copied': "已复制";
|
|
400
|
+
readonly 'json.copyFailed': "复制失败";
|
|
401
|
+
readonly 'json.collapseNode': "收起节点";
|
|
402
|
+
readonly 'json.expandNode': "展开节点";
|
|
403
|
+
readonly 'json.copyButtonTitle': "复制:{action}";
|
|
404
|
+
readonly 'upgrade.title': "版本";
|
|
405
|
+
readonly 'upgrade.rowLabel': "升级";
|
|
406
|
+
readonly 'upgrade.available': "有新版本";
|
|
407
|
+
readonly 'upgrade.unknownTag': "查不到";
|
|
408
|
+
readonly 'upgrade.notUpgradableTag': "安装方提供";
|
|
409
|
+
readonly 'upgrade.versions': "当前 {from} → {to}";
|
|
410
|
+
readonly 'upgrade.unknownVersion': "未知";
|
|
411
|
+
readonly 'upgrade.versionLine': "版本线";
|
|
412
|
+
readonly 'upgrade.tag.sameLine': "· 同线";
|
|
413
|
+
readonly 'upgrade.tag.otherLine': "· 另一条线";
|
|
414
|
+
readonly 'upgrade.switchLine': "升级会切到另一条版本线";
|
|
415
|
+
readonly 'upgrade.changesSource': "这次升级会把来源从本地路径换成 registry 上的版本";
|
|
416
|
+
readonly 'upgrade.spec': "当前来源:{spec}";
|
|
417
|
+
readonly 'upgrade.source.market': "市场索引";
|
|
418
|
+
readonly 'upgrade.source.registry': "registry";
|
|
419
|
+
readonly 'upgrade.source.plain': "版本事实来自{source}";
|
|
420
|
+
readonly 'upgrade.source.at': "版本事实来自{source}({at})";
|
|
421
|
+
readonly 'upgrade.action': "升级到 {version}";
|
|
422
|
+
readonly 'upgrade.actionHint': "先验证再升级;没通过就不动当前环境";
|
|
423
|
+
readonly 'upgrade.running': "升级中…";
|
|
424
|
+
readonly 'upgrade.effect': "已安装,下次启动后加载。";
|
|
425
|
+
readonly 'upgrade.retry': "重新检查";
|
|
426
|
+
readonly 'upgrade.unknown': "查不到:{reason}";
|
|
427
|
+
readonly 'upgrade.unknownDetail': "{reason}";
|
|
428
|
+
readonly 'upgrade.unknownReason': "没有可用的版本事实";
|
|
429
|
+
readonly 'upgrade.installationProvided': "由安装方提供,无法在当前环境内升级";
|
|
430
|
+
readonly 'upgrade.loadFailed': "检查更新失败:{message}";
|
|
431
|
+
readonly 'upgrade.notChecked': "尚未检查更新";
|
|
432
|
+
readonly 'upgrade.checkedAt': "上次检查:{at}";
|
|
433
|
+
readonly 'upgrade.neverChecked': "从未成功检查过";
|
|
434
|
+
readonly 'upgrade.checking': "检查中…";
|
|
435
|
+
readonly 'upgrade.check': "检查更新";
|
|
436
|
+
readonly 'upgrade.notes': "检查说明";
|
|
437
|
+
readonly 'upgrade.result.title': "最近一次升级";
|
|
438
|
+
readonly 'upgrade.result.done': "{name} 已升级:{from} → {to}";
|
|
439
|
+
readonly 'upgrade.result.failed': "{name} 升级没有完成";
|
|
440
|
+
readonly 'upgrade.result.rolledBack': "{name} 没有升级:新版本没通过验证";
|
|
441
|
+
readonly 'upgrade.result.unverified': "{name} 已升级(未验证)";
|
|
442
|
+
readonly 'upgrade.result.restart': "新版本在下次启动时加载";
|
|
443
|
+
readonly 'upgrade.result.selfRestart': "正在运行的是旧代码,新版本在下次启动时加载";
|
|
444
|
+
readonly 'upgrade.canary.passed': "验证通过";
|
|
445
|
+
readonly 'upgrade.canary.failed': "验证没通过:新版本装进环境副本后起不来";
|
|
446
|
+
readonly 'upgrade.canary.notRun': "这次没有验证(不等于通过)";
|
|
447
|
+
readonly 'upgrade.canary.absent': "这次没有验证结论";
|
|
448
|
+
readonly 'upgrade.canary.reasonLabel': "原因";
|
|
449
|
+
readonly 'upgrade.canary.activated': "新版本已进入启动列表";
|
|
450
|
+
readonly 'upgrade.canary.notActivated': "新版本没有进入启动列表(那次验证不算数)";
|
|
451
|
+
readonly 'upgrade.result.disk': "当前状态";
|
|
452
|
+
readonly 'upgrade.result.commandOutput': "命令输出(来自升级命令)";
|
|
453
|
+
readonly 'upgrade.rollback.title': "最近一次回滚";
|
|
454
|
+
readonly 'upgrade.rollback.done': "{name} 已回滚:{from} → {to}";
|
|
455
|
+
readonly 'upgrade.rollback.incomplete': "{name} 回滚没有完成";
|
|
456
|
+
readonly 'upgrade.rollback.clean': "盘上核对一致";
|
|
457
|
+
readonly 'upgrade.rollback.dirty': "盘上仍有残留,需要按下面的事实处理";
|
|
458
|
+
readonly 'upgrade.rollback.unknown': "盘上核对结果读不出来";
|
|
459
|
+
readonly 'upgrade.rollback.action': "回滚到 {version}";
|
|
460
|
+
readonly 'upgrade.rollback.confirmTitle': "回滚这次升级";
|
|
461
|
+
readonly 'upgrade.rollback.confirmBody': "会把 {name} 换回 {version},也就是升级前的版本";
|
|
462
|
+
readonly 'upgrade.dismiss': "知道了";
|
|
463
|
+
readonly 'official.title': "插件管理器伴生";
|
|
464
|
+
readonly 'official.summary': "安装前检查、环境体检与多环境管理";
|
|
465
|
+
};
|
|
466
|
+
/** 字典的键域(en 必须与它逐键对齐)。 */
|
|
467
|
+
export type CompanionLocaleKey = keyof typeof zh;
|
|
468
|
+
/** 英文文案。 */
|
|
469
|
+
export declare const en: Record<CompanionLocaleKey, string>;
|
|
470
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
471
|
+
interface LocaleNamespaceMap {
|
|
472
|
+
/** 本插件全部产品文案。 */
|
|
473
|
+
'plugin-manager-companion': CompanionLocaleKey;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PmSelect — 用官方 Menu 取代原生 `<select>` 的下拉选择器。
|
|
3
|
+
*
|
|
4
|
+
* 归属:C 类·需求参考(旧仓库 src/client/PmSelect.tsx 的意图:原生 select 在
|
|
5
|
+
* 官方视觉体系里是异物,且无法承载图标与分组;旧实现自带样式,这里改用官方
|
|
6
|
+
* Button + Menu)。
|
|
7
|
+
* 旧实现参考:dsh-web-plugin-manager/src/client/PmSelect.tsx(未复制代码)。
|
|
8
|
+
* 官方复用:@deepseek-ai/dsh-client-ui-primitives 的 Button / Menu / 图标。
|
|
9
|
+
* 前提检查:旧实现的动机(官方没有可用的下拉)仍然成立——primitives 只导出
|
|
10
|
+
* Menu(锚点 + 列表),没有 Select;但它已经把键盘、外点关闭、焦点回归都做完了,
|
|
11
|
+
* 所以这里只组合,不重建。
|
|
12
|
+
*/
|
|
13
|
+
/** 一个可选项。 */
|
|
14
|
+
export interface PmSelectOption {
|
|
15
|
+
/** 稳定 id(提交给动作的就是它)。 */
|
|
16
|
+
readonly id: string;
|
|
17
|
+
/** 已本地化的展示文本。 */
|
|
18
|
+
readonly label: string;
|
|
19
|
+
}
|
|
20
|
+
/** PmSelect 的 props。 */
|
|
21
|
+
export interface PmSelectProps {
|
|
22
|
+
readonly value: string;
|
|
23
|
+
readonly options: readonly PmSelectOption[];
|
|
24
|
+
readonly onChange: (id: string) => void;
|
|
25
|
+
/** 可访问名(已本地化)。 */
|
|
26
|
+
readonly label: string;
|
|
27
|
+
/** 没有匹配项时显示的文本(已本地化)。 */
|
|
28
|
+
readonly placeholder: string;
|
|
29
|
+
readonly disabled?: boolean;
|
|
30
|
+
readonly className?: string | undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 渲染一个官方风格的下拉选择器。
|
|
34
|
+
*
|
|
35
|
+
* @param props - 当前值、选项、变更回调与文案。
|
|
36
|
+
* @returns 锚点按钮与它的菜单。
|
|
37
|
+
*/
|
|
38
|
+
export declare function PmSelect({ value, options, onChange, label, placeholder, disabled, className }: PmSelectProps): import("react").JSX.Element;
|