@im-nobsidian/core 0.12.0 → 0.14.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
@@ -474,6 +474,73 @@ interface PushResult {
474
474
  * 예전에는 아무 말 없이 대기로 적기만 해, 지운 파일이 다음 pull 에 말없이 돌아왔다(D8). 없으면 빈 목록 · 생략.
475
475
  */
476
476
  readonly unsentDeletions?: readonly string[];
477
+ /**
478
+ * 볼트에서 바꾼 DB 속성 이름(Obsidian 의 속성 이름 바꾸기)을 Notion 의 열 이름으로 바꾼 것 — dry-run 은 바꿀 것
479
+ * (ADR-045). 없으면 생략.
480
+ */
481
+ readonly renamedProperties?: readonly PropertyRename[];
482
+ /** 볼트에서 고친 사이드카의 속성을 Notion DB 에 올린 것 — dry-run 은 올릴 것(ADR-045). 없으면 생략. */
483
+ readonly schemaEdits?: readonly SchemaEdit[];
484
+ /** 볼트에서 고친 `.base` 보기를 Notion 보기에 올린 것(ADR-046) — dry-run 이면 올릴 것. */
485
+ readonly viewEdits?: readonly ViewEdit[];
486
+ /**
487
+ * 볼트에서 DB 폴더 안팎 · 다른 DB 폴더로 옮겨 Notion 에서 페이지 ↔ 행 · 다른 DB 의 행이 된 노트(ADR-047) — dry-run 이면
488
+ * 될 것. 없으면 생략.
489
+ */
490
+ readonly placementChanges?: readonly PlacementChange[];
491
+ /** 볼트에서 옮기거나 이름을 바꾼 DB 폴더(ADR-047) — dry-run 이면 옮길 것. 없으면 생략. */
492
+ readonly databaseMoves?: readonly DatabaseMove[];
493
+ }
494
+ /** 옮긴 DB 폴더 하나 — {@link PushResult.databaseMoves}. */
495
+ interface DatabaseMove {
496
+ readonly from: string;
497
+ readonly to: string;
498
+ /** Notion 의 DB 도 옮겼나(옮기나). false 면 DB 가 볼트가 받지 않는 곳에 있어 볼트 쪽 자리만 바뀐다. dry-run 은 모른다. */
499
+ readonly inNotion?: boolean;
500
+ }
501
+ /** 옮긴 노트 하나가 Notion 에서 바뀐 자리 — {@link PushResult.placementChanges}. */
502
+ interface PlacementChange {
503
+ readonly path: string;
504
+ /** 무엇이 되었나 — DB 의 행 · 페이지. */
505
+ readonly becomes: "row" | "page";
506
+ /** 다른 DB 에서 온 행이 대상 DB 에 더한(더할) 열 — Notion 이 값이 있는 속성을 열로 더한다. 없으면 생략. */
507
+ readonly addedColumns?: readonly string[];
508
+ }
509
+ /** 고친 `.base` 의 보기 하나가 Notion 보기에 한 일 — {@link PushResult.viewEdits}. */
510
+ interface ViewEdit {
511
+ /** `.base` 경로. */
512
+ readonly path: string;
513
+ /** 보기 이름(바꿨으면 새 이름). */
514
+ readonly view: string;
515
+ /** 이름을 바꿨으면 옛 이름. */
516
+ readonly from?: string;
517
+ /** 올린 것 — 이름 · 열 · 정렬 · 필터. */
518
+ readonly changed: readonly ("name" | "columns" | "sort" | "filter")[];
519
+ }
520
+ /** 고친 사이드카 하나가 Notion DB 에 한 일 — {@link PushResult.schemaEdits}. */
521
+ interface SchemaEdit {
522
+ /** 사이드카 경로. */
523
+ readonly path: string;
524
+ readonly added: readonly string[];
525
+ readonly removed: readonly string[];
526
+ /** 옛 이름 → 새 이름. */
527
+ readonly renamed: ReadonlyArray<readonly [string, string]>;
528
+ /** 속성 이름 → 새 타입. */
529
+ readonly retyped: ReadonlyArray<readonly [string, string]>;
530
+ /** 설정(수식 · 숫자 형식 · 옵션)을 바꾼 속성. */
531
+ readonly redefined: readonly string[];
532
+ /**
533
+ * 지운 선택 옵션 — 속성 이름 → 옵션 이름. Notion 은 그 옵션을 가진 행의 값을 비운다(옵션 이름을 바꾼 것도 지우고
534
+ * 새로 만든 것이다). 없으면 지운 옵션이 없다.
535
+ */
536
+ readonly droppedOptions?: ReadonlyArray<readonly [string, readonly string[]]>;
537
+ }
538
+ /** 볼트에서 바꾼 DB 속성 이름 하나 — {@link PushResult.renamedProperties}. */
539
+ interface PropertyRename {
540
+ /** DB 폴더. */
541
+ readonly folder: string;
542
+ readonly from: string;
543
+ readonly to: string;
477
544
  }
478
545
  /** 노트 하나에서 올리지 않은 읽기 전용 속성. */
479
546
  interface ReadOnlySkip {
@@ -513,6 +580,22 @@ interface RemoteScanInfo {
513
580
  /** 바뀐 것이 보이지 않아 조회하지 않은 DB 수 — pull 에만. */
514
581
  readonly skippedDatabases?: number;
515
582
  }
583
+ /** Notion 에서 바뀐 DB 속성을 행 노트의 키에 옮긴 것(ADR-045). */
584
+ interface SchemaFollowed {
585
+ /** DB 폴더. */
586
+ readonly folder: string;
587
+ /** 옛 이름 → 새 이름. */
588
+ readonly renamed: ReadonlyArray<readonly [string, string]>;
589
+ /** Notion 에서 지운 속성. */
590
+ readonly removed: readonly string[];
591
+ /** 키를 바꾼 행 노트 수. */
592
+ readonly rows: number;
593
+ /** 지운 속성이지만 올리지 않은 로컬 값이 있어 노트에 남긴 키. */
594
+ readonly kept: ReadonlyArray<{
595
+ readonly path: string;
596
+ readonly key: string;
597
+ }>;
598
+ }
516
599
  interface PullResult {
517
600
  readonly created: number;
518
601
  readonly updated: number;
@@ -525,6 +608,17 @@ interface PullResult {
525
608
  readonly restored: number;
526
609
  /** 되살린(dry-run 은 되살릴) 노트 · 행의 경로 — {@link restored} 의 목록. 없으면 생략. */
527
610
  readonly restoredPaths?: readonly string[];
611
+ /**
612
+ * 볼트에서 고쳐 덮어쓰지 않은 사이드카(`.notion.json`) — push 하면 고친 속성을 Notion 에 올린다(ADR-045). 없으면 생략.
613
+ */
614
+ readonly heldSidecars?: readonly string[];
615
+ /**
616
+ * 볼트에서 보기를 고쳐 덮어쓰지 않은 `.base` — push 하면 고친 보기 이름 · 열 · 정렬 · 필터를 Notion 에 올린다(ADR-046).
617
+ * 없으면 생략.
618
+ */
619
+ readonly heldBases?: readonly string[];
620
+ /** Notion 에서 바뀐 속성을 행 노트에 옮긴 DB 마다(ADR-045). 없으면 생략. */
621
+ readonly schemaFollowed?: readonly SchemaFollowed[];
528
622
  readonly conflicts: Conflict[];
529
623
  readonly writtenPaths: string[];
530
624
  readonly failed: FailedOperation[];
@@ -778,6 +872,13 @@ interface ViewRequest {
778
872
  readonly quick_filters?: Record<string, unknown>;
779
873
  readonly configuration?: Record<string, unknown>;
780
874
  }
875
+ /** `views.update` 에 보낼 고침 — 보내지 않은 항목은 그대로, null 은 지운다. */
876
+ interface ViewUpdateRequest {
877
+ readonly name?: string;
878
+ readonly filter?: unknown;
879
+ readonly sorts?: unknown[] | null;
880
+ readonly configuration?: Record<string, unknown>;
881
+ }
781
882
  interface DatabaseViewsConfig {
782
883
  readonly databaseId: string;
783
884
  readonly databaseName?: string;
@@ -1399,10 +1500,14 @@ interface DatabaseMeta {
1399
1500
  readonly databaseId: string;
1400
1501
  /** DB 제목. 없으면 "". */
1401
1502
  readonly title: string;
1402
- /** 행을 조회할 data source. 비었으면 옛 단일 소스 DB 다 — DB id 로 조회한다. */
1503
+ /**
1504
+ * 행을 조회할 data source. 비었으면 옛 단일 소스 DB 다 — DB id 로 조회한다. `properties` 는 그 소스만의 속성
1505
+ * 스키마(읽지 못했으면 없다) — 속성 id 는 소스마다 따로 붙는다.
1506
+ */
1403
1507
  readonly dataSources: ReadonlyArray<{
1404
1508
  readonly id: string;
1405
1509
  readonly name: string;
1510
+ readonly properties?: Readonly<Record<string, unknown>>;
1406
1511
  }>;
1407
1512
  /**
1408
1513
  * 속성 스키마 — 읽을 수 있는 모든 data source 의 속성을 합친 것(이름이 겹치면 앞의 것). 읽을 수 있는 data
@@ -1411,6 +1516,11 @@ interface DatabaseMeta {
1411
1516
  readonly properties: Readonly<Record<string, unknown>>;
1412
1517
  /** 페이지 본문 안에 놓인 인라인 DB 인가. */
1413
1518
  readonly isInline: boolean;
1519
+ /**
1520
+ * DB 가 바로 아래에 놓인 페이지 — 블록(토글 · 열) 안이거나 워크스페이스 맨 위면 null. 모르면(읽지 않았으면) 없다.
1521
+ * Notion 에서 DB 를 옮겨도 수정 시각이 그대로라, 받은 DB 의 부모로만 옮긴 것을 안다(ADR-047).
1522
+ */
1523
+ readonly parentPageId?: string | null;
1414
1524
  /** DB 의 아이콘 · 커버 · 설명 · 제목 표시 — 받은 그대로. */
1415
1525
  readonly appearance?: DatabaseAppearance;
1416
1526
  }
@@ -1493,6 +1603,8 @@ declare class NotionClient {
1493
1603
  title: string;
1494
1604
  properties?: Record<string, unknown>;
1495
1605
  children?: BlockObjectResponse[];
1606
+ /** 행을 둘 data source — 데이터 소스가 여럿인 DB 는 이것이 있어야 만든다. */
1607
+ dataSourceId?: string;
1496
1608
  }): Promise<PageObjectResponse>;
1497
1609
  /**
1498
1610
  * 페이지 아래에 DB 를 만든다(ADR-036). 같은 요청이 두 번 적용되면 DB 가 둘이 된다 — 다시 보내지 않는다.
@@ -1527,6 +1639,8 @@ declare class NotionClient {
1527
1639
  title: string;
1528
1640
  markdown: string;
1529
1641
  properties?: Record<string, unknown>;
1642
+ /** 행을 둘 data source — 데이터 소스가 여럿인 DB 는 이것이 있어야 만든다. */
1643
+ dataSourceId?: string;
1530
1644
  }): Promise<PageObjectResponse>;
1531
1645
  /**
1532
1646
  * {@link createPageWithMarkdown} 이 버린 맨 앞 `# H1` 을 되살린다 — 그 markdown 이 H1 으로
@@ -1578,6 +1692,31 @@ declare class NotionClient {
1578
1692
  * 같은 부모로 다시 옮겨도 결과가 같아 모호한 실패는 다시 보낸다.
1579
1693
  */
1580
1694
  movePage(pageId: string, parentPageId: string): Promise<void>;
1695
+ /**
1696
+ * 페이지 · 행을 DB 의 data source 로 옮긴다 — 같은 `pages.move`. 페이지는 행이 되고, 다른 DB 의 행은 이 DB 의
1697
+ * 행이 된다. id · 본문 · 자식은 그대로다(2026-10-27 실측). `database_id` 부모는 400 이라 data source 로만 옮긴다.
1698
+ * 다른 DB 에서 오면 값이 있는 속성 가운데 이 DB 에 없는 것은 Notion 이 열로 더한다(2026-10-30 실측).
1699
+ */
1700
+ /**
1701
+ * DB 의 지금 자리 — 부모와 제목. 볼트에서 옮긴 DB 폴더를 Notion 에서도 옮길지 정할 때 읽는다(ADR-047). 메타 캐시를 쓰지
1702
+ * 않는다 — 옮기기 직전의 자리여야 한다.
1703
+ *
1704
+ * @returns 부모가 페이지면 `pageId`, 블록(토글 · 열 안의 인라인 DB) · 워크스페이스면 null.
1705
+ */
1706
+ getDatabasePlacement(databaseId: string): Promise<{
1707
+ readonly parentType: string;
1708
+ readonly pageId: string | null;
1709
+ readonly title: string;
1710
+ }>;
1711
+ /**
1712
+ * DB 를 다른 페이지 아래로 옮기거나 제목을 바꾼다(`databases.update`). 2026-10-30 실측 — 부모를 바꾸면 200 이고 DB id ·
1713
+ * 행 · 보기는 그대로다. 같은 요청을 다시 보내도 결과가 같다.
1714
+ */
1715
+ updateDatabasePlacement(databaseId: string, change: {
1716
+ readonly parentPageId?: string;
1717
+ readonly title?: string;
1718
+ }): Promise<void>;
1719
+ movePageToDataSource(pageId: string, dataSourceId: string): Promise<void>;
1581
1720
  /**
1582
1721
  * 데이터베이스 1개를 신 모델(2025-09-03 data source 분리)로 조회한다 — DB 1회 + data source 마다 1회.
1583
1722
  * - title · data source 목록: database 객체에 그대로 존재한다.
@@ -1822,6 +1961,11 @@ declare class NotionClient {
1822
1961
  }): Promise<string>;
1823
1962
  /** 보기를 지운다. DB 의 마지막 보기는 지우지 못한다(400). */
1824
1963
  deleteView(viewId: string): Promise<void>;
1964
+ /**
1965
+ * 보기를 고친다(ADR-046). 보내지 않은 항목은 그대로 두고 null 은 지운다. `configuration.properties` 는 통째로 바뀐다 —
1966
+ * 목록에 없는 속성은 숨겨지고 목록 차례가 열 차례다(2026-10-29 실측).
1967
+ */
1968
+ updateView(viewId: string, request: ViewUpdateRequest): Promise<void>;
1825
1969
  getView(viewId: string): Promise<ViewConfig | null>;
1826
1970
  getDatabaseViewsConfig(databaseId: string): Promise<DatabaseViewsConfig>;
1827
1971
  extractCover(page: PageObjectResponse): PageCover | null;
@@ -2307,6 +2451,17 @@ interface BaseFileOptions {
2307
2451
  readonly rangeEnds?: ReadonlyMap<string, string>;
2308
2452
  }
2309
2453
  type BasesViewType = "table" | "cards" | "list";
2454
+ /** `.base` 에 쓴 보기 하나가 어느 Notion 보기에서 왔나 — `views[]` 와 같은 차례(push 가 고친 보기를 올린다, ADR-046). */
2455
+ interface WrittenBasesView {
2456
+ readonly viewId: string;
2457
+ /** Notion 필터 가운데 `.base` 로 옮기지 못한 조건이 있다 — 볼트의 필터로 Notion 필터를 덮으면 그 조건이 사라진다. */
2458
+ readonly lossyFilter: boolean;
2459
+ }
2460
+ /** `.base` 내용과 그 안의 보기들의 출처. */
2461
+ interface GeneratedBaseFile {
2462
+ readonly content: string;
2463
+ readonly views: readonly WrittenBasesView[];
2464
+ }
2310
2465
  /** Notion 뷰 하나를 Bases 로 옮길 때의 판정. */
2311
2466
  interface BasesViewMapping {
2312
2467
  /** Bases 뷰 타입. `null` = 대응이 없어 `.base` 에 실을 수 없음. */
@@ -2320,9 +2475,9 @@ interface BasesViewMapping {
2320
2475
  /**
2321
2476
  * Notion 뷰 타입 → Obsidian Bases 뷰 매핑(SSOT).
2322
2477
  *
2323
- * 뷰는 현재 pull-authoritative — Notion API 가 2026-03-19 뷰 생성/수정/삭제를 열었지만
2324
- * 본 프로젝트는 아직 뷰 write-back 을 구현하지 않았다(로드맵 항목). push 로 되돌릴 수
2325
- * 없는 동안 "조용한 유실 금지"는 곧 "보존 + 정직한 degrade 리포트"를 의미한다.
2478
+ * 볼트에서 고친 보기의 이름 · 열 · 정렬 · 필터는 push 가 Notion 보기에 올린다(ADR-046). 보기 타입은 옮기지
2479
+ * 않는다 — 대응이 없는 것은 "보존 + 정직한 degrade 리포트"다. 칸반(Bases 1.14)은 최소 지원 버전(1.12.4)에
2480
+ * 없어 보드를 카드로 둔다.
2326
2481
  *
2327
2482
  * 달력·타임라인은 예전에 `null` 이었다 — 즉 `.base` 에서 **통째로 사라졌다**. 사이드카에는
2328
2483
  * 남지만 Obsidian 을 여는 사람 눈에는 그 뷰가 애초에 없었던 것처럼 보인다. 격자·축은
@@ -2336,6 +2491,8 @@ declare function basesViewMappingOf(notionType: string): BasesViewMapping;
2336
2491
  declare function basesViewTypeOf(notionType: string): BasesViewType | null;
2337
2492
  declare class BaseFileGenerator {
2338
2493
  generate(options: BaseFileOptions): string;
2494
+ /** `.base` 내용과 함께 쓴 보기마다 어느 Notion 보기에서 왔는지 돌려준다 — pull 이 기록해 push 가 견준다. */
2495
+ generateWithViews(options: BaseFileOptions): GeneratedBaseFile;
2339
2496
  private writeFilters;
2340
2497
  private needsContentCoverFormula;
2341
2498
  private writeFormulas;
@@ -2510,6 +2667,8 @@ interface FolderDatabaseReport extends FolderDatabaseDraft {
2510
2667
  readonly folder: string;
2511
2668
  readonly sidecarPath: string;
2512
2669
  readonly rows: number;
2670
+ /** 그중 이미 Notion 페이지로 올라간 노트 — push 가 같은 페이지째 행으로 옮긴다(ADR-047). */
2671
+ readonly pagesToRows: number;
2513
2672
  }
2514
2673
 
2515
2674
  /**
@@ -2549,10 +2708,17 @@ declare class SyncOrchestrator {
2549
2708
  private readonly databaseSyncer;
2550
2709
  /** DB 행 push 용 — DB 마다 스키마를 읽은 매퍼. 실행마다 비운다(S-01). */
2551
2710
  private readonly rowSchemas;
2711
+ /** 볼트에서 바꾼 DB 속성 이름을 Notion 의 열 이름으로(ADR-045). */
2712
+ private readonly vaultRenames;
2713
+ /** 볼트에서 고친 사이드카의 속성을 Notion DB 의 열로(ADR-045). */
2714
+ private readonly sidecarEdits;
2715
+ /** 볼트에서 고친 `.base` 의 보기를 Notion 보기로(ADR-046). */
2716
+ private readonly viewEdits;
2552
2717
  private readonly observation;
2553
2718
  private readonly placement;
2554
2719
  private readonly databaseCreator;
2555
2720
  private readonly planner;
2721
+ private readonly databaseMover;
2556
2722
  private readonly remoteMoves;
2557
2723
  private readonly remoteRenames;
2558
2724
  private readonly linkUpdater;
@@ -3060,6 +3226,31 @@ declare class ConversionPipeline {
3060
3226
  convertToMarkdown(content: string, context: ConversionContext, metadata?: ProcessorMetadata): string;
3061
3227
  }
3062
3228
 
3229
+ /**
3230
+ * pull 이 `.base` 에 쓴 보기 하나의 기록 — push 가 볼트에서 고친 보기를 이것과 견줘 Notion 보기에 올린다(ADR-046).
3231
+ *
3232
+ * 견주는 값(이름 · 열 · 정렬 · 필터)은 쓴 글자가 아니라 **YAML 로 읽은 값**이다. Obsidian 은 보기를 고치면 `.base` 를
3233
+ * 통째로 다시 쓴다 — 주석이 사라지고 키 차례 · 따옴표가 바뀐다(1.13.7 실측). 읽은 값으로 견줘야 그런 차이를 고친 것으로
3234
+ * 보지 않는다.
3235
+ */
3236
+ interface BaseViewRecord {
3237
+ readonly viewId: string;
3238
+ /** Bases 보기 타입 — 이름을 바꾼 보기를 자리로 찾을 때 같은 타입인지 본다. */
3239
+ readonly type: string;
3240
+ readonly name: string;
3241
+ readonly order?: readonly string[];
3242
+ readonly sort?: readonly BasesSort[];
3243
+ readonly filters?: unknown;
3244
+ /** Notion 필터에 `.base` 로 옮기지 못한 조건이 있었다 — 볼트의 필터로 덮으면 그 조건이 사라진다. */
3245
+ readonly lossyFilter?: true;
3246
+ /** 그때 Notion 보기의 지문({@link viewFingerprint}) — 그 사이 Notion 에서도 고쳤는지 가른다. */
3247
+ readonly notion: string;
3248
+ }
3249
+ interface BasesSort {
3250
+ readonly property: string;
3251
+ readonly direction: string;
3252
+ }
3253
+
3063
3254
  interface DbBaseFile {
3064
3255
  readonly basePath: string;
3065
3256
  readonly title: string;
@@ -3068,6 +3259,13 @@ interface DbBaseFile {
3068
3259
  * 적은 기록에는 없다 — 그때는 가를 수 없어 예전처럼 쓰고, 쓴 해시부터 적는다.
3069
3260
  */
3070
3261
  readonly hash?: string;
3262
+ /**
3263
+ * pull 이 쓴 보기들 — 볼트에서 고친 보기를 push 가 Notion 보기에 올릴 때 견준다(ADR-046). pull 이 이 경로에 쓴
3264
+ * 파일에만 있다(직접 만든 `.base` 에는 없다).
3265
+ */
3266
+ readonly views?: readonly BaseViewRecord[];
3267
+ /** 올리지 않는 나머지의 지문(`restSignature`) — 같아야 고친 것을 모두 올린 것이다. */
3268
+ readonly rest?: string;
3071
3269
  }
3072
3270
  /**
3073
3271
  * DB 마다 실제로 기록한 `.base` 경로와 DB 제목 — 인라인 DB placeholder 를 `.base` 임베드로 바꿀 때
@@ -3085,6 +3283,8 @@ declare class DbBaseFiles {
3085
3283
  private loadedRaw;
3086
3284
  constructor(stateDb: Pick<IStateDB, "getMeta" | "setMeta">);
3087
3285
  get(databaseId: string): DbBaseFile | undefined;
3286
+ /** 기록한 DB 모두 — 키는 줄인 DB id. */
3287
+ all(): Array<[string, DbBaseFile]>;
3088
3288
  set(databaseId: string, info: DbBaseFile): void;
3089
3289
  /** 상태 메타에서 읽는다 — 값이 그대로면 읽어 둔 것을 쓴다. 없거나 깨졌으면 비어 있다 — 이번 실행이 기록하는 것부터 다시 쌓는다. */
3090
3290
  private load;
@@ -3192,8 +3392,11 @@ interface DatabaseSyncResult {
3192
3392
  interface PlannedRow {
3193
3393
  readonly pageId: string;
3194
3394
  readonly path: string;
3195
- readonly operation: "create" | "update" | "delete";
3395
+ /** `move` — Notion 에서 다른 페이지 아래로 옮긴 DB 의 폴더를 옮긴다(`pageId` 는 DB, ADR-047). */
3396
+ readonly operation: "create" | "update" | "delete" | "move";
3196
3397
  readonly restore?: boolean;
3398
+ /** Notion 에서 DB 안으로 옮긴 페이지가 행이 되며 옮길 것 — 노트와 하위 페이지 폴더 · 옮긴 DB 의 폴더(ADR-047). */
3399
+ readonly moves?: readonly RemoteMove[];
3197
3400
  }
3198
3401
  /**
3199
3402
  * 행을 받는 진행 — 진행 표시가 페이지와 행을 한 목록 · 한 수로 보이게 한다. 행은 DB 를 조회해야 몇
@@ -3237,11 +3440,21 @@ declare class DatabaseSyncer {
3237
3440
  private renamedRows;
3238
3441
  /** 볼트에서 사라져 되살린 행의 경로 — pull 마감이 가져가 화면에 알린다(D8). */
3239
3442
  private restoredRows;
3443
+ /** Notion 에서 바뀐 속성을 행 노트에 옮긴 것 — pull 마감이 가져가 화면에 알린다(ADR-045). */
3444
+ private schemaFollowed;
3445
+ /** pull 이 마지막으로 쓴 사이드카 — 볼트에서 고친 것은 덮어쓰지 않는다(ADR-045). */
3446
+ private readonly sidecarBases;
3447
+ /** 이번 pull 이 고쳐 둔 것이라 덮어쓰지 않은 사이드카 경로. */
3448
+ private heldSidecars;
3449
+ /** 이번 pull 이 볼트에서 고친 것이라 덮어쓰지 않은 `.base` 경로(ADR-046). */
3450
+ private heldBases;
3240
3451
  /**
3241
3452
  * 실제로 기록한 .base 경로/DB 제목 — placeholder 임베드 재작성(F22)의 SSOT. 이번 pull 이 조회하지
3242
3453
  * 않은 DB 의 것도 남아 있다({@link DbBaseFiles}).
3243
3454
  */
3244
3455
  readonly baseFileInfo: DbBaseFiles;
3456
+ /** DB 마다 지난 pull 이 본 속성 — Notion 에서 바꾼 속성 이름을 행 노트에 옮기는 근거(ADR-045). */
3457
+ private readonly schemaLedger;
3245
3458
  private get decorations();
3246
3459
  constructor(config: Config, stateDb: IStateDB, notionClient: NotionClient, vaultFs: VaultFS, pipeline: ConversionPipeline, imageHandler: ImageHandler,
3247
3460
  /**
@@ -3284,6 +3497,11 @@ declare class DatabaseSyncer {
3284
3497
  * 행 파일은 쓰지 않는다.
3285
3498
  */
3286
3499
  rescanRowChildren?: boolean;
3500
+ /**
3501
+ * 발견한 DB 다 — Notion 에서 다른 페이지 아래로 옮겼으면 볼트에서도 폴더를 옮기고 알린다({@link placementMoveOf}).
3502
+ * 설정 파일에 적은 DB 의 폴더는 사용자가 정했다 — 주지 않는다.
3503
+ */
3504
+ onFolderMoved?: (move: RemoteMove) => void;
3287
3505
  }): Promise<DatabaseSyncResult>;
3288
3506
  /**
3289
3507
  * 받지 않는 행의 본문을 읽어 하위 페이지만 알린다(`--force`). 읽지 못한 행은 경고만 남긴다 — 그 행은 받을 것이
@@ -3301,7 +3519,14 @@ declare class DatabaseSyncer {
3301
3519
  planDatabase(dbConfig: DatabaseSyncConfig, opts?: {
3302
3520
  resolveDbFolder?: (databaseId: string) => string | null;
3303
3521
  paths?: readonly string[];
3522
+ /** 발견한 DB 다 — Notion 에서 옮긴 DB 의 폴더 이동도 보인다({@link pullDatabase}). */
3523
+ followPlacement?: boolean;
3524
+ /**
3525
+ * 볼트에서 옮긴 레코드 — dry-run 은 옮겨 적지 않아 이동 WAL 이 없다. 실제 pull 처럼 볼트가 먼저다.
3526
+ */
3527
+ movingInVault?: ReadonlySet<string>;
3304
3528
  }): Promise<PlannedRow[]>;
3529
+ private planRows;
3305
3530
  /**
3306
3531
  * 이 DB 에서 볼 행을 조회한다. 범위(`paths`)가 이 DB 폴더에 닿지 않으면 조회하지 않는다 — 예전에는
3307
3532
  * 범위와 상관없이 모든 행을 만들고 고쳤다.
@@ -3332,30 +3557,53 @@ declare class DatabaseSyncer {
3332
3557
  * (틀린) 전제로 db-row 를 제외해 두었기에 양쪽 어디에도 복원 경로가 없는 상태였다.
3333
3558
  * deleteSync 가 켜져 있으면 되살리지 않는다 — 지운 것은 Notion 에서도 지우라는 뜻이고, sync 는
3334
3559
  * pull 을 먼저 돌려 되살리면 뒤이은 push 가 지울 것을 잃는다(detectMissingLocalFiles 와 같다).
3335
- * · 예전 버전이 적은 날짜 모양이 남은 행은 그 줄만 새 모양으로 고쳐 쓴다({@link outdatedDateForm},
3336
- * F-08).
3560
+ * · 예전 버전이 적은 날짜 모양이 남은 행, Notion 이 새로 만들거나 타입을 바꾼 속성의 값이 다른 행은 그 줄만
3561
+ * 고쳐 쓴다({@link staleKeysToRewrite}, F-08 · ADR-045).
3562
+ *
3563
+ * @param refreshed 이 행의 data source 에서 새로 생기거나 타입이 바뀐 속성의 키(ADR-045).
3337
3564
  */
3338
3565
  private rowAction;
3339
3566
  /**
3340
- * 원격이 그대로인 행이지만 예전 버전이 적은 날짜 모양(`…Z` · `…+09:00` · `{start, end}`)이 남아 새
3341
- * 모양으로 고쳐 쓸 행인가(F-08, {@link PropertyMapper.outdatedDateKeys}). 고쳐 쓰면 사본도 새 모양이
3342
- * 되어 다음 pull 은 건너뛴다.
3567
+ * 원격이 그대로인 행이지만 그 줄만 고쳐 쓸 키가 있는가 — 예전 버전이 적은 날짜 모양(`…Z` · `…+09:00` ·
3568
+ * `{start, end}`, F-08, {@link PropertyMapper.outdatedDateKeys}), 또는 Notion 이 새로 만들거나 타입을 바꾼
3569
+ * 속성의 값이 적힌 것과 다른 키(ADR-045 — 수식 열을 더하면 행마다 값이 생기지만 행의 수정 시각은 그대로다).
3570
+ * 고쳐 쓰면 사본도 새 값이 되어 다음 pull 은 건너뛴다.
3343
3571
  *
3344
3572
  * 지난 동기화 뒤 로컬을 고친 행은 고르지 않는다 — 로컬 편집을 지키느라 쓰지 않으니 pull 마다 고르기만
3345
3573
  * 한다. 그 편집을 올린 뒤의 pull 이 고른다. 로컬 파일을 읽지 못하면 고르지 않는다.
3346
3574
  */
3347
- private outdatedDateForm;
3575
+ private staleKeysToRewrite;
3576
+ /** 적힌 frontmatter 에서 받은 값으로 고쳐 쓸 키 — {@link staleKeysToRewrite}. */
3577
+ private staleKeys;
3348
3578
  /**
3349
- * 예전 버전이 적은 날짜 모양이 남은 행에서 그 키들만 새 모양으로 고쳐 쓴다(F-08) — 원격이 그대로라 본문 ·
3350
- * 첨부는 다시 받지 않는다. 본문은 한 글자도 바꾸지 않고, 다른 키의 줄은 그대로 둔다(키 단위로 나눠 읽을
3351
- * 수 없는 frontmatter 는 값만 지킨다 — {@link mergeRowFrontmatter}).
3579
+ * 원격이 그대로인 행에서 {@link staleKeys} 의 키만 받은 값으로 고쳐 쓴다 — 본문 · 첨부는 다시 받지 않는다. 본문은
3580
+ * 한 글자도 바꾸지 않고, 다른 키의 줄은 그대로 둔다(키 단위로 나눠 읽을 수 없는 frontmatter 는 값만 지킨다 —
3581
+ * {@link mergeRowFrontmatter}).
3352
3582
  *
3353
3583
  * 예전에는 행을 통째로 다시 받았다. 행마다 본문을 읽어 요청이 늘고, 다시 그릴 때마다 달라지는 본문(빈
3354
3584
  * 블록 · 첨부 이름)까지 바뀌었다 — 실볼트 사본에서 다시 받은 149행 중 99행.
3355
3585
  *
3356
3586
  * 고른 뒤 로컬을 고쳤으면 쓰지 않는다(`skipped`) — 이어지는 push 가 올린다.
3357
3587
  */
3358
- private rewriteDateForms;
3588
+ private rewriteStaleKeys;
3589
+ /**
3590
+ * Notion 에서 바뀐 속성을 지난 pull 이 본 스키마와 id 로 견줘 행 노트에 옮긴다(ADR-045) — 이름을 바꾼 속성은 키
3591
+ * 이름을, 지운 속성은 키를. 새로 생기거나 타입이 바뀐 속성은 돌려준다 — 그대로인 행도 그 값을 고쳐 쓴다.
3592
+ *
3593
+ * 처음 보는 DB 는 견줄 것이 없어 적기만 한다. 행 하나라도 옮기지 못하면 본 스키마를 적지 않는다 — 다음 pull 이 다시
3594
+ * 옮긴다(이미 옮긴 행은 바꿀 것이 없다).
3595
+ *
3596
+ * @returns 바뀐 속성(data source → 바뀐 것, 바뀐 소스만)과 키를 바꾼 행의 레코드 id.
3597
+ */
3598
+ private followSchema;
3599
+ /** 옮긴 것을 pull 마감이 알리게 적는다 — 이름 바꿈 · 지움이 있었던 DB 만. 날짜 범위 끝 키는 따로 세지 않는다. */
3600
+ private noteSchemaFollowed;
3601
+ /** 이번 pull 이 행 노트에 옮긴 Notion 속성 변경 — 가져가면 비운다(ADR-045). */
3602
+ /** 고쳐 둔 것이라 덮어쓰지 않은 사이드카 — 가져가면 비운다. */
3603
+ takeHeldSidecars(): string[];
3604
+ /** 고쳐 둔 것이라 덮어쓰지 않은 `.base` — 가져가면 비운다. */
3605
+ takeHeldBases(): string[];
3606
+ takeSchemaFollowed(): SchemaFollowed[];
3359
3607
  /** 이 DB 의 추적 행 가운데 이번 조회에 없던 것 — 지워졌는지는 아직 모른다. */
3360
3608
  private unlistedRows;
3361
3609
  /**
@@ -3437,6 +3685,8 @@ declare class DatabaseSyncer {
3437
3685
  properties: Record<string, unknown>;
3438
3686
  /** 받은 원격 본문의 지문(`remoteBodyFingerprint`). */
3439
3687
  bodyFingerprint: string;
3688
+ /** 원격 본문에 페이지 시절의 속성 블록이 있었나 — 받으며 걷어 냈다. */
3689
+ propertiesBlock: boolean;
3440
3690
  }>;
3441
3691
  /**
3442
3692
  * 행의 본문 밖이 지난 동기화 사본 그대로인가(N-05) — 제목과 보낼 수 있는 속성, 아이콘 · 커버.
@@ -3458,11 +3708,38 @@ declare class DatabaseSyncer {
3458
3708
  private rowPathOwners;
3459
3709
  /** 되살린 행의 경로를 가져가고 비운다. */
3460
3710
  takeRestoredRows(): string[];
3711
+ /**
3712
+ * Notion 에서 다른 페이지 아래로 옮긴 DB 의 폴더를 볼트에서도 옮긴다 — 옮겼으면 그 이동. 옮기지 못하면 까닭을 남기고
3713
+ * 옛 자리에서 받는다.
3714
+ */
3715
+ private followPlacement;
3716
+ /** 옮길 수 있으면 그 이동, 막혔으면 까닭을 알리고 null. */
3717
+ private unblocked;
3718
+ /** 볼트에서 옮기고 아직 올리지 않았나 — 이동 WAL, 또는 dry-run 이 옮겨 적지 않은 이번 이동. */
3719
+ private movedInVault;
3720
+ /**
3721
+ * Notion 에서 다른 페이지 아래로 옮긴 발견 DB 의 폴더를 옮길 곳(ADR-047) — 제자리면 null.
3722
+ *
3723
+ * Notion 에서 DB 를 옮겨도 DB · 행의 수정 시각이 그대로라 받은 DB 의 부모로만 안다 — 전체 대조는 모든 DB 를 받으니
3724
+ * 거기서 보인다. 새 자리는 처음 발견할 때와 같다 — 부모 페이지의 하위 폴더 이름 그대로, 루트면 `databases` 선반.
3725
+ * 맨 위 폴더도 루트 아래로 본다(볼트에서 옮긴 DB 를 push 가 루트 아래에 둔다 — {@link DatabaseMover}).
3726
+ * 다음은 옮기지 않는다.
3727
+ * - 부모가 블록(토글 · 열) 안 · 볼트가 모르는 페이지 — 볼트에 그 자리가 없다
3728
+ * - 볼트에서 옮긴 DB 폴더 · 부모 노트를 아직 올리지 않았다 — 볼트가 먼저다(push 가 Notion 을 옮긴다)
3729
+ */
3730
+ private placementMoveOf;
3731
+ /** 이 폴더가 받는 DB — 설정한 DB 와 발견한 DB 에서. */
3732
+ private databaseAt;
3461
3733
  /** 이름을 바꾼 행을 가져가고 비운다. */
3462
3734
  takeRenamedRows(): {
3463
3735
  renamed: RemoteMove[];
3464
3736
  applied: RemoteMove[];
3465
3737
  };
3738
+ /**
3739
+ * 행이 된 페이지의 하위 페이지 폴더 — 폴더 노트(`X/X.md`)는 든 폴더, 노트는 옆의 `X/`. 행의 하위 페이지는 `행/` 에
3740
+ * 든다. 추적하는 노트가 없으면 null.
3741
+ */
3742
+ private adoptedChildrenOf;
3466
3743
  private pullDatabasePage;
3467
3744
  }
3468
3745
 
@@ -3886,7 +4163,7 @@ declare function resolvePropertyName(propertyId: string, schema: Record<string,
3886
4163
  *
3887
4164
  * ## 부분 번역의 안전 규칙 — 이 파일의 핵심
3888
4165
  *
3889
- * Notion 필터 문법은 Bases 보다 넓다(rollup any/every/none, 상대 날짜, formula 등).
4166
+ * Notion 필터 문법은 Bases 보다 넓다(rollup any/every/none, 이번 주(this_week), formula 등).
3890
4167
  * 못 옮기는 리프를 만났을 때 **어느 방향으로 틀릴지**는 논리 위치에 따라 다르다:
3891
4168
  *
3892
4169
  * - `and` 안에서 리프 하나를 버리면 조건이 느슨해진다 → 결과는 **상위집합**.
@@ -4069,6 +4346,7 @@ declare function notionIdsEqual(a: string, b: string): boolean;
4069
4346
  * markdown-api 경로(convertPageMentions)가 동일 형태로 수렴하도록 한다(rank20/I3).
4070
4347
  */
4071
4348
  declare function compactNotionId(id: string): string;
4349
+ declare function shortNotionId(id: string): string;
4072
4350
 
4073
4351
  /** Notion 제목 → 볼트 파일 이름(확장자 없이). */
4074
4352
  declare function sanitizeFileName(name: string): string;
@@ -4475,4 +4753,4 @@ declare function readColumnLayout(lines: readonly string[]): (ColumnPlace | unde
4475
4753
  /** 열 이름표 — `열 2/3 · 50%`. 비율이 없으면 `열 2/3`. */
4476
4754
  declare function columnLabel(place: ColumnPlace): string;
4477
4755
 
4478
- 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 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 PlannedRow, type PreserveMarker, PreserveMarkerCollector, PreserveMarkerInjector, type Processor, type ProcessorInput, type ProcessorMetadata, type ProcessorOutput, type ProgressCallback, type ProgressItem, PropertiesTableInjector, PropertiesTableRestorer, PropertyMapper, type PropertyOption, 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, 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 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, sortEntries, stateDbLockPath, stateDbWalPath, stripMarkdownExtension, summarizeFidelity, systemTimeZone, threeWayMerge, toVaultPath, translateNotionFilter, verifyDatabaseCompleteness, verifyPageCompleteness, wikilinkLookupsIn };
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 };