@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,29 @@
1
+ import type { PagedSearchDisplay } from '../typings/search-display.model.ts';
2
+ import type { ContentClient } from './run-content.function.ts';
3
+
4
+ /**
5
+ * Hydrates each result's `preview` field with the actual section
6
+ * content fetched from the client.
7
+ *
8
+ * Failures for individual results are caught and suppressed so that
9
+ * one unavailable section does not prevent other previews from
10
+ * being returned.
11
+ *
12
+ * @param client - content client used to fetch section text
13
+ * @param paged - mutable search display records to hydrate
14
+ */
15
+ export async function hydrateSearchPreviews(
16
+ client: ContentClient,
17
+ paged: PagedSearchDisplay,
18
+ ): Promise<void> {
19
+ await Promise.all(
20
+ paged.items.map(async (result) => {
21
+ try {
22
+ const contentResult = await client.content([result.kbid]);
23
+ result.preview = contentResult.data;
24
+ } catch {
25
+ // Leave preview as empty string on failure.
26
+ }
27
+ }),
28
+ );
29
+ }
@@ -0,0 +1,296 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+
5
+ /**
6
+ * RFC 4648 base32 alphabet (upper-case, no padding).
7
+ * Used to encode the SHA-256-derived kbid bytes.
8
+ */
9
+ const BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
10
+
11
+ /**
12
+ * Encodes a byte array as a lowercase base32 string without padding.
13
+ *
14
+ * Mirrors the `data_encoding::BASE32_NOPAD` encoding used in the
15
+ * Rust engine's `KbId::from_content`.
16
+ *
17
+ * @param bytes - raw bytes to encode
18
+ * @returns lowercase base32-encoded string
19
+ */
20
+ function base32Encode(bytes: Uint8Array): string {
21
+ let result = '';
22
+ let bits = 0;
23
+ let value = 0;
24
+ for (const byte of bytes) {
25
+ value = (value << 8) | byte;
26
+ bits += 8;
27
+ while (bits >= 5) {
28
+ result += BASE32_ALPHABET[(value >>> (bits - 5)) & 0x1f];
29
+ bits -= 5;
30
+ }
31
+ }
32
+ if (bits > 0) {
33
+ result += BASE32_ALPHABET[(value << (5 - bits)) & 0x1f];
34
+ }
35
+ return result.toLowerCase();
36
+ }
37
+
38
+ /**
39
+ * Computes a 26-character kbid for a section using the same algorithm
40
+ * as the Rust engine's `hash_section`.
41
+ *
42
+ * Algorithm:
43
+ * 1. Build input: `"section <mime> <byteLen>\0<content>"`
44
+ * 2. SHA-256 hash the input
45
+ * 3. Take the first 16 bytes
46
+ * 4. Base32 encode (RFC 4648, no padding), lowercased → 26 chars
47
+ *
48
+ * @param mimeType - MIME type string (e.g. `"text/markdown"`)
49
+ * @param content - UTF-8 section content string
50
+ * @returns 26-character lowercase base32 kbid
51
+ */
52
+ function computeSectionKbid(mimeType: string, content: string): string {
53
+ const contentBytes = Buffer.from(content, 'utf-8');
54
+ const header = `section ${mimeType} ${contentBytes.length.toString()}\0`;
55
+ const headerBytes = Buffer.from(header, 'utf-8');
56
+ const input = Buffer.concat([headerBytes, contentBytes]);
57
+ const hash = createHash('sha256').update(input).digest();
58
+ const truncated = new Uint8Array(hash.buffer, 0, 16);
59
+ return base32Encode(truncated);
60
+ }
61
+
62
+ /**
63
+ * Escapes backslashes and double-quotes in a string for TOML inline
64
+ * string values.
65
+ *
66
+ * Mirrors the `escape_toml_str` function in the Rust engine.
67
+ *
68
+ * @param s - string to escape
69
+ * @returns escaped string safe for use inside TOML double-quoted strings
70
+ */
71
+ function escapeToml(s: string): string {
72
+ return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
73
+ }
74
+
75
+ /**
76
+ * Serializes a skill section record to the `.section` file format.
77
+ *
78
+ * Format:
79
+ * ```
80
+ * kbid = "..."
81
+ * section_type = "text/markdown"
82
+ * type_name = "skill"
83
+ * title = "..."
84
+ * description = "..."
85
+ * size = 0
86
+ * token_count = 0
87
+ * heading_token_count = 0
88
+ * body_token_count = 0
89
+ * code_token_count = 0
90
+ * created_at = 0
91
+ * checksum = "..."
92
+ *
93
+ * ---
94
+ * <json content>
95
+ * ```
96
+ *
97
+ * @param kbid - 26-char content-addressed identifier
98
+ * @param title - skill name used as section title
99
+ * @param description - human-readable description
100
+ * @param content - serialised JSON skill definition
101
+ * @returns file content string
102
+ */
103
+ function serializeSkillSection(
104
+ kbid: string,
105
+ title: string,
106
+ description: string,
107
+ content: string,
108
+ ): string {
109
+ const size = Buffer.byteLength(content, 'utf-8');
110
+ const header = [
111
+ `kbid = "${escapeToml(kbid)}"`,
112
+ `section_type = "text/markdown"`,
113
+ `type_name = "skill"`,
114
+ `title = "${escapeToml(title)}"`,
115
+ `description = "${escapeToml(description)}"`,
116
+ `size = ${size.toString()}`,
117
+ `token_count = 0`,
118
+ `heading_token_count = 0`,
119
+ `body_token_count = 0`,
120
+ `code_token_count = 0`,
121
+ `created_at = 0`,
122
+ `checksum = "${escapeToml(kbid)}"`,
123
+ '',
124
+ ].join('\n');
125
+ return `${header}\n---\n${content}`;
126
+ }
127
+
128
+ /** Descriptor for a skill to install. */
129
+ interface SkillDescriptor {
130
+ /** Unique skill name (kebab-case). */
131
+ readonly name: string;
132
+ /** Human-readable description. */
133
+ readonly description: string;
134
+ /** Template body text. */
135
+ readonly body: string;
136
+ }
137
+
138
+ /**
139
+ * Installs a single skill section file under `sectionsDir`.
140
+ *
141
+ * Creates the shard subdirectory if it does not exist. Skips
142
+ * writing if the section file already exists, preserving any
143
+ * user modifications.
144
+ *
145
+ * @param sectionsDir - absolute path to `.kbdb/sections`
146
+ * @param skill - skill definition to serialise and store
147
+ */
148
+ function installSkill(
149
+ sectionsDir: string,
150
+ skill: SkillDescriptor,
151
+ ): void {
152
+ const content = JSON.stringify({
153
+ name: skill.name,
154
+ description: skill.description,
155
+ arguments: [],
156
+ body: skill.body,
157
+ });
158
+ const kbid = computeSectionKbid('text/markdown', content);
159
+ const prefix = kbid.slice(0, 2);
160
+ const shardDir = join(sectionsDir, prefix);
161
+ const filePath = join(shardDir, `${kbid}.section`);
162
+
163
+ if (existsSync(filePath)) {
164
+ return;
165
+ }
166
+
167
+ mkdirSync(shardDir, { recursive: true });
168
+
169
+ const fileContent = serializeSkillSection(
170
+ kbid,
171
+ skill.name,
172
+ skill.description,
173
+ content,
174
+ );
175
+ writeFileSync(filePath, fileContent, 'utf-8');
176
+ }
177
+
178
+ /**
179
+ * Body text for the `query-guidance` default skill.
180
+ *
181
+ * Teaches AI agents how to effectively search the knowledge base
182
+ * using lexical BM25F queries.
183
+ */
184
+ const QUERY_GUIDANCE_BODY =
185
+ 'This knowledge base uses lexical search (stemmed BM25F), not' +
186
+ ' semantic/vector search. Follow these guidelines for effective' +
187
+ ' retrieval:\n\n' +
188
+ '1. Issue MULTIPLE short keyword queries rather than one long' +
189
+ ' natural-language question. Each query should target 2-3' +
190
+ ' specific terms.\n\n' +
191
+ '2. EXPAND SYNONYMS yourself. "login" will not match "sign-in"' +
192
+ ' unless both terms appear in the content. Try alternative' +
193
+ ' phrasings: search for "login", then "sign-in", then' +
194
+ ' "authentication".\n\n' +
195
+ '3. USE BOOLEAN AND PHRASE SYNTAX:\n' +
196
+ ' - Exact phrases: "error handling"\n' +
197
+ ' - Boolean AND: auth AND token\n' +
198
+ ' - Boolean OR: cache OR redis\n' +
199
+ ' - Exclusion: auth -oauth\n\n' +
200
+ '4. LEAN ON HEADINGS. Headings carry 2x weight in ranking.' +
201
+ ' Search for terms that are likely in section titles.\n\n' +
202
+ '5. STEMMING IS AUTOMATIC. "connections" matches "connect",' +
203
+ ' "running" matches "run". You do not need to try inflected' +
204
+ ' forms.\n\n' +
205
+ '6. USE RECALL AFTER SEARCH. After finding relevant sections' +
206
+ ' with search, use recall with increasing depth (0-3) to' +
207
+ ' progressively expand context: depth 0 = full content, depth' +
208
+ ' 1 = parent documents + back-references, depth 2 = siblings' +
209
+ ' + forward references, depth 3 = referenced sections.\n\n' +
210
+ '7. CODE IDENTIFIERS ARE SPLIT. camelCase and snake_case names' +
211
+ ' are decomposed: getUserById becomes searchable as "get",' +
212
+ ' "user", "by", "id".\n\n' +
213
+ '8. PAGINATION. Default limit is 20 results. Use offset for' +
214
+ ' additional pages if total > limit.';
215
+
216
+ /**
217
+ * Body text for the `memory-protocol` default skill.
218
+ *
219
+ * Teaches AI agents when and what to store in the knowledge base
220
+ * to keep it accurate and useful.
221
+ */
222
+ const MEMORY_PROTOCOL_BODY =
223
+ 'Follow these guidelines to keep the knowledge base accurate' +
224
+ ' and useful:\n\n' +
225
+ '1. STORE DURABLE FACTS: decisions, architecture choices,' +
226
+ ' configuration values, corrections to prior knowledge, API' +
227
+ ' contracts, and resolved incidents. These are the facts that' +
228
+ ' matter weeks later.\n\n' +
229
+ '2. DO NOT STORE: transient conversation context, debugging' +
230
+ ' output, ephemeral task state, raw log dumps, or information' +
231
+ ' that changes every session. The brain should contain' +
232
+ ' knowledge, not activity logs.\n\n' +
233
+ '3. SEARCH BEFORE STORING. Always search the knowledge base' +
234
+ ' before adding new content. If a section already covers the' +
235
+ ' topic, use learn with --replace to update it rather than' +
236
+ ' creating a duplicate.\n\n' +
237
+ '4. USE --replace FOR CORRECTIONS. When a fact changes (e.g.,' +
238
+ ' rate limit updated from 100 to 200 req/min), re-learn the' +
239
+ ' corrected content with --replace so the old version is' +
240
+ ' superseded. Without --replace, both the old and new versions' +
241
+ ' coexist with equal ranking.\n\n' +
242
+ '5. ATTACH TAGS for scoping. Use tags like project name,' +
243
+ ' domain, or topic (e.g., --tags auth,api,v2) so queries can' +
244
+ ' be filtered by scope later.\n\n' +
245
+ '6. PREFER RECENT RESULTS. When search returns multiple' +
246
+ ' sections covering the same topic, prefer the one with the' +
247
+ ' most recent created_at timestamp -- it is more likely to' +
248
+ ' reflect the current state.\n\n' +
249
+ '7. USE RECALL AFTER SEARCH. After finding relevant sections,' +
250
+ ' use recall with increasing depth (0-3) to expand context' +
251
+ ' progressively before making decisions.\n\n' +
252
+ '8. INCLUDE HEADINGS. Always provide a descriptive title when' +
253
+ ' storing content. Headings carry 2x ranking weight -- omitting' +
254
+ ' them significantly reduces searchability.';
255
+
256
+ /**
257
+ * Default skills installed on every fresh `kbdb db init`.
258
+ *
259
+ * These provide baseline guidance that improves AI agent
260
+ * effectiveness out of the box. They are regular skill sections
261
+ * and can be deleted by users.
262
+ */
263
+ const DEFAULT_SKILLS: readonly SkillDescriptor[] = [
264
+ {
265
+ name: 'query-guidance',
266
+ description:
267
+ 'How to effectively search this knowledge base.' +
268
+ ' Read this before issuing search queries.',
269
+ body: QUERY_GUIDANCE_BODY,
270
+ },
271
+ {
272
+ name: 'memory-protocol',
273
+ description:
274
+ 'Guidelines for what to store in this knowledge base' +
275
+ ' and when. Read this before using the learn tool.',
276
+ body: MEMORY_PROTOCOL_BODY,
277
+ },
278
+ ];
279
+
280
+ /**
281
+ * Writes the two default skills (`query-guidance` and
282
+ * `memory-protocol`) as section files directly into the `.kbdb`
283
+ * directory scaffold.
284
+ *
285
+ * Called by `runInit` after the directory scaffold is created.
286
+ * Does not require a running worker daemon. Skips any skill whose
287
+ * section file already exists so user modifications are preserved.
288
+ *
289
+ * @param dbDir - absolute path to the `.kbdb` directory
290
+ */
291
+ export function installDefaultSkills(dbDir: string): void {
292
+ const sectionsDir = join(dbDir, 'sections');
293
+ for (const skill of DEFAULT_SKILLS) {
294
+ installSkill(sectionsDir, skill);
295
+ }
296
+ }
@@ -94,6 +94,9 @@ export function parseArgs(argv: string[]): CliOptions {
94
94
  parseInt(argv[++i] ?? '', 10) || 0,
95
95
  );
96
96
  break;
97
+ case '--algo':
98
+ options.algo = argv[++i];
99
+ break;
97
100
  case '--title':
98
101
  options.title = argv[++i];
99
102
  break;
@@ -115,6 +118,19 @@ export function parseArgs(argv: string[]): CliOptions {
115
118
  case '--skills':
116
119
  options.skills = (argv[++i] ?? '').split(',');
117
120
  break;
121
+ case '--tags':
122
+ options.tags = (argv[++i] ?? '').split(',');
123
+ break;
124
+ case '--replace':
125
+ options.replace = true;
126
+ break;
127
+ case '--depth':
128
+ case '-d':
129
+ options.depth = Math.min(
130
+ 3,
131
+ Math.max(0, parseInt(argv[++i] ?? '', 10) || 0),
132
+ );
133
+ break;
118
134
  case '--content':
119
135
  case '-c':
120
136
  options.content = true;
@@ -0,0 +1,43 @@
1
+ import type {
2
+ AgentGetClient,
3
+ AgentDocumentSection,
4
+ AgentSectionRecord,
5
+ } from '../typings/agent-get-client.interface.ts';
6
+
7
+ /**
8
+ * Resolves skill names by reading each skill section's JSON content.
9
+ *
10
+ * Returns `null` for any reference whose section no longer exists
11
+ * (dangling reference) or whose content cannot be parsed.
12
+ *
13
+ * @param client - client used to fetch section records
14
+ * @param skillRefs - ordered section references to resolve
15
+ * @returns list of resolved skill entries with name and position
16
+ */
17
+ export async function resolveSkillNames(
18
+ client: AgentGetClient,
19
+ skillRefs: AgentDocumentSection[],
20
+ ): Promise<{ kbid: string; name: string | null; position: number }[]> {
21
+ if (skillRefs.length === 0) return [];
22
+ const kbids = skillRefs.map((r) => r.kbid);
23
+ const sections: AgentSectionRecord[] =
24
+ await client.readSections(kbids);
25
+ const sectionMap = new Map(sections.map((s) => [s.kbid, s]));
26
+ return skillRefs.map((ref) => {
27
+ const sec = sectionMap.get(ref.kbid);
28
+ if (!sec) {
29
+ return { kbid: ref.kbid, name: null, position: ref.position };
30
+ }
31
+ try {
32
+ const parsed = JSON.parse(sec.content) as Record<
33
+ string,
34
+ unknown
35
+ >;
36
+ const name =
37
+ typeof parsed['name'] === 'string' ? parsed['name'] : null;
38
+ return { kbid: ref.kbid, name, position: ref.position };
39
+ } catch {
40
+ return { kbid: ref.kbid, name: null, position: ref.position };
41
+ }
42
+ });
43
+ }
@@ -25,6 +25,17 @@ interface IntegrityError {
25
25
  readonly detail: string;
26
26
  }
27
27
 
28
+ /**
29
+ * A single entry in the divergent-content map.
30
+ * Groups kbids under a common source key.
31
+ */
32
+ interface DivergentContentEntry {
33
+ /** Source key that has multiple divergent content versions. */
34
+ readonly sourceKey: string;
35
+ /** Kbids of sections sharing this source key but with different content. */
36
+ readonly kbids: string[];
37
+ }
38
+
28
39
  /**
29
40
  * Integrity check report returned by the daemon.
30
41
  */
@@ -41,6 +52,38 @@ interface IntegrityCheckResult {
41
52
  readonly references_checked: number;
42
53
  /** Time taken to complete the check, in milliseconds. */
43
54
  readonly elapsed_ms: number;
55
+ /**
56
+ * Sections that share a source key but have divergent content.
57
+ * Each entry groups the kbids under a common source key.
58
+ * Empty when no divergent content is found.
59
+ */
60
+ readonly divergent_content: DivergentContentEntry[];
61
+ }
62
+
63
+ /** Raw daemon response from `integrityCheck`. */
64
+ interface RawIntegrityCheckResult {
65
+ /** `true` when all checks passed and no errors were found. */
66
+ readonly ok: boolean;
67
+ /** All integrity errors found; empty when `ok` is `true`. */
68
+ readonly errors: IntegrityError[];
69
+ /** Total number of sections examined. */
70
+ readonly sections_checked: number;
71
+ /** Total number of documents examined. */
72
+ readonly documents_checked: number;
73
+ /** Total number of marker references checked. */
74
+ readonly references_checked: number;
75
+ /** Time taken to complete the check, in milliseconds. */
76
+ readonly elapsed_ms: number;
77
+ /**
78
+ * Encoded divergent-content map.
79
+ *
80
+ * Format: `sk1:kbid1,kbid2;sk2:kbid3,kbid4`
81
+ *
82
+ * Each semicolon-separated segment is a source key followed by
83
+ * a colon and a comma-separated list of kbids. Absent when no
84
+ * divergent content exists.
85
+ */
86
+ readonly divergent_content?: string;
44
87
  }
45
88
 
46
89
  /**
@@ -56,23 +99,61 @@ export interface CheckClient {
56
99
  * @returns a report of all issues found; `ok` is `true` when
57
100
  * no errors were detected
58
101
  */
59
- integrityCheck(): Promise<IntegrityCheckResult>;
102
+ integrityCheck(): Promise<RawIntegrityCheckResult>;
103
+ }
104
+
105
+ /**
106
+ * Parses the encoded `divergent_content` string from the daemon
107
+ * into a structured array.
108
+ *
109
+ * Input format: `sk1:kbid1,kbid2;sk2:kbid3,kbid4`
110
+ *
111
+ * @param encoded - raw encoded string, or empty / absent
112
+ * @returns structured entries grouped by source key
113
+ */
114
+ function parseDivergentContent(
115
+ encoded: string | undefined,
116
+ ): DivergentContentEntry[] {
117
+ if (!encoded) return [];
118
+ return encoded
119
+ .split(';')
120
+ .filter((segment) => segment.includes(':'))
121
+ .map((segment) => {
122
+ const colonIdx = segment.indexOf(':');
123
+ const sourceKey = segment.slice(0, colonIdx);
124
+ const kbids = segment
125
+ .slice(colonIdx + 1)
126
+ .split(',')
127
+ .filter((k) => k.length > 0);
128
+ return { sourceKey, kbids };
129
+ })
130
+ .filter((entry) => entry.kbids.length > 0);
60
131
  }
61
132
 
62
133
  /**
63
134
  * Runs an integrity check on the database and returns the report.
64
135
  *
65
- * Delegates to `client.integrityCheck()`. The caller is responsible
66
- * for printing the result to stdout and setting the process exit code
67
- * based on `result.ok`.
136
+ * Delegates to `client.integrityCheck()`, then parses the encoded
137
+ * `divergent_content` field into structured form. The caller is
138
+ * responsible for printing the result to stdout and setting the
139
+ * process exit code based on `result.ok`.
68
140
  *
69
141
  * @param client - check client to delegate to
70
142
  * @param _options - parsed CLI options (unused; reserved for future flags)
71
- * @returns the integrity check report from the daemon
143
+ * @returns the integrity check report with parsed `divergent_content`
72
144
  */
73
145
  export async function runCheck(
74
146
  client: CheckClient,
75
147
  _options: CliOptions,
76
148
  ): Promise<IntegrityCheckResult> {
77
- return client.integrityCheck();
149
+ const raw = await client.integrityCheck();
150
+ return {
151
+ ok: raw.ok,
152
+ errors: raw.errors,
153
+ sections_checked: raw.sections_checked,
154
+ documents_checked: raw.documents_checked,
155
+ references_checked: raw.references_checked,
156
+ elapsed_ms: raw.elapsed_ms,
157
+ divergent_content: parseDivergentContent(raw.divergent_content),
158
+ };
78
159
  }
@@ -0,0 +1,40 @@
1
+ import type { CliOptions } from '../typings/cli-options.interface.ts';
2
+ import type { ExportResult } from '../../worker-client/typings/export-result.model.ts';
3
+
4
+ /**
5
+ * Minimal client interface required by `runExport`.
6
+ *
7
+ * Decouples the CLI function from the concrete `WorkerClient`
8
+ * implementation, making it straightforward to test with mocks.
9
+ */
10
+ export interface ExportClient {
11
+ /**
12
+ * Exports the database to the given directory path.
13
+ *
14
+ * @param params - optional target path; the daemon defaults to
15
+ * `./kbdb-export/` when `path` is `undefined`
16
+ * @returns export report with the resolved path and file counts
17
+ */
18
+ export(params: { path?: string }): Promise<ExportResult>;
19
+ }
20
+
21
+ /**
22
+ * Exports the knowledge-base database to a target directory via the
23
+ * provided client.
24
+ *
25
+ * The target path is taken from `options.args[0]`. When no argument
26
+ * is given the daemon resolves its own default (`./kbdb-export/`).
27
+ *
28
+ * @param client - export client to delegate to
29
+ * @param options - parsed CLI options whose first positional
30
+ * argument, if present, is the target directory path
31
+ * @returns the export result containing the resolved path and file
32
+ * counts
33
+ */
34
+ export async function runExport(
35
+ client: ExportClient,
36
+ options: CliOptions,
37
+ ): Promise<ExportResult> {
38
+ const path = options.args[0];
39
+ return client.export({ path });
40
+ }
@@ -10,6 +10,12 @@ interface GcResult {
10
10
  readonly removed_bytes: number;
11
11
  /** Time taken to complete garbage collection, in milliseconds. */
12
12
  readonly elapsed_ms: number;
13
+ /**
14
+ * Number of sections whose `source_path` file no longer
15
+ * contains their heading text (advisory; not auto-removed).
16
+ * Absent on older daemon versions.
17
+ */
18
+ readonly stale_sources?: number;
13
19
  }
14
20
 
15
21
  /**
@@ -1,6 +1,7 @@
1
1
  import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
2
2
  import { join, resolve } from 'node:path';
3
3
  import type { CliOptions } from '../typings/cli-options.interface.ts';
4
+ import { installDefaultSkills } from './install-default-skills.function.ts';
4
5
 
5
6
  /**
6
7
  * Result returned by `runInit` describing whether the directory was
@@ -82,6 +83,7 @@ export function runInit(options: CliOptions): InitResult {
82
83
  };
83
84
  }
84
85
  createScaffold(dbDir);
86
+ installDefaultSkills(dbDir);
85
87
  return { ok: true, targetPath: dbDir };
86
88
  } catch (err: unknown) {
87
89
  const errorMessage =