dsh-config-manager 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/README.md +216 -0
- package/README.zh-CN.md +218 -0
- package/cordis.patch.yml +45 -0
- package/dsh.bundle.patch +21 -0
- package/dsh.client +39 -0
- package/lib/adapters/agent-presets.d.ts +13 -0
- package/lib/adapters/agent-presets.js +14 -0
- package/lib/adapters/agent-presets.js.map +1 -0
- package/lib/adapters/credentials.d.ts +36 -0
- package/lib/adapters/credentials.js +121 -0
- package/lib/adapters/credentials.js.map +1 -0
- package/lib/adapters/file-collection.d.ts +14 -0
- package/lib/adapters/file-collection.js +102 -0
- package/lib/adapters/file-collection.js.map +1 -0
- package/lib/adapters/index.d.ts +38 -0
- package/lib/adapters/index.js +46 -0
- package/lib/adapters/index.js.map +1 -0
- package/lib/adapters/mcp.d.ts +27 -0
- package/lib/adapters/mcp.js +175 -0
- package/lib/adapters/mcp.js.map +1 -0
- package/lib/adapters/plugin-files.d.ts +15 -0
- package/lib/adapters/plugin-files.js +91 -0
- package/lib/adapters/plugin-files.js.map +1 -0
- package/lib/adapters/plugins.d.ts +13 -0
- package/lib/adapters/plugins.js +177 -0
- package/lib/adapters/plugins.js.map +1 -0
- package/lib/adapters/prompts.d.ts +29 -0
- package/lib/adapters/prompts.js +228 -0
- package/lib/adapters/prompts.js.map +1 -0
- package/lib/adapters/providers.d.ts +33 -0
- package/lib/adapters/providers.js +143 -0
- package/lib/adapters/providers.js.map +1 -0
- package/lib/adapters/sessions.d.ts +14 -0
- package/lib/adapters/sessions.js +15 -0
- package/lib/adapters/sessions.js.map +1 -0
- package/lib/adapters/settings.d.ts +23 -0
- package/lib/adapters/settings.js +142 -0
- package/lib/adapters/settings.js.map +1 -0
- package/lib/adapters/skills.d.ts +13 -0
- package/lib/adapters/skills.js +14 -0
- package/lib/adapters/skills.js.map +1 -0
- package/lib/adapters/test-helpers.d.ts +99 -0
- package/lib/adapters/test-helpers.js +192 -0
- package/lib/adapters/test-helpers.js.map +1 -0
- package/lib/adapters/ui.d.ts +26 -0
- package/lib/adapters/ui.js +88 -0
- package/lib/adapters/ui.js.map +1 -0
- package/lib/adapters/workspaces.d.ts +12 -0
- package/lib/adapters/workspaces.js +92 -0
- package/lib/adapters/workspaces.js.map +1 -0
- package/lib/client.d.ts +377 -0
- package/lib/client.js +2598 -0
- package/lib/client.js.map +1 -0
- package/lib/core/analyzer.d.ts +35 -0
- package/lib/core/analyzer.js +563 -0
- package/lib/core/analyzer.js.map +1 -0
- package/lib/core/backup.d.ts +29 -0
- package/lib/core/backup.js +184 -0
- package/lib/core/backup.js.map +1 -0
- package/lib/core/exporter.d.ts +37 -0
- package/lib/core/exporter.js +222 -0
- package/lib/core/exporter.js.map +1 -0
- package/lib/core/importer.d.ts +42 -0
- package/lib/core/importer.js +25 -0
- package/lib/core/importer.js.map +1 -0
- package/lib/core/index.d.ts +12 -0
- package/lib/core/index.js +11 -0
- package/lib/core/index.js.map +1 -0
- package/lib/core/rollback.d.ts +9 -0
- package/lib/core/rollback.js +136 -0
- package/lib/core/rollback.js.map +1 -0
- package/lib/core/types.d.ts +331 -0
- package/lib/core/types.js +18 -0
- package/lib/core/types.js.map +1 -0
- package/lib/core/validator.d.ts +18 -0
- package/lib/core/validator.js +77 -0
- package/lib/core/validator.js.map +1 -0
- package/lib/index.d.ts +51 -0
- package/lib/index.js +875 -0
- package/lib/index.js.map +1 -0
- package/lib/migrations/index.d.ts +29 -0
- package/lib/migrations/index.js +56 -0
- package/lib/migrations/index.js.map +1 -0
- package/lib/migrations/v1-to-v2.d.ts +9 -0
- package/lib/migrations/v1-to-v2.js +10 -0
- package/lib/migrations/v1-to-v2.js.map +1 -0
- package/lib/profiles/index.d.ts +4 -0
- package/lib/profiles/index.js +5 -0
- package/lib/profiles/index.js.map +1 -0
- package/lib/profiles/profile-manager.d.ts +102 -0
- package/lib/profiles/profile-manager.js +522 -0
- package/lib/profiles/profile-manager.js.map +1 -0
- package/lib/schema/config.d.ts +28 -0
- package/lib/schema/config.js +136 -0
- package/lib/schema/config.js.map +1 -0
- package/lib/schema/manifest.d.ts +28 -0
- package/lib/schema/manifest.js +109 -0
- package/lib/schema/manifest.js.map +1 -0
- package/lib/schema/types.d.ts +169 -0
- package/lib/schema/types.js +8 -0
- package/lib/schema/types.js.map +1 -0
- package/lib/schema/versions.d.ts +27 -0
- package/lib/schema/versions.js +50 -0
- package/lib/schema/versions.js.map +1 -0
- package/lib/security/encryption.d.ts +41 -0
- package/lib/security/encryption.js +152 -0
- package/lib/security/encryption.js.map +1 -0
- package/lib/security/index.d.ts +16 -0
- package/lib/security/index.js +17 -0
- package/lib/security/index.js.map +1 -0
- package/lib/security/integrity.d.ts +30 -0
- package/lib/security/integrity.js +78 -0
- package/lib/security/integrity.js.map +1 -0
- package/lib/security/redaction.d.ts +26 -0
- package/lib/security/redaction.js +95 -0
- package/lib/security/redaction.js.map +1 -0
- package/lib/security/secret-scanner.d.ts +48 -0
- package/lib/security/secret-scanner.js +253 -0
- package/lib/security/secret-scanner.js.map +1 -0
- package/lib/security/zip-security.d.ts +27 -0
- package/lib/security/zip-security.js +154 -0
- package/lib/security/zip-security.js.map +1 -0
- package/lib/ui/conflict-view.d.ts +28 -0
- package/lib/ui/conflict-view.js +49 -0
- package/lib/ui/conflict-view.js.map +1 -0
- package/lib/ui/errors.d.ts +17 -0
- package/lib/ui/errors.js +76 -0
- package/lib/ui/errors.js.map +1 -0
- package/lib/ui/export-flow.d.ts +62 -0
- package/lib/ui/export-flow.js +79 -0
- package/lib/ui/export-flow.js.map +1 -0
- package/lib/ui/import-wizard.d.ts +67 -0
- package/lib/ui/import-wizard.js +169 -0
- package/lib/ui/import-wizard.js.map +1 -0
- package/lib/ui/path-mapping.d.ts +38 -0
- package/lib/ui/path-mapping.js +75 -0
- package/lib/ui/path-mapping.js.map +1 -0
- package/lib/ui/progress.d.ts +27 -0
- package/lib/ui/progress.js +76 -0
- package/lib/ui/progress.js.map +1 -0
- package/lib/ui/report.d.ts +21 -0
- package/lib/ui/report.js +146 -0
- package/lib/ui/report.js.map +1 -0
- package/lib/ui/test-helpers.d.ts +62 -0
- package/lib/ui/test-helpers.js +147 -0
- package/lib/ui/test-helpers.js.map +1 -0
- package/lib/ui/types.d.ts +129 -0
- package/lib/ui/types.js +21 -0
- package/lib/ui/types.js.map +1 -0
- package/lib/utils/hashing.d.ts +17 -0
- package/lib/utils/hashing.js +41 -0
- package/lib/utils/hashing.js.map +1 -0
- package/lib/utils/json.d.ts +24 -0
- package/lib/utils/json.js +76 -0
- package/lib/utils/json.js.map +1 -0
- package/lib/utils/logger.d.ts +39 -0
- package/lib/utils/logger.js +82 -0
- package/lib/utils/logger.js.map +1 -0
- package/lib/utils/paths.d.ts +31 -0
- package/lib/utils/paths.js +132 -0
- package/lib/utils/paths.js.map +1 -0
- package/lib/utils/zip.d.ts +54 -0
- package/lib/utils/zip.js +285 -0
- package/lib/utils/zip.js.map +1 -0
- package/package.json +109 -0
- package/src/adapters/agent-presets.ts +14 -0
- package/src/adapters/credentials.test.ts +90 -0
- package/src/adapters/credentials.ts +141 -0
- package/src/adapters/file-collection.ts +110 -0
- package/src/adapters/files.test.ts +113 -0
- package/src/adapters/index.ts +69 -0
- package/src/adapters/mcp.test.ts +96 -0
- package/src/adapters/mcp.ts +181 -0
- package/src/adapters/plugin-files.ts +96 -0
- package/src/adapters/plugins.test.ts +72 -0
- package/src/adapters/plugins.ts +176 -0
- package/src/adapters/prompts.test.ts +110 -0
- package/src/adapters/prompts.ts +226 -0
- package/src/adapters/providers.test.ts +125 -0
- package/src/adapters/providers.ts +161 -0
- package/src/adapters/roundtrip.test.ts +188 -0
- package/src/adapters/sessions.ts +15 -0
- package/src/adapters/settings.test.ts +93 -0
- package/src/adapters/settings.ts +165 -0
- package/src/adapters/skills.ts +14 -0
- package/src/adapters/test-helpers.ts +207 -0
- package/src/adapters/ui.test.ts +56 -0
- package/src/adapters/ui.ts +106 -0
- package/src/adapters/workspaces.test.ts +79 -0
- package/src/adapters/workspaces.ts +95 -0
- package/src/client/CLIENT_DEPENDENCIES.md +101 -0
- package/src/client/ConfigManagerSection.tsx +60 -0
- package/src/client/api.ts +270 -0
- package/src/client/client-types.ts +27 -0
- package/src/client/common/ErrorBanner.tsx +68 -0
- package/src/client/common/ProgressBar.tsx +49 -0
- package/src/client/common/ReportView.tsx +117 -0
- package/src/client/common/ui.tsx +165 -0
- package/src/client/config-manager.module.css +759 -0
- package/src/client/css-modules.d.ts +8 -0
- package/src/client/export/ExportView.tsx +222 -0
- package/src/client/import/ConflictList.tsx +72 -0
- package/src/client/import/ImportWizardView.tsx +406 -0
- package/src/client/import/PathMappingForm.tsx +77 -0
- package/src/client/index.ts +65 -0
- package/src/client/locales.ts +182 -0
- package/src/core/analyzer.ts +631 -0
- package/src/core/backup.ts +212 -0
- package/src/core/exporter.ts +246 -0
- package/src/core/importer.ts +66 -0
- package/src/core/index.ts +39 -0
- package/src/core/rollback.ts +140 -0
- package/src/core/smoke.test.ts +717 -0
- package/src/core/types.ts +343 -0
- package/src/core/validator.ts +84 -0
- package/src/index.ts +942 -0
- package/src/migrations/index.ts +71 -0
- package/src/migrations/v1-to-v2.ts +17 -0
- package/src/profiles/index.ts +8 -0
- package/src/profiles/profile-manager.test.ts +280 -0
- package/src/profiles/profile-manager.ts +606 -0
- package/src/schema/config.ts +137 -0
- package/src/schema/manifest.ts +124 -0
- package/src/schema/types.ts +179 -0
- package/src/schema/versions.ts +55 -0
- package/src/security/encryption.ts +180 -0
- package/src/security/index.ts +16 -0
- package/src/security/integrity.ts +102 -0
- package/src/security/redaction.ts +101 -0
- package/src/security/secret-scanner.ts +275 -0
- package/src/security/security.test.ts +796 -0
- package/src/security/zip-security.ts +180 -0
- package/src/ui/conflict-view.test.ts +62 -0
- package/src/ui/conflict-view.ts +65 -0
- package/src/ui/errors.test.ts +44 -0
- package/src/ui/errors.ts +95 -0
- package/src/ui/export-flow.test.ts +75 -0
- package/src/ui/export-flow.ts +128 -0
- package/src/ui/import-wizard.test.ts +128 -0
- package/src/ui/import-wizard.ts +208 -0
- package/src/ui/path-mapping.test.ts +67 -0
- package/src/ui/path-mapping.ts +103 -0
- package/src/ui/progress.test.ts +42 -0
- package/src/ui/progress.ts +90 -0
- package/src/ui/report.test.ts +93 -0
- package/src/ui/report.ts +140 -0
- package/src/ui/test-helpers.ts +177 -0
- package/src/ui/types.ts +193 -0
- package/src/utils/hashing.ts +53 -0
- package/src/utils/json.ts +77 -0
- package/src/utils/logger.ts +114 -0
- package/src/utils/paths.ts +122 -0
- package/src/utils/zip.ts +332 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Manager 表面文案:zh 为源语言,en 镜像每个键。
|
|
3
|
+
* 字典 namespace 由 client/index.ts 注册(declare module 合并进 LocaleNamespaceMap)。
|
|
4
|
+
* 键集合通过 `ConfigManagerKey` 类型在注册处做编译期校验(缺键/多键即编译错误)。
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const zh = {
|
|
8
|
+
// 入口
|
|
9
|
+
'section.label': '备份与迁移',
|
|
10
|
+
'section.description': '导出 / 导入 / 迁移 DSH 配置(备份不含密钥,加密备份可选)',
|
|
11
|
+
// 视图切换
|
|
12
|
+
'view.export': '导出备份',
|
|
13
|
+
'view.import': '导入恢复',
|
|
14
|
+
// 公共
|
|
15
|
+
'common.close': '关闭',
|
|
16
|
+
'common.cancel': '取消',
|
|
17
|
+
'common.back': '上一步',
|
|
18
|
+
'common.next': '下一步',
|
|
19
|
+
'common.done': '完成',
|
|
20
|
+
'common.retry': '重试',
|
|
21
|
+
'common.confirm': '确认',
|
|
22
|
+
'common.loading': '加载中…',
|
|
23
|
+
'common.unknownError': '未知错误',
|
|
24
|
+
// 状态横幅
|
|
25
|
+
'status.ready': 'Config Manager 已就绪(插件 {version} · DSH {dsh} · {platform})',
|
|
26
|
+
'status.unavailable': 'Config Manager 服务未就绪,请确认插件已正确挂载。',
|
|
27
|
+
// —— 导出 ——
|
|
28
|
+
'export.mode.quick': '快速导出',
|
|
29
|
+
'export.mode.quickHint': '一键导出推荐分区(可迁移、不含设备专属数据),适合常规备份。',
|
|
30
|
+
'export.mode.custom': '自定义导出',
|
|
31
|
+
'export.mode.customHint': '按分组逐项勾选要导出的分区。',
|
|
32
|
+
'export.includeSecrets': '包含真实密钥(加密备份)',
|
|
33
|
+
'export.includeSecretsHint': '勾选后导出将包含密钥,并以密码加密(AES-256-GCM)。密码仅用于本次加密,不会写入备份或任何配置文件。',
|
|
34
|
+
'export.password': '备份加密密码',
|
|
35
|
+
'export.passwordConfirm': '确认密码',
|
|
36
|
+
'export.passwordMismatch': '两次输入的密码不一致',
|
|
37
|
+
'export.passwordRequired': '包含密钥时必须设置加密密码',
|
|
38
|
+
'export.run': '开始导出',
|
|
39
|
+
'export.running': '正在导出…',
|
|
40
|
+
'export.download': '下载备份文件',
|
|
41
|
+
'export.selectionWarnings': '以下分区为设备相关数据,跨设备导入时可能不适用:',
|
|
42
|
+
'export.group.unknown': '其他',
|
|
43
|
+
'export.included': '已包含',
|
|
44
|
+
'export.excluded': '未包含',
|
|
45
|
+
// —— 导入 ——
|
|
46
|
+
'import.select.title': '选择备份文件',
|
|
47
|
+
'import.select.hint': '选择本机导出的 dsh-config-*.zip 备份文件开始导入。分析阶段只读,不会修改任何配置。',
|
|
48
|
+
'import.select.browse': '选择 ZIP 文件',
|
|
49
|
+
'import.select.file': '已选择:{name}',
|
|
50
|
+
'import.analyzing': '正在分析备份…',
|
|
51
|
+
'import.compatibility.title': '兼容性',
|
|
52
|
+
'import.compatibility.score': '兼容性评分:{score}',
|
|
53
|
+
'import.compatibility.ok': '备份可导入',
|
|
54
|
+
'import.compatibility.fail': '备份分析失败:{reason}',
|
|
55
|
+
'import.preview.title': '导入预览',
|
|
56
|
+
'import.preview.willChange': '将变更 {count} 项',
|
|
57
|
+
'import.preview.unchanged': '已一致跳过 {count} 项',
|
|
58
|
+
'import.preview.settings': '设置更新 {count}',
|
|
59
|
+
'import.preview.plugins': '插件待安装 {count}',
|
|
60
|
+
'import.preview.mcp': 'MCP 新增 {count}',
|
|
61
|
+
'import.preview.prompts': '提示词 {count}',
|
|
62
|
+
'import.preview.paths': '路径映射 {count}',
|
|
63
|
+
'import.preview.secrets': '密钥待补录 {count}',
|
|
64
|
+
'import.preview.conflicts': '冲突 {count}',
|
|
65
|
+
'import.preview.restart': '导入后需重启 DSH 生效',
|
|
66
|
+
'import.confirm.execute': '确认导入',
|
|
67
|
+
'import.confirm.warning': '导入将修改当前 DSH 配置;执行前会自动创建安全快照,失败时整体回滚。',
|
|
68
|
+
'import.rollbackOnError': '失败时整体回滚(推荐)',
|
|
69
|
+
'import.importing': '正在导入…',
|
|
70
|
+
'import.secrets.title': '补录密钥',
|
|
71
|
+
'import.secrets.hint': '以下凭据未随备份导出(安全设计)。如需在目标 DSH 使用,请手动补录;留空将跳过。',
|
|
72
|
+
'import.secrets.optional': '(可选)',
|
|
73
|
+
'import.secrets.required': '(必需)',
|
|
74
|
+
'import.conflicts.title': '解决冲突',
|
|
75
|
+
'import.conflicts.hint': '以下配置项在目标 DSH 已存在且与备份不同,请逐项决策。',
|
|
76
|
+
'import.conflicts.keepCurrent': '保留当前',
|
|
77
|
+
'import.conflicts.useImported': '使用备份',
|
|
78
|
+
'import.conflicts.review': '稍后决定',
|
|
79
|
+
'import.conflicts.unresolved': '还有 {count} 项未决策',
|
|
80
|
+
'import.paths.title': '路径映射',
|
|
81
|
+
'import.paths.hint': '备份中的绝对路径在目标机器可能不存在,请为每条路径指定新位置(留空将跳过该路径)。',
|
|
82
|
+
'import.paths.old': '原路径',
|
|
83
|
+
'import.paths.new': '新路径',
|
|
84
|
+
'import.paths.unresolved': '还有 {count} 条路径未映射',
|
|
85
|
+
// —— 报告 ——
|
|
86
|
+
'report.export.title': '导出完成',
|
|
87
|
+
'report.import.title': '导入结果',
|
|
88
|
+
'report.rollback.title': '回滚报告',
|
|
89
|
+
'report.action.fixIssues': '查看失败项',
|
|
90
|
+
'report.action.viewDetails': '查看详情',
|
|
91
|
+
'report.action.done': '完成',
|
|
92
|
+
'report.needsRestart': '插件 / MCP 变更将在重启 DSH 后生效。',
|
|
93
|
+
// —— 错误 ——
|
|
94
|
+
'error.title': '操作失败',
|
|
95
|
+
'error.hint': '错误消息已自动脱敏,不会泄露任何密钥信息。',
|
|
96
|
+
} as const;
|
|
97
|
+
|
|
98
|
+
export const en: Record<keyof typeof zh, string> = {
|
|
99
|
+
'section.label': 'Backup & Migration',
|
|
100
|
+
'section.description': 'Export / import / migrate DSH configuration (backups exclude secrets; encrypted backups optional)',
|
|
101
|
+
'view.export': 'Export',
|
|
102
|
+
'view.import': 'Import',
|
|
103
|
+
'common.close': 'Close',
|
|
104
|
+
'common.cancel': 'Cancel',
|
|
105
|
+
'common.back': 'Back',
|
|
106
|
+
'common.next': 'Next',
|
|
107
|
+
'common.done': 'Done',
|
|
108
|
+
'common.retry': 'Retry',
|
|
109
|
+
'common.confirm': 'Confirm',
|
|
110
|
+
'common.loading': 'Loading…',
|
|
111
|
+
'common.unknownError': 'Unknown error',
|
|
112
|
+
'status.ready': 'Config Manager ready (plugin {version} · DSH {dsh} · {platform})',
|
|
113
|
+
'status.unavailable': 'Config Manager service unavailable — verify the plugin is mounted.',
|
|
114
|
+
'export.mode.quick': 'Quick Export',
|
|
115
|
+
'export.mode.quickHint': 'One-click export of recommended sections (portable, no device-specific data) for routine backups.',
|
|
116
|
+
'export.mode.custom': 'Custom Export',
|
|
117
|
+
'export.mode.customHint': 'Select sections per group.',
|
|
118
|
+
'export.includeSecrets': 'Include real secrets (encrypted backup)',
|
|
119
|
+
'export.includeSecretsHint': 'When enabled the backup contains secrets, encrypted with a password (AES-256-GCM). The password is used once and never written into the backup or any config file.',
|
|
120
|
+
'export.password': 'Backup encryption password',
|
|
121
|
+
'export.passwordConfirm': 'Confirm password',
|
|
122
|
+
'export.passwordMismatch': 'Passwords do not match',
|
|
123
|
+
'export.passwordRequired': 'An encryption password is required when including secrets',
|
|
124
|
+
'export.run': 'Start Export',
|
|
125
|
+
'export.running': 'Exporting…',
|
|
126
|
+
'export.download': 'Download backup file',
|
|
127
|
+
'export.selectionWarnings': 'Device-specific sections may not apply on another machine:',
|
|
128
|
+
'export.group.unknown': 'Other',
|
|
129
|
+
'export.included': 'Included',
|
|
130
|
+
'export.excluded': 'Excluded',
|
|
131
|
+
'import.select.title': 'Select Backup File',
|
|
132
|
+
'import.select.hint': 'Pick a dsh-config-*.zip backup exported from DSH to begin. Analysis is read-only and changes nothing.',
|
|
133
|
+
'import.select.browse': 'Choose ZIP file',
|
|
134
|
+
'import.select.file': 'Selected: {name}',
|
|
135
|
+
'import.analyzing': 'Analyzing backup…',
|
|
136
|
+
'import.compatibility.title': 'Compatibility',
|
|
137
|
+
'import.compatibility.score': 'Compatibility score: {score}',
|
|
138
|
+
'import.compatibility.ok': 'The backup can be imported',
|
|
139
|
+
'import.compatibility.fail': 'Backup analysis failed: {reason}',
|
|
140
|
+
'import.preview.title': 'Import Preview',
|
|
141
|
+
'import.preview.willChange': '{count} item(s) will change',
|
|
142
|
+
'import.preview.unchanged': '{count} item(s) already identical (skipped)',
|
|
143
|
+
'import.preview.settings': '{count} settings update(s)',
|
|
144
|
+
'import.preview.plugins': '{count} plugin(s) to install',
|
|
145
|
+
'import.preview.mcp': '{count} MCP server(s) added',
|
|
146
|
+
'import.preview.prompts': '{count} prompt(s)',
|
|
147
|
+
'import.preview.paths': '{count} path mapping(s) needed',
|
|
148
|
+
'import.preview.secrets': '{count} secret(s) to re-enter',
|
|
149
|
+
'import.preview.conflicts': '{count} conflict(s)',
|
|
150
|
+
'import.preview.restart': 'A DSH restart is required after import',
|
|
151
|
+
'import.confirm.execute': 'Confirm Import',
|
|
152
|
+
'import.confirm.warning': 'Import modifies the current DSH configuration; a safety snapshot is created first and everything rolls back on failure.',
|
|
153
|
+
'import.rollbackOnError': 'Roll back everything on failure (recommended)',
|
|
154
|
+
'import.importing': 'Importing…',
|
|
155
|
+
'import.secrets.title': 'Re-enter Secrets',
|
|
156
|
+
'import.secrets.hint': 'These credentials were not exported with the backup (security by design). Enter them manually to use them here; leave blank to skip.',
|
|
157
|
+
'import.secrets.optional': '(optional)',
|
|
158
|
+
'import.secrets.required': '(required)',
|
|
159
|
+
'import.conflicts.title': 'Resolve Conflicts',
|
|
160
|
+
'import.conflicts.hint': 'These items already exist on this machine and differ from the backup. Decide per item.',
|
|
161
|
+
'import.conflicts.keepCurrent': 'Keep current',
|
|
162
|
+
'import.conflicts.useImported': 'Use backup',
|
|
163
|
+
'import.conflicts.review': 'Decide later',
|
|
164
|
+
'import.conflicts.unresolved': '{count} item(s) unresolved',
|
|
165
|
+
'import.paths.title': 'Path Mapping',
|
|
166
|
+
'import.paths.hint': 'Absolute paths in the backup may not exist on this machine. Map each path to a new location (leave blank to skip).',
|
|
167
|
+
'import.paths.old': 'Original path',
|
|
168
|
+
'import.paths.new': 'New path',
|
|
169
|
+
'import.paths.unresolved': '{count} path(s) unmapped',
|
|
170
|
+
'report.export.title': 'Export Complete',
|
|
171
|
+
'report.import.title': 'Import Result',
|
|
172
|
+
'report.rollback.title': 'Rollback Report',
|
|
173
|
+
'report.action.fixIssues': 'View failures',
|
|
174
|
+
'report.action.viewDetails': 'View details',
|
|
175
|
+
'report.action.done': 'Done',
|
|
176
|
+
'report.needsRestart': 'Plugin / MCP changes take effect after restarting DSH.',
|
|
177
|
+
'error.title': 'Operation failed',
|
|
178
|
+
'error.hint': 'Error messages are auto-redacted and never leak secrets.',
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/** 字典键联合(注册处 compile-time 校验) */
|
|
182
|
+
export type ConfigManagerKey = keyof typeof zh;
|