@dikolab/kbdb 0.2.1 → 0.3.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.
Files changed (120) hide show
  1. package/README.md +59 -24
  2. package/dist/cli.cjs +462 -73
  3. package/dist/cli.cjs.map +4 -4
  4. package/dist/cli.mjs +454 -65
  5. package/dist/cli.mjs.map +4 -4
  6. package/dist/kbdb-worker.cjs +395 -60
  7. package/dist/kbdb-worker.cjs.map +4 -4
  8. package/dist/mod.cjs +18 -1
  9. package/dist/mod.cjs.map +2 -2
  10. package/dist/mod.mjs +18 -1
  11. package/dist/mod.mjs.map +2 -2
  12. package/dist/src/shared/cli/functions/dispatch-command.function.d.ts +3 -1
  13. package/dist/src/shared/cli/functions/install-default-skills.function.d.ts +12 -0
  14. package/dist/src/shared/cli/functions/run-check.function.d.ts +47 -5
  15. package/dist/src/shared/cli/functions/run-export.function.d.ts +34 -0
  16. package/dist/src/shared/cli/functions/run-gc.function.d.ts +6 -0
  17. package/dist/src/shared/cli/functions/run-learn.function.d.ts +35 -6
  18. package/dist/src/shared/cli/functions/run-recall.function.d.ts +45 -0
  19. package/dist/src/shared/cli/functions/run-search.function.d.ts +52 -15
  20. package/dist/src/shared/cli/index.d.ts +4 -0
  21. package/dist/src/shared/cli/typings/cli-options.interface.d.ts +13 -0
  22. package/dist/src/shared/cli/typings/learn-result.model.d.ts +19 -0
  23. package/dist/src/shared/cli/typings/search-display.model.d.ts +18 -0
  24. package/dist/src/shared/mcp/classes/mcp-server.class.d.ts +8 -0
  25. package/dist/src/shared/mcp/typings/mcp-client.interface.d.ts +43 -0
  26. package/dist/src/shared/version/constants/version.constant.d.ts +1 -1
  27. package/dist/src/shared/wasm-codec/functions/decode-add-section-result.function.d.ts +48 -0
  28. package/dist/src/shared/wasm-codec/functions/decode-scored-results.function.d.ts +58 -0
  29. package/dist/src/shared/wasm-codec/functions/decode-section-records.function.d.ts +33 -0
  30. package/dist/src/shared/wasm-codec/functions/encode-add-section-params.function.d.ts +52 -0
  31. package/dist/src/shared/wasm-codec/index.d.ts +2 -0
  32. package/dist/src/shared/worker-client/classes/worker-client.class.d.ts +16 -0
  33. package/dist/src/shared/worker-client/index.d.ts +1 -1
  34. package/dist/src/shared/worker-client/typings/add-section-result.model.d.ts +29 -15
  35. package/dist/src/shared/worker-client/typings/export-result.model.d.ts +14 -0
  36. package/dist/src/shared/worker-client/typings/gc-result.model.d.ts +6 -0
  37. package/dist/src/shared/worker-client/typings/search-result.model.d.ts +12 -0
  38. package/dist/src/shared/worker-client/typings/section.model.d.ts +16 -0
  39. package/dist/src/shared/worker-daemon/classes/worker-daemon.class.d.ts +35 -0
  40. package/dist/wasm/fs-database/kbdb_fs_database.d.ts +22 -1
  41. package/dist/wasm/fs-database/kbdb_fs_database.js +28 -1
  42. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  43. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm.d.ts +1 -0
  44. package/dist/wasm/kb-worker/kbdb_worker.d.ts +48 -1
  45. package/dist/wasm/kb-worker/kbdb_worker.js +60 -1
  46. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  47. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm.d.ts +2 -0
  48. package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
  49. package/dist/worker.mjs +396 -60
  50. package/dist/worker.mjs.map +4 -4
  51. package/docs/details/cli.md +102 -15
  52. package/docs/details/library-api.md +55 -6
  53. package/docs/details/mcp-server.md +8 -4
  54. package/docs/details/search-and-ranking.md +63 -5
  55. package/docs/details/storage.md +2 -0
  56. package/docs/goals/cli.md +255 -14
  57. package/docs/goals/database.md +244 -17
  58. package/docs/goals/document.md +1 -1
  59. package/docs/goals/mcp.md +83 -14
  60. package/docs/goals/query-parser.md +98 -4
  61. package/docs/goals/query-result.md +177 -10
  62. package/docs/goals/skills.md +72 -0
  63. package/docs/goals/worker-daemon.md +54 -7
  64. package/docs/modules/rust/fs-database/functions/integrity.md +11 -0
  65. package/docs/modules/rust/fs-database/functions/section.md +23 -6
  66. package/docs/modules/rust/fs-database/module.md +1 -0
  67. package/docs/modules/rust/fs-database/types/section.md +27 -1
  68. package/docs/modules/rust/overview.md +2 -1
  69. package/docs/modules/rust/query-parser/functions/module.md +2 -2
  70. package/docs/modules/rust/query-parser/functions/pipeline.md +44 -6
  71. package/docs/modules/rust/query-parser/module.md +5 -4
  72. package/docs/modules/rust/query-parser/types/keyphrase.md +11 -0
  73. package/docs/modules/rust/query-parser/types/module.md +3 -3
  74. package/docs/modules/typescript/shared/cli/functions.md +68 -3
  75. package/package.json +1 -1
  76. package/src/shared/cli/functions/dispatch-command.function.ts +53 -1
  77. package/src/shared/cli/functions/format-output.function.ts +36 -12
  78. package/src/shared/cli/functions/generate-help.function.ts +56 -1
  79. package/src/shared/cli/functions/install-default-skills.function.ts +296 -0
  80. package/src/shared/cli/functions/parse-args.function.ts +13 -0
  81. package/src/shared/cli/functions/run-check.function.ts +87 -6
  82. package/src/shared/cli/functions/run-export.function.ts +40 -0
  83. package/src/shared/cli/functions/run-gc.function.ts +6 -0
  84. package/src/shared/cli/functions/run-init.function.ts +2 -0
  85. package/src/shared/cli/functions/run-learn.function.ts +68 -16
  86. package/src/shared/cli/functions/run-recall.function.ts +66 -0
  87. package/src/shared/cli/functions/run-search.function.ts +58 -15
  88. package/src/shared/cli/index.ts +4 -0
  89. package/src/shared/cli/typings/cli-options.interface.ts +13 -0
  90. package/src/shared/cli/typings/learn-result.model.ts +16 -0
  91. package/src/shared/cli/typings/search-display.model.ts +18 -0
  92. package/src/shared/mcp/classes/mcp-server.class.ts +30 -1
  93. package/src/shared/mcp/functions/create-tool-definitions.function.ts +46 -5
  94. package/src/shared/mcp/functions/handle-tool-call.function.ts +70 -2
  95. package/src/shared/mcp/typings/mcp-client.interface.ts +45 -0
  96. package/src/shared/version/constants/version.constant.ts +1 -1
  97. package/src/shared/wasm-codec/functions/decode-add-section-result.function.ts +112 -0
  98. package/src/shared/wasm-codec/functions/decode-scored-results.function.ts +86 -0
  99. package/src/shared/wasm-codec/functions/decode-section-records.function.ts +87 -0
  100. package/src/shared/wasm-codec/functions/encode-add-section-params.function.ts +68 -0
  101. package/src/shared/wasm-codec/index.ts +5 -0
  102. package/src/shared/worker-client/classes/worker-client.class.ts +19 -0
  103. package/src/shared/worker-client/index.ts +4 -1
  104. package/src/shared/worker-client/typings/add-section-result.model.ts +30 -15
  105. package/src/shared/worker-client/typings/export-result.model.ts +14 -0
  106. package/src/shared/worker-client/typings/gc-result.model.ts +6 -0
  107. package/src/shared/worker-client/typings/search-result.model.ts +12 -0
  108. package/src/shared/worker-client/typings/section.model.ts +16 -0
  109. package/src/shared/worker-daemon/classes/worker-daemon.class.ts +315 -46
  110. package/src/shared/worker-daemon/functions/create-host-imports.function.ts +19 -4
  111. package/src/shared/worker-daemon/functions/create-ipc-server.function.ts +5 -1
  112. package/src/wasm/fs-database/kbdb_fs_database.d.ts +22 -1
  113. package/src/wasm/fs-database/kbdb_fs_database.js +28 -1
  114. package/src/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  115. package/src/wasm/fs-database/kbdb_fs_database_bg.wasm.d.ts +1 -0
  116. package/src/wasm/kb-worker/kbdb_worker.d.ts +48 -1
  117. package/src/wasm/kb-worker/kbdb_worker.js +60 -1
  118. package/src/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  119. package/src/wasm/kb-worker/kbdb_worker_bg.wasm.d.ts +2 -0
  120. package/src/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
package/docs/goals/cli.md CHANGED
@@ -53,12 +53,14 @@ kbdb --version | -v
53
53
  kbdb learn [options] <path | ->...
54
54
  kbdb unlearn [options] <kbid>...
55
55
  kbdb search [options] <query>...
56
+ kbdb recall [options] <kbid>...
56
57
  kbdb content [options] <id>...
57
58
  kbdb mcp [options]
58
59
  kbdb check [options]
59
60
  kbdb gc [options]
60
61
  kbdb rebuild [options]
61
62
  kbdb status [options]
63
+ kbdb export [options] [<path>]
62
64
  kbdb db init [options]
63
65
  kbdb db migrate [options]
64
66
  kbdb skill learn [options] --name <n> --body <file|->
@@ -196,6 +198,17 @@ Import and index documents into the knowledge base.
196
198
  to this document ID. If the document does not
197
199
  exist, it is created. Applies to all sections
198
200
  ingested in this invocation.
201
+ - `--tags <t,...>` -- Comma-separated tags for scoping
202
+ and filtering. Applies to all sections ingested in
203
+ this invocation. Example: `--tags auth,api,v2`.
204
+ - `--replace` -- Enable supersession. When set, the
205
+ system matches each incoming section by source key
206
+ (source path + heading). If an existing section has
207
+ the same source key, it is superseded: the old
208
+ section's document references are transferred to the
209
+ new one and the old section becomes eligible for GC.
210
+ Without this flag, re-learning edited content creates
211
+ a sibling rather than replacing the original.
199
212
 
200
213
  **Supported file extensions:**
201
214
 
@@ -239,7 +252,10 @@ sections in the same invocation.
239
252
  "kbid": "abcdef1234567890abcdef1234",
240
253
  "path": "/absolute/path/to/file.md",
241
254
  "size": 1234,
242
- "skipped": false
255
+ "skipped": false,
256
+ "superseded": null,
257
+ "warnings": [],
258
+ "near_duplicates": []
243
259
  }
244
260
  ]
245
261
  ```
@@ -247,7 +263,12 @@ sections in the same invocation.
247
263
  is the UTF-8 character count of the content. The
248
264
  `skipped` field is always `false` for results that
249
265
  appear in the array -- files that are skipped produce
250
- no entry.
266
+ no entry. `superseded` is the kbid of the section
267
+ that was replaced via `--replace` (null when no
268
+ supersession occurred). `warnings` is an array of
269
+ warning strings (e.g. `"heading_missing"` when no
270
+ title is provided). `near_duplicates` lists sections
271
+ with similarity >= 0.85 as `{kbid, similarity}`.
251
272
  - **stderr**: errors only.
252
273
 
253
274
  **Exit code:** `0` on success, `1` on error.
@@ -425,15 +446,19 @@ array (see [SearchDisplay type](#searchdisplay-type)).
425
446
  "type": "text/markdown",
426
447
  "docids": ["doc-intro-ml"],
427
448
  "score": 8.7432,
449
+ "confidence": 1.0,
428
450
  "snippet": "Machine learning is a subfield...",
429
451
  "matched_terms": ["machine", "learning"],
452
+ "matched_fields": ["heading", "body"],
453
+ "created_at": "2026-06-15T10:00:00Z",
430
454
  "preview": ""
431
455
  }
432
456
  ],
433
457
  "total": 42,
434
458
  "offset": 0,
435
459
  "limit": 20,
436
- "has_more": true
460
+ "has_more": true,
461
+ "relaxed": false
437
462
  }
438
463
  ```
439
464
 
@@ -448,15 +473,19 @@ section text:
448
473
  "type": "text/markdown",
449
474
  "docids": ["doc-intro-ml"],
450
475
  "score": 8.7432,
476
+ "confidence": 1.0,
451
477
  "snippet": "Machine learning is a subfield...",
452
478
  "matched_terms": ["machine", "learning"],
479
+ "matched_fields": ["heading", "body"],
480
+ "created_at": "2026-06-15T10:00:00Z",
453
481
  "preview": "Machine learning is a subfield..."
454
482
  }
455
483
  ],
456
484
  "total": 42,
457
485
  "offset": 0,
458
486
  "limit": 20,
459
- "has_more": true
487
+ "has_more": true,
488
+ "relaxed": false
460
489
  }
461
490
  ```
462
491
 
@@ -557,6 +586,131 @@ src/cli.ts parseArgs()
557
586
  See [Content Composer](content-composer.md) for the
558
587
  full composition specification.
559
588
 
589
+ ### `recall` -- progressive context retrieval
590
+
591
+ ```
592
+ kbdb recall [options] <kbid>...
593
+ ```
594
+
595
+ Retrieve full content and progressive context for one
596
+ or more sections by kbid. Use after `search` to drill
597
+ into relevant results. Returns section text, metadata,
598
+ references, and back-references at configurable
599
+ expansion depths.
600
+
601
+ **Arguments:**
602
+ - `<kbid>...` -- one or more 26-character kb-id
603
+ strings.
604
+
605
+ **Options:**
606
+
607
+ | Flag | Alias | Description |
608
+ |-----------------|-------|--------------------------------|
609
+ | `--depth <n>` | `-d` | Expansion depth (0--3, |
610
+ | | | default: 0, clamped to 3) |
611
+ | `--db <path>` | | Database directory path |
612
+
613
+ **Expansion levels:**
614
+
615
+ | Depth | Returns |
616
+ |-------|---------------------------------------|
617
+ | 0 | Full section content with heading, |
618
+ | | type, and docids. |
619
+ | 1 | Depth-0 content, plus parent document |
620
+ | | manifests (title, all section kbids |
621
+ | | with headings and types) for each |
622
+ | | docid, plus back-references (sections |
623
+ | | that reference this section, from the |
624
+ | | reference graph index, each with |
625
+ | | marker_type and context_snippet). |
626
+ | 2 | Depth-1 content, plus full text of |
627
+ | | sibling sections (other sections in |
628
+ | | the same documents), plus forward |
629
+ | | references from the section's own |
630
+ | | content markers. |
631
+ | 3 | Depth-2 content, plus full text of |
632
+ | | referenced sections (one level deep), |
633
+ | | plus their back-references. |
634
+
635
+ Depth values above 3 are clamped to 3.
636
+
637
+ **Output:**
638
+ - **stdout**: JSON `RecallResult` object (single kbid)
639
+ or `RecallResult[]` array (multiple kbids).
640
+
641
+ Single result shape (depth 0):
642
+
643
+ ```json
644
+ {
645
+ "kbid": "a1b2c3d4e5f6g7h8j9k0l1m2n3",
646
+ "heading": "Architecture Overview",
647
+ "type": "text/markdown",
648
+ "content": "Full section text...",
649
+ "docids": ["doc-5678"]
650
+ }
651
+ ```
652
+
653
+ Single result shape (depth 1+):
654
+
655
+ ```json
656
+ {
657
+ "kbid": "a1b2c3d4e5f6g7h8j9k0l1m2n3",
658
+ "heading": "Architecture Overview",
659
+ "type": "text/markdown",
660
+ "content": "Full section text...",
661
+ "docids": ["doc-5678"],
662
+ "documents": [
663
+ {
664
+ "docid": "doc-5678",
665
+ "title": "System Architecture",
666
+ "sections": [
667
+ {
668
+ "kbid": "...",
669
+ "heading": "...",
670
+ "type": "..."
671
+ }
672
+ ]
673
+ }
674
+ ],
675
+ "back_references": [
676
+ {
677
+ "kbid": "ref-section-kbid",
678
+ "heading": "Related Section",
679
+ "type": "text/markdown",
680
+ "marker_type": "link",
681
+ "context_snippet": "For details, see ...",
682
+ "direction": "back"
683
+ }
684
+ ],
685
+ "siblings": [ ... ],
686
+ "references": [ ... ]
687
+ }
688
+ ```
689
+
690
+ Fields beyond `content` and `docids` are present only
691
+ at the corresponding depth level. At depth 0,
692
+ `documents`, `back_references`, `siblings`, and
693
+ `references` are absent. At depth 1, `siblings` and
694
+ `references` are absent. And so on.
695
+
696
+ - **stderr**: errors only.
697
+
698
+ **Exit code:** `0` on success, `1` on error.
699
+
700
+ **Delegation chain:**
701
+ ```
702
+ src/cli.ts parseArgs()
703
+ -> findDb() / promptUser() / runDbInit()
704
+ -> createWorkerClient({ contextPath })
705
+ -> versionGate(client, dbDir)
706
+ -> dispatchCommand(client, options)
707
+ -> runRecall(client, options)
708
+ -> client.recall({ kbids, depth })
709
+ -> IPC -> worker daemon
710
+ -> kb-worker.wasm
711
+ -> fs-database.wasm (fetch)
712
+ ```
713
+
560
714
  ### `mcp` -- start MCP server
561
715
 
562
716
  ```
@@ -604,7 +758,8 @@ The MCP server exposes `retrieve` (section/document
604
758
  lookup by ID) and `status` (database metadata) tools
605
759
  that have no CLI equivalents. These are programmatic
606
760
  operations suited to MCP clients (AI agents). CLI
607
- users use `kbdb search` to find content and
761
+ users use `kbdb search` to find content,
762
+ `kbdb recall` to expand context progressively, and
608
763
  `kbdb content` to compose documents by ID.
609
764
 
610
765
  ### `check` -- integrity check
@@ -614,8 +769,9 @@ kbdb check [options]
614
769
  ```
615
770
 
616
771
  Verify the integrity of the database. Checks section
617
- file checksums, document manifest references, and
618
- type consistency.
772
+ file checksums, document manifest references, type
773
+ consistency, and divergent content (sections sharing
774
+ the same source key with different content).
619
775
 
620
776
  **Output:**
621
777
  - **stdout**: JSON integrity report:
@@ -672,11 +828,15 @@ manifest references it (empty `docids` array).
672
828
  ```json
673
829
  {
674
830
  "removed_sections": 3,
675
- "removed_bytes": 15360
831
+ "removed_bytes": 15360,
832
+ "stale_sources": 1
676
833
  }
677
834
  ```
678
835
  When no sections are eligible, `removed_sections`
679
836
  is `0` and `removed_bytes` is `0`.
837
+ `stale_sources` reports sections whose
838
+ `source_path` file no longer contains their heading
839
+ text (advisory, not automatically removed).
680
840
  - **stderr**: errors only.
681
841
 
682
842
  **Exit code:** `0` on success, `1` on error.
@@ -734,6 +894,55 @@ src/cli.ts parseArgs()
734
894
  -> stdout
735
895
  ```
736
896
 
897
+ ### `export` -- snapshot database
898
+
899
+ ```
900
+ kbdb export [options] [<path>]
901
+ ```
902
+
903
+ Export the database as a self-contained directory
904
+ snapshot for backup, transfer, or version control.
905
+ The export includes sections, documents, and the
906
+ catalog. Indexes are excluded -- they are derived
907
+ data and can be rebuilt with `kbdb rebuild` after
908
+ importing.
909
+
910
+ **Arguments:**
911
+ - `<path>` -- Output directory path. Defaults to
912
+ `./kbdb-export/` in the current working directory.
913
+ If the directory exists, it is overwritten.
914
+
915
+ **Options:**
916
+ - `--db <path>` -- Source database directory.
917
+
918
+ **Output:**
919
+ - **stdout**: JSON report:
920
+ ```json
921
+ {
922
+ "path": "/absolute/path/kbdb-export",
923
+ "sections_exported": 42,
924
+ "documents_exported": 5
925
+ }
926
+ ```
927
+ - **stderr**: errors only.
928
+
929
+ **Exit code:** `0` on success, `1` on error.
930
+
931
+ **Delegation chain:**
932
+ ```
933
+ src/cli.ts parseArgs()
934
+ -> findDb() / promptUser() / runDbInit()
935
+ -> createWorkerClient({ contextPath })
936
+ -> versionGate(client, dbDir)
937
+ -> dispatchCommand(client, options)
938
+ -> runExport(client, options)
939
+ -> client.export({ path })
940
+ -> IPC -> worker daemon
941
+ -> kb-worker.wasm
942
+ -> fs-database.wasm
943
+ -> stdout
944
+ ```
945
+
737
946
  ### `kbdb db` -- database management
738
947
 
739
948
  The `db` command group manages the `.kbdb` database
@@ -1520,10 +1729,13 @@ processes the raw argument vector
1520
1729
  5. All other flags (`--db`, `--format`, `--mode`,
1521
1730
  `--limit`, `--offset`, `--title`, `--description`,
1522
1731
  `--docid`, `--name`, `--persona`, `--body`,
1523
- `--skills`) consume the next token as their value.
1524
- 6. `--content` / `-c` is a boolean flag; it sets
1525
- `options.content = true` without consuming the next
1526
- token.
1732
+ `--skills`, `--depth` / `-d`, `--tags`) consume
1733
+ the next token as their value. `--depth` is parsed
1734
+ as a number and clamped to the range 0--3. `--tags`
1735
+ splits its value on commas into a `string[]`.
1736
+ 6. `--content` / `-c` and `--replace` are boolean
1737
+ flags; they set their respective option to `true`
1738
+ without consuming the next token.
1527
1739
  7. The first non-flag, non-group token becomes the
1528
1740
  **command**.
1529
1741
  8. Subsequent non-flag tokens become **positional
@@ -1584,6 +1796,12 @@ interface CliOptions {
1584
1796
  /** Comma-separated skill kbids
1585
1797
  * (agent create). Parsed to string[]. */
1586
1798
  skills?: string[];
1799
+ /** Recall expansion depth (0-3). Defaults to 0. */
1800
+ depth?: number;
1801
+ /** Comma-separated tags for scoping (learn). */
1802
+ tags?: string[];
1803
+ /** Enable supersession by source key (learn). */
1804
+ replace?: boolean;
1587
1805
  /** Positional arguments following the sub-command. */
1588
1806
  args: string[];
1589
1807
  }
@@ -1638,6 +1856,7 @@ Knowledge Base:
1638
1856
  learn Import content from files/stdin
1639
1857
  unlearn Remove sections by kbid
1640
1858
  search Query the knowledge base
1859
+ recall Retrieve section context by kbid
1641
1860
  content Compose rendered content from ids
1642
1861
 
1643
1862
  Database:
@@ -1650,6 +1869,7 @@ Maintenance:
1650
1869
  sections
1651
1870
  rebuild Reconstruct all index files
1652
1871
  status Show database status
1872
+ export Snapshot database for backup
1653
1873
 
1654
1874
  Skills:
1655
1875
  skill learn Create a new skill definition
@@ -1734,12 +1954,20 @@ interface SearchDisplay {
1734
1954
  docids: string[];
1735
1955
  /** Relevance score from the ranking engine. */
1736
1956
  score: number;
1957
+ /** Normalized score (0.0-1.0) relative to the top
1958
+ * result in this result set. */
1959
+ confidence: number;
1737
1960
  /** KWIC excerpt (~150 chars) centered on the
1738
1961
  * highest-scoring matched term. Empty string
1739
1962
  * for image sections. */
1740
1963
  snippet: string;
1741
1964
  /** Query terms that matched, as a flat string[]. */
1742
1965
  matched_terms: string[];
1966
+ /** Fields that contained matches: subset of
1967
+ * ["heading", "body", "code"]. */
1968
+ matched_fields: string[];
1969
+ /** ISO 8601 creation timestamp. */
1970
+ created_at: string;
1743
1971
  /** Full section text. Empty string when --content
1744
1972
  * is not used. */
1745
1973
  preview: string;
@@ -1764,12 +1992,23 @@ Produced by `runLearn()` for each file ingested.
1764
1992
  interface LearnResult {
1765
1993
  /** Knowledge-base identifier assigned to the section. */
1766
1994
  kbid: string;
1767
- /** Absolute path to the source file (or "-" for stdin). */
1995
+ /** Absolute path to the source file (or "-" for
1996
+ * stdin). */
1768
1997
  path: string;
1769
1998
  /** UTF-8 character count of the ingested content. */
1770
1999
  size: number;
1771
- /** true when the file was skipped without being ingested. */
2000
+ /** true when the file was skipped. */
1772
2001
  skipped: boolean;
2002
+ /** Kbid of the section this one superseded via
2003
+ * --replace, or null. */
2004
+ superseded: string | null;
2005
+ /** Warning strings (e.g. "heading_missing"). */
2006
+ warnings: string[];
2007
+ /** Sections with similarity >= 0.85. */
2008
+ near_duplicates: Array<{
2009
+ kbid: string;
2010
+ similarity: number;
2011
+ }>;
1773
2012
  }
1774
2013
  ```
1775
2014
 
@@ -1860,10 +2099,12 @@ Routing table:
1860
2099
  | `learn` | `runLearn` | yes |
1861
2100
  | `unlearn` | `runUnlearn` | yes |
1862
2101
  | `search` | `runSearch` | yes |
2102
+ | `recall` | `runRecall` | yes |
1863
2103
  | `content` | `runContent` | yes |
1864
2104
  | `check` | `runCheck` | yes |
1865
2105
  | `gc` | `runGc` | yes |
1866
2106
  | `rebuild` | `runRebuild` | yes |
2107
+ | `export` | `runExport` | yes |
1867
2108
  | `db-init` | `runDbInit` | no |
1868
2109
  | `db-migrate` | `runDbMigrate` | yes |
1869
2110
  | `skill-learn` | `runSkillLearn` | yes |