@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
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  existsSync,
3
3
  readFileSync,
4
+ readdirSync,
4
5
  accessSync,
5
6
  writeFileSync,
6
7
  unlinkSync,
@@ -38,6 +39,7 @@ import {
38
39
  decodeKeyValueText,
39
40
  decodeRemoveFlag,
40
41
  decodeRecallResult,
42
+ decodeAddSectionResult,
41
43
  } from '../../wasm-codec/index.ts';
42
44
 
43
45
  import type { AddSectionInput } from '../../wasm-codec/index.ts';
@@ -89,6 +91,8 @@ const WASM_METHOD_MAP: Readonly<Partial<Record<string, string>>> = {
89
91
  listDocumentsByType: 'worker_list_docs_by_type',
90
92
  list_docs_by_type: 'worker_list_docs_by_type',
91
93
  recall: 'worker_recall',
94
+ export: 'worker_export',
95
+ exportDb: 'worker_export',
92
96
  };
93
97
 
94
98
  /** Config method name prefix. */
@@ -155,6 +159,18 @@ export class WorkerDaemon {
155
159
  private _server: Server | null = null;
156
160
  private readonly _wasmDir: string;
157
161
 
162
+ /** Queue of waiters for the single-writer lock. */
163
+ private _writeQueue: { resolve: () => void }[] = [];
164
+
165
+ /** Whether the write lock is currently held. */
166
+ private _writeLocked = false;
167
+
168
+ /** Whether the startup integrity check passed. */
169
+ private _integrityOk = true;
170
+
171
+ /** Integrity errors found at startup, if any. */
172
+ private _integrityErrors: string[] = [];
173
+
158
174
  /**
159
175
  * @param ctx - context ID (16-hex characters), the first 16 of
160
176
  * the SHA-256 hash of `targetDir`
@@ -229,6 +245,7 @@ export class WorkerDaemon {
229
245
  this._wasmModules = wasmModules;
230
246
 
231
247
  this.initWorkerContext();
248
+ this.runStartupIntegrityCheck();
232
249
 
233
250
  const pidPath = join(tmpdir(), `kbdb-${this.ctx}.pid`);
234
251
  writeFileSync(pidPath, process.pid.toString());
@@ -470,7 +487,11 @@ export class WorkerDaemon {
470
487
  params: Record<string, unknown>,
471
488
  ): unknown {
472
489
  if (method === 'status') {
473
- return this._connectionCount > 0 ? 'busy' : 'idle';
490
+ return {
491
+ status: this._connectionCount > 0 ? 'busy' : 'idle',
492
+ integrityOk: this._integrityOk,
493
+ integrityErrors: this._integrityErrors,
494
+ };
474
495
  }
475
496
 
476
497
  if (method === 'idle_at') {
@@ -493,71 +514,36 @@ export class WorkerDaemon {
493
514
  throw new IpcError(-32601, `Method not found: ${method}`);
494
515
  }
495
516
 
496
- private dispatchWasm(
517
+ private async dispatchWasm(
497
518
  method: string,
498
519
  wasmExport: string,
499
520
  params: Record<string, unknown>,
500
- ): unknown {
521
+ ): Promise<unknown> {
522
+ // Read-only operations — no write lock required.
501
523
  if (method === 'search' || method === 'query') {
502
524
  return this.handleSearch(params);
503
525
  }
504
- if (method === 'addSection' || method === 'add_section') {
505
- return this.handleAddSection(params);
506
- }
507
- if (method === 'updateSection' || method === 'update_section') {
508
- return this.handleUpdateSection(params);
509
- }
510
- if (method === 'removeSection' || method === 'remove_section') {
511
- return this.handleRemoveSection(params);
512
- }
513
526
  if (method === 'readSections' || method === 'read_sections') {
514
527
  return this.handleReadSections(params);
515
528
  }
516
529
  if (method === 'retrieveDocument' || method === 'retrieve_doc') {
517
530
  return this.handleRetrieveDoc(params);
518
531
  }
519
- if (method === 'groupSections' || method === 'group_sections') {
520
- return this.handleGroupSections(params);
521
- }
522
- if (method === 'removeGrouping' || method === 'remove_grouping') {
523
- return this.handleRemoveGrouping(params);
524
- }
525
532
  if (method === 'content' || method === 'compose') {
526
533
  return this.handleCompose(params);
527
534
  }
528
535
  if (method === 'integrityCheck' || method === 'integrity_check') {
529
536
  return this.handleIntegrityCheck();
530
537
  }
531
- if (method === 'gc') {
532
- return this.handleGc();
533
- }
534
- if (method === 'rebuildIndexes' || method === 'rebuild_indexes') {
535
- return this.handleRebuild();
536
- }
537
538
  if (method === 'dbStatus' || method === 'db_status') {
538
539
  return this.handleDbStatus();
539
540
  }
540
- if (method === 'initDirectory' || method === 'init_directory') {
541
- return this.handleInitDirectory(params);
542
- }
543
- if (method === 'invalidate') {
544
- return this.handleInvalidate(params);
545
- }
546
- if (method === 'invalidateAll' || method === 'invalidate_all') {
547
- return this.handleInvalidateAll();
548
- }
549
541
  if (method === 'get_result_status') {
550
542
  return this.handleResultStatus(params);
551
543
  }
552
544
  if (method === 'get_result') {
553
545
  return this.handleGetResult(params);
554
546
  }
555
- if (method === 'migrateDatabase') {
556
- throw new IpcError(
557
- -32601,
558
- 'migrateDatabase is not yet supported',
559
- );
560
- }
561
547
  if (method === 'listByType' || method === 'list_by_type') {
562
548
  return this.handleListByType(params);
563
549
  }
@@ -570,7 +556,74 @@ export class WorkerDaemon {
570
556
  if (method === 'recall') {
571
557
  return this.handleRecall(params);
572
558
  }
573
- return this.invokeWasmRaw(wasmExport, new Uint8Array(0));
559
+ if (method === 'export' || method === 'exportDb') {
560
+ return this.handleExport(params);
561
+ }
562
+
563
+ // Write operations — serialised through the single-writer lock.
564
+ await this.acquireWriteLock();
565
+ try {
566
+ if (method === 'invalidate') {
567
+ return this.handleInvalidate(params);
568
+ }
569
+ if (
570
+ method === 'invalidateAll' ||
571
+ method === 'invalidate_all'
572
+ ) {
573
+ return this.handleInvalidateAll();
574
+ }
575
+ if (method === 'addSection' || method === 'add_section') {
576
+ return this.handleAddSection(params);
577
+ }
578
+ if (
579
+ method === 'updateSection' ||
580
+ method === 'update_section'
581
+ ) {
582
+ return this.handleUpdateSection(params);
583
+ }
584
+ if (
585
+ method === 'removeSection' ||
586
+ method === 'remove_section'
587
+ ) {
588
+ return this.handleRemoveSection(params);
589
+ }
590
+ if (
591
+ method === 'groupSections' ||
592
+ method === 'group_sections'
593
+ ) {
594
+ return this.handleGroupSections(params);
595
+ }
596
+ if (
597
+ method === 'removeGrouping' ||
598
+ method === 'remove_grouping'
599
+ ) {
600
+ return this.handleRemoveGrouping(params);
601
+ }
602
+ if (method === 'gc') {
603
+ return this.handleGc();
604
+ }
605
+ if (
606
+ method === 'rebuildIndexes' ||
607
+ method === 'rebuild_indexes'
608
+ ) {
609
+ return this.handleRebuild();
610
+ }
611
+ if (
612
+ method === 'initDirectory' ||
613
+ method === 'init_directory'
614
+ ) {
615
+ return this.handleInitDirectory(params);
616
+ }
617
+ if (method === 'migrateDatabase') {
618
+ throw new IpcError(
619
+ -32601,
620
+ 'migrateDatabase is not yet supported',
621
+ );
622
+ }
623
+ return this.invokeWasmRaw(wasmExport, new Uint8Array(0));
624
+ } finally {
625
+ this.releaseWriteLock();
626
+ }
574
627
  }
575
628
 
576
629
  // -- Search/query (token-based async) --
@@ -643,6 +696,9 @@ export class WorkerDaemon {
643
696
  : 'text';
644
697
  const typeName =
645
698
  sectionType !== semanticType ? sectionType : null;
699
+ const tags = Array.isArray(params['tags'])
700
+ ? (params['tags'] as string[])
701
+ : [];
646
702
  const input: AddSectionInput = {
647
703
  sectionType: semanticType,
648
704
  mimeType: params['mimeType'] as string | undefined,
@@ -651,11 +707,32 @@ export class WorkerDaemon {
651
707
  description: (params['description'] as string | null) ?? null,
652
708
  docid: (params['docid'] as string | null) ?? null,
653
709
  typeName,
710
+ sourcePath:
711
+ typeof params['sourcePath'] === 'string'
712
+ ? params['sourcePath']
713
+ : undefined,
714
+ sourceMtime:
715
+ typeof params['sourceMtime'] === 'string'
716
+ ? params['sourceMtime']
717
+ : undefined,
718
+ tags,
719
+ replace: params['replace'] === true,
654
720
  };
655
721
  const encoded = encodeAddSectionParams(input);
656
722
  const bytes = this.callWasmSync('worker_add_section', encoded);
657
- const kbid = new TextDecoder().decode(bytes);
658
- return { kbid };
723
+ const decoded = decodeAddSectionResult(bytes);
724
+ const nearDups =
725
+ decoded.nearDuplicates.length > 0
726
+ ? decoded.nearDuplicates
727
+ : this.scanNearDuplicates(input.content, decoded.kbid);
728
+ return {
729
+ kbid: decoded.kbid,
730
+ indexed_terms_count: decoded.indexedTermsCount,
731
+ elapsed_ms: decoded.elapsedMs,
732
+ superseded: decoded.superseded,
733
+ warnings: decoded.warnings,
734
+ near_duplicates: nearDups,
735
+ };
659
736
  }
660
737
 
661
738
  private handleUpdateSection(
@@ -759,7 +836,18 @@ export class WorkerDaemon {
759
836
  private handleInvalidate(params: Record<string, unknown>): unknown {
760
837
  const kbid = (params['kbid'] as string | undefined) ?? '';
761
838
  const encoded = new TextEncoder().encode(kbid);
762
- this.callWasmSync('worker_invalidate', encoded);
839
+ const fn = this.getExport('worker_invalidate');
840
+ const ptr = this.wasmAlloc(encoded.length);
841
+ this.wasmWrite(ptr, encoded);
842
+ const rc = fn(ptr, encoded.length) as number;
843
+ this.wasmFree(ptr, encoded.length);
844
+ if (rc === -1) {
845
+ const errBytes = this.readReturnSlot();
846
+ throw new IpcError(
847
+ -32000,
848
+ new TextDecoder().decode(errBytes) || 'invalidate failed',
849
+ );
850
+ }
763
851
  return { ok: true };
764
852
  }
765
853
 
@@ -819,15 +907,161 @@ export class WorkerDaemon {
819
907
  }
820
908
 
821
909
  private handleGc(): unknown {
910
+ const start = Date.now();
822
911
  this.callWasmZeroArg('worker_garbage_collect');
823
912
  const bytes = this.readReturnSlot();
824
913
  const text = new TextDecoder().decode(bytes);
825
- return decodeKeyValueText(text);
914
+ const kv = decodeKeyValueText(text);
915
+ const removedCount = Number(kv['removed'] ?? 0);
916
+ const staleSources = Number(kv['stale_sources'] ?? 0);
917
+ return {
918
+ removed_sections: removedCount,
919
+ removed_bytes: 0,
920
+ elapsed_ms: Date.now() - start,
921
+ stale_sources: staleSources,
922
+ };
826
923
  }
827
924
 
828
925
  private handleRebuild(): unknown {
829
- this.callWasmZeroArg('worker_rebuild_indexes');
830
- return { ok: true };
926
+ const fn = this.getExport('worker_rebuild_indexes');
927
+ const rc = fn() as number;
928
+ if (rc === -1) {
929
+ const errBytes = this.readReturnSlot();
930
+ const errMsg = new TextDecoder().decode(errBytes);
931
+ throw new IpcError(-32000, errMsg || 'rebuild failed');
932
+ }
933
+ const resultBytes = this.readReturnSlot();
934
+ const reindexed =
935
+ resultBytes.length >= 4
936
+ ? new DataView(
937
+ resultBytes.buffer,
938
+ resultBytes.byteOffset,
939
+ resultBytes.byteLength,
940
+ ).getUint32(0, true)
941
+ : 0;
942
+ return { ok: true, sections_reindexed: reindexed };
943
+ }
944
+
945
+ // -- Export (read operation, no lock required) --
946
+
947
+ private handleExport(params: Record<string, unknown>): unknown {
948
+ const targetPath =
949
+ (params['targetPath'] as string | undefined) ??
950
+ (params['path'] as string | undefined) ??
951
+ './kbdb-export/';
952
+ const encoded = new TextEncoder().encode(targetPath);
953
+ const start = Date.now();
954
+ const bytes = this.callWasmSync('worker_export', encoded);
955
+ const elapsed = Date.now() - start;
956
+ const text = new TextDecoder().decode(bytes);
957
+ const kv = decodeKeyValueText(text);
958
+ return {
959
+ path: kv['path'] ?? targetPath,
960
+ sections_exported: Number(kv['sections_exported'] ?? 0),
961
+ documents_exported: Number(kv['documents_exported'] ?? 0),
962
+ elapsed_ms: elapsed,
963
+ };
964
+ }
965
+
966
+ // -- Near-duplicate detection --
967
+
968
+ private scanNearDuplicates(
969
+ content: string,
970
+ newKbid: string,
971
+ ): { kbid: string; similarity: number }[] {
972
+ const newTerms = this.extractTermSet(content);
973
+ if (newTerms.size === 0) return [];
974
+
975
+ const sectionsDir = join(this.targetDir, 'sections');
976
+ let shards: string[];
977
+ try {
978
+ shards = readdirSync(sectionsDir);
979
+ } catch {
980
+ return [];
981
+ }
982
+
983
+ const results: { kbid: string; similarity: number }[] = [];
984
+ for (const shard of shards) {
985
+ let files: string[];
986
+ try {
987
+ files = readdirSync(join(sectionsDir, shard));
988
+ } catch {
989
+ continue;
990
+ }
991
+ for (const file of files) {
992
+ if (!file.endsWith('.section')) continue;
993
+ const kbid = file.slice(0, -8);
994
+ if (kbid === newKbid) continue;
995
+ try {
996
+ const data = readFileSync(
997
+ join(sectionsDir, shard, file),
998
+ 'utf-8',
999
+ );
1000
+ const sep = data.indexOf('\n---\n');
1001
+ const body = sep >= 0 ? data.slice(sep + 5) : data;
1002
+ const existing = this.extractTermSet(body);
1003
+ let intersection = 0;
1004
+ for (const t of newTerms) {
1005
+ if (existing.has(t)) intersection++;
1006
+ }
1007
+ const union =
1008
+ newTerms.size + existing.size - intersection;
1009
+ const sim = union > 0 ? intersection / union : 0;
1010
+ if (sim >= 0.85) {
1011
+ results.push({
1012
+ kbid,
1013
+ similarity: Math.round(sim * 100) / 100,
1014
+ });
1015
+ }
1016
+ } catch {
1017
+ continue;
1018
+ }
1019
+ }
1020
+ }
1021
+ return results;
1022
+ }
1023
+
1024
+ private extractTermSet(text: string): Set<string> {
1025
+ return new Set(
1026
+ text
1027
+ .toLowerCase()
1028
+ .split(/\W+/)
1029
+ .filter((w) => w.length > 2),
1030
+ );
1031
+ }
1032
+
1033
+ // -- Single-writer lock --
1034
+
1035
+ /**
1036
+ * Acquires the write lock.
1037
+ *
1038
+ * If the lock is free it is granted immediately. If it is held the
1039
+ * caller is queued and its promise resolves once the lock is
1040
+ * released by the current holder.
1041
+ */
1042
+ private acquireWriteLock(): Promise<void> {
1043
+ if (!this._writeLocked) {
1044
+ this._writeLocked = true;
1045
+ return Promise.resolve();
1046
+ }
1047
+ return new Promise<void>((resolve) => {
1048
+ this._writeQueue.push({ resolve });
1049
+ });
1050
+ }
1051
+
1052
+ /**
1053
+ * Releases the write lock.
1054
+ *
1055
+ * If waiters are queued the next one is granted the lock
1056
+ * immediately. Otherwise the lock is marked free.
1057
+ */
1058
+ private releaseWriteLock(): void {
1059
+ const next = this._writeQueue.shift();
1060
+ if (next !== undefined) {
1061
+ next.resolve();
1062
+ } else {
1063
+ this._writeLocked = false;
1064
+ }
831
1065
  }
832
1066
 
833
1067
  // -- WASM lifecycle --
@@ -837,6 +1071,41 @@ export class WorkerDaemon {
837
1071
  this.callWasmSync('worker_init', pathBytes);
838
1072
  }
839
1073
 
1074
+ /**
1075
+ * Runs a database integrity check immediately after context
1076
+ * initialisation.
1077
+ *
1078
+ * Stores the result in `_integrityOk` and `_integrityErrors`.
1079
+ * Logs a warning to stderr when issues are found so operators
1080
+ * are alerted without aborting the daemon.
1081
+ */
1082
+ private runStartupIntegrityCheck(): void {
1083
+ try {
1084
+ this.callWasmZeroArg('worker_check_integrity');
1085
+ const bytes = this.readReturnSlot();
1086
+ const text = new TextDecoder().decode(bytes);
1087
+ const kv = decodeKeyValueText(text);
1088
+ this._integrityOk = kv['ok'] === 'true';
1089
+ if (!this._integrityOk) {
1090
+ this._integrityErrors = Object.entries(kv)
1091
+ .filter(([k]) => k !== 'ok')
1092
+ .map(([k, v]) => `${k}=${v}`);
1093
+ // eslint-disable-next-line no-console
1094
+ console.error(
1095
+ '[kbdb-worker] startup integrity check failed:',
1096
+ this._integrityErrors.join(', '),
1097
+ );
1098
+ }
1099
+ } catch {
1100
+ this._integrityOk = false;
1101
+ this._integrityErrors = ['integrity_check_failed'];
1102
+ // eslint-disable-next-line no-console
1103
+ console.error(
1104
+ '[kbdb-worker] startup integrity check threw an error',
1105
+ );
1106
+ }
1107
+ }
1108
+
840
1109
  // -- WASM bridge primitives --
841
1110
 
842
1111
  private getExport(name: string): WasmFn {
@@ -0,0 +1,69 @@
1
+ import type { DaemonConfig } from '../typings/daemon-config.interface.ts';
2
+
3
+ /**
4
+ * Maps incoming IPC method names to `kb-worker.wasm` export names.
5
+ *
6
+ * Both camelCase and snake_case variants of each method are
7
+ * included so that clients may use either convention.
8
+ */
9
+ export const WASM_METHOD_MAP: Readonly<
10
+ Partial<Record<string, string>>
11
+ > = {
12
+ search: 'worker_search',
13
+ addSection: 'worker_add_section',
14
+ add_section: 'worker_add_section',
15
+ updateSection: 'worker_update_section',
16
+ update_section: 'worker_update_section',
17
+ removeSection: 'worker_remove_section',
18
+ remove_section: 'worker_remove_section',
19
+ readSections: 'worker_read_sections',
20
+ read_sections: 'worker_read_sections',
21
+ groupSections: 'worker_group_sections',
22
+ group_sections: 'worker_group_sections',
23
+ removeGrouping: 'worker_remove_grouping',
24
+ remove_grouping: 'worker_remove_grouping',
25
+ retrieveDocument: 'worker_retrieve_doc',
26
+ retrieve_doc: 'worker_retrieve_doc',
27
+ content: 'worker_compose',
28
+ compose: 'worker_compose',
29
+ integrity_check: 'worker_check_integrity',
30
+ integrityCheck: 'worker_check_integrity',
31
+ gc: 'worker_garbage_collect',
32
+ rebuild_indexes: 'worker_rebuild_indexes',
33
+ rebuildIndexes: 'worker_rebuild_indexes',
34
+ init_directory: 'worker_init_directory',
35
+ initDirectory: 'worker_init_directory',
36
+ migrateDatabase: 'worker_migrate',
37
+ query: 'worker_query',
38
+ get_result_status: 'worker_result_status',
39
+ get_result: 'worker_get_result',
40
+ invalidate: 'worker_invalidate',
41
+ invalidate_all: 'worker_invalidate_all',
42
+ invalidateAll: 'worker_invalidate_all',
43
+ db_status: 'worker_status',
44
+ dbStatus: 'worker_status',
45
+ listByType: 'worker_list_by_type',
46
+ list_by_type: 'worker_list_by_type',
47
+ listDocumentsByType: 'worker_list_docs_by_type',
48
+ list_docs_by_type: 'worker_list_docs_by_type',
49
+ recall: 'worker_recall',
50
+ export: 'worker_export',
51
+ exportDb: 'worker_export',
52
+ };
53
+
54
+ /** Prefix shared by all IPC config-accessor method names. */
55
+ export const CONFIG_PREFIX = 'config_';
56
+
57
+ /**
58
+ * Maps config IPC key suffixes to `DaemonConfig` property names.
59
+ *
60
+ * A client sends `config_timeout_ms` to read `config.timeoutMs`.
61
+ */
62
+ export const CONFIG_KEY_MAP: Readonly<
63
+ Partial<Record<string, keyof DaemonConfig>>
64
+ > = {
65
+ timeout_ms: 'timeoutMs',
66
+ item_ttl_ms: 'itemTtlMs',
67
+ item_limit: 'itemLimit',
68
+ index_limit: 'indexLimit',
69
+ };
@@ -0,0 +1,16 @@
1
+ import type { IpcResponse } from '../typings/ipc-handler.interface.ts';
2
+
3
+ /**
4
+ * Builds a JSON-RPC 2.0 error response object.
5
+ *
6
+ * @param id - request identifier to echo back in the response
7
+ * @param code - JSON-RPC error code
8
+ * @param message - human-readable error description
9
+ */
10
+ export function buildIpcErrorResponse(
11
+ id: number | string,
12
+ code: number,
13
+ message: string,
14
+ ): IpcResponse {
15
+ return { jsonrpc: '2.0', id, error: { code, message } };
16
+ }
@@ -0,0 +1,54 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { DB_FORMAT_VERSION } from '../constants/daemon-defaults.constant.ts';
4
+ import { parseCatalogVersion } from './parse-catalog-version.function.ts';
5
+
6
+ /**
7
+ * Reads `catalog.toml` in `targetDir` and validates its version
8
+ * against `DB_FORMAT_VERSION`.
9
+ *
10
+ * @param targetDir - absolute path to the `.kbdb` directory
11
+ * @throws {Error} when the catalog cannot be read, is missing a
12
+ * version, or the version is incompatible with the current engine
13
+ */
14
+ export function checkCatalogVersion(targetDir: string): void {
15
+ const catalogPath = join(targetDir, 'catalog.toml');
16
+ let text: string;
17
+ try {
18
+ text = readFileSync(catalogPath, 'utf-8');
19
+ } catch {
20
+ throw new Error(
21
+ `cannot read database directory: ${targetDir}` +
22
+ ' -- permission denied',
23
+ );
24
+ }
25
+
26
+ const version = parseCatalogVersion(text);
27
+ if (version === null) {
28
+ throw new Error(
29
+ 'database version 0 requires migration to version ' +
30
+ String(DB_FORMAT_VERSION) +
31
+ ' -- run `kbdb --migrate` before starting the daemon',
32
+ );
33
+ }
34
+
35
+ if (version > DB_FORMAT_VERSION) {
36
+ throw new Error(
37
+ 'database version ' +
38
+ String(version) +
39
+ ' is newer than kbdb version ' +
40
+ String(DB_FORMAT_VERSION) +
41
+ ' -- upgrade kbdb to open this database',
42
+ );
43
+ }
44
+
45
+ if (version < DB_FORMAT_VERSION) {
46
+ throw new Error(
47
+ 'database version ' +
48
+ String(version) +
49
+ ' requires migration to version ' +
50
+ String(DB_FORMAT_VERSION) +
51
+ ' -- run `kbdb --migrate` before starting the daemon',
52
+ );
53
+ }
54
+ }
@@ -0,0 +1,28 @@
1
+ import { existsSync, accessSync, constants } from 'node:fs';
2
+ import { checkCatalogVersion } from './check-catalog-version.function.ts';
3
+
4
+ /**
5
+ * Validates startup preconditions for the worker daemon.
6
+ *
7
+ * Checks that `targetDir` exists, is readable and writable, and
8
+ * that `catalog.toml` reports a compatible format version.
9
+ *
10
+ * @param targetDir - absolute path to the `.kbdb` directory
11
+ * @throws {Error} when any precondition fails
12
+ */
13
+ export function checkPreconditions(targetDir: string): void {
14
+ if (!existsSync(targetDir)) {
15
+ throw new Error(`database directory not found: ${targetDir}`);
16
+ }
17
+
18
+ try {
19
+ accessSync(targetDir, constants.R_OK | constants.W_OK);
20
+ } catch {
21
+ throw new Error(
22
+ `cannot access database directory: ${targetDir}` +
23
+ ' -- permission denied',
24
+ );
25
+ }
26
+
27
+ checkCatalogVersion(targetDir);
28
+ }