@im-nobsidian/core 0.14.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -82,7 +82,7 @@ declare const ConfigSchema: z.ZodObject<{
82
82
  }>;
83
83
  sync: z.ZodObject<{
84
84
  direction: z.ZodDefault<z.ZodEnum<["push", "pull", "both"]>>;
85
- conflictStrategy: z.ZodDefault<z.ZodEnum<["local-first", "remote-first", "manual", "duplicate"]>>;
85
+ conflictStrategy: z.ZodDefault<z.ZodEnum<["local-first", "remote-first", "manual", "duplicate", "merge"]>>;
86
86
  autoSync: z.ZodDefault<z.ZodBoolean>;
87
87
  autoSyncInterval: z.ZodDefault<z.ZodNumber>;
88
88
  fullReconcileInterval: z.ZodDefault<z.ZodNumber>;
@@ -93,8 +93,8 @@ declare const ConfigSchema: z.ZodObject<{
93
93
  notifications: z.ZodDefault<z.ZodEnum<["silent", "default"]>>;
94
94
  }, "strip", z.ZodTypeAny, {
95
95
  notifications: "silent" | "default";
96
- direction: "push" | "both" | "pull";
97
- conflictStrategy: "manual" | "local-first" | "remote-first" | "duplicate";
96
+ direction: "push" | "pull" | "both";
97
+ conflictStrategy: "local-first" | "remote-first" | "manual" | "duplicate" | "merge";
98
98
  autoSync: boolean;
99
99
  autoSyncInterval: number;
100
100
  fullReconcileInterval: number;
@@ -104,8 +104,8 @@ declare const ConfigSchema: z.ZodObject<{
104
104
  createDatabases: boolean;
105
105
  }, {
106
106
  notifications?: "silent" | "default" | undefined;
107
- direction?: "push" | "both" | "pull" | undefined;
108
- conflictStrategy?: "manual" | "local-first" | "remote-first" | "duplicate" | undefined;
107
+ direction?: "push" | "pull" | "both" | undefined;
108
+ conflictStrategy?: "local-first" | "remote-first" | "manual" | "duplicate" | "merge" | undefined;
109
109
  autoSync?: boolean | undefined;
110
110
  autoSyncInterval?: number | undefined;
111
111
  fullReconcileInterval?: number | undefined;
@@ -219,8 +219,8 @@ declare const ConfigSchema: z.ZodObject<{
219
219
  };
220
220
  sync: {
221
221
  notifications: "silent" | "default";
222
- direction: "push" | "both" | "pull";
223
- conflictStrategy: "manual" | "local-first" | "remote-first" | "duplicate";
222
+ direction: "push" | "pull" | "both";
223
+ conflictStrategy: "local-first" | "remote-first" | "manual" | "duplicate" | "merge";
224
224
  autoSync: boolean;
225
225
  autoSyncInterval: number;
226
226
  fullReconcileInterval: number;
@@ -278,8 +278,8 @@ declare const ConfigSchema: z.ZodObject<{
278
278
  };
279
279
  sync: {
280
280
  notifications?: "silent" | "default" | undefined;
281
- direction?: "push" | "both" | "pull" | undefined;
282
- conflictStrategy?: "manual" | "local-first" | "remote-first" | "duplicate" | undefined;
281
+ direction?: "push" | "pull" | "both" | undefined;
282
+ conflictStrategy?: "local-first" | "remote-first" | "manual" | "duplicate" | "merge" | undefined;
283
283
  autoSync?: boolean | undefined;
284
284
  autoSyncInterval?: number | undefined;
285
285
  fullReconcileInterval?: number | undefined;
@@ -327,7 +327,9 @@ type SyncDirection = "push" | "pull" | "both";
327
327
  type FileType = "file" | "folder-note" | "folder-only" | "db-row";
328
328
  type SyncStatus = "synced" | "pending" | "conflict" | "error";
329
329
  type OperationType = "create" | "update" | "delete" | "move";
330
- type ConflictStrategy = "local-first" | "remote-first" | "manual" | "duplicate";
330
+ /** 양쪽이 바뀌었을 때 무엇이 이기나 — 설정 검증(`ConfigSchema`)이 이 목록을 읽는다. */
331
+ declare const CONFLICT_STRATEGIES: readonly ["local-first", "remote-first", "manual", "duplicate", "merge"];
332
+ type ConflictStrategy = (typeof CONFLICT_STRATEGIES)[number];
331
333
  interface SyncRecord {
332
334
  readonly id: string;
333
335
  readonly obsidianPath: string;
@@ -514,7 +516,9 @@ interface ViewEdit {
514
516
  readonly view: string;
515
517
  /** 이름을 바꿨으면 옛 이름. */
516
518
  readonly from?: string;
517
- /** 올린 것 — 이름 · 열 · 정렬 · 필터. */
519
+ /** 볼트에서 더해 Notion 에 만든 보기 · 지워 Notion 에서 지운 보기. 없으면 고친 보기. */
520
+ readonly action?: "created" | "deleted";
521
+ /** 올린 것 — 이름 · 열 · 정렬 · 필터. 만들고 지운 보기는 비었다. */
518
522
  readonly changed: readonly ("name" | "columns" | "sort" | "filter")[];
519
523
  }
520
524
  /** 고친 사이드카 하나가 Notion DB 에 한 일 — {@link PushResult.schemaEdits}. */
@@ -530,10 +534,11 @@ interface SchemaEdit {
530
534
  /** 설정(수식 · 숫자 형식 · 옵션)을 바꾼 속성. */
531
535
  readonly redefined: readonly string[];
532
536
  /**
533
- * 지운 선택 옵션 — 속성 이름 → 옵션 이름. Notion 은 그 옵션을 가진 행의 값을 비운다(옵션 이름을 바꾼 것도 지우고
534
- * 새로 만든 것이다). 없으면 지운 옵션이 없다.
537
+ * 지운 선택 옵션 — 속성 이름 → 옵션 이름. Notion 은 그 옵션을 가진 행의 값을 비운다. 없으면 지운 옵션이 없다.
535
538
  */
536
539
  readonly droppedOptions?: ReadonlyArray<readonly [string, readonly string[]]>;
540
+ /** 이름을 바꾼 선택 옵션 — 속성 이름 · 옛 이름 · 새 이름. 그 값을 가진 Notion 행도 새 이름으로 옮긴다. */
541
+ readonly renamedOptions?: ReadonlyArray<readonly [string, string, string]>;
537
542
  }
538
543
  /** 볼트에서 바꾼 DB 속성 이름 하나 — {@link PushResult.renamedProperties}. */
539
544
  interface PropertyRename {
@@ -608,12 +613,27 @@ interface PullResult {
608
613
  readonly restored: number;
609
614
  /** 되살린(dry-run 은 되살릴) 노트 · 행의 경로 — {@link restored} 의 목록. 없으면 생략. */
610
615
  readonly restoredPaths?: readonly string[];
616
+ /**
617
+ * 양쪽이 다른 줄을 고쳐 받은 원격에 로컬 편집을 합친 노트 · 행(`sync.conflictStrategy: "merge"`) — {@link updated} 에도 센다.
618
+ * 합친 글은 아직 Notion 에 없다 — 이어지는 push(`sync` 는 같은 실행)가 올린다. 없으면 생략.
619
+ */
620
+ readonly mergedPaths?: readonly string[];
621
+ /**
622
+ * 상태 기록에 없던 같은 자리의 노트 · 행을 그 Notion 페이지와 다시 이은 것(P7) — 상태 DB 를 잃었거나 처음 잇는 볼트.
623
+ * 새로 받은 것({@link created})에 세지 않는다. 글이 달라 충돌로 이은 것은 {@link conflicts} 에도 든다. 없으면 생략.
624
+ */
625
+ readonly relinkedPaths?: readonly string[];
626
+ /**
627
+ * dry-run 만 — 상태 기록에 Notion 과 이은 노트가 없어 실제 pull 은 같은 자리의 노트를 먼저 다시 잇는다(P7). 미리 보기는
628
+ * 노트 글을 받아 견주지 않아 그 노트들도 {@link created} 로 센다. 이을 노트가 없으면 생략.
629
+ */
630
+ readonly relinkPending?: true;
611
631
  /**
612
632
  * 볼트에서 고쳐 덮어쓰지 않은 사이드카(`.notion.json`) — push 하면 고친 속성을 Notion 에 올린다(ADR-045). 없으면 생략.
613
633
  */
614
634
  readonly heldSidecars?: readonly string[];
615
635
  /**
616
- * 볼트에서 보기를 고쳐 덮어쓰지 않은 `.base` — push 하면 고친 보기 이름 · 열 · 정렬 · 필터를 Notion 에 올린다(ADR-046).
636
+ * 볼트에서 보기를 고쳐 덮어쓰지 않은 `.base` — push 하면 고친 보기 이름 · 열 · 정렬 · 필터와 더하고 지운 보기를 Notion 에 올린다(ADR-046).
617
637
  * 없으면 생략.
618
638
  */
619
639
  readonly heldBases?: readonly string[];
@@ -632,7 +652,7 @@ interface PullResult {
632
652
  readonly moved?: readonly RemoteMove[];
633
653
  /** Notion 에서 옮겼지만 볼트에서 옮기지 않은 것과 그 까닭. */
634
654
  readonly moveSkipped?: readonly RemoteMoveSkip[];
635
- /** 옮기거나 이름을 바꾼 노트를 가리키던 링크를 고친 노트 — 없으면 고친 것이 없다. */
655
+ /** 옮기거나 이름을 바꾼 노트를 가리키던 링크를 고친 노트 — 없으면 고친 것이 없다. 이 연결이 보지 않는 노트는 볼트 맨 위 기준 경로다. */
636
656
  readonly relinked?: readonly string[];
637
657
  /**
638
658
  * Notion 에 새로 생겼지만 동기화에서 뺀 자리(paths · `.im-nobsidian-ignore`)에 놓일 것이라 받지 않은 페이지 —
@@ -720,6 +740,14 @@ interface ChildTag {
720
740
  readonly tag: string;
721
741
  }
722
742
 
743
+ /** push 가 앵커 링크를 풀 때 쓰는 것 — 쓰기 전에 대상 페이지의 블록을 읽어 둔다(변환은 기다리지 않는다). */
744
+ interface AnchorLookup {
745
+ /** 올리는 노트의 페이지 — `[[#제목]]` 의 대상. 아직 만들지 않았으면 null. */
746
+ readonly selfPageId: string | null;
747
+ /** 그 페이지에서 앵커가 가리키는 블록 — 못 찾았으면 null. */
748
+ blockOf(pageId: string, anchor: string): string | null;
749
+ }
750
+
723
751
  type ConversionPath = "markdown-api" | "block-api";
724
752
  interface ProcessorInput {
725
753
  readonly content: string;
@@ -765,6 +793,8 @@ interface ConversionContext {
765
793
  readonly path: ConversionPath;
766
794
  readonly filePath: string;
767
795
  readonly parentMode?: "page" | "database";
796
+ /** push — 제목 · 블록으로 가는 위키링크를 Notion 블록 링크로 풀 때 쓴다(미리 읽은 대상 페이지의 블록). */
797
+ readonly anchors?: AnchorLookup;
768
798
  }
769
799
  interface Processor {
770
800
  readonly name: string;
@@ -1523,6 +1553,8 @@ interface DatabaseMeta {
1523
1553
  readonly parentPageId?: string | null;
1524
1554
  /** DB 의 아이콘 · 커버 · 설명 · 제목 표시 — 받은 그대로. */
1525
1555
  readonly appearance?: DatabaseAppearance;
1556
+ /** 휴지통에 있다 — 링크드 뷰 블록을 지우면 컨테이너가 이렇게 남는다. 아니면 없다. */
1557
+ readonly inTrash?: true;
1526
1558
  }
1527
1559
  /** DB 자체의 꾸밈 — 행이 아니라 DB 의 것이다. 값은 Notion 이 준 그대로(`icon` · `cover` 는 페이지와 같은 꼴). */
1528
1560
  interface DatabaseAppearance {
@@ -2394,7 +2426,7 @@ declare function isRemoteDeletion(conflict: Conflict): boolean;
2394
2426
  declare function applicableChoices(conflict: Conflict): readonly ResolutionChoice[];
2395
2427
  /**
2396
2428
  * 전략이 이 충돌에 고르는 것. 원격에서 지운 노트는 복제할 원격이 없어 duplicate 도 «로컬 유지» —
2397
- * 둘 다 잃는 것이 없다. manual 은 자동 병합인데 지운 원격과는 병합할 수 없어 던진다.
2429
+ * 둘 다 잃는 것이 없다. manual · merge 는 자동 병합인데 지운 원격과는 병합할 수 없어 던진다.
2398
2430
  */
2399
2431
  declare function choiceForStrategy(conflict: Conflict, strategy: ConflictStrategy): ResolutionChoice;
2400
2432
  interface ResolutionResult {
@@ -2437,6 +2469,14 @@ declare class ConflictResolver {
2437
2469
  generateDiff(conflict: Conflict): string;
2438
2470
  }
2439
2471
 
2472
+ /** 볼트 전체 — 이 연결이 보지 않는 노트의 링크도 고칠 때({@link LinkUpdater}). */
2473
+ interface OutsideVault {
2474
+ /** 볼트 맨 위 기준의 VaultFS — 연결 폴더 · 경로 패턴으로 좁히지 않은 것. */
2475
+ readonly fs: VaultFS;
2476
+ /** 이 연결의 폴더(볼트 맨 위 기준). 볼트 맨 위면 `""`. */
2477
+ readonly folder: string;
2478
+ }
2479
+
2440
2480
  interface BaseFileOptions {
2441
2481
  readonly databaseId: string;
2442
2482
  readonly databaseName: string;
@@ -2671,6 +2711,16 @@ interface FolderDatabaseReport extends FolderDatabaseDraft {
2671
2711
  readonly pagesToRows: number;
2672
2712
  }
2673
2713
 
2714
+ /** 사용자가 만든 `.base` 의 폴더 필터가 옮긴 폴더를 가리킨다 — 묻고 고친다. */
2715
+ interface UserBaseFilterFix {
2716
+ /** `.base` 경로. */
2717
+ readonly path: string;
2718
+ /** 필터가 가리키는 옛 폴더. */
2719
+ readonly from: string;
2720
+ /** 그 폴더의 새 자리. */
2721
+ readonly to: string;
2722
+ }
2723
+
2674
2724
  /**
2675
2725
  * 한 오케스트레이터의 작업은 한 번에 하나만 돈다(S-09).
2676
2726
  *
@@ -2685,7 +2735,7 @@ interface FolderDatabaseReport extends FolderDatabaseDraft {
2685
2735
  * 긴 sync(실볼트 pull 500초) 동안 주기 sync 가 쌓인다.
2686
2736
  */
2687
2737
  /** 잠그는 작업 — 볼트 · 상태 DB · 원격을 바꾸거나 이번 실행의 기준을 정하는 것. */
2688
- type GatedOperation = "push" | "pull" | "sync" | "status" | "fetch" | "resolve" | "discard" | "prepare-database";
2738
+ type GatedOperation = "push" | "pull" | "sync" | "status" | "fetch" | "resolve" | "discard" | "prepare-database" | "base-filters";
2689
2739
  declare function operationLabel(operation: GatedOperation): string;
2690
2740
  declare class SyncBusyError extends Error {
2691
2741
  /** 이미 도는 작업. */
@@ -2732,7 +2782,9 @@ declare class SyncOrchestrator {
2732
2782
  private readonly inspector;
2733
2783
  private readonly recovery;
2734
2784
  private readonly gate;
2735
- constructor(config: Config, stateDb: IStateDB, notionClient: NotionClient, vaultFs: VaultFS, customFetch?: typeof globalThis.fetch);
2785
+ constructor(config: Config, stateDb: IStateDB, notionClient: NotionClient, vaultFs: VaultFS, customFetch?: typeof globalThis.fetch,
2786
+ /** 볼트 전체 — 이 연결이 보지 않는 노트에서도 옮긴 노트로 가는 링크를 고친다(연결 폴더 · 경로 패턴). */
2787
+ outside?: OutsideVault);
2736
2788
  /** 도는 작업 — 없으면 null(S-09). 부른 쪽이 겹칠 요청을 미리 거를 때 쓴다. */
2737
2789
  get runningOperation(): GatedOperation | null;
2738
2790
  push(options?: PushOptions): Promise<PushResult>;
@@ -2741,6 +2793,14 @@ declare class SyncOrchestrator {
2741
2793
  * 목록에 없으므로, 그대로 돌리면 「볼트에서 지움」 으로 보고 Notion 페이지를 지우거나 되살리려 한다.
2742
2794
  */
2743
2795
  private assertConnectionScope;
2796
+ /**
2797
+ * @param mergedByPull sync dry-run 만 — 앞선 pull dry-run 이 합칠 노트. 실제 sync 는 합친 뒤 원격을 본 것으로
2798
+ * 적어 push 가 올린다 — dry-run 은 받지 않아 원격이 바뀐 그대로라, 원격을 보고 거절하지 않는다.
2799
+ */
2800
+ /**
2801
+ * @param relinkedByPull 같은 sync 의 dry-run pull 이 다시 이을 것이라고 미리 봤다 — 실제 sync 는 받으며 먼저 잇고 올리므로
2802
+ * 상태 기록이 비었어도 막지 않는다({@link assertVaultLinked}).
2803
+ */
2744
2804
  private executePush;
2745
2805
  /**
2746
2806
  * 볼트에서 지운 이 노트를 Notion 에서 지우지 않아 다음 pull 이 되살리나 — deleteSync 가 꺼져 있고 pull 이
@@ -2773,6 +2833,11 @@ declare class SyncOrchestrator {
2773
2833
  */
2774
2834
  status(options?: StatusOptions): Promise<StatusResult>;
2775
2835
  private executeStatus;
2836
+ /**
2837
+ * 다음 pull 이 Notion 에서 바꾼 제목으로 이름을 바꿀 행 — 바꾸지 않고 본다. 행 이름은 DB 받기가 바꾸므로
2838
+ * 페이지 이름 바꾸기({@link followRemoteRenames})에 없다. 판정은 받기와 같다(`retitledRowTarget`).
2839
+ */
2840
+ private previewRowRenames;
2776
2841
  /**
2777
2842
  * 로컬만 본다 — 원격 기준을 정하지 않아 도는 작업과 겹쳐도 된다. 변경은 push 가 쓰는 판정 그대로다
2778
2843
  * (옮긴 노트 · 폴더 포함). 상태 DB 는 바꾸지 않는다.
@@ -2839,6 +2904,12 @@ declare class SyncOrchestrator {
2839
2904
  * 않는다. 되돌릴 원본이 없는 것은 이유와 함께 거절한다.
2840
2905
  */
2841
2906
  discardLocalChange(path: string): Promise<void>;
2907
+ /**
2908
+ * 동기화가 옮긴 폴더를 가리키는 사용자 `.base` 의 폴더 필터 — 말없이 고치지 않고 고칠지 묻는다. 없으면 빈 목록.
2909
+ */
2910
+ userBaseFilterFixes(): UserBaseFilterFix[];
2911
+ /** {@link userBaseFilterFixes} 를 물은 답대로 — 고치면 고친 `.base` 경로. 어느 쪽이든 다시 묻지 않는다. */
2912
+ resolveUserBaseFilterFixes(accept: boolean): Promise<string[]>;
2842
2913
  /**
2843
2914
  * 볼트에서 만든 노트 폴더를 Notion DB 로 올릴 준비 — frontmatter · `.base` 로 사이드카를 써 둔다(#75).
2844
2915
  * Notion 에는 쓰지 않는다. 다음 push 가 DB 를 만들고 노트를 행으로 올린다(ADR-036 · ADR-037).
@@ -2857,7 +2928,11 @@ interface PathFilterConfig {
2857
2928
  declare class NodeVaultFS implements VaultFS {
2858
2929
  private readonly rootPath;
2859
2930
  private readonly filter;
2860
- constructor(rootPath: string, pathConfig?: PathFilterConfig);
2931
+ /**
2932
+ * @param ignoreFile 폴더의 `.im-nobsidian-ignore` 를 따른다 — 볼트 전체를 보는 쪽(다른 연결의 노트에서 링크를 고칠 때)은
2933
+ * 그 폴더를 맡은 연결의 제외 목록을 따르지 않는다.
2934
+ */
2935
+ constructor(rootPath: string, pathConfig?: PathFilterConfig, ignoreFile?: boolean);
2861
2936
  excludesPath(path: string, kind?: "file" | "folder"): boolean;
2862
2937
  private loadImNobsidianIgnore;
2863
2938
  readFile(path: string): Promise<string>;
@@ -2999,8 +3074,16 @@ declare class ImageHandler {
2999
3074
  *
3000
3075
  * @param pageId 본문을 받은 페이지 — 그 페이지에 올린 것만 되찾는다
3001
3076
  * @param notePath 노트 경로 — 옛 캡션의 파일을 push 와 같은 사다리로 찾는다
3077
+ * @param adoptFrom 상태 기록에 없던 같은 자리의 노트 글(P7 다시 잇기) — {@link adoptLocalEmbed}
3078
+ */
3079
+ restoreUploadedMedia(markdown: string, pageId?: string, notePath?: string, adoptFrom?: string): Promise<string>;
3080
+ /**
3081
+ * 상태 DB 를 잃고 다시 잇는 노트(P7, ADR-049)의 미디어 — 올린 미디어 기록도 함께 잃어, push 가 올린 그림을 사본으로 받아
3082
+ * 노트가 달라졌다(실측: `![[img/blue.png]]` → `![[attachments/blue-<해시>.png]]` 로 충돌). 받은 미디어의 이름과 바이트가
3083
+ * 노트가 가리키는 볼트 파일과 같으면 그 임베드로 되살리고 받은 것으로 적는다 — 다음 push 가 그 블록을 둔다. 바이트를
3084
+ * 견주므로 Notion 에서 같은 이름의 다른 파일로 바꾼 것은 되살리지 않는다. 받지 못하거나 다르면 null — 사본을 받는다.
3002
3085
  */
3003
- restoreUploadedMedia(markdown: string, pageId?: string, notePath?: string): Promise<string>;
3086
+ private adoptLocalEmbed;
3004
3087
  /** 적어 둔 업로드면 되살릴 임베드 대상. 볼트에서 그 파일이 사라졌으면 null — 사본을 받는다. */
3005
3088
  private knownEmbedTarget;
3006
3089
  /** 미디어 URL 이 가리키는 파일 이름 — 서명 URL 은 경로 끝, 내부 참조는 `attachment:` 뒤. */
@@ -3245,6 +3328,8 @@ interface BaseViewRecord {
3245
3328
  readonly lossyFilter?: true;
3246
3329
  /** 그때 Notion 보기의 지문({@link viewFingerprint}) — 그 사이 Notion 에서도 고쳤는지 가른다. */
3247
3330
  readonly notion: string;
3331
+ /** 이 보기에서 올리지 않는 값의 지문({@link viewRestOf}). 예전 기록에는 없다. */
3332
+ readonly rest?: string;
3248
3333
  }
3249
3334
  interface BasesSort {
3250
3335
  readonly property: string;
@@ -3266,6 +3351,16 @@ interface DbBaseFile {
3266
3351
  readonly views?: readonly BaseViewRecord[];
3267
3352
  /** 올리지 않는 나머지의 지문(`restSignature`) — 같아야 고친 것을 모두 올린 것이다. */
3268
3353
  readonly rest?: string;
3354
+ /**
3355
+ * 보기 말고의 키의 지문(`docRestOf`) — 보기를 더하거나 지운 `.base` 는 {@link rest} 로 견줄 수 없어 보기마다의
3356
+ * 지문(`BaseViewRecord.rest`)과 이것으로 견준다. 예전 기록에는 없다.
3357
+ */
3358
+ readonly docRest?: string;
3359
+ /**
3360
+ * 링크드 뷰 컨테이너의 `.base` 면 행을 가진 원본 DB(줄인 id) — 원본 DB 폴더에 놓이고 그 폴더를 가리킨다. 원본의
3361
+ * 옛 이름 산출물을 치울 때 지우지 않고, push 가 이 `.base` 임베드를 컨테이너 블록으로 되돌린다.
3362
+ */
3363
+ readonly linkedTo?: string;
3269
3364
  }
3270
3365
  /**
3271
3366
  * DB 마다 실제로 기록한 `.base` 경로와 DB 제목 — 인라인 DB placeholder 를 `.base` 임베드로 바꿀 때
@@ -3286,6 +3381,12 @@ declare class DbBaseFiles {
3286
3381
  /** 기록한 DB 모두 — 키는 줄인 DB id. */
3287
3382
  all(): Array<[string, DbBaseFile]>;
3288
3383
  set(databaseId: string, info: DbBaseFile): void;
3384
+ /** 기록을 지운다 — Notion 에서 지운 링크드 뷰. */
3385
+ delete(databaseId: string): void;
3386
+ /** 이 DB 를 원본으로 둔 링크드 뷰의 `.base` 경로. */
3387
+ linkedBasesOf(databaseId: string): string[];
3388
+ /** 이 경로에 쓴 링크드 뷰 컨테이너(줄인 id) — 없으면 null. */
3389
+ linkedContainerAt(basePath: string): string | null;
3289
3390
  /** 상태 메타에서 읽는다 — 값이 그대로면 읽어 둔 것을 쓴다. 없거나 깨졌으면 비어 있다 — 이번 실행이 기록하는 것부터 다시 쌓는다. */
3290
3391
  private load;
3291
3392
  }
@@ -3397,7 +3498,19 @@ interface PlannedRow {
3397
3498
  readonly restore?: boolean;
3398
3499
  /** Notion 에서 DB 안으로 옮긴 페이지가 행이 되며 옮길 것 — 노트와 하위 페이지 폴더 · 옮긴 DB 의 폴더(ADR-047). */
3399
3500
  readonly moves?: readonly RemoteMove[];
3501
+ /** 로컬도 고친 행을 실제 pull 이 받지 않는 까닭 — 없으면 받는다. */
3502
+ readonly resolution?: PlannedResolution;
3400
3503
  }
3504
+ /**
3505
+ * 로컬도 고친 노트를 실제 pull 이 어떻게 처리하나 — 충돌로 남김 · 합침(merge) · 받지 않음(원격이 그대로거나
3506
+ * local-first). dry-run 이 미리 알린다.
3507
+ */
3508
+ type PlannedResolution = {
3509
+ readonly action: "conflict";
3510
+ readonly conflict: Conflict;
3511
+ } | {
3512
+ readonly action: "merge" | "skip";
3513
+ };
3401
3514
  /**
3402
3515
  * 행을 받는 진행 — 진행 표시가 페이지와 행을 한 목록 · 한 수로 보이게 한다. 행은 DB 를 조회해야 몇
3403
3516
  * 개인지 알아, 받기 전에 이 DB 에서 받을 행 수를 `planned` 로 알리고 행 하나를 마칠 때마다 `done` 을
@@ -3440,6 +3553,19 @@ declare class DatabaseSyncer {
3440
3553
  private renamedRows;
3441
3554
  /** 볼트에서 사라져 되살린 행의 경로 — pull 마감이 가져가 화면에 알린다(D8). */
3442
3555
  private restoredRows;
3556
+ /** 쓰다 끊긴 행을 알아본다 — {@link UpdateJournal}. */
3557
+ private readonly journal;
3558
+ /** merge 전략이 받은 행에 로컬 편집을 합친 행 — {@link takeMergedRows}. */
3559
+ private mergedRows;
3560
+ /** 상태 기록에 없던 같은 자리의 행 노트를 다시 이은 것(P7) — {@link takeRelinkedRows}. */
3561
+ private relinkedRows;
3562
+ /**
3563
+ * 이번 pull 을 시작할 때 Notion 과 이은 노트가 하나도 없었다 — 그때는 자연 이름에 있는 행 노트의 글이 달라도 다시
3564
+ * 잇는다({@link relinkExistingRow}). 오케스트레이터가 pull 을 시작할 때 정한다({@link beginPull}).
3565
+ */
3566
+ private unlinkedVault;
3567
+ /** 이번 pull 에서 다시 이으려고 고른 행 노트 경로 — 같은 이름의 두 행이 한 노트를 고르지 않게. */
3568
+ private readonly relinkClaims;
3443
3569
  /** Notion 에서 바뀐 속성을 행 노트에 옮긴 것 — pull 마감이 가져가 화면에 알린다(ADR-045). */
3444
3570
  private schemaFollowed;
3445
3571
  /** pull 이 마지막으로 쓴 사이드카 — 볼트에서 고친 것은 덮어쓰지 않는다(ADR-045). */
@@ -3448,6 +3574,10 @@ declare class DatabaseSyncer {
3448
3574
  private heldSidecars;
3449
3575
  /** 이번 pull 이 볼트에서 고친 것이라 덮어쓰지 않은 `.base` 경로(ADR-046). */
3450
3576
  private heldBases;
3577
+ /** 이번 pull 이 치운 링크드 뷰의 `.base`({@link takeRetiredBases}). */
3578
+ private readonly retiredBases;
3579
+ /** 이번 실행에서 받은 DB(줄인 id)의 기간 날짜 짝 키 — 그 DB 를 원본으로 둔 링크드 뷰의 `.base` 도 같게 쓴다. */
3580
+ private readonly rangeEnds;
3451
3581
  /**
3452
3582
  * 실제로 기록한 .base 경로/DB 제목 — placeholder 임베드 재작성(F22)의 SSOT. 이번 pull 이 조회하지
3453
3583
  * 않은 DB 의 것도 남아 있다({@link DbBaseFiles}).
@@ -3526,6 +3656,22 @@ declare class DatabaseSyncer {
3526
3656
  */
3527
3657
  movingInVault?: ReadonlySet<string>;
3528
3658
  }): Promise<PlannedRow[]>;
3659
+ /**
3660
+ * 받은 행이 지난 사본 그대로인가 — 렌더한 글이 달라도 받을 것이 없으면 그 사이 로컬 편집을 충돌로 올리지 않는다
3661
+ * (N-05). 본문은 지문으로, 본문 밖은 지난 사본의 속성과 견준다. 이 도구가 이 행을 쓰다 끊긴 원격도 받을 것이
3662
+ * 없다 — push 가 마저 올린다({@link UpdateJournal}).
3663
+ */
3664
+ private rowRemoteUnchanged;
3665
+ /**
3666
+ * dry-run 이 알릴, 로컬도 고친 행을 실제 pull 이 어떻게 처리할지 — 받은 행과 견주는 판정은 실제 pull 과 같다.
3667
+ * 첨부를 내려받지 않고 렌더하며 상태 DB 를 바꾸지 않는다. 로컬을 고치지 않았거나 읽지 못하면 null(받는다).
3668
+ */
3669
+ private previewRowResolution;
3670
+ /**
3671
+ * 수정 시각 · 편집자로 가르지 못한 행이 지난 사본 그대로인가 — 본문 지문과 본문 밖 속성으로({@link rowRemoteUnchanged}).
3672
+ * dry-run 이 실제 pull 처럼 받을 것이 없는 행을 세지 않게. 견줄 사본 · 지문이 없거나 본문을 읽지 못하면 아니다.
3673
+ */
3674
+ private unverifiedRowUnchanged;
3529
3675
  private planRows;
3530
3676
  /**
3531
3677
  * 이 DB 에서 볼 행을 조회한다. 범위(`paths`)가 이 DB 폴더에 닿지 않으면 조회하지 않는다 — 예전에는
@@ -3637,6 +3783,26 @@ declare class DatabaseSyncer {
3637
3783
  */
3638
3784
  private appearanceOf;
3639
3785
  private readAppearance;
3786
+ /**
3787
+ * 링크드 뷰 컨테이너의 `.base` 를 그 컨테이너의 보기(이름 · 필터 · 정렬)로 원본 DB 폴더에 쓴다. 행은 원본 DB 가
3788
+ * 갖는다(F25) — 폴더 필터도 원본 폴더를 가리킨다. 예전에는 링크드 뷰를 원본의 `.base` 로 몰아, 링크드 뷰가 고른
3789
+ * 보기가 볼트에 오지 않았다.
3790
+ *
3791
+ * 이름은 Notion 이 그 블록 위에 보이는 것처럼 「원본 제목 - 첫 보기 이름」 이다. 컨테이너 제목은 비어 온다.
3792
+ *
3793
+ * @returns `gone` — Notion 에서 컨테이너를 지웠다. 쓴 `.base` 를 치웠으니 부른 쪽이 연결을 잊는다.
3794
+ * `failed` — 읽지 못했다. 쓴 `.base` 는 그대로 두고 다음 pull 이 다시 본다.
3795
+ */
3796
+ pullLinkedView(containerId: string, owner: DatabaseSyncConfig): Promise<"written" | "gone" | "failed">;
3797
+ /** 링크드 뷰 `.base` 의 이름 — 같은 폴더의 다른 `.base` 가 쓰는 이름이면 컨테이너 id 앞 네 자리를 붙인다. */
3798
+ private linkedBaseName;
3799
+ /** Notion 에서 지운 링크드 뷰 — 쓴 `.base` 를 치우고 기록을 잊는다. */
3800
+ private retireLinkedView;
3801
+ /**
3802
+ * pull 이 쓴 그대로인 링크드 뷰 `.base` 를 지운다 — 볼트에서 고쳤으면 두고 알린다.
3803
+ * @returns 지웠나.
3804
+ */
3805
+ private removeLinkedBase;
3640
3806
  /** 볼트에서 고친 `.base` 를 덮어쓰거나 지우지 않았다고 한 번 알린다. */
3641
3807
  private warnEditedBase;
3642
3808
  /**
@@ -3676,9 +3842,12 @@ declare class DatabaseSyncer {
3676
3842
  * @param options.localPath 로컬 노트가 지금 있는 자리 — 코드 펜스 표기를 되살리는 근거(S-20).
3677
3843
  * 다른 폴더로 옮기기 전이면 옛 경로다. 기본은 `filePath`.
3678
3844
  */
3679
- renderRow(page: PageObjectResponse, filePath: string, options?: {
3845
+ renderRow(page: PageObjectResponse, filePath: string,
3846
+ /** `adoptFrom` — 다시 잇는 행 노트의 글(P7). 받은 미디어가 노트의 볼트 파일과 같으면 그 임베드로 되살린다. */
3847
+ options?: {
3680
3848
  downloadMedia?: boolean;
3681
3849
  localPath?: string;
3850
+ adoptFrom?: string;
3682
3851
  }): Promise<{
3683
3852
  content: string;
3684
3853
  title: string;
@@ -3708,6 +3877,23 @@ declare class DatabaseSyncer {
3708
3877
  private rowPathOwners;
3709
3878
  /** 되살린 행의 경로를 가져가고 비운다. */
3710
3879
  takeRestoredRows(): string[];
3880
+ /** pull 을 시작한다 — 이은 노트가 하나도 없는 볼트인지 적고 다시 잇기 장부를 비운다. */
3881
+ beginPull(unlinkedVault: boolean): void;
3882
+ /** 이번 받기에서 다시 이은 행의 경로를 가져가고 비운다. */
3883
+ takeRelinkedRows(): string[];
3884
+ /**
3885
+ * 상태 기록에 없는 행 노트가 이 행이 놓일 자리에 이미 있다 — 이 행 id 를 단 이름이 먼저, 그 다음 자연 이름. 페이지의
3886
+ * `claimExistingNote` 와 같은 규칙이다.
3887
+ */
3888
+ private claimExistingRow;
3889
+ /**
3890
+ * 상태 기록에 없던 행 노트를 이 행과 다시 잇는다(P7) — 페이지의 `relinkExistingNote` 와 같은 규칙. 글이 같으면 잇고, 다르면
3891
+ * 이 행 id 를 단 이름은 충돌 전략을 따르고 · 자연 이름은 이은 노트가 없는 볼트에서만 충돌로 잇는다. 잇지 않으면 null.
3892
+ * remote-first 는 `"write"` — 호출측이 받은 행으로 덮는다.
3893
+ */
3894
+ private relinkExistingRow;
3895
+ /** 이번 받기에서 로컬 편집을 합친 행의 경로를 가져가고 비운다. */
3896
+ takeMergedRows(): string[];
3711
3897
  /**
3712
3898
  * Notion 에서 다른 페이지 아래로 옮긴 DB 의 폴더를 볼트에서도 옮긴다 — 옮겼으면 그 이동. 옮기지 못하면 까닭을 남기고
3713
3899
  * 옛 자리에서 받는다.
@@ -3718,19 +3904,31 @@ declare class DatabaseSyncer {
3718
3904
  /** 볼트에서 옮기고 아직 올리지 않았나 — 이동 WAL, 또는 dry-run 이 옮겨 적지 않은 이번 이동. */
3719
3905
  private movedInVault;
3720
3906
  /**
3721
- * Notion 에서 다른 페이지 아래로 옮긴 발견 DB 의 폴더를 옮길 곳(ADR-047) — 제자리면 null.
3907
+ * Notion 에서 다른 페이지 아래로 옮기거나 이름을 바꾼 발견 DB 의 폴더를 옮길 곳(ADR-047 · {@link retitledFolderName})
3908
+ * — 제자리면 null.
3722
3909
  *
3723
3910
  * Notion 에서 DB 를 옮겨도 DB · 행의 수정 시각이 그대로라 받은 DB 의 부모로만 안다 — 전체 대조는 모든 DB 를 받으니
3724
3911
  * 거기서 보인다. 새 자리는 처음 발견할 때와 같다 — 부모 페이지의 하위 폴더 이름 그대로, 루트면 `databases` 선반.
3725
3912
  * 맨 위 폴더도 루트 아래로 본다(볼트에서 옮긴 DB 를 push 가 루트 아래에 둔다 — {@link DatabaseMover}).
3726
3913
  * 다음은 옮기지 않는다.
3727
- * - 부모가 블록(토글 · 열) 안 · 볼트가 모르는 페이지 — 볼트에 그 자리가 없다
3914
+ * - 부모가 블록(토글 · 열) 안 · 볼트가 모르는 페이지 — 볼트에 그 자리가 없다(이름만 따른다)
3728
3915
  * - 볼트에서 옮긴 DB 폴더 · 부모 노트를 아직 올리지 않았다 — 볼트가 먼저다(push 가 Notion 을 옮긴다)
3729
3916
  */
3730
3917
  private placementMoveOf;
3918
+ /**
3919
+ * Notion 에서 바꾼 DB 제목을 따른 폴더 이름(`sync.renameOnTitleChange`) — 바꿀 것이 없으면 null.
3920
+ *
3921
+ * 지난번에 받은 제목({@link DbBaseFiles})과 달라졌고, 폴더 이름이 그 옛 제목을 따르고 있을 때만 — 폴더를 만든 규칙
3922
+ * (`databaseFolderName`) 이나 `.base` 이름 규칙(`sanitizeFileName`, 볼트에서 바꿔 올린 이름) 그대로일 때다. 사용자가
3923
+ * 따로 정한 이름이면 두고, 새 이름도 지금 이름과 같은 규칙으로 짓는다. 같은 이름 DB 와 가르려 붙인 ` (id 조각)` 은
3924
+ * 떼고 견준다(F24) — 새 자리에서 다시 가른다.
3925
+ */
3926
+ private retitledFolderName;
3731
3927
  /** 이 폴더가 받는 DB — 설정한 DB 와 발견한 DB 에서. */
3732
3928
  private databaseAt;
3733
3929
  /** 이름을 바꾼 행을 가져가고 비운다. */
3930
+ /** 이번 pull 이 Notion 에서 지운 링크드 뷰라 치운 `.base` — 그것을 넣은 노트의 임베드를 뺀다({@link LinkUpdater.dropEmbeds}). */
3931
+ takeRetiredBases(): string[];
3734
3932
  takeRenamedRows(): {
3735
3933
  renamed: RemoteMove[];
3736
3934
  applied: RemoteMove[];
@@ -3740,6 +3938,17 @@ declare class DatabaseSyncer {
3740
3938
  * 든다. 추적하는 노트가 없으면 null.
3741
3939
  */
3742
3940
  private adoptedChildrenOf;
3941
+ /**
3942
+ * Notion 에서 바꾼 제목으로 행 이름을 바꿀 자리(`sync.renameOnTitleChange`) — 바꿀 것이 없으면 null.
3943
+ * 받기 · pull dry-run · status 가 같은 판정을 쓴다. 행의 하위 페이지 폴더(`행/`)도 새 이름으로 옮기며, 옮길 수
3944
+ * 없으면 이름을 바꾸지 않는다(예전처럼 제목만 받는다) — 그 까닭을 돌려준다.
3945
+ */
3946
+ retitledRowTarget(localFolder: string, record: SyncRecord, page: PageObjectResponse): Promise<{
3947
+ to: string;
3948
+ children: RemoteMove | null;
3949
+ } | {
3950
+ reason: string;
3951
+ } | null>;
3743
3952
  private pullDatabasePage;
3744
3953
  }
3745
3954
 
@@ -3756,6 +3965,11 @@ declare class WikilinkResolver implements Processor {
3756
3965
  readonly order = 20;
3757
3966
  constructor(resolve?: WikilinkResolverFn | undefined);
3758
3967
  process(input: ProcessorInput): ProcessorOutput;
3968
+ /**
3969
+ * `[[노트#제목]]` · `[[노트#^블록]]` · `[[#제목]]` → `[글자](https://www.notion.so/<페이지>#<블록>)`. 글자는 별칭,
3970
+ * 없으면 Obsidian 이 보이는 「노트 > 제목」 — pull 이 그 글자면 별칭을 붙이지 않는다. 대상 페이지 · 블록을 못 찾으면 null.
3971
+ */
3972
+ private anchorLink;
3759
3973
  }
3760
3974
 
3761
3975
  declare class CalloutTransformer implements Processor {
@@ -4507,6 +4721,15 @@ declare class FilteredVaultFS implements VaultFS {
4507
4721
  getFileStat(path: string): Promise<FileStatInfo | null>;
4508
4722
  }
4509
4723
 
4724
+ /**
4725
+ * 상태 기록에 Notion 페이지와 이은 노트가 하나도 없는데, 새로 만들 노트가 Notion 에 이미 있는 페이지 · 행과 이름이 겹친다 —
4726
+ * 상태 DB 를 잃었거나 처음 잇는 볼트다. 이대로 push 하면 그 노트들을 새 페이지로 또 만든다.
4727
+ */
4728
+ declare class UnlinkedVaultError extends Error {
4729
+ readonly clashes: readonly string[];
4730
+ constructor(clashes: readonly string[]);
4731
+ }
4732
+
4510
4733
  /**
4511
4734
  * 볼트 하나에 연결 여럿 (ADR-038) — 연결마다 볼트 안의 폴더 하나를 맡는다.
4512
4735
  *
@@ -4753,4 +4976,4 @@ declare function readColumnLayout(lines: readonly string[]): (ColumnPlace | unde
4753
4976
  /** 열 이름표 — `열 2/3 · 50%`. 비율이 없으면 `열 2/3`. */
4754
4977
  declare function columnLabel(place: ColumnPlace): string;
4755
4978
 
4756
- export { BaseFileGenerator, type BaseFileOptions, type BasePropertyOption, type BasePropertySchema, type BaseStatusGroup, type BaseSyncOptions, type BasesFilterNode, type BasesViewMapping, type BasesViewType, BlankLineCollapser, type BookmarkTarget, CONFIG_FILE, type CalendarEntry, type CalloutDesign, CalloutRestorer, CalloutTransformer, ChangeDetector, type ChangeDiff, ColorAnnotator, type ColumnPlace, type CompletenessFailure, type CompletenessLocalSource, type CompletenessOptions, type CompletenessRemoteSource, type CompletenessReport, type Config, ConfigManager, ConfigSchema, type Conflict, ConflictResolver, type ConflictStrategy, ConnectionBoundaryError, ConnectionScopeError, type ConversionContext, type ConversionPath, ConversionPipeline, type ConversionResult, type CoverConfig, type DBEntry, DB_VIEWS_FILE, DB_VIEWS_PATH, DEFAULT_CONFIG, DEFAULT_TITLE_PROPERTY, DEFAULT_WATCH_DEBOUNCE_MS, DIFF_SIGN, type DatabaseCompleteness, type DatabaseMove, type DatabaseSyncConfig, type DatabaseSyncResult, DatabaseSyncer, type DatabaseViewsConfig, type DeferredCode, type DegradeNote, type DesignColor, type DesignLine, type DesignSegment, type DiffHunk, type DiffLine, EmbedResolver, EntryEditor, type FailedOperation, type FidelityClassification, type FidelityContext, type FidelityDefect, type FidelityDefectForm, type FidelitySummary, type FileDownloadResult, FileHandler, type FileInfo, type FileRegistryEntry, type FileStatInfo, type FileSystemEntry, type FileType, type FileUploadResult, FileWatcher, type FilterCondition, FilteredVaultFS, type FolderDatabaseReport, type FolderMoveChange, FrontmatterExtractor, FrontmatterGenerator, type FullScanReason, GITIGNORE_ENTRY, type GatedOperation, type GroupByConfig, type GroupedEntries, IGNORE_FILE, INTERNAL_DIR, INTERNAL_DIR_GLOB, type IStateDB, type ImageDownloadResult, ImageHandler, type ImageReference, type InferredProperty, InlineAnnotationPreserver, InlineDBParser, type InlineStyle, type LineDiffOptions, type LineRange, type LocalChange, LocalImageRestorer, type LocalMoveAdoption, type LocalScan, type LocalScanOptions, type Logger, MARKER_BRAND, type MappingResult, type MappingType, MathNormalizer, MentionToWikilink, type MergeConflictRegion, type MergeResult, NOTION_COLOR_NAMES, NOTION_TOKEN_PREFIX, NOTION_TO_BASES_VIEW, type NestedFolderPage, type NestedFolderRecord, NodeVaultFS, type NonMdFileInfo, type NotionBlock, NotionBlockBuilder, NotionClient, type NotionClientOptions, type NotionColor, type NotionPageNode, type NotionRichText, type RichTextItem as NotionRichTextItem, type NotionSidecar, OBSIDIAN_CONFIG_DIR, type OperationType, type PageCompletenessRemoteSource, type PageCompletenessReport, type PageCover, type PageCreationPlan, type PageIcon, PathFilter, type PathFilterConfig, type PendingOperation, PendingWalError, type PlacementChange, type PlannedRow, type PreserveMarker, PreserveMarkerCollector, PreserveMarkerInjector, type Processor, type ProcessorInput, type ProcessorMetadata, type ProcessorOutput, type ProgressCallback, type ProgressItem, PropertiesTableInjector, PropertiesTableRestorer, PropertyMapper, type PropertyOption, type PropertyRename, type PropertySchema, type PropertyValue, type PullOptions, type PullResult, type PushOptions, type PushResult, RENDER_LINE_RULES, type ReadOnlySkip, type RecordPendingInput, type RegisterFileInput, type RemoteChange, type RemoteMove, type RemoteMoveSkip, type RemoteObservation, type RemoteScanInfo, type RenameHints, type RenameKind, type RenderFinding, type RenderLineRule, type ResolutionChoice, type ResolutionResult, type RichTextSegment, type RowProgress, SAVED_STATE_TABLES_QUERY, SEPARATOR_BODY, STATE_DB_FILE, STATE_DB_MIGRATIONS, STATE_DB_PATH, SavedStateDbError, type SchemaEdit, type SchemaFollowed, ScopedVaultFS, SidecarGenerator, type SidecarProperty, type SidecarView, StateDB, StateDbLockedError, type StateDbMigration, type StateDbTool, StateDbUnavailableError, StateLock, type StateLockClaim, type StateLockOwner, type StatusOptions, type StatusResult, type StyledRange, SyncBusyError, type SyncDirection, type SyncOptions, SyncOrchestrator, type SyncRecord, type SyncResult, type SyncStatus, type TableLineDesign, type TranslationResult, TreeMapper, UnsupportedBlockStripper, type UpsertSyncRecord, type VaultCompletenessReport, type VaultFS, type ViewConfig, ViewDataProvider, type ViewEdit, type ViewPropertyConfig, type ViewRenderData, type ViewType, WIKILINK_LOOKUPS, type WatchSyncOptions, type WatchSyncScope, WatchSyncService, type WikilinkEntry, type WikilinkLookup, WikilinkResolver, applicableChoices, assertNoPendingWal, basesViewMappingOf, basesViewTypeOf, choiceForStrategy, classifyBodyFidelity, columnLabel, compactNotionId, computeBufferHash, computeHash, configDirFrom, connectionFolderOf, createDefaultPipeline, extractCalendarEntries, filterByMonth, filterEntries, findConnectionFolders, findNestedFolderPages, formatUnifiedDiff, generateColorCSS, generateId, getLogger, getNotionBgColor, getNotionColor, getVisibleProperties, groupEntries, hasColumnLayout, hasDesignMarker, inAnyPathScope, isHeadingLine, isHeadingMarkerLine, isInternalPath, isMarkdownPath, isRemoteDeletion, lineDiff, lintRenderedMarkdown, matchesPathScope, normalizeNotionId, normalizeVaultPath, noteNameFromPath, notionIdFromInput, notionIdsEqual, operationLabel, parseDesignColor, parseIgnorePatterns, pendingWalBytes, readColumnLayout, readDesignLine, resolvePropertyName, sanitizeFileName, sectionLinesWithHeadingMarkers, setLogger, shortNotionId, sortEntries, stateDbLockPath, stateDbWalPath, stripMarkdownExtension, summarizeFidelity, systemTimeZone, threeWayMerge, toVaultPath, translateNotionFilter, verifyDatabaseCompleteness, verifyPageCompleteness, wikilinkLookupsIn };
4979
+ export { BaseFileGenerator, type BaseFileOptions, type BasePropertyOption, type BasePropertySchema, type BaseStatusGroup, type BaseSyncOptions, type BasesFilterNode, type BasesViewMapping, type BasesViewType, BlankLineCollapser, type BookmarkTarget, CONFIG_FILE, CONFLICT_STRATEGIES, type CalendarEntry, type CalloutDesign, CalloutRestorer, CalloutTransformer, ChangeDetector, type ChangeDiff, ColorAnnotator, type ColumnPlace, type CompletenessFailure, type CompletenessLocalSource, type CompletenessOptions, type CompletenessRemoteSource, type CompletenessReport, type Config, ConfigManager, ConfigSchema, type Conflict, ConflictResolver, type ConflictStrategy, ConnectionBoundaryError, ConnectionScopeError, type ConversionContext, type ConversionPath, ConversionPipeline, type ConversionResult, type CoverConfig, type DBEntry, DB_VIEWS_FILE, DB_VIEWS_PATH, DEFAULT_CONFIG, DEFAULT_TITLE_PROPERTY, DEFAULT_WATCH_DEBOUNCE_MS, DIFF_SIGN, type DatabaseCompleteness, type DatabaseMove, type DatabaseSyncConfig, type DatabaseSyncResult, DatabaseSyncer, type DatabaseViewsConfig, type DeferredCode, type DegradeNote, type DesignColor, type DesignLine, type DesignSegment, type DiffHunk, type DiffLine, EmbedResolver, EntryEditor, type FailedOperation, type FidelityClassification, type FidelityContext, type FidelityDefect, type FidelityDefectForm, type FidelitySummary, type FileDownloadResult, FileHandler, type FileInfo, type FileRegistryEntry, type FileStatInfo, type FileSystemEntry, type FileType, type FileUploadResult, FileWatcher, type FilterCondition, FilteredVaultFS, type FolderDatabaseReport, type FolderMoveChange, FrontmatterExtractor, FrontmatterGenerator, type FullScanReason, GITIGNORE_ENTRY, type GatedOperation, type GroupByConfig, type GroupedEntries, IGNORE_FILE, INTERNAL_DIR, INTERNAL_DIR_GLOB, type IStateDB, type ImageDownloadResult, ImageHandler, type ImageReference, type InferredProperty, InlineAnnotationPreserver, InlineDBParser, type InlineStyle, type LineDiffOptions, type LineRange, type LocalChange, LocalImageRestorer, type LocalMoveAdoption, type LocalScan, type LocalScanOptions, type Logger, MARKER_BRAND, type MappingResult, type MappingType, MathNormalizer, MentionToWikilink, type MergeConflictRegion, type MergeResult, NOTION_COLOR_NAMES, NOTION_TOKEN_PREFIX, NOTION_TO_BASES_VIEW, type NestedFolderPage, type NestedFolderRecord, NodeVaultFS, type NonMdFileInfo, type NotionBlock, NotionBlockBuilder, NotionClient, type NotionClientOptions, type NotionColor, type NotionPageNode, type NotionRichText, type RichTextItem as NotionRichTextItem, type NotionSidecar, OBSIDIAN_CONFIG_DIR, type OperationType, type OutsideVault, type PageCompletenessRemoteSource, type PageCompletenessReport, type PageCover, type PageCreationPlan, type PageIcon, PathFilter, type PathFilterConfig, type PendingOperation, PendingWalError, type PlacementChange, type PlannedRow, type PreserveMarker, PreserveMarkerCollector, PreserveMarkerInjector, type Processor, type ProcessorInput, type ProcessorMetadata, type ProcessorOutput, type ProgressCallback, type ProgressItem, PropertiesTableInjector, PropertiesTableRestorer, PropertyMapper, type PropertyOption, type PropertyRename, type PropertySchema, type PropertyValue, type PullOptions, type PullResult, type PushOptions, type PushResult, RENDER_LINE_RULES, type ReadOnlySkip, type RecordPendingInput, type RegisterFileInput, type RemoteChange, type RemoteMove, type RemoteMoveSkip, type RemoteObservation, type RemoteScanInfo, type RenameHints, type RenameKind, type RenderFinding, type RenderLineRule, type ResolutionChoice, type ResolutionResult, type RichTextSegment, type RowProgress, SAVED_STATE_TABLES_QUERY, SEPARATOR_BODY, STATE_DB_FILE, STATE_DB_MIGRATIONS, STATE_DB_PATH, SavedStateDbError, type SchemaEdit, type SchemaFollowed, ScopedVaultFS, SidecarGenerator, type SidecarProperty, type SidecarView, StateDB, StateDbLockedError, type StateDbMigration, type StateDbTool, StateDbUnavailableError, StateLock, type StateLockClaim, type StateLockOwner, type StatusOptions, type StatusResult, type StyledRange, SyncBusyError, type SyncDirection, type SyncOptions, SyncOrchestrator, type SyncRecord, type SyncResult, type SyncStatus, type TableLineDesign, type TranslationResult, TreeMapper, UnlinkedVaultError, UnsupportedBlockStripper, type UpsertSyncRecord, type UserBaseFilterFix, type VaultCompletenessReport, type VaultFS, type ViewConfig, ViewDataProvider, type ViewEdit, type ViewPropertyConfig, type ViewRenderData, type ViewType, WIKILINK_LOOKUPS, type WatchSyncOptions, type WatchSyncScope, WatchSyncService, type WikilinkEntry, type WikilinkLookup, WikilinkResolver, applicableChoices, assertNoPendingWal, basesViewMappingOf, basesViewTypeOf, choiceForStrategy, classifyBodyFidelity, columnLabel, compactNotionId, computeBufferHash, computeHash, configDirFrom, connectionFolderOf, createDefaultPipeline, extractCalendarEntries, filterByMonth, filterEntries, findConnectionFolders, findNestedFolderPages, formatUnifiedDiff, generateColorCSS, generateId, getLogger, getNotionBgColor, getNotionColor, getVisibleProperties, groupEntries, hasColumnLayout, hasDesignMarker, inAnyPathScope, isHeadingLine, isHeadingMarkerLine, isInternalPath, isMarkdownPath, isRemoteDeletion, lineDiff, lintRenderedMarkdown, matchesPathScope, normalizeNotionId, normalizeVaultPath, noteNameFromPath, notionIdFromInput, notionIdsEqual, operationLabel, parseDesignColor, parseIgnorePatterns, pendingWalBytes, readColumnLayout, readDesignLine, resolvePropertyName, sanitizeFileName, sectionLinesWithHeadingMarkers, setLogger, shortNotionId, sortEntries, stateDbLockPath, stateDbWalPath, stripMarkdownExtension, summarizeFidelity, systemTimeZone, threeWayMerge, toVaultPath, translateNotionFilter, verifyDatabaseCompleteness, verifyPageCompleteness, wikilinkLookupsIn };