@dikolab/kbdb 0.3.0 → 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 (425) hide show
  1. package/README.md +24 -43
  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 +63 -9
  14. package/dist/cli.cjs.map +2 -2
  15. package/dist/cli.mjs +63 -9
  16. package/dist/cli.mjs.map +2 -2
  17. package/dist/src/shared/auto-capture/classes/auto-capture-controller.class.d.ts +33 -0
  18. package/dist/src/shared/auto-capture/constants/auto-capture-defaults.constant.d.ts +8 -0
  19. package/dist/src/shared/auto-capture/functions/build-capture-prompt.function.d.ts +11 -0
  20. package/dist/src/shared/auto-capture/functions/evaluate-trigger.function.d.ts +12 -0
  21. package/dist/src/shared/auto-capture/index.d.ts +7 -0
  22. package/dist/src/shared/auto-capture/typings/auto-capture-config.interface.d.ts +13 -0
  23. package/dist/src/shared/auto-capture/typings/auto-capture-state.interface.d.ts +13 -0
  24. package/dist/src/shared/auto-capture/typings/auto-capture-trigger.interface.d.ts +7 -0
  25. package/dist/src/shared/cli/constants/global-help.constant.d.ts +8 -0
  26. package/dist/src/shared/cli/constants/leaf-help.constant.d.ts +7 -0
  27. package/dist/src/shared/cli/constants/memory-protocol-body.constant.d.ts +7 -0
  28. package/dist/src/shared/cli/constants/query-guidance-body.constant.d.ts +7 -0
  29. package/dist/src/shared/cli/constants/subcommand-help.constant.d.ts +8 -0
  30. package/dist/src/shared/cli/functions/collect-files.function.d.ts +13 -0
  31. package/dist/src/shared/cli/functions/compute-section-kbid.function.d.ts +15 -0
  32. package/dist/src/shared/cli/functions/format-mcp-output.function.d.ts +9 -0
  33. package/dist/src/shared/cli/functions/format-text-output.function.d.ts +9 -0
  34. package/dist/src/shared/cli/functions/generate-group-help.function.d.ts +11 -0
  35. package/dist/src/shared/cli/functions/handle-data-command.function.d.ts +16 -0
  36. package/dist/src/shared/cli/functions/handle-mcp.function.d.ts +15 -0
  37. package/dist/src/shared/cli/functions/handle-migrate.function.d.ts +15 -0
  38. package/dist/src/shared/cli/functions/hydrate-search-previews.function.d.ts +14 -0
  39. package/dist/src/shared/cli/functions/resolve-skill-names.function.d.ts +16 -0
  40. package/dist/src/shared/cli/functions/run-search.function.d.ts +1 -0
  41. package/dist/src/shared/cli/functions/version-gate.function.d.ts +15 -0
  42. package/dist/src/shared/cli/functions/wrap-command.function.d.ts +15 -0
  43. package/dist/src/shared/cli/typings/agent-create-client.interface.d.ts +42 -0
  44. package/dist/src/shared/cli/typings/agent-get-client.interface.d.ts +36 -0
  45. package/dist/src/shared/cli/typings/check-client.interface.d.ts +58 -0
  46. package/dist/src/shared/cli/typings/cli-deps.interface.d.ts +48 -0
  47. package/dist/src/shared/cli/typings/cli-options.interface.d.ts +2 -0
  48. package/dist/src/shared/cli/typings/disconnectable-client.interface.d.ts +26 -0
  49. package/dist/src/shared/cli/typings/dispatch-client.type.d.ts +27 -0
  50. package/dist/src/shared/cli/typings/learn-client.interface.d.ts +52 -0
  51. package/dist/src/shared/cli/typings/learn-io.interface.d.ts +5 -0
  52. package/dist/src/shared/cli/typings/search-client.interface.d.ts +71 -0
  53. package/dist/src/shared/embedding/classes/null-embedding-provider.class.d.ts +20 -0
  54. package/dist/src/shared/embedding/constants/near-duplicate-thresholds.constant.d.ts +15 -0
  55. package/dist/src/shared/embedding/functions/build-vector-index.function.d.ts +14 -0
  56. package/dist/src/shared/embedding/functions/cosine-similarity.function.d.ts +10 -0
  57. package/dist/src/shared/embedding/functions/detect-near-duplicates.function.d.ts +18 -0
  58. package/dist/src/shared/embedding/functions/jaccard-coefficient.function.d.ts +9 -0
  59. package/dist/src/shared/embedding/functions/read-vector-index-meta.function.d.ts +10 -0
  60. package/dist/src/shared/embedding/functions/rrf-fuse.function.d.ts +14 -0
  61. package/dist/src/shared/embedding/functions/search-vectors.function.d.ts +14 -0
  62. package/dist/src/shared/embedding/index.d.ts +16 -0
  63. package/dist/src/shared/embedding/typings/embedding-config.interface.d.ts +20 -0
  64. package/dist/src/shared/embedding/typings/embedding-provider.interface.d.ts +23 -0
  65. package/dist/src/shared/embedding/typings/near-duplicate-candidate.model.d.ts +23 -0
  66. package/dist/src/shared/embedding/typings/near-duplicate-result.model.d.ts +24 -0
  67. package/dist/src/shared/embedding/typings/vector-index-entry.model.d.ts +12 -0
  68. package/dist/src/shared/embedding/typings/vector-index-meta.model.d.ts +11 -0
  69. package/dist/src/shared/embedding/typings/vector-search-result.model.d.ts +7 -0
  70. package/dist/src/shared/mcp/constants/tool-agent-create.constant.d.ts +3 -0
  71. package/dist/src/shared/mcp/constants/tool-agent-delete.constant.d.ts +3 -0
  72. package/dist/src/shared/mcp/constants/tool-agent-get.constant.d.ts +3 -0
  73. package/dist/src/shared/mcp/constants/tool-agent-list.constant.d.ts +3 -0
  74. package/dist/src/shared/mcp/constants/tool-auto-capture-review.constant.d.ts +8 -0
  75. package/dist/src/shared/mcp/constants/tool-check.constant.d.ts +3 -0
  76. package/dist/src/shared/mcp/constants/tool-content.constant.d.ts +3 -0
  77. package/dist/src/shared/mcp/constants/tool-export.constant.d.ts +3 -0
  78. package/dist/src/shared/mcp/constants/tool-gc.constant.d.ts +3 -0
  79. package/dist/src/shared/mcp/constants/tool-learn.constant.d.ts +3 -0
  80. package/dist/src/shared/mcp/constants/tool-rebuild.constant.d.ts +3 -0
  81. package/dist/src/shared/mcp/constants/tool-recall.constant.d.ts +3 -0
  82. package/dist/src/shared/mcp/constants/tool-retrieve.constant.d.ts +3 -0
  83. package/dist/src/shared/mcp/constants/tool-search.constant.d.ts +3 -0
  84. package/dist/src/shared/mcp/constants/tool-skill-delete.constant.d.ts +3 -0
  85. package/dist/src/shared/mcp/constants/tool-skill-get.constant.d.ts +3 -0
  86. package/dist/src/shared/mcp/constants/tool-skill-learn.constant.d.ts +3 -0
  87. package/dist/src/shared/mcp/constants/tool-skill-list.constant.d.ts +3 -0
  88. package/dist/src/shared/mcp/constants/tool-status.constant.d.ts +3 -0
  89. package/dist/src/shared/mcp/constants/tool-unlearn.constant.d.ts +3 -0
  90. package/dist/src/shared/mcp/functions/as-boolean-or-undefined.function.d.ts +7 -0
  91. package/dist/src/shared/mcp/functions/as-string-array-or-undefined.function.d.ts +7 -0
  92. package/dist/src/shared/mcp/functions/as-string-array.function.d.ts +7 -0
  93. package/dist/src/shared/mcp/functions/as-string.function.d.ts +8 -0
  94. package/dist/src/shared/mcp/functions/build-skills-text.function.d.ts +18 -0
  95. package/dist/src/shared/mcp/functions/handle-agent-prompt.function.d.ts +14 -0
  96. package/dist/src/shared/mcp/functions/handle-mcp-request.function.d.ts +14 -0
  97. package/dist/src/shared/mcp/functions/handle-prompt-get.function.d.ts +4 -3
  98. package/dist/src/shared/mcp/functions/handle-skill-prompt.function.d.ts +16 -0
  99. package/dist/src/shared/mcp/functions/handle-tool-auto-capture-review.function.d.ts +12 -0
  100. package/dist/src/shared/mcp/functions/handle-tool-check.function.d.ts +11 -0
  101. package/dist/src/shared/mcp/functions/handle-tool-content.function.d.ts +12 -0
  102. package/dist/src/shared/mcp/functions/handle-tool-export.function.d.ts +12 -0
  103. package/dist/src/shared/mcp/functions/handle-tool-gc.function.d.ts +11 -0
  104. package/dist/src/shared/mcp/functions/handle-tool-learn.function.d.ts +12 -0
  105. package/dist/src/shared/mcp/functions/handle-tool-rebuild.function.d.ts +11 -0
  106. package/dist/src/shared/mcp/functions/handle-tool-retrieve.function.d.ts +12 -0
  107. package/dist/src/shared/mcp/functions/handle-tool-search.function.d.ts +13 -0
  108. package/dist/src/shared/mcp/functions/handle-tool-skill-delete.function.d.ts +12 -0
  109. package/dist/src/shared/mcp/functions/handle-tool-skill-get.function.d.ts +13 -0
  110. package/dist/src/shared/mcp/functions/handle-tool-skill-learn.function.d.ts +13 -0
  111. package/dist/src/shared/mcp/functions/handle-tool-skill-list.function.d.ts +11 -0
  112. package/dist/src/shared/mcp/functions/handle-tool-status.function.d.ts +11 -0
  113. package/dist/src/shared/mcp/functions/handle-tool-unlearn.function.d.ts +12 -0
  114. package/dist/src/shared/mcp/functions/parse-agent-meta.function.d.ts +14 -0
  115. package/dist/src/shared/mcp/functions/parse-skill-arguments.function.d.ts +11 -0
  116. package/dist/src/shared/mcp/functions/read-agent-meta.function.d.ts +17 -0
  117. package/dist/src/shared/mcp/functions/resolve-skill-refs.function.d.ts +23 -0
  118. package/dist/src/shared/mcp/functions/run-startup-health-check.function.d.ts +14 -0
  119. package/dist/src/shared/mcp/typings/mcp-capabilities.interface.d.ts +16 -0
  120. package/dist/src/shared/mcp/typings/mcp-client.interface.d.ts +2 -0
  121. package/dist/src/shared/mcp/typings/mcp-completion.interface.d.ts +43 -0
  122. package/dist/src/shared/mcp/typings/mcp-content-result.model.d.ts +9 -0
  123. package/dist/src/shared/mcp/typings/mcp-export-result.model.d.ts +11 -0
  124. package/dist/src/shared/mcp/typings/mcp-gc-result.model.d.ts +15 -0
  125. package/dist/src/shared/mcp/typings/mcp-integrity-check-result.model.d.ts +16 -0
  126. package/dist/src/shared/mcp/typings/mcp-integrity-error.model.d.ts +9 -0
  127. package/dist/src/shared/mcp/typings/mcp-notification.interface.d.ts +9 -0
  128. package/dist/src/shared/mcp/typings/mcp-rebuild-result.model.d.ts +9 -0
  129. package/dist/src/shared/mcp/typings/mcp-request.interface.d.ts +11 -0
  130. package/dist/src/shared/mcp/typings/mcp-resource-result.interface.d.ts +12 -0
  131. package/dist/src/shared/mcp/typings/mcp-resource-template.interface.d.ts +11 -0
  132. package/dist/src/shared/mcp/typings/mcp-response.interface.d.ts +18 -0
  133. package/dist/src/shared/mcp/typings/mcp-server-info.interface.d.ts +7 -0
  134. package/dist/src/shared/mcp/typings/mcp-server-state.interface.d.ts +16 -0
  135. package/dist/src/shared/mcp/typings/mcp-tool-annotations.interface.d.ts +32 -0
  136. package/dist/src/shared/mcp/typings/mcp-tool-definition.interface.d.ts +15 -0
  137. package/dist/src/shared/mcp/typings/mcp-tool-result.interface.d.ts +19 -0
  138. package/dist/src/shared/mcp/typings/mcp-worker-client.interface.d.ts +220 -0
  139. package/dist/src/shared/mcp/typings/tool-call-result.model.d.ts +17 -0
  140. package/dist/src/shared/sync/functions/build-import-report.function.d.ts +18 -0
  141. package/dist/src/shared/sync/functions/parse-export-entry.function.d.ts +11 -0
  142. package/dist/src/shared/sync/functions/resolve-conflict.function.d.ts +13 -0
  143. package/dist/src/shared/sync/functions/serialize-export-entry.function.d.ts +8 -0
  144. package/dist/src/shared/sync/index.d.ts +9 -0
  145. package/dist/src/shared/sync/typings/conflict-resolution.type.d.ts +8 -0
  146. package/dist/src/shared/sync/typings/export-entry.interface.d.ts +13 -0
  147. package/dist/src/shared/sync/typings/export-options.interface.d.ts +9 -0
  148. package/dist/src/shared/sync/typings/import-options.interface.d.ts +7 -0
  149. package/dist/src/shared/sync/typings/import-report.interface.d.ts +15 -0
  150. package/dist/src/shared/wasm-codec/functions/decode-one-recall-result.function.d.ts +14 -0
  151. package/dist/src/shared/wasm-codec/functions/decode-option-string.function.d.ts +12 -0
  152. package/dist/src/shared/wasm-codec/functions/decode-recall-document.function.d.ts +14 -0
  153. package/dist/src/shared/wasm-codec/functions/decode-recall-reference.function.d.ts +14 -0
  154. package/dist/src/shared/wasm-codec/functions/decode-recall-sibling.function.d.ts +13 -0
  155. package/dist/src/shared/wasm-codec/functions/decode-section-match.function.d.ts +15 -0
  156. package/dist/src/shared/wasm-codec/functions/decode-section-record-trailing.function.d.ts +14 -0
  157. package/dist/src/shared/wasm-codec/functions/decode-section-record.function.d.ts +14 -0
  158. package/dist/src/shared/wasm-codec/functions/decode-section-type.function.d.ts +13 -0
  159. package/dist/src/shared/wasm-codec/functions/decode-wasm-list.function.d.ts +17 -0
  160. package/dist/src/shared/wasm-codec/typings/add-section-input.model.d.ts +45 -0
  161. package/dist/src/shared/wasm-codec/typings/add-section-result.model.d.ts +27 -0
  162. package/dist/src/shared/wasm-codec/typings/document-manifest.model.d.ts +19 -0
  163. package/dist/src/shared/wasm-codec/typings/document-section.model.d.ts +12 -0
  164. package/dist/src/shared/wasm-codec/typings/item-decoder.type.d.ts +6 -0
  165. package/dist/src/shared/wasm-codec/typings/near-duplicate.model.d.ts +16 -0
  166. package/dist/src/shared/wasm-codec/typings/paged-search-result.model.d.ts +21 -0
  167. package/dist/src/shared/wasm-codec/typings/section-match.model.d.ts +31 -0
  168. package/dist/src/shared/wasm-codec/typings/section-record-trailing.model.d.ts +38 -0
  169. package/dist/src/shared/wasm-codec/typings/section-record.model.d.ts +66 -0
  170. package/dist/src/shared/wasm-codec/typings/section-type-result.model.d.ts +12 -0
  171. package/dist/src/shared/worker-client/functions/handle-ipc-data.function.d.ts +16 -0
  172. package/dist/src/shared/worker-client/functions/send-ipc-request.function.d.ts +19 -0
  173. package/dist/src/shared/worker-client/typings/add-section-result.model.d.ts +2 -0
  174. package/dist/src/shared/worker-client/typings/json-rpc-response.interface.d.ts +16 -0
  175. package/dist/src/shared/worker-client/typings/pending-call.interface.d.ts +7 -0
  176. package/dist/src/shared/worker-client/typings/recall-document.model.d.ts +16 -0
  177. package/dist/src/shared/worker-client/typings/recall-params.model.d.ts +15 -0
  178. package/dist/src/shared/worker-client/typings/recall-reference.model.d.ts +32 -0
  179. package/dist/src/shared/worker-client/typings/recall-sibling.model.d.ts +11 -0
  180. package/dist/src/shared/worker-client/typings/recall-single-result.model.d.ts +40 -0
  181. package/dist/src/shared/worker-daemon/classes/ipc-error.class.d.ts +17 -0
  182. package/dist/src/shared/worker-daemon/constants/wasm-method-map.constant.d.ts +16 -0
  183. package/dist/src/shared/worker-daemon/functions/build-ipc-error-response.function.d.ts +9 -0
  184. package/dist/src/shared/worker-daemon/functions/check-catalog-version.function.d.ts +9 -0
  185. package/dist/src/shared/worker-daemon/functions/check-preconditions.function.d.ts +10 -0
  186. package/dist/src/shared/worker-daemon/functions/detect-stale-pid.function.d.ts +15 -0
  187. package/dist/src/shared/worker-daemon/functions/dispatch-request.function.d.ts +35 -0
  188. package/dist/src/shared/worker-daemon/functions/handle-check-version.function.d.ts +23 -0
  189. package/dist/src/shared/worker-daemon/functions/handle-config-method.function.d.ts +11 -0
  190. package/dist/src/shared/worker-daemon/functions/handle-read-ops.function.d.ts +52 -0
  191. package/dist/src/shared/worker-daemon/functions/handle-write-ops.function.d.ts +44 -0
  192. package/dist/src/shared/worker-daemon/functions/parse-auto-capture-section.function.d.ts +14 -0
  193. package/dist/src/shared/worker-daemon/functions/parse-catalog-version.function.d.ts +10 -0
  194. package/dist/src/shared/worker-daemon/functions/parse-embedding-section.function.d.ts +13 -0
  195. package/dist/src/shared/worker-daemon/functions/parse-worker-toml.function.d.ts +11 -0
  196. package/dist/src/shared/worker-daemon/functions/run-startup-integrity-check.function.d.ts +18 -0
  197. package/dist/src/shared/worker-daemon/functions/scan-near-duplicates.function.d.ts +21 -0
  198. package/dist/src/shared/worker-daemon/functions/wasm-bridge.function.d.ts +51 -0
  199. package/dist/src/shared/worker-daemon/functions/wasm-memory-helpers.function.d.ts +22 -0
  200. package/dist/src/shared/worker-daemon/functions/write-lock.function.d.ts +32 -0
  201. package/dist/src/shared/worker-daemon/typings/allocator-ref.interface.d.ts +16 -0
  202. package/dist/src/shared/worker-daemon/typings/daemon-config.interface.d.ts +6 -0
  203. package/dist/src/shared/worker-daemon/typings/fs-adapter.interface.d.ts +22 -0
  204. package/dist/src/shared/worker-daemon/typings/handler-context.interface.d.ts +18 -0
  205. package/dist/src/shared/worker-daemon/typings/memory-ref.interface.d.ts +13 -0
  206. package/dist/src/shared/worker-daemon/typings/wasm-fn.type.d.ts +2 -0
  207. package/dist/src/shared/worker-daemon/typings/write-lock.interface.d.ts +15 -0
  208. package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  209. package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
  210. package/docs/details/mcp-server.md +4 -2
  211. package/docs/goals/auto-capture.md +378 -0
  212. package/docs/goals/benchmarking.md +296 -0
  213. package/docs/goals/concurrency.md +259 -0
  214. package/docs/goals/hybrid-search.md +436 -0
  215. package/docs/goals/semantic-dedup.md +229 -0
  216. package/docs/goals/sync.md +217 -0
  217. package/docs/modules/rust/fs-database/indexes/vectors.md +110 -0
  218. package/docs/modules/typescript/shared/auto-capture/module.md +73 -0
  219. package/docs/modules/typescript/shared/embedding/functions.md +94 -0
  220. package/docs/modules/typescript/shared/embedding/module.md +71 -0
  221. package/docs/modules/typescript/shared/embedding/typings.md +122 -0
  222. package/docs/overview.md +148 -166
  223. package/docs/release-notes/0.2.0.md +3 -3
  224. package/docs/release-notes/0.3.0.md +89 -0
  225. package/docs/release-notes/0.3.1.md +111 -0
  226. package/docs/release-notes/README.md +2 -0
  227. package/package.json +1 -1
  228. package/src/shared/auto-capture/classes/auto-capture-controller.class.ts +62 -0
  229. package/src/shared/auto-capture/constants/auto-capture-defaults.constant.ts +15 -0
  230. package/src/shared/auto-capture/functions/build-capture-prompt.function.ts +27 -0
  231. package/src/shared/auto-capture/functions/evaluate-trigger.function.ts +50 -0
  232. package/src/shared/auto-capture/index.ts +7 -0
  233. package/src/shared/auto-capture/typings/auto-capture-config.interface.ts +13 -0
  234. package/src/shared/auto-capture/typings/auto-capture-state.interface.ts +13 -0
  235. package/src/shared/auto-capture/typings/auto-capture-trigger.interface.ts +7 -0
  236. package/src/shared/cli/constants/global-help.constant.ts +73 -0
  237. package/src/shared/cli/constants/leaf-help.constant.ts +219 -0
  238. package/src/shared/cli/constants/memory-protocol-body.constant.ts +39 -0
  239. package/src/shared/cli/constants/query-guidance-body.constant.ts +37 -0
  240. package/src/shared/cli/constants/subcommand-help.constant.ts +195 -0
  241. package/src/shared/cli/functions/collect-files.function.ts +55 -0
  242. package/src/shared/cli/functions/compute-section-kbid.function.ts +49 -0
  243. package/src/shared/cli/functions/format-mcp-output.function.ts +41 -0
  244. package/src/shared/cli/functions/format-text-output.function.ts +42 -0
  245. package/src/shared/cli/functions/generate-group-help.function.ts +41 -0
  246. package/src/shared/cli/functions/handle-data-command.function.ts +67 -0
  247. package/src/shared/cli/functions/handle-mcp.function.ts +56 -0
  248. package/src/shared/cli/functions/handle-migrate.function.ts +64 -0
  249. package/src/shared/cli/functions/hydrate-search-previews.function.ts +29 -0
  250. package/src/shared/cli/functions/parse-args.function.ts +3 -0
  251. package/src/shared/cli/functions/resolve-skill-names.function.ts +43 -0
  252. package/src/shared/cli/functions/run-search.function.ts +2 -0
  253. package/src/shared/cli/functions/version-gate.function.ts +44 -0
  254. package/src/shared/cli/functions/wrap-command.function.ts +34 -0
  255. package/src/shared/cli/typings/agent-create-client.interface.ts +47 -0
  256. package/src/shared/cli/typings/agent-get-client.interface.ts +39 -0
  257. package/src/shared/cli/typings/check-client.interface.ts +66 -0
  258. package/src/shared/cli/typings/cli-deps.interface.ts +54 -0
  259. package/src/shared/cli/typings/cli-options.interface.ts +2 -0
  260. package/src/shared/cli/typings/disconnectable-client.interface.ts +29 -0
  261. package/src/shared/cli/typings/dispatch-client.type.ts +46 -0
  262. package/src/shared/cli/typings/learn-client.interface.ts +53 -0
  263. package/src/shared/cli/typings/learn-io.interface.ts +5 -0
  264. package/src/shared/cli/typings/search-client.interface.ts +73 -0
  265. package/src/shared/embedding/classes/null-embedding-provider.class.ts +29 -0
  266. package/src/shared/embedding/constants/near-duplicate-thresholds.constant.ts +17 -0
  267. package/src/shared/embedding/functions/build-vector-index.function.ts +79 -0
  268. package/src/shared/embedding/functions/cosine-similarity.function.ts +31 -0
  269. package/src/shared/embedding/functions/detect-near-duplicates.function.ts +69 -0
  270. package/src/shared/embedding/functions/jaccard-coefficient.function.ts +26 -0
  271. package/src/shared/embedding/functions/read-vector-index-meta.function.ts +44 -0
  272. package/src/shared/embedding/functions/rrf-fuse.function.ts +33 -0
  273. package/src/shared/embedding/functions/search-vectors.function.ts +59 -0
  274. package/src/shared/embedding/index.ts +20 -0
  275. package/src/shared/embedding/typings/embedding-config.interface.ts +23 -0
  276. package/src/shared/embedding/typings/embedding-provider.interface.ts +25 -0
  277. package/src/shared/embedding/typings/near-duplicate-candidate.model.ts +25 -0
  278. package/src/shared/embedding/typings/near-duplicate-result.model.ts +26 -0
  279. package/src/shared/embedding/typings/vector-index-entry.model.ts +13 -0
  280. package/src/shared/embedding/typings/vector-index-meta.model.ts +14 -0
  281. package/src/shared/embedding/typings/vector-search-result.model.ts +8 -0
  282. package/src/shared/mcp/classes/mcp-server.class.ts +6 -3
  283. package/src/shared/mcp/constants/tool-agent-create.constant.ts +39 -0
  284. package/src/shared/mcp/constants/tool-agent-delete.constant.ts +26 -0
  285. package/src/shared/mcp/constants/tool-agent-get.constant.ts +24 -0
  286. package/src/shared/mcp/constants/tool-agent-list.constant.ts +18 -0
  287. package/src/shared/mcp/constants/tool-auto-capture-review.constant.ts +32 -0
  288. package/src/shared/mcp/constants/tool-check.constant.ts +21 -0
  289. package/src/shared/mcp/constants/tool-content.constant.ts +29 -0
  290. package/src/shared/mcp/constants/tool-export.constant.ts +27 -0
  291. package/src/shared/mcp/constants/tool-gc.constant.ts +21 -0
  292. package/src/shared/mcp/constants/tool-learn.constant.ts +58 -0
  293. package/src/shared/mcp/constants/tool-rebuild.constant.ts +21 -0
  294. package/src/shared/mcp/constants/tool-recall.constant.ts +36 -0
  295. package/src/shared/mcp/constants/tool-retrieve.constant.ts +31 -0
  296. package/src/shared/mcp/constants/tool-search.constant.ts +51 -0
  297. package/src/shared/mcp/constants/tool-skill-delete.constant.ts +24 -0
  298. package/src/shared/mcp/constants/tool-skill-get.constant.ts +27 -0
  299. package/src/shared/mcp/constants/tool-skill-learn.constant.ts +37 -0
  300. package/src/shared/mcp/constants/tool-skill-list.constant.ts +18 -0
  301. package/src/shared/mcp/constants/tool-status.constant.ts +20 -0
  302. package/src/shared/mcp/constants/tool-unlearn.constant.ts +25 -0
  303. package/src/shared/mcp/functions/as-boolean-or-undefined.function.ts +11 -0
  304. package/src/shared/mcp/functions/as-string-array-or-undefined.function.ts +17 -0
  305. package/src/shared/mcp/functions/as-string-array.function.ts +15 -0
  306. package/src/shared/mcp/functions/as-string.function.ts +10 -0
  307. package/src/shared/mcp/functions/build-skills-text.function.ts +43 -0
  308. package/src/shared/mcp/functions/create-tool-definitions.function.ts +28 -0
  309. package/src/shared/mcp/functions/handle-agent-create.function.ts +1 -1
  310. package/src/shared/mcp/functions/handle-agent-prompt.function.ts +68 -0
  311. package/src/shared/mcp/functions/handle-mcp-request.function.ts +202 -0
  312. package/src/shared/mcp/functions/handle-prompt-get.function.ts +18 -12
  313. package/src/shared/mcp/functions/handle-skill-prompt.function.ts +44 -0
  314. package/src/shared/mcp/functions/handle-tool-auto-capture-review.function.ts +24 -0
  315. package/src/shared/mcp/functions/handle-tool-call.function.ts +18 -0
  316. package/src/shared/mcp/functions/handle-tool-check.function.ts +21 -0
  317. package/src/shared/mcp/functions/handle-tool-content.function.ts +23 -0
  318. package/src/shared/mcp/functions/handle-tool-export.function.ts +25 -0
  319. package/src/shared/mcp/functions/handle-tool-gc.function.ts +21 -0
  320. package/src/shared/mcp/functions/handle-tool-learn.function.ts +69 -0
  321. package/src/shared/mcp/functions/handle-tool-rebuild.function.ts +21 -0
  322. package/src/shared/mcp/functions/handle-tool-retrieve.function.ts +40 -0
  323. package/src/shared/mcp/functions/handle-tool-search.function.ts +47 -0
  324. package/src/shared/mcp/functions/handle-tool-skill-delete.function.ts +34 -0
  325. package/src/shared/mcp/functions/handle-tool-skill-get.function.ts +59 -0
  326. package/src/shared/mcp/functions/handle-tool-skill-learn.function.ts +61 -0
  327. package/src/shared/mcp/functions/handle-tool-skill-list.function.ts +39 -0
  328. package/src/shared/mcp/functions/handle-tool-status.function.ts +21 -0
  329. package/src/shared/mcp/functions/handle-tool-unlearn.function.ts +24 -0
  330. package/src/shared/mcp/functions/parse-agent-meta.function.ts +27 -0
  331. package/src/shared/mcp/functions/parse-skill-arguments.function.ts +36 -0
  332. package/src/shared/mcp/functions/read-agent-meta.function.ts +41 -0
  333. package/src/shared/mcp/functions/resolve-skill-refs.function.ts +50 -0
  334. package/src/shared/mcp/functions/run-startup-health-check.function.ts +34 -0
  335. package/src/shared/mcp/typings/mcp-capabilities.interface.ts +16 -0
  336. package/src/shared/mcp/typings/mcp-client.interface.ts +2 -0
  337. package/src/shared/mcp/typings/mcp-completion.interface.ts +45 -0
  338. package/src/shared/mcp/typings/mcp-content-result.model.ts +9 -0
  339. package/src/shared/mcp/typings/mcp-export-result.model.ts +11 -0
  340. package/src/shared/mcp/typings/mcp-gc-result.model.ts +15 -0
  341. package/src/shared/mcp/typings/mcp-integrity-check-result.model.ts +17 -0
  342. package/src/shared/mcp/typings/mcp-integrity-error.model.ts +15 -0
  343. package/src/shared/mcp/typings/mcp-notification.interface.ts +9 -0
  344. package/src/shared/mcp/typings/mcp-rebuild-result.model.ts +9 -0
  345. package/src/shared/mcp/typings/mcp-request.interface.ts +11 -0
  346. package/src/shared/mcp/typings/mcp-resource-result.interface.ts +12 -0
  347. package/src/shared/mcp/typings/mcp-resource-template.interface.ts +11 -0
  348. package/src/shared/mcp/typings/mcp-response.interface.ts +18 -0
  349. package/src/shared/mcp/typings/mcp-server-info.interface.ts +7 -0
  350. package/src/shared/mcp/typings/mcp-server-state.interface.ts +17 -0
  351. package/src/shared/mcp/typings/mcp-tool-annotations.interface.ts +32 -0
  352. package/src/shared/mcp/typings/mcp-tool-definition.interface.ts +16 -0
  353. package/src/shared/mcp/typings/mcp-tool-result.interface.ts +19 -0
  354. package/src/shared/mcp/typings/mcp-worker-client.interface.ts +243 -0
  355. package/src/shared/mcp/typings/tool-call-result.model.ts +18 -0
  356. package/src/shared/sync/functions/build-import-report.function.ts +40 -0
  357. package/src/shared/sync/functions/parse-export-entry.function.ts +45 -0
  358. package/src/shared/sync/functions/resolve-conflict.function.ts +31 -0
  359. package/src/shared/sync/functions/serialize-export-entry.function.ts +18 -0
  360. package/src/shared/sync/index.ts +9 -0
  361. package/src/shared/sync/typings/conflict-resolution.type.ts +8 -0
  362. package/src/shared/sync/typings/export-entry.interface.ts +13 -0
  363. package/src/shared/sync/typings/export-options.interface.ts +9 -0
  364. package/src/shared/sync/typings/import-options.interface.ts +7 -0
  365. package/src/shared/sync/typings/import-report.interface.ts +15 -0
  366. package/src/shared/wasm-codec/functions/decode-one-recall-result.function.ts +86 -0
  367. package/src/shared/wasm-codec/functions/decode-option-string.function.ts +24 -0
  368. package/src/shared/wasm-codec/functions/decode-recall-document.function.ts +59 -0
  369. package/src/shared/wasm-codec/functions/decode-recall-reference.function.ts +52 -0
  370. package/src/shared/wasm-codec/functions/decode-recall-sibling.function.ts +43 -0
  371. package/src/shared/wasm-codec/functions/decode-section-match.function.ts +80 -0
  372. package/src/shared/wasm-codec/functions/decode-section-record-trailing.function.ts +75 -0
  373. package/src/shared/wasm-codec/functions/decode-section-record.function.ts +85 -0
  374. package/src/shared/wasm-codec/functions/decode-section-type.function.ts +30 -0
  375. package/src/shared/wasm-codec/functions/decode-wasm-list.function.ts +31 -0
  376. package/src/shared/wasm-codec/typings/add-section-input.model.ts +45 -0
  377. package/src/shared/wasm-codec/typings/add-section-result.model.ts +28 -0
  378. package/src/shared/wasm-codec/typings/document-manifest.model.ts +20 -0
  379. package/src/shared/wasm-codec/typings/document-section.model.ts +12 -0
  380. package/src/shared/wasm-codec/typings/item-decoder.type.ts +10 -0
  381. package/src/shared/wasm-codec/typings/near-duplicate.model.ts +16 -0
  382. package/src/shared/wasm-codec/typings/paged-search-result.model.ts +22 -0
  383. package/src/shared/wasm-codec/typings/section-match.model.ts +31 -0
  384. package/src/shared/wasm-codec/typings/section-record-trailing.model.ts +38 -0
  385. package/src/shared/wasm-codec/typings/section-record.model.ts +66 -0
  386. package/src/shared/wasm-codec/typings/section-type-result.model.ts +12 -0
  387. package/src/shared/worker-client/functions/handle-ipc-data.function.ts +49 -0
  388. package/src/shared/worker-client/functions/send-ipc-request.function.ts +39 -0
  389. package/src/shared/worker-client/typings/add-section-result.model.ts +2 -0
  390. package/src/shared/worker-client/typings/json-rpc-response.interface.ts +17 -0
  391. package/src/shared/worker-client/typings/pending-call.interface.ts +7 -0
  392. package/src/shared/worker-client/typings/recall-document.model.ts +16 -0
  393. package/src/shared/worker-client/typings/recall-params.model.ts +15 -0
  394. package/src/shared/worker-client/typings/recall-reference.model.ts +32 -0
  395. package/src/shared/worker-client/typings/recall-sibling.model.ts +11 -0
  396. package/src/shared/worker-client/typings/recall-single-result.model.ts +41 -0
  397. package/src/shared/worker-daemon/classes/ipc-error.class.ts +22 -0
  398. package/src/shared/worker-daemon/constants/wasm-method-map.constant.ts +69 -0
  399. package/src/shared/worker-daemon/functions/build-ipc-error-response.function.ts +16 -0
  400. package/src/shared/worker-daemon/functions/check-catalog-version.function.ts +54 -0
  401. package/src/shared/worker-daemon/functions/check-preconditions.function.ts +28 -0
  402. package/src/shared/worker-daemon/functions/detect-stale-pid.function.ts +33 -0
  403. package/src/shared/worker-daemon/functions/dispatch-request.function.ts +190 -0
  404. package/src/shared/worker-daemon/functions/handle-check-version.function.ts +74 -0
  405. package/src/shared/worker-daemon/functions/handle-config-method.function.ts +27 -0
  406. package/src/shared/worker-daemon/functions/handle-read-ops.function.ts +236 -0
  407. package/src/shared/worker-daemon/functions/handle-write-ops.function.ts +257 -0
  408. package/src/shared/worker-daemon/functions/parse-auto-capture-section.function.ts +51 -0
  409. package/src/shared/worker-daemon/functions/parse-catalog-version.function.ts +20 -0
  410. package/src/shared/worker-daemon/functions/parse-embedding-section.function.ts +38 -0
  411. package/src/shared/worker-daemon/functions/parse-worker-toml.function.ts +104 -0
  412. package/src/shared/worker-daemon/functions/run-startup-integrity-check.function.ts +55 -0
  413. package/src/shared/worker-daemon/functions/scan-near-duplicates.function.ts +92 -0
  414. package/src/shared/worker-daemon/functions/wasm-bridge.function.ts +144 -0
  415. package/src/shared/worker-daemon/functions/wasm-memory-helpers.function.ts +41 -0
  416. package/src/shared/worker-daemon/functions/write-lock.function.ts +49 -0
  417. package/src/shared/worker-daemon/typings/allocator-ref.interface.ts +16 -0
  418. package/src/shared/worker-daemon/typings/daemon-config.interface.ts +7 -0
  419. package/src/shared/worker-daemon/typings/fs-adapter.interface.ts +22 -0
  420. package/src/shared/worker-daemon/typings/handler-context.interface.ts +19 -0
  421. package/src/shared/worker-daemon/typings/memory-ref.interface.ts +13 -0
  422. package/src/shared/worker-daemon/typings/wasm-fn.type.ts +2 -0
  423. package/src/shared/worker-daemon/typings/write-lock.interface.ts +13 -0
  424. package/src/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
  425. package/src/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
@@ -0,0 +1,41 @@
1
+ /** One-line description for each group command. */
2
+ const GROUP_DESCRIPTIONS: Readonly<Record<string, string>> = {
3
+ db: 'Database management',
4
+ skill: 'Skill management',
5
+ agent: 'Agent management',
6
+ };
7
+
8
+ /**
9
+ * Generates the level-2 help text for a group command.
10
+ *
11
+ * Lists all subcommands with their descriptions and
12
+ * includes a footer pointing to per-subcommand help.
13
+ *
14
+ * @param group - the group command name (e.g. `'db'`, `'skill'`)
15
+ * @param subs - ordered list of `[name, description]` pairs
16
+ * @returns formatted help string for the group command
17
+ */
18
+ export function generateGroupHelp(
19
+ group: string,
20
+ subs: readonly (readonly [string, string])[],
21
+ ): string {
22
+ const subLines = subs
23
+ .map(([name, desc]) => ` ${name.padEnd(20)}${desc}`)
24
+ .join('\n');
25
+ const desc = GROUP_DESCRIPTIONS[group] ?? group;
26
+ return (
27
+ `kbdb ${group} - ${desc}\n` +
28
+ `\n` +
29
+ `Usage: kbdb ${group} <subcommand> [options]\n` +
30
+ `\n` +
31
+ `Subcommands:\n` +
32
+ `${subLines}\n` +
33
+ `\n` +
34
+ `Global Options:\n` +
35
+ ` --db <path> Path to .kbdb directory\n` +
36
+ ` -h, --help Show this help message\n` +
37
+ `\n` +
38
+ `Run "kbdb ${group} <subcommand> --help"` +
39
+ ` for details.\n`
40
+ );
41
+ }
@@ -0,0 +1,67 @@
1
+ import type { CliOptions } from '../typings/cli-options.interface.ts';
2
+ import type { CommandResult } from '../typings/command-result.model.ts';
3
+ import type { CliDeps } from '../typings/cli-deps.interface.ts';
4
+ import type { DisconnectableClient } from '../typings/disconnectable-client.interface.ts';
5
+ import { errorToMessage } from './error-to-message.function.ts';
6
+ import { versionGate } from './version-gate.function.ts';
7
+ import { dispatchCommand } from './dispatch-command.function.ts';
8
+
9
+ /**
10
+ * Handles data commands (search, learn, recall, etc.) by finding or
11
+ * creating the database, running the version gate, and dispatching to
12
+ * the appropriate command handler.
13
+ *
14
+ * When the database is not found in non-TTY mode, returns an error.
15
+ * In TTY mode, prompts the user to create a new database.
16
+ *
17
+ * @param options - parsed CLI options with command and args
18
+ * @param deps - injectable CLI dependencies
19
+ * @returns a `CommandResult` from the dispatched command
20
+ */
21
+ export async function handleDataCommand(
22
+ options: CliOptions,
23
+ deps: CliDeps,
24
+ ): Promise<CommandResult> {
25
+ let dbDir = deps.findDb(options.dbPath);
26
+
27
+ if (!dbDir) {
28
+ const basePath = options.dbPath ?? process.cwd();
29
+ if (!deps.isStdinTty()) {
30
+ return {
31
+ error:
32
+ `error: no .kbdb database found at ${basePath}` +
33
+ ' -- run `kbdb --init` to create one',
34
+ exitCode: 1,
35
+ };
36
+ }
37
+ const answer = await deps.promptUser(
38
+ `No .kbdb database found. Create one in ${basePath}? [y/N] `,
39
+ );
40
+ if (answer.toLowerCase() !== 'y') {
41
+ return { error: 'aborted: no database created', exitCode: 1 };
42
+ }
43
+ const initResult = deps.runInit(options);
44
+ if (!initResult.ok) {
45
+ return {
46
+ error: `error: ${initResult.errorMessage ?? 'init failed'}`,
47
+ exitCode: 1,
48
+ };
49
+ }
50
+ dbDir = initResult.targetPath;
51
+ }
52
+
53
+ let client: DisconnectableClient;
54
+ try {
55
+ client = await deps.createWorkerClient({ contextPath: dbDir });
56
+ } catch (err) {
57
+ return { error: `error: ${errorToMessage(err)}`, exitCode: 1 };
58
+ }
59
+
60
+ try {
61
+ const gateResult = await versionGate(client, dbDir);
62
+ if (gateResult) return gateResult;
63
+ return await dispatchCommand(client, options);
64
+ } finally {
65
+ client.disconnect();
66
+ }
67
+ }
@@ -0,0 +1,56 @@
1
+ import type { CliOptions } from '../typings/cli-options.interface.ts';
2
+ import type { CommandResult } from '../typings/command-result.model.ts';
3
+ import type { CliDeps } from '../typings/cli-deps.interface.ts';
4
+ import type { DisconnectableClient } from '../typings/disconnectable-client.interface.ts';
5
+ import { errorToMessage } from './error-to-message.function.ts';
6
+ import { versionGate } from './version-gate.function.ts';
7
+
8
+ /**
9
+ * Handles the `mcp` command sub-flow.
10
+ *
11
+ * Resolves the database directory, creates a worker client, runs
12
+ * the version gate, and starts the MCP server. Disconnects the
13
+ * worker client when finished.
14
+ *
15
+ * @param options - parsed CLI options (uses `dbPath` and env fallback)
16
+ * @param deps - injectable CLI dependencies
17
+ * @returns a `CommandResult` with `exitCode: 0` on success
18
+ */
19
+ export async function handleMcp(
20
+ options: CliOptions,
21
+ deps: CliDeps,
22
+ ): Promise<CommandResult> {
23
+ const rawDbPath = options.dbPath ?? process.env['KBDB_DIR'];
24
+ if (!rawDbPath) {
25
+ return {
26
+ error: 'error: --db or KBDB_DIR required in MCP mode',
27
+ exitCode: 1,
28
+ };
29
+ }
30
+ const dbDir = deps.findDb(rawDbPath);
31
+ if (!dbDir) {
32
+ return {
33
+ error: `error: no .kbdb database found at ${rawDbPath}`,
34
+ exitCode: 1,
35
+ };
36
+ }
37
+ let client: DisconnectableClient;
38
+ try {
39
+ client = await deps.createWorkerClient({ contextPath: dbDir });
40
+ } catch (err) {
41
+ return { error: `error: ${errorToMessage(err)}`, exitCode: 1 };
42
+ }
43
+ try {
44
+ const gateResult = await versionGate(client, dbDir);
45
+ if (gateResult) return gateResult;
46
+ if (deps.startMcpServer) await deps.startMcpServer(dbDir);
47
+ return { exitCode: 0 };
48
+ } catch (err) {
49
+ return {
50
+ error: `error: mcp failed: ${errorToMessage(err)}`,
51
+ exitCode: 1,
52
+ };
53
+ } finally {
54
+ client.disconnect();
55
+ }
56
+ }
@@ -0,0 +1,64 @@
1
+ import type { CliOptions } from '../typings/cli-options.interface.ts';
2
+ import type { CommandResult } from '../typings/command-result.model.ts';
3
+ import type { CliDeps } from '../typings/cli-deps.interface.ts';
4
+ import type { DisconnectableClient } from '../typings/disconnectable-client.interface.ts';
5
+ import { errorToMessage } from './error-to-message.function.ts';
6
+
7
+ /**
8
+ * Handles the `migrate` / `db-migrate` command sub-flow.
9
+ *
10
+ * Resolves the database directory, creates a worker client,
11
+ * checks the version, and runs migrations when needed. Disconnects
12
+ * the worker client when finished.
13
+ *
14
+ * @param options - parsed CLI options (uses `dbPath`)
15
+ * @param deps - injectable CLI dependencies
16
+ * @returns a `CommandResult` with migration output or an error
17
+ */
18
+ export async function handleMigrate(
19
+ options: CliOptions,
20
+ deps: CliDeps,
21
+ ): Promise<CommandResult> {
22
+ const dbDir = deps.findDb(options.dbPath);
23
+ if (!dbDir) {
24
+ return {
25
+ error: `error: no .kbdb database found at ${options.dbPath ?? process.cwd()}`,
26
+ exitCode: 1,
27
+ };
28
+ }
29
+ let client: DisconnectableClient;
30
+ try {
31
+ client = await deps.createWorkerClient({ contextPath: dbDir });
32
+ } catch (err) {
33
+ return { error: `error: ${errorToMessage(err)}`, exitCode: 1 };
34
+ }
35
+ try {
36
+ const versionStatus = await client.checkVersion(dbDir);
37
+ if (versionStatus.status === 'too_new') {
38
+ return {
39
+ error:
40
+ `error: database version` +
41
+ ` ${versionStatus.currentVersion.toString()}` +
42
+ ` is newer than kbdb version` +
43
+ ` ${versionStatus.requiredVersion.toString()}` +
44
+ ` -- upgrade kbdb`,
45
+ exitCode: 1,
46
+ };
47
+ }
48
+ if (versionStatus.status === 'needs_migration') {
49
+ const migrateResult = await client.migrateDatabase(dbDir);
50
+ return {
51
+ output: JSON.stringify(migrateResult, null, 2),
52
+ exitCode: 0,
53
+ };
54
+ }
55
+ return { output: 'already up to date', exitCode: 0 };
56
+ } catch (err) {
57
+ return {
58
+ error: `error: migrate failed: ${errorToMessage(err)}`,
59
+ exitCode: 1,
60
+ };
61
+ } finally {
62
+ client.disconnect();
63
+ }
64
+ }
@@ -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
+ }
@@ -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;
@@ -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
+ }
@@ -70,6 +70,7 @@ export interface SearchClient {
70
70
  mode?: string;
71
71
  limit?: number;
72
72
  offset?: number;
73
+ algo?: string;
73
74
  }): Promise<RawSearchResponse>;
74
75
  }
75
76
 
@@ -106,6 +107,7 @@ export async function runSearch(
106
107
  mode: options.mode,
107
108
  limit: options.limit,
108
109
  offset: options.offset,
110
+ algo: options.algo,
109
111
  });
110
112
 
111
113
  return {
@@ -0,0 +1,44 @@
1
+ import type { CommandResult } from '../typings/command-result.model.ts';
2
+ import type { DisconnectableClient } from '../typings/disconnectable-client.interface.ts';
3
+
4
+ /**
5
+ * Checks the database version and returns a `CommandResult` error
6
+ * when the version is incompatible, or `null` when it is compatible.
7
+ *
8
+ * - `'needs_migration'`: prompts the user to run `kbdb --migrate`
9
+ * - `'too_new'`: informs the user to upgrade kbdb
10
+ * - `'compatible'`: returns `null` (no gate triggered)
11
+ *
12
+ * @param client - disconnectable client with version-check capability
13
+ * @param dbDir - absolute path to the `.kbdb` database root
14
+ * @returns error `CommandResult` when blocked, or `null` when clear
15
+ */
16
+ export async function versionGate(
17
+ client: DisconnectableClient,
18
+ dbDir: string,
19
+ ): Promise<CommandResult | null> {
20
+ const versionStatus = await client.checkVersion(dbDir);
21
+
22
+ if (versionStatus.status === 'needs_migration') {
23
+ return {
24
+ error:
25
+ 'error: database needs migration' +
26
+ ' -- run `kbdb --migrate`',
27
+ exitCode: 1,
28
+ };
29
+ }
30
+
31
+ if (versionStatus.status === 'too_new') {
32
+ return {
33
+ error:
34
+ `error: database version` +
35
+ ` ${versionStatus.currentVersion.toString()}` +
36
+ ` is newer than kbdb version` +
37
+ ` ${versionStatus.requiredVersion.toString()}` +
38
+ ` -- upgrade kbdb`,
39
+ exitCode: 1,
40
+ };
41
+ }
42
+
43
+ return null;
44
+ }
@@ -0,0 +1,34 @@
1
+ import type { CommandResult } from '../typings/command-result.model.ts';
2
+ import { errorToMessage } from './error-to-message.function.ts';
3
+
4
+ /**
5
+ * Wraps an async command handler in a standard try/catch envelope.
6
+ *
7
+ * On success, serialises the result with `JSON.stringify` and
8
+ * returns `exitCode: 0`. On failure, returns an error message
9
+ * prefixed with `<label> failed:` and `exitCode: 1`.
10
+ *
11
+ * @param label - command name used in the error prefix
12
+ * @param handler - async function that produces the command result
13
+ * @param exitCodeSelector - optional function to derive `exitCode`
14
+ * from the successful result; defaults to always returning 0
15
+ * @returns a `CommandResult` with output or error
16
+ */
17
+ export async function wrapCommand<T>(
18
+ label: string,
19
+ handler: () => Promise<T>,
20
+ exitCodeSelector?: (result: T) => number,
21
+ ): Promise<CommandResult> {
22
+ try {
23
+ const result = await handler();
24
+ return {
25
+ output: JSON.stringify(result, null, 2),
26
+ exitCode: exitCodeSelector ? exitCodeSelector(result) : 0,
27
+ };
28
+ } catch (err) {
29
+ return {
30
+ error: `${label} failed: ${errorToMessage(err)}`,
31
+ exitCode: 1,
32
+ };
33
+ }
34
+ }
@@ -0,0 +1,47 @@
1
+ import type { AddSectionResult } from '../../worker-client/typings/add-section-result.model.ts';
2
+
3
+ /**
4
+ * Minimal client interface required by `runAgentCreate`.
5
+ *
6
+ * Decouples the CLI function from the concrete `WorkerClient`
7
+ * implementation, making it straightforward to test with mocks.
8
+ */
9
+ export interface AgentCreateClient {
10
+ /**
11
+ * Ingests a content section into the knowledge base.
12
+ *
13
+ * @param params - section type label, raw content, and optional
14
+ * metadata
15
+ * @returns result object containing the assigned knowledge-base
16
+ * identifier
17
+ */
18
+ addSection(params: {
19
+ readonly sectionType: string;
20
+ readonly content: string;
21
+ readonly title?: string;
22
+ readonly description?: string;
23
+ }): Promise<AddSectionResult>;
24
+
25
+ /**
26
+ * Groups a set of sections under a named document.
27
+ *
28
+ * @param title - human-readable document title
29
+ * @param kbids - identifiers of the sections to group
30
+ * @param docType - application-level document type tag; omit or
31
+ * pass an empty string for untagged documents
32
+ * @returns the assigned document identifier
33
+ */
34
+ groupSections(
35
+ title: string,
36
+ kbids: string[],
37
+ docType?: string,
38
+ ): Promise<string>;
39
+
40
+ /**
41
+ * Retrieves one or more sections by their identifiers.
42
+ *
43
+ * @param kbids - list of knowledge-base identifiers to fetch
44
+ * @returns sections found; missing kbids are omitted from the result
45
+ */
46
+ readSections(kbids: string[]): Promise<{ kbid: string }[]>;
47
+ }
@@ -0,0 +1,39 @@
1
+ /** A document section reference as returned by `retrieveDocument`. */
2
+ export interface AgentDocumentSection {
3
+ /** Knowledge-base identifier of the section. */
4
+ readonly kbid: string;
5
+ /** Zero-based position of the section within the document. */
6
+ readonly position: number;
7
+ }
8
+
9
+ /** A section record as returned by `readSections`. */
10
+ export interface AgentSectionRecord {
11
+ /** Knowledge-base identifier of the section. */
12
+ readonly kbid: string;
13
+ /** Raw text content stored in the section. */
14
+ readonly content: string;
15
+ }
16
+
17
+ /**
18
+ * Minimal client interface required by `runAgentGet`.
19
+ *
20
+ * Decouples the CLI function from the concrete `WorkerClient`
21
+ * implementation, making it straightforward to test with mocks.
22
+ */
23
+ export interface AgentGetClient {
24
+ /**
25
+ * Retrieves a full document record including its ordered sections.
26
+ *
27
+ * @param docid - identifier of the document to retrieve
28
+ * @returns the document record
29
+ */
30
+ retrieveDocument(docid: string): Promise<unknown>;
31
+
32
+ /**
33
+ * Retrieves one or more sections by their identifiers.
34
+ *
35
+ * @param kbids - list of knowledge-base identifiers to fetch
36
+ * @returns sections found; missing kbids are omitted from the result
37
+ */
38
+ readSections(kbids: string[]): Promise<AgentSectionRecord[]>;
39
+ }
@@ -0,0 +1,66 @@
1
+ /** Raw daemon response from `integrityCheck`. */
2
+ export interface RawIntegrityCheckResult {
3
+ /** `true` when all checks passed and no errors were found. */
4
+ readonly ok: boolean;
5
+ /** All integrity errors found; empty when `ok` is `true`. */
6
+ readonly errors: IntegrityError[];
7
+ /** Total number of sections examined. */
8
+ readonly sections_checked: number;
9
+ /** Total number of documents examined. */
10
+ readonly documents_checked: number;
11
+ /** Total number of marker references checked. */
12
+ readonly references_checked: number;
13
+ /** Time taken to complete the check, in milliseconds. */
14
+ readonly elapsed_ms: number;
15
+ /**
16
+ * Encoded divergent-content map.
17
+ *
18
+ * Format: `sk1:kbid1,kbid2;sk2:kbid3,kbid4`
19
+ *
20
+ * Each semicolon-separated segment is a source key followed by
21
+ * a colon and a comma-separated list of kbids. Absent when no
22
+ * divergent content exists.
23
+ */
24
+ readonly divergent_content?: string;
25
+ }
26
+
27
+ /** A single integrity error found during a database check. */
28
+ export interface IntegrityError {
29
+ /**
30
+ * The category of integrity violation detected.
31
+ *
32
+ * - `'checksum_mismatch'` -- stored content does not match its hash
33
+ * - `'orphan_section'` -- section not referenced by any document
34
+ * - `'orphan_document'` -- document references no existing sections
35
+ * - `'broken_reference'` -- a marker references a non-existent entity
36
+ * - `'type_mismatch'` -- stored MIME type conflicts with content
37
+ * - `'circular_reference'` -- marker chain contains a cycle
38
+ */
39
+ readonly type:
40
+ | 'checksum_mismatch'
41
+ | 'orphan_section'
42
+ | 'orphan_document'
43
+ | 'broken_reference'
44
+ | 'type_mismatch'
45
+ | 'circular_reference';
46
+ /** Identifier of the entity (kbid or docid) that has the issue. */
47
+ readonly entity: string;
48
+ /** Human-readable description of the specific problem. */
49
+ readonly detail: string;
50
+ }
51
+
52
+ /**
53
+ * Minimal client interface required by `runCheck`.
54
+ *
55
+ * Decouples the CLI function from the concrete `WorkerClient`
56
+ * implementation, making it straightforward to test with mocks.
57
+ */
58
+ export interface CheckClient {
59
+ /**
60
+ * Runs an integrity check on the knowledge-base database.
61
+ *
62
+ * @returns a report of all issues found; `ok` is `true` when
63
+ * no errors were detected
64
+ */
65
+ integrityCheck(): Promise<RawIntegrityCheckResult>;
66
+ }
@@ -0,0 +1,54 @@
1
+ import type { CliOptions } from './cli-options.interface.ts';
2
+ import type { InitResult } from '../functions/run-init.function.ts';
3
+ import type { DisconnectableClient } from './disconnectable-client.interface.ts';
4
+
5
+ /**
6
+ * Injectable dependencies for the CLI orchestrator.
7
+ *
8
+ * Every external side-effect is injected so the function
9
+ * is fully testable without touching process globals,
10
+ * filesystem, or network.
11
+ */
12
+ export interface CliDeps {
13
+ /** Returns `true` when stdin is an interactive terminal. */
14
+ isStdinTty: () => boolean;
15
+
16
+ /**
17
+ * Prompts the user with the given question and resolves with
18
+ * their trimmed response.
19
+ *
20
+ * @param question - text to display before the input prompt
21
+ */
22
+ promptUser: (question: string) => Promise<string>;
23
+
24
+ /**
25
+ * Creates a worker client connected to the given database path.
26
+ *
27
+ * @param opts - connection options including the context path
28
+ */
29
+ createWorkerClient: (opts: {
30
+ contextPath: string;
31
+ }) => Promise<DisconnectableClient>;
32
+
33
+ /**
34
+ * Finds the `.kbdb` directory starting from the given base path.
35
+ *
36
+ * @param basePath - starting directory; defaults to `process.cwd()`
37
+ * @returns absolute path to `.kbdb` or `null` when not found
38
+ */
39
+ findDb: (basePath?: string) => string | null;
40
+
41
+ /**
42
+ * Initialises a new `.kbdb` database directory.
43
+ *
44
+ * @param options - parsed CLI options
45
+ */
46
+ runInit: (options: CliOptions) => InitResult;
47
+
48
+ /**
49
+ * Starts the MCP server using the given database path.
50
+ *
51
+ * @param contextPath - absolute path to the `.kbdb` directory
52
+ */
53
+ startMcpServer?: (contextPath: string) => Promise<void>;
54
+ }
@@ -29,6 +29,8 @@ export interface CliOptions {
29
29
  format: OutputFormat;
30
30
  /** Search mode passed to the worker daemon. Defaults to `'sections'`. */
31
31
  mode: SearchMode;
32
+ /** Search algorithm: `'lexical'`, `'vector'`, or `'hybrid'`. */
33
+ algo?: string;
32
34
  /** Maximum number of results to return. Defaults to 20. */
33
35
  limit: number;
34
36
  /** Number of results to skip for pagination. */
@@ -0,0 +1,29 @@
1
+ import type { VersionStatus } from '../../worker-client/typings/version-status.model.ts';
2
+ import type { MigrateResult } from '../../worker-client/typings/migrate-result.model.ts';
3
+ import type { DispatchClient } from './dispatch-client.type.ts';
4
+
5
+ /**
6
+ * Extension of `DispatchClient` with lifecycle methods needed by
7
+ * the CLI orchestrator.
8
+ *
9
+ * Adds version checking, migration, and disconnect so the orchestrator
10
+ * can manage a worker-client connection across all CLI commands.
11
+ */
12
+ export interface DisconnectableClient extends DispatchClient {
13
+ /**
14
+ * Checks the database version against the worker engine.
15
+ *
16
+ * @param targetPath - absolute path to the `.kbdb` database root
17
+ */
18
+ checkVersion(targetPath: string): Promise<VersionStatus>;
19
+
20
+ /**
21
+ * Runs all pending database migrations.
22
+ *
23
+ * @param targetPath - absolute path to the `.kbdb` database root
24
+ */
25
+ migrateDatabase(targetPath: string): Promise<MigrateResult>;
26
+
27
+ /** Disconnects from the worker daemon and releases resources. */
28
+ disconnect(): void;
29
+ }