dsh-config-manager 0.1.12 → 0.1.13

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 (107) hide show
  1. package/README.md +30 -0
  2. package/README.zh-CN.md +30 -0
  3. package/lib/adapters/test-helpers.d.ts +4 -2
  4. package/lib/adapters/test-helpers.js +11 -3
  5. package/lib/adapters/test-helpers.js.map +1 -1
  6. package/lib/cli/index.d.ts +44 -0
  7. package/lib/cli/index.js +230 -0
  8. package/lib/cli/index.js.map +1 -0
  9. package/lib/client.d.ts +260 -5
  10. package/lib/client.js +2519 -820
  11. package/lib/client.js.map +1 -1
  12. package/lib/core/analyzer.d.ts +18 -1
  13. package/lib/core/analyzer.js +29 -0
  14. package/lib/core/analyzer.js.map +1 -1
  15. package/lib/core/backup.d.ts +3 -1
  16. package/lib/core/backup.js +70 -0
  17. package/lib/core/backup.js.map +1 -1
  18. package/lib/core/exporter.d.ts +11 -0
  19. package/lib/core/exporter.js +11 -0
  20. package/lib/core/exporter.js.map +1 -1
  21. package/lib/core/importer.d.ts +3 -0
  22. package/lib/core/importer.js +1 -0
  23. package/lib/core/importer.js.map +1 -1
  24. package/lib/core/index.d.ts +1 -0
  25. package/lib/core/index.js +1 -0
  26. package/lib/core/index.js.map +1 -1
  27. package/lib/core/restore.d.ts +92 -0
  28. package/lib/core/restore.js +505 -0
  29. package/lib/core/restore.js.map +1 -0
  30. package/lib/core/run-registry.d.ts +65 -0
  31. package/lib/core/run-registry.js +120 -0
  32. package/lib/core/run-registry.js.map +1 -0
  33. package/lib/core/types.d.ts +20 -0
  34. package/lib/core/types.js.map +1 -1
  35. package/lib/index.d.ts +45 -0
  36. package/lib/index.js +442 -8
  37. package/lib/index.js.map +1 -1
  38. package/lib/sync/fs.d.ts +18 -0
  39. package/lib/sync/fs.js +47 -0
  40. package/lib/sync/fs.js.map +1 -0
  41. package/lib/sync/git/git-transport.d.ts +87 -0
  42. package/lib/sync/git/git-transport.js +333 -0
  43. package/lib/sync/git/git-transport.js.map +1 -0
  44. package/lib/sync/layout.d.ts +29 -0
  45. package/lib/sync/layout.js +166 -0
  46. package/lib/sync/layout.js.map +1 -0
  47. package/lib/sync/sync-config.d.ts +16 -0
  48. package/lib/sync/sync-config.js +67 -0
  49. package/lib/sync/sync-config.js.map +1 -0
  50. package/lib/sync/sync-engine.d.ts +96 -0
  51. package/lib/sync/sync-engine.js +236 -0
  52. package/lib/sync/sync-engine.js.map +1 -0
  53. package/lib/sync/sync-state.d.ts +31 -0
  54. package/lib/sync/sync-state.js +103 -0
  55. package/lib/sync/sync-state.js.map +1 -0
  56. package/lib/sync/transport.d.ts +50 -0
  57. package/lib/sync/transport.js +22 -0
  58. package/lib/sync/transport.js.map +1 -0
  59. package/package.json +4 -1
  60. package/src/adapters/test-helpers.ts +10 -3
  61. package/src/cli/index.ts +278 -0
  62. package/src/client/ConfigManagerSection.tsx +49 -14
  63. package/src/client/api.ts +53 -5
  64. package/src/client/client-types.ts +0 -6
  65. package/src/client/common/ProgressBar.tsx +31 -19
  66. package/src/client/common/progress-view-edge.test.ts +60 -0
  67. package/src/client/common/progress-view.test.ts +79 -0
  68. package/src/client/common/progress-view.ts +94 -0
  69. package/src/client/config-manager.module.css +99 -20
  70. package/src/client/export/ExportView.tsx +63 -49
  71. package/src/client/import/ImportWizardView.tsx +107 -66
  72. package/src/client/index.ts +22 -0
  73. package/src/client/locales.ts +53 -0
  74. package/src/client/run-store.test.ts +500 -0
  75. package/src/client/run-store.ts +772 -0
  76. package/src/client/snapshots/SnapshotsPanel.tsx +240 -0
  77. package/src/client/sync/SyncSettingsView.tsx +261 -0
  78. package/src/client/sync/sync-api.test.ts +117 -0
  79. package/src/client/sync/sync-api.ts +132 -0
  80. package/src/client/sync/sync-locales.ts +77 -0
  81. package/src/client/sync/sync-view.test.ts +211 -0
  82. package/src/client/sync/sync-view.ts +202 -0
  83. package/src/core/analyzer.ts +50 -1
  84. package/src/core/backup.ts +78 -2
  85. package/src/core/exporter.ts +21 -0
  86. package/src/core/importer.ts +4 -0
  87. package/src/core/index.ts +5 -0
  88. package/src/core/restore.ts +587 -0
  89. package/src/core/run-progress.test.ts +237 -0
  90. package/src/core/run-registry.test.ts +139 -0
  91. package/src/core/run-registry.ts +166 -0
  92. package/src/core/smoke.test.ts +5 -0
  93. package/src/core/types.ts +22 -0
  94. package/src/index.ts +476 -8
  95. package/src/security/security.test.ts +5 -0
  96. package/src/sync/fs.ts +46 -0
  97. package/src/sync/git/git-transport.test.ts +456 -0
  98. package/src/sync/git/git-transport.ts +390 -0
  99. package/src/sync/layout.test.ts +226 -0
  100. package/src/sync/layout.ts +183 -0
  101. package/src/sync/sync-config.ts +72 -0
  102. package/src/sync/sync-engine.test.ts +299 -0
  103. package/src/sync/sync-engine.ts +318 -0
  104. package/src/sync/sync-state.test.ts +118 -0
  105. package/src/sync/sync-state.ts +123 -0
  106. package/src/sync/transport.test.ts +110 -0
  107. package/src/sync/transport.ts +73 -0
package/lib/client.d.ts CHANGED
@@ -147,6 +147,8 @@ interface ImportResult {
147
147
  rollback: RollbackReport | null;
148
148
  snapshotId: string | null;
149
149
  }
150
+ /** 快照生命周期状态(M1 增强;旧快照无此字段,视为未知/兼容) */
151
+ type SnapshotStatus = 'pending' | 'done' | 'rolled-back';
150
152
  interface RollbackReport {
151
153
  full: boolean;
152
154
  restored: string[];
@@ -175,6 +177,97 @@ interface ExportReport {
175
177
  warnings: string[];
176
178
  }
177
179
  //#endregion
180
+ //#region src/core/restore.d.ts
181
+ type RestoreActionKind = 'hostFileRestore' | 'hostFileRemove' | 'pluginRemove' | 'fileRestore' | 'fileRemove' | 'credentialHint' | 'skip';
182
+ interface RestoreAction {
183
+ kind: RestoreActionKind;
184
+ /** 人类可读描述 */
185
+ description: string;
186
+ /** 目标:相对 $DSH_HOME 的 relPath(hostFile/file 类)或插件名(pluginRemove) */
187
+ target?: string;
188
+ /** hostFileRestore/fileRestore:快照内 blob 相对路径(相对 snapshotDir) */
189
+ blobPath?: string;
190
+ /** pluginRemove:插件包名 */
191
+ pluginName?: string;
192
+ /** credentialHint:人工提示文本 */
193
+ manualHint?: string;
194
+ /** 附加说明(旧快照缺基线 / 离线无法恢复等) */
195
+ detail?: string;
196
+ /** 该动作是否对应 settings 主文件(settingsPath 解析出的文件) */
197
+ isSettings?: boolean;
198
+ }
199
+ interface RestorePlan {
200
+ snapshotId: string;
201
+ createdAt: string;
202
+ sourceZip: string;
203
+ actions: RestoreAction[];
204
+ summary: {
205
+ hostFileRestores: number;
206
+ hostFileRemoves: number;
207
+ pluginRemoves: number;
208
+ fileRestores: number;
209
+ fileRemoves: number;
210
+ credentialHints: number;
211
+ skips: number;
212
+ };
213
+ /** beforePlugins 基线是否可用(undefined=旧快照无基线 → 不计划任何插件卸载) */
214
+ pluginBaselineConfirmed: boolean;
215
+ }
216
+ interface RestoreReport {
217
+ snapshotId: string;
218
+ /** 已还原/已删除的目标(相对 $DSH_HOME) */
219
+ restored: string[];
220
+ /** 已卸载的插件名 */
221
+ removedPlugins: string[];
222
+ /** 需人工处理的提示(凭据补录等) */
223
+ manualHints: string[];
224
+ /** 失败清单 */
225
+ failed: {
226
+ item: string;
227
+ reason: string;
228
+ }[];
229
+ /** 跳过项(无动作 / 离线无法处理) */
230
+ skipped: string[];
231
+ }
232
+ interface SnapshotMeta {
233
+ id: string;
234
+ createdAt: string;
235
+ sourceZip: string;
236
+ status?: SnapshotStatus;
237
+ entryCount: number;
238
+ hostFileBackupCount: number;
239
+ beforePluginCount: number;
240
+ }
241
+ //#endregion
242
+ //#region src/core/run-registry.d.ts
243
+ /** run 类型:导出 / 导入。 */
244
+ type RunKind = 'export' | 'import';
245
+ /** run 状态:进行中 / 完成 / 失败。 */
246
+ type RunStatus = 'running' | 'done' | 'failed';
247
+ /** 单个 run 的实时状态(/progress 返回体;纯 JSON 可序列化)。 */
248
+ interface RunState {
249
+ /** 不可猜测的 run id(32 hex 字符)。 */
250
+ runId: string;
251
+ kind: RunKind;
252
+ status: RunStatus;
253
+ /** 当前分区(adapter id 或导入阶段名);无则 null。 */
254
+ section: string | null;
255
+ /** 分区总数(导出 = 选中分区数;导入无此语义 = null)。 */
256
+ sectionTotal: number | null;
257
+ /** 已完成的内部计数(导出 = 当前分区序号;导入 = 已处理计划项数)。 */
258
+ item: number | null;
259
+ /** 内部计数总数(导出 = 分区总数;导入 = 计划项总数)。 */
260
+ itemTotal: number | null;
261
+ /** 非敏感进度摘要(当前分区 / 当前计划项 id)。 */
262
+ detail: string | null;
263
+ /** 完成时的业务结果(仅 JSON 可序列化、不含秘密值)。 */
264
+ result?: unknown;
265
+ /** 失败时的错误消息(非敏感)。 */
266
+ error?: string;
267
+ createdAt: number;
268
+ updatedAt: number;
269
+ }
270
+ //#endregion
178
271
  //#region src/client/api.d.ts
179
272
  /** Host 半健康检查响应(plugin 版本 / DSH 版本 / 平台,用于主页横幅与兼容性说明) */
180
273
  interface ServiceStatus {
@@ -184,11 +277,13 @@ interface ServiceStatus {
184
277
  platform: string;
185
278
  arch: string;
186
279
  }
187
- /** export 端点响应(对齐 ExportFlow 的 ExportRunResult 前半部分) */
280
+ /** export 端点响应(对齐 ExportFlow 的 ExportRunResult 前半部分;runId 为 m1 run 注册表标识) */
188
281
  interface ExportResponse {
189
282
  zipPath: string;
190
283
  manifest: Manifest;
191
284
  report: ExportReport;
285
+ /** m1:本次导出 run 的 id(可用 /progress 查询状态 / 刷新恢复) */
286
+ runId: string;
192
287
  }
193
288
  /** upload 端点响应:Host 把用户上传的 ZIP 存入受控临时目录,返回可被 analyze/plan/execute 引用的路径 */
194
289
  interface UploadResponse {
@@ -196,6 +291,12 @@ interface UploadResponse {
196
291
  name: string;
197
292
  sizeBytes: number;
198
293
  }
294
+ /** restore 端点响应:dryRun=true 返回 plan;执行返回 report(与 CLI 一致的诚实报告) */
295
+ interface RestoreResponse {
296
+ dryRun: boolean;
297
+ plan?: RestorePlan;
298
+ report?: RestoreReport;
299
+ }
199
300
  /** 携带路由 JSON error 消息的错误类型 */
200
301
  declare class ConfigManagerApiError extends Error {
201
302
  constructor(message: string);
@@ -239,7 +340,17 @@ declare class ConfigManagerApi {
239
340
  confirm: boolean;
240
341
  secretInputs?: Record<string, string>;
241
342
  rollbackOnError: boolean;
242
- }): Promise<ImportResult>;
343
+ }): Promise<ImportResult & {
344
+ runId: string;
345
+ }>;
346
+ /** m1:查询单个 run 的实时状态(执行中轮询 / 刷新恢复用;404 = 已过保留期或不存在) */
347
+ progress(runId: string): Promise<RunState>;
348
+ /** m1:列出当前活跃(running)的 run(刷新后重新订阅进行中任务的入口) */
349
+ runs(): Promise<RunState[]>;
350
+ /** 列出全部快照元信息(createdAt 倒序;含 status/条目数/宿主文件数/插件数) */
351
+ snapshots(): Promise<SnapshotMeta[]>;
352
+ /** 快照恢复:dryRun=true 只取动作计划(零写入);false 执行并返回诚实报告 */
353
+ restoreSnapshot(snapshotId: string, dryRun: boolean): Promise<RestoreResponse>;
243
354
  }
244
355
  //#endregion
245
356
  //#region src/client/client-types.d.ts
@@ -254,11 +365,12 @@ interface ConfigManagerSectionInjected {
254
365
  * 字典 namespace 由 client/index.ts 注册(declare module 合并进 LocaleNamespaceMap)。
255
366
  * 键集合通过 `ConfigManagerKey` 类型在注册处做编译期校验(缺键/多键即编译错误)。
256
367
  */
257
- declare const zh: {
368
+ declare const zh$1: {
258
369
  readonly 'section.label': "备份与迁移";
259
370
  readonly 'section.description': "导出 / 导入 / 迁移 DSH 配置(备份不含密钥,加密备份可选)";
260
371
  readonly 'view.export': "导出备份";
261
372
  readonly 'view.import': "导入恢复";
373
+ readonly 'view.snapshots': "快照恢复";
262
374
  readonly 'common.close': "关闭";
263
375
  readonly 'common.cancel': "取消";
264
376
  readonly 'common.back': "上一步";
@@ -326,6 +438,31 @@ declare const zh: {
326
438
  readonly 'import.paths.old': "原路径";
327
439
  readonly 'import.paths.new': "新路径";
328
440
  readonly 'import.paths.unresolved': "还有 {count} 条路径未映射";
441
+ readonly 'snapshots.title': "快照恢复";
442
+ readonly 'snapshots.hint': "恢复到导入前状态:整文件还原 settings/patch、卸载导入期间新增插件、补偿被修改文件。执行前会把当前文件备份到快照的 pre-restore 目录。";
443
+ readonly 'snapshots.empty': "暂无快照。执行导入时会自动创建安全快照。";
444
+ readonly 'snapshots.loading': "加载快照中…";
445
+ readonly 'snapshots.selectHint': "选择快照以预览恢复计划(dry-run,零写入):";
446
+ readonly 'snapshots.createdAt': "创建时间";
447
+ readonly 'snapshots.sourceZip': "来源备份";
448
+ readonly 'snapshots.status': "状态";
449
+ readonly 'snapshots.entries': "条目";
450
+ readonly 'snapshots.plugins': "插件";
451
+ readonly 'snapshots.status.pending': "进行中";
452
+ readonly 'snapshots.status.done': "已完成";
453
+ readonly 'snapshots.status.rolled-back': "已回滚";
454
+ readonly 'snapshots.status.unknown': "未知";
455
+ readonly 'snapshots.planTitle': "恢复计划预览";
456
+ readonly 'snapshots.noActions': "该快照无可用恢复动作(或全部跳过)。";
457
+ readonly 'snapshots.execute': "执行恢复";
458
+ readonly 'snapshots.executing': "恢复执行中…";
459
+ readonly 'snapshots.confirmRestore': "确认执行恢复?当前文件会先备份到快照的 pre-restore 目录,插件通过官方 dsh plugin remove 卸载。";
460
+ readonly 'snapshots.reportTitle': "恢复报告";
461
+ readonly 'snapshots.restored': "已还原";
462
+ readonly 'snapshots.removedPlugins': "已卸载插件";
463
+ readonly 'snapshots.manualHints': "需人工处理";
464
+ readonly 'snapshots.failed': "失败";
465
+ readonly 'snapshots.skipped': "跳过";
329
466
  readonly 'report.export.title': "导出完成";
330
467
  readonly 'report.import.title': "导入结果";
331
468
  readonly 'report.rollback.title': "回滚报告";
@@ -337,7 +474,46 @@ declare const zh: {
337
474
  readonly 'error.hint': "错误消息已自动脱敏,不会泄露任何密钥信息。";
338
475
  };
339
476
  /** 字典键联合(注册处 compile-time 校验) */
340
- type ConfigManagerKey = keyof typeof zh;
477
+ type ConfigManagerKey = keyof typeof zh$1;
478
+ //#endregion
479
+ //#region src/client/sync/sync-locales.d.ts
480
+ /**
481
+ * 远程同步设置区块(config-manager-sync)表面文案:zh 为源语言,en 镜像每个键。
482
+ * 独立命名空间、独立文件:不触碰共享的 locales.ts(并行会话已改),零冲突。
483
+ * 键集合经 `SyncKey` 类型在 client/index.ts 注册处做编译期校验。
484
+ */
485
+ declare const zh: {
486
+ readonly 'section.label': "远程同步";
487
+ readonly 'section.description': "通过 Git 私有仓库在设备间同步可移植配置(secret 永不参与同步)";
488
+ readonly privateRepoHint: "安全要求:同步仓库必须为私有仓库(public 仓库会公开你的配置内容)。认证 token 仅用于仓库访问,绝不写入同步文件、提交内容或日志。";
489
+ readonly 'config.title': "仓库配置";
490
+ readonly 'config.repoUrl': "仓库地址";
491
+ readonly 'config.repoUrlHint': "Git 私有仓库地址(https / ssh / 本地路径)。认证 token 请使用下方凭据字段,不要拼入地址。";
492
+ readonly 'config.token': "认证 token";
493
+ readonly 'config.tokenHint': "将安全写入 DSH credentials(引用名 {ref}),不会写入同步文件或日志。留空表示沿用已保存的凭据。";
494
+ readonly 'config.tokenSaved': "凭据已配置";
495
+ readonly 'config.gitBin': "git 可执行文件(可选)";
496
+ readonly 'config.gitBinHint': "缺省使用 PATH 中的 git。";
497
+ readonly 'status.title': "同步状态";
498
+ readonly 'status.never': "从未同步";
499
+ readonly 'action.push': "推送到远端";
500
+ readonly 'action.pull': "拉取差异预览";
501
+ readonly 'action.pushing': "正在推送…";
502
+ readonly 'action.pulling': "正在拉取…";
503
+ readonly 'push.title': "推送结果";
504
+ readonly 'pull.title': "拉取差异预览";
505
+ readonly 'pull.previewHint': "以上为只读差异预览,不会执行导入。v1 暂不提供一键导入接线;如需应用远端配置,请使用「导入恢复」向导手动导入导出的备份。";
506
+ readonly 'pull.needsReview': "包含需要人工决策的项(冲突 / 密钥 / 依赖 / 安装)";
507
+ readonly 'pull.empty': "远端快照与本地一致(无变更)";
508
+ readonly 'change.total': "共 {total} 项变更";
509
+ readonly 'sections.title': "同步分区";
510
+ readonly 'warnings.title': "分区告警";
511
+ readonly 'common.close': "关闭";
512
+ readonly 'common.retry': "重试";
513
+ readonly 'common.loading': "加载中…";
514
+ };
515
+ /** 字典键联合(注册处 compile-time 校验) */
516
+ type SyncKey = keyof typeof zh;
341
517
  //#endregion
342
518
  //#region src/client/ConfigManagerSection.d.ts
343
519
  type ConfigManagerSectionProps = PropsRuntime<'settings.section'> & ConfigManagerSectionInjected & {
@@ -356,11 +532,90 @@ interface ImportWizardViewProps {
356
532
  t: TranslateNS<'config-manager'>;
357
533
  }
358
534
  //#endregion
535
+ //#region src/sync/sync-engine.d.ts
536
+ interface SyncPushReport {
537
+ ok: boolean;
538
+ snapshotId: string;
539
+ /** 实际进入同步的 portable 分区 */
540
+ sections: SectionId[];
541
+ /** 分区级告警(单项失败不拖垮整体,§34.17 语义) */
542
+ warnings: string[];
543
+ message?: string;
544
+ }
545
+ /** 差异报告中的单个变更项(PlanItem 摘要,不含敏感细节) */
546
+ interface PullChange {
547
+ id: string;
548
+ adapter: SectionId;
549
+ kind: PlanItemKind;
550
+ description: string;
551
+ severity: PlanItem['severity'];
552
+ }
553
+ interface SyncPullReport {
554
+ ok: boolean;
555
+ snapshotId: string;
556
+ changes: PullChange[];
557
+ /** 是否存在需要人工决策的项(Conflict / MissingSecret / MissingDependency / Install / 路径问题) */
558
+ needsReview: boolean;
559
+ message?: string;
560
+ }
561
+ //#endregion
562
+ //#region src/client/sync/sync-api.d.ts
563
+ /** GET /sync/status 响应:配置/凭据/上次同步的只读事实(无任何 secret 值) */
564
+ interface SyncStatusResponse {
565
+ ok: boolean;
566
+ /** 是否已保存过仓库配置(sync-config.json) */
567
+ configured: boolean;
568
+ /** 上次使用的仓库地址(不含 token,可回显) */
569
+ repoUrl?: string;
570
+ gitBin?: string;
571
+ /** DSH credentials 中是否已存在 token(describe 只报状态,值永不返回) */
572
+ credentialConfigured: boolean;
573
+ credentialWritable: boolean;
574
+ /** sync-state.lastSyncAt;'' = 从未同步 */
575
+ lastSyncAt?: string;
576
+ /** sync-state.sections 条目数 */
577
+ sectionCount: number;
578
+ transport?: {
579
+ type: string;
580
+ ref: string;
581
+ };
582
+ }
583
+ /** push 请求体(token 可选:非空则 Host 先写入 DSH credentials 再使用) */
584
+ interface SyncPushPayload {
585
+ repoUrl: string;
586
+ gitBin?: string;
587
+ token?: string;
588
+ }
589
+ /** pull 请求体(strategy 缺省 merge:冲突保留待决策;snapshotId 缺省 = 最新) */
590
+ interface SyncPullPayload extends SyncPushPayload {
591
+ strategy?: 'merge' | 'replace' | 'skipExisting';
592
+ snapshotId?: string;
593
+ }
594
+ /** 远程同步浏览器半数据入口(settings.section: config-manager-sync 的注入业务面) */
595
+ declare class SyncApi {
596
+ /** 读取同步状态(配置 / 凭据 / 上次同步时间 / 分区数) */
597
+ status(): Promise<SyncStatusResponse>;
598
+ /** 推送:导出 portable 分区 → 提交到私有 Git 仓库 → 更新 sync-state */
599
+ push(payload: SyncPushPayload): Promise<SyncPushReport>;
600
+ /** 拉取差异预览:拉取远端最新快照 → 只读分析(绝不执行导入) */
601
+ pull(payload: SyncPullPayload): Promise<SyncPullReport>;
602
+ }
603
+ //#endregion
604
+ //#region src/client/sync/SyncSettingsView.d.ts
605
+ interface SyncSettingsSectionInjected {
606
+ api: SyncApi;
607
+ }
608
+ type SyncSettingsViewProps = PropsRuntime<'settings.section'> & SyncSettingsSectionInjected & {
609
+ t: TranslateNS<'config-manager-sync'>;
610
+ };
611
+ //#endregion
359
612
  //#region src/client/index.d.ts
360
613
  declare module '@deepseek-ai/dsh-client-ui-slots' {
361
614
  interface LocaleNamespaceMap {
362
615
  /** Config Manager 表面文案。 */
363
616
  'config-manager': ConfigManagerKey;
617
+ /** 远程同步设置区块文案(m-sync-ui)。 */
618
+ 'config-manager-sync': SyncKey;
364
619
  }
365
620
  }
366
621
  /** 必需服务(fiber inject 等待 —— slots/locale 必须先就绪)。 */
@@ -371,7 +626,7 @@ declare const inject: string[];
371
626
  */
372
627
  declare function apply(ctx: ClientContext): void;
373
628
  //#endregion
374
- export { type ConfigManagerApiError, type ConfigManagerKey, type ConfigManagerSectionProps, type DownloadResult, type ExportViewProps, type ImportWizardViewProps, type ServiceStatus, type UploadResponse, apply, inject };
629
+ export { type ConfigManagerApiError, type ConfigManagerKey, type ConfigManagerSectionProps, type DownloadResult, type ExportViewProps, type ImportWizardViewProps, type ServiceStatus, type SyncKey, type SyncSettingsViewProps, type UploadResponse, apply, inject };
375
630
 
376
631
  return module.exports;
377
632
  }