@dikolab/kbdb 0.2.2 → 0.3.1

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 (520) hide show
  1. package/README.md +47 -31
  2. package/dist/bench/constants/corpus-defaults.constant.d.ts +3 -0
  3. package/dist/bench/functions/format-report.function.d.ts +11 -0
  4. package/dist/bench/functions/generate-corpus.function.d.ts +12 -0
  5. package/dist/bench/functions/measure-operation.function.d.ts +14 -0
  6. package/dist/bench/functions/seeded-rng.function.d.ts +11 -0
  7. package/dist/bench/functions/zipf-word.function.d.ts +13 -0
  8. package/dist/bench/index.d.ts +10 -0
  9. package/dist/bench/typings/bench-result.interface.d.ts +11 -0
  10. package/dist/bench/typings/bench-suite-result.interface.d.ts +10 -0
  11. package/dist/bench/typings/corpus-config.interface.d.ts +11 -0
  12. package/dist/bench/typings/corpus-section.interface.d.ts +9 -0
  13. package/dist/cli.cjs +523 -80
  14. package/dist/cli.cjs.map +4 -4
  15. package/dist/cli.mjs +515 -72
  16. package/dist/cli.mjs.map +4 -4
  17. package/dist/kbdb-worker.cjs +395 -60
  18. package/dist/kbdb-worker.cjs.map +4 -4
  19. package/dist/mod.cjs +17 -0
  20. package/dist/mod.cjs.map +2 -2
  21. package/dist/mod.mjs +17 -0
  22. package/dist/mod.mjs.map +2 -2
  23. package/dist/src/shared/auto-capture/classes/auto-capture-controller.class.d.ts +33 -0
  24. package/dist/src/shared/auto-capture/constants/auto-capture-defaults.constant.d.ts +8 -0
  25. package/dist/src/shared/auto-capture/functions/build-capture-prompt.function.d.ts +11 -0
  26. package/dist/src/shared/auto-capture/functions/evaluate-trigger.function.d.ts +12 -0
  27. package/dist/src/shared/auto-capture/index.d.ts +7 -0
  28. package/dist/src/shared/auto-capture/typings/auto-capture-config.interface.d.ts +13 -0
  29. package/dist/src/shared/auto-capture/typings/auto-capture-state.interface.d.ts +13 -0
  30. package/dist/src/shared/auto-capture/typings/auto-capture-trigger.interface.d.ts +7 -0
  31. package/dist/src/shared/cli/constants/global-help.constant.d.ts +8 -0
  32. package/dist/src/shared/cli/constants/leaf-help.constant.d.ts +7 -0
  33. package/dist/src/shared/cli/constants/memory-protocol-body.constant.d.ts +7 -0
  34. package/dist/src/shared/cli/constants/query-guidance-body.constant.d.ts +7 -0
  35. package/dist/src/shared/cli/constants/subcommand-help.constant.d.ts +8 -0
  36. package/dist/src/shared/cli/functions/collect-files.function.d.ts +13 -0
  37. package/dist/src/shared/cli/functions/compute-section-kbid.function.d.ts +15 -0
  38. package/dist/src/shared/cli/functions/dispatch-command.function.d.ts +3 -1
  39. package/dist/src/shared/cli/functions/format-mcp-output.function.d.ts +9 -0
  40. package/dist/src/shared/cli/functions/format-text-output.function.d.ts +9 -0
  41. package/dist/src/shared/cli/functions/generate-group-help.function.d.ts +11 -0
  42. package/dist/src/shared/cli/functions/handle-data-command.function.d.ts +16 -0
  43. package/dist/src/shared/cli/functions/handle-mcp.function.d.ts +15 -0
  44. package/dist/src/shared/cli/functions/handle-migrate.function.d.ts +15 -0
  45. package/dist/src/shared/cli/functions/hydrate-search-previews.function.d.ts +14 -0
  46. package/dist/src/shared/cli/functions/install-default-skills.function.d.ts +12 -0
  47. package/dist/src/shared/cli/functions/resolve-skill-names.function.d.ts +16 -0
  48. package/dist/src/shared/cli/functions/run-check.function.d.ts +47 -5
  49. package/dist/src/shared/cli/functions/run-export.function.d.ts +34 -0
  50. package/dist/src/shared/cli/functions/run-gc.function.d.ts +6 -0
  51. package/dist/src/shared/cli/functions/run-learn.function.d.ts +35 -6
  52. package/dist/src/shared/cli/functions/run-recall.function.d.ts +45 -0
  53. package/dist/src/shared/cli/functions/run-search.function.d.ts +53 -15
  54. package/dist/src/shared/cli/functions/version-gate.function.d.ts +15 -0
  55. package/dist/src/shared/cli/functions/wrap-command.function.d.ts +15 -0
  56. package/dist/src/shared/cli/index.d.ts +4 -0
  57. package/dist/src/shared/cli/typings/agent-create-client.interface.d.ts +42 -0
  58. package/dist/src/shared/cli/typings/agent-get-client.interface.d.ts +36 -0
  59. package/dist/src/shared/cli/typings/check-client.interface.d.ts +58 -0
  60. package/dist/src/shared/cli/typings/cli-deps.interface.d.ts +48 -0
  61. package/dist/src/shared/cli/typings/cli-options.interface.d.ts +15 -0
  62. package/dist/src/shared/cli/typings/disconnectable-client.interface.d.ts +26 -0
  63. package/dist/src/shared/cli/typings/dispatch-client.type.d.ts +27 -0
  64. package/dist/src/shared/cli/typings/learn-client.interface.d.ts +52 -0
  65. package/dist/src/shared/cli/typings/learn-io.interface.d.ts +5 -0
  66. package/dist/src/shared/cli/typings/learn-result.model.d.ts +19 -0
  67. package/dist/src/shared/cli/typings/search-client.interface.d.ts +71 -0
  68. package/dist/src/shared/cli/typings/search-display.model.d.ts +18 -0
  69. package/dist/src/shared/embedding/classes/null-embedding-provider.class.d.ts +20 -0
  70. package/dist/src/shared/embedding/constants/near-duplicate-thresholds.constant.d.ts +15 -0
  71. package/dist/src/shared/embedding/functions/build-vector-index.function.d.ts +14 -0
  72. package/dist/src/shared/embedding/functions/cosine-similarity.function.d.ts +10 -0
  73. package/dist/src/shared/embedding/functions/detect-near-duplicates.function.d.ts +18 -0
  74. package/dist/src/shared/embedding/functions/jaccard-coefficient.function.d.ts +9 -0
  75. package/dist/src/shared/embedding/functions/read-vector-index-meta.function.d.ts +10 -0
  76. package/dist/src/shared/embedding/functions/rrf-fuse.function.d.ts +14 -0
  77. package/dist/src/shared/embedding/functions/search-vectors.function.d.ts +14 -0
  78. package/dist/src/shared/embedding/index.d.ts +16 -0
  79. package/dist/src/shared/embedding/typings/embedding-config.interface.d.ts +20 -0
  80. package/dist/src/shared/embedding/typings/embedding-provider.interface.d.ts +23 -0
  81. package/dist/src/shared/embedding/typings/near-duplicate-candidate.model.d.ts +23 -0
  82. package/dist/src/shared/embedding/typings/near-duplicate-result.model.d.ts +24 -0
  83. package/dist/src/shared/embedding/typings/vector-index-entry.model.d.ts +12 -0
  84. package/dist/src/shared/embedding/typings/vector-index-meta.model.d.ts +11 -0
  85. package/dist/src/shared/embedding/typings/vector-search-result.model.d.ts +7 -0
  86. package/dist/src/shared/mcp/classes/mcp-server.class.d.ts +8 -0
  87. package/dist/src/shared/mcp/constants/tool-agent-create.constant.d.ts +3 -0
  88. package/dist/src/shared/mcp/constants/tool-agent-delete.constant.d.ts +3 -0
  89. package/dist/src/shared/mcp/constants/tool-agent-get.constant.d.ts +3 -0
  90. package/dist/src/shared/mcp/constants/tool-agent-list.constant.d.ts +3 -0
  91. package/dist/src/shared/mcp/constants/tool-auto-capture-review.constant.d.ts +8 -0
  92. package/dist/src/shared/mcp/constants/tool-check.constant.d.ts +3 -0
  93. package/dist/src/shared/mcp/constants/tool-content.constant.d.ts +3 -0
  94. package/dist/src/shared/mcp/constants/tool-export.constant.d.ts +3 -0
  95. package/dist/src/shared/mcp/constants/tool-gc.constant.d.ts +3 -0
  96. package/dist/src/shared/mcp/constants/tool-learn.constant.d.ts +3 -0
  97. package/dist/src/shared/mcp/constants/tool-rebuild.constant.d.ts +3 -0
  98. package/dist/src/shared/mcp/constants/tool-recall.constant.d.ts +3 -0
  99. package/dist/src/shared/mcp/constants/tool-retrieve.constant.d.ts +3 -0
  100. package/dist/src/shared/mcp/constants/tool-search.constant.d.ts +3 -0
  101. package/dist/src/shared/mcp/constants/tool-skill-delete.constant.d.ts +3 -0
  102. package/dist/src/shared/mcp/constants/tool-skill-get.constant.d.ts +3 -0
  103. package/dist/src/shared/mcp/constants/tool-skill-learn.constant.d.ts +3 -0
  104. package/dist/src/shared/mcp/constants/tool-skill-list.constant.d.ts +3 -0
  105. package/dist/src/shared/mcp/constants/tool-status.constant.d.ts +3 -0
  106. package/dist/src/shared/mcp/constants/tool-unlearn.constant.d.ts +3 -0
  107. package/dist/src/shared/mcp/functions/as-boolean-or-undefined.function.d.ts +7 -0
  108. package/dist/src/shared/mcp/functions/as-string-array-or-undefined.function.d.ts +7 -0
  109. package/dist/src/shared/mcp/functions/as-string-array.function.d.ts +7 -0
  110. package/dist/src/shared/mcp/functions/as-string.function.d.ts +8 -0
  111. package/dist/src/shared/mcp/functions/build-skills-text.function.d.ts +18 -0
  112. package/dist/src/shared/mcp/functions/handle-agent-prompt.function.d.ts +14 -0
  113. package/dist/src/shared/mcp/functions/handle-mcp-request.function.d.ts +14 -0
  114. package/dist/src/shared/mcp/functions/handle-prompt-get.function.d.ts +4 -3
  115. package/dist/src/shared/mcp/functions/handle-skill-prompt.function.d.ts +16 -0
  116. package/dist/src/shared/mcp/functions/handle-tool-auto-capture-review.function.d.ts +12 -0
  117. package/dist/src/shared/mcp/functions/handle-tool-check.function.d.ts +11 -0
  118. package/dist/src/shared/mcp/functions/handle-tool-content.function.d.ts +12 -0
  119. package/dist/src/shared/mcp/functions/handle-tool-export.function.d.ts +12 -0
  120. package/dist/src/shared/mcp/functions/handle-tool-gc.function.d.ts +11 -0
  121. package/dist/src/shared/mcp/functions/handle-tool-learn.function.d.ts +12 -0
  122. package/dist/src/shared/mcp/functions/handle-tool-rebuild.function.d.ts +11 -0
  123. package/dist/src/shared/mcp/functions/handle-tool-retrieve.function.d.ts +12 -0
  124. package/dist/src/shared/mcp/functions/handle-tool-search.function.d.ts +13 -0
  125. package/dist/src/shared/mcp/functions/handle-tool-skill-delete.function.d.ts +12 -0
  126. package/dist/src/shared/mcp/functions/handle-tool-skill-get.function.d.ts +13 -0
  127. package/dist/src/shared/mcp/functions/handle-tool-skill-learn.function.d.ts +13 -0
  128. package/dist/src/shared/mcp/functions/handle-tool-skill-list.function.d.ts +11 -0
  129. package/dist/src/shared/mcp/functions/handle-tool-status.function.d.ts +11 -0
  130. package/dist/src/shared/mcp/functions/handle-tool-unlearn.function.d.ts +12 -0
  131. package/dist/src/shared/mcp/functions/parse-agent-meta.function.d.ts +14 -0
  132. package/dist/src/shared/mcp/functions/parse-skill-arguments.function.d.ts +11 -0
  133. package/dist/src/shared/mcp/functions/read-agent-meta.function.d.ts +17 -0
  134. package/dist/src/shared/mcp/functions/resolve-skill-refs.function.d.ts +23 -0
  135. package/dist/src/shared/mcp/functions/run-startup-health-check.function.d.ts +14 -0
  136. package/dist/src/shared/mcp/typings/mcp-capabilities.interface.d.ts +16 -0
  137. package/dist/src/shared/mcp/typings/mcp-client.interface.d.ts +45 -0
  138. package/dist/src/shared/mcp/typings/mcp-completion.interface.d.ts +43 -0
  139. package/dist/src/shared/mcp/typings/mcp-content-result.model.d.ts +9 -0
  140. package/dist/src/shared/mcp/typings/mcp-export-result.model.d.ts +11 -0
  141. package/dist/src/shared/mcp/typings/mcp-gc-result.model.d.ts +15 -0
  142. package/dist/src/shared/mcp/typings/mcp-integrity-check-result.model.d.ts +16 -0
  143. package/dist/src/shared/mcp/typings/mcp-integrity-error.model.d.ts +9 -0
  144. package/dist/src/shared/mcp/typings/mcp-notification.interface.d.ts +9 -0
  145. package/dist/src/shared/mcp/typings/mcp-rebuild-result.model.d.ts +9 -0
  146. package/dist/src/shared/mcp/typings/mcp-request.interface.d.ts +11 -0
  147. package/dist/src/shared/mcp/typings/mcp-resource-result.interface.d.ts +12 -0
  148. package/dist/src/shared/mcp/typings/mcp-resource-template.interface.d.ts +11 -0
  149. package/dist/src/shared/mcp/typings/mcp-response.interface.d.ts +18 -0
  150. package/dist/src/shared/mcp/typings/mcp-server-info.interface.d.ts +7 -0
  151. package/dist/src/shared/mcp/typings/mcp-server-state.interface.d.ts +16 -0
  152. package/dist/src/shared/mcp/typings/mcp-tool-annotations.interface.d.ts +32 -0
  153. package/dist/src/shared/mcp/typings/mcp-tool-definition.interface.d.ts +15 -0
  154. package/dist/src/shared/mcp/typings/mcp-tool-result.interface.d.ts +19 -0
  155. package/dist/src/shared/mcp/typings/mcp-worker-client.interface.d.ts +220 -0
  156. package/dist/src/shared/mcp/typings/tool-call-result.model.d.ts +17 -0
  157. package/dist/src/shared/sync/functions/build-import-report.function.d.ts +18 -0
  158. package/dist/src/shared/sync/functions/parse-export-entry.function.d.ts +11 -0
  159. package/dist/src/shared/sync/functions/resolve-conflict.function.d.ts +13 -0
  160. package/dist/src/shared/sync/functions/serialize-export-entry.function.d.ts +8 -0
  161. package/dist/src/shared/sync/index.d.ts +9 -0
  162. package/dist/src/shared/sync/typings/conflict-resolution.type.d.ts +8 -0
  163. package/dist/src/shared/sync/typings/export-entry.interface.d.ts +13 -0
  164. package/dist/src/shared/sync/typings/export-options.interface.d.ts +9 -0
  165. package/dist/src/shared/sync/typings/import-options.interface.d.ts +7 -0
  166. package/dist/src/shared/sync/typings/import-report.interface.d.ts +15 -0
  167. package/dist/src/shared/wasm-codec/functions/decode-add-section-result.function.d.ts +48 -0
  168. package/dist/src/shared/wasm-codec/functions/decode-one-recall-result.function.d.ts +14 -0
  169. package/dist/src/shared/wasm-codec/functions/decode-option-string.function.d.ts +12 -0
  170. package/dist/src/shared/wasm-codec/functions/decode-recall-document.function.d.ts +14 -0
  171. package/dist/src/shared/wasm-codec/functions/decode-recall-reference.function.d.ts +14 -0
  172. package/dist/src/shared/wasm-codec/functions/decode-recall-sibling.function.d.ts +13 -0
  173. package/dist/src/shared/wasm-codec/functions/decode-scored-results.function.d.ts +58 -0
  174. package/dist/src/shared/wasm-codec/functions/decode-section-match.function.d.ts +15 -0
  175. package/dist/src/shared/wasm-codec/functions/decode-section-record-trailing.function.d.ts +14 -0
  176. package/dist/src/shared/wasm-codec/functions/decode-section-record.function.d.ts +14 -0
  177. package/dist/src/shared/wasm-codec/functions/decode-section-records.function.d.ts +33 -0
  178. package/dist/src/shared/wasm-codec/functions/decode-section-type.function.d.ts +13 -0
  179. package/dist/src/shared/wasm-codec/functions/decode-wasm-list.function.d.ts +17 -0
  180. package/dist/src/shared/wasm-codec/functions/encode-add-section-params.function.d.ts +52 -0
  181. package/dist/src/shared/wasm-codec/index.d.ts +2 -0
  182. package/dist/src/shared/wasm-codec/typings/add-section-input.model.d.ts +45 -0
  183. package/dist/src/shared/wasm-codec/typings/add-section-result.model.d.ts +27 -0
  184. package/dist/src/shared/wasm-codec/typings/document-manifest.model.d.ts +19 -0
  185. package/dist/src/shared/wasm-codec/typings/document-section.model.d.ts +12 -0
  186. package/dist/src/shared/wasm-codec/typings/item-decoder.type.d.ts +6 -0
  187. package/dist/src/shared/wasm-codec/typings/near-duplicate.model.d.ts +16 -0
  188. package/dist/src/shared/wasm-codec/typings/paged-search-result.model.d.ts +21 -0
  189. package/dist/src/shared/wasm-codec/typings/section-match.model.d.ts +31 -0
  190. package/dist/src/shared/wasm-codec/typings/section-record-trailing.model.d.ts +38 -0
  191. package/dist/src/shared/wasm-codec/typings/section-record.model.d.ts +66 -0
  192. package/dist/src/shared/wasm-codec/typings/section-type-result.model.d.ts +12 -0
  193. package/dist/src/shared/worker-client/classes/worker-client.class.d.ts +16 -0
  194. package/dist/src/shared/worker-client/functions/handle-ipc-data.function.d.ts +16 -0
  195. package/dist/src/shared/worker-client/functions/send-ipc-request.function.d.ts +19 -0
  196. package/dist/src/shared/worker-client/index.d.ts +1 -1
  197. package/dist/src/shared/worker-client/typings/add-section-result.model.d.ts +31 -15
  198. package/dist/src/shared/worker-client/typings/export-result.model.d.ts +14 -0
  199. package/dist/src/shared/worker-client/typings/gc-result.model.d.ts +6 -0
  200. package/dist/src/shared/worker-client/typings/json-rpc-response.interface.d.ts +16 -0
  201. package/dist/src/shared/worker-client/typings/pending-call.interface.d.ts +7 -0
  202. package/dist/src/shared/worker-client/typings/recall-document.model.d.ts +16 -0
  203. package/dist/src/shared/worker-client/typings/recall-params.model.d.ts +15 -0
  204. package/dist/src/shared/worker-client/typings/recall-reference.model.d.ts +32 -0
  205. package/dist/src/shared/worker-client/typings/recall-sibling.model.d.ts +11 -0
  206. package/dist/src/shared/worker-client/typings/recall-single-result.model.d.ts +40 -0
  207. package/dist/src/shared/worker-client/typings/search-result.model.d.ts +12 -0
  208. package/dist/src/shared/worker-client/typings/section.model.d.ts +16 -0
  209. package/dist/src/shared/worker-daemon/classes/ipc-error.class.d.ts +17 -0
  210. package/dist/src/shared/worker-daemon/classes/worker-daemon.class.d.ts +35 -0
  211. package/dist/src/shared/worker-daemon/constants/wasm-method-map.constant.d.ts +16 -0
  212. package/dist/src/shared/worker-daemon/functions/build-ipc-error-response.function.d.ts +9 -0
  213. package/dist/src/shared/worker-daemon/functions/check-catalog-version.function.d.ts +9 -0
  214. package/dist/src/shared/worker-daemon/functions/check-preconditions.function.d.ts +10 -0
  215. package/dist/src/shared/worker-daemon/functions/detect-stale-pid.function.d.ts +15 -0
  216. package/dist/src/shared/worker-daemon/functions/dispatch-request.function.d.ts +35 -0
  217. package/dist/src/shared/worker-daemon/functions/handle-check-version.function.d.ts +23 -0
  218. package/dist/src/shared/worker-daemon/functions/handle-config-method.function.d.ts +11 -0
  219. package/dist/src/shared/worker-daemon/functions/handle-read-ops.function.d.ts +52 -0
  220. package/dist/src/shared/worker-daemon/functions/handle-write-ops.function.d.ts +44 -0
  221. package/dist/src/shared/worker-daemon/functions/parse-auto-capture-section.function.d.ts +14 -0
  222. package/dist/src/shared/worker-daemon/functions/parse-catalog-version.function.d.ts +10 -0
  223. package/dist/src/shared/worker-daemon/functions/parse-embedding-section.function.d.ts +13 -0
  224. package/dist/src/shared/worker-daemon/functions/parse-worker-toml.function.d.ts +11 -0
  225. package/dist/src/shared/worker-daemon/functions/run-startup-integrity-check.function.d.ts +18 -0
  226. package/dist/src/shared/worker-daemon/functions/scan-near-duplicates.function.d.ts +21 -0
  227. package/dist/src/shared/worker-daemon/functions/wasm-bridge.function.d.ts +51 -0
  228. package/dist/src/shared/worker-daemon/functions/wasm-memory-helpers.function.d.ts +22 -0
  229. package/dist/src/shared/worker-daemon/functions/write-lock.function.d.ts +32 -0
  230. package/dist/src/shared/worker-daemon/typings/allocator-ref.interface.d.ts +16 -0
  231. package/dist/src/shared/worker-daemon/typings/daemon-config.interface.d.ts +6 -0
  232. package/dist/src/shared/worker-daemon/typings/fs-adapter.interface.d.ts +22 -0
  233. package/dist/src/shared/worker-daemon/typings/handler-context.interface.d.ts +18 -0
  234. package/dist/src/shared/worker-daemon/typings/memory-ref.interface.d.ts +13 -0
  235. package/dist/src/shared/worker-daemon/typings/wasm-fn.type.d.ts +2 -0
  236. package/dist/src/shared/worker-daemon/typings/write-lock.interface.d.ts +15 -0
  237. package/dist/wasm/fs-database/kbdb_fs_database.d.ts +22 -1
  238. package/dist/wasm/fs-database/kbdb_fs_database.js +28 -1
  239. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  240. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm.d.ts +1 -0
  241. package/dist/wasm/kb-worker/kbdb_worker.d.ts +48 -1
  242. package/dist/wasm/kb-worker/kbdb_worker.js +60 -1
  243. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  244. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm.d.ts +2 -0
  245. package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
  246. package/dist/worker.mjs +396 -60
  247. package/dist/worker.mjs.map +4 -4
  248. package/docs/details/cli.md +102 -15
  249. package/docs/details/library-api.md +55 -6
  250. package/docs/details/mcp-server.md +10 -4
  251. package/docs/details/search-and-ranking.md +63 -5
  252. package/docs/details/storage.md +2 -0
  253. package/docs/goals/auto-capture.md +378 -0
  254. package/docs/goals/benchmarking.md +296 -0
  255. package/docs/goals/cli.md +255 -14
  256. package/docs/goals/concurrency.md +259 -0
  257. package/docs/goals/database.md +244 -17
  258. package/docs/goals/document.md +1 -1
  259. package/docs/goals/hybrid-search.md +436 -0
  260. package/docs/goals/mcp.md +83 -14
  261. package/docs/goals/query-parser.md +98 -4
  262. package/docs/goals/query-result.md +177 -10
  263. package/docs/goals/semantic-dedup.md +229 -0
  264. package/docs/goals/skills.md +72 -0
  265. package/docs/goals/sync.md +217 -0
  266. package/docs/goals/worker-daemon.md +54 -7
  267. package/docs/modules/rust/fs-database/functions/integrity.md +11 -0
  268. package/docs/modules/rust/fs-database/functions/section.md +23 -6
  269. package/docs/modules/rust/fs-database/indexes/vectors.md +110 -0
  270. package/docs/modules/rust/fs-database/module.md +1 -0
  271. package/docs/modules/rust/fs-database/types/section.md +27 -1
  272. package/docs/modules/rust/overview.md +2 -1
  273. package/docs/modules/rust/query-parser/functions/module.md +2 -2
  274. package/docs/modules/rust/query-parser/functions/pipeline.md +44 -6
  275. package/docs/modules/rust/query-parser/module.md +5 -4
  276. package/docs/modules/rust/query-parser/types/keyphrase.md +11 -0
  277. package/docs/modules/rust/query-parser/types/module.md +3 -3
  278. package/docs/modules/typescript/shared/auto-capture/module.md +73 -0
  279. package/docs/modules/typescript/shared/cli/functions.md +68 -3
  280. package/docs/modules/typescript/shared/embedding/functions.md +94 -0
  281. package/docs/modules/typescript/shared/embedding/module.md +71 -0
  282. package/docs/modules/typescript/shared/embedding/typings.md +122 -0
  283. package/docs/overview.md +148 -166
  284. package/docs/release-notes/0.2.0.md +3 -3
  285. package/docs/release-notes/0.3.0.md +89 -0
  286. package/docs/release-notes/0.3.1.md +111 -0
  287. package/docs/release-notes/README.md +2 -0
  288. package/package.json +1 -1
  289. package/src/shared/auto-capture/classes/auto-capture-controller.class.ts +62 -0
  290. package/src/shared/auto-capture/constants/auto-capture-defaults.constant.ts +15 -0
  291. package/src/shared/auto-capture/functions/build-capture-prompt.function.ts +27 -0
  292. package/src/shared/auto-capture/functions/evaluate-trigger.function.ts +50 -0
  293. package/src/shared/auto-capture/index.ts +7 -0
  294. package/src/shared/auto-capture/typings/auto-capture-config.interface.ts +13 -0
  295. package/src/shared/auto-capture/typings/auto-capture-state.interface.ts +13 -0
  296. package/src/shared/auto-capture/typings/auto-capture-trigger.interface.ts +7 -0
  297. package/src/shared/cli/constants/global-help.constant.ts +73 -0
  298. package/src/shared/cli/constants/leaf-help.constant.ts +219 -0
  299. package/src/shared/cli/constants/memory-protocol-body.constant.ts +39 -0
  300. package/src/shared/cli/constants/query-guidance-body.constant.ts +37 -0
  301. package/src/shared/cli/constants/subcommand-help.constant.ts +195 -0
  302. package/src/shared/cli/functions/collect-files.function.ts +55 -0
  303. package/src/shared/cli/functions/compute-section-kbid.function.ts +49 -0
  304. package/src/shared/cli/functions/dispatch-command.function.ts +53 -1
  305. package/src/shared/cli/functions/format-mcp-output.function.ts +41 -0
  306. package/src/shared/cli/functions/format-output.function.ts +36 -12
  307. package/src/shared/cli/functions/format-text-output.function.ts +42 -0
  308. package/src/shared/cli/functions/generate-group-help.function.ts +41 -0
  309. package/src/shared/cli/functions/generate-help.function.ts +56 -1
  310. package/src/shared/cli/functions/handle-data-command.function.ts +67 -0
  311. package/src/shared/cli/functions/handle-mcp.function.ts +56 -0
  312. package/src/shared/cli/functions/handle-migrate.function.ts +64 -0
  313. package/src/shared/cli/functions/hydrate-search-previews.function.ts +29 -0
  314. package/src/shared/cli/functions/install-default-skills.function.ts +296 -0
  315. package/src/shared/cli/functions/parse-args.function.ts +16 -0
  316. package/src/shared/cli/functions/resolve-skill-names.function.ts +43 -0
  317. package/src/shared/cli/functions/run-check.function.ts +87 -6
  318. package/src/shared/cli/functions/run-export.function.ts +40 -0
  319. package/src/shared/cli/functions/run-gc.function.ts +6 -0
  320. package/src/shared/cli/functions/run-init.function.ts +2 -0
  321. package/src/shared/cli/functions/run-learn.function.ts +68 -16
  322. package/src/shared/cli/functions/run-recall.function.ts +66 -0
  323. package/src/shared/cli/functions/run-search.function.ts +60 -15
  324. package/src/shared/cli/functions/version-gate.function.ts +44 -0
  325. package/src/shared/cli/functions/wrap-command.function.ts +34 -0
  326. package/src/shared/cli/index.ts +4 -0
  327. package/src/shared/cli/typings/agent-create-client.interface.ts +47 -0
  328. package/src/shared/cli/typings/agent-get-client.interface.ts +39 -0
  329. package/src/shared/cli/typings/check-client.interface.ts +66 -0
  330. package/src/shared/cli/typings/cli-deps.interface.ts +54 -0
  331. package/src/shared/cli/typings/cli-options.interface.ts +15 -0
  332. package/src/shared/cli/typings/disconnectable-client.interface.ts +29 -0
  333. package/src/shared/cli/typings/dispatch-client.type.ts +46 -0
  334. package/src/shared/cli/typings/learn-client.interface.ts +53 -0
  335. package/src/shared/cli/typings/learn-io.interface.ts +5 -0
  336. package/src/shared/cli/typings/learn-result.model.ts +16 -0
  337. package/src/shared/cli/typings/search-client.interface.ts +73 -0
  338. package/src/shared/cli/typings/search-display.model.ts +18 -0
  339. package/src/shared/embedding/classes/null-embedding-provider.class.ts +29 -0
  340. package/src/shared/embedding/constants/near-duplicate-thresholds.constant.ts +17 -0
  341. package/src/shared/embedding/functions/build-vector-index.function.ts +79 -0
  342. package/src/shared/embedding/functions/cosine-similarity.function.ts +31 -0
  343. package/src/shared/embedding/functions/detect-near-duplicates.function.ts +69 -0
  344. package/src/shared/embedding/functions/jaccard-coefficient.function.ts +26 -0
  345. package/src/shared/embedding/functions/read-vector-index-meta.function.ts +44 -0
  346. package/src/shared/embedding/functions/rrf-fuse.function.ts +33 -0
  347. package/src/shared/embedding/functions/search-vectors.function.ts +59 -0
  348. package/src/shared/embedding/index.ts +20 -0
  349. package/src/shared/embedding/typings/embedding-config.interface.ts +23 -0
  350. package/src/shared/embedding/typings/embedding-provider.interface.ts +25 -0
  351. package/src/shared/embedding/typings/near-duplicate-candidate.model.ts +25 -0
  352. package/src/shared/embedding/typings/near-duplicate-result.model.ts +26 -0
  353. package/src/shared/embedding/typings/vector-index-entry.model.ts +13 -0
  354. package/src/shared/embedding/typings/vector-index-meta.model.ts +14 -0
  355. package/src/shared/embedding/typings/vector-search-result.model.ts +8 -0
  356. package/src/shared/mcp/classes/mcp-server.class.ts +36 -4
  357. package/src/shared/mcp/constants/tool-agent-create.constant.ts +39 -0
  358. package/src/shared/mcp/constants/tool-agent-delete.constant.ts +26 -0
  359. package/src/shared/mcp/constants/tool-agent-get.constant.ts +24 -0
  360. package/src/shared/mcp/constants/tool-agent-list.constant.ts +18 -0
  361. package/src/shared/mcp/constants/tool-auto-capture-review.constant.ts +32 -0
  362. package/src/shared/mcp/constants/tool-check.constant.ts +21 -0
  363. package/src/shared/mcp/constants/tool-content.constant.ts +29 -0
  364. package/src/shared/mcp/constants/tool-export.constant.ts +27 -0
  365. package/src/shared/mcp/constants/tool-gc.constant.ts +21 -0
  366. package/src/shared/mcp/constants/tool-learn.constant.ts +58 -0
  367. package/src/shared/mcp/constants/tool-rebuild.constant.ts +21 -0
  368. package/src/shared/mcp/constants/tool-recall.constant.ts +36 -0
  369. package/src/shared/mcp/constants/tool-retrieve.constant.ts +31 -0
  370. package/src/shared/mcp/constants/tool-search.constant.ts +51 -0
  371. package/src/shared/mcp/constants/tool-skill-delete.constant.ts +24 -0
  372. package/src/shared/mcp/constants/tool-skill-get.constant.ts +27 -0
  373. package/src/shared/mcp/constants/tool-skill-learn.constant.ts +37 -0
  374. package/src/shared/mcp/constants/tool-skill-list.constant.ts +18 -0
  375. package/src/shared/mcp/constants/tool-status.constant.ts +20 -0
  376. package/src/shared/mcp/constants/tool-unlearn.constant.ts +25 -0
  377. package/src/shared/mcp/functions/as-boolean-or-undefined.function.ts +11 -0
  378. package/src/shared/mcp/functions/as-string-array-or-undefined.function.ts +17 -0
  379. package/src/shared/mcp/functions/as-string-array.function.ts +15 -0
  380. package/src/shared/mcp/functions/as-string.function.ts +10 -0
  381. package/src/shared/mcp/functions/build-skills-text.function.ts +43 -0
  382. package/src/shared/mcp/functions/create-tool-definitions.function.ts +74 -5
  383. package/src/shared/mcp/functions/handle-agent-create.function.ts +1 -1
  384. package/src/shared/mcp/functions/handle-agent-prompt.function.ts +68 -0
  385. package/src/shared/mcp/functions/handle-mcp-request.function.ts +202 -0
  386. package/src/shared/mcp/functions/handle-prompt-get.function.ts +18 -12
  387. package/src/shared/mcp/functions/handle-skill-prompt.function.ts +44 -0
  388. package/src/shared/mcp/functions/handle-tool-auto-capture-review.function.ts +24 -0
  389. package/src/shared/mcp/functions/handle-tool-call.function.ts +88 -2
  390. package/src/shared/mcp/functions/handle-tool-check.function.ts +21 -0
  391. package/src/shared/mcp/functions/handle-tool-content.function.ts +23 -0
  392. package/src/shared/mcp/functions/handle-tool-export.function.ts +25 -0
  393. package/src/shared/mcp/functions/handle-tool-gc.function.ts +21 -0
  394. package/src/shared/mcp/functions/handle-tool-learn.function.ts +69 -0
  395. package/src/shared/mcp/functions/handle-tool-rebuild.function.ts +21 -0
  396. package/src/shared/mcp/functions/handle-tool-retrieve.function.ts +40 -0
  397. package/src/shared/mcp/functions/handle-tool-search.function.ts +47 -0
  398. package/src/shared/mcp/functions/handle-tool-skill-delete.function.ts +34 -0
  399. package/src/shared/mcp/functions/handle-tool-skill-get.function.ts +59 -0
  400. package/src/shared/mcp/functions/handle-tool-skill-learn.function.ts +61 -0
  401. package/src/shared/mcp/functions/handle-tool-skill-list.function.ts +39 -0
  402. package/src/shared/mcp/functions/handle-tool-status.function.ts +21 -0
  403. package/src/shared/mcp/functions/handle-tool-unlearn.function.ts +24 -0
  404. package/src/shared/mcp/functions/parse-agent-meta.function.ts +27 -0
  405. package/src/shared/mcp/functions/parse-skill-arguments.function.ts +36 -0
  406. package/src/shared/mcp/functions/read-agent-meta.function.ts +41 -0
  407. package/src/shared/mcp/functions/resolve-skill-refs.function.ts +50 -0
  408. package/src/shared/mcp/functions/run-startup-health-check.function.ts +34 -0
  409. package/src/shared/mcp/typings/mcp-capabilities.interface.ts +16 -0
  410. package/src/shared/mcp/typings/mcp-client.interface.ts +47 -0
  411. package/src/shared/mcp/typings/mcp-completion.interface.ts +45 -0
  412. package/src/shared/mcp/typings/mcp-content-result.model.ts +9 -0
  413. package/src/shared/mcp/typings/mcp-export-result.model.ts +11 -0
  414. package/src/shared/mcp/typings/mcp-gc-result.model.ts +15 -0
  415. package/src/shared/mcp/typings/mcp-integrity-check-result.model.ts +17 -0
  416. package/src/shared/mcp/typings/mcp-integrity-error.model.ts +15 -0
  417. package/src/shared/mcp/typings/mcp-notification.interface.ts +9 -0
  418. package/src/shared/mcp/typings/mcp-rebuild-result.model.ts +9 -0
  419. package/src/shared/mcp/typings/mcp-request.interface.ts +11 -0
  420. package/src/shared/mcp/typings/mcp-resource-result.interface.ts +12 -0
  421. package/src/shared/mcp/typings/mcp-resource-template.interface.ts +11 -0
  422. package/src/shared/mcp/typings/mcp-response.interface.ts +18 -0
  423. package/src/shared/mcp/typings/mcp-server-info.interface.ts +7 -0
  424. package/src/shared/mcp/typings/mcp-server-state.interface.ts +17 -0
  425. package/src/shared/mcp/typings/mcp-tool-annotations.interface.ts +32 -0
  426. package/src/shared/mcp/typings/mcp-tool-definition.interface.ts +16 -0
  427. package/src/shared/mcp/typings/mcp-tool-result.interface.ts +19 -0
  428. package/src/shared/mcp/typings/mcp-worker-client.interface.ts +243 -0
  429. package/src/shared/mcp/typings/tool-call-result.model.ts +18 -0
  430. package/src/shared/sync/functions/build-import-report.function.ts +40 -0
  431. package/src/shared/sync/functions/parse-export-entry.function.ts +45 -0
  432. package/src/shared/sync/functions/resolve-conflict.function.ts +31 -0
  433. package/src/shared/sync/functions/serialize-export-entry.function.ts +18 -0
  434. package/src/shared/sync/index.ts +9 -0
  435. package/src/shared/sync/typings/conflict-resolution.type.ts +8 -0
  436. package/src/shared/sync/typings/export-entry.interface.ts +13 -0
  437. package/src/shared/sync/typings/export-options.interface.ts +9 -0
  438. package/src/shared/sync/typings/import-options.interface.ts +7 -0
  439. package/src/shared/sync/typings/import-report.interface.ts +15 -0
  440. package/src/shared/wasm-codec/functions/decode-add-section-result.function.ts +112 -0
  441. package/src/shared/wasm-codec/functions/decode-one-recall-result.function.ts +86 -0
  442. package/src/shared/wasm-codec/functions/decode-option-string.function.ts +24 -0
  443. package/src/shared/wasm-codec/functions/decode-recall-document.function.ts +59 -0
  444. package/src/shared/wasm-codec/functions/decode-recall-reference.function.ts +52 -0
  445. package/src/shared/wasm-codec/functions/decode-recall-sibling.function.ts +43 -0
  446. package/src/shared/wasm-codec/functions/decode-scored-results.function.ts +86 -0
  447. package/src/shared/wasm-codec/functions/decode-section-match.function.ts +80 -0
  448. package/src/shared/wasm-codec/functions/decode-section-record-trailing.function.ts +75 -0
  449. package/src/shared/wasm-codec/functions/decode-section-record.function.ts +85 -0
  450. package/src/shared/wasm-codec/functions/decode-section-records.function.ts +87 -0
  451. package/src/shared/wasm-codec/functions/decode-section-type.function.ts +30 -0
  452. package/src/shared/wasm-codec/functions/decode-wasm-list.function.ts +31 -0
  453. package/src/shared/wasm-codec/functions/encode-add-section-params.function.ts +68 -0
  454. package/src/shared/wasm-codec/index.ts +5 -0
  455. package/src/shared/wasm-codec/typings/add-section-input.model.ts +45 -0
  456. package/src/shared/wasm-codec/typings/add-section-result.model.ts +28 -0
  457. package/src/shared/wasm-codec/typings/document-manifest.model.ts +20 -0
  458. package/src/shared/wasm-codec/typings/document-section.model.ts +12 -0
  459. package/src/shared/wasm-codec/typings/item-decoder.type.ts +10 -0
  460. package/src/shared/wasm-codec/typings/near-duplicate.model.ts +16 -0
  461. package/src/shared/wasm-codec/typings/paged-search-result.model.ts +22 -0
  462. package/src/shared/wasm-codec/typings/section-match.model.ts +31 -0
  463. package/src/shared/wasm-codec/typings/section-record-trailing.model.ts +38 -0
  464. package/src/shared/wasm-codec/typings/section-record.model.ts +66 -0
  465. package/src/shared/wasm-codec/typings/section-type-result.model.ts +12 -0
  466. package/src/shared/worker-client/classes/worker-client.class.ts +19 -0
  467. package/src/shared/worker-client/functions/handle-ipc-data.function.ts +49 -0
  468. package/src/shared/worker-client/functions/send-ipc-request.function.ts +39 -0
  469. package/src/shared/worker-client/index.ts +4 -1
  470. package/src/shared/worker-client/typings/add-section-result.model.ts +32 -15
  471. package/src/shared/worker-client/typings/export-result.model.ts +14 -0
  472. package/src/shared/worker-client/typings/gc-result.model.ts +6 -0
  473. package/src/shared/worker-client/typings/json-rpc-response.interface.ts +17 -0
  474. package/src/shared/worker-client/typings/pending-call.interface.ts +7 -0
  475. package/src/shared/worker-client/typings/recall-document.model.ts +16 -0
  476. package/src/shared/worker-client/typings/recall-params.model.ts +15 -0
  477. package/src/shared/worker-client/typings/recall-reference.model.ts +32 -0
  478. package/src/shared/worker-client/typings/recall-sibling.model.ts +11 -0
  479. package/src/shared/worker-client/typings/recall-single-result.model.ts +41 -0
  480. package/src/shared/worker-client/typings/search-result.model.ts +12 -0
  481. package/src/shared/worker-client/typings/section.model.ts +16 -0
  482. package/src/shared/worker-daemon/classes/ipc-error.class.ts +22 -0
  483. package/src/shared/worker-daemon/classes/worker-daemon.class.ts +315 -46
  484. package/src/shared/worker-daemon/constants/wasm-method-map.constant.ts +69 -0
  485. package/src/shared/worker-daemon/functions/build-ipc-error-response.function.ts +16 -0
  486. package/src/shared/worker-daemon/functions/check-catalog-version.function.ts +54 -0
  487. package/src/shared/worker-daemon/functions/check-preconditions.function.ts +28 -0
  488. package/src/shared/worker-daemon/functions/create-host-imports.function.ts +19 -4
  489. package/src/shared/worker-daemon/functions/create-ipc-server.function.ts +5 -1
  490. package/src/shared/worker-daemon/functions/detect-stale-pid.function.ts +33 -0
  491. package/src/shared/worker-daemon/functions/dispatch-request.function.ts +190 -0
  492. package/src/shared/worker-daemon/functions/handle-check-version.function.ts +74 -0
  493. package/src/shared/worker-daemon/functions/handle-config-method.function.ts +27 -0
  494. package/src/shared/worker-daemon/functions/handle-read-ops.function.ts +236 -0
  495. package/src/shared/worker-daemon/functions/handle-write-ops.function.ts +257 -0
  496. package/src/shared/worker-daemon/functions/parse-auto-capture-section.function.ts +51 -0
  497. package/src/shared/worker-daemon/functions/parse-catalog-version.function.ts +20 -0
  498. package/src/shared/worker-daemon/functions/parse-embedding-section.function.ts +38 -0
  499. package/src/shared/worker-daemon/functions/parse-worker-toml.function.ts +104 -0
  500. package/src/shared/worker-daemon/functions/run-startup-integrity-check.function.ts +55 -0
  501. package/src/shared/worker-daemon/functions/scan-near-duplicates.function.ts +92 -0
  502. package/src/shared/worker-daemon/functions/wasm-bridge.function.ts +144 -0
  503. package/src/shared/worker-daemon/functions/wasm-memory-helpers.function.ts +41 -0
  504. package/src/shared/worker-daemon/functions/write-lock.function.ts +49 -0
  505. package/src/shared/worker-daemon/typings/allocator-ref.interface.ts +16 -0
  506. package/src/shared/worker-daemon/typings/daemon-config.interface.ts +7 -0
  507. package/src/shared/worker-daemon/typings/fs-adapter.interface.ts +22 -0
  508. package/src/shared/worker-daemon/typings/handler-context.interface.ts +19 -0
  509. package/src/shared/worker-daemon/typings/memory-ref.interface.ts +13 -0
  510. package/src/shared/worker-daemon/typings/wasm-fn.type.ts +2 -0
  511. package/src/shared/worker-daemon/typings/write-lock.interface.ts +13 -0
  512. package/src/wasm/fs-database/kbdb_fs_database.d.ts +22 -1
  513. package/src/wasm/fs-database/kbdb_fs_database.js +28 -1
  514. package/src/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  515. package/src/wasm/fs-database/kbdb_fs_database_bg.wasm.d.ts +1 -0
  516. package/src/wasm/kb-worker/kbdb_worker.d.ts +48 -1
  517. package/src/wasm/kb-worker/kbdb_worker.js +60 -1
  518. package/src/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  519. package/src/wasm/kb-worker/kbdb_worker_bg.wasm.d.ts +2 -0
  520. package/src/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
@@ -0,0 +1,55 @@
1
+ import { readdirSync, statSync } from 'node:fs';
2
+ import { basename, extname, join } from 'node:path';
3
+ import { SUPPORTED_EXTENSIONS } from '../constants/defaults.constant.ts';
4
+
5
+ /**
6
+ * Resolves a single target path to a flat list of supported files.
7
+ *
8
+ * When `target` is a file, returns it wrapped in an array if its
9
+ * extension is in `SUPPORTED_EXTENSIONS` and it is not a dotfile;
10
+ * otherwise returns `[]`. When `target` is a directory, recursively
11
+ * collects all matching files, skipping dot-entries at every level.
12
+ * Returns `[]` for non-existent or inaccessible paths.
13
+ *
14
+ * @param target - file or directory path to resolve
15
+ * @returns flat array of absolute or relative paths to supported files
16
+ */
17
+ export function collectFiles(target: string): string[] {
18
+ try {
19
+ const stat = statSync(target);
20
+ if (stat.isFile()) {
21
+ return isSupportedFile(target) ? [target] : [];
22
+ }
23
+ if (stat.isDirectory()) {
24
+ return scanDirectory(target);
25
+ }
26
+ } catch {
27
+ // Non-existent or inaccessible path -- skip
28
+ }
29
+ return [];
30
+ }
31
+
32
+ function scanDirectory(dir: string): string[] {
33
+ const files: string[] = [];
34
+ for (const entry of readdirSync(dir)) {
35
+ if (entry.startsWith('.')) continue;
36
+ const full = join(dir, entry);
37
+ try {
38
+ const stat = statSync(full);
39
+ if (stat.isDirectory()) {
40
+ files.push(...scanDirectory(full));
41
+ } else if (isSupportedFile(full)) {
42
+ files.push(full);
43
+ }
44
+ } catch {
45
+ // Skip inaccessible entries
46
+ }
47
+ }
48
+ return files;
49
+ }
50
+
51
+ function isSupportedFile(path: string): boolean {
52
+ if (basename(path).startsWith('.')) return false;
53
+ const ext = extname(path).toLowerCase();
54
+ return (SUPPORTED_EXTENSIONS as readonly string[]).includes(ext);
55
+ }
@@ -0,0 +1,49 @@
1
+ import { createHash } from 'node:crypto';
2
+
3
+ /** RFC 4648 base32 alphabet (upper-case, no padding). */
4
+ const BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
5
+
6
+ function base32Encode(bytes: Uint8Array): string {
7
+ let result = '';
8
+ let bits = 0;
9
+ let value = 0;
10
+ for (const byte of bytes) {
11
+ value = (value << 8) | byte;
12
+ bits += 8;
13
+ while (bits >= 5) {
14
+ result += BASE32_ALPHABET[(value >>> (bits - 5)) & 0x1f];
15
+ bits -= 5;
16
+ }
17
+ }
18
+ if (bits > 0) {
19
+ result += BASE32_ALPHABET[(value << (5 - bits)) & 0x1f];
20
+ }
21
+ return result.toLowerCase();
22
+ }
23
+
24
+ /**
25
+ * Computes a 26-character kbid for a section using the same algorithm
26
+ * as the Rust engine's `hash_section`.
27
+ *
28
+ * Algorithm:
29
+ * 1. Build input: `"section <mime> <byteLen>\0<content>"`
30
+ * 2. SHA-256 hash the input
31
+ * 3. Take the first 16 bytes
32
+ * 4. Base32 encode (RFC 4648, no padding), lowercased → 26 chars
33
+ *
34
+ * @param mimeType - MIME type string (e.g. `"text/markdown"`)
35
+ * @param content - UTF-8 section content string
36
+ * @returns 26-character lowercase base32 kbid
37
+ */
38
+ export function computeSectionKbid(
39
+ mimeType: string,
40
+ content: string,
41
+ ): string {
42
+ const contentBytes = Buffer.from(content, 'utf-8');
43
+ const header = `section ${mimeType} ${contentBytes.length.toString()}\0`;
44
+ const headerBytes = Buffer.from(header, 'utf-8');
45
+ const input = Buffer.concat([headerBytes, contentBytes]);
46
+ const hash = createHash('sha256').update(input).digest();
47
+ const truncated = new Uint8Array(hash.buffer, 0, 16);
48
+ return base32Encode(truncated);
49
+ }
@@ -19,6 +19,8 @@ import type { AgentCreateClient } from './run-agent-create.function.ts';
19
19
  import type { AgentListClient } from './run-agent-list.function.ts';
20
20
  import type { AgentGetClient } from './run-agent-get.function.ts';
21
21
  import type { AgentDeleteClient } from './run-agent-delete.function.ts';
22
+ import type { RecallClient } from './run-recall.function.ts';
23
+ import type { ExportClient } from './run-export.function.ts';
22
24
  import { runSearch } from './run-search.function.ts';
23
25
  import { runLearn } from './run-learn.function.ts';
24
26
  import { runUnlearn } from './run-unlearn.function.ts';
@@ -38,6 +40,8 @@ import { runAgentCreate } from './run-agent-create.function.ts';
38
40
  import { runAgentList } from './run-agent-list.function.ts';
39
41
  import { runAgentGet } from './run-agent-get.function.ts';
40
42
  import { runAgentDelete } from './run-agent-delete.function.ts';
43
+ import { runRecall } from './run-recall.function.ts';
44
+ import { runExport } from './run-export.function.ts';
41
45
  import { formatOutput } from './format-output.function.ts';
42
46
  import { errorToMessage } from './error-to-message.function.ts';
43
47
 
@@ -64,7 +68,9 @@ export type DispatchClient = SearchClient &
64
68
  AgentCreateClient &
65
69
  AgentListClient &
66
70
  AgentGetClient &
67
- AgentDeleteClient;
71
+ AgentDeleteClient &
72
+ RecallClient &
73
+ ExportClient;
68
74
 
69
75
  /**
70
76
  * Routes a parsed CLI command to the appropriate handler and
@@ -86,6 +92,8 @@ export async function dispatchCommand(
86
92
  return handleUnlearn(client, options);
87
93
  case 'search':
88
94
  return handleSearch(client, options);
95
+ case 'recall':
96
+ return handleRecall(client, options);
89
97
  case 'content':
90
98
  return handleContent(client, options);
91
99
  case 'check':
@@ -96,6 +104,8 @@ export async function dispatchCommand(
96
104
  return handleRebuild(client, options);
97
105
  case 'status':
98
106
  return handleStatus(client, options);
107
+ case 'export':
108
+ return handleExport(client, options);
99
109
  case 'db-init':
100
110
  return handleDbInit(options);
101
111
  case 'db-migrate':
@@ -198,6 +208,48 @@ async function handleSearch(
198
208
  }
199
209
  }
200
210
 
211
+ async function handleRecall(
212
+ client: DispatchClient,
213
+ options: CliOptions,
214
+ ): Promise<CommandResult> {
215
+ try {
216
+ const result = await runRecall(client, options);
217
+ if ('error' in result) {
218
+ return {
219
+ error: `error: ${result.error}`,
220
+ exitCode: 1,
221
+ };
222
+ }
223
+ return {
224
+ output: JSON.stringify(result, null, 2),
225
+ exitCode: 0,
226
+ };
227
+ } catch (err) {
228
+ return {
229
+ error: `recall failed: ${errorToMessage(err)}`,
230
+ exitCode: 1,
231
+ };
232
+ }
233
+ }
234
+
235
+ async function handleExport(
236
+ client: DispatchClient,
237
+ options: CliOptions,
238
+ ): Promise<CommandResult> {
239
+ try {
240
+ const result = await runExport(client, options);
241
+ return {
242
+ output: JSON.stringify(result, null, 2),
243
+ exitCode: 0,
244
+ };
245
+ } catch (err) {
246
+ return {
247
+ error: `export failed: ${errorToMessage(err)}`,
248
+ exitCode: 1,
249
+ };
250
+ }
251
+ }
252
+
201
253
  async function handleContent(
202
254
  client: DispatchClient,
203
255
  options: CliOptions,
@@ -0,0 +1,41 @@
1
+ import type { PagedSearchDisplay } from '../typings/search-display.model.ts';
2
+
3
+ /**
4
+ * Formats a paged search result as a JSON string compatible
5
+ * with the MCP (Model Context Protocol) `text` content block.
6
+ *
7
+ * @param paged - paginated search results to serialise
8
+ * @returns MCP-compatible JSON string ready for stdout
9
+ */
10
+ export function formatMcpOutput(paged: PagedSearchDisplay): string {
11
+ const mcpItems = paged.items.map((r) => ({
12
+ kbid: r.kbid,
13
+ heading: r.heading,
14
+ type: r.type,
15
+ docids: r.docids,
16
+ snippet: r.snippet,
17
+ matched_terms: r.matched_terms,
18
+ matched_fields: r.matched_fields,
19
+ created_at: r.created_at,
20
+ }));
21
+ return JSON.stringify(
22
+ {
23
+ type: 'text',
24
+ text: paged.items
25
+ .map(
26
+ (r) =>
27
+ `[${r.kbid}] ${r.heading ?? '(untitled)'}` +
28
+ ` — ${r.snippet || r.preview}`,
29
+ )
30
+ .join('\n'),
31
+ items: mcpItems,
32
+ total: paged.total,
33
+ offset: paged.offset,
34
+ limit: paged.limit,
35
+ has_more: paged.has_more,
36
+ relaxed: paged.relaxed,
37
+ },
38
+ null,
39
+ 2,
40
+ );
41
+ }
@@ -37,12 +37,16 @@ function formatText(paged: PagedSearchDisplay): string {
37
37
  const num = paged.offset + i + 1;
38
38
  const heading = r.heading ?? '(untitled)';
39
39
  const terms = r.matched_terms.join(', ');
40
+ const fields = r.matched_fields.join(', ');
41
+ const confidencePct = (r.confidence * 100).toFixed(0);
40
42
  return (
41
43
  `${String(num)}. [${r.kbid}] ${heading}` +
42
- ` (score: ${r.score.toFixed(4)})\n` +
44
+ ` (score: ${r.score.toFixed(4)},` +
45
+ ` confidence: ${confidencePct}%)\n` +
43
46
  ` ${r.snippet || r.preview || '(no snippet)'}\n` +
44
47
  ` type: ${r.type}` +
45
- ` terms: ${terms}`
48
+ ` terms: ${terms}` +
49
+ (fields ? ` fields: ${fields}` : '')
46
50
  );
47
51
  })
48
52
  .join('\n\n');
@@ -58,14 +62,34 @@ function formatText(paged: PagedSearchDisplay): string {
58
62
  }
59
63
 
60
64
  function formatMcp(paged: PagedSearchDisplay): string {
61
- return JSON.stringify({
62
- type: 'text',
63
- text: paged.items
64
- .map(
65
- (r) =>
66
- `[${r.kbid}] ${r.heading ?? '(untitled)'}` +
67
- ` — ${r.snippet || r.preview}`,
68
- )
69
- .join('\n'),
70
- });
65
+ const mcpItems = paged.items.map((r) => ({
66
+ kbid: r.kbid,
67
+ heading: r.heading,
68
+ type: r.type,
69
+ docids: r.docids,
70
+ snippet: r.snippet,
71
+ matched_terms: r.matched_terms,
72
+ matched_fields: r.matched_fields,
73
+ created_at: r.created_at,
74
+ }));
75
+ return JSON.stringify(
76
+ {
77
+ type: 'text',
78
+ text: paged.items
79
+ .map(
80
+ (r) =>
81
+ `[${r.kbid}] ${r.heading ?? '(untitled)'}` +
82
+ ` — ${r.snippet || r.preview}`,
83
+ )
84
+ .join('\n'),
85
+ items: mcpItems,
86
+ total: paged.total,
87
+ offset: paged.offset,
88
+ limit: paged.limit,
89
+ has_more: paged.has_more,
90
+ relaxed: paged.relaxed,
91
+ },
92
+ null,
93
+ 2,
94
+ );
71
95
  }
@@ -0,0 +1,42 @@
1
+ import type { PagedSearchDisplay } from '../typings/search-display.model.ts';
2
+
3
+ /**
4
+ * Formats a paged search result as a numbered human-readable
5
+ * text list with a paging footer and optional "more" hint.
6
+ *
7
+ * @param paged - paginated search results to render
8
+ * @returns formatted string ready for stdout
9
+ */
10
+ export function formatTextOutput(paged: PagedSearchDisplay): string {
11
+ if (paged.items.length === 0) return 'No results found.';
12
+ const start = paged.offset + 1;
13
+ const end = paged.offset + paged.items.length;
14
+
15
+ const lines = paged.items
16
+ .map((r, i) => {
17
+ const num = paged.offset + i + 1;
18
+ const heading = r.heading ?? '(untitled)';
19
+ const terms = r.matched_terms.join(', ');
20
+ const fields = r.matched_fields.join(', ');
21
+ const confidencePct = (r.confidence * 100).toFixed(0);
22
+ return (
23
+ `${String(num)}. [${r.kbid}] ${heading}` +
24
+ ` (score: ${r.score.toFixed(4)},` +
25
+ ` confidence: ${confidencePct}%)\n` +
26
+ ` ${r.snippet || r.preview || '(no snippet)'}\n` +
27
+ ` type: ${r.type}` +
28
+ ` terms: ${terms}` +
29
+ (fields ? ` fields: ${fields}` : '')
30
+ );
31
+ })
32
+ .join('\n\n');
33
+
34
+ const footer =
35
+ `\nShowing ${String(start)}-${String(end)}` +
36
+ ` of ${String(paged.total)} results`;
37
+ const hint = paged.has_more
38
+ ? `\nUse --offset ${String(end)} to see more`
39
+ : '';
40
+
41
+ return lines + footer + hint;
42
+ }
@@ -0,0 +1,41 @@
1
+ /** One-line description for each group command. */
2
+ const GROUP_DESCRIPTIONS: Readonly<Record<string, string>> = {
3
+ db: 'Database management',
4
+ skill: 'Skill management',
5
+ agent: 'Agent management',
6
+ };
7
+
8
+ /**
9
+ * Generates the level-2 help text for a group command.
10
+ *
11
+ * Lists all subcommands with their descriptions and
12
+ * includes a footer pointing to per-subcommand help.
13
+ *
14
+ * @param group - the group command name (e.g. `'db'`, `'skill'`)
15
+ * @param subs - ordered list of `[name, description]` pairs
16
+ * @returns formatted help string for the group command
17
+ */
18
+ export function generateGroupHelp(
19
+ group: string,
20
+ subs: readonly (readonly [string, string])[],
21
+ ): string {
22
+ const subLines = subs
23
+ .map(([name, desc]) => ` ${name.padEnd(20)}${desc}`)
24
+ .join('\n');
25
+ const desc = GROUP_DESCRIPTIONS[group] ?? group;
26
+ return (
27
+ `kbdb ${group} - ${desc}\n` +
28
+ `\n` +
29
+ `Usage: kbdb ${group} <subcommand> [options]\n` +
30
+ `\n` +
31
+ `Subcommands:\n` +
32
+ `${subLines}\n` +
33
+ `\n` +
34
+ `Global Options:\n` +
35
+ ` --db <path> Path to .kbdb directory\n` +
36
+ ` -h, --help Show this help message\n` +
37
+ `\n` +
38
+ `Run "kbdb ${group} <subcommand> --help"` +
39
+ ` for details.\n`
40
+ );
41
+ }
@@ -8,11 +8,13 @@ const KNOWN_COMMANDS = new Set([
8
8
  'learn',
9
9
  'unlearn',
10
10
  'search',
11
+ 'recall',
11
12
  'content',
12
13
  'check',
13
14
  'gc',
14
15
  'rebuild',
15
16
  'status',
17
+ 'export',
16
18
  'mcp',
17
19
  'db',
18
20
  'skill',
@@ -125,6 +127,8 @@ function generateGlobalHelp(): string {
125
127
  ` files/stdin\n` +
126
128
  ` unlearn Remove sections by kbid\n` +
127
129
  ` search Query the knowledge base\n` +
130
+ ` recall Retrieve section context` +
131
+ ` by kbid\n` +
128
132
  ` content Compose rendered content` +
129
133
  ` from ids\n` +
130
134
  `\n` +
@@ -142,6 +146,8 @@ function generateGlobalHelp(): string {
142
146
  ` rebuild Reconstruct all index` +
143
147
  ` files\n` +
144
148
  ` status Show database status\n` +
149
+ ` export Snapshot database for` +
150
+ ` backup\n` +
145
151
  `\n` +
146
152
  `Skills:\n` +
147
153
  ` skill learn Create a new skill` +
@@ -238,14 +244,20 @@ const LEAF_HELP: Readonly<Record<string, string>> = {
238
244
  ` --description <d> Section description\n` +
239
245
  ` --docid <docid> Document ID to group` +
240
246
  ` under\n` +
247
+ ` --tags <t,...> Comma-separated tags\n` +
248
+ ` --replace Supersede existing section` +
249
+ ` by source key\n` +
241
250
  ` --db <path> Path to .kbdb directory\n` +
242
251
  `\n` +
243
252
  `Output:\n` +
244
- ` JSON array of { kbid, path, size, skipped }\n` +
253
+ ` JSON array of { kbid, path, size, skipped,\n` +
254
+ ` superseded, warnings,` +
255
+ ` near_duplicates }\n` +
245
256
  `\n` +
246
257
  `Examples:\n` +
247
258
  ` kbdb learn README.md\n` +
248
259
  ` kbdb learn ./docs/\n` +
260
+ ` kbdb learn --tags auth,api --replace doc.md\n` +
249
261
  ` cat notes.txt | kbdb learn -\n`,
250
262
 
251
263
  unlearn:
@@ -294,6 +306,28 @@ const LEAF_HELP: Readonly<Record<string, string>> = {
294
306
  ` kbdb search --limit 5 --format text query\n` +
295
307
  ` kbdb search --mode documents --content term\n`,
296
308
 
309
+ recall:
310
+ `kbdb recall - Retrieve section context by kbid\n` +
311
+ `\n` +
312
+ `Usage: kbdb recall [options] <kbid>...\n` +
313
+ `\n` +
314
+ `Arguments:\n` +
315
+ ` <kbid> 26-character knowledge` +
316
+ ` base identifier\n` +
317
+ `\n` +
318
+ `Options:\n` +
319
+ ` --depth <n>, -d Expansion depth (0-3,` +
320
+ ` default: 0)\n` +
321
+ ` --tags <t,...> Filter by tags\n` +
322
+ ` --db <path> Path to .kbdb directory\n` +
323
+ `\n` +
324
+ `Output:\n` +
325
+ ` JSON RecallResult or RecallResult[]\n` +
326
+ `\n` +
327
+ `Examples:\n` +
328
+ ` kbdb recall abcdef1234567890abcdef1234\n` +
329
+ ` kbdb recall kbid1 --depth 2\n`,
330
+
297
331
  content:
298
332
  `kbdb content - Compose rendered content from ids\n` +
299
333
  `\n` +
@@ -372,6 +406,27 @@ const LEAF_HELP: Readonly<Record<string, string>> = {
372
406
  ` kbdb status\n` +
373
407
  ` kbdb status --db /path/to/project\n`,
374
408
 
409
+ export:
410
+ `kbdb export - Snapshot database for backup\n` +
411
+ `\n` +
412
+ `Usage: kbdb export [options] [<path>]\n` +
413
+ `\n` +
414
+ `Arguments:\n` +
415
+ ` <path> Output directory path\n` +
416
+ ` (default: ./kbdb-export/)\n` +
417
+ `\n` +
418
+ `Options:\n` +
419
+ ` --db <path> Path to .kbdb directory\n` +
420
+ `\n` +
421
+ `Output:\n` +
422
+ ` JSON { path, sections_exported,` +
423
+ ` documents_exported }\n` +
424
+ `\n` +
425
+ `Examples:\n` +
426
+ ` kbdb export\n` +
427
+ ` kbdb export ./my-backup\n` +
428
+ ` kbdb export --db /path/to/project\n`,
429
+
375
430
  mcp:
376
431
  `kbdb mcp - Start MCP server mode (stdio)\n` +
377
432
  `\n` +
@@ -0,0 +1,67 @@
1
+ import type { CliOptions } from '../typings/cli-options.interface.ts';
2
+ import type { CommandResult } from '../typings/command-result.model.ts';
3
+ import type { CliDeps } from '../typings/cli-deps.interface.ts';
4
+ import type { DisconnectableClient } from '../typings/disconnectable-client.interface.ts';
5
+ import { errorToMessage } from './error-to-message.function.ts';
6
+ import { versionGate } from './version-gate.function.ts';
7
+ import { dispatchCommand } from './dispatch-command.function.ts';
8
+
9
+ /**
10
+ * Handles data commands (search, learn, recall, etc.) by finding or
11
+ * creating the database, running the version gate, and dispatching to
12
+ * the appropriate command handler.
13
+ *
14
+ * When the database is not found in non-TTY mode, returns an error.
15
+ * In TTY mode, prompts the user to create a new database.
16
+ *
17
+ * @param options - parsed CLI options with command and args
18
+ * @param deps - injectable CLI dependencies
19
+ * @returns a `CommandResult` from the dispatched command
20
+ */
21
+ export async function handleDataCommand(
22
+ options: CliOptions,
23
+ deps: CliDeps,
24
+ ): Promise<CommandResult> {
25
+ let dbDir = deps.findDb(options.dbPath);
26
+
27
+ if (!dbDir) {
28
+ const basePath = options.dbPath ?? process.cwd();
29
+ if (!deps.isStdinTty()) {
30
+ return {
31
+ error:
32
+ `error: no .kbdb database found at ${basePath}` +
33
+ ' -- run `kbdb --init` to create one',
34
+ exitCode: 1,
35
+ };
36
+ }
37
+ const answer = await deps.promptUser(
38
+ `No .kbdb database found. Create one in ${basePath}? [y/N] `,
39
+ );
40
+ if (answer.toLowerCase() !== 'y') {
41
+ return { error: 'aborted: no database created', exitCode: 1 };
42
+ }
43
+ const initResult = deps.runInit(options);
44
+ if (!initResult.ok) {
45
+ return {
46
+ error: `error: ${initResult.errorMessage ?? 'init failed'}`,
47
+ exitCode: 1,
48
+ };
49
+ }
50
+ dbDir = initResult.targetPath;
51
+ }
52
+
53
+ let client: DisconnectableClient;
54
+ try {
55
+ client = await deps.createWorkerClient({ contextPath: dbDir });
56
+ } catch (err) {
57
+ return { error: `error: ${errorToMessage(err)}`, exitCode: 1 };
58
+ }
59
+
60
+ try {
61
+ const gateResult = await versionGate(client, dbDir);
62
+ if (gateResult) return gateResult;
63
+ return await dispatchCommand(client, options);
64
+ } finally {
65
+ client.disconnect();
66
+ }
67
+ }
@@ -0,0 +1,56 @@
1
+ import type { CliOptions } from '../typings/cli-options.interface.ts';
2
+ import type { CommandResult } from '../typings/command-result.model.ts';
3
+ import type { CliDeps } from '../typings/cli-deps.interface.ts';
4
+ import type { DisconnectableClient } from '../typings/disconnectable-client.interface.ts';
5
+ import { errorToMessage } from './error-to-message.function.ts';
6
+ import { versionGate } from './version-gate.function.ts';
7
+
8
+ /**
9
+ * Handles the `mcp` command sub-flow.
10
+ *
11
+ * Resolves the database directory, creates a worker client, runs
12
+ * the version gate, and starts the MCP server. Disconnects the
13
+ * worker client when finished.
14
+ *
15
+ * @param options - parsed CLI options (uses `dbPath` and env fallback)
16
+ * @param deps - injectable CLI dependencies
17
+ * @returns a `CommandResult` with `exitCode: 0` on success
18
+ */
19
+ export async function handleMcp(
20
+ options: CliOptions,
21
+ deps: CliDeps,
22
+ ): Promise<CommandResult> {
23
+ const rawDbPath = options.dbPath ?? process.env['KBDB_DIR'];
24
+ if (!rawDbPath) {
25
+ return {
26
+ error: 'error: --db or KBDB_DIR required in MCP mode',
27
+ exitCode: 1,
28
+ };
29
+ }
30
+ const dbDir = deps.findDb(rawDbPath);
31
+ if (!dbDir) {
32
+ return {
33
+ error: `error: no .kbdb database found at ${rawDbPath}`,
34
+ exitCode: 1,
35
+ };
36
+ }
37
+ let client: DisconnectableClient;
38
+ try {
39
+ client = await deps.createWorkerClient({ contextPath: dbDir });
40
+ } catch (err) {
41
+ return { error: `error: ${errorToMessage(err)}`, exitCode: 1 };
42
+ }
43
+ try {
44
+ const gateResult = await versionGate(client, dbDir);
45
+ if (gateResult) return gateResult;
46
+ if (deps.startMcpServer) await deps.startMcpServer(dbDir);
47
+ return { exitCode: 0 };
48
+ } catch (err) {
49
+ return {
50
+ error: `error: mcp failed: ${errorToMessage(err)}`,
51
+ exitCode: 1,
52
+ };
53
+ } finally {
54
+ client.disconnect();
55
+ }
56
+ }
@@ -0,0 +1,64 @@
1
+ import type { CliOptions } from '../typings/cli-options.interface.ts';
2
+ import type { CommandResult } from '../typings/command-result.model.ts';
3
+ import type { CliDeps } from '../typings/cli-deps.interface.ts';
4
+ import type { DisconnectableClient } from '../typings/disconnectable-client.interface.ts';
5
+ import { errorToMessage } from './error-to-message.function.ts';
6
+
7
+ /**
8
+ * Handles the `migrate` / `db-migrate` command sub-flow.
9
+ *
10
+ * Resolves the database directory, creates a worker client,
11
+ * checks the version, and runs migrations when needed. Disconnects
12
+ * the worker client when finished.
13
+ *
14
+ * @param options - parsed CLI options (uses `dbPath`)
15
+ * @param deps - injectable CLI dependencies
16
+ * @returns a `CommandResult` with migration output or an error
17
+ */
18
+ export async function handleMigrate(
19
+ options: CliOptions,
20
+ deps: CliDeps,
21
+ ): Promise<CommandResult> {
22
+ const dbDir = deps.findDb(options.dbPath);
23
+ if (!dbDir) {
24
+ return {
25
+ error: `error: no .kbdb database found at ${options.dbPath ?? process.cwd()}`,
26
+ exitCode: 1,
27
+ };
28
+ }
29
+ let client: DisconnectableClient;
30
+ try {
31
+ client = await deps.createWorkerClient({ contextPath: dbDir });
32
+ } catch (err) {
33
+ return { error: `error: ${errorToMessage(err)}`, exitCode: 1 };
34
+ }
35
+ try {
36
+ const versionStatus = await client.checkVersion(dbDir);
37
+ if (versionStatus.status === 'too_new') {
38
+ return {
39
+ error:
40
+ `error: database version` +
41
+ ` ${versionStatus.currentVersion.toString()}` +
42
+ ` is newer than kbdb version` +
43
+ ` ${versionStatus.requiredVersion.toString()}` +
44
+ ` -- upgrade kbdb`,
45
+ exitCode: 1,
46
+ };
47
+ }
48
+ if (versionStatus.status === 'needs_migration') {
49
+ const migrateResult = await client.migrateDatabase(dbDir);
50
+ return {
51
+ output: JSON.stringify(migrateResult, null, 2),
52
+ exitCode: 0,
53
+ };
54
+ }
55
+ return { output: 'already up to date', exitCode: 0 };
56
+ } catch (err) {
57
+ return {
58
+ error: `error: migrate failed: ${errorToMessage(err)}`,
59
+ exitCode: 1,
60
+ };
61
+ } finally {
62
+ client.disconnect();
63
+ }
64
+ }