dsh-config-manager 0.1.84 → 0.1.86

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.
Files changed (84) hide show
  1. package/lib/client.d.ts +153 -399
  2. package/lib/client.js +1518 -2221
  3. package/lib/core/messages.d.ts +1 -0
  4. package/lib/core/messages.js +2 -0
  5. package/lib/index.d.ts +4 -2
  6. package/lib/index.js +5 -5
  7. package/lib/routes/sync.js +92 -70
  8. package/lib/sync/git/git-transport.d.ts +2 -0
  9. package/lib/sync/git/git-transport.js +91 -23
  10. package/lib/sync/messages.d.ts +2 -0
  11. package/lib/sync/messages.js +4 -0
  12. package/lib/sync/sync-engine.d.ts +4 -4
  13. package/lib/sync/sync-engine.js +3 -4
  14. package/lib/ui/i18n.d.ts +2 -84
  15. package/lib/ui/i18n.js +4 -168
  16. package/lib/utils/workdir-lock.d.ts +26 -2
  17. package/lib/utils/workdir-lock.js +133 -5
  18. package/package.json +1 -1
  19. package/src/client/ConfigManagerSection.tsx +1 -18
  20. package/src/client/about/AboutPanel.tsx +4 -11
  21. package/src/client/about/ReleaseNotesDialog.tsx +1 -2
  22. package/src/client/chat/chat-locales.ts +0 -8
  23. package/src/client/common/CommandPalette.tsx +0 -1
  24. package/src/client/common/ContentPicker.tsx +10 -1
  25. package/src/client/common/info-hint-guard.test.ts +4 -4
  26. package/src/client/config-manager.module.css +2 -32
  27. package/src/client/environment/EnvironmentPanel.tsx +10 -9
  28. package/src/client/environment/maintenance/DiskUsageCard.tsx +10 -10
  29. package/src/client/export/ExportView.tsx +10 -13
  30. package/src/client/history/HistoryPanel.tsx +9 -11
  31. package/src/client/history/history-locales.ts +4 -40
  32. package/src/client/home/BackupScheduleCard.tsx +0 -2
  33. package/src/client/home/HomePanel.tsx +75 -49
  34. package/src/client/import/ForeignImportView.tsx +6 -7
  35. package/src/client/import/ImportWizardView.tsx +8 -9
  36. package/src/client/import/import-wizard-steps.tsx +20 -15
  37. package/src/client/library/BackupInspectView.tsx +3 -11
  38. package/src/client/library/LibraryActions.tsx +2 -1
  39. package/src/client/library/LibraryPanel.tsx +6 -3
  40. package/src/client/locales.ts +122 -278
  41. package/src/client/market/MarketImportReview.tsx +6 -5
  42. package/src/client/market/MarketPanel.tsx +2 -2
  43. package/src/client/market/MyConfigsLoginCard.tsx +0 -3
  44. package/src/client/market/MyConfigsView.tsx +3 -4
  45. package/src/client/market/MyConfigsWizard.tsx +8 -4
  46. package/src/client/market/market-locales.ts +20 -60
  47. package/src/client/recovery/IncompleteCopiesSection.tsx +6 -8
  48. package/src/client/recovery/RecoveryPanel.tsx +48 -73
  49. package/src/client/recovery/RollbackCard.tsx +27 -20
  50. package/src/client/recovery/recovery-locales.test.ts +1 -3
  51. package/src/client/recovery/recovery-locales.ts +71 -133
  52. package/src/client/recovery/recovery-panel-layout.test.ts +4 -2
  53. package/src/client/sync/DecryptPasswordCard.tsx +2 -2
  54. package/src/client/sync/MergeModal.tsx +3 -1
  55. package/src/client/sync/MergePreviewView.tsx +14 -16
  56. package/src/client/sync/PushPreviewCard.tsx +0 -1
  57. package/src/client/sync/SecurityOptionsCard.tsx +5 -1
  58. package/src/client/sync/SyncChannelEntryCard.tsx +3 -10
  59. package/src/client/sync/SyncConfirmView.tsx +23 -20
  60. package/src/client/sync/SyncLogList.tsx +5 -2
  61. package/src/client/sync/SyncPanel.tsx +10 -9
  62. package/src/client/sync/SyncProbeRow.tsx +6 -8
  63. package/src/client/sync/SyncSectionPickerDialog.tsx +3 -3
  64. package/src/client/sync/WorkDirCard.tsx +6 -7
  65. package/src/client/sync/preview-failure.test.ts +58 -0
  66. package/src/client/sync/preview-failure.ts +47 -0
  67. package/src/client/sync/sync-api.ts +19 -3
  68. package/src/client/sync/sync-entry.test.ts +6 -0
  69. package/src/client/sync/sync-entry.ts +4 -1
  70. package/src/client/sync/sync-locales.ts +31 -147
  71. package/src/client/sync/sync-push-preview.test.ts +1 -1
  72. package/src/client/sync/sync-view.ts +1 -4
  73. package/src/core/messages.ts +2 -0
  74. package/src/index.ts +6 -6
  75. package/src/routes/sync.ts +91 -69
  76. package/src/sync/git/git-clone-auth.test.ts +61 -0
  77. package/src/sync/git/git-transport.test.ts +107 -1
  78. package/src/sync/git/git-transport.ts +91 -21
  79. package/src/sync/messages.ts +4 -0
  80. package/src/sync/sync-engine.ts +6 -6
  81. package/src/sync/sync-preview-empty.test.ts +58 -0
  82. package/src/ui/i18n.ts +4 -168
  83. package/src/utils/workdir-lock.test.ts +77 -4
  84. package/src/utils/workdir-lock.ts +122 -5
package/lib/client.d.ts CHANGED
@@ -1479,13 +1479,8 @@ declare const uiZh: {
1479
1479
  readonly commonClose: '关闭';
1480
1480
  readonly commonCancel: '取消';
1481
1481
  readonly commonRetry: '重试';
1482
- readonly commonLoading: '加载中…';
1483
1482
  readonly commonUnknownError: '未知错误';
1484
- readonly commonNext: '下一步';
1485
- readonly commonBack: '上一步';
1486
- readonly commonDone: '完成';
1487
1483
  readonly 'export.download': '下载备份文件';
1488
- readonly 'export.running': '正在导出…';
1489
1484
  readonly 'export.run': '开始导出';
1490
1485
  readonly 'export.selectionWarnings': '以下分区为设备相关数据,跨设备导入时可能不适用:';
1491
1486
  readonly 'export.included': '已包含';
@@ -1521,7 +1516,6 @@ declare const uiZh: {
1521
1516
  readonly 'report.fullText': '完整文本报告(含逐项原因)';
1522
1517
  readonly 'report.secrets': '密钥:';
1523
1518
  readonly 'report.credentialsNeedEntry': '{count} 个凭据需要补录';
1524
- readonly 'report.restartRequired': '重启 DSH 后生效:{detail}';
1525
1519
  readonly 'report.restartPluginsMcp': '插件/MCP 更改将在重启 DSH 后生效';
1526
1520
  readonly 'report.rollbackFull': '回滚:已完整恢复导入前的配置。';
1527
1521
  readonly 'report.rollbackPartial': '回滚部分完成。';
@@ -1534,7 +1528,6 @@ declare const uiZh: {
1534
1528
  readonly 'report.badgeRedacted': '{count} 项已脱敏';
1535
1529
  readonly 'report.rollback': '回滚';
1536
1530
  readonly 'report.action.fixIssues': '查看失败项';
1537
- readonly 'report.action.viewDetails': '查看详情';
1538
1531
  readonly 'report.includedSections': '已包含的分区';
1539
1532
  readonly 'report.excludedSections': '未包含的分区';
1540
1533
  readonly 'report.warnings': '注意事项';
@@ -1550,7 +1543,6 @@ declare const uiZh: {
1550
1543
  readonly 'report.unit.workspaces': '个工作区';
1551
1544
  readonly 'report.unit.credentials': '项凭据状态';
1552
1545
  readonly 'report.unit.notes': '条说明';
1553
- readonly 'report.action.done': '完成';
1554
1546
  readonly 'error.notMounted': 'config-manager 服务未挂载(插件未加载):请确认 profile 中已安装 dsh-config-manager 并重启 DSH';
1555
1547
  readonly 'error.apiPathMissed': '接口路径未命中(HTTP {status}):请求前缀为 {base},但该路径没有返回 JSON —— 若你经反向代理挂在子路径下,请检查代理是否转发了这个前缀(issue #108)';
1556
1548
  readonly 'error.httpInvalidJson': 'HTTP {status}: 无效的 JSON 响应';
@@ -1600,15 +1592,7 @@ declare const uiZh: {
1600
1592
  readonly 'progress.recovering': '正在恢复/回滚…';
1601
1593
  readonly 'progress.done': '已完成';
1602
1594
  readonly 'progress.failed': '已失败';
1603
- readonly 'snapshots.createdAt': '创建时间';
1604
- readonly 'snapshots.sourceZip': '来源';
1605
1595
  readonly 'snapshots.status': '状态';
1606
- readonly 'snapshots.entries': '条目';
1607
- readonly 'snapshots.plugins': '插件';
1608
- readonly 'snapshots.statusPending': '待处理';
1609
- readonly 'snapshots.statusDone': '已完成';
1610
- readonly 'snapshots.statusRolledback': '已回滚';
1611
- readonly 'snapshots.statusUnknown': '未知';
1612
1596
  readonly 'snapshots.planTitle': '恢复计划预览';
1613
1597
  readonly 'snapshots.confirmRestore': '确认恢复?会先把当前文件备份到一个安全位置,再删除导入期间新增的插件。';
1614
1598
  readonly 'snapshots.execute': '执行恢复';
@@ -1619,8 +1603,6 @@ declare const uiZh: {
1619
1603
  readonly 'snapshots.failed': '失败';
1620
1604
  readonly 'snapshots.skipped': '跳过';
1621
1605
  readonly 'snapshots.noActions': '该快照无可恢复动作(或全部跳过)。';
1622
- readonly 'snapshots.empty': '暂无快照。导入时会自动创建安全快照。';
1623
- readonly 'snapshots.loading': '正在加载快照…';
1624
1606
  readonly 'snapshots.selectHint': '选择一个快照预览其恢复计划(只读预览,不会改动任何设置):';
1625
1607
  readonly 'snapshots.reportTitle': '恢复报告';
1626
1608
  readonly 'sync.privateRepoHint': '安全要求:同步仓库必须为私有仓库(public 仓库会公开你的配置内容)。认证 token 仅用于仓库访问,绝不写入同步文件、提交内容或日志。';
@@ -1652,80 +1634,26 @@ declare const uiZh: {
1652
1634
  readonly 'sync.pushOk': '推送成功(快照 {id})';
1653
1635
  readonly 'sync.conflictUnresolved': '冲突项 {id} 必须先选择解决方式(保留当前 / 使用导入)';
1654
1636
  readonly 'sync.pushPreviewHeadline': '将推送 {total} 个分区({changed} 个有变化)';
1655
- readonly 'sync.pushPreviewHint': '以上为只读预览,不会写入远端。确认后点击「推送」才真正上传。';
1656
1637
  readonly 'sync.pushPreviewEncrypted': '加密快照:载荷将整体加密,各分区相对基线的变化不可比对。';
1657
1638
  readonly 'sync.pushPreviewCredentials': '本次推送包含真实凭据值(已随载荷整体加密;远端只见密文)。';
1658
1639
  readonly 'sync.pullFailed': '拉取失败';
1659
1640
  readonly 'sync.pullOk': '远端快照 {id} 差异预览:共 {count} 项变更';
1660
1641
  readonly 'sync.pullEmpty': '远端快照与本地一致(无变更)';
1661
1642
  readonly 'sync.previewHint': '以上为只读差异预览,不会执行导入。当前版本暂不支持一键导入;如需应用远端配置,请使用「导入恢复」向导手动导入导出的备份。';
1662
- readonly 'sync.syncTitle': '一键同步';
1663
- readonly 'sync.syncButton': '一键同步';
1664
1643
  readonly 'sync.syncing': '正在同步…';
1665
- readonly 'sync.syncHeadline': '远端快照 {id} 差异确认:共 {count} 项';
1666
- readonly 'sync.syncEmpty': '远端快照与本地一致(无变更)';
1667
- readonly 'sync.syncFailed': '同步失败';
1668
- readonly 'sync.confirmAdopt': '采用远端';
1669
- readonly 'sync.confirmSkip': '跳过';
1670
- readonly 'sync.confirmRequired': '需要人工决策';
1671
- readonly 'sync.needsReviewBadge': '需人工决策';
1672
- readonly 'sync.selectSnapshot': '选择历史快照';
1673
- readonly 'sync.latestSnapshot': '最新快照';
1674
- readonly 'sync.noSnapshots': '远端暂无快照';
1675
- readonly 'sync.confirmImport': '确认导入';
1676
- readonly 'sync.cancelConfirm': '取消';
1677
- readonly 'sync.conflictResolve': '冲突解决';
1678
- readonly 'sync.conflictUseLocal': '用本地';
1679
- readonly 'sync.conflictUseRemote': '用远端';
1680
- readonly 'sync.conflictSkip': '跳过';
1681
- readonly 'sync.conflictResolvedLocal': '已选:本地';
1682
- readonly 'sync.conflictResolvedRemote': '已选:远端';
1683
- readonly 'sync.conflictResolvedSkip': '已选:跳过';
1684
1644
  readonly 'sync.importDone': '已导入 {n} 个分区';
1685
1645
  readonly 'sync.importPartial': '部分成功:{n} 项未生效(其余已写入,未整体回滚)';
1686
- readonly 'sync.importSkipped': '已跳过 {n} 项';
1687
1646
  readonly 'sync.importFailed': '导入失败(已整体回滚)';
1688
- readonly 'sync.rollbackButton': '回滚到应用前';
1689
- readonly 'sync.rollingBack': '正在回滚…';
1690
- readonly 'sync.rollbackDone': '已回滚到应用前';
1691
- readonly 'sync.appliedSections': '已写入';
1692
- readonly 'sync.importWarnings': '导入告警';
1693
- readonly 'sync.autosyncTitle': '自动同步';
1694
- readonly 'sync.autosyncDesc': '开启后,DSH 将按固定间隔自动执行双向同步(拉取合并 + 上传);DSH 启动时还会触发一次「自动下载合并(不上传)」以保持本地为最新。仅在无冲突且无需人工干预时才自动写入。';
1695
- readonly 'sync.autosyncEnabled': '启用自动同步';
1696
- readonly 'sync.autosyncInterval': '同步间隔';
1697
- readonly 'sync.autosyncIntervalHint': 'DSH 启动时自动下载合并不上传。';
1698
1647
  readonly 'sync.autosyncNever': '从未运行';
1699
1648
  readonly 'sync.autosyncLastRun': '上次运行:{time}';
1700
- readonly 'sync.autosyncNextIn': '下次约 {time} 后';
1701
1649
  readonly 'sync.autosyncSuccess': '成功';
1702
1650
  readonly 'sync.autosyncSkipped': '已跳过';
1703
1651
  readonly 'sync.autosyncFailed': '失败';
1704
1652
  readonly 'sync.autosyncPartial': '部分成功';
1705
1653
  readonly 'sync.autosyncFailCount': '连续失败 {n} 次';
1706
- readonly 'sync.autosyncSyncing': '自动同步进行中…';
1707
- readonly 'sync.interval.5m': '5 分钟';
1708
- readonly 'sync.interval.15m': '15 分钟';
1709
- readonly 'sync.interval.30m': '30 分钟';
1710
- readonly 'sync.interval.60m': '60 分钟';
1711
- readonly 'sync.interval.6h': '6 小时';
1712
- readonly 'sync.interval.12h': '12 小时';
1713
- readonly 'sync.interval.24h': '24 小时';
1714
1654
  readonly 'sync.duration.min': '{n} 分钟';
1715
1655
  readonly 'sync.duration.hour': '{n} 小时';
1716
1656
  readonly 'sync.duration.day': '{n} 天';
1717
- readonly 'sync.hist.autosync': '自动同步';
1718
- readonly 'sync.hist.directionPull': '下载';
1719
- readonly 'sync.hist.directionPush': '上传';
1720
- readonly 'sync.hist.directionBoth': '双向';
1721
- readonly 'sync.hist.skipReasonConflict': '冲突项被跳过';
1722
- readonly 'sync.hist.skipReasonNoRemote': '远端无快照';
1723
- readonly 'sync.hist.skipReasonNotConfigured': '未配置仓库';
1724
- readonly 'sync.hist.skipReasonNetwork': '网络问题';
1725
- readonly 'sync.hist.conflictedSections': '跳过冲突分区:{sections}';
1726
- readonly 'sync.hist.appliedSections': '应用分区:{sections}';
1727
- readonly 'sync.hist.failedError': '错误:{error}';
1728
- readonly 'sync.hist.notifiedAt': '已通知';
1729
1657
  readonly 'sync.github.starting': '正在发起 GitHub 授权…';
1730
1658
  readonly 'sync.github.waitingNoCode': '请在浏览器中打开授权页面并完成授权…';
1731
1659
  readonly 'sync.github.waiting': '请在浏览器中打开授权页面,输入一次性代码 {code} 完成授权(自动等待确认)。';
@@ -1740,7 +1668,6 @@ declare const uiZh: {
1740
1668
  readonly 'sync.github.pollExpired': 'GitHub 授权已过期(expired_token)。请重新发起登录。';
1741
1669
  readonly 'sync.github.pollError': 'GitHub OAuth 错误:{detail}';
1742
1670
  readonly 'sync.github.unknownError': '未知错误';
1743
- readonly 'market.statusLoading': '正在读取市场状态…';
1744
1671
  readonly 'market.statusUnconfigured': '尚未添加市场(请输入公开 Git 仓库地址)';
1745
1672
  readonly 'market.statusConfigured': '已添加 {count} 个市场';
1746
1673
  readonly 'market.supplyUnofficial': '来自公共网络、非官方审核';
@@ -1785,13 +1712,11 @@ declare const uiZh: {
1785
1712
  readonly 'consult.dimensions': '评分维度';
1786
1713
  readonly 'consult.loading': '正在生成咨询报告…';
1787
1714
  readonly 'diskUsage.title': '磁盘占用';
1788
- readonly 'diskUsage.total': '合计';
1789
1715
  readonly 'diskUsage.files': '{count} 个文件';
1790
1716
  readonly 'diskUsage.refresh': '重新体检';
1791
1717
  readonly 'diskUsage.loading': '正在统计磁盘占用…';
1792
1718
  readonly 'diskUsage.unreadable': '未统计';
1793
- readonly 'diskUsage.partial': '部分目录读不到(已在对应行标注「未统计」),合计不含它们。';
1794
- readonly 'diskUsage.retentionLabel': '自动回收';
1719
+ readonly 'diskUsage.partial': '部分目录读不到:合计不含它们';
1795
1720
  readonly 'diskUsage.expiredHint': '其中 {size} 已到回收条件';
1796
1721
  readonly 'diskUsage.policy.regenerable': '可随时重建';
1797
1722
  readonly 'diskUsage.policy.retained': '{retention} 后自动回收';
@@ -1837,8 +1762,6 @@ declare const uiZh: {
1837
1762
  readonly 'diskUsage.clean.nothing': '没有可释放的内容';
1838
1763
  readonly 'diskUsage.clean.nothingAbsent': '没有需要清理的内容(目标目录不存在或已为空)';
1839
1764
  readonly 'diskUsage.clean.failed': '清理完成,但有 {count} 项失败(已跳过)';
1840
- readonly 'diskUsage.clean.excluded': '本次未包含:{items}';
1841
- readonly 'diskUsage.clean.excludedExpiredExports': '回收过期备份文件';
1842
1765
  readonly 'diskUsage.clean.confirmTitle': '清理磁盘占用';
1843
1766
  readonly 'diskUsage.clean.confirmMessage': '将删除可重建的缓存与暂存,以及已过期的备份文件;快照与同步数据不受影响。此操作不可撤销,但被删内容都可重新生成。';
1844
1767
  readonly 'diskUsage.clean.confirm': '清理';
@@ -1853,7 +1776,7 @@ declare const uiZh: {
1853
1776
  readonly 'diskUsage.area.rollbackPoints': '回滚点库';
1854
1777
  readonly 'diskUsage.area.rollbackPointsDesc': '每回合自动留点的快照(工作区 + 会话两态);只报告,不自动清理';
1855
1778
  readonly 'diskUsage.legacy.title': '遗留数据';
1856
- readonly 'diskUsage.legacy.hint': '插件已不再读取这些目录,也不会自动删除它们;确认无用后可手动清理。它们不计入上方合计。';
1779
+ readonly 'diskUsage.legacy.hint': '插件不再读取 · 不会自动删除 · 不计入上方合计';
1857
1780
  readonly 'diskUsage.legacy.label': '遗留数据';
1858
1781
  readonly 'library.kind.snapshot': '本机快照';
1859
1782
  readonly 'library.kind.backupFile': '备份文件';
@@ -1940,12 +1863,7 @@ declare const uiZh: {
1940
1863
  readonly 'foreign.found.no': '未检测到';
1941
1864
  readonly 'foreign.paths': '命中路径:{paths}';
1942
1865
  readonly 'foreign.pathsNone': '没有命中任何真值表路径';
1943
- readonly 'foreign.skipped.total': '未迁移 {count} 项';
1944
- readonly 'foreign.skipped.empty': '没有未迁移的内容';
1945
1866
  readonly 'foreign.credentialRefs': '需补录凭据 {count} 项:{refs}';
1946
- readonly 'foreign.credentialRefs.none': '无需补录凭据';
1947
- readonly 'foreign.sections.none': '没有可导入的分区';
1948
- readonly 'foreign.reportOnly': '只报告、不导入:{detail}';
1949
1867
  readonly 'foreign.skip.unsupported-hooks': 'settings 的 hooks:DSH 无对等结构,未迁移';
1950
1868
  readonly 'foreign.skip.unsupported-commands': '斜杠命令:与 DSH 提示词不是同一语义,本次未迁移';
1951
1869
  readonly 'foreign.skip.credentials-not-migrated': '凭据字段只记录名字,值不读取也不迁移';
@@ -2449,6 +2367,17 @@ interface ForeignSourcesResponse$1 {
2449
2367
  projectScoped?: boolean;
2450
2368
  sources: readonly ForeignSourceStatusInput[];
2451
2369
  }
2370
+ /** 超时文案键(全部已存在于 ui/i18n.ts;本模块只做选键,不新增文案口径)。 */
2371
+ type TimeoutMessageKey = 'error.requestTimeout' | 'error.fallback' | 'error.exportTimeout' | 'error.syncTimeout' | 'error.recoveryTimeout';
2372
+ /** 请求选项:超时档位、超时文案键、调用方取消信号。 */
2373
+ interface RequestOptions {
2374
+ /** 覆盖默认超时(缺省 REQUEST_TIMEOUT_MS)。 */
2375
+ timeoutMs?: number;
2376
+ /** 超时文案键(缺省 `DEFAULT_TIMEOUT_KEY` = error.requestTimeout:语境中立的通用超时)。 */
2377
+ timeoutKey?: TimeoutMessageKey;
2378
+ /** 调用方取消信号(与内部超时合并;取消时原样抛出 AbortError)。 */
2379
+ signal?: AbortSignal;
2380
+ }
2452
2381
  /** 携带路由 JSON error 消息的错误类型(客户端所有请求错误的唯一类型)。 */
2453
2382
  declare class ConfigManagerApiError extends Error {
2454
2383
  /**
@@ -3328,6 +3257,11 @@ interface SyncStartResponse {
3328
3257
  needsReview: boolean;
3329
3258
  compatibility: 'excellent' | 'good' | 'partial' | 'unsupported';
3330
3259
  message?: string;
3260
+ /**
3261
+ * 预览失败的**结构化原因**(issue #116):`'remote-empty'` = 远端还没有任何快照 —— 首次同步的正常起点,
3262
+ * UI 据此引导「先推送」而不是报「同步失败」。没有 reason 的失败按 message 原样展示。
3263
+ */
3264
+ reason?: 'remote-empty';
3331
3265
  }
3332
3266
  /** 单条可确认的差异项(由 ImportPlan.item 投影 + 冲突详情)。 */
3333
3267
  interface SyncConfirmItem {
@@ -3487,6 +3421,8 @@ interface MergePreviewResponse {
3487
3421
  summary: MergePreviewSummary;
3488
3422
  /** 失败/降级原因(仅在 ok=false 等场景出现) */
3489
3423
  message?: string;
3424
+ /** 失败的结构化原因(issue 116):`'remote-empty'` = 远端还没有任何快照 —— 首次同步的正常起点,不是故障。 */
3425
+ reason?: 'remote-empty';
3490
3426
  }
3491
3427
  /** 单条裁决动作。 */
3492
3428
  type MergeResolutionActionWire = 'keepLocal' | 'useRemote' | 'useMerged' | 'skip';
@@ -3683,8 +3619,17 @@ interface GithubCreateRepositoryResponse {
3683
3619
  declare class SyncApi {
3684
3620
  readonly t: UiT;
3685
3621
  constructor(t: UiT);
3686
- /** 读取同步状态(配置 / 凭据 / 上次同步时间 / 分区数 / 工作副本自检) */
3687
- status(): Promise<SyncStatusResponse>;
3622
+ /** 读取同步状态(配置 / 凭据 / 上次同步时间 / 分区数 / 工作副本自检)。
3623
+ *
3624
+ * 两个与请求计时无关、只为调用场景服务的开关:
3625
+ * - `timeoutMs`:首页只拿它填一个指标段,等不起同步族默认的 5 分钟档;
3626
+ * - `workDirDetail`:只要「工作副本是否跟随地址」时传 false —— 宿主跳过 ahead / dirty /
3627
+ * remoteSnapshots 那 5 条 git 子进程(Windows 每次约 80 ms,实测端点 730 ms → 170 ms)。
3628
+ * 同步页的 WorkDirCard 需要全量,保持缺省(true)。关掉时那三项由宿主如实回 null,
3629
+ * 界面显示「未知」,不会被当成 0。 */
3630
+ status(opts?: RequestOptions & {
3631
+ workDirDetail?: boolean;
3632
+ }): Promise<SyncStatusResponse>;
3688
3633
  /**
3689
3634
  * 重建 git 工作副本(issue #79 的自救入口)。
3690
3635
  *
@@ -4997,10 +4942,8 @@ declare const zh$4: {
4997
4942
  readonly 'common.listSeparator': '、';
4998
4943
  readonly 'toast.copied': '已复制到剪贴板';
4999
4944
  readonly 'toast.copyFailed': '复制失败,请手动选择文本复制';
5000
- readonly 'toast.refreshed': '已刷新';
5001
- readonly 'overview.refresh': '刷新';
5002
4945
  readonly 'overview.health.ok': '配置状态良好';
5003
- readonly 'overview.health.noBackup': '尚无任何备份 —— 建议先创建一个备份或快照';
4946
+ readonly 'overview.health.noBackup': '尚无任何备份';
5004
4947
  readonly 'overview.health.scheduleFailed': '上次定时备份失败,建议检查备份设置';
5005
4948
  readonly 'overview.health.recovery': '存在未解决的恢复事项,需要处理';
5006
4949
  readonly 'overview.health.recoveryAction': '前往「事故恢复」处理';
@@ -5017,6 +4960,7 @@ declare const zh$4: {
5017
4960
  readonly 'overview.meta.scheduleFail': '上次备份失败';
5018
4961
  readonly 'overview.meta.syncOn': '已配置 · 上次 {time}';
5019
4962
  readonly 'overview.meta.syncOff': '未配置';
4963
+ readonly 'overview.meta.syncUnavailable': '读取超时';
5020
4964
  readonly 'overview.meta.never': '从未运行';
5021
4965
  readonly 'overview.time.now': '刚刚';
5022
4966
  readonly 'overview.time.min': '{n} 分钟前';
@@ -5030,13 +4974,11 @@ declare const zh$4: {
5030
4974
  readonly 'overview.quick.backupSkippedLocked': '已跳过:环境锁被占用(另一项任务进行中,或存在需回收的残留锁)';
5031
4975
  readonly 'overview.quick.backupSkippedOther': '已跳过:备份服务当前无法执行(详情见宿主日志)';
5032
4976
  readonly 'overview.quick.backupFailed': '备份失败:{message}';
5033
- readonly 'overview.quick.sync': '远程同步';
5034
4977
  readonly 'overview.activity.title': '最近活动';
5035
- readonly 'overview.activity.empty': '暂无操作记录(执行备份 / 导入 / 同步后在这里显示)';
4978
+ readonly 'overview.activity.empty': '暂无操作记录';
5036
4979
  readonly 'overview.activity.unavailable': '活动记录读取失败(这不是「没有记录」)';
5037
4980
  readonly 'overview.loadFailed': '有 {count} 项数据读取失败:{message} —— 下面的指标可能不完整';
5038
4981
  readonly 'overview.empty.title': '开始保护你的配置';
5039
- readonly 'overview.empty.body': '创建第一个备份或快照后,这里会展示配置健康状态与最近活动。';
5040
4982
  readonly 'overview.empty.step1': '创建第一份备份';
5041
4983
  readonly 'overview.empty.step2': '导出 ZIP 带走';
5042
4984
  readonly 'overview.empty.step3': '新机器导入回来';
@@ -5059,8 +5001,6 @@ declare const zh$4: {
5059
5001
  readonly 'overview.kind.snapshot-prune': '清理快照';
5060
5002
  readonly 'overview.kind.other': '其他操作';
5061
5003
  readonly 'export.hint': '默认导出推荐分区(可迁移、不含设备专属数据)。点「选择要导出的内容」可按分区、逐条目调整(技能、插件、工作区、会话等)。';
5062
- readonly 'export.nothingSelected': '当前没有任何内容被勾选,先把要导出的分区或条目勾上。';
5063
- readonly 'export.security': '安全选项';
5064
5004
  readonly 'export.encrypt': '加密备份';
5065
5005
  readonly 'export.encryptHint': '用密码加密整个备份文件(AES-256-GCM)。密码仅用于本次加密,不会写入备份或任何配置文件;导入时必须输入该密码才能解锁。';
5066
5006
  readonly 'export.password': '备份加密密码';
@@ -5070,11 +5010,9 @@ declare const zh$4: {
5070
5010
  readonly 'export.includeSecrets': '导出密钥';
5071
5011
  readonly 'export.includeSecretsHint': '把真实密钥(凭据值)写入备份。密钥必须以加密形式保存:勾选时会自动选中「加密备份」;取消「加密备份」会同时取消「导出密钥」。';
5072
5012
  readonly 'export.run': '开始导出';
5073
- readonly 'export.running': '正在导出…';
5074
5013
  readonly 'export.download': '下载备份文件';
5075
5014
  readonly 'export.saved': '已保存到下载目录:{name}';
5076
5015
  readonly 'export.selectionWarnings': '以下分区为设备相关数据,跨设备导入时可能不适用:';
5077
- readonly 'export.naming': '文件名与备注(可选)';
5078
5016
  readonly 'export.fileName': '自定义文件名';
5079
5017
  readonly 'export.fileNameHint': '留空自动命名(dsh-config-<日期>.zip);无需手动输入 .zip 后缀,保存时自动补全。仅允许字母数字、空格、- _ .。';
5080
5018
  readonly 'export.fileNameInvalid': '文件名不合法:仅允许字母数字、空格、- _ .,不能包含路径分隔符。';
@@ -5101,7 +5039,7 @@ declare const zh$4: {
5101
5039
  readonly 'picker.fileCount': '{count} 个文件';
5102
5040
  readonly 'picker.summary': '将导出 {sections} 个分区 · {units} 个条目 · 约 {size}';
5103
5041
  readonly 'picker.loading': '正在读取可导出的条目…';
5104
- readonly 'picker.loadingItems': '正在读取条目…(大分区如会话可能较慢)';
5042
+ readonly 'picker.loadingItems': '正在读取条目…';
5105
5043
  readonly 'picker.loadingSection': '读取中…';
5106
5044
  readonly 'picker.empty': '没有匹配的分区或条目';
5107
5045
  readonly 'picker.sessionWorkspaceLinked': '会话与工作区联动勾选:勾上会话会自动勾上它所属的工作区;取消工作区会取消它的会话';
@@ -5110,18 +5048,17 @@ declare const zh$4: {
5110
5048
  readonly 'picker.deviceSpecific': '设备相关';
5111
5049
  readonly 'picker.sensitive': '敏感';
5112
5050
  readonly 'picker.showAll': '显示全部(共 {count} 条)';
5113
- readonly 'picker.summaryImport': '将导入 {sections} 个分区 · {units} 个条目';
5051
+ readonly 'picker.summaryImport': '{sections} 个分区 · {units} 个条目';
5114
5052
  readonly 'picker.pluginRoot': '插件';
5115
5053
  readonly 'picker.pluginLeafPlugin': '插件清单条目';
5116
5054
  readonly 'picker.pluginLeafConfig': '数据目录(配置)';
5117
5055
  readonly 'picker.pluginLeafAssets': '大文件(壁纸 / 数据库)';
5118
5056
  readonly 'picker.pluginAreaUnread': '未读取';
5119
5057
  readonly 'picker.pluginAreaAbsent': '无内容';
5120
- readonly 'picker.pluginViewEmpty': '插件清单还没读到,先读取「插件」分区。';
5121
5058
  readonly 'picker.bucketPlugins': '插件分区的其他条目(补丁行 / pnpm-workspace.yaml)';
5122
5059
  readonly 'picker.bucketLooseFiles': '未归属到插件的配置(~/.dsh 根)';
5123
5060
  readonly 'picker.bucketHint': '这些条目没有可证明的插件归属,不猜;展开可逐条勾选。';
5124
- readonly 'picker.groupHint.extensions': '这一组里的插件分区合并成一棵按插件分组的树:默认只显示一个「插件」区块,展开它才列出各个插件,插件名下面是它的清单条目、数据目录与大文件。只显示能证明的归属(内置来源表 + 插件自述 dsh.dataDirs)——「插件散落配置」没有包名信息,因此留在「未归属」里;带「设备相关」的分区默认不勾选,跨设备导入时可能不适用。';
5061
+ readonly 'picker.groupHint.extensions': '只列出能证明的归属(内置来源表 + 插件自述 dsh.dataDirs);没有包名信息的配置留在「未归属」。';
5125
5062
  readonly 'group.general': '通用';
5126
5063
  readonly 'group.ai': 'AI';
5127
5064
  readonly 'group.extensions': '插件与扩展';
@@ -5131,16 +5068,14 @@ declare const zh$4: {
5131
5068
  readonly 'group.workspace': '工作区';
5132
5069
  readonly 'group.ui': '界面';
5133
5070
  readonly 'group.optional': '可选数据';
5134
- readonly 'import.nothingSelected': '当前没有勾选任何要导入的内容,请把需要导入的分区或条目勾上。';
5135
- readonly 'import.excludedByUser': '本次有 {count} 项被你取消勾选:未导入,也未进快照。';
5071
+ readonly 'import.nothingSelected': '未勾选任何内容';
5072
+ readonly 'import.excludedByUser': '取消勾选 {count} 项(未导入、未入快照)';
5136
5073
  readonly 'import.consult.hint': '只读分析:先看结论与依据,确认后再选择要导入的内容。';
5137
5074
  readonly 'consult.title': '迁移前咨询';
5138
5075
  readonly 'library.pullTitle': '拉取远端快照';
5139
5076
  readonly 'library.pulling': '正在拉取并导入…';
5140
5077
  readonly 'library.downloadTitle': '下载远端快照';
5141
5078
  readonly 'library.downloading': '正在拉取并下载…';
5142
- readonly 'library.pullStarted': '已开始拉取该远端快照,进度见同步页';
5143
- readonly 'import.consult.next': '下一步:选择要导入的内容';
5144
5079
  readonly 'import.consult.unavailable': '暂时无法生成咨询报告(不影响继续导入)。';
5145
5080
  readonly 'import.picker.title': '选择要导入的内容';
5146
5081
  readonly 'import.picker.hint': '不勾选的条目不会被导入、也不会进快照;随时可以回到这一步修改。';
@@ -5157,7 +5092,6 @@ declare const zh$4: {
5157
5092
  readonly 'import.select.reselect': '重新选择';
5158
5093
  readonly 'import.select.cancel': '取消选择';
5159
5094
  readonly 'import.select.file': '已选择:{name}';
5160
- readonly 'import.analyzing': '正在分析备份…';
5161
5095
  readonly 'import.compatibility.title': '兼容性';
5162
5096
  readonly 'import.compatibility.score': '兼容性评分:{score}';
5163
5097
  readonly 'import.preview.title': '导入预览';
@@ -5173,11 +5107,10 @@ declare const zh$4: {
5173
5107
  readonly 'import.preview.conflicts': '冲突 {count}';
5174
5108
  readonly 'import.preview.restart': '导入后需重启 DSH 生效';
5175
5109
  readonly 'import.confirm.execute': '确认导入';
5176
- readonly 'import.confirm.warning': '导入将修改当前 DSH 配置;执行前会自动创建安全快照,失败时整体回滚。';
5177
- readonly 'import.confirm.warningNoRollback': '导入将修改当前 DSH 配置;执行前会自动创建安全快照。已取消「失败时整体回滚」:单项失败会继续执行后续项,已写入的内容不会自动回滚。';
5110
+ readonly 'import.confirm.warning': '导入会修改当前 DSH 配置,执行前自动创建快照。';
5111
+ readonly 'import.confirm.warningNoRollback': '导入会修改当前 DSH 配置,执行前自动创建快照;已取消整体回滚 —— 单项失败会继续,已写入内容不回退。';
5178
5112
  readonly 'import.confirm.encrypted': '将用备份密码解密并恢复 {count} 个凭据。';
5179
5113
  readonly 'import.rollbackOnError': '失败时整体回滚(推荐)';
5180
- readonly 'import.importing': '正在导入…(插件安装较多时可能需要几分钟,请勿关闭页面)';
5181
5114
  readonly 'import.log.title': '导入日志';
5182
5115
  readonly 'import.log.empty': '等待命令输出…';
5183
5116
  readonly 'import.log.newOutput': '↓ 新输出';
@@ -5187,7 +5120,7 @@ declare const zh$4: {
5187
5120
  readonly 'import.log.problemsEmpty': '本次没有失败或警告的项';
5188
5121
  readonly 'import.done': '完成';
5189
5122
  readonly 'import.skipCurrent': '跳过当前插件';
5190
- readonly 'import.skipPending': '正在跳过…其余项将继续导入';
5123
+ readonly 'import.skipPending': '正在跳过…';
5191
5124
  readonly 'import.retrySkipped': '重试失败/跳过的项 ({count})';
5192
5125
  readonly 'import.secrets.title': '补录密钥';
5193
5126
  readonly 'import.secrets.hint': '以下凭据未随备份导出(安全设计)。如需在目标 DSH 使用,请手动补录;留空将跳过。';
@@ -5199,7 +5132,6 @@ declare const zh$4: {
5199
5132
  readonly 'import.decryptArchive.hint': '此备份已整体加密(整个文件被密码保护)。输入导出时设置的密码即可解密并继续导入——备份内的加密凭据也会用同一密码自动恢复,全程只需输入这一次密码;密码仅本次使用,绝不落盘。';
5200
5133
  readonly 'import.decryptArchive.passwordPlaceholder': '输入备份加密密码';
5201
5134
  readonly 'import.decryptArchive.unlock': '解锁并继续';
5202
- readonly 'import.decryptArchive.unlocking': '解锁中…';
5203
5135
  readonly 'import.decrypt.previewHint': '加密备份:凭据已由解锁密码自动恢复,无需再次输入密码。';
5204
5136
  readonly 'import.conflicts.title': '解决冲突';
5205
5137
  readonly 'import.conflicts.hint': '以下配置项在目标 DSH 已存在且与备份不同,请逐项决策。';
@@ -5222,25 +5154,9 @@ declare const zh$4: {
5222
5154
  readonly 'import.paths.kind.homeMismatch': '基础路径不同';
5223
5155
  readonly 'import.paths.unresolved': '还有 {count} 条路径未映射(留空将跳过该路径,可以继续)';
5224
5156
  readonly 'import.paths.empty': '无需映射路径';
5225
- readonly 'snapshots.title': '备份与快照';
5226
5157
  readonly 'home.schedule.title': '定时备份';
5227
- readonly 'snapshots.empty.title': '尚无安全快照';
5228
- readonly 'snapshots.empty.body': '安全快照在导入 / 恢复前自动创建,用于一键回滚;也可立即手动创建一个。';
5229
- readonly 'snapshots.empty.viewFiles': '查看备份文件';
5230
- readonly 'snapshots.empty.runBackup': '立即备份';
5231
- readonly 'backupFiles.noteUnreadable': '(备注不可读)';
5232
- readonly 'snapshots.empty': '暂无快照。执行导入时会自动创建安全快照。';
5233
- readonly 'snapshots.loading': '加载快照中…';
5234
5158
  readonly 'snapshots.selectHint': '选择快照以预览恢复计划(只读预览,不会改动任何设置):';
5235
- readonly 'snapshots.createdAt': '创建时间';
5236
- readonly 'snapshots.sourceZip': '来源备份';
5237
5159
  readonly 'snapshots.status': '状态';
5238
- readonly 'snapshots.entries': '条目';
5239
- readonly 'snapshots.plugins': '插件';
5240
- readonly 'snapshots.actions': '操作';
5241
- readonly 'snapshots.retentionHint': '最多自动保留 {count} 个快照(超出清理最旧的);置顶的快照不参与自动清理,只能手动删除。';
5242
- readonly 'snapshots.pin': '置顶';
5243
- readonly 'snapshots.unpin': '取消置顶';
5244
5160
  readonly 'snapshots.delete': '删除';
5245
5161
  readonly 'snapshots.deleted': '已删除快照';
5246
5162
  readonly 'snapshots.deleteConfirmTitle': '删除快照';
@@ -5268,9 +5184,9 @@ declare const zh$4: {
5268
5184
  readonly 'snapshots.plan.plugins': '卸载插件 {count}';
5269
5185
  readonly 'snapshots.plan.hints': '需人工处理 {count}';
5270
5186
  readonly 'snapshots.plan.skips': '无动作 {count}';
5271
- readonly 'snapshots.plan.noStats': '未统计行数(宿主未返回统计)';
5272
- readonly 'snapshots.plan.statsTruncated': '文件较多或过大,部分文件未统计行数';
5273
- readonly 'snapshots.plan.group.changes': '将被还原(文件变更)';
5187
+ readonly 'snapshots.plan.noStats': '未统计行数';
5188
+ readonly 'snapshots.plan.statsTruncated': '部分文件未统计行数';
5189
+ readonly 'snapshots.plan.group.changes': '将被还原';
5274
5190
  readonly 'snapshots.plan.group.deletes': '将被删除';
5275
5191
  readonly 'snapshots.plan.group.plugins': '卸载插件';
5276
5192
  readonly 'snapshots.plan.group.hints': '需人工处理';
@@ -5281,20 +5197,20 @@ declare const zh$4: {
5281
5197
  readonly 'snapshots.plan.status.plugin': '卸载插件';
5282
5198
  readonly 'snapshots.plan.status.hint': '人工提示';
5283
5199
  readonly 'snapshots.plan.status.skip': '跳过';
5284
- readonly 'snapshots.plan.beforeLabel': '当前(本机)';
5285
- readonly 'snapshots.plan.afterLabel': '快照(将还原)';
5200
+ readonly 'snapshots.plan.beforeLabel': '本机';
5201
+ readonly 'snapshots.plan.afterLabel': '快照';
5286
5202
  readonly 'snapshots.plan.loadingDiff': '正在读取差异…';
5287
- readonly 'snapshots.plan.diffIdentical': '两侧内容一致,无逐行差异';
5288
- readonly 'snapshots.plan.diffBinary': '二进制文件,不做逐行对照';
5289
- readonly 'snapshots.plan.diffTooLarge': '文件过大({size}),不做逐行对照';
5290
- readonly 'snapshots.plan.diffUnreadable': '无法读取该文件(可能已不存在或不是普通文件)';
5291
- readonly 'snapshots.plan.diffMissingBlob': '快照内缺少该文件内容(快照可能不完整)';
5203
+ readonly 'snapshots.plan.diffIdentical': '两侧内容一致';
5204
+ readonly 'snapshots.plan.diffBinary': '二进制文件';
5205
+ readonly 'snapshots.plan.diffTooLarge': '文件过大({size})';
5206
+ readonly 'snapshots.plan.diffUnreadable': '无法读取该文件';
5207
+ readonly 'snapshots.plan.diffMissingBlob': '快照内缺少该文件内容';
5292
5208
  readonly 'snapshots.plan.diffEscape': '路径越界,已拒绝读取';
5293
- readonly 'snapshots.plan.diffNotApplicable': '该动作不是文件内容变更,无逐行对照';
5294
- readonly 'snapshots.plan.diffDegraded': '差异过大,已按整块对比显示';
5295
- readonly 'snapshots.plan.statSkipped.tooLarge': '体积超上限,未统计';
5209
+ readonly 'snapshots.plan.diffNotApplicable': '非文件内容变更';
5210
+ readonly 'snapshots.plan.diffDegraded': '差异过大,已按整块显示';
5211
+ readonly 'snapshots.plan.statSkipped.tooLarge': '体积超上限';
5296
5212
  readonly 'snapshots.plan.statSkipped.binary': '二进制';
5297
- readonly 'snapshots.plan.statSkipped.budget': '未统计(文件数上限)';
5213
+ readonly 'snapshots.plan.statSkipped.budget': '超出数量上限';
5298
5214
  readonly 'snapshots.plan.statSkipped.unreadable': '未统计';
5299
5215
  readonly 'backupSchedule.title': '定时全量备份';
5300
5216
  readonly 'backupSchedule.hint': '按固定间隔在后台自动导出全量备份 ZIP(恒不含 secret、不加密;要加密请手动导出)。配置存 sync/backup-schedule.json,随 self 分区备份 / 远程同步迁移。';
@@ -5339,25 +5255,14 @@ declare const zh$4: {
5339
5255
  readonly 'retention.unit': '份';
5340
5256
  readonly 'retention.months': '个月';
5341
5257
  readonly 'retention.years': '年';
5342
- readonly 'retention.tiersOff': '未启用分层(等价于「只保留最近 N 份」)';
5258
+ readonly 'retention.tiersOff': '仅保留最近 N 份';
5343
5259
  readonly 'retention.appliesTo': '生效于:导入前快照 + 定时备份产物';
5344
- readonly 'backupFiles.title': '备份文件';
5345
- readonly 'backupFiles.name': '文件名';
5346
- readonly 'backupFiles.size': '大小';
5347
- readonly 'backupFiles.time': '修改时间';
5348
5260
  readonly 'backupFiles.hint': '导出产物(手动导出与定时备份)统一在此管理:可下载到本机、直接导入恢复,或删除。定时备份自动保留最近 10 个。';
5349
- readonly 'backupFiles.empty': '暂无备份文件。手动导出或启用定时备份后此处会列出。';
5350
- readonly 'backupFiles.loading': '加载备份文件…';
5351
- readonly 'backupFiles.source.auto': '定时备份';
5352
- readonly 'backupFiles.source.manual': '手动导出';
5353
- readonly 'backupFiles.download': '下载';
5354
- readonly 'backupFiles.import': '导入';
5261
+ readonly 'backupFiles.empty': '暂无备份文件';
5355
5262
  readonly 'backupFiles.delete': '删除';
5356
5263
  readonly 'backupFiles.deleteConfirmTitle': '删除备份文件';
5357
5264
  readonly 'backupFiles.deleteConfirm': '确认删除备份文件「{name}」?此操作不可恢复。';
5358
5265
  readonly 'backupFiles.deleted': '已删除备份文件「{name}」';
5359
- readonly 'backupFiles.searchPlaceholder': '按文件名或备注搜索…';
5360
- readonly 'backupFiles.searchEmpty': '没有匹配的备份文件';
5361
5266
  readonly 'backupFiles.inspect': '查看 / 对比';
5362
5267
  readonly 'backupFiles.inspectLoading': '正在分析备份内容…';
5363
5268
  readonly 'backupFiles.inspectEmpty': '该备份无法分析(文件损坏或格式不支持)';
@@ -5373,18 +5278,13 @@ declare const zh$4: {
5373
5278
  readonly 'report.needsRestart': '插件 / MCP 变更将在重启 DSH 后生效。';
5374
5279
  readonly 'nextSteps.title': '接下来需要处理';
5375
5280
  readonly 'nextSteps.done': '全部完成,无需额外处理';
5376
- readonly 'nextSteps.restart.title': '重启 DSH 后生效({count})';
5377
- readonly 'nextSteps.restart.hint': '以下变更需要重启 DSH 才会生效:';
5378
- readonly 'nextSteps.secrets.title': '补录凭据({count})';
5379
- readonly 'nextSteps.secrets.hint': '以下凭据未随备份导出,需在本机手动补录:';
5380
- readonly 'nextSteps.unresolved.title': '失败 / 已跳过({count})';
5381
- readonly 'nextSteps.unresolved.hint': '以下项未成功应用,可在结果页点击「重试」:';
5281
+ readonly 'nextSteps.restart.hint': '需重启 DSH 后生效({count}):';
5282
+ readonly 'nextSteps.secrets.hint': '未随备份导出、需在本机补录的凭据({count}):';
5283
+ readonly 'nextSteps.unresolved.hint': '未成功应用({count}),可用下方按钮重试:';
5382
5284
  readonly 'starPrompt.title': '喜欢 Config Manager 吗?';
5383
5285
  readonly 'starPrompt.body': '如果你觉得这个插件有用,欢迎到 GitHub 点个 ⭐ Star 支持一下——你的支持是持续维护的最大动力!';
5384
5286
  readonly 'starPrompt.star': '去点 Star';
5385
5287
  readonly 'starPrompt.dismiss': '不再提示';
5386
- readonly 'about.title': '关于 DSH Config Manager';
5387
- readonly 'about.subtitle': '插件信息、作者与反馈入口';
5388
5288
  readonly 'about.official': '官方';
5389
5289
  readonly 'about.version': '版本 {version}';
5390
5290
  readonly 'about.dshVersion': 'DSH {version}';
@@ -5394,7 +5294,7 @@ declare const zh$4: {
5394
5294
  readonly 'about.docs': '使用文档';
5395
5295
  readonly 'about.issues': '反馈问题';
5396
5296
  readonly 'about.feedbackHint': '遇到界面问题?复制环境信息,粘进 issue 就行';
5397
- readonly 'about.copyEnv': '复制环境信息(插件版本 / DSH 版本 / 平台)';
5297
+ readonly 'about.copyEnv': '复制环境信息';
5398
5298
  readonly 'about.authorLabel': '作者';
5399
5299
  readonly 'about.loading': '正在获取版本信息…';
5400
5300
  readonly 'about.retryStatus': '重新获取';
@@ -5403,12 +5303,12 @@ declare const zh$4: {
5403
5303
  readonly 'about.diag.profileDir': '目录:{path}';
5404
5304
  readonly 'about.diag.profile': 'profile:{profile}';
5405
5305
  readonly 'about.diag.pluginCount': '已识别插件:{count} 个';
5406
- readonly 'about.diag.manifestUnreadable': '该目录下读不到 package.json —— 插件清单必然为空;请确认 DSH 的 profile 与 DSH_HOME 是否与此处一致。';
5306
+ readonly 'about.diag.manifestUnreadable': '读不到 package.json:插件清单为空(核对 profile 与 DSH_HOME)';
5407
5307
  readonly 'about.diag.hint': '若与实际不符,请据此检查当前档案的启动方式(宿主 profileContext / 启动参数 --profile / 环境变量 DSH_PROFILE)与 DSH_HOME 环境变量。';
5408
5308
  readonly 'about.releaseNotes.title': '版本更新内容';
5409
5309
  readonly 'about.releaseNotes.loading': '正在获取更新内容…';
5410
5310
  readonly 'about.releaseNotes.loadingMore': '正在加载更多版本…';
5411
- readonly 'about.releaseNotes.empty': '暂无版本发布记录。';
5311
+ readonly 'about.releaseNotes.empty': '暂无发布记录';
5412
5312
  readonly 'about.releaseNotes.retry': '重试';
5413
5313
  readonly 'about.releaseNotes.viewOnGithub': '在 GitHub 上查看全部 Releases';
5414
5314
  readonly 'about.releaseNotes.viewSingleOnGithub': '在 GitHub 上查看此版本';
@@ -5424,11 +5324,11 @@ declare const zh$4: {
5424
5324
  readonly 'profiles.title': '档案';
5425
5325
  readonly 'profiles.subtitle': '管理 DSH 自带的 profile($DSH_HOME/profiles/<name>):每个档案 = 一套插件组合(bundles)+ 依赖 + patch 层,用 dsh --profile <name> 启动。';
5426
5326
  readonly 'profiles.loading': '加载档案中…';
5427
- readonly 'profiles.empty': '还没有任何档案。用「新建档案」创建第一个。';
5327
+ readonly 'profiles.empty': '还没有任何档案';
5428
5328
  readonly 'profiles.refresh': '刷新';
5429
5329
  readonly 'profiles.current': '当前运行';
5430
5330
  readonly 'profiles.running.title': '运行状态';
5431
- readonly 'profiles.running.none': '当前没有任何档案实例在跑。点档案行的「启动」会用该档案另起一个独立实例(自动挑空闲端口 + 自动打开浏览器);已经在跑的档案(含手动启动的)不会再被启动。';
5331
+ readonly 'profiles.running.none': '没有正在运行的实例';
5432
5332
  readonly 'profiles.running.port': '端口 {port}';
5433
5333
  readonly 'profiles.running.open': '打开';
5434
5334
  readonly 'profiles.running.badge': ':{port} 运行中';
@@ -5437,7 +5337,6 @@ declare const zh$4: {
5437
5337
  readonly 'profiles.running.originExternal': '其他实例';
5438
5338
  readonly 'profiles.running.badgePlain': '运行中';
5439
5339
  readonly 'profiles.stop': '停止';
5440
- readonly 'profiles.stopping': '停止中…';
5441
5340
  readonly 'profiles.stop.hint': '停止本插件启动的这个实例(先请它自己退出,优雅期超时才强制终止进程树)';
5442
5341
  readonly 'profiles.stop.hintExternal': '该档案的实例由另一个 DSH 实例(或手动启动)运行——停止会结束那个进程';
5443
5342
  readonly 'profiles.stop.currentHint': '这就是你正在用的这个实例:不能在它自己的界面里停自己,请关闭该窗口/终端(或到启动它的那个实例里停止)';
@@ -5450,10 +5349,9 @@ declare const zh$4: {
5450
5349
  readonly 'profiles.copy': '复制命令';
5451
5350
  readonly 'profiles.copied': '已复制重启命令';
5452
5351
  readonly 'profiles.launch': '启动';
5453
- readonly 'profiles.launching': '启动中…';
5454
5352
  readonly 'profiles.launch.hint': '用该档案另起一个独立 DSH 实例(自动挑空闲端口、自动打开浏览器);当前实例不受影响。只支持 Web 形态档案。';
5455
- readonly 'profiles.launch.notWeb': '「{name}」不是 Web 形态(bundles 里没有 @deepseek-ai/dsh-web-app),没有浏览器界面,无法作为独立实例启动。请在终端运行:';
5456
- readonly 'profiles.launch.managed': '「{name}」是 DeepSeek Harness Desktop 应用独占管理的保留档案:普通 dsh 命令行对它一律报错(profile "{name}" is managed exclusively by the Electron application),也无法作为独立实例启动。请直接在桌面端应用里打开它并安装插件。';
5353
+ readonly 'profiles.launch.notWeb': '「{name}」不是 Web 形态,不能作为独立实例启动。请在终端运行:';
5354
+ readonly 'profiles.launch.managed': '「{name}」由桌面版独占,命令行无法启动。请在桌面端应用里打开它并安装插件。';
5457
5355
  readonly 'profiles.launch.started': '已启动档案「{name}」的独立实例(端口 {port})';
5458
5356
  readonly 'profiles.launch.pending': '档案「{name}」的进程已启动(端口 {port}),但 {seconds} 秒内未确认就绪 —— 请看日志确认:';
5459
5357
  readonly 'profiles.launch.open': '打开新实例';
@@ -5468,7 +5366,6 @@ declare const zh$4: {
5468
5366
  readonly 'profiles.create.placeholder': '例如 writing / rescue';
5469
5367
  readonly 'profiles.create.templateLabel': '起步模板';
5470
5368
  readonly 'profiles.create.action': '创建档案';
5471
- readonly 'profiles.create.creating': '创建中…';
5472
5369
  readonly 'profiles.create.done': '已创建档案「{name}」';
5473
5370
  readonly 'profiles.nameRequired': '请输入档案名';
5474
5371
  readonly 'profiles.nameTooLong': '档案名最长 64 个字符';
@@ -5476,7 +5373,6 @@ declare const zh$4: {
5476
5373
  readonly 'profiles.nameReserved': '「{name}」是 DSH 保留名(web / headless / sdk / sdk-minimal / acp / desktop),不能手动创建';
5477
5374
  readonly 'profiles.list.title': '全部档案';
5478
5375
  readonly 'profiles.list.count': '共 {count} 个';
5479
- readonly 'profiles.list.summary': 'web {web} · headless {headless} · 其他 {generic} · 已装插件 {installed}';
5480
5376
  readonly 'profiles.list.hint': '点击档案行查看完整详情(bundle 层 / 依赖 / patch 原文)';
5481
5377
  readonly 'profiles.row.summary': '{bundles} 个层 · patch {patch} 条 · 依赖 {deps}';
5482
5378
  readonly 'profiles.detail.info': '档案信息';
@@ -5489,7 +5385,7 @@ declare const zh$4: {
5489
5385
  readonly 'profiles.incomplete.startedAt': '开始于 {time}';
5490
5386
  readonly 'profiles.incomplete.dir': '目录 {path}';
5491
5387
  readonly 'profiles.incomplete.hint': '这是一次被中断的档案复制:没有 package.json,无法启动。确认不需要后可直接删除(只删这个目录,不影响其它档案)。';
5492
- readonly 'profiles.list.incompleteCount': '未完成的副本 {count} 个(不可启动,可直接删除)';
5388
+ readonly 'profiles.list.incompleteCount': '未完成副本 {count} 个(不可启动)';
5493
5389
  readonly 'profiles.delete.incompleteMessage': '确认删除未完成的副本「{name}」?将物理删除整个目录(含已拷入的部分文件),不可恢复。';
5494
5390
  readonly 'profiles.issue.manifestInvalid': 'package.json 损坏';
5495
5391
  readonly 'profiles.issue.patchTooLarge': 'patch 文件过大(未展示原文)';
@@ -5525,12 +5421,11 @@ declare const zh$4: {
5525
5421
  readonly 'profiles.duplicateMessage': '把档案「{name}」复制成一份新档案:';
5526
5422
  readonly 'profiles.duplicate.nameLabel': '副本档案名';
5527
5423
  readonly 'profiles.duplicate.includeModules': '同时复制 node_modules(副本立刻可用)';
5528
- readonly 'profiles.duplicate.includeModulesHint': '带上 node_modules,副本启动时才能解析到树外插件;代价是与原档案同体积、耗时较长(实测 285 MB ≈ 30 秒)。不勾选只复制清单与 patch(秒级完成),副本启动前需要先装依赖。';
5529
- readonly 'profiles.duplicate.onlyManifest': '该档案还没有 node_modules:只会复制清单文件与 patch 层。';
5424
+ readonly 'profiles.duplicate.includeModulesHint': '同体积 · 约 30 秒 · 不勾选则副本启动前需装依赖';
5425
+ readonly 'profiles.duplicate.onlyManifest': '无 node_modules:仅复制清单与 patch';
5530
5426
  readonly 'profiles.duplicate.done': '已复制为档案「{name}」';
5531
5427
  readonly 'profiles.duplicate.warn.depsNotInstalled': '副本没有带 node_modules:直接启动会因解析不到 bundle 而失败,先在副本目录安装依赖:';
5532
5428
  readonly 'profiles.duplicate.copiedInstall': '已复制安装命令';
5533
- readonly 'profiles.error.copyFailed': '复制档案失败';
5534
5429
  readonly 'profiles.error.exists': '同名档案已存在';
5535
5430
  readonly 'profiles.error.notFound': '档案不存在(可能已被删除)';
5536
5431
  readonly 'profiles.error.currentProfile': '该操作不能作用于当前运行中的档案';
@@ -5556,20 +5451,14 @@ declare const zh$4: {
5556
5451
  readonly 'import.compatibility.score.unsupported': '不支持';
5557
5452
  readonly 'import.compatibility.sectionsTitle': '备份包含的分区';
5558
5453
  readonly 'nav.home': '首页';
5559
- readonly 'nav.backups': '备份';
5560
5454
  readonly 'nav.export': '导出';
5561
5455
  readonly 'nav.import': '导入';
5562
5456
  readonly 'nav.sync': '同步';
5563
5457
  readonly 'nav.market': '市场';
5564
- readonly 'nav.profiles': '档案';
5565
- readonly 'nav.refresh': '刷新';
5566
5458
  readonly 'shell.running.restore': '快照恢复';
5567
5459
  readonly 'shell.status.idle': '就绪';
5568
5460
  readonly 'shell.status.running': '{count} 个任务进行中';
5569
5461
  readonly 'shell.status.recovery': '恢复待处理';
5570
- readonly 'shell.version': '插件 {plugin} · DSH {dsh}';
5571
- readonly 'shell.drawer.title': '活动与关于';
5572
- readonly 'shell.drawer.runs': '运行';
5573
5462
  readonly 'shell.status.runningAction': '查看进行中的任务';
5574
5463
  readonly 'runs.loading': '正在读取任务列表…';
5575
5464
  readonly 'runs.loadFailed': '读取任务列表失败:{message}';
@@ -5607,14 +5496,14 @@ declare const zh$4: {
5607
5496
  readonly 'runs.cancelAbort': '继续运行';
5608
5497
  readonly 'runs.cancelConfirm': '确认终止';
5609
5498
  readonly 'runs.cancelRequestedToast': '已请求终止:将在当前计划项完成后暂停';
5610
- readonly 'runs.cancelWaiting': '已请求终止:等当前计划项结束后暂停(已等待 {minutes} 分钟)';
5611
- readonly 'runs.cancelWaitingJustNow': '已请求终止:等当前计划项结束后暂停';
5499
+ readonly 'runs.cancelWaiting': '已请求终止 · 等当前步骤结束 · 已等 {minutes} 分钟';
5500
+ readonly 'runs.cancelWaitingJustNow': '已请求终止 · 等当前步骤结束';
5612
5501
  readonly 'runs.cancelStuck': '长时间没有到达安全点。若出现「跳过当前插件」请先点它;仍不行请重启 DSH —— 环境锁由本进程持有,重启即释放,不重启时其他写操作会一直被拒(423)。';
5613
5502
  readonly 'runs.lock.title': '环境锁';
5614
5503
  readonly 'runs.lock.needsAction': '需要处理';
5615
5504
  readonly 'runs.lock.held': '使用中';
5616
- readonly 'runs.lock.attentionDesc': '检测到上次异常退出残留的配置锁(持有进程已不存在),或锁状态无法判定:重试/重启都不会自愈,必须显式回收。';
5617
- readonly 'runs.lock.heldDesc': '环境锁正被另一项任务持有(可能就是上面那张正在跑的卡片):它会自行释放;若它正是那张「长时间等不到安全点」的导入,只能重启 DSH 释放。';
5505
+ readonly 'runs.lock.attentionDesc': '残留锁(持有进程已不存在)或锁状态无法判定:重试/重启都不会自愈,需显式回收。';
5506
+ readonly 'runs.lock.heldDesc': '被另一项任务持有,会自行释放;若它就是上方卡住的那次导入,只能重启 DSH。';
5618
5507
  readonly 'runs.lock.recover': '回收残留锁';
5619
5508
  readonly 'runs.lock.recoverOk': '已回收残留锁';
5620
5509
  readonly 'runs.lock.recoverRefused': '未回收({state}):只有「持有者已确证死亡」的残留锁才允许回收,活锁会自行释放';
@@ -5631,14 +5520,11 @@ declare const zh$4: {
5631
5520
  readonly 'overview.activity.copy': '复制';
5632
5521
  readonly 'overview.activity.redacted': '(文件名已脱敏)';
5633
5522
  readonly 'overview.sections.entries': '{count} 项';
5634
- readonly 'overview.quick.exportTitle': '生成可迁移的 ZIP 备份文件并下载';
5635
- readonly 'overview.quick.importTitle': '从备份文件恢复或迁移到本机';
5636
- readonly 'overview.quick.syncTitle': '跨设备保持配置一致(Git / WebDAV)';
5637
- readonly 'overview.quick.backupTitle': '立即生成一份完整备份文件(不受定时备份开关影响;在快照页查看 / 还原)';
5638
5523
  readonly 'overview.nav.activity': '活动';
5639
5524
  readonly 'overview.nav.about': '关于';
5640
5525
  readonly 'nav.more': '更多';
5641
5526
  readonly 'palette.label': '命令面板';
5527
+ readonly 'palette.shortcut': '⌘/Ctrl+K';
5642
5528
  readonly 'palette.hint': '↑↓ 选择 · ↵ 执行 · Esc 关闭';
5643
5529
  readonly 'task.title.about': '关于';
5644
5530
  readonly 'task.title.export': '导出配置';
@@ -5653,9 +5539,9 @@ declare const zh$4: {
5653
5539
  readonly 'about.update.offline': '检查更新会访问 npm registry;离线或受限网络下失败属正常,不影响其它功能。';
5654
5540
  readonly 'about.update.current': '当前版本 {version}';
5655
5541
  readonly 'about.update.upToDate': '已是最新版本';
5656
- readonly 'about.update.available': '有新版本 {latest}(当前 {current})';
5542
+ readonly 'about.update.available': '有新版本 {latest}';
5657
5543
  readonly 'about.update.failed': '检查失败:{error}';
5658
- readonly 'about.update.commandHint': '在终端执行下面这条命令升级(装完需重启 DSH):';
5544
+ readonly 'about.update.commandHint': '装完需重启 DSH';
5659
5545
  readonly 'about.update.copyCommand': '复制升级命令';
5660
5546
  readonly 'about.update.noCommand': '未识别到当前档案,或该档案由桌面端独占管理 —— 请在 DSH 的插件页更新本插件。';
5661
5547
  readonly 'about.update.check': '检查更新';
@@ -5673,7 +5559,7 @@ declare const zh$4: {
5673
5559
  readonly 'about.update.dialog.install': '立即更新';
5674
5560
  readonly 'about.update.dialog.installing': '正在更新,请稍候…';
5675
5561
  readonly 'about.update.dialog.done': '更新完成:已安装 v{version}。';
5676
- readonly 'about.update.dialog.restart': '请重启 DSH 使新版本生效(完全退出后重新启动;正在运行的进程仍是旧版本)。';
5562
+ readonly 'about.update.dialog.restart': '需完全退出并重启 DSH 才会生效';
5677
5563
  readonly 'about.update.code.invalidVersion': '版本号无效,未能更新。';
5678
5564
  readonly 'about.update.code.profileUnknown': '无法识别当前档案,请在 DSH 的插件页更新本插件。';
5679
5565
  readonly 'about.update.code.unsupportedProfile': '桌面端档案由桌面应用独占管理,请在 DSH 的插件页更新本插件。';
@@ -5695,8 +5581,7 @@ declare const zh$4: {
5695
5581
  readonly 'profiles.version.format': '会话格式 v{version}';
5696
5582
  readonly 'profiles.format.newer': '对话在此实例不可见';
5697
5583
  readonly 'profiles.format.older': '对话在该档案不可见';
5698
- readonly 'nextSteps.sessionsRestart.title': '新导入的会话需要重启 DSH 才会显示';
5699
- readonly 'nextSteps.sessionsRestart.hint': '本次写入了 {count} 个会话文件;DSH 在启动时建立会话列表与工作区投影,桌面端请退出应用重开,CLI 档案请重启 dsh。';
5584
+ readonly 'nextSteps.sessionsRestart.hint': '写入 {count} 个会话文件;DSH 只在启动时建立会话列表与工作区投影 —— 桌面端退出应用重开,CLI 档案重启 dsh。';
5700
5585
  readonly 'import.source.title': '来源与兼容性';
5701
5586
  readonly 'import.source.dsh': 'DSH 版本:{source} → 本机 {target}';
5702
5587
  readonly 'import.source.platform': '平台:{source} → 本机 {target}';
@@ -5705,18 +5590,17 @@ declare const zh$4: {
5705
5590
  readonly 'import.sessionFormat.skipped': '本次按「跳过」处置未导入 {count} 条会话(格式版本高于本机 DSH,导入了也看不到)';
5706
5591
  readonly 'import.sessionFormat.retryPlan': '重新生成计划';
5707
5592
  readonly 'import.sessionFormat.option.abort': '中止导入(推荐)';
5708
- readonly 'import.sessionFormat.hint.abort': '在计划阶段就停下,不写入任何内容 —— 你需要先升级 DSH,或改用另外两种处置。';
5593
+ readonly 'import.sessionFormat.hint.abort': '在计划阶段就停下,不写入任何内容。';
5709
5594
  readonly 'import.sessionFormat.option.skip': '跳过这些会话';
5710
- readonly 'import.sessionFormat.hint.skip': '这些会话默认不勾选(其余分区照常导入);你仍可在内容选择器里手动把它们勾回来。';
5595
+ readonly 'import.sessionFormat.hint.skip': '这些会话默认不勾选(可在内容选择器改回),其余分区照常导入。';
5711
5596
  readonly 'import.sessionFormat.option.guide': '仅提示,照常导入';
5712
- readonly 'import.sessionFormat.hint.guide': '不改动导入行为:会话文件会写入,但在本机 DSH 里仍然看不到这些对话。';
5713
- readonly 'import.sessionFormat.title': '本机读不了的会话(格式版本超前)';
5714
- readonly 'import.sessionFormat.blocked': '已按「中止」停止:宿主在计划阶段拒绝了本次导入,没有写入任何内容。改选「跳过」或「仅提示」后点「重新生成计划」即可继续。';
5715
- readonly 'import.sessionFormat.summary': '包内有 {count} 条会话是 v{newer} 格式,本机 DSH 只支持 v{target}:DSH 会静默跳过它们(不报错,工作区列表里也看不到)';
5597
+ readonly 'import.sessionFormat.hint.guide': '会话文件照常写入,但本机 DSH 里看不到这些对话。';
5598
+ readonly 'import.sessionFormat.title': '本机读不了的会话';
5599
+ readonly 'import.sessionFormat.blocked': '已按「中止」停止,未写入任何内容 —— 改选「跳过」或「仅提示」后重新生成计划。';
5600
+ readonly 'import.sessionFormat.summary': '包内 {count} 条会话是 v{newer} 格式,本机只支持 v{target}:DSH 会静默跳过,不报错也不出现在工作区';
5716
5601
  readonly 'import.sessionFormat.sampled': '格式体检是抽查:已检查 {checked} 条,另有 {skipped} 条未检查(未检查的按可读处理,不参与本次处置)';
5717
- readonly 'import.sessionFormat.guide.title': '怎么让这些对话可见';
5718
5602
  readonly 'import.sessionFormat.guide.upgrade': '把本档案的 DSH 升级到支持 v{newer} 的版本(当前支持 v{target})后重新导入;或在导出机用不高于 v{target} 的 DSH 重新导出。';
5719
- readonly 'import.sessionFormat.guide.doctor': '先离线体检本机存量会话(只读,不写任何字节):';
5603
+ readonly 'import.sessionFormat.guide.doctor': '离线体检本机存量会话(只读):';
5720
5604
  readonly 'import.sessionFormat.guide.copy': '复制离线体检命令';
5721
5605
  readonly 'backupFiles.encryptedHint': '整包加密的备份:导入时需先输入备份密码解锁(文件本身没有损坏)';
5722
5606
  readonly 'library.expand': '展开 {name}';
@@ -5729,10 +5613,9 @@ declare const zh$4: {
5729
5613
  readonly 'library.remoteDevice': '由 {device} 推送';
5730
5614
  readonly 'library.kind.market': '市场配置';
5731
5615
  readonly 'library.title': '产物库';
5732
- readonly 'library.refresh': '刷新';
5733
5616
  readonly 'library.searchPlaceholder': '搜索文件名 / 备注 / 快照 id';
5734
5617
  readonly 'library.sourceFailed': '{count} 个来源读取失败';
5735
- readonly 'library.snapshotsUnreadable': '有快照目录读不出来(这不是「没有快照」)';
5618
+ readonly 'library.snapshotsUnreadable': '快照目录读取失败:可能有快照读不出';
5736
5619
  readonly 'snapshots.planChanged': '环境在预览后发生了变化,恢复已取消 —— 请重新预览确认';
5737
5620
  readonly 'library.snapshotReferencedByRecovery': '该快照是事故恢复的回滚点,已拒绝删除(请先处理恢复事项)';
5738
5621
  readonly 'library.snapshotReferenceUnreadable': '读不到恢复引用清单,已保守拒绝删除(请重试)';
@@ -5748,8 +5631,6 @@ declare const zh$4: {
5748
5631
  readonly 'library.new.import': '从文件导入';
5749
5632
  readonly 'library.new.market': '逛市场';
5750
5633
  readonly 'import.reason.crossPlatform': '跨平台:备份来自 {source},本机是 {target}';
5751
- readonly 'palette.view.activity': '活动记录';
5752
- readonly 'palette.view.about': '关于';
5753
5634
  readonly 'palette.rescue.recovery': '事故恢复';
5754
5635
  readonly 'palette.rescue.mode': '救援模式';
5755
5636
  readonly 'palette.rescue.rollback': '回滚点(工作区 + 会话回退)';
@@ -5759,15 +5640,9 @@ declare const zh$4: {
5759
5640
  readonly 'import.reason.sourceOlder': '备份来自更旧的 DSH({source} → 本机 {target}):向后兼容';
5760
5641
  readonly 'foreign.source.title': '从其它 agent 导入';
5761
5642
  readonly 'foreign.source.hint': '读取本机已装的其它 agent 配置,先看清将导入什么,再交给既有的导入向导(分析只读,零写入)。';
5762
- readonly 'foreign.source.selectTitle': '选择来源';
5763
5643
  readonly 'foreign.source.loading': '正在检测本机配置…';
5764
5644
  readonly 'foreign.source.empty': '未检测到任何可导入的其它 agent 配置。';
5765
5645
  readonly 'foreign.source.unknown': '未识别的来源。';
5766
- readonly 'foreign.source.found': '已检测到';
5767
- readonly 'foreign.source.notFound': '未检测到';
5768
- readonly 'foreign.source.paths': '路径';
5769
- readonly 'foreign.source.locationOverridden': '位置由环境变量覆盖';
5770
- readonly 'foreign.source.detectFailed': '检测失败:{reason}';
5771
5646
  readonly 'foreign.source.claude-code': 'Claude Code';
5772
5647
  readonly 'foreign.source.hermes': 'Hermes';
5773
5648
  readonly 'foreign.source.cursor': 'Cursor';
@@ -5799,26 +5674,18 @@ declare const zh$4: {
5799
5674
  readonly 'foreign.source.vibe': 'Vibe';
5800
5675
  readonly 'foreign.source.dsh': 'DSH 会话日志(V0-V3 代次)';
5801
5676
  readonly 'foreign.action.import': '开始导入';
5802
- readonly 'foreign.action.preview': '查看将导入的内容';
5803
5677
  readonly 'foreign.action.refresh': '重新检测';
5804
- readonly 'foreign.action.retry': '重试';
5805
- readonly 'foreign.action.close': '关闭';
5806
- readonly 'foreign.loading': '正在读取外部配置…';
5807
- readonly 'foreign.importing': '正在转换外部配置…';
5808
5678
  readonly 'foreign.importFailed': '导入失败:{reason}';
5809
5679
  readonly 'foreign.previewTitle': '将导入的内容';
5810
- readonly 'foreign.previewEmpty': '该来源没有可导入的配置项。';
5811
5680
  readonly 'foreign.previewSections': '包含分区:{sections}';
5812
- readonly 'foreign.previewCounts': '共 {count} 项计划动作';
5813
5681
  readonly 'foreign.previewDryRun': '只读预览:不会写入任何配置。';
5814
- readonly 'foreign.previewReset': '来源或检测结果已变化:上一次的产包结果已作废,请重新点击「开始导入」生成新的包。';
5815
- readonly 'foreign.lossy.title': '已知有损(导入前必读)';
5682
+ readonly 'foreign.previewReset': '来源已变化:上一次的产包结果作废,请重新「开始导入」。';
5683
+ readonly 'foreign.lossy.title': '已知有损';
5816
5684
  readonly 'foreign.lossy.hint': '下面三条是「外部配置 → bundle → 导入」这条流水线的既有行为:都不阻断导入,兼容性评分也不会为它们给出原因。';
5817
5685
  readonly 'foreign.lossy.applies': '本包适用';
5818
5686
  readonly 'foreign.lossy.notApplies': '本包不涉及';
5819
- readonly 'foreign.credentialRefs': '需补录凭据 {count} 项(值未随导入带出,请在本机补录)';
5687
+ readonly 'foreign.credentialRefs': '需补录凭据 {count} 项(值未带出)';
5820
5688
  readonly 'foreign.credentialRefsNone': '无需补录凭据';
5821
- readonly 'foreign.reportOnly': '只报告、不导入:{detail}';
5822
5689
  readonly 'foreign.skipped': '未迁移 {count} 项';
5823
5690
  readonly 'foreign.skip.unsupported-hooks': 'settings 的 hooks:DSH 无对等结构,未迁移';
5824
5691
  readonly 'foreign.skip.unsupported-commands': '斜杠命令:与 DSH 提示词不是同一语义,本次未迁移';
@@ -5849,7 +5716,7 @@ declare const zh$4: {
5849
5716
  readonly 'foreign.skip.legacy-rules-file': '旧式规则文件:DSH 无对等结构,只报告';
5850
5717
  readonly 'foreign.skip.instructions-merged': '多份指令源被合并为一个全局指令文件';
5851
5718
  readonly 'foreign.skip.instructions-override-selected': '命中更高优先级的指令文件(override),按它导入';
5852
- readonly 'foreign.conflict.policy': '同 id 冲突:不覆盖本机既有内容,跳过并在报告里逐条说明';
5719
+ readonly 'foreign.conflict.policy': '同 id 冲突不覆盖本机内容:跳过并逐条报告';
5853
5720
  };
5854
5721
  /** 字典键联合(注册处 compile-time 校验) */
5855
5722
  type ConfigManagerKey = keyof typeof zh$4;
@@ -5871,7 +5738,6 @@ declare const zh$3: {
5871
5738
  readonly 'config.tokenMissing': '未配置令牌:可拉取公开仓库,无法推送';
5872
5739
  readonly 'config.tokenPlaceholder': 'ghp_…(可选)';
5873
5740
  readonly 'config.save': '保存配置';
5874
- readonly 'config.saving': '保存中…';
5875
5741
  readonly 'config.saveHint': '表单改动会自动保存(密码/token 安全写入 DSH credentials,不会写入同步文件或日志);也可点击按钮立即保存。';
5876
5742
  readonly 'channel.title': '同步通道';
5877
5743
  readonly 'channel.git': 'Git 私有仓库';
@@ -5879,7 +5745,7 @@ declare const zh$3: {
5879
5745
  readonly 'channel.s3': '对象存储(S3 兼容)';
5880
5746
  readonly 'channel.gist': 'GitHub Gist';
5881
5747
  readonly 'channel.perChannelHint': '每条通道(Git / WebDAV / 对象存储 / Gist)的自动同步、同步模式、加密与远端快照各自独立配置。';
5882
- readonly 'channel.open': '配置同步通道';
5748
+ readonly 'channel.open': '配置…';
5883
5749
  readonly 'channel.openHint': '远程同步通过「同步通道」进行:Git 私有仓库或 WebDAV 服务器。点击按钮在弹窗中配置或修改。';
5884
5750
  readonly 'channel.expand': '展开通道详情';
5885
5751
  readonly 'channel.collapse': '收起通道详情';
@@ -5906,7 +5772,6 @@ declare const zh$3: {
5906
5772
  readonly 'workdir.recloneConfirmTitle': '重新克隆工作副本?';
5907
5773
  readonly 'workdir.recloneConfirmMessage': '将删除本机工作副本目录并从远端重新克隆。本机配置与远端快照都不受影响,但工作副本里尚未推送的本地提交会被丢弃 —— 需要时请先在同步页执行一次推送。';
5908
5774
  readonly 'workdir.recloneConfirm': '重新克隆';
5909
- readonly 'workdir.ahead': '未上传的本地提交';
5910
5775
  readonly 'workdir.remoteSnapshots': '远端快照数';
5911
5776
  readonly 'workdir.backlogAhead': '有本地提交还没上传到远端';
5912
5777
  readonly 'workdir.backlogNeverSynced': '本地领先,但远端从未收到过快照 —— 这条通道可能一直没在真正备份';
@@ -5916,7 +5781,6 @@ declare const zh$3: {
5916
5781
  readonly 'toast.workdirResetFailed': '重建工作副本失败';
5917
5782
  readonly 'syncStatus.lastSync': '上次同步';
5918
5783
  readonly 'syncStatus.sections': '可同步分区';
5919
- readonly 'syncStatus.state': '配置状态';
5920
5784
  readonly 'webdav.title': 'WebDAV 配置';
5921
5785
  readonly 'webdav.url': '服务器地址';
5922
5786
  readonly 'webdav.urlHint': 'WebDAV 服务器根地址(https://…)。同步快照与索引存放于该地址的 dsh-config-manager/ 子目录下。请勿在地址中包含用户名/密码。';
@@ -5935,21 +5799,17 @@ declare const zh$3: {
5935
5799
  readonly 'webdav.preset.synology': 'Synology NAS (WebDAV)';
5936
5800
  readonly 'webdav.preset.box': 'Box';
5937
5801
  readonly 'github.title': 'GitHub 登录';
5938
- readonly 'github.description': '通过 GitHub OAuth 设备码流程授权:无需手动输入 token,在浏览器中确认授权后,token 自动写入 DSH credentials。';
5939
- readonly 'github.login': '使用 GitHub 登录';
5940
- readonly 'github.retry': '重新登录';
5802
+ readonly 'github.description': '通过 GitHub OAuth 设备码流程授权:无需手动输入 token,在浏览器中确认授权后,token 自动写入 DSH credentials。授权范围是「整个账号」:GitHub OAuth App 无法收窄到单个仓库,组织仓库还需组织管理员批准。只想授权一个仓库 → 改用上方 token 字段填细粒度 PAT(Repository access 选 Only select repositories,Permissions → Contents 设为 Read and write;创建页 github.com/settings/personal-access-tokens/new)。';
5941
5803
  readonly 'github.cancel': '取消';
5942
5804
  readonly 'github.tokenInvalid': 'GitHub 登录已失效,请重新登录。';
5943
5805
  readonly 'github.userCode': '一次性授权代码';
5944
5806
  readonly 'github.openAuth': '打开 GitHub 授权页面';
5945
- readonly 'github.clientIdHint': '需要插件配置 githubClientId(GitHub OAuth App 的 client_id)才能使用 GitHub 登录。';
5946
5807
  readonly 'repoPicker.label': '从我的仓库中选择';
5947
- readonly 'repoPicker.hint': '列出你 GitHub 账号下**已有的私有仓库**(按最近更新排序),选中即填入下方仓库地址;也可以直接在下方手填地址(ssh / 本地路径 / 不在列表里的仓库)。列表需要先登录 GitHub;新建的仓库一律为私有 —— 公开仓库会公开你的配置内容。';
5808
+ readonly 'repoPicker.hint': '列出你 GitHub 账号下已有的私有仓库(按最近更新排序),选中即填入下方仓库地址;也可以直接在下方手填地址(ssh / 本地路径 / 不在列表里的仓库)。列表需要先登录 GitHub;新建的仓库一律为私有 —— 公开仓库会公开你的配置内容。';
5948
5809
  readonly 'repoPicker.placeholder': '手动填写地址(或从上方选择)';
5949
5810
  readonly 'repoPicker.refresh': '刷新列表';
5950
- readonly 'repoPicker.refreshing': '刷新中…';
5951
5811
  readonly 'repoPicker.forkBadge': 'Fork';
5952
- readonly 'repoPicker.empty': '没有可用的私有仓库,可选「新建私有仓库」。';
5812
+ readonly 'repoPicker.empty': '没有可用的私有仓库';
5953
5813
  readonly 'repoPicker.loadFailed': '仓库列表加载失败,可重试或直接手填地址。';
5954
5814
  readonly 'repoPicker.updatedAt': '更新于 {time}';
5955
5815
  readonly 'repoPicker.create': '+ 新建私有仓库…';
@@ -5959,25 +5819,13 @@ declare const zh$3: {
5959
5819
  readonly 'repoPicker.description': '描述';
5960
5820
  readonly 'repoPicker.descriptionPlaceholder': '可选,如「我的配置仓库(dsh-config-manager 自动发布)」';
5961
5821
  readonly 'repoPicker.createSubmit': '创建并选用';
5962
- readonly 'repoPicker.creating': '创建中…';
5963
5822
  readonly 'repoPicker.createCancel': '取消';
5964
5823
  readonly 'repoPicker.created': '已创建私有仓库 {name},地址已填入。';
5965
5824
  readonly 'repoPicker.createFailed': '新建仓库失败';
5966
5825
  readonly 'repoPicker.nameRequired': '请填写仓库名。';
5967
5826
  readonly 'repoPicker.nameInvalid': '仓库名只能包含字母、数字、点、下划线、连字符(最长 100 字符,不能以点开头)。';
5968
5827
  readonly 'repoPicker.privateOnly': '新建的仓库固定为私有:公开仓库会公开你的配置内容。';
5969
- readonly 'status.title': '同步状态';
5970
- readonly 'status.never': '从未同步';
5971
- readonly 'action.push': '推送到远端';
5972
- readonly 'action.pull': '拉取差异预览';
5973
- readonly 'action.pushing': '正在推送…';
5974
- readonly 'action.pulling': '正在拉取…';
5975
5828
  readonly 'push.title': '推送结果';
5976
- readonly 'pull.title': '拉取差异预览';
5977
- readonly 'pull.previewHint': '以上为只读差异预览,不会执行导入。当前版本暂不支持一键导入;如需应用远端配置,请使用「导入恢复」向导手动导入导出的备份。';
5978
- readonly 'pull.needsReview': '包含需要人工决策的项(冲突 / 密钥 / 依赖 / 安装)';
5979
- readonly 'pull.empty': '远端快照与本地一致(无变更)';
5980
- readonly 'change.total': '共 {total} 项变更';
5981
5829
  readonly 'sections.title': '同步分区';
5982
5830
  readonly 'warnings.title': '分区告警';
5983
5831
  readonly 'syncflow.title': '一键同步';
@@ -5989,7 +5837,6 @@ declare const zh$3: {
5989
5837
  readonly 'syncflow.snapshotOption': '({date} · {count} 分区)';
5990
5838
  readonly 'syncflow.selectSnapshot': '选择历史快照';
5991
5839
  readonly 'syncflow.refreshSnapshots': '刷新快照列表';
5992
- readonly 'syncflow.refreshingSnapshots': '正在获取…';
5993
5840
  readonly 'syncflow.latestSnapshot': '最新快照';
5994
5841
  readonly 'syncflow.noSnapshots': '远端暂无快照';
5995
5842
  readonly 'syncflow.confirmImport': '确认导入';
@@ -5998,17 +5845,13 @@ declare const zh$3: {
5998
5845
  readonly 'syncflow.adoptHint': '勾选 = 导入该项;取消 = 跳过';
5999
5846
  readonly 'syncflow.needsReviewBadge': '需人工决策';
6000
5847
  readonly 'syncflow.empty': '远端快照与本地一致(无变更)';
6001
- readonly 'syncflow.diffCount': '共 {count} 项差异';
6002
- readonly 'syncflow.listScope': '下面列表逐项确认 {review} 项;其余 {auto} 项按默认方式自动采用,无需逐条处理。';
5848
+ readonly 'syncflow.listScope': '列表逐项确认 {review} 项 · 其余 {auto} 项自动采用';
6003
5849
  readonly 'syncflow.keepLocalAll': '全部保留当前配置';
6004
5850
  readonly 'syncflow.useRemoteAll': '全部使用备份配置';
6005
- readonly 'syncflow.bulkHint': '批量决策作用于上面列表里的全部待确认项(冲突项一并决定去留);错误项需逐项处理。';
6006
- readonly 'syncflow.conflictTitle': '冲突解决';
5851
+ readonly 'syncflow.bulkHint': '批量作用于上面 {n} 项';
5852
+ readonly 'syncflow.bulkErrorNote': '错误项需逐项处理';
6007
5853
  readonly 'syncflow.conflictUseLocal': '保留当前';
6008
5854
  readonly 'syncflow.conflictUseRemote': '使用备份';
6009
- readonly 'syncflow.conflictLocalLabel': '当前';
6010
- readonly 'syncflow.conflictRemoteLabel': '备份';
6011
- readonly 'syncflow.conflictAncestorLabel': '共同祖先';
6012
5855
  readonly 'syncflow.conflictUnresolved': '冲突项 {itemId} 尚未选择解决方式(保留当前 / 使用备份)';
6013
5856
  readonly 'syncflow.diff': '差异';
6014
5857
  readonly 'syncflow.importDone': '已导入 {n} 个分区';
@@ -6016,7 +5859,6 @@ declare const zh$3: {
6016
5859
  readonly 'syncflow.importedSections': '已写入';
6017
5860
  readonly 'syncflow.importWarnings': '导入告警';
6018
5861
  readonly 'syncflow.rollback': '回滚到应用前';
6019
- readonly 'syncflow.rollingBack': '正在回滚…';
6020
5862
  readonly 'syncflow.rollbackDone': '已回滚到应用前';
6021
5863
  readonly 'syncflow.rollbackPartialToast': '回滚未完成:{n} 项没能恢复';
6022
5864
  readonly 'syncflow.rollbackIncomplete': '回滚未完成:{n} 项无法自动恢复(配置可能停留在中间状态)';
@@ -6028,11 +5870,11 @@ declare const zh$3: {
6028
5870
  readonly 'syncflow.pushChanged': '有改动';
6029
5871
  readonly 'syncflow.pushUnchanged': '无改动';
6030
5872
  readonly 'syncflow.pushConfirm': '确认推送';
6031
- readonly 'syncflow.pushing': '正在推送…';
6032
5873
  readonly 'syncflow.pushFirstBaseline': '远端暂无快照:本次将创建首个同步基线';
5874
+ readonly 'syncflow.remoteEmptyGuide': '远端还没有任何快照:这是首次同步,先点「推送到远端」把本机配置推上去(推送会创建第一个快照),之后才能拉取。';
6033
5875
  readonly 'mode.title': '同步分区';
6034
5876
  readonly 'mode.hint': '点按钮在弹窗里勾选要同步的分区:勾选集合就是同步范围(默认已勾选推荐分区,可随时改)。';
6035
- readonly 'mode.selectedCount': '已勾选 {n} 个分区';
5877
+ readonly 'mode.selectedCount': '已勾选 {n} 个';
6036
5878
  readonly 'mode.sectionsHint': '默认可同步的是可移植分区;平台相关分区(MCP 服务器)与设备相关分区(插件文件、凭据状态、历史会话)只有你在这里主动勾选才参与同步。';
6037
5879
  readonly 'mode.atLeastOne': '请至少勾选一个同步分区';
6038
5880
  readonly 'mode.sectionPortable': '可移植';
@@ -6050,7 +5892,7 @@ declare const zh$3: {
6050
5892
  readonly 'mode.sessionsWorkspaceWarn': '已勾选历史对话,但没有勾选「工作区」分区:目标机上这些对话可能归属不到任何工作区而显示不出来。建议一并勾选「工作区」。';
6051
5893
  readonly 'mode.gistSessionsWarn': '当前通道是 GitHub Gist,且勾选了「历史会话」:gist 会一次取回全部文件内容、单文件超限即截断、文件数还有上限,大分区同步可能失败或内容被截断。建议改用 Git / WebDAV / 对象存储通道同步历史会话,或取消勾选该分区。';
6052
5894
  readonly 'mode.persistHint': '分区选择已保存到本机:自动同步和手动推送都会使用此配置(重启后仍生效)。';
6053
- readonly 'mode.choose': '选择同步分区';
5895
+ readonly 'mode.choose': '选择…';
6054
5896
  readonly 'mode.pickerTitle': '选择同步分区';
6055
5897
  readonly 'mode.pickerHint': '改动即时生效并保存(关闭弹窗即完成)。';
6056
5898
  readonly 'mode.pickerBack': '返回分区列表';
@@ -6062,21 +5904,20 @@ declare const zh$3: {
6062
5904
  readonly 'mode.passwordConfirm': '确认密码';
6063
5905
  readonly 'mode.passwordMismatch': '两次输入的密码不一致';
6064
5906
  readonly 'mode.passwordRequired': '加密必须设置密码';
6065
- readonly 'mode.passwordSaved': '密码已保存到本机';
6066
5907
  readonly 'mode.passwordSavedHint': '本机已保存密码:留空即沿用,输入新密码会覆盖已保存的密码。';
6067
5908
  readonly 'mode.passwordPlaceholder': '已保存(留空即沿用)';
6068
- readonly 'mode.passwordClearNotice': '取消勾选「加密备份」会删除已保存的密码。';
5909
+ readonly 'mode.passwordClearNotice': '取消勾选会删除已保存的密码';
6069
5910
  readonly 'mode.includeSecrets': '导出密钥';
6070
5911
  readonly 'mode.includeSecretsHint': '把真实凭据值(~/.dsh/.credentials.yaml)写入加密快照,可在另一台机器上随同步一并写回本机凭据;勾选时自动选中加密,密钥绝不进入未加密快照。';
6071
5912
  readonly 'mode.encryptAutosyncNotice': '加密快照仅通过手动推送/拉取使用;自动同步无密码,遇到加密快照会跳过并在历史中提示。';
6072
5913
  readonly 'mode.decryptPassword': '解密密码(加密快照拉取/同步用,可选)';
6073
5914
  readonly 'mode.decryptPasswordHint': '输入后保存在本机凭据库,下次拉取自动使用;只有拉取的快照确实加密时才会用到 —— 未加密的备份不会使用密码。删除请点「删除已保存密码」。';
6074
- readonly 'mode.decryptPasswordSaved': '解密密码已保存到本机';
5915
+ readonly 'mode.decryptPasswordSaved': '已保存到本机';
6075
5916
  readonly 'mode.decryptPasswordPlaceholder': '已保存(留空即沿用)';
6076
5917
  readonly 'mode.clearSavedPassword': '删除已保存密码';
6077
5918
  readonly 'autosync.title': '自动同步';
6078
5919
  readonly 'autosync.description': '开启后,DSH 在后台保持配置一致:本地配置有改动时自动上传,检测到远端有新快照时才自动拉取合并;定时器仅作兜底轮询,无变化不重复动作。仅在无冲突且无需人工干预时才自动写入本地。';
6079
- readonly 'autosync.enable': '启用自动同步';
5920
+ readonly 'autosync.enable': '启用';
6080
5921
  readonly 'autosync.interval': '兜底轮询间隔';
6081
5922
  readonly 'autosync.intervalHint': '兜底检查节奏:间隔到点 / DSH 启动时检查远端是否有新快照,有才拉取合并。启用「本地改动即时同步」后,保存配置会立刻触发一轮,不必等这里。';
6082
5923
  readonly 'autosync.realtime': '本地改动即时同步';
@@ -6096,12 +5937,9 @@ declare const zh$3: {
6096
5937
  readonly 'autosync.interval6h': '6 小时';
6097
5938
  readonly 'autosync.interval12h': '12 小时';
6098
5939
  readonly 'autosync.interval24h': '24 小时';
6099
- readonly 'autosync.status': '上次运行:{status}({time})';
6100
5940
  readonly 'autosync.statusNever': '从未运行';
6101
5941
  readonly 'autosync.nextRun': '下次约 {time} 后';
6102
5942
  readonly 'autosync.due': '已到同步时间,即将执行';
6103
- readonly 'autosync.failCount': '连续失败 {n} 次';
6104
- readonly 'autosync.running': '自动同步进行中…';
6105
5943
  readonly 'autosync.success': '成功';
6106
5944
  readonly 'autosync.skipped': '已跳过';
6107
5945
  readonly 'autosync.failed': '失败';
@@ -6113,17 +5951,13 @@ declare const zh$3: {
6113
5951
  readonly 'history.empty': '尚无同步历史';
6114
5952
  readonly 'history.emptyHint': '完成首次 push / 一键同步 / 自动同步后,这里会显示记录。';
6115
5953
  readonly 'history.colTime': '时间';
6116
- readonly 'history.colKind': '类型';
6117
5954
  readonly 'history.colDetail': '详情';
6118
- readonly 'history.kindSnapshot': '快照';
6119
5955
  readonly 'history.kindAutosync': '自动同步';
6120
5956
  readonly 'history.sectionCount': '分区';
6121
5957
  readonly 'history.detail': '明细';
6122
- readonly 'history.autosyncDirection': '方向:{direction}';
6123
5958
  readonly 'history.autosyncPull': '下载';
6124
5959
  readonly 'history.autosyncPush': '上传';
6125
5960
  readonly 'history.autosyncBoth': '双向';
6126
- readonly 'history.autosyncSkipReason': '跳过原因:{reason}';
6127
5961
  readonly 'history.autosyncReasonConflict': '冲突';
6128
5962
  readonly 'history.autosyncReasonNoRemote': '无远端快照';
6129
5963
  readonly 'history.autosyncReasonNotConfigured': '未配置仓库';
@@ -6137,13 +5971,9 @@ declare const zh$3: {
6137
5971
  readonly 'history.autosyncConflicted': '跳过冲突分区:{sections}';
6138
5972
  readonly 'history.autosyncApplied': '应用分区:{sections}';
6139
5973
  readonly 'history.autosyncError': '错误:{error}';
6140
- readonly 'history.autosyncNotified': '已通知(连续失败 3 次)';
6141
- readonly 'history.column.snapshot': '快照';
6142
- readonly 'history.column.autosync': '自动同步';
6143
5974
  readonly 'history.channelGit': 'GitHub';
6144
5975
  readonly 'history.channelWebdav': 'WebDAV';
6145
5976
  readonly 'history.stats.total': '共 {count} 条';
6146
- readonly 'history.stats.snapshots': '快照 {count}';
6147
5977
  readonly 'history.stats.autosync': '自动同步 {count}';
6148
5978
  readonly 'history.stats.failed': '失败 {count}';
6149
5979
  readonly 'history.stats.skipped': '跳过 {count}';
@@ -6160,8 +5990,6 @@ declare const zh$3: {
6160
5990
  readonly 'toast.pushPreviewFailed': '推送预览失败';
6161
5991
  readonly 'toast.pushFailed': '推送失败';
6162
5992
  readonly 'toast.pushDone': '推送完成';
6163
- readonly 'toast.pullFailed': '拉取失败';
6164
- readonly 'toast.pullDone': '拉取完成';
6165
5993
  readonly 'toast.syncStartFailed': '一键同步失败';
6166
5994
  readonly 'toast.autosyncUpdateFailed': '自动同步设置更新失败';
6167
5995
  readonly 'toast.autosyncUpdated': '自动同步设置已更新';
@@ -6181,8 +6009,7 @@ declare const zh$3: {
6181
6009
  readonly 'syncflow.importPartialToast': '部分成功:{n} 项未生效,请查看结果明细';
6182
6010
  readonly 'syncflow.importPartial': '部分成功:{n} 项未生效(其余已写入,未整体回滚)';
6183
6011
  readonly 'syncflow.ineffectiveItems': '未生效项';
6184
- readonly 'history.remoteMovedHint': '远端快照已移至产物库';
6185
- readonly 'history.remoteMovedAction': '去看看';
6012
+ readonly 'history.remoteMovedAction': '在产物库查看远端快照';
6186
6013
  readonly 'syncflow.compat.excellent': '兼容性:优秀';
6187
6014
  readonly 'syncflow.compat.good': '兼容性:良好(备份来自更旧的 DSH)';
6188
6015
  readonly 'syncflow.compat.partial': '兼容性:部分兼容(跨平台 / 分区缺失 / 版本超前,需人工确认)';
@@ -6240,12 +6067,9 @@ declare const zh$3: {
6240
6067
  readonly 'cloud.credentialsWriteFailed': '密钥写入 DSH 凭据失败(配置未保存)';
6241
6068
  readonly 'merge.title': '远程合并';
6242
6069
  readonly 'merge.subtitle': '读取远端快照做三方合并(本地 / 远端 / 共同基准),列出需要你裁决的分区;预览阶段零写入。';
6243
- readonly 'merge.entry': '检查远程合并';
6244
- readonly 'merge.entryHint': '只读:先看远端与本地差在哪、哪些分区需要裁决。不会写任何内容。';
6245
6070
  readonly 'merge.loading': '正在读取远端快照并合并…';
6246
6071
  readonly 'merge.reload': '重新预览';
6247
6072
  readonly 'merge.empty': '没有需要合并的内容';
6248
- readonly 'merge.emptyHint': '远端与本地一致,或当前没有分区参与同步。';
6249
6073
  readonly 'merge.noAncestor': '没有共同基准快照:合并退化为两方比较,两侧不一致的分区一律按冲突处理,需要你逐个裁决。';
6250
6074
  readonly 'merge.summary.auto': '可自动应用';
6251
6075
  readonly 'merge.summary.review': '待裁决';
@@ -6253,7 +6077,6 @@ declare const zh$3: {
6253
6077
  readonly 'merge.summary.skipped': '无变化';
6254
6078
  readonly 'merge.section.title': '分区裁决';
6255
6079
  readonly 'merge.scopeNotice': '冲突按分区整体裁决(本版不做逐条裁决)。';
6256
- readonly 'merge.skipNotice': '跳过 ≠ 已解决:跳过的冲突不会推进同步基线,下次同步仍会出现。';
6257
6080
  readonly 'merge.decision.useRemote': '采用远端';
6258
6081
  readonly 'merge.decision.keepLocal': '保留本地';
6259
6082
  readonly 'merge.decision.merge': '自动合并';
@@ -6271,7 +6094,6 @@ declare const zh$3: {
6271
6094
  readonly 'merge.reason.section': '整个分区冲突';
6272
6095
  readonly 'merge.conflictCount': '{n} 处冲突';
6273
6096
  readonly 'merge.autoMergedCount': '已自动并入 {n} 处改动';
6274
- readonly 'merge.col.path': '冲突位置';
6275
6097
  readonly 'merge.col.local': '本地';
6276
6098
  readonly 'merge.col.remote': '远端';
6277
6099
  readonly 'merge.col.ancestor': '基准';
@@ -6279,24 +6101,15 @@ declare const zh$3: {
6279
6101
  readonly 'merge.action.useLocal': '采用本地';
6280
6102
  readonly 'merge.action.useRemote': '采用远端';
6281
6103
  readonly 'merge.action.useMerged': '采用自动合并';
6282
- readonly 'merge.action.useMergedDisabled': '该分区没有可用的自动合并结果(两侧改动重叠),只能采用一侧或跳过。';
6283
- readonly 'merge.action.skip': '跳过';
6284
6104
  readonly 'merge.action.current': '当前裁决';
6285
6105
  readonly 'merge.bulk.keepLocal': '全部采用本地';
6286
6106
  readonly 'merge.bulk.useRemote': '全部采用远端';
6287
6107
  readonly 'merge.bulk.useMerged': '全部采用自动合并';
6288
- readonly 'merge.bulk.autoOnly': '仅处理无冲突项';
6289
6108
  readonly 'merge.bulk.leavePending': '冲突留到下次';
6290
6109
  readonly 'merge.bulk.hint': '「全部采用自动合并」只对真有自动合并结果的分区生效;「冲突留到下次」把需要你裁决的分区全部移出本次操作(不写入、不推进基线),下次同步它们还会出现。';
6291
6110
  readonly 'merge.bulk.title': '批量';
6292
6111
  readonly 'merge.apply': '执行合并';
6293
- readonly 'merge.applying': '执行中…';
6294
- readonly 'merge.apply.nothing': '当前没有会产生写入的裁决:所有待裁决分区都停在「跳过」。';
6295
6112
  readonly 'merge.apply.summary': '已裁决 {decided} / 待裁决 {needs} 个分区';
6296
- readonly 'merge.apply.skips': '其中 {n} 个是「跳过」(不会推进同步基线)';
6297
- readonly 'merge.apply.undecided': '还有 {n} 个分区未裁决(未裁决不会被执行,等同跳过)。';
6298
- readonly 'merge.apply.pendingHint': '还有 {n} 个分区待裁决:本次不会应用它们,下次同步仍会出现。';
6299
- readonly 'merge.apply.nothingPending': '所有分区都没有变化,本次不需要执行合并。';
6300
6113
  readonly 'merge.apply.willApply': '本次会应用 {n} 个分区';
6301
6114
  readonly 'merge.result.title': '合并结果';
6302
6115
  readonly 'merge.result.applied': '已应用分区';
@@ -6305,10 +6118,8 @@ declare const zh$3: {
6305
6118
  readonly 'merge.result.restoreId': '回滚点';
6306
6119
  readonly 'merge.result.rolledBack': '已整体回滚';
6307
6120
  readonly 'merge.result.rollbackIncomplete': '整体回滚不完整:有项未恢复(见警告)';
6308
- readonly 'merge.result.none': '没有分区被改动';
6309
6121
  readonly 'merge.result.pending': '仍有 {n} 个分区待裁决(跳过 ≠ 已解决,下次同步仍会出现)';
6310
6122
  readonly 'merge.result.rollback': '一键回滚';
6311
- readonly 'merge.result.rollingBack': '回滚中…';
6312
6123
  readonly 'merge.result.rolledBackTo': '已回滚到 {id}';
6313
6124
  readonly 'merge.result.failed': '{n} 项失败';
6314
6125
  readonly 'merge.result.ineffective': '{n} 项未生效';
@@ -6318,12 +6129,10 @@ declare const zh$3: {
6318
6129
  readonly 'merge.toast.rollbackFailed': '回滚失败';
6319
6130
  readonly 'merge.toast.previewFailed': '读取远程合并预览失败';
6320
6131
  readonly 'probe.run': '测试连接';
6321
- readonly 'probe.running': '正在测试连接…';
6322
6132
  readonly 'probe.hint': '只读自检:凭据 / 端点 / 目标容器 / 目录可达。WebDAV 通道可能幂等创建上级目录(那正是它要修的故障);不会推送或改动任何快照。';
6323
6133
  readonly 'probe.createdCollections': '已在远端自动创建目录:{list}';
6324
6134
  readonly 'probe.snapshotCount': '远端现有快照:{count} 份';
6325
6135
  readonly 'probe.unsupported': '该通道不提供连通性自检';
6326
- readonly 'probe.unsupportedHint': '这是能力边界,不是故障:该通道的同步功能不受影响,只是没有自检这项能力。';
6327
6136
  readonly 'syncflow.snapshotDevice': '由 {device} 推送';
6328
6137
  };
6329
6138
  /** 字典键联合(注册处 compile-time 校验) */
@@ -6344,9 +6153,7 @@ declare const zh$2: {
6344
6153
  readonly 'section.description': '浏览并下载社区共享的配置(公开 Git 仓库;下载内容一律视为不可信,导入前必经校验与确认)';
6345
6154
  readonly 'config.title': '市场仓库';
6346
6155
  readonly 'config.refresh': '拉取最新';
6347
- readonly 'config.refreshing': '拉取中…';
6348
6156
  readonly 'config.refreshed': '已拉取最新市场目录';
6349
- readonly 'list.empty': '内置市场尚未加载。请先「拉取最新」。';
6350
6157
  readonly 'list.browse': '浏览';
6351
6158
  readonly 'list.browsed': '已重新浏览市场';
6352
6159
  readonly 'list.loading': '正在读取市场…';
@@ -6372,12 +6179,11 @@ declare const zh$2: {
6372
6179
  readonly 'list.cacheNone': '未缓存';
6373
6180
  readonly 'list.download': '查看详情';
6374
6181
  readonly 'detail.title': '条目详情';
6375
- readonly 'detail.downloadedAt': '下载时间:{time}';
6376
6182
  readonly 'detail.version': '版本 {version}';
6377
6183
  readonly 'detail.errors': '校验错误:';
6378
6184
  readonly 'detail.emptySections': '该条目未包含任何可导入分区';
6379
6185
  readonly 'detail.needReview': '需要人工确认';
6380
- readonly 'detail.previewHint': '以下为只读预览(不会改动任何设置)。确认导入将复用现有安全管道(快照 + 校验 + 失败回滚)。';
6186
+ readonly 'detail.previewHint': '只读预览,尚未改动本机';
6381
6187
  readonly 'detail.impact.willChange': '将变更 {count} 项';
6382
6188
  readonly 'detail.impact.unchanged': '已一致 {count} 项';
6383
6189
  readonly 'detail.impact.conflicts': '冲突 {count}';
@@ -6386,9 +6192,7 @@ declare const zh$2: {
6386
6192
  readonly 'detail.impact.restart': '需重启 DSH 生效';
6387
6193
  readonly 'detail.import': '确认导入';
6388
6194
  readonly 'detail.back': '返回列表';
6389
- readonly 'review.pickTitle': '选择要导入的内容';
6390
- readonly 'review.highRiskHint': '已勾选高风险分区({sections}):该条目来自公共仓库、未经官方审核,导入会在本机安装插件 / 写入文件 / 注入全局指令。导入前会创建可回滚快照。';
6391
- readonly 'review.changeTitle': '本次将改动的内容';
6195
+ readonly 'review.highRiskHint': '已勾选高风险分区({sections}):未经官方审核的公共仓库条目,会在本机安装插件 / 写入文件 / 注入全局指令。';
6392
6196
  readonly 'review.changeCount': '已选 {selected}/{total} 项';
6393
6197
  readonly 'review.changeWillChange': '将改动 {count} 项';
6394
6198
  readonly 'review.changeUnchanged': '已一致 {count} 项';
@@ -6396,12 +6200,10 @@ declare const zh$2: {
6396
6200
  readonly 'review.rowWillChange': '将改动';
6397
6201
  readonly 'review.rowUnchanged': '已一致';
6398
6202
  readonly 'review.rowExcluded': '不导入';
6399
- readonly 'review.conflictHint': '有 {count} 项冲突(本机已存在且内容不同)待决策;未决策项按「保留本机」处理,不会覆盖现有内容。';
6400
- readonly 'review.conflictOpen': '逐项决策';
6401
- readonly 'review.conflictClose': '收起决策';
6203
+ readonly 'review.conflictHint': '有 {count} 项冲突待决策;未决策项保留本机内容。';
6402
6204
  readonly 'review.nothingSelected': '未勾选任何内容,无法导入';
6403
6205
  readonly 'review.rollback': '回滚到导入前快照';
6404
- readonly 'review.rollbackHint': '把本机配置恢复到本次导入之前(快照由导入流程第一步创建)。';
6206
+ readonly 'review.rollbackHint': '把本机配置恢复到本次导入之前。';
6405
6207
  readonly 'review.snapshotMissing': '本次导入没有可用快照,无法回滚。';
6406
6208
  readonly 'review.rollbackConfirmTitle': '回滚到导入前快照?';
6407
6209
  readonly 'review.rollbackConfirmMessage': '将把本机配置恢复为「{item}」导入前的状态(快照 {id})。本次导入写入的内容会被覆盖。';
@@ -6428,29 +6230,22 @@ declare const zh$2: {
6428
6230
  readonly 'review.excludedCount': '已取消 {count} 项';
6429
6231
  readonly 'review.next': '下一步';
6430
6232
  readonly 'review.back': '上一步';
6431
- readonly 'review.nextSelect': '选择要导入的内容';
6432
- readonly 'review.confirmTitle': '确认将导入的内容';
6433
- readonly 'review.confirmHint': '点「确认导入」后引擎先创建可回滚快照,再按上面的勾选执行;未勾选的项不会写入。';
6434
- readonly 'review.resultTitle': '导入结果';
6233
+ readonly 'review.confirmHint': '导入前自动创建可回滚快照';
6435
6234
  readonly 'review.resultOk': '成功写入 {count} 项';
6436
6235
  readonly 'review.resultFailed': '失败 {count} 项';
6437
6236
  readonly 'review.reviewAgain': '返回重新选择';
6438
6237
  readonly 'import.done': '导入完成:{count} 项写入';
6439
6238
  readonly 'import.failed': '导入失败({count} 项失败)';
6440
6239
  readonly 'import.needsRestart': '部分改动需重启 DSH 后生效';
6441
- readonly 'detail.failed': '下载失败,请关闭弹窗后重试(详情见右下角提示)';
6240
+ readonly 'detail.failed': '下载失败,详情见右下角提示';
6442
6241
  readonly 'myconfigs.tab.browse': '浏览市场';
6443
6242
  readonly 'myconfigs.tab.myconfigs': '我的配置';
6444
- readonly 'myconfigs.back': '返回市场';
6445
- readonly 'myconfigs.login.title': 'GitHub 登录';
6446
6243
  readonly 'myconfigs.login.hint': '登录后即可一键上传配置到你的公开仓库(自动创建 <login>/dsh-configs)并提交官方市场收录(目标仓库固定,不可修改)。';
6447
6244
  readonly 'myconfigs.login.checking': '正在检查登录状态…';
6448
6245
  readonly 'myconfigs.login.loggedInAs': '已登录:{login}';
6449
6246
  readonly 'myconfigs.login.targetRepo': '收录目标(固定):{repo}';
6450
6247
  readonly 'myconfigs.login.repoMissing': '配置仓库尚未创建,首次上传将自动创建(公开)';
6451
6248
  readonly 'myconfigs.login.repoReady': '配置仓库:{repo}';
6452
- readonly 'myconfigs.login.start': '使用 GitHub 登录';
6453
- readonly 'myconfigs.login.relogin': '重新登录';
6454
6249
  readonly 'myconfigs.login.cancel': '取消登录';
6455
6250
  readonly 'myconfigs.login.userCode': '一次性代码:{code}';
6456
6251
  readonly 'myconfigs.login.openAuth': '打开授权页';
@@ -6458,28 +6253,23 @@ declare const zh$2: {
6458
6253
  readonly 'myconfigs.upload.selectHint': '选择导出的配置 zip(先在「导出」tab 生成备份文件,再回到这里选择)。市场通道永不携带秘密——包含密钥的备份将被拒绝。';
6459
6254
  readonly 'myconfigs.upload.select': '选择 ZIP…';
6460
6255
  readonly 'myconfigs.upload.reselect': '重新选择';
6461
- readonly 'myconfigs.upload.selected': '已选择:{name}';
6462
- readonly 'myconfigs.upload.validate': '开始校验';
6463
- readonly 'myconfigs.upload.validating': '校验中…';
6256
+ readonly 'myconfigs.upload.selected': '{name}';
6464
6257
  readonly 'myconfigs.upload.validateOk': '校验通过:内容合法、不含密钥';
6465
6258
  readonly 'myconfigs.upload.validateSecrets': '包含密钥:市场通道永不携带秘密,拒绝上传';
6466
6259
  readonly 'myconfigs.upload.validateInvalid': '内容校验未通过,无法上传';
6467
- readonly 'myconfigs.upload.form.title': '条目信息';
6468
6260
  readonly 'myconfigs.upload.form.name': '名称';
6469
6261
  readonly 'myconfigs.upload.form.nameHint': '预填 zip 文件名,可修改';
6470
6262
  readonly 'myconfigs.upload.form.description': '描述(可选)';
6471
6263
  readonly 'myconfigs.upload.form.categories': '类别(可选,逗号分隔)';
6472
- readonly 'myconfigs.upload.form.autoHint': '以下字段由系统自动生成:';
6264
+ readonly 'myconfigs.upload.form.autoTitle': '自动生成';
6473
6265
  readonly 'myconfigs.upload.mode.title': '发布模式';
6474
6266
  readonly 'myconfigs.upload.mode.migrate': '迁移(保留全部内容)';
6475
6267
  readonly 'myconfigs.upload.mode.share': '分享(自动排除敏感内容)';
6476
6268
  readonly 'myconfigs.upload.mode.shareHint': '分享模式将自动排除设备/平台相关分区(凭据状态 / 会话 / MCP / 工作区等),并对隐私内容强制拦截——发现任何敏感痕迹将拒绝发布,而不是仅警告。';
6477
6269
  readonly 'myconfigs.upload.run': '一键上传';
6478
- readonly 'myconfigs.upload.running': '上传中…';
6479
6270
  readonly 'myconfigs.update.title': '更新配置';
6480
- readonly 'myconfigs.update.hint': '版本将自动 +1,已预填原条目信息(名称可改)。';
6271
+ readonly 'myconfigs.update.hint': '版本自动 +1';
6481
6272
  readonly 'myconfigs.update.run': '一键更新';
6482
- readonly 'myconfigs.update.running': '更新中…';
6483
6273
  readonly 'myconfigs.update.zipHint': '更新需要新的配置包:选择新 zip 后自动校验,通过后即可一键更新。';
6484
6274
  readonly 'myconfigs.update.selectZip': '选择新 ZIP…';
6485
6275
  readonly 'myconfigs.result.title': '上传/更新完成';
@@ -6502,7 +6292,7 @@ declare const zh$2: {
6502
6292
  readonly 'myconfigs.item.update': '更新';
6503
6293
  readonly 'myconfigs.item.install': '装回本地';
6504
6294
  readonly 'myconfigs.item.openPr': '查看收录 PR';
6505
- readonly 'myconfigs.install.failed': '下载失败,请关闭弹窗后重试(详情见右下角提示)';
6295
+ readonly 'myconfigs.install.failed': '下载失败,详情见右下角提示';
6506
6296
  readonly 'myconfigs.delete.run': '删除';
6507
6297
  readonly 'myconfigs.delete.confirm': '确认删除';
6508
6298
  readonly 'myconfigs.delete.confirmTitle': '删除条目';
@@ -6516,7 +6306,6 @@ declare const zh$2: {
6516
6306
  readonly 'disclaimer.confirm': '我已了解,继续';
6517
6307
  readonly 'disclaimer.dontAsk': '不再提示(该操作以后不再显示免责声明)';
6518
6308
  readonly 'myconfigs.error.loadStatus': '登录状态读取失败';
6519
- readonly 'myconfigs.error.loadItems': '已上传列表读取失败';
6520
6309
  readonly 'common.cancel': '取消';
6521
6310
  readonly 'common.labelSeparator': ':';
6522
6311
  readonly 'common.close': '关闭';
@@ -6546,17 +6335,14 @@ declare const zh$1: {
6546
6335
  readonly 'view.recovery': '恢复';
6547
6336
  readonly 'recovery.banner': '配置修改已被保护:存在未完成的恢复事项。请先处理后继续。';
6548
6337
  readonly 'recovery.bannerAction': '去处理';
6549
- readonly 'recovery.required': '需要恢复';
6550
- readonly 'recovery.requiredHint': '存在需要处理的恢复事项(残留锁、未完成的操作或中断的复制)。处理完这些事项即恢复正常。';
6338
+ readonly 'recovery.requiredHint': '有需要处理的恢复事项';
6551
6339
  readonly 'recovery.rollbackRecommended': '建议回滚';
6552
6340
  readonly 'recovery.rollbackContinue': '续跑回滚';
6553
- readonly 'recovery.inProgress': '恢复进行中';
6554
6341
  readonly 'recovery.verified': '已验证';
6555
6342
  readonly 'recovery.partialMatch': '部分匹配';
6556
6343
  readonly 'recovery.mismatch': '不匹配';
6557
6344
  readonly 'recovery.verificationError': '验证错误';
6558
6345
  readonly 'recovery.needsAttention': '需要人工处理';
6559
- readonly 'recovery.manualActionRequired': '需要人工处理';
6560
6346
  readonly 'recovery.incident.title': '发生了什么';
6561
6347
  readonly 'recovery.incident.operationId': '操作 ID';
6562
6348
  readonly 'recovery.incident.operationType': '操作类型';
@@ -6572,20 +6358,16 @@ declare const zh$1: {
6572
6358
  readonly 'recovery.incident.state.unknown': '未知';
6573
6359
  readonly 'recovery.decision.unknown': '未知';
6574
6360
  readonly 'recovery.verify.verdict.unknown': '未知';
6575
- readonly 'recovery.currentState.title': '当前状态';
6576
6361
  readonly 'recovery.currentState.safeMode': '已进入安全模式(会修改配置的操作已暂停)';
6577
6362
  readonly 'recovery.currentState.itemsOnly': '存在需要处理的恢复事项(写操作未被暂停)';
6578
6363
  readonly 'recovery.live.title': '正在执行的操作';
6579
- readonly 'recovery.live.hint': '这些操作正在正常执行中,不是未完成的恢复事项;结束后会自动消失。';
6580
6364
  readonly 'recovery.incident.liveBlocked': '该操作仍在进行中,现在不能恢复也不能放弃,请等它结束。';
6581
6365
  readonly 'recovery.incident.blockReason.noSnapshot': '本次操作没有绑定可信恢复快照,因此无法执行恢复。';
6582
6366
  readonly 'recovery.incident.blockReason.needsAttention': '该事项被判定为需要人工处理,无法自动恢复。';
6583
6367
  readonly 'recovery.currentState.hasSnapshot': '存在可信恢复快照';
6584
6368
  readonly 'recovery.currentState.noSnapshot': '无可信恢复快照';
6585
6369
  readonly 'recovery.snapshot.title': '恢复快照';
6586
- readonly 'recovery.snapshot.id': '快照 ID';
6587
6370
  readonly 'recovery.snapshot.createdAt': '快照时间';
6588
- readonly 'recovery.snapshot.operationType': '快照操作';
6589
6371
  readonly 'recovery.snapshot.verdict': '快照校验';
6590
6372
  readonly 'recovery.snapshot.verdict.trusted': '可信(与本次操作绑定)';
6591
6373
  readonly 'recovery.snapshot.verdict.manual': '手动/本地快照(本次操作外)';
@@ -6601,10 +6383,6 @@ declare const zh$1: {
6601
6383
  readonly 'recovery.preview.title': '恢复预览';
6602
6384
  readonly 'recovery.preview.hint': '以下为只读预览(零写入)。确认后才会执行恢复。';
6603
6385
  readonly 'recovery.preview.loading': '正在生成预览…';
6604
- readonly 'recovery.preview.empty': '该操作无可用恢复动作(或全部跳过)。';
6605
- readonly 'recovery.preview.action': '动作';
6606
- readonly 'recovery.preview.detail': '说明';
6607
- readonly 'recovery.preview.summary': '将执行 {count} 个动作';
6608
6386
  readonly 'recovery.confirm.title': '确认恢复';
6609
6387
  readonly 'recovery.confirm.message': '恢复/回滚是危险操作。确认执行?系统会先把当前文件备份到一个安全位置。';
6610
6388
  readonly 'recovery.confirm.rollbackContinue': '继续完成刚才中断的撤销(已完成的部分会自动跳过,不重复执行)。';
@@ -6614,35 +6392,18 @@ declare const zh$1: {
6614
6392
  readonly 'recovery.execute': '执行恢复';
6615
6393
  readonly 'recovery.executing': '恢复执行中…';
6616
6394
  readonly 'recovery.retry': '重试';
6617
- readonly 'recovery.retrying': '重试中…';
6618
- readonly 'recovery.verify': '验证';
6619
- readonly 'recovery.verifying': '验证中…';
6620
6395
  readonly 'recovery.dismiss': '放弃恢复';
6621
- readonly 'recovery.dismissing': '放弃中…';
6622
- readonly 'recovery.continue': '续跑';
6623
6396
  readonly 'recovery.verify.title': '验证结果';
6624
- readonly 'recovery.verify.details': '检查明细';
6625
6397
  readonly 'recovery.verify.manualHints': '需人工处理';
6626
- readonly 'recovery.verify.verdict.match': '验证通过:目标状态与可信快照匹配';
6627
- readonly 'recovery.verify.verdict.partial': '验证通过(部分匹配):核心状态匹配,但存在无法自动验证的项';
6628
- readonly 'recovery.verify.verdict.mismatch': '验证失败:目标状态与可信快照不匹配,恢复未完成';
6629
- readonly 'recovery.verify.verdict.error': '验证错误:无法可靠完成验证,恢复未完成';
6630
6398
  readonly 'recovery.verify.terminal.rolledBack': '已回滚';
6631
6399
  readonly 'recovery.verify.terminal.recovered': '已恢复';
6632
6400
  readonly 'recovery.verify.terminal.needsAttention': '需要人工处理';
6633
6401
  readonly 'recovery.completed': '恢复完成';
6634
- readonly 'recovery.completed.rolledBack': '已回滚并验证通过';
6635
- readonly 'recovery.completed.recovered': '已恢复并验证通过';
6636
- readonly 'recovery.needsAttention.title': '需要人工处理';
6637
- readonly 'recovery.needsAttention.hint': '恢复未能完成或验证失败。请查看原因,可重试或放弃。';
6638
6402
  readonly 'recovery.empty': '暂无需要处理的恢复事项。';
6639
6403
  readonly 'recovery.loading': '正在检查恢复状态…';
6640
- readonly 'recovery.error': '恢复状态加载失败';
6641
- readonly 'recovery.actionError': '操作失败';
6642
- readonly 'recovery.running': '恢复任务进行中';
6643
6404
  readonly 'recovery.runningHint': '恢复/回滚正在执行,请勿关闭页面。';
6644
6405
  readonly 'recovery.lock.title': '残留配置锁';
6645
- readonly 'recovery.lock.detailStale': '检测到上次异常退出的配置锁(其持有进程已不存在)。该锁不会自动清除:重试或重启 DSH 都不会恢复,必须在此显式回收,回收后所有操作立即恢复。';
6406
+ readonly 'recovery.lock.detailStale': '上次异常退出留下的配置锁(持有进程已不存在)。重启 DSH 不会自动清除,必须在此回收;回收后写操作立即恢复。';
6646
6407
  readonly 'recovery.lock.detailUnknown': '配置锁状态无法可靠判定(可能是崩溃残留)。回收前会再次确认其持有进程确已不存在;无法确认时不会删除任何内容。';
6647
6408
  readonly 'recovery.lock.action': '回收残留锁';
6648
6409
  readonly 'recovery.lock.busy': '正在回收…';
@@ -6652,23 +6413,22 @@ declare const zh$1: {
6652
6413
  readonly 'recovery.lock.confirmMessage': '将再次确认该锁的持有进程确已不存在,然后原子移除这把锁。若无法确认(例如锁仍被活跃进程持有),操作会被拒绝且不做任何改动。';
6653
6414
  readonly 'recovery.crash.title': '上次启动未正常完成';
6654
6415
  readonly 'recovery.crash.lastGood': '最后正常状态:{time}';
6655
- readonly 'recovery.crash.guidance': '处置建议:进入救援模式让 DSH 先起来,随后到「备份文件」用最近一次备份恢复。';
6656
6416
  readonly 'recovery.crash.reason.session-corrupt': '会话文件损坏';
6657
6417
  readonly 'recovery.crash.reason.bundle-check': '插件 bundle 无法解析';
6658
6418
  readonly 'recovery.crash.reason.patch-tree': '插件加载失败(挂载树冲突)';
6659
6419
  readonly 'recovery.crash.reason.unknown': '原因未知';
6660
6420
  readonly 'recovery.crash.advice.none': '本模块没有额外建议动作。';
6661
- readonly 'recovery.crash.advice.restore-last-good': '建议回到最后正常状态(灾备快照已下线,改用最近一次备份恢复)。';
6662
- readonly 'recovery.crash.advice.repair-session': '建议先用会话扫描修复损坏的会话文件。';
6663
- readonly 'recovery.crash.advice.check-bundles': '建议进入救援模式,或检查 package.json 的 dsh.profile.bundles。';
6664
- readonly 'recovery.crash.advice.check-patch-tree': '建议进入救援模式禁用插件后逐个排查。';
6421
+ readonly 'recovery.crash.advice.restore-last-good': '用最近一次备份恢复到该状态';
6422
+ readonly 'recovery.crash.advice.repair-session': '先修复损坏的会话文件(下方「需要处理的会话」)';
6423
+ readonly 'recovery.crash.advice.check-bundles': '进入救援模式,或检查 package.json 的 dsh.profile.bundles';
6424
+ readonly 'recovery.crash.advice.check-patch-tree': '进入救援模式后逐个禁用插件排查';
6665
6425
  readonly 'recovery.rescue.title': '救援模式';
6666
6426
  readonly 'recovery.rescue.desc': 'DSH 因插件起不来时,把插件挂载收窄到「DSH 核心 + 本插件」:改写两层 cordis.patch.yml,并把 dsh.profile.bundles 里的其它用户插件临时移出。不卸载任何包,退出时从备份完整还原。';
6667
6427
  readonly 'recovery.rescue.inactive': '救援模式未开启';
6668
6428
  readonly 'recovery.rescue.activeBadge': '已开启';
6669
6429
  readonly 'recovery.rescue.active': '救援模式已开启({time})—— 请重启 DSH 使其生效。';
6670
6430
  readonly 'recovery.rescue.applied': '救援模式已开启({time})—— 本次启动只挂载了 DSH 核心与本插件。';
6671
- readonly 'recovery.rescue.appliedHint': '其它用户插件本次未加载;退出救援模式后同样需要重启 DSH 才会恢复。';
6431
+ readonly 'recovery.rescue.appliedHint': '其它插件本次未加载;退出后同样需重启 DSH。';
6672
6432
  readonly 'recovery.rescue.restartHint': '操作后需要重启 DSH 才能生效。';
6673
6433
  readonly 'recovery.rescue.enter': '进入救援模式';
6674
6434
  readonly 'recovery.rescue.exit': '退出救援模式';
@@ -6696,12 +6456,12 @@ declare const zh$1: {
6696
6456
  readonly 'sessions.section.attention': '需要处理的会话';
6697
6457
  readonly 'sessions.section.attentionNone': '列表里没有需要处理的会话。';
6698
6458
  readonly 'sessions.issues.more': '还有 {count} 条';
6699
- readonly 'sessions.hidden.healthyShort': '另有 {count} 条正常会话(已隐藏)';
6459
+ readonly 'sessions.hidden.healthyShort': '正常已隐藏 {count}';
6700
6460
  readonly 'sessions.repair.availableShort': '可应用内修复 {count} 条';
6701
6461
  readonly 'sessions.repair.noneShort': '本次没有可应用内修复的会话。';
6702
- readonly 'sessions.unverified': '已做深度校验 {verified} 条,未做深度校验 {count} 条(未验证 ≠ 没问题)';
6703
- readonly 'sessions.untested': '另有 {count} 条超出扫描上限,本次未体检。';
6704
- readonly 'sessions.unreadableEntries': '有 {count} 个目录/文件读不出来(已如实计入,未当作正常)。';
6462
+ readonly 'sessions.unverified': '未深校验 {count} · 已深校验 {verified}';
6463
+ readonly 'sessions.untested': '超上限未体检 {count}';
6464
+ readonly 'sessions.unreadableEntries': '读不出 {count}';
6705
6465
  readonly 'sessions.issue.duplicateId': '同一会话 id 出现在多个工作区';
6706
6466
  readonly 'sessions.issue.locationMismatch': '日志位置与所属工作区不一致';
6707
6467
  readonly 'sessions.issue.headerUnreadable': '会话头读不出来';
@@ -6729,7 +6489,7 @@ declare const zh$1: {
6729
6489
  readonly 'sessions.severity.unloadable': '会话不可加载';
6730
6490
  readonly 'sessions.subagent': '子代理';
6731
6491
  readonly 'sessions.blank': '新会话';
6732
- readonly 'sessions.truncated': '列表已截断:还有 {count} 条未显示(重新体检或按需缩小范围)。';
6492
+ readonly 'sessions.truncated': '还有 {count} 条未显示';
6733
6493
  readonly 'sessions.repair.title': '怎么修';
6734
6494
  readonly 'sessions.repair.desc': '容器非法 / header 不可读 / 格式超前这类应用内不动的问题,先在终端预览再落盘;需要写入时建议先关闭 DSH。';
6735
6495
  readonly 'sessions.repair.copy': '复制命令';
@@ -6744,7 +6504,9 @@ declare const zh$1: {
6744
6504
  readonly 'sessions.repair.none': '本次没有可应用内修复的会话。应用内可修:重放重复行 / 可证明的合成收尾块(零损失)、seq 空洞与不可解析行(截断,有损,需确认);其余问题见下方离线命令。';
6745
6505
  readonly 'common.close': '关闭';
6746
6506
  readonly 'sessions.dialog.open': '打开会话体检';
6747
- readonly 'sessions.dialog.lastScan': '上次扫描:共 {total} 条,需处理 {issues} 条,本机修复记录 {repairs} 条。';
6507
+ readonly 'sessions.dialog.lastScan.total': '共 {count} 条';
6508
+ readonly 'sessions.dialog.lastScan.issues': '需处理 {count} 条';
6509
+ readonly 'sessions.dialog.lastScan.repairs': '修复记录 {count} 条';
6748
6510
  readonly 'sessions.repair.action': '修复';
6749
6511
  readonly 'sessions.repair.available': '有 {count} 条会话可应用内修复;点行内「修复」先看计划,或用右上角「一键修复全部」按顺序处理。';
6750
6512
  readonly 'sessions.repair.repairAll': '一键修复全部({count})';
@@ -6753,14 +6515,13 @@ declare const zh$1: {
6753
6515
  readonly 'sessions.repair.batch.failed': '未修复';
6754
6516
  readonly 'sessions.repair.batch.dropped': '丢弃 {rows} 行';
6755
6517
  readonly 'sessions.repair.batch.transportError': '请求失败:{message}';
6756
- readonly 'sessions.hidden.healthy': '另有 {count} 条会话正常,已按「只显示有问题的对话」隐藏。';
6757
6518
  readonly 'sessions.repair.actionLossless': '零损失';
6758
6519
  readonly 'sessions.repair.actionLossy': '有损';
6759
6520
  readonly 'sessions.repair.applyLossy': '截断并修复';
6760
6521
  readonly 'sessions.repair.plan.lossy': '这个计划含有损动作:截断点之后的事件会被丢弃(无法从日志里恢复,但备份可以一键回滚)。确认后再点「截断并修复」。';
6761
6522
  readonly 'sessions.repair.plan.title': '修复计划:{session}';
6762
- readonly 'sessions.repair.plan.summary': '将丢弃 {rows} 行重放重复事件({before} → {after});其余字节原样保留。';
6763
- readonly 'sessions.repair.plan.backup': '写入前会自动时间戳备份;应用后可在下方「修复记录」里一键回滚。';
6523
+ readonly 'sessions.repair.plan.summary': '丢弃 {rows} 行重复事件 · {before} → {after}';
6524
+ readonly 'sessions.repair.plan.backup': '写入前自动备份,可在「修复记录」里回滚';
6764
6525
  readonly 'sessions.repair.apply': '确认修复';
6765
6526
  readonly 'sessions.repair.applied': '已修复:丢弃 {rows} 行重复事件';
6766
6527
  readonly 'sessions.repair.rolledBack': '已回滚到修复前的内容';
@@ -6827,10 +6588,11 @@ declare const zh$1: {
6827
6588
  readonly 'rollback.apiMissing': '当前宿主没有回滚点能力(插件版本过旧):界面不假装可用';
6828
6589
  readonly 'rollback.switch.label': '启用回合自动留点';
6829
6590
  readonly 'rollback.switch.hint': '关闭后不再订阅会话事件、不再写台账,聊天里的「↺ 回退」入口一并收起;已有回滚点仍可查看、回退与清理。';
6830
- readonly 'rollback.switch.unknown': '正在读取开关状态(还没读到之前不显示成「已关闭」)。';
6831
- readonly 'rollback.switch.diverged': '磁盘上的偏好是「开启」,但本进程没有启用留点(通常是被另一个 DSH 实例改过)。重新打开一次开关即可让本进程生效。';
6591
+ readonly 'rollback.switch.reading': '读取中…';
6592
+ readonly 'rollback.switch.diverged': '磁盘已开启,本进程未生效';
6593
+ readonly 'rollback.switch.apply': '立即生效';
6832
6594
  readonly 'rollback.ledger.summary': '台账 {records} 个点 · {size}';
6833
- readonly 'rollback.ledger.budget': '字节预算 {budget},已按预算淘汰 {evicted} 个最旧自动点';
6595
+ readonly 'rollback.ledger.budget': '已按字节预算({budget})淘汰 {evicted} 个自动点';
6834
6596
  readonly 'rollback.ledger.overBudget': '台账已到 {size},超过 {budget} 的字节预算,但已经没有可自动淘汰的点了(通常是单个回滚点本身大于预算)—— 再增长请手动清理。';
6835
6597
  readonly 'rollback.cleanup': '清理台账';
6836
6598
  readonly 'rollback.cleanup.confirmTitle': '清理回滚点台账';
@@ -6838,7 +6600,6 @@ declare const zh$1: {
6838
6600
  readonly 'rollback.cleanup.includeGuards': '同时删除救援点(回退前的自动救援点,删了不可撤销)';
6839
6601
  readonly 'rollback.cleanup.done': '已删除 {records} 个回滚点,释放 {size}';
6840
6602
  readonly 'rollback.cleanup.none': '没有可删除的回滚点(自动点为空)';
6841
- readonly 'rollback.switch.saveFailed': '开关保存失败,仍按原状态运行:';
6842
6603
  readonly 'rollback.retention.hint': '自动点:每会话最多 {perSession} 个、全局最多 {total} 个,超出只淘汰最旧的自动点。回退前的救援点不占这两个额度、也不被它们淘汰,但用户删不掉,所以另有自己的两道上限:每会话最多 {guardsPerSession} 个、全局最多 {guards} 个(无论按哪道算,超出都淘汰最旧的救援点)。';
6843
6604
  readonly 'rollback.autopoint.hint': '回滚点由每个回合结束时自动留:工作区快照 + 会话游标(没有「手动拍点」入口)。';
6844
6605
  readonly 'rollback.state.workspace': '工作区';
@@ -6922,7 +6683,6 @@ declare const zh$1: {
6922
6683
  readonly 'rollback.preview.different': '其中 {n} 项内容不同';
6923
6684
  readonly 'rollback.preview.missing': '{n} 项当前已不存在(会被重新创建)';
6924
6685
  readonly 'rollback.preview.createdAfter': '{n} 项在留点时并不存在(留点之后新建;回退只会删除其中通过安全判据的)';
6925
- readonly 'rollback.preview.removalsTitle': '回退会删除的文件';
6926
6686
  readonly 'rollback.preview.notice.skipped': '{n} 项在留点时被跳过(未记录;已计入证明名单 ⇒ 不参与删除判据)';
6927
6687
  readonly 'rollback.preview.notice.truncated': '该点捕获被上限截断(超单文件上限 / 字节预算 / 文件数预算);删除判据另看证明名单(路径索引)是否完整';
6928
6688
  readonly 'rollback.preview.files.title': '将被回退的文件:';
@@ -6945,27 +6705,26 @@ declare const zh$1: {
6945
6705
  /** 整文件删除(用户 2026-10-12 第 6 条):写「删除」而不是 `+0 −N` —— 那是两件事。 */
6946
6706
  readonly 'rollback.preview.file.deleted': '删除';
6947
6707
  readonly 'rollback.preview.file.skipped': '不会改动(与其它对话的改动冲突,或无法安全合并)';
6948
- readonly 'rollback.diff.merged': '下面是合并后的结果:撤销本对话的改动、保留其它对话的改动';
6949
- readonly 'rollback.diff.skipped': '这次回退不会改动它(与其它对话的改动冲突,或无法安全合并)';
6708
+ readonly 'rollback.diff.merged': '合并结果:撤销本对话的改动,保留其它对话的改动';
6709
+ readonly 'rollback.diff.skipped': '回退不改动:与其它对话的改动冲突或无法安全合并';
6950
6710
  readonly 'rollback.preview.file.unknown': '行数未统计';
6951
6711
  readonly 'rollback.preview.file.unknownHint': '这些文件的行数没有统计出来(文件过大、不是文本或内容副本读不出来)—— 回退仍会照常覆盖它们。';
6952
6712
  readonly 'rollback.diff.viewHint': '查看差异:{path}';
6953
6713
  readonly 'rollback.diff.loading': '正在读取差异…';
6954
6714
  readonly 'rollback.diff.before': '当前';
6955
6715
  readonly 'rollback.diff.after': '回退后';
6956
- readonly 'rollback.diff.identical': '该文件与回退点内容一致,回退不会改动它';
6957
- readonly 'rollback.diff.degraded': '差异规模较大,已按整块替换展示(仍是完整结果,只是不是最小的编辑脚本)';
6716
+ readonly 'rollback.diff.identical': '与回退点一致,回退不改动它';
6717
+ readonly 'rollback.diff.degraded': '差异较大:按整块替换展示(结果完整,但不是最小编辑)';
6958
6718
  readonly 'rollback.diff.reason.missingBlob': '这份内容副本读不出来,无法逐行对照(回退仍会尝试写回它)';
6959
6719
  readonly 'rollback.diff.reason.binary': '不是文本文件,没有逐行差异可看';
6960
6720
  readonly 'rollback.diff.reason.tooLarge': '文件超过展示上限,没有逐行差异可看(回退仍会照常覆盖它)';
6961
6721
  readonly 'rollback.diff.reason.unreadable': '当前文件读不出来(权限不足,或它不是普通文件),无法逐行对照';
6962
- readonly 'rollback.diff.reason.unknown': '无法逐行对照,原因未知(宿主没有给出原因)';
6722
+ readonly 'rollback.diff.reason.unknown': '无法逐行对照:宿主未给出原因';
6963
6723
  readonly 'rollback.diff.failed': '差异读取失败';
6964
6724
  readonly 'rollback.preview.result.noop': '工作区与该回退点一致,无需恢复';
6965
6725
  readonly 'rollback.preview.result.noRecord': '该回退点没有可用的记录(原因:{reason}),无需恢复';
6966
6726
  readonly 'rollback.preview.result.noFiles': '该回退点没有记录任何文件,无需恢复';
6967
6727
  readonly 'rollback.preview.result.code': 'code:{code}';
6968
- readonly 'rollback.preview.warningsTitle': '该点的告警';
6969
6728
  readonly 'rollback.preview.cursorBytes': '会话日志 {now} → {target} 字节';
6970
6729
  readonly 'rollback.group.label': '会话:{session}';
6971
6730
  readonly 'rollback.group.count': '{n} 个回滚点';
@@ -6989,8 +6748,7 @@ declare const zh$1: {
6989
6748
  readonly 'rollback.guard.warn': '回退前留救援点(留不下记告警后继续)';
6990
6749
  readonly 'rollback.guard.off': '跳过回退前救援点';
6991
6750
  readonly 'rollback.guard.unknown': '未知的救援点策略';
6992
- readonly 'rollback.rewind.result.title': '回退结果';
6993
- readonly 'rollback.rewind.result.counts': '恢复 {restored} 项 / 删除 {removed} 项 / 失败 {failed} 项 / 留点时并不存在(之后新建)的共 {leftovers} 项';
6751
+ readonly 'rollback.rewind.result.counts': '恢复 {restored} 项 · 删除 {removed} 项 · 失败 {failed} 项 · 留点之后新建 {leftovers} 项';
6994
6752
  readonly 'rollback.rewind.result.child': '已回到该消息之前(当前对话:{id})';
6995
6753
  readonly 'rollback.rewind.archive.done': '原会话已收进「已归档」(需要时可在那儿恢复)';
6996
6754
  readonly 'rollback.rewind.freshSession': '这是这条对话的第一条消息之前:已为你新建一条空会话(这条消息的文字可从上面那条气泡复制)';
@@ -7022,31 +6780,31 @@ declare const zh$1: {
7022
6780
  readonly 'recovery.incomplete.dir': '目录:{dir}';
7023
6781
  readonly 'recovery.incomplete.delete': '删除残留';
7024
6782
  readonly 'recovery.incomplete.deleteConfirm': '我确认:物理删除该残留目录(不可恢复)';
7025
- readonly 'recovery.incomplete.locked': '安全模式正在阻断写操作,删除未执行:{reason}';
6783
+ readonly 'recovery.incomplete.locked': '安全模式阻断写操作,未执行删除:{reason}';
7026
6784
  readonly 'recovery.incomplete.unlock': '解除安全模式';
7027
6785
  readonly 'recovery.incomplete.unreadable.title': '未能读取残留列表';
7028
6786
  readonly 'recovery.incomplete.unreadable.hint': '本次枚举残留目录失败 —— 这不等于「没有残留」。请确认档案目录可读后重试。';
7029
6787
  readonly 'sessions.layout.title': '会话布局归位(写动作)';
7030
6788
  readonly 'sessions.layout.desc': '修复「会让 DSH 起不来」的两类问题:会话目录与首帧 cwd 不一致时把会话搬回正确位置(只搬目录,不改写首帧),以及同一会话 id 出现在多个目录时只保留你选定的那一份、其余移入隔离目录(可人工找回)。';
7031
- readonly 'sessions.layout.runtimeNote': '本入口在 DSH 运行时执行 —— 与离线 CLI 的「须先停 DSH」不同:靠门前置(SAFE MODE / 无 session.lock / 不在写入静止期)+ 每次移动后刷新会话索引 + 失败逐条回滚;索引刷新能力缺失时一条也不执行。';
7032
- readonly 'sessions.layout.quarantineNote': '重复 id 必须由你选定保留哪一份;其余副本移入隔离目录(.cm-repair-quarantine-*,可人工找回),本入口不删除任何会话。';
6789
+ readonly 'sessions.layout.runtimeNote': '在 DSH 运行时直接改盘(离线 CLI 要求先停 DSH);索引刷新不可用时一条也不执行。';
6790
+ readonly 'sessions.layout.quarantineNote': '其余副本移入隔离目录(.cm-repair-quarantine-*,可人工找回);本入口不删除任何会话。';
7033
6791
  readonly 'sessions.layout.preview': '预览计划';
7034
6792
  readonly 'sessions.layout.previewing': '预览中…';
7035
6793
  readonly 'sessions.layout.planEmpty': '计划里没有需要执行的动作。';
7036
6794
  readonly 'sessions.layout.apiMissing': '当前接口不支持布局归位(缺少 layoutRepairSessions);请更新插件后重试 —— 本机未做任何改动。';
7037
6795
  readonly 'sessions.layout.planTitle': '布局归位计划(只读,尚未改动任何文件)';
7038
6796
  readonly 'sessions.layout.planReadOnly': '计划只读:确认前零写入。';
7039
- readonly 'sessions.layout.noCandidates': '本机没有「布局归位 / 重复 id 隔离」这一档的问题会话:扫描结果里既没有需要归位的目录,也没有重复 id。';
7040
- readonly 'sessions.layout.summary': '将归位 {move} 条、隔离 {quarantine} 条';
7041
- readonly 'sessions.layout.planSkipped': '另有 {count} 条只报告(缺 cwd / 会话被锁 / 多份 generation 的 cwd 不一致)—— 本入口不动它们。';
7042
- readonly 'sessions.layout.onlyReported': '只报告(不执行)';
6797
+ readonly 'sessions.layout.noCandidates': '本机没有需要归位或隔离的会话。';
6798
+ readonly 'sessions.layout.summary': '归位 {move} · 隔离 {quarantine}';
6799
+ readonly 'sessions.layout.planSkipped': '只报告 {count} 条';
6800
+ readonly 'sessions.layout.onlyReported': '只报告';
7043
6801
  readonly 'sessions.layout.keepTitle': '重复 id:请选定保留哪一份';
7044
6802
  readonly 'sessions.layout.keepHint': '选中的那一份本轮不动;其余副本移入隔离目录。未选定之前不能执行。';
7045
- readonly 'sessions.layout.keepMissing': '还有 {count} 个重复 id 未选定保留哪一份。';
6803
+ readonly 'sessions.layout.keepMissing': '还有 {count} 个未选定';
7046
6804
  readonly 'sessions.layout.apply': '执行布局归位';
7047
6805
  readonly 'sessions.layout.applying': '执行中…';
7048
6806
  readonly 'sessions.layout.resultTitle': '布局归位结果';
7049
- readonly 'sessions.layout.done': '归位 {moved} 条、隔离 {quarantined} 条;失败 {failed} 条、只报告 {skipped} 条。';
6807
+ readonly 'sessions.layout.done': '归位 {moved} · 隔离 {quarantined} · 失败 {failed} · 只报告 {skipped}';
7050
6808
  readonly 'sessions.layout.refreshHint': '执行后会重新扫描列表;失败项已逐条尝试回滚(回滚失败的项会单独标红,绝不显示为已复原),可重试或改用离线 CLI。';
7051
6809
  readonly 'sessions.layout.close': '关闭';
7052
6810
  readonly 'sessions.layout.kind.ok': '位置已正确';
@@ -7089,7 +6847,7 @@ declare const zh$1: {
7089
6847
  type RecoveryKey = keyof typeof zh$1;
7090
6848
  type KindKey = `history.kind.${MigrationKind}`;
7091
6849
  type ResultKey = `history.result.${MigrationResult}`;
7092
- type CommonKey = 'view.history' | 'history.title' | 'history.subtitle' | 'history.empty' | 'history.loading' | 'history.corruptedBanner' | 'history.corruptedCount' | 'history.stats.total' | 'history.stats.success' | 'history.stats.failed' | 'history.stats.skipped' | 'history.filter.kind' | 'history.filter.result' | 'history.filter.recent' | 'history.filter.recent.all' | 'history.filter.recent.50' | 'history.filter.recent.200' | 'history.filter.sections' | 'history.filter.title' | 'history.search.placeholder' | 'history.export.json' | 'history.export.markdown' | 'history.exported' | 'history.exporting' | 'history.exportError' | 'history.loadError' | 'history.reload' | 'history.table.time' | 'history.table.kind' | 'history.table.result' | 'history.table.sections' | 'history.table.summary' | 'history.updatedAt' | 'history.refresh' | 'history.refreshError' |
6850
+ type CommonKey = 'history.subtitle' | 'history.empty' | 'history.loading' | 'history.corruptedBanner' | 'history.corruptedCount' | 'history.stats.total' | 'history.stats.success' | 'history.stats.failed' | 'history.stats.skipped' | 'history.filter.kind' | 'history.filter.result' | 'history.filter.recent' | 'history.filter.recent.all' | 'history.filter.recent.50' | 'history.filter.recent.200' | 'history.search.placeholder' | 'history.export.json' | 'history.export.markdown' | 'history.exported' | 'history.exporting' | 'history.exportError' | 'history.refresh' | 'history.refreshError' |
7093
6851
  /** ⓘ 说明按钮的可访问名(与主字典 / market / sync / recovery 同口径,见 info-hint-guard t6-4) */
7094
6852
  'common.infoHint';
7095
6853
  type HistoryKey = KindKey | ResultKey | CommonKey;
@@ -7150,13 +6908,9 @@ declare const zh: {
7150
6908
  * 这里是**数字**,数字留、句子走。
7151
6909
  */
7152
6910
  readonly 'chat.preview.scope.files': '{n} 个文件';
7153
- readonly 'chat.preview.scope.added': '+{n}';
7154
- readonly 'chat.preview.scope.removed': '−{n}';
7155
- readonly 'chat.preview.scope.deleted': '{n} 项删除';
7156
6911
  /** 取消勾选(只退对话)时的汇总:数字与用户无关,改写一句「文件不动」;清单仍在下面、且不再变半透明 */
7157
6912
  readonly 'chat.preview.scope.off': '只回退对话,文件不改动';
7158
6913
  /** 文件行上悬停出现的「查看」(在看得到的前提下才出现:没有侧栏能力时换成下面那句) */
7159
- readonly 'chat.preview.view': '查看';
7160
6914
  /** 「查看」= 名字本身:无障碍名必须带**这个文件**的全路径(列表里同名按钮一屏好几个) */
7161
6915
  readonly 'chat.preview.viewHint': '查看差异:{path}';
7162
6916
  /** 没有右侧栏能力(旧 DSH / 侧栏服务缺失)→ 如实降级为弹窗内展示,不假装打开过 */