dsh-config-manager 0.1.71 → 0.1.73

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 (596) hide show
  1. package/README.md +149 -98
  2. package/README.zh-CN.md +245 -88
  3. package/lib/adapters/agent-instructions.js +1 -1
  4. package/lib/adapters/file-collection.js +1 -1
  5. package/lib/adapters/index.d.ts +2 -1
  6. package/lib/adapters/index.js +6 -1
  7. package/lib/adapters/link-report.d.ts +1 -0
  8. package/lib/adapters/link-report.js +27 -3
  9. package/lib/adapters/messages.d.ts +21 -0
  10. package/lib/adapters/messages.js +57 -0
  11. package/lib/adapters/plugin-data.d.ts +114 -0
  12. package/lib/adapters/plugin-data.js +309 -0
  13. package/lib/adapters/plugin-files.js +3 -2
  14. package/lib/adapters/plugins.js +4 -3
  15. package/lib/adapters/prompts.d.ts +1 -0
  16. package/lib/adapters/prompts.js +7 -1
  17. package/lib/adapters/self.d.ts +8 -2
  18. package/lib/adapters/self.js +3 -2
  19. package/lib/adapters/sessions.d.ts +1 -0
  20. package/lib/adapters/sessions.js +4 -2
  21. package/lib/adapters/test-helpers.d.ts +9 -0
  22. package/lib/adapters/test-helpers.js +14 -0
  23. package/lib/adapters/ui.d.ts +2 -2
  24. package/lib/adapters/ui.js +25 -25
  25. package/lib/adapters/workspaces.d.ts +1 -0
  26. package/lib/adapters/workspaces.js +7 -3
  27. package/lib/cli/actions.d.ts +9 -1
  28. package/lib/cli/actions.js +5 -2
  29. package/lib/cli/help.js +23 -10
  30. package/lib/cli/index.d.ts +23 -0
  31. package/lib/cli/index.js +90 -32
  32. package/lib/cli/sessions-inspect.js +3 -1
  33. package/lib/cli/sessions-repair.js +25 -6
  34. package/lib/cli/web/page.d.ts +12 -0
  35. package/lib/cli/web/page.js +21 -12
  36. package/lib/cli/web/routes.js +2 -2
  37. package/lib/cli/web/server.js +4 -4
  38. package/lib/client.d.ts +1442 -494
  39. package/lib/client.js +15326 -8520
  40. package/lib/core/analyzer.d.ts +11 -2
  41. package/lib/core/analyzer.js +31 -8
  42. package/lib/core/backup-plan.d.ts +10 -0
  43. package/lib/core/backup-plan.js +51 -20
  44. package/lib/core/backup-verify.js +24 -23
  45. package/lib/core/backup.d.ts +25 -1
  46. package/lib/core/backup.js +99 -28
  47. package/lib/core/boot-rescue.js +4 -3
  48. package/lib/core/boot-safety.js +2 -1
  49. package/lib/core/command-rollback.d.ts +182 -0
  50. package/lib/core/command-rollback.js +293 -0
  51. package/lib/core/consult-source.js +7 -6
  52. package/lib/core/disk-usage.d.ts +74 -10
  53. package/lib/core/disk-usage.js +67 -4
  54. package/lib/core/engine-locale.d.ts +87 -0
  55. package/lib/core/engine-locale.js +125 -0
  56. package/lib/core/exporter.js +3 -3
  57. package/lib/core/fork-reconcile.d.ts +128 -0
  58. package/lib/core/fork-reconcile.js +150 -0
  59. package/lib/core/journal.js +6 -5
  60. package/lib/core/local-plugin-host.js +3 -2
  61. package/lib/core/local-plugin-pack.js +11 -6
  62. package/lib/core/messages-core.d.ts +294 -0
  63. package/lib/core/messages-core.js +619 -0
  64. package/lib/core/messages.d.ts +61 -2
  65. package/lib/core/messages.js +118 -13
  66. package/lib/core/migration-consult.js +21 -20
  67. package/lib/core/migration-history.js +19 -5
  68. package/lib/core/model-tools.d.ts +0 -22
  69. package/lib/core/model-tools.js +50 -27
  70. package/lib/core/phase3-host.js +30 -5
  71. package/lib/core/plugin-cli.js +18 -19
  72. package/lib/core/plugin-data-registry.d.ts +124 -0
  73. package/lib/core/plugin-data-registry.js +198 -0
  74. package/lib/core/reconcile.d.ts +2 -14
  75. package/lib/core/reconcile.js +87 -17
  76. package/lib/core/recovery-orchestrator.js +19 -18
  77. package/lib/core/reinstall.d.ts +4 -0
  78. package/lib/core/reinstall.js +26 -21
  79. package/lib/core/restore.js +20 -17
  80. package/lib/core/rollback-gate.d.ts +33 -0
  81. package/lib/core/rollback-gate.js +57 -0
  82. package/lib/core/rollback-ignore-rules.d.ts +31 -0
  83. package/lib/core/rollback-ignore-rules.js +140 -0
  84. package/lib/core/rollback-ledger.d.ts +248 -0
  85. package/lib/core/rollback-ledger.js +1282 -0
  86. package/lib/core/rollback-point.d.ts +1391 -0
  87. package/lib/core/rollback-point.js +3503 -0
  88. package/lib/core/rollback.js +6 -4
  89. package/lib/core/run-registry.js +6 -5
  90. package/lib/core/session-health.d.ts +15 -0
  91. package/lib/core/session-meta.d.ts +42 -2
  92. package/lib/core/session-meta.js +140 -1
  93. package/lib/core/session-title.d.ts +28 -0
  94. package/lib/core/session-title.js +185 -0
  95. package/lib/core/startup-barrier.d.ts +24 -0
  96. package/lib/core/startup-barrier.js +22 -0
  97. package/lib/core/transaction-coordinator.js +4 -3
  98. package/lib/core/types.d.ts +37 -1
  99. package/lib/core/validator.js +5 -4
  100. package/lib/core/verify-recovery.js +31 -30
  101. package/lib/foreign/bundle.js +3 -2
  102. package/lib/foreign/continue.js +2 -1
  103. package/lib/foreign/crush.js +2 -1
  104. package/lib/foreign/gemini.js +2 -1
  105. package/lib/foreign/goose.js +2 -1
  106. package/lib/foreign/kilocode.js +2 -1
  107. package/lib/foreign/kimi.js +2 -1
  108. package/lib/foreign/messages.d.ts +15 -0
  109. package/lib/foreign/messages.js +40 -0
  110. package/lib/foreign/mimocode.js +2 -1
  111. package/lib/foreign/openclaw.js +2 -1
  112. package/lib/foreign/opencode.js +2 -1
  113. package/lib/foreign/pi.js +2 -1
  114. package/lib/foreign/qoder.js +2 -1
  115. package/lib/foreign/qwen.js +2 -1
  116. package/lib/foreign/registry.d.ts +1 -1
  117. package/lib/foreign/registry.js +8 -7
  118. package/lib/foreign/teleagent.js +2 -1
  119. package/lib/foreign/workbuddy.js +2 -1
  120. package/lib/foreign/zcode.js +2 -1
  121. package/lib/foreign/zed.js +2 -1
  122. package/lib/index.d.ts +227 -7
  123. package/lib/index.js +799 -54
  124. package/lib/market/git-file-writer.js +20 -19
  125. package/lib/market/github-repos.js +35 -19
  126. package/lib/market/index-parser.js +31 -30
  127. package/lib/market/messages-market.d.ts +138 -0
  128. package/lib/market/messages-market.js +305 -0
  129. package/lib/market/my-repo.d.ts +2 -2
  130. package/lib/market/my-repo.js +32 -29
  131. package/lib/market/prepare.js +18 -15
  132. package/lib/market/security.js +20 -19
  133. package/lib/market/types.js +2 -1
  134. package/lib/market/url.js +2 -1
  135. package/lib/migrations/index.js +6 -5
  136. package/lib/migrations/messages-migrations.d.ts +32 -0
  137. package/lib/migrations/messages-migrations.js +58 -0
  138. package/lib/profiles/dsh-profile-launcher.js +2 -1
  139. package/lib/profiles/dsh-profile-runtime.js +2 -1
  140. package/lib/profiles/messages.d.ts +7 -0
  141. package/lib/profiles/messages.js +27 -0
  142. package/lib/routes/backup.js +18 -2
  143. package/lib/routes/import.js +3 -3
  144. package/lib/routes/index.d.ts +1 -1
  145. package/lib/routes/kit.d.ts +3 -2
  146. package/lib/routes/kit.js +6 -1
  147. package/lib/routes/market.js +1 -1
  148. package/lib/routes/messages.d.ts +43 -0
  149. package/lib/routes/messages.js +102 -0
  150. package/lib/routes/prefs.js +26 -3
  151. package/lib/routes/profiles.js +12 -6
  152. package/lib/routes/recovery.d.ts +21 -0
  153. package/lib/routes/recovery.js +478 -94
  154. package/lib/routes/snapshots.js +51 -4
  155. package/lib/routes/sync.js +79 -17
  156. package/lib/schema/config.d.ts +11 -1
  157. package/lib/schema/config.js +52 -20
  158. package/lib/schema/index.d.ts +8 -6
  159. package/lib/schema/index.js +8 -6
  160. package/lib/schema/manifest.js +19 -18
  161. package/lib/schema/messages.d.ts +47 -0
  162. package/lib/schema/messages.js +110 -0
  163. package/lib/schema/section-registry.d.ts +42 -15
  164. package/lib/schema/section-registry.js +67 -32
  165. package/lib/schema/types.d.ts +1 -1
  166. package/lib/schema/versions.js +6 -5
  167. package/lib/security/encryption.js +16 -15
  168. package/lib/security/integrity.js +8 -7
  169. package/lib/security/messages.d.ts +30 -0
  170. package/lib/security/messages.js +77 -0
  171. package/lib/security/redaction.js +12 -0
  172. package/lib/security/secret-scanner.js +16 -13
  173. package/lib/security/vault.js +2 -1
  174. package/lib/security/zip-security.js +4 -3
  175. package/lib/sync/ancestor.js +2 -1
  176. package/lib/sync/autosync-config.d.ts +11 -0
  177. package/lib/sync/autosync-config.js +12 -0
  178. package/lib/sync/autosync-scheduler.d.ts +11 -1
  179. package/lib/sync/autosync-scheduler.js +115 -76
  180. package/lib/sync/backup-files.js +3 -2
  181. package/lib/sync/backup-scheduler.js +6 -5
  182. package/lib/sync/blob-store.js +2 -1
  183. package/lib/sync/git/git-transport.d.ts +55 -0
  184. package/lib/sync/git/git-transport.js +152 -2
  185. package/lib/sync/github-auth.js +10 -9
  186. package/lib/sync/layout.js +13 -12
  187. package/lib/sync/messages.d.ts +63 -0
  188. package/lib/sync/messages.js +149 -0
  189. package/lib/sync/review-queue.js +6 -5
  190. package/lib/sync/s3/messages.d.ts +7 -0
  191. package/lib/sync/s3/messages.js +16 -0
  192. package/lib/sync/s3/s3-providers.d.ts +4 -1
  193. package/lib/sync/s3/s3-providers.js +5 -5
  194. package/lib/sync/s3/s3-transport.js +1 -1
  195. package/lib/sync/s3/sigv4.js +2 -1
  196. package/lib/sync/snapshot-crypto.js +6 -5
  197. package/lib/sync/snapshot-json.js +3 -2
  198. package/lib/sync/sync-engine.d.ts +58 -22
  199. package/lib/sync/sync-engine.js +119 -48
  200. package/lib/sync/sync-history.js +7 -6
  201. package/lib/sync/sync-selection.d.ts +15 -4
  202. package/lib/sync/sync-selection.js +17 -5
  203. package/lib/sync/ui-prefs.d.ts +22 -0
  204. package/lib/sync/ui-prefs.js +28 -0
  205. package/lib/sync/webdav/webdav-transport.d.ts +1 -0
  206. package/lib/sync/webdav/webdav-transport.js +4 -1
  207. package/lib/ui/artifact-view.js +4 -3
  208. package/lib/ui/commands.d.ts +1 -1
  209. package/lib/ui/commands.js +10 -0
  210. package/lib/ui/diff-view.d.ts +10 -0
  211. package/lib/ui/diff-view.js +17 -0
  212. package/lib/ui/disk-usage-view.d.ts +33 -4
  213. package/lib/ui/disk-usage-view.js +29 -1
  214. package/lib/ui/errors.d.ts +1 -1
  215. package/lib/ui/errors.js +4 -3
  216. package/lib/ui/export-flow.js +26 -20
  217. package/lib/ui/foreign-view.d.ts +5 -1
  218. package/lib/ui/foreign-view.js +26 -2
  219. package/lib/ui/i18n.d.ts +68 -1
  220. package/lib/ui/i18n.js +120 -2
  221. package/lib/ui/import-wizard.d.ts +7 -0
  222. package/lib/ui/import-wizard.js +13 -10
  223. package/lib/ui/progress.d.ts +2 -2
  224. package/lib/ui/progress.js +1 -2
  225. package/lib/ui/report.d.ts +5 -5
  226. package/lib/ui/report.js +6 -6
  227. package/lib/ui/rollback-view.d.ts +815 -0
  228. package/lib/ui/rollback-view.js +738 -0
  229. package/lib/ui/selection-model.d.ts +41 -0
  230. package/lib/ui/selection-model.js +30 -0
  231. package/lib/ui/session-inventory-view.d.ts +97 -3
  232. package/lib/ui/session-inventory-view.js +76 -2
  233. package/lib/ui/session-issue-labels.d.ts +43 -0
  234. package/lib/ui/session-issue-labels.js +48 -0
  235. package/lib/ui/sync-settings-view.d.ts +33 -0
  236. package/lib/ui/sync-settings-view.js +40 -0
  237. package/lib/ui/test-helpers.js +2 -1
  238. package/lib/ui/types.d.ts +8 -3
  239. package/lib/ui/types.js +1 -1
  240. package/lib/utils/atomic-write.js +6 -5
  241. package/lib/utils/bundle-scan.d.ts +11 -1
  242. package/lib/utils/bundle-scan.js +12 -1
  243. package/lib/utils/env-lock.d.ts +10 -0
  244. package/lib/utils/env-lock.js +73 -46
  245. package/lib/utils/json.js +6 -5
  246. package/lib/utils/messages-utils.d.ts +96 -0
  247. package/lib/utils/messages-utils.js +216 -0
  248. package/lib/utils/proxy.js +18 -5
  249. package/lib/utils/recursive-walk.d.ts +22 -0
  250. package/lib/utils/recursive-walk.js +75 -1
  251. package/lib/utils/session-log-repair.js +10 -9
  252. package/lib/utils/zip.js +27 -26
  253. package/package.json +12 -2
  254. package/src/adapters/agent-instructions.ts +1 -1
  255. package/src/adapters/file-collection.test.ts +1 -0
  256. package/src/adapters/file-collection.ts +1 -1
  257. package/src/adapters/files.test.ts +27 -0
  258. package/src/adapters/index.ts +6 -1
  259. package/src/adapters/link-report.test.ts +22 -2
  260. package/src/adapters/link-report.ts +29 -4
  261. package/src/adapters/messages.ts +61 -0
  262. package/src/adapters/plugin-data.test.ts +225 -0
  263. package/src/adapters/plugin-data.ts +351 -0
  264. package/src/adapters/plugin-files.ts +3 -2
  265. package/src/adapters/plugins.ts +4 -3
  266. package/src/adapters/prompts.ts +7 -1
  267. package/src/adapters/self.test.ts +26 -0
  268. package/src/adapters/self.ts +10 -3
  269. package/src/adapters/sessions.ts +4 -2
  270. package/src/adapters/settings.test.ts +38 -1
  271. package/src/adapters/test-helpers.ts +15 -0
  272. package/src/adapters/ui.test.ts +2 -2
  273. package/src/adapters/ui.ts +27 -26
  274. package/src/adapters/workspaces.ts +7 -3
  275. package/src/cli/actions.test.ts +28 -0
  276. package/src/cli/actions.ts +11 -2
  277. package/src/cli/help.ts +23 -10
  278. package/src/cli/index-guards.test.ts +193 -0
  279. package/src/cli/index.ts +106 -31
  280. package/src/cli/sessions-inspect.test.ts +15 -1
  281. package/src/cli/sessions-inspect.ts +3 -1
  282. package/src/cli/sessions-repair.test.ts +84 -0
  283. package/src/cli/sessions-repair.ts +33 -7
  284. package/src/cli/web/console-route-parity.test.ts +115 -0
  285. package/src/cli/web/page.ts +23 -12
  286. package/src/cli/web/routes.ts +2 -1
  287. package/src/cli/web/server.ts +4 -4
  288. package/src/cli/web/web.test.ts +2 -2
  289. package/src/client/ConfigManagerSection.tsx +30 -2
  290. package/src/client/about/AboutPanel.tsx +2 -2
  291. package/src/client/about/PluginUpdateDialog.tsx +1 -1
  292. package/src/client/about/ReleaseNotesDialog.tsx +2 -2
  293. package/src/client/about/about-view.test.ts +13 -3
  294. package/src/client/about/about-view.ts +10 -6
  295. package/src/client/about/release-notes-view.test.ts +14 -4
  296. package/src/client/about/release-notes-view.ts +4 -2
  297. package/src/client/api.ts +18 -6
  298. package/src/client/chat/ChatEntryView.tsx +411 -0
  299. package/src/client/chat/RollbackDiffTab.tsx +108 -0
  300. package/src/client/chat/RollbackFileIcon.tsx +96 -0
  301. package/src/client/chat/RollbackReviewDialog.tsx +607 -0
  302. package/src/client/chat/chat-entry-view.test.ts +1174 -0
  303. package/src/client/chat/chat-entry-view.ts +758 -0
  304. package/src/client/chat/chat-locales.ts +152 -0
  305. package/src/client/chat/chat-node-registration.ts +64 -0
  306. package/src/client/chat/chat-point-window.ts +183 -0
  307. package/src/client/chat/chat-slots.ts +107 -0
  308. package/src/client/chat/rollback-diff-tab.test.ts +105 -0
  309. package/src/client/chat/rollback-diff-tab.ts +174 -0
  310. package/src/client/chat/rollback-entry-view.test.ts +1469 -0
  311. package/src/client/chat/rollback-entry-view.ts +946 -0
  312. package/src/client/chat/sidebar-slots.ts +59 -0
  313. package/src/client/common/ConfirmDialog.tsx +7 -3
  314. package/src/client/common/ContentPicker.tsx +48 -10
  315. package/src/client/common/DiffTable.tsx +133 -0
  316. package/src/client/common/ErrorBanner.tsx +4 -4
  317. package/src/client/common/Icon.tsx +2 -0
  318. package/src/client/common/Modal.tsx +8 -1
  319. package/src/client/common/ProgressBar.tsx +8 -2
  320. package/src/client/common/ReportView.tsx +4 -4
  321. package/src/client/common/RunsCenter.tsx +1 -0
  322. package/src/client/common/client-route-parity.test.ts +84 -0
  323. package/src/client/common/info-hint-guard.test.ts +46 -13
  324. package/src/client/common/picker-lazy-units.test.ts +42 -0
  325. package/src/client/common/plan-text-redaction.test.ts +17 -6
  326. package/src/client/common/progress-view-edge.test.ts +8 -7
  327. package/src/client/common/progress-view.test.ts +9 -9
  328. package/src/client/common/progress-view.ts +2 -2
  329. package/src/client/common/routes.ts +38 -0
  330. package/src/client/common/section-labels.test.ts +1 -0
  331. package/src/client/common/section-labels.ts +2 -0
  332. package/src/client/common/ui.tsx +73 -10
  333. package/src/client/config-manager.module.css +1109 -31
  334. package/src/client/css-scale-guard.test.ts +30 -0
  335. package/src/client/environment/EnvironmentPanel.tsx +11 -4
  336. package/src/client/environment/maintenance/DiskUsageCard.tsx +23 -2
  337. package/src/client/export/ExportView.tsx +13 -8
  338. package/src/client/history/HistoryPanel.tsx +4 -3
  339. package/src/client/history/history-api.ts +2 -2
  340. package/src/client/history/history-locales.ts +5 -1
  341. package/src/client/home/HomePanel.tsx +29 -8
  342. package/src/client/import/ForeignImportView.tsx +4 -5
  343. package/src/client/import/ImportWizardView.tsx +5 -3
  344. package/src/client/import/import-wizard-split.test.ts +3 -1
  345. package/src/client/import/import-wizard-steps.tsx +9 -9
  346. package/src/client/index.ts +232 -3
  347. package/src/client/library/LibraryActions.tsx +32 -7
  348. package/src/client/library/LibraryPanel.tsx +23 -3
  349. package/src/client/library/RestorePlanView.tsx +9 -66
  350. package/src/client/locales.ts +62 -9
  351. package/src/client/lucide-icons.d.ts +1 -0
  352. package/src/client/market/MarketPanel.tsx +13 -2
  353. package/src/client/market/MyConfigsView.tsx +5 -4
  354. package/src/client/market/MyConfigsWizard.tsx +10 -8
  355. package/src/client/market/market-api.test.ts +9 -8
  356. package/src/client/market/market-api.ts +2 -2
  357. package/src/client/market/market-locales.ts +3 -0
  358. package/src/client/market/market-view.test.ts +6 -6
  359. package/src/client/market/market-view.ts +3 -3
  360. package/src/client/market/my-configs-api.ts +2 -2
  361. package/src/client/market/my-configs-view.test.ts +23 -22
  362. package/src/client/market/my-configs-view.ts +8 -8
  363. package/src/client/recovery/IncompleteCopiesSection.tsx +2 -1
  364. package/src/client/recovery/RecoveryPanel.tsx +442 -283
  365. package/src/client/recovery/RollbackCard.tsx +859 -0
  366. package/src/client/recovery/RollbackDiffPane.tsx +69 -0
  367. package/src/client/recovery/RollbackFileChanges.tsx +163 -0
  368. package/src/client/recovery/incident-api.ts +2 -2
  369. package/src/client/recovery/recovery-api.ts +144 -6
  370. package/src/client/recovery/recovery-locales.test.ts +299 -0
  371. package/src/client/recovery/recovery-locales.ts +520 -149
  372. package/src/client/recovery/recovery-panel-layout.test.ts +132 -2
  373. package/src/client/recovery/rollback-enabled.ts +41 -0
  374. package/src/client/recovery/rollback-file-changes.test.ts +114 -0
  375. package/src/client/recovery/session-dialog-mount.test.ts +54 -0
  376. package/src/client/run-store.ts +84 -21
  377. package/src/client/sync/AutosyncCard.tsx +25 -1
  378. package/src/client/sync/ChannelClearConfirmDialog.tsx +6 -3
  379. package/src/client/sync/ChannelConfigDialog.tsx +10 -10
  380. package/src/client/sync/DecryptPasswordCard.tsx +2 -2
  381. package/src/client/sync/SecurityOptionsCard.tsx +27 -17
  382. package/src/client/sync/SyncChannelEntryCard.tsx +14 -2
  383. package/src/client/sync/SyncConfirmView.tsx +46 -8
  384. package/src/client/sync/SyncLogList.tsx +1 -1
  385. package/src/client/sync/SyncPanel.tsx +31 -23
  386. package/src/client/sync/SyncRepositoryPicker.tsx +3 -5
  387. package/src/client/sync/SyncSectionPickerDialog.tsx +11 -2
  388. package/src/client/sync/SyncSettingsView.test.ts +20 -1
  389. package/src/client/sync/UnreadableSnapshotsBanner.tsx +1 -1
  390. package/src/client/sync/WorkDirCard.tsx +112 -0
  391. package/src/client/sync/history-model.test.ts +42 -9
  392. package/src/client/sync/history-model.ts +30 -15
  393. package/src/client/sync/sync-api.test.ts +57 -33
  394. package/src/client/sync/sync-api.ts +80 -6
  395. package/src/client/sync/sync-locales.ts +104 -3
  396. package/src/client/sync/sync-view-v2.test.ts +65 -13
  397. package/src/client/sync/sync-view.test.ts +107 -52
  398. package/src/client/sync/sync-view.ts +124 -41
  399. package/src/core/analyzer.ts +31 -9
  400. package/src/core/backup-plan.test.ts +48 -5
  401. package/src/core/backup-plan.ts +51 -20
  402. package/src/core/backup-verify.ts +24 -23
  403. package/src/core/backup.test.ts +76 -0
  404. package/src/core/backup.ts +105 -29
  405. package/src/core/boot-rescue.ts +4 -3
  406. package/src/core/boot-safety.ts +2 -1
  407. package/src/core/command-rollback.test.ts +536 -0
  408. package/src/core/command-rollback.ts +406 -0
  409. package/src/core/consult-source.ts +7 -6
  410. package/src/core/disk-usage.test.ts +257 -1
  411. package/src/core/disk-usage.ts +134 -14
  412. package/src/core/engine-locale.test.ts +593 -0
  413. package/src/core/engine-locale.ts +175 -0
  414. package/src/core/exporter.ts +3 -3
  415. package/src/core/fork-reconcile.test.ts +279 -0
  416. package/src/core/fork-reconcile.ts +234 -0
  417. package/src/core/journal.ts +6 -5
  418. package/src/core/local-plugin-host.ts +3 -2
  419. package/src/core/local-plugin-pack.ts +11 -6
  420. package/src/core/messages-core.ts +661 -0
  421. package/src/core/messages.ts +125 -17
  422. package/src/core/migration-consult.ts +21 -20
  423. package/src/core/migration-history.ts +19 -5
  424. package/src/core/model-tools.ts +28 -27
  425. package/src/core/phase3-host.ts +21 -5
  426. package/src/core/phase3-p2b-fingerprint.test.ts +22 -0
  427. package/src/core/plugin-cli.ts +18 -19
  428. package/src/core/plugin-data-registry.test.ts +113 -0
  429. package/src/core/plugin-data-registry.ts +261 -0
  430. package/src/core/reconcile.test.ts +117 -0
  431. package/src/core/reconcile.ts +85 -17
  432. package/src/core/recovery-orchestrator.ts +19 -18
  433. package/src/core/reinstall.ts +26 -21
  434. package/src/core/restore.ts +20 -17
  435. package/src/core/rollback-file-diff.test.ts +159 -0
  436. package/src/core/rollback-gate.test.ts +66 -0
  437. package/src/core/rollback-gate.ts +61 -0
  438. package/src/core/rollback-ignore-rules.ts +126 -0
  439. package/src/core/rollback-ledger.test.ts +655 -0
  440. package/src/core/rollback-ledger.ts +1314 -0
  441. package/src/core/rollback-point.test.ts +2853 -0
  442. package/src/core/rollback-point.ts +4340 -0
  443. package/src/core/rollback.ts +5 -3
  444. package/src/core/run-registry.ts +6 -5
  445. package/src/core/session-health.ts +15 -0
  446. package/src/core/session-meta.test.ts +117 -1
  447. package/src/core/session-meta.ts +149 -2
  448. package/src/core/session-title.test.ts +127 -0
  449. package/src/core/session-title.ts +189 -0
  450. package/src/core/startup-barrier.test.ts +69 -0
  451. package/src/core/startup-barrier.ts +27 -0
  452. package/src/core/transaction-coordinator.ts +4 -3
  453. package/src/core/types.ts +37 -1
  454. package/src/core/validator.ts +5 -4
  455. package/src/core/verify-recovery.ts +31 -30
  456. package/src/foreign/bundle.ts +3 -2
  457. package/src/foreign/continue.ts +2 -1
  458. package/src/foreign/crush.ts +2 -1
  459. package/src/foreign/file-budget.test.ts +2 -0
  460. package/src/foreign/gemini.ts +2 -1
  461. package/src/foreign/goose.ts +2 -1
  462. package/src/foreign/kilocode.ts +2 -1
  463. package/src/foreign/kimi.ts +2 -1
  464. package/src/foreign/messages.ts +44 -0
  465. package/src/foreign/mimocode.ts +2 -1
  466. package/src/foreign/openclaw.ts +2 -1
  467. package/src/foreign/opencode.ts +2 -1
  468. package/src/foreign/pi.ts +2 -1
  469. package/src/foreign/qoder.ts +2 -1
  470. package/src/foreign/qwen.ts +2 -1
  471. package/src/foreign/registry.test.ts +1 -1
  472. package/src/foreign/registry.ts +8 -7
  473. package/src/foreign/teleagent.ts +2 -1
  474. package/src/foreign/workbuddy.ts +2 -1
  475. package/src/foreign/zcode.ts +2 -1
  476. package/src/foreign/zed.ts +2 -1
  477. package/src/index.facade.test.ts +340 -1
  478. package/src/index.ts +876 -57
  479. package/src/market/git-file-writer.ts +20 -19
  480. package/src/market/github-repos.test.ts +23 -0
  481. package/src/market/github-repos.ts +37 -19
  482. package/src/market/index-parser.ts +31 -30
  483. package/src/market/messages-market.ts +325 -0
  484. package/src/market/my-repo.ts +32 -29
  485. package/src/market/prepare.ts +18 -15
  486. package/src/market/security.ts +20 -19
  487. package/src/market/types.ts +2 -1
  488. package/src/market/url.ts +2 -1
  489. package/src/migrations/index.ts +6 -5
  490. package/src/migrations/messages-migrations.ts +59 -0
  491. package/src/profiles/dsh-profile-launcher.ts +2 -1
  492. package/src/profiles/dsh-profile-runtime.ts +2 -1
  493. package/src/profiles/messages.ts +31 -0
  494. package/src/routes/backup.ts +18 -2
  495. package/src/routes/import.ts +3 -3
  496. package/src/routes/index.ts +1 -1
  497. package/src/routes/kit.ts +9 -3
  498. package/src/routes/market.ts +1 -1
  499. package/src/routes/messages.ts +106 -0
  500. package/src/routes/prefs.ts +31 -2
  501. package/src/routes/profiles.ts +12 -6
  502. package/src/routes/recovery.test.ts +405 -1
  503. package/src/routes/recovery.ts +477 -94
  504. package/src/routes/snapshots.ts +51 -4
  505. package/src/routes/sync.ts +82 -17
  506. package/src/schema/config.ts +53 -20
  507. package/src/schema/index.ts +7 -5
  508. package/src/schema/manifest-schema.test.ts +4 -4
  509. package/src/schema/manifest.ts +19 -18
  510. package/src/schema/messages.ts +120 -0
  511. package/src/schema/registry.test.ts +28 -7
  512. package/src/schema/section-registry.ts +96 -42
  513. package/src/schema/types.ts +2 -1
  514. package/src/schema/versions.ts +6 -5
  515. package/src/security/encryption.ts +16 -15
  516. package/src/security/integrity.ts +8 -7
  517. package/src/security/messages.ts +87 -0
  518. package/src/security/redaction.test.ts +17 -1
  519. package/src/security/redaction.ts +13 -0
  520. package/src/security/secret-scanner.ts +19 -12
  521. package/src/security/security.test.ts +47 -0
  522. package/src/security/vault.ts +2 -1
  523. package/src/security/zip-security.ts +4 -3
  524. package/src/sync/ancestor.ts +2 -1
  525. package/src/sync/autosync-config.ts +21 -0
  526. package/src/sync/autosync-scheduler.test.ts +63 -7
  527. package/src/sync/autosync-scheduler.ts +118 -78
  528. package/src/sync/backup-files.ts +3 -2
  529. package/src/sync/backup-scheduler.ts +6 -5
  530. package/src/sync/blob-store.ts +2 -1
  531. package/src/sync/git/git-transport.test.ts +170 -8
  532. package/src/sync/git/git-transport.ts +176 -2
  533. package/src/sync/github-auth.ts +10 -9
  534. package/src/sync/layout.ts +13 -12
  535. package/src/sync/messages.ts +153 -0
  536. package/src/sync/review-queue.ts +6 -5
  537. package/src/sync/s3/messages.ts +16 -0
  538. package/src/sync/s3/s3-providers.ts +9 -6
  539. package/src/sync/s3/s3-transport.ts +1 -1
  540. package/src/sync/s3/sigv4.ts +3 -1
  541. package/src/sync/snapshot-crypto.ts +6 -5
  542. package/src/sync/snapshot-json.ts +3 -2
  543. package/src/sync/sync-credentials.test.ts +119 -0
  544. package/src/sync/sync-engine-download-tombstone.test.ts +1 -1
  545. package/src/sync/sync-engine.test.ts +226 -8
  546. package/src/sync/sync-engine.ts +154 -52
  547. package/src/sync/sync-history.ts +7 -6
  548. package/src/sync/sync-selection.test.ts +12 -2
  549. package/src/sync/sync-selection.ts +18 -5
  550. package/src/sync/transport.test.ts +1 -0
  551. package/src/sync/ui-prefs.test.ts +44 -1
  552. package/src/sync/ui-prefs.ts +39 -0
  553. package/src/sync/webdav/webdav-transport.ts +4 -1
  554. package/src/ui/artifact-view.ts +4 -3
  555. package/src/ui/commands.test.ts +1 -0
  556. package/src/ui/commands.ts +11 -1
  557. package/src/ui/diff-view.test.ts +9 -1
  558. package/src/ui/diff-view.ts +22 -0
  559. package/src/ui/disk-usage-view.test.ts +113 -6
  560. package/src/ui/disk-usage-view.ts +63 -7
  561. package/src/ui/errors.ts +4 -3
  562. package/src/ui/export-flow.ts +26 -20
  563. package/src/ui/foreign-view.test.ts +43 -0
  564. package/src/ui/foreign-view.ts +30 -3
  565. package/src/ui/i18n.ts +131 -2
  566. package/src/ui/import-wizard.ts +18 -10
  567. package/src/ui/progress.ts +2 -2
  568. package/src/ui/report.ts +7 -6
  569. package/src/ui/rollback-view.test.ts +836 -0
  570. package/src/ui/rollback-view.ts +1405 -0
  571. package/src/ui/selection-model.test.ts +33 -1
  572. package/src/ui/selection-model.ts +53 -0
  573. package/src/ui/session-inventory-view.test.ts +109 -0
  574. package/src/ui/session-inventory-view.ts +138 -3
  575. package/src/ui/session-issue-labels.test.ts +51 -0
  576. package/src/ui/session-issue-labels.ts +70 -0
  577. package/src/ui/sync-settings-view.test.ts +36 -0
  578. package/src/ui/sync-settings-view.ts +49 -0
  579. package/src/ui/test-helpers.ts +2 -1
  580. package/src/ui/types.ts +10 -4
  581. package/src/utils/atomic-write.ts +6 -5
  582. package/src/utils/bundle-scan.test.ts +2 -2
  583. package/src/utils/bundle-scan.ts +12 -1
  584. package/src/utils/env-lock.ts +83 -49
  585. package/src/utils/json.ts +7 -5
  586. package/src/utils/messages-utils.ts +232 -0
  587. package/src/utils/proxy.test.ts +25 -0
  588. package/src/utils/proxy.ts +19 -5
  589. package/src/utils/recursive-walk.test.ts +43 -0
  590. package/src/utils/recursive-walk.ts +75 -1
  591. package/src/utils/session-log-repair.ts +10 -9
  592. package/src/utils/zip.ts +27 -26
  593. package/lib/core/checkpoint.d.ts +0 -362
  594. package/lib/core/checkpoint.js +0 -1309
  595. package/src/core/checkpoint.test.ts +0 -665
  596. package/src/core/checkpoint.ts +0 -1614
@@ -0,0 +1,593 @@
1
+ /**
2
+ * 引擎语言运行时单测(src/core/engine-locale.ts + src/core/messages.ts 的目录合并语义)。
3
+ *
4
+ * 覆盖(对应契约 t2 的验收):
5
+ * - 未设定语言时行为等于 zh;setEngineLocale('en') 后取英文;同一实例跟随切换(活函数,不是快照);
6
+ * - 未知键回退键名,绝不抛错;{param} 插值缺参原样保留;
7
+ * - makeMsg / engineMsg 合并 registerMessageCatalog 注册的目录,**且只在既有目录未命中时生效**;
8
+ * - LANGUAGE_TTL_MS:函数源不调 invalidate 时最迟 TTL 后即为新语言;调了则当次即为新语言;
9
+ * - **既有 372 键的 zh/en 取值逐字不变**(硬约束①:目录只许追加)—— t2 冻结指纹,见文末常量。
10
+ */
11
+ import test from 'node:test';
12
+ import assert from 'node:assert/strict';
13
+ import { createHash } from 'node:crypto';
14
+ import {
15
+ LANGUAGE_TTL_MS,
16
+ engineMsg,
17
+ getEngineLocale,
18
+ invalidateEngineLocale,
19
+ registerMessageCatalog,
20
+ resetMessageCatalogs,
21
+ setEngineLanguageSource,
22
+ setEngineLocale,
23
+ } from './engine-locale.ts';
24
+ import { en, makeMsg, zh, zhMsg } from './messages.ts';
25
+
26
+ /** 只读字典取值(键不存在 → undefined)。 */
27
+ function dictValue(dict: Readonly<Record<string, string>>, key: string): string | undefined {
28
+ return Object.prototype.hasOwnProperty.call(dict, key) ? dict[key] : undefined;
29
+ }
30
+
31
+ /** 冻结指纹:key → sha256(zh + U+0000 + en) 前 8 位十六进制。 */
32
+ function fingerprint(zhValue: string, enValue: string): string {
33
+ return createHash('sha256').update(zhValue + '\u0000' + enValue, 'utf8').digest('hex').slice(0, 8);
34
+ }
35
+
36
+ /* --------------------------------------------------------------- 语言切换 */
37
+
38
+ test('缺省语言 = zh:未设定时 engineMsg 与 zhMsg 对全部既有键逐字相等', () => {
39
+ setEngineLocale('zh');
40
+ assert.equal(getEngineLocale(), 'zh');
41
+ assert.equal(engineMsg('restore.pluginRemoveFailed'), '卸载失败');
42
+ for (const key of Object.keys(zh)) {
43
+ assert.equal(engineMsg(key), zhMsg(key), '既有键的 zh 缺省行为必须逐字不变: ' + key);
44
+ }
45
+ });
46
+
47
+ test('setEngineLocale("en") 后取英文(en 目录与 makeMsg("en") 逐字一致)', () => {
48
+ setEngineLocale('en');
49
+ assert.equal(getEngineLocale(), 'en');
50
+ assert.equal(engineMsg('restore.pluginRemoveFailed'), 'Uninstall failed');
51
+ assert.equal(
52
+ engineMsg('host.syncTokenWriteFailed', { reason: 'boom', ref: 'REF' }),
53
+ 'Failed to write the token into DSH credentials: boom (configure REF in DSH credential management, then retry)',
54
+ );
55
+ const t = makeMsg('en');
56
+ for (const key of Object.keys(zh)) {
57
+ assert.equal(engineMsg(key), t(key), 'engineMsg(en) 必须与 makeMsg(en) 同口径: ' + key);
58
+ }
59
+ setEngineLocale('zh');
60
+ });
61
+
62
+ test('同一实例跟随语言切换(活函数,不是加载期快照 —— 钉死根因)', () => {
63
+ const live = engineMsg;
64
+ setEngineLocale('zh');
65
+ assert.equal(live('restore.pluginRemoveFailed'), '卸载失败');
66
+ setEngineLocale('en');
67
+ assert.equal(live('restore.pluginRemoveFailed'), 'Uninstall failed', '同一个函数引用必须跟着切到英文');
68
+ setEngineLocale('zh');
69
+ assert.equal(live('restore.pluginRemoveFailed'), '卸载失败', '切回中文同样必须跟随');
70
+ });
71
+
72
+ test('未知键回退键名,绝不抛错(zh / en 两种语言)', () => {
73
+ setEngineLocale('zh');
74
+ assert.equal(engineMsg('no.such.key'), 'no.such.key');
75
+ assert.equal(engineMsg('no.such.key', { a: 'b' }), 'no.such.key');
76
+ setEngineLocale('en');
77
+ assert.equal(engineMsg('no.such.key'), 'no.such.key');
78
+ setEngineLocale('zh');
79
+ });
80
+
81
+ test('插值:{param} 命中 / 缺参原样保留(与 makeMsg 同口径)', () => {
82
+ setEngineLocale('zh');
83
+ assert.equal(engineMsg('export.sectionFailed', { adapter: 'settings', reason: 'boom' }), '分区 settings 导出失败: boom');
84
+ assert.equal(engineMsg('export.sectionFailed', { adapter: 'settings' }), '分区 settings 导出失败: {reason}');
85
+ setEngineLocale('en');
86
+ assert.equal(engineMsg('export.sectionFailed', { adapter: 'settings', reason: 'boom' }), 'Section settings export failed: boom');
87
+ setEngineLocale('zh');
88
+ });
89
+
90
+ test('语言源抛错绝不冒泡(回落 zh)', () => {
91
+ setEngineLanguageSource(() => {
92
+ throw new Error('boom');
93
+ });
94
+ invalidateEngineLocale();
95
+ assert.equal(getEngineLocale(), 'zh');
96
+ setEngineLocale('zh');
97
+ });
98
+
99
+ /* --------------------------------------------------------------- TTL 上界 */
100
+
101
+ test('LANGUAGE_TTL_MS:TTL 内允许缓存,到期必须重新解析;invalidate 当次即生效', () => {
102
+ let lang: 'zh' | 'en' = 'zh';
103
+ const base = 1_000_000;
104
+ setEngineLanguageSource(() => lang);
105
+ assert.equal(getEngineLocale(base), 'zh');
106
+ lang = 'en';
107
+ assert.equal(getEngineLocale(base + LANGUAGE_TTL_MS - 1), 'zh', 'TTL 内允许缓存');
108
+ assert.equal(getEngineLocale(base + LANGUAGE_TTL_MS), 'en', '到 TTL 必须重新解析(非请求路径的兜底上界)');
109
+
110
+ let lang2: 'zh' | 'en' = 'zh';
111
+ setEngineLanguageSource(() => lang2);
112
+ assert.equal(getEngineLocale(base), 'zh');
113
+ lang2 = 'en';
114
+ invalidateEngineLocale();
115
+ assert.equal(getEngineLocale(base), 'en', 'invalidate 后当次调用即为新语言(请求入口用)');
116
+ setEngineLocale('zh');
117
+ });
118
+
119
+ /* ------------------------------------------------------------- 目录注册 */
120
+
121
+ test('registerMessageCatalog:只在既有目录未命中时生效(既有键不可被覆盖)', () => {
122
+ resetMessageCatalogs();
123
+ try {
124
+ registerMessageCatalog({
125
+ id: 'unit-test',
126
+ zh: { 'unit.extra': '注册目录中文', 'export.sectionFailed': '注册目录不该赢' },
127
+ en: { 'unit.extra': 'registered english', 'export.sectionFailed': 'registered should not win' },
128
+ });
129
+ // 既有目录命中 → 注册目录不得覆盖
130
+ assert.equal(makeMsg('zh')('export.sectionFailed', { adapter: 'a', reason: 'b' }), '分区 a 导出失败: b');
131
+ assert.equal(makeMsg('en')('export.sectionFailed', { adapter: 'a', reason: 'b' }), 'Section a export failed: b');
132
+ setEngineLocale('zh');
133
+ assert.equal(engineMsg('export.sectionFailed', { adapter: 'a', reason: 'b' }), '分区 a 导出失败: b');
134
+ // 既有目录未命中 → 注册目录生效(各语言取自己那本)
135
+ assert.equal(makeMsg('zh')('unit.extra'), '注册目录中文');
136
+ assert.equal(makeMsg('en')('unit.extra'), 'registered english');
137
+ setEngineLocale('en');
138
+ assert.equal(engineMsg('unit.extra'), 'registered english');
139
+ setEngineLocale('zh');
140
+ assert.equal(engineMsg('unit.extra'), '注册目录中文');
141
+
142
+ // en 语言下注册目录只有 zh 时回退其 zh(与既有 en → zh 同口径)
143
+ resetMessageCatalogs();
144
+ registerMessageCatalog({ id: 'zh-only', zh: { 'unit.zhOnly': '只有中文' } });
145
+ setEngineLocale('en');
146
+ assert.equal(engineMsg('unit.zhOnly'), '只有中文');
147
+ assert.equal(makeMsg('en')('unit.zhOnly'), '只有中文');
148
+ assert.equal(makeMsg('zh')('unit.zhOnly'), '只有中文');
149
+ } finally {
150
+ resetMessageCatalogs();
151
+ setEngineLocale('zh');
152
+ }
153
+ });
154
+
155
+ test('resetMessageCatalogs 后回到既有目录(注册目录不残留)', () => {
156
+ registerMessageCatalog({ id: 'temp', zh: { 'unit.temp': '临时' }, en: { 'unit.temp': 'temp' } });
157
+ setEngineLocale('en');
158
+ assert.equal(engineMsg('unit.temp'), 'temp');
159
+ resetMessageCatalogs();
160
+ assert.equal(engineMsg('unit.temp'), 'unit.temp', '注册目录清空后必须回退键名');
161
+ setEngineLocale('zh');
162
+ });
163
+
164
+ /* ------------------------------------------------- t2 新增键的 zh 逐字保真 */
165
+
166
+ test('t2 新增的 host.* 键:zh 逐字保留既有文案、en 非空且无 CJK', () => {
167
+ const pairs: Array<[string, string]> = [
168
+ ['host.syncWebdavPasswordWriteFailed', 'WebDAV 口令写入 DSH credentials 失败:{reason}(请在 DSH 凭据管理里配置 {ref} 后重试)'],
169
+ ['host.syncCredentialWriteFailed', '{kind} 写入 DSH credentials 失败:{reason}(请在 DSH 凭据管理里配置 {ref} 后重试)'],
170
+ ['host.syncKindS3Secret', 'S3 密钥'],
171
+ ['host.sessionFormatPathSeparator', '、'],
172
+ ['host.sessionFormatPathsTruncated', '{paths} 等'],
173
+ ['host.snapshotPruneSummary', '自动保留清理删除 {count} 个旧快照'],
174
+ ['host.autosyncSummary', '自动同步 {direction}{transportSuffix}'],
175
+ ['host.autosyncTransportSuffix', '({transport})'],
176
+ ];
177
+ const zhDict = zh as Readonly<Record<string, string>>;
178
+ const enDict = en as Readonly<Record<string, string>>;
179
+ for (const [key, zhText] of pairs) {
180
+ assert.equal(dictValue(zhDict, key), zhText, 'zh 必须逐字保留: ' + key);
181
+ const enText = dictValue(enDict, key);
182
+ assert.ok(enText !== undefined && enText.trim() !== '', 'en 值不得为空: ' + key);
183
+ assert.equal(/[\u2E80-\u2EFF\u3000-\u303F\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\uFE30-\uFE4F\uFF01-\uFF60\uFFE0-\uFFE6]/u.test(enText), false, 'en 值不得含 CJK: ' + key);
184
+ }
185
+ // 迁移后 index.ts 用的既有键必须仍在(zh 逐字不变)
186
+ assert.equal(dictValue(zhDict, 'restore.missingTargetBlob'), '恢复动作缺少 target/blobPath');
187
+ assert.equal(dictValue(zhDict, 'restore.unknownAction'), '未知动作 {kind}: {description}');
188
+ assert.equal(dictValue(zhDict, 'host.syncTokenWriteFailed'), 'token 写入 DSH credentials 失败:{reason}(请在 DSH 凭据管理里配置 {ref} 后重试)');
189
+ });
190
+
191
+ /* ------------------------------------------------ 既有 372 键的冻结指纹 */
192
+
193
+ test('既有 372 键的 zh/en 取值逐字不变(硬约束①:目录只许追加)', () => {
194
+ const lines = BASELINE.trim().split('\n');
195
+ assert.equal(lines.length, BASELINE_KEY_COUNT, '冻结基线条目数不得变');
196
+ const missing: string[] = [];
197
+ const changed: string[] = [];
198
+ const zhDict = zh as Readonly<Record<string, string>>;
199
+ const enDict = en as Readonly<Record<string, string>>;
200
+ for (const line of lines) {
201
+ const at = line.lastIndexOf('=');
202
+ const key = line.slice(0, at);
203
+ const digest = line.slice(at + 1);
204
+ const zhValue = dictValue(zhDict, key);
205
+ const enValue = dictValue(enDict, key);
206
+ if (zhValue === undefined || enValue === undefined) {
207
+ missing.push(key);
208
+ continue;
209
+ }
210
+ if (fingerprint(zhValue, enValue) !== digest) changed.push(key);
211
+ }
212
+ assert.deepEqual(missing, [], '既有键被删除/改名(只许追加): ' + missing.slice(0, 10).join(', '));
213
+ assert.deepEqual(changed, [], '既有键的 zh/en 取值被改动(zh 逐字不变、只新增 en 值): ' + changed.slice(0, 10).join(', '));
214
+ assert.ok(Object.keys(zh).length >= BASELINE_KEY_COUNT, '目录不得净减');
215
+ assert.equal(Object.keys(en).length, Object.keys(zh).length, 'zh/en 键集必须相等');
216
+ });
217
+
218
+ /** t2 冻结的既有目录基线:key → sha256(zh + U+0000 + en) 前 8 位十六进制(372 键)。 */
219
+ const BASELINE_KEY_COUNT = 372;
220
+ const BASELINE = `
221
+ export.encryptionRequired=6f5d0604
222
+ export.sectionFailed=2e6900c6
223
+ export.credentialsReadFailed=5c4746fa
224
+ export.vaultRefreshed=bc97d18e
225
+ export.vaultRefreshSkipped=d2731560
226
+ export.vaultRefreshFailed=518fc015
227
+ export.sessionsLimited=a80b218a
228
+ export.sessionsNone=15d6aadd
229
+ export.sessionsWorkspacesCoupled=f1e32d07
230
+ export.sessionsDeclaredInWorkspaces=fd33cb78
231
+ export.sessionsWorkspacesCarriedAll=c7d20911
232
+ export.sessionsWithoutWorkspaces=462072dc
233
+ export.sessionsWorkspacesUnreadable=7e8b82db
234
+ export.sessionsLimitNoMtime=ba56bb07
235
+ export.fileSectionSecrets=b67c4400
236
+ import.readFailed=f70e240a
237
+ import.noManifest=6c904a49
238
+ import.manifestParseFailed=46d9b50a
239
+ import.integrityFailed=7445aa62
240
+ import.schemaUnsupported=ce2e357d
241
+ import.executableWarning=7987d95e
242
+ import.sectionParseFailed=4120b7c3
243
+ import.sectionInvalid=5f8161c7
244
+ import.adapterAnalyzeFailed=bf841492
245
+ import.adapterValidationIssue=087d6bff
246
+ import.versionUnsupported=f6ac0640
247
+ import.missingSections=1fb2502a
248
+ import.unsupportedSections=a116f3d3
249
+ import.sessionsWithoutWorkspaces=ad735b76
250
+ import.subagentSessionsWithoutParents=13099f30
251
+ import.sessionsFormatUnsupported=4ab94f7a
252
+ import.sessionsFormatSampled=7aef2152
253
+ import.sessionsFormatAborted=4e1119ad
254
+ import.sessionsNeedRestart=2654c174
255
+ export.sessionParentsCoupled=3633b079
256
+ export.sessionParentsUncoupled=a67ea15e
257
+ export.sessionChildrenCoupled=e347e418
258
+ export.sessionRelationNotFound=0fa7aa11
259
+ export.sessionParentTooLarge=add5f66d
260
+ import.unsupportedSectionVersion=aefc30cb
261
+ import.checksumsMissing=9078606d
262
+ import.extraEntries=0167f799
263
+ import.undeclaredSectionContent=15039a5b
264
+ import.secretsPayloadEmpty=e6fff431
265
+ import.migrated=2613d9d1
266
+ import.migrateInvalidManifest=dc7c8958
267
+ import.postValidationIssue=b6aad3cc
268
+ import.postValidationFailed=e3e8af95
269
+ import.conflictKeepCurrent=c46b667e
270
+ import.conflictSkipExisting=7676e111
271
+ import.conflictReplace=dff65c88
272
+ import.secretMissingDesc=69bea9f7
273
+ import.secretAlreadyConfigured=5582af19
274
+ import.secretFromArchive=371091df
275
+ import.secretNotProvided=313843dd
276
+ import.notConfirmed=b0a9d227
277
+ import.encryptedPasswordRequired=d857e8a0
278
+ import.encryptedPasswordWrong=2d28831a
279
+ import.notEncryptedContainer=162d2934
280
+ import.encryptedContainerNeedsUnlock=270bb476
281
+ import.userSkipped=03132f7c
282
+ import.userSkippedDetail=df02b540
283
+ import.vaultRestored=3df83728
284
+ import.vaultMissing=9928d845
285
+ import.sessionRelocated=d904f413
286
+ import.sessionRelocateFailed=59ec2557
287
+ import.sessionRewritten=effa56d8
288
+ import.sessionRewriteFailed=00395039
289
+ import.sessionRewriteRolledBack=1e67fe5c
290
+ import.sessionRewriteRollbackFailed=84da6de8
291
+ import.vaultBackfillFailed=13c3fd2f
292
+ import.vaultCredentialsFromArchive=e2636fbd
293
+ runs.cancelUnsupported=0d6fa0da
294
+ runs.cancelWaitingSafePoint=9b2431b5
295
+ import.cancelRequested=a6746bc7
296
+ import.cancelAwaitingDecision=d3bfe0d3
297
+ import.cancelDecisionTimeout=a040c9d1
298
+ import.cancelRollingBack=286375ca
299
+ import.cancelKept=3bc3023d
300
+ import.cancelKeptSnapshotKept=80bf66d2
301
+ import.cancelKeptSkippedItem=2f6f095d
302
+ import.cancelKeptJournalFailed=6668364b
303
+ import.cancelKeptUnchecked=a7d73ea8
304
+ import.cancelKeptNoAudit=0ce7ff0a
305
+ bootSafety.bundlesPruned=1286143b
306
+ bootSafety.bundlesPrunedFailed=b30ef254
307
+ bootSafety.bundleListUnreadable=efc9e9ff
308
+ bootSafety.criticalFileUnreadable=e94a9037
309
+ bootSafety.criticalFileUnparsable=9984c74a
310
+ bootSafety.patchFileMissing=a403e6f8
311
+ bootSafety.extraCheckFailed=58de3fad
312
+ rollback.ns.createdNoDelete=9d67ab26
313
+ rollback.ns.manualHint=5ae2c950
314
+ rollback.ns.conflictHint=0f6972fd
315
+ rollback.cred.noReadback=0f6a6835
316
+ rollback.cred.manualHint=67c4a26e
317
+ rollback.patch.manualHint=fab359d2
318
+ rollback.file.manualHint=5b977f79
319
+ rollback.workspace.manualHint=d7393095
320
+ rollback.unknownEntry=40bf9ee4
321
+ restore.snapshotInvalid=128774df
322
+ restore.invalidSnapshotId=990394ab
323
+ restore.pathEscape=b774bf0a
324
+ restore.snapshotUntrusted=cb44d84e
325
+ restore.blobPathEscape=e1cde5de
326
+ restore.hostSkipEscape=14198338
327
+ restore.hostSkipEscapeDetail=859adf51
328
+ restore.hostNoBlobInfo=6759b284
329
+ restore.hostUnreadable=04a4eadb
330
+ restore.hostBlobMissing=13969f2b
331
+ restore.hostRestore=ede02fa7
332
+ restore.backupBeforeWrite=b30d3550
333
+ restore.writeDirect=fc5eb12b
334
+ restore.hostRemove=ae43cae0
335
+ restore.backupBeforeRemove=8c946f03
336
+ restore.hostSkipAbsent=663f124a
337
+ restore.settingsNotBacked=18490617
338
+ restore.settingsNotBackedDetail=a29f5138
339
+ restore.noBaseline=b96bb4af
340
+ restore.noBaselineDetail=8be7744b
341
+ restore.pluginRemove=28975e5a
342
+ restore.pluginRemoveEmptyBaseline=3cb373c9
343
+ restore.noAddedPlugins=fa54726d
344
+ restore.fileSkipEscape=51aaeb5d
345
+ restore.fileBlobMissing=c940fd90
346
+ restore.fileRestore=db49ecd5
347
+ restore.fileRemove=42159482
348
+ restore.fileSkipAbsent=149af72b
349
+ restore.fileNoBlobInfo=7c440569
350
+ restore.credentialHint=677f526d
351
+ restore.credentialManualHint=87b9f20f
352
+ restore.nsAggregate=0f3b1f15
353
+ restore.nsAggregateDetail=0aae1c3c
354
+ restore.patchAggregate=c469ca62
355
+ restore.patchAggregateDetail=b75527f6
356
+ restore.workspaceAggregate=0d78661c
357
+ restore.workspaceAggregateDetail=9b2d5de6
358
+ restore.credentialAbsentAggregate=19d8b6df
359
+ restore.uninstallFailedCode=0366eb46
360
+ restore.uninstallFailedExit=ee365c9d
361
+ restore.noOutput=c1610bee
362
+ restore.pluginRemoveFailed=9238f57d
363
+ restore.unknownAction=9c4f46b8
364
+ restore.missingTargetBlob=65f23050
365
+ restore.missingTarget=de247064
366
+ restore.missingPluginName=300b82d6
367
+ restore.ghostSweepSummary=027e9d89
368
+ restore.versionMismatch=0152cf52
369
+ restore.versionMismatchDetail=05f1573a
370
+ run.conflict.export=c181e08f
371
+ run.conflict.import=ffb79768
372
+ run.notFound=9e2fa6ee
373
+ host.exportTimeout=59bf7d33
374
+ host.syncPushTimeout=cb856ffe
375
+ host.syncPullTimeout=d68522d6
376
+ host.workspaceUnavailable=bb5978df
377
+ host.workspaceMissingTarget=e1e32977
378
+ host.sessionStoreShapeUnknown=5f536b4e
379
+ host.sessionStorePurposeReindex=d8390c9f
380
+ host.sessionStorePurposeParentRelations=1f87e205
381
+ host.sessionStoreListFailed=6de50590
382
+ host.sessionStoreListNotArray=879d8be6
383
+ host.sessionStorePartialUnresolved=93c25644
384
+ host.parentRelationsUnavailable=9c507e80
385
+ host.fsPathNotAbsolute=63921261
386
+ host.fsPathDotDot=570cd46b
387
+ host.fsPathNotDirectory=de0f5bc1
388
+ host.patchUnsupported=528742ab
389
+ host.patchUnreadable=cbbe8621
390
+ host.patchRefuseClobber=b7120f1a
391
+ host.fsPathEscape=b774bf0a
392
+ host.activationRowFailed=0dce5ab1
393
+ host.syncTokenWriteFailed=d50f3dc1
394
+ host.githubMissingClientId=58778d2b
395
+ host.githubFlowGone=5afe13e0
396
+ host.restoreBlobEscape=bc69f93c
397
+ host.restoreUninstallFailed=ee365c9d
398
+ host.restoreNoOutput=c1610bee
399
+ adapter.pluginListReadFailed=d9c4cbb4
400
+ adapter.patchReadFailed=25a00431
401
+ adapter.patchReadFailedPrompts=9f4c3045
402
+ adapter.patchReadFailedMCP=5a5db819
403
+ adapter.pnpmReadFailed=17b37b9a
404
+ adapter.localPackFailed=58c833ad
405
+ adapter.pluginLocalTarballHint=247729c9
406
+ adapter.providerNsReadFailed=aab8027d
407
+ adapter.credStatusReadFailed=d31c590a
408
+ adapter.settingsNsReadFailed=a8efebe4
409
+ adapter.dirEmpty=c4afe993
410
+ adapter.linksFollowed=4023bbc7
411
+ adapter.linksSkipped=b9872901
412
+ adapter.dirsUnreadable=14b18853
413
+ adapter.depsDirsSkipped=43b54fc6
414
+ adapter.depsDirFiles=31278d84
415
+ adapter.depsDirFilesUnknown=56ed56d4
416
+ adapter.fileSectionByteLimit=688de04a
417
+ adapter.linkReason.loop=4e783716
418
+ adapter.linkReason.outsideHome=64c3b9c2
419
+ adapter.linkReason.broken=23ffb55e
420
+ adapter.linkReason.unreadable=a3e2122b
421
+ adapter.linkReason.tooDeep=f011cf3b
422
+ adapter.noSettingsNamespaces=fadca649
423
+ adapter.fileCreate=8bc99f2f
424
+ adapter.fileSame=4a19ccce
425
+ adapter.fileDiff=a2f85dd6
426
+ adapter.pluginFileCreate=04a3f084
427
+ adapter.pluginFileReserved=d263f753
428
+ adapter.fileReserved=d263f753
429
+ adapter.mcpCreate=ab0cac88
430
+ adapter.mcpSame=a677aa75
431
+ adapter.mcpDiff=145629e1
432
+ adapter.pwCreate=65fb3545
433
+ adapter.pwUpdate=7e23c7e5
434
+ adapter.pluginInstall=a422c035
435
+ adapter.pluginSame=b540e3ac
436
+ adapter.pluginDiff=5c8f623f
437
+ adapter.pluginVersionDetail=8bcc20c3
438
+ adapter.pluginBundleMember=cb259799
439
+ adapter.pluginInstallOk=2f197583
440
+ adapter.pluginUpdateTriggered=b4a9d3cd
441
+ adapter.pluginRestartSuffix=8b777dc3
442
+ adapter.pwMissing=b128378b
443
+ adapter.pluginInstallFailed=ae58536f
444
+ adapter.pluginUpdateFailed=8208d02f
445
+ adapter.patchLineCreate=fb975c58
446
+ adapter.patchLineSame=425fa025
447
+ adapter.patchLineDiff=dc165320
448
+ adapter.promptSame=39140338
449
+ adapter.promptDiff=c38e4221
450
+ adapter.promptDiffWithLine=dd31a856
451
+ adapter.promptCreate=99e04ceb
452
+ adapter.promptManual=f52a0f29
453
+ adapter.providerUnregistered=10ca00e8
454
+ adapter.providerCreate=859b6951
455
+ adapter.providerSame=bce72c5f
456
+ adapter.providerDiff=3fda0f92
457
+ adapter.settingsUnregistered=a26cf0cb
458
+ adapter.settingsCreate=f5cd8bd1
459
+ adapter.settingsSame=1f998e25
460
+ adapter.settingsDiff=5607918f
461
+ adapter.workspaceCreate=602c43de
462
+ adapter.workspaceSame=3fab4f6e
463
+ adapter.workspaceDiff=8e4fde14
464
+ adapter.workspacePathMapping=089f5b3f
465
+ adapter.workspaceMissing=711f116f
466
+ adapter.credentialDescription=3ee102d2
467
+ adapter.missingTargetRef=b3db7b49
468
+ adapter.dataMissingFile=37fda3f4
469
+ adapter.patchMissing=081968e3
470
+ adapter.pwWritten=3b81fb89
471
+ adapter.pwWriteFailed=a1ed0359
472
+ adapter.patchFileCreate=9d64dc02
473
+ adapter.patchFileWriteFailed=1e736591
474
+ adapter.patchFileMissing=ae3f7a77
475
+ adapter.patchFileUnsafe=9a5eab2f
476
+ adapter.patchFileReadFailed=35ea1463
477
+ adapter.patchFileTooLarge=a85c5edb
478
+ adapter.pwPatchesDropped=60db1659
479
+ adapter.pwPatchesDroppedDetail=229a409e
480
+ adapter.pwPatchesUnsupported=6ee9a080
481
+ adapter.pwWrittenPatchesDropped=788b1b24
482
+ adapter.patchWritten=ef005ab0
483
+ adapter.credentialValueMissing=77856b96
484
+ adapter.promptWarningNoWrite=ddffc7c3
485
+ adapter.promptMissing=96d59424
486
+ adapter.promptCreated=edfa6a8f
487
+ adapter.patchLineMissing=722a9efe
488
+ adapter.promptWritten=7ecfa259
489
+ adapter.mcpMissing=a69e2ccc
490
+ adapter.mcpWritten=3361d17f
491
+ adapter.workspaceWriteFailed=c05d4d68
492
+ adapter.workspaceDirCreated=b815201b
493
+ adapter.workspaceDirFailed=23c2b6ce
494
+ adapter.workspaceDirUnsafe=af957f28
495
+ adapter.workspaceSessionsAttached=b1637e5a
496
+ adapter.workspaceSessionsPending=e8e562f6
497
+ adapter.workspaceSessionsOutsideBundle=cd677cd6
498
+ adapter.workspaceSessionsManual=4835e86a
499
+ adapter.workspaceSessionsOwnerMissing=b37a5f40
500
+ adapter.providerMissing=46eefe92
501
+ adapter.namespaceMissing=544111f5
502
+ adapter.validate.object=f684b129
503
+ adapter.validate.fileSection=59afe08f
504
+ adapter.validate.version=88de06b9
505
+ adapter.validate.array=e7738574
506
+ adapter.validate.string=b598e7e2
507
+ adapter.validate.localTarballPath=eb521c44
508
+ adapter.validate.missingObject=ae0ec53a
509
+ adapter.validate.recordObject=020cd708
510
+ adapter.validate.requiredField=919004e2
511
+ adapter.validate.sourceNamespace=faca8869
512
+ adapter.validate.number=4d5de0cf
513
+ adapter.validate.nonEmptyRef=7189e682
514
+ adapter.validate.credentialRef=2049999b
515
+ adapter.validate.fileRelativePath=032ee98a
516
+ adapter.validate.promptIdentity=655d15a8
517
+ adapter.validate.hasValueFalse=52a8e3ea
518
+ adapter.validate.serverName=7b336f41
519
+ adapter.validate.workspaceIdentity=c99a90fc
520
+ adapter.validate.missingValue=0bf5e371
521
+ sync.denySensitiveSection=4c50a519
522
+ sync.sectionFailed=2e6900c6
523
+ sync.skipNonPortable=da38bf76
524
+ sync.encryptRequiresPassword=5bb93652
525
+ sync.includeSecretsRequiresEncryption=951e1d1c
526
+ sync.credentialsReadFailed=b2569ea9
527
+ sync.credentialsEmpty=521714b1
528
+ sync.credentialsItemDesc=cf087014
529
+ sync.credentialsNeedPassword=0e82e95b
530
+ sync.encryptedNeedsPassword=4bf48a91
531
+ sync.noPortableSections=8f111b6a
532
+ sync.remoteEmpty=690b4168
533
+ sync.sessionDeletionsRecorded=adff6325
534
+ sync.sessionsTombstoned=bd728e04
535
+ sync.missingImporter=b72eedb6
536
+ sync.missingCtx=410d0a1f
537
+ sync.missingTransport=6dc45be2
538
+ sync.missingStateDir=fed3551a
539
+ sync.remoteContainsSecrets=e9c50b3d
540
+ sync.unchanged=6f653d9f
541
+ sync.changesSummary=5c515700
542
+ sync.configWhitespace=65394f94
543
+ sync.configUnparseable=1569b688
544
+ sync.configUserinfo=7e7af4e7
545
+ sync.state.notObject=6e207956
546
+ sync.state.schemaUnsupported=ee5f5f86
547
+ sync.state.lastSyncAt=a4ceeeb8
548
+ sync.state.sections=2f4ea8d1
549
+ sync.state.sectionRecord=e47084b4
550
+ sync.state.sectionFields=2b5677d2
551
+ sync.state.transport=8777af55
552
+ sync.git.repoUrlRequired=aa5876a5
553
+ sync.git.workDirRequired=b51cad7f
554
+ sync.git.credentialsRequired=d4e5bcfc
555
+ sync.git.snapshotMissing=480cf6b3
556
+ sync.git.snapshotCorrupt=af1824d9
557
+ sync.git.repoUnreachable=85f9daaa
558
+ sync.git.workDirNotRepo=d7ecc7d8
559
+ sync.git.pullFailed=6766926f
560
+ sync.git.cmdFailed=1bc06220
561
+ sync.git.pushTokenRequired=5aabd2a0
562
+ sync.git.pushAuthFailed=3e3de724
563
+ sync.git.repoUrlInvalid=362a2b36
564
+ sync.git.invalidSnapshotId=49c10fb1
565
+ sync.webdav.baseUrlRequired=e3067d58
566
+ sync.webdav.baseUrlInvalid=62b4779e
567
+ sync.webdav.baseUrlUserinfo=34c9692a
568
+ sync.webdav.usernameRequired=347a9b47
569
+ sync.webdav.credentialsRequired=81fcc041
570
+ sync.webdav.invalidSnapshotId=49c10fb1
571
+ sync.webdav.snapshotMissing=75dd1e8c
572
+ sync.webdav.requestFailed=3dc71e9f
573
+ sync.webdav.requestError=0014c75c
574
+ sync.webdav.timeout=edf1c80c
575
+ sync.webdav.tooManyRedirects=ecaaa26b
576
+ sync.webdav.indexInvalid=3fedc570
577
+ sync.webdav.snapshotInvalid=3924e9cd
578
+ sync.pruneListFailed=7801bb72
579
+ sync.pruneDeleteFailed=554a397e
580
+ market.invalidItemId=074d1618
581
+ market.urlWhitespace=becd1d87
582
+ market.urlUnparseable=3f5ed1b5
583
+ market.urlUserinfo=4ce929db
584
+ market.repoUnreachable=11728a2d
585
+ market.cloneFailed=c3437a6f
586
+ market.pullFailed=1cfeb577
587
+ market.workDirNotRepo=9c98bd70
588
+ market.missingIndex=123dd882
589
+ market.missingManifest=1b6d8abb
590
+ market.missingZip=e5af4f3e
591
+ market.zipTooLarge=e7e622e9
592
+ market.invalid=7b4145b6
593
+ `