@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.
- package/README.md +47 -31
- package/dist/bench/constants/corpus-defaults.constant.d.ts +3 -0
- package/dist/bench/functions/format-report.function.d.ts +11 -0
- package/dist/bench/functions/generate-corpus.function.d.ts +12 -0
- package/dist/bench/functions/measure-operation.function.d.ts +14 -0
- package/dist/bench/functions/seeded-rng.function.d.ts +11 -0
- package/dist/bench/functions/zipf-word.function.d.ts +13 -0
- package/dist/bench/index.d.ts +10 -0
- package/dist/bench/typings/bench-result.interface.d.ts +11 -0
- package/dist/bench/typings/bench-suite-result.interface.d.ts +10 -0
- package/dist/bench/typings/corpus-config.interface.d.ts +11 -0
- package/dist/bench/typings/corpus-section.interface.d.ts +9 -0
- package/dist/cli.cjs +523 -80
- package/dist/cli.cjs.map +4 -4
- package/dist/cli.mjs +515 -72
- package/dist/cli.mjs.map +4 -4
- package/dist/kbdb-worker.cjs +395 -60
- package/dist/kbdb-worker.cjs.map +4 -4
- package/dist/mod.cjs +17 -0
- package/dist/mod.cjs.map +2 -2
- package/dist/mod.mjs +17 -0
- package/dist/mod.mjs.map +2 -2
- package/dist/src/shared/auto-capture/classes/auto-capture-controller.class.d.ts +33 -0
- package/dist/src/shared/auto-capture/constants/auto-capture-defaults.constant.d.ts +8 -0
- package/dist/src/shared/auto-capture/functions/build-capture-prompt.function.d.ts +11 -0
- package/dist/src/shared/auto-capture/functions/evaluate-trigger.function.d.ts +12 -0
- package/dist/src/shared/auto-capture/index.d.ts +7 -0
- package/dist/src/shared/auto-capture/typings/auto-capture-config.interface.d.ts +13 -0
- package/dist/src/shared/auto-capture/typings/auto-capture-state.interface.d.ts +13 -0
- package/dist/src/shared/auto-capture/typings/auto-capture-trigger.interface.d.ts +7 -0
- package/dist/src/shared/cli/constants/global-help.constant.d.ts +8 -0
- package/dist/src/shared/cli/constants/leaf-help.constant.d.ts +7 -0
- package/dist/src/shared/cli/constants/memory-protocol-body.constant.d.ts +7 -0
- package/dist/src/shared/cli/constants/query-guidance-body.constant.d.ts +7 -0
- package/dist/src/shared/cli/constants/subcommand-help.constant.d.ts +8 -0
- package/dist/src/shared/cli/functions/collect-files.function.d.ts +13 -0
- package/dist/src/shared/cli/functions/compute-section-kbid.function.d.ts +15 -0
- package/dist/src/shared/cli/functions/dispatch-command.function.d.ts +3 -1
- package/dist/src/shared/cli/functions/format-mcp-output.function.d.ts +9 -0
- package/dist/src/shared/cli/functions/format-text-output.function.d.ts +9 -0
- package/dist/src/shared/cli/functions/generate-group-help.function.d.ts +11 -0
- package/dist/src/shared/cli/functions/handle-data-command.function.d.ts +16 -0
- package/dist/src/shared/cli/functions/handle-mcp.function.d.ts +15 -0
- package/dist/src/shared/cli/functions/handle-migrate.function.d.ts +15 -0
- package/dist/src/shared/cli/functions/hydrate-search-previews.function.d.ts +14 -0
- package/dist/src/shared/cli/functions/install-default-skills.function.d.ts +12 -0
- package/dist/src/shared/cli/functions/resolve-skill-names.function.d.ts +16 -0
- package/dist/src/shared/cli/functions/run-check.function.d.ts +47 -5
- package/dist/src/shared/cli/functions/run-export.function.d.ts +34 -0
- package/dist/src/shared/cli/functions/run-gc.function.d.ts +6 -0
- package/dist/src/shared/cli/functions/run-learn.function.d.ts +35 -6
- package/dist/src/shared/cli/functions/run-recall.function.d.ts +45 -0
- package/dist/src/shared/cli/functions/run-search.function.d.ts +53 -15
- package/dist/src/shared/cli/functions/version-gate.function.d.ts +15 -0
- package/dist/src/shared/cli/functions/wrap-command.function.d.ts +15 -0
- package/dist/src/shared/cli/index.d.ts +4 -0
- package/dist/src/shared/cli/typings/agent-create-client.interface.d.ts +42 -0
- package/dist/src/shared/cli/typings/agent-get-client.interface.d.ts +36 -0
- package/dist/src/shared/cli/typings/check-client.interface.d.ts +58 -0
- package/dist/src/shared/cli/typings/cli-deps.interface.d.ts +48 -0
- package/dist/src/shared/cli/typings/cli-options.interface.d.ts +15 -0
- package/dist/src/shared/cli/typings/disconnectable-client.interface.d.ts +26 -0
- package/dist/src/shared/cli/typings/dispatch-client.type.d.ts +27 -0
- package/dist/src/shared/cli/typings/learn-client.interface.d.ts +52 -0
- package/dist/src/shared/cli/typings/learn-io.interface.d.ts +5 -0
- package/dist/src/shared/cli/typings/learn-result.model.d.ts +19 -0
- package/dist/src/shared/cli/typings/search-client.interface.d.ts +71 -0
- package/dist/src/shared/cli/typings/search-display.model.d.ts +18 -0
- package/dist/src/shared/embedding/classes/null-embedding-provider.class.d.ts +20 -0
- package/dist/src/shared/embedding/constants/near-duplicate-thresholds.constant.d.ts +15 -0
- package/dist/src/shared/embedding/functions/build-vector-index.function.d.ts +14 -0
- package/dist/src/shared/embedding/functions/cosine-similarity.function.d.ts +10 -0
- package/dist/src/shared/embedding/functions/detect-near-duplicates.function.d.ts +18 -0
- package/dist/src/shared/embedding/functions/jaccard-coefficient.function.d.ts +9 -0
- package/dist/src/shared/embedding/functions/read-vector-index-meta.function.d.ts +10 -0
- package/dist/src/shared/embedding/functions/rrf-fuse.function.d.ts +14 -0
- package/dist/src/shared/embedding/functions/search-vectors.function.d.ts +14 -0
- package/dist/src/shared/embedding/index.d.ts +16 -0
- package/dist/src/shared/embedding/typings/embedding-config.interface.d.ts +20 -0
- package/dist/src/shared/embedding/typings/embedding-provider.interface.d.ts +23 -0
- package/dist/src/shared/embedding/typings/near-duplicate-candidate.model.d.ts +23 -0
- package/dist/src/shared/embedding/typings/near-duplicate-result.model.d.ts +24 -0
- package/dist/src/shared/embedding/typings/vector-index-entry.model.d.ts +12 -0
- package/dist/src/shared/embedding/typings/vector-index-meta.model.d.ts +11 -0
- package/dist/src/shared/embedding/typings/vector-search-result.model.d.ts +7 -0
- package/dist/src/shared/mcp/classes/mcp-server.class.d.ts +8 -0
- package/dist/src/shared/mcp/constants/tool-agent-create.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-agent-delete.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-agent-get.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-agent-list.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-auto-capture-review.constant.d.ts +8 -0
- package/dist/src/shared/mcp/constants/tool-check.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-content.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-export.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-gc.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-learn.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-rebuild.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-recall.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-retrieve.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-search.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-skill-delete.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-skill-get.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-skill-learn.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-skill-list.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-status.constant.d.ts +3 -0
- package/dist/src/shared/mcp/constants/tool-unlearn.constant.d.ts +3 -0
- package/dist/src/shared/mcp/functions/as-boolean-or-undefined.function.d.ts +7 -0
- package/dist/src/shared/mcp/functions/as-string-array-or-undefined.function.d.ts +7 -0
- package/dist/src/shared/mcp/functions/as-string-array.function.d.ts +7 -0
- package/dist/src/shared/mcp/functions/as-string.function.d.ts +8 -0
- package/dist/src/shared/mcp/functions/build-skills-text.function.d.ts +18 -0
- package/dist/src/shared/mcp/functions/handle-agent-prompt.function.d.ts +14 -0
- package/dist/src/shared/mcp/functions/handle-mcp-request.function.d.ts +14 -0
- package/dist/src/shared/mcp/functions/handle-prompt-get.function.d.ts +4 -3
- package/dist/src/shared/mcp/functions/handle-skill-prompt.function.d.ts +16 -0
- package/dist/src/shared/mcp/functions/handle-tool-auto-capture-review.function.d.ts +12 -0
- package/dist/src/shared/mcp/functions/handle-tool-check.function.d.ts +11 -0
- package/dist/src/shared/mcp/functions/handle-tool-content.function.d.ts +12 -0
- package/dist/src/shared/mcp/functions/handle-tool-export.function.d.ts +12 -0
- package/dist/src/shared/mcp/functions/handle-tool-gc.function.d.ts +11 -0
- package/dist/src/shared/mcp/functions/handle-tool-learn.function.d.ts +12 -0
- package/dist/src/shared/mcp/functions/handle-tool-rebuild.function.d.ts +11 -0
- package/dist/src/shared/mcp/functions/handle-tool-retrieve.function.d.ts +12 -0
- package/dist/src/shared/mcp/functions/handle-tool-search.function.d.ts +13 -0
- package/dist/src/shared/mcp/functions/handle-tool-skill-delete.function.d.ts +12 -0
- package/dist/src/shared/mcp/functions/handle-tool-skill-get.function.d.ts +13 -0
- package/dist/src/shared/mcp/functions/handle-tool-skill-learn.function.d.ts +13 -0
- package/dist/src/shared/mcp/functions/handle-tool-skill-list.function.d.ts +11 -0
- package/dist/src/shared/mcp/functions/handle-tool-status.function.d.ts +11 -0
- package/dist/src/shared/mcp/functions/handle-tool-unlearn.function.d.ts +12 -0
- package/dist/src/shared/mcp/functions/parse-agent-meta.function.d.ts +14 -0
- package/dist/src/shared/mcp/functions/parse-skill-arguments.function.d.ts +11 -0
- package/dist/src/shared/mcp/functions/read-agent-meta.function.d.ts +17 -0
- package/dist/src/shared/mcp/functions/resolve-skill-refs.function.d.ts +23 -0
- package/dist/src/shared/mcp/functions/run-startup-health-check.function.d.ts +14 -0
- package/dist/src/shared/mcp/typings/mcp-capabilities.interface.d.ts +16 -0
- package/dist/src/shared/mcp/typings/mcp-client.interface.d.ts +45 -0
- package/dist/src/shared/mcp/typings/mcp-completion.interface.d.ts +43 -0
- package/dist/src/shared/mcp/typings/mcp-content-result.model.d.ts +9 -0
- package/dist/src/shared/mcp/typings/mcp-export-result.model.d.ts +11 -0
- package/dist/src/shared/mcp/typings/mcp-gc-result.model.d.ts +15 -0
- package/dist/src/shared/mcp/typings/mcp-integrity-check-result.model.d.ts +16 -0
- package/dist/src/shared/mcp/typings/mcp-integrity-error.model.d.ts +9 -0
- package/dist/src/shared/mcp/typings/mcp-notification.interface.d.ts +9 -0
- package/dist/src/shared/mcp/typings/mcp-rebuild-result.model.d.ts +9 -0
- package/dist/src/shared/mcp/typings/mcp-request.interface.d.ts +11 -0
- package/dist/src/shared/mcp/typings/mcp-resource-result.interface.d.ts +12 -0
- package/dist/src/shared/mcp/typings/mcp-resource-template.interface.d.ts +11 -0
- package/dist/src/shared/mcp/typings/mcp-response.interface.d.ts +18 -0
- package/dist/src/shared/mcp/typings/mcp-server-info.interface.d.ts +7 -0
- package/dist/src/shared/mcp/typings/mcp-server-state.interface.d.ts +16 -0
- package/dist/src/shared/mcp/typings/mcp-tool-annotations.interface.d.ts +32 -0
- package/dist/src/shared/mcp/typings/mcp-tool-definition.interface.d.ts +15 -0
- package/dist/src/shared/mcp/typings/mcp-tool-result.interface.d.ts +19 -0
- package/dist/src/shared/mcp/typings/mcp-worker-client.interface.d.ts +220 -0
- package/dist/src/shared/mcp/typings/tool-call-result.model.d.ts +17 -0
- package/dist/src/shared/sync/functions/build-import-report.function.d.ts +18 -0
- package/dist/src/shared/sync/functions/parse-export-entry.function.d.ts +11 -0
- package/dist/src/shared/sync/functions/resolve-conflict.function.d.ts +13 -0
- package/dist/src/shared/sync/functions/serialize-export-entry.function.d.ts +8 -0
- package/dist/src/shared/sync/index.d.ts +9 -0
- package/dist/src/shared/sync/typings/conflict-resolution.type.d.ts +8 -0
- package/dist/src/shared/sync/typings/export-entry.interface.d.ts +13 -0
- package/dist/src/shared/sync/typings/export-options.interface.d.ts +9 -0
- package/dist/src/shared/sync/typings/import-options.interface.d.ts +7 -0
- package/dist/src/shared/sync/typings/import-report.interface.d.ts +15 -0
- package/dist/src/shared/wasm-codec/functions/decode-add-section-result.function.d.ts +48 -0
- package/dist/src/shared/wasm-codec/functions/decode-one-recall-result.function.d.ts +14 -0
- package/dist/src/shared/wasm-codec/functions/decode-option-string.function.d.ts +12 -0
- package/dist/src/shared/wasm-codec/functions/decode-recall-document.function.d.ts +14 -0
- package/dist/src/shared/wasm-codec/functions/decode-recall-reference.function.d.ts +14 -0
- package/dist/src/shared/wasm-codec/functions/decode-recall-sibling.function.d.ts +13 -0
- package/dist/src/shared/wasm-codec/functions/decode-scored-results.function.d.ts +58 -0
- package/dist/src/shared/wasm-codec/functions/decode-section-match.function.d.ts +15 -0
- package/dist/src/shared/wasm-codec/functions/decode-section-record-trailing.function.d.ts +14 -0
- package/dist/src/shared/wasm-codec/functions/decode-section-record.function.d.ts +14 -0
- package/dist/src/shared/wasm-codec/functions/decode-section-records.function.d.ts +33 -0
- package/dist/src/shared/wasm-codec/functions/decode-section-type.function.d.ts +13 -0
- package/dist/src/shared/wasm-codec/functions/decode-wasm-list.function.d.ts +17 -0
- package/dist/src/shared/wasm-codec/functions/encode-add-section-params.function.d.ts +52 -0
- package/dist/src/shared/wasm-codec/index.d.ts +2 -0
- package/dist/src/shared/wasm-codec/typings/add-section-input.model.d.ts +45 -0
- package/dist/src/shared/wasm-codec/typings/add-section-result.model.d.ts +27 -0
- package/dist/src/shared/wasm-codec/typings/document-manifest.model.d.ts +19 -0
- package/dist/src/shared/wasm-codec/typings/document-section.model.d.ts +12 -0
- package/dist/src/shared/wasm-codec/typings/item-decoder.type.d.ts +6 -0
- package/dist/src/shared/wasm-codec/typings/near-duplicate.model.d.ts +16 -0
- package/dist/src/shared/wasm-codec/typings/paged-search-result.model.d.ts +21 -0
- package/dist/src/shared/wasm-codec/typings/section-match.model.d.ts +31 -0
- package/dist/src/shared/wasm-codec/typings/section-record-trailing.model.d.ts +38 -0
- package/dist/src/shared/wasm-codec/typings/section-record.model.d.ts +66 -0
- package/dist/src/shared/wasm-codec/typings/section-type-result.model.d.ts +12 -0
- package/dist/src/shared/worker-client/classes/worker-client.class.d.ts +16 -0
- package/dist/src/shared/worker-client/functions/handle-ipc-data.function.d.ts +16 -0
- package/dist/src/shared/worker-client/functions/send-ipc-request.function.d.ts +19 -0
- package/dist/src/shared/worker-client/index.d.ts +1 -1
- package/dist/src/shared/worker-client/typings/add-section-result.model.d.ts +31 -15
- package/dist/src/shared/worker-client/typings/export-result.model.d.ts +14 -0
- package/dist/src/shared/worker-client/typings/gc-result.model.d.ts +6 -0
- package/dist/src/shared/worker-client/typings/json-rpc-response.interface.d.ts +16 -0
- package/dist/src/shared/worker-client/typings/pending-call.interface.d.ts +7 -0
- package/dist/src/shared/worker-client/typings/recall-document.model.d.ts +16 -0
- package/dist/src/shared/worker-client/typings/recall-params.model.d.ts +15 -0
- package/dist/src/shared/worker-client/typings/recall-reference.model.d.ts +32 -0
- package/dist/src/shared/worker-client/typings/recall-sibling.model.d.ts +11 -0
- package/dist/src/shared/worker-client/typings/recall-single-result.model.d.ts +40 -0
- package/dist/src/shared/worker-client/typings/search-result.model.d.ts +12 -0
- package/dist/src/shared/worker-client/typings/section.model.d.ts +16 -0
- package/dist/src/shared/worker-daemon/classes/ipc-error.class.d.ts +17 -0
- package/dist/src/shared/worker-daemon/classes/worker-daemon.class.d.ts +35 -0
- package/dist/src/shared/worker-daemon/constants/wasm-method-map.constant.d.ts +16 -0
- package/dist/src/shared/worker-daemon/functions/build-ipc-error-response.function.d.ts +9 -0
- package/dist/src/shared/worker-daemon/functions/check-catalog-version.function.d.ts +9 -0
- package/dist/src/shared/worker-daemon/functions/check-preconditions.function.d.ts +10 -0
- package/dist/src/shared/worker-daemon/functions/detect-stale-pid.function.d.ts +15 -0
- package/dist/src/shared/worker-daemon/functions/dispatch-request.function.d.ts +35 -0
- package/dist/src/shared/worker-daemon/functions/handle-check-version.function.d.ts +23 -0
- package/dist/src/shared/worker-daemon/functions/handle-config-method.function.d.ts +11 -0
- package/dist/src/shared/worker-daemon/functions/handle-read-ops.function.d.ts +52 -0
- package/dist/src/shared/worker-daemon/functions/handle-write-ops.function.d.ts +44 -0
- package/dist/src/shared/worker-daemon/functions/parse-auto-capture-section.function.d.ts +14 -0
- package/dist/src/shared/worker-daemon/functions/parse-catalog-version.function.d.ts +10 -0
- package/dist/src/shared/worker-daemon/functions/parse-embedding-section.function.d.ts +13 -0
- package/dist/src/shared/worker-daemon/functions/parse-worker-toml.function.d.ts +11 -0
- package/dist/src/shared/worker-daemon/functions/run-startup-integrity-check.function.d.ts +18 -0
- package/dist/src/shared/worker-daemon/functions/scan-near-duplicates.function.d.ts +21 -0
- package/dist/src/shared/worker-daemon/functions/wasm-bridge.function.d.ts +51 -0
- package/dist/src/shared/worker-daemon/functions/wasm-memory-helpers.function.d.ts +22 -0
- package/dist/src/shared/worker-daemon/functions/write-lock.function.d.ts +32 -0
- package/dist/src/shared/worker-daemon/typings/allocator-ref.interface.d.ts +16 -0
- package/dist/src/shared/worker-daemon/typings/daemon-config.interface.d.ts +6 -0
- package/dist/src/shared/worker-daemon/typings/fs-adapter.interface.d.ts +22 -0
- package/dist/src/shared/worker-daemon/typings/handler-context.interface.d.ts +18 -0
- package/dist/src/shared/worker-daemon/typings/memory-ref.interface.d.ts +13 -0
- package/dist/src/shared/worker-daemon/typings/wasm-fn.type.d.ts +2 -0
- package/dist/src/shared/worker-daemon/typings/write-lock.interface.d.ts +15 -0
- package/dist/wasm/fs-database/kbdb_fs_database.d.ts +22 -1
- package/dist/wasm/fs-database/kbdb_fs_database.js +28 -1
- package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
- package/dist/wasm/fs-database/kbdb_fs_database_bg.wasm.d.ts +1 -0
- package/dist/wasm/kb-worker/kbdb_worker.d.ts +48 -1
- package/dist/wasm/kb-worker/kbdb_worker.js +60 -1
- package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
- package/dist/wasm/kb-worker/kbdb_worker_bg.wasm.d.ts +2 -0
- package/dist/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
- package/dist/worker.mjs +396 -60
- package/dist/worker.mjs.map +4 -4
- package/docs/details/cli.md +102 -15
- package/docs/details/library-api.md +55 -6
- package/docs/details/mcp-server.md +10 -4
- package/docs/details/search-and-ranking.md +63 -5
- package/docs/details/storage.md +2 -0
- package/docs/goals/auto-capture.md +378 -0
- package/docs/goals/benchmarking.md +296 -0
- package/docs/goals/cli.md +255 -14
- package/docs/goals/concurrency.md +259 -0
- package/docs/goals/database.md +244 -17
- package/docs/goals/document.md +1 -1
- package/docs/goals/hybrid-search.md +436 -0
- package/docs/goals/mcp.md +83 -14
- package/docs/goals/query-parser.md +98 -4
- package/docs/goals/query-result.md +177 -10
- package/docs/goals/semantic-dedup.md +229 -0
- package/docs/goals/skills.md +72 -0
- package/docs/goals/sync.md +217 -0
- package/docs/goals/worker-daemon.md +54 -7
- package/docs/modules/rust/fs-database/functions/integrity.md +11 -0
- package/docs/modules/rust/fs-database/functions/section.md +23 -6
- package/docs/modules/rust/fs-database/indexes/vectors.md +110 -0
- package/docs/modules/rust/fs-database/module.md +1 -0
- package/docs/modules/rust/fs-database/types/section.md +27 -1
- package/docs/modules/rust/overview.md +2 -1
- package/docs/modules/rust/query-parser/functions/module.md +2 -2
- package/docs/modules/rust/query-parser/functions/pipeline.md +44 -6
- package/docs/modules/rust/query-parser/module.md +5 -4
- package/docs/modules/rust/query-parser/types/keyphrase.md +11 -0
- package/docs/modules/rust/query-parser/types/module.md +3 -3
- package/docs/modules/typescript/shared/auto-capture/module.md +73 -0
- package/docs/modules/typescript/shared/cli/functions.md +68 -3
- package/docs/modules/typescript/shared/embedding/functions.md +94 -0
- package/docs/modules/typescript/shared/embedding/module.md +71 -0
- package/docs/modules/typescript/shared/embedding/typings.md +122 -0
- package/docs/overview.md +148 -166
- package/docs/release-notes/0.2.0.md +3 -3
- package/docs/release-notes/0.3.0.md +89 -0
- package/docs/release-notes/0.3.1.md +111 -0
- package/docs/release-notes/README.md +2 -0
- package/package.json +1 -1
- package/src/shared/auto-capture/classes/auto-capture-controller.class.ts +62 -0
- package/src/shared/auto-capture/constants/auto-capture-defaults.constant.ts +15 -0
- package/src/shared/auto-capture/functions/build-capture-prompt.function.ts +27 -0
- package/src/shared/auto-capture/functions/evaluate-trigger.function.ts +50 -0
- package/src/shared/auto-capture/index.ts +7 -0
- package/src/shared/auto-capture/typings/auto-capture-config.interface.ts +13 -0
- package/src/shared/auto-capture/typings/auto-capture-state.interface.ts +13 -0
- package/src/shared/auto-capture/typings/auto-capture-trigger.interface.ts +7 -0
- package/src/shared/cli/constants/global-help.constant.ts +73 -0
- package/src/shared/cli/constants/leaf-help.constant.ts +219 -0
- package/src/shared/cli/constants/memory-protocol-body.constant.ts +39 -0
- package/src/shared/cli/constants/query-guidance-body.constant.ts +37 -0
- package/src/shared/cli/constants/subcommand-help.constant.ts +195 -0
- package/src/shared/cli/functions/collect-files.function.ts +55 -0
- package/src/shared/cli/functions/compute-section-kbid.function.ts +49 -0
- package/src/shared/cli/functions/dispatch-command.function.ts +53 -1
- package/src/shared/cli/functions/format-mcp-output.function.ts +41 -0
- package/src/shared/cli/functions/format-output.function.ts +36 -12
- package/src/shared/cli/functions/format-text-output.function.ts +42 -0
- package/src/shared/cli/functions/generate-group-help.function.ts +41 -0
- package/src/shared/cli/functions/generate-help.function.ts +56 -1
- package/src/shared/cli/functions/handle-data-command.function.ts +67 -0
- package/src/shared/cli/functions/handle-mcp.function.ts +56 -0
- package/src/shared/cli/functions/handle-migrate.function.ts +64 -0
- package/src/shared/cli/functions/hydrate-search-previews.function.ts +29 -0
- package/src/shared/cli/functions/install-default-skills.function.ts +296 -0
- package/src/shared/cli/functions/parse-args.function.ts +16 -0
- package/src/shared/cli/functions/resolve-skill-names.function.ts +43 -0
- package/src/shared/cli/functions/run-check.function.ts +87 -6
- package/src/shared/cli/functions/run-export.function.ts +40 -0
- package/src/shared/cli/functions/run-gc.function.ts +6 -0
- package/src/shared/cli/functions/run-init.function.ts +2 -0
- package/src/shared/cli/functions/run-learn.function.ts +68 -16
- package/src/shared/cli/functions/run-recall.function.ts +66 -0
- package/src/shared/cli/functions/run-search.function.ts +60 -15
- package/src/shared/cli/functions/version-gate.function.ts +44 -0
- package/src/shared/cli/functions/wrap-command.function.ts +34 -0
- package/src/shared/cli/index.ts +4 -0
- package/src/shared/cli/typings/agent-create-client.interface.ts +47 -0
- package/src/shared/cli/typings/agent-get-client.interface.ts +39 -0
- package/src/shared/cli/typings/check-client.interface.ts +66 -0
- package/src/shared/cli/typings/cli-deps.interface.ts +54 -0
- package/src/shared/cli/typings/cli-options.interface.ts +15 -0
- package/src/shared/cli/typings/disconnectable-client.interface.ts +29 -0
- package/src/shared/cli/typings/dispatch-client.type.ts +46 -0
- package/src/shared/cli/typings/learn-client.interface.ts +53 -0
- package/src/shared/cli/typings/learn-io.interface.ts +5 -0
- package/src/shared/cli/typings/learn-result.model.ts +16 -0
- package/src/shared/cli/typings/search-client.interface.ts +73 -0
- package/src/shared/cli/typings/search-display.model.ts +18 -0
- package/src/shared/embedding/classes/null-embedding-provider.class.ts +29 -0
- package/src/shared/embedding/constants/near-duplicate-thresholds.constant.ts +17 -0
- package/src/shared/embedding/functions/build-vector-index.function.ts +79 -0
- package/src/shared/embedding/functions/cosine-similarity.function.ts +31 -0
- package/src/shared/embedding/functions/detect-near-duplicates.function.ts +69 -0
- package/src/shared/embedding/functions/jaccard-coefficient.function.ts +26 -0
- package/src/shared/embedding/functions/read-vector-index-meta.function.ts +44 -0
- package/src/shared/embedding/functions/rrf-fuse.function.ts +33 -0
- package/src/shared/embedding/functions/search-vectors.function.ts +59 -0
- package/src/shared/embedding/index.ts +20 -0
- package/src/shared/embedding/typings/embedding-config.interface.ts +23 -0
- package/src/shared/embedding/typings/embedding-provider.interface.ts +25 -0
- package/src/shared/embedding/typings/near-duplicate-candidate.model.ts +25 -0
- package/src/shared/embedding/typings/near-duplicate-result.model.ts +26 -0
- package/src/shared/embedding/typings/vector-index-entry.model.ts +13 -0
- package/src/shared/embedding/typings/vector-index-meta.model.ts +14 -0
- package/src/shared/embedding/typings/vector-search-result.model.ts +8 -0
- package/src/shared/mcp/classes/mcp-server.class.ts +36 -4
- package/src/shared/mcp/constants/tool-agent-create.constant.ts +39 -0
- package/src/shared/mcp/constants/tool-agent-delete.constant.ts +26 -0
- package/src/shared/mcp/constants/tool-agent-get.constant.ts +24 -0
- package/src/shared/mcp/constants/tool-agent-list.constant.ts +18 -0
- package/src/shared/mcp/constants/tool-auto-capture-review.constant.ts +32 -0
- package/src/shared/mcp/constants/tool-check.constant.ts +21 -0
- package/src/shared/mcp/constants/tool-content.constant.ts +29 -0
- package/src/shared/mcp/constants/tool-export.constant.ts +27 -0
- package/src/shared/mcp/constants/tool-gc.constant.ts +21 -0
- package/src/shared/mcp/constants/tool-learn.constant.ts +58 -0
- package/src/shared/mcp/constants/tool-rebuild.constant.ts +21 -0
- package/src/shared/mcp/constants/tool-recall.constant.ts +36 -0
- package/src/shared/mcp/constants/tool-retrieve.constant.ts +31 -0
- package/src/shared/mcp/constants/tool-search.constant.ts +51 -0
- package/src/shared/mcp/constants/tool-skill-delete.constant.ts +24 -0
- package/src/shared/mcp/constants/tool-skill-get.constant.ts +27 -0
- package/src/shared/mcp/constants/tool-skill-learn.constant.ts +37 -0
- package/src/shared/mcp/constants/tool-skill-list.constant.ts +18 -0
- package/src/shared/mcp/constants/tool-status.constant.ts +20 -0
- package/src/shared/mcp/constants/tool-unlearn.constant.ts +25 -0
- package/src/shared/mcp/functions/as-boolean-or-undefined.function.ts +11 -0
- package/src/shared/mcp/functions/as-string-array-or-undefined.function.ts +17 -0
- package/src/shared/mcp/functions/as-string-array.function.ts +15 -0
- package/src/shared/mcp/functions/as-string.function.ts +10 -0
- package/src/shared/mcp/functions/build-skills-text.function.ts +43 -0
- package/src/shared/mcp/functions/create-tool-definitions.function.ts +74 -5
- package/src/shared/mcp/functions/handle-agent-create.function.ts +1 -1
- package/src/shared/mcp/functions/handle-agent-prompt.function.ts +68 -0
- package/src/shared/mcp/functions/handle-mcp-request.function.ts +202 -0
- package/src/shared/mcp/functions/handle-prompt-get.function.ts +18 -12
- package/src/shared/mcp/functions/handle-skill-prompt.function.ts +44 -0
- package/src/shared/mcp/functions/handle-tool-auto-capture-review.function.ts +24 -0
- package/src/shared/mcp/functions/handle-tool-call.function.ts +88 -2
- package/src/shared/mcp/functions/handle-tool-check.function.ts +21 -0
- package/src/shared/mcp/functions/handle-tool-content.function.ts +23 -0
- package/src/shared/mcp/functions/handle-tool-export.function.ts +25 -0
- package/src/shared/mcp/functions/handle-tool-gc.function.ts +21 -0
- package/src/shared/mcp/functions/handle-tool-learn.function.ts +69 -0
- package/src/shared/mcp/functions/handle-tool-rebuild.function.ts +21 -0
- package/src/shared/mcp/functions/handle-tool-retrieve.function.ts +40 -0
- package/src/shared/mcp/functions/handle-tool-search.function.ts +47 -0
- package/src/shared/mcp/functions/handle-tool-skill-delete.function.ts +34 -0
- package/src/shared/mcp/functions/handle-tool-skill-get.function.ts +59 -0
- package/src/shared/mcp/functions/handle-tool-skill-learn.function.ts +61 -0
- package/src/shared/mcp/functions/handle-tool-skill-list.function.ts +39 -0
- package/src/shared/mcp/functions/handle-tool-status.function.ts +21 -0
- package/src/shared/mcp/functions/handle-tool-unlearn.function.ts +24 -0
- package/src/shared/mcp/functions/parse-agent-meta.function.ts +27 -0
- package/src/shared/mcp/functions/parse-skill-arguments.function.ts +36 -0
- package/src/shared/mcp/functions/read-agent-meta.function.ts +41 -0
- package/src/shared/mcp/functions/resolve-skill-refs.function.ts +50 -0
- package/src/shared/mcp/functions/run-startup-health-check.function.ts +34 -0
- package/src/shared/mcp/typings/mcp-capabilities.interface.ts +16 -0
- package/src/shared/mcp/typings/mcp-client.interface.ts +47 -0
- package/src/shared/mcp/typings/mcp-completion.interface.ts +45 -0
- package/src/shared/mcp/typings/mcp-content-result.model.ts +9 -0
- package/src/shared/mcp/typings/mcp-export-result.model.ts +11 -0
- package/src/shared/mcp/typings/mcp-gc-result.model.ts +15 -0
- package/src/shared/mcp/typings/mcp-integrity-check-result.model.ts +17 -0
- package/src/shared/mcp/typings/mcp-integrity-error.model.ts +15 -0
- package/src/shared/mcp/typings/mcp-notification.interface.ts +9 -0
- package/src/shared/mcp/typings/mcp-rebuild-result.model.ts +9 -0
- package/src/shared/mcp/typings/mcp-request.interface.ts +11 -0
- package/src/shared/mcp/typings/mcp-resource-result.interface.ts +12 -0
- package/src/shared/mcp/typings/mcp-resource-template.interface.ts +11 -0
- package/src/shared/mcp/typings/mcp-response.interface.ts +18 -0
- package/src/shared/mcp/typings/mcp-server-info.interface.ts +7 -0
- package/src/shared/mcp/typings/mcp-server-state.interface.ts +17 -0
- package/src/shared/mcp/typings/mcp-tool-annotations.interface.ts +32 -0
- package/src/shared/mcp/typings/mcp-tool-definition.interface.ts +16 -0
- package/src/shared/mcp/typings/mcp-tool-result.interface.ts +19 -0
- package/src/shared/mcp/typings/mcp-worker-client.interface.ts +243 -0
- package/src/shared/mcp/typings/tool-call-result.model.ts +18 -0
- package/src/shared/sync/functions/build-import-report.function.ts +40 -0
- package/src/shared/sync/functions/parse-export-entry.function.ts +45 -0
- package/src/shared/sync/functions/resolve-conflict.function.ts +31 -0
- package/src/shared/sync/functions/serialize-export-entry.function.ts +18 -0
- package/src/shared/sync/index.ts +9 -0
- package/src/shared/sync/typings/conflict-resolution.type.ts +8 -0
- package/src/shared/sync/typings/export-entry.interface.ts +13 -0
- package/src/shared/sync/typings/export-options.interface.ts +9 -0
- package/src/shared/sync/typings/import-options.interface.ts +7 -0
- package/src/shared/sync/typings/import-report.interface.ts +15 -0
- package/src/shared/wasm-codec/functions/decode-add-section-result.function.ts +112 -0
- package/src/shared/wasm-codec/functions/decode-one-recall-result.function.ts +86 -0
- package/src/shared/wasm-codec/functions/decode-option-string.function.ts +24 -0
- package/src/shared/wasm-codec/functions/decode-recall-document.function.ts +59 -0
- package/src/shared/wasm-codec/functions/decode-recall-reference.function.ts +52 -0
- package/src/shared/wasm-codec/functions/decode-recall-sibling.function.ts +43 -0
- package/src/shared/wasm-codec/functions/decode-scored-results.function.ts +86 -0
- package/src/shared/wasm-codec/functions/decode-section-match.function.ts +80 -0
- package/src/shared/wasm-codec/functions/decode-section-record-trailing.function.ts +75 -0
- package/src/shared/wasm-codec/functions/decode-section-record.function.ts +85 -0
- package/src/shared/wasm-codec/functions/decode-section-records.function.ts +87 -0
- package/src/shared/wasm-codec/functions/decode-section-type.function.ts +30 -0
- package/src/shared/wasm-codec/functions/decode-wasm-list.function.ts +31 -0
- package/src/shared/wasm-codec/functions/encode-add-section-params.function.ts +68 -0
- package/src/shared/wasm-codec/index.ts +5 -0
- package/src/shared/wasm-codec/typings/add-section-input.model.ts +45 -0
- package/src/shared/wasm-codec/typings/add-section-result.model.ts +28 -0
- package/src/shared/wasm-codec/typings/document-manifest.model.ts +20 -0
- package/src/shared/wasm-codec/typings/document-section.model.ts +12 -0
- package/src/shared/wasm-codec/typings/item-decoder.type.ts +10 -0
- package/src/shared/wasm-codec/typings/near-duplicate.model.ts +16 -0
- package/src/shared/wasm-codec/typings/paged-search-result.model.ts +22 -0
- package/src/shared/wasm-codec/typings/section-match.model.ts +31 -0
- package/src/shared/wasm-codec/typings/section-record-trailing.model.ts +38 -0
- package/src/shared/wasm-codec/typings/section-record.model.ts +66 -0
- package/src/shared/wasm-codec/typings/section-type-result.model.ts +12 -0
- package/src/shared/worker-client/classes/worker-client.class.ts +19 -0
- package/src/shared/worker-client/functions/handle-ipc-data.function.ts +49 -0
- package/src/shared/worker-client/functions/send-ipc-request.function.ts +39 -0
- package/src/shared/worker-client/index.ts +4 -1
- package/src/shared/worker-client/typings/add-section-result.model.ts +32 -15
- package/src/shared/worker-client/typings/export-result.model.ts +14 -0
- package/src/shared/worker-client/typings/gc-result.model.ts +6 -0
- package/src/shared/worker-client/typings/json-rpc-response.interface.ts +17 -0
- package/src/shared/worker-client/typings/pending-call.interface.ts +7 -0
- package/src/shared/worker-client/typings/recall-document.model.ts +16 -0
- package/src/shared/worker-client/typings/recall-params.model.ts +15 -0
- package/src/shared/worker-client/typings/recall-reference.model.ts +32 -0
- package/src/shared/worker-client/typings/recall-sibling.model.ts +11 -0
- package/src/shared/worker-client/typings/recall-single-result.model.ts +41 -0
- package/src/shared/worker-client/typings/search-result.model.ts +12 -0
- package/src/shared/worker-client/typings/section.model.ts +16 -0
- package/src/shared/worker-daemon/classes/ipc-error.class.ts +22 -0
- package/src/shared/worker-daemon/classes/worker-daemon.class.ts +315 -46
- package/src/shared/worker-daemon/constants/wasm-method-map.constant.ts +69 -0
- package/src/shared/worker-daemon/functions/build-ipc-error-response.function.ts +16 -0
- package/src/shared/worker-daemon/functions/check-catalog-version.function.ts +54 -0
- package/src/shared/worker-daemon/functions/check-preconditions.function.ts +28 -0
- package/src/shared/worker-daemon/functions/create-host-imports.function.ts +19 -4
- package/src/shared/worker-daemon/functions/create-ipc-server.function.ts +5 -1
- package/src/shared/worker-daemon/functions/detect-stale-pid.function.ts +33 -0
- package/src/shared/worker-daemon/functions/dispatch-request.function.ts +190 -0
- package/src/shared/worker-daemon/functions/handle-check-version.function.ts +74 -0
- package/src/shared/worker-daemon/functions/handle-config-method.function.ts +27 -0
- package/src/shared/worker-daemon/functions/handle-read-ops.function.ts +236 -0
- package/src/shared/worker-daemon/functions/handle-write-ops.function.ts +257 -0
- package/src/shared/worker-daemon/functions/parse-auto-capture-section.function.ts +51 -0
- package/src/shared/worker-daemon/functions/parse-catalog-version.function.ts +20 -0
- package/src/shared/worker-daemon/functions/parse-embedding-section.function.ts +38 -0
- package/src/shared/worker-daemon/functions/parse-worker-toml.function.ts +104 -0
- package/src/shared/worker-daemon/functions/run-startup-integrity-check.function.ts +55 -0
- package/src/shared/worker-daemon/functions/scan-near-duplicates.function.ts +92 -0
- package/src/shared/worker-daemon/functions/wasm-bridge.function.ts +144 -0
- package/src/shared/worker-daemon/functions/wasm-memory-helpers.function.ts +41 -0
- package/src/shared/worker-daemon/functions/write-lock.function.ts +49 -0
- package/src/shared/worker-daemon/typings/allocator-ref.interface.ts +16 -0
- package/src/shared/worker-daemon/typings/daemon-config.interface.ts +7 -0
- package/src/shared/worker-daemon/typings/fs-adapter.interface.ts +22 -0
- package/src/shared/worker-daemon/typings/handler-context.interface.ts +19 -0
- package/src/shared/worker-daemon/typings/memory-ref.interface.ts +13 -0
- package/src/shared/worker-daemon/typings/wasm-fn.type.ts +2 -0
- package/src/shared/worker-daemon/typings/write-lock.interface.ts +13 -0
- package/src/wasm/fs-database/kbdb_fs_database.d.ts +22 -1
- package/src/wasm/fs-database/kbdb_fs_database.js +28 -1
- package/src/wasm/fs-database/kbdb_fs_database_bg.wasm +0 -0
- package/src/wasm/fs-database/kbdb_fs_database_bg.wasm.d.ts +1 -0
- package/src/wasm/kb-worker/kbdb_worker.d.ts +48 -1
- package/src/wasm/kb-worker/kbdb_worker.js +60 -1
- package/src/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
- package/src/wasm/kb-worker/kbdb_worker_bg.wasm.d.ts +2 -0
- package/src/wasm/query-parser/kbdb_query_parser_bg.wasm +0 -0
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
# Hybrid Search -- Lexical + Vector Retrieval
|
|
2
|
+
|
|
3
|
+
*Optional vector retrieval path alongside BM25F, fused
|
|
4
|
+
with RRF for best-of-both ranking.*
|
|
5
|
+
|
|
6
|
+
## Goal
|
|
7
|
+
|
|
8
|
+
The current retrieval mode is lexical search: BM25F with
|
|
9
|
+
stemming and synonym expansion. It works well for
|
|
10
|
+
structured documentation where terminology is consistent
|
|
11
|
+
-- the agent searches "authentication" and the indexed
|
|
12
|
+
content uses the same word.
|
|
13
|
+
|
|
14
|
+
Lexical search has a ceiling, however. It misses
|
|
15
|
+
associative recall when terminology diverges between the
|
|
16
|
+
time content was stored and the time it is retrieved.
|
|
17
|
+
Example: an agent stores "we chose Postgres because of
|
|
18
|
+
JSONB" and later searches "database rationale" -- lexical
|
|
19
|
+
search misses it because none of the indexed tokens
|
|
20
|
+
(`postgres`, `chose`, `jsonb`) overlap with the query
|
|
21
|
+
tokens (`database`, `rationale`). Vector search finds
|
|
22
|
+
it because the embedding of the query is geometrically
|
|
23
|
+
close to the embedding of the stored sentence.
|
|
24
|
+
|
|
25
|
+
This gap is identified as the critical lexical-only
|
|
26
|
+
ceiling in
|
|
27
|
+
[Opus 4.8 Second Brain Review](../issues/2026-06-23-opus-48-second-brain-review.md)
|
|
28
|
+
(gap #1). Hybrid search closes it by adding an optional
|
|
29
|
+
vector retrieval path alongside the existing lexical
|
|
30
|
+
path, fusing both ranked lists using Reciprocal Rank
|
|
31
|
+
Fusion (RRF) for a final result set that benefits from
|
|
32
|
+
both modes.
|
|
33
|
+
|
|
34
|
+
## Architecture
|
|
35
|
+
|
|
36
|
+
Two retrieval paths run in parallel. The vector path
|
|
37
|
+
runs entirely in TypeScript. No WASM code is added or
|
|
38
|
+
modified.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Query → ┌─ Lexical path (WASM) ─→ BM25F ranked list ─┐
|
|
42
|
+
│ ├─→ RRF Fusion → Final results
|
|
43
|
+
└─ Vector path (TS) ─→ Cosine ranked list ──┘
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The WASM boundary is untouched. `query-parser.wasm`
|
|
47
|
+
remains a pure-computation lexical module. `kb-worker.wasm`
|
|
48
|
+
continues to orchestrate lexical retrieval via
|
|
49
|
+
`fs-database.wasm` exactly as today. No new WASM crate,
|
|
50
|
+
no new WASM export, and no new host import is needed for
|
|
51
|
+
the vector path.
|
|
52
|
+
|
|
53
|
+
The TypeScript daemon layer adds the vector path as an
|
|
54
|
+
independent retrieval step that runs after the lexical
|
|
55
|
+
path completes (or concurrently if the runtime allows).
|
|
56
|
+
The fused list is assembled in TypeScript before the
|
|
57
|
+
response is returned to the worker client.
|
|
58
|
+
|
|
59
|
+
## EmbeddingProvider Interface
|
|
60
|
+
|
|
61
|
+
### Why TypeScript, Not WASM
|
|
62
|
+
|
|
63
|
+
Three reasons embeddings are computed in TypeScript
|
|
64
|
+
rather than in WASM:
|
|
65
|
+
|
|
66
|
+
1. `wasm32-unknown-unknown` has no network I/O. Calling
|
|
67
|
+
an embedding API from WASM is impossible without a
|
|
68
|
+
host bridge that would defeat the purpose of running
|
|
69
|
+
in WASM.
|
|
70
|
+
2. Embedding models are too large for WASM. A typical
|
|
71
|
+
all-MiniLM-L6-v2 model is ~90 MB. Loading that inside
|
|
72
|
+
the WASM sandbox on every daemon startup is
|
|
73
|
+
impractical.
|
|
74
|
+
3. TypeScript allows pluggable backends. An interface-based
|
|
75
|
+
design lets the daemon swap providers (local ONNX,
|
|
76
|
+
remote API) without changing any WASM code.
|
|
77
|
+
|
|
78
|
+
### Interface Specification
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
interface EmbeddingProvider {
|
|
82
|
+
embed(texts: string[]): Promise<Float32Array[]>;
|
|
83
|
+
dimensions(): number;
|
|
84
|
+
modelName(): string;
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
| Member | Description |
|
|
89
|
+
|--------------|----------------------------------------------|
|
|
90
|
+
| `embed` | Compute embeddings for a batch of input texts. Returns one `Float32Array` per input, each of length `dimensions()`. |
|
|
91
|
+
| `dimensions` | Fixed embedding dimensionality for this provider. All vectors stored under the same model must have this length. |
|
|
92
|
+
| `modelName` | Stable identifier for the model. Used for stale-detection when the configured model changes. |
|
|
93
|
+
|
|
94
|
+
### Implementations
|
|
95
|
+
|
|
96
|
+
Three concrete implementations are specified.
|
|
97
|
+
|
|
98
|
+
**`NullEmbeddingProvider`** -- no-op, returns empty
|
|
99
|
+
arrays. The default when no `[embedding]` section is
|
|
100
|
+
present in `worker.toml`. Requesting `vector` or
|
|
101
|
+
`hybrid` search mode with this provider returns a
|
|
102
|
+
structured error rather than silently returning empty
|
|
103
|
+
results. Satisfies POLA: the absence of configuration
|
|
104
|
+
does not silently degrade results.
|
|
105
|
+
|
|
106
|
+
**`OnnxEmbeddingProvider`** -- local offline inference
|
|
107
|
+
using ONNX Runtime. Default model: `all-MiniLM-L6-v2`
|
|
108
|
+
(384 dimensions). The model file is downloaded on first
|
|
109
|
+
use and cached in the OS user-data directory. Works on
|
|
110
|
+
both Deno and Node.js >= 20. No network dependency
|
|
111
|
+
after the initial model download. Suitable for
|
|
112
|
+
air-gapped or cost-sensitive deployments.
|
|
113
|
+
|
|
114
|
+
**`ApiEmbeddingProvider`** -- calls an external HTTP
|
|
115
|
+
embedding API. Compatible with OpenAI, Anthropic, and
|
|
116
|
+
any endpoint that accepts a `POST /embeddings` request
|
|
117
|
+
with a JSON body `{ "input": string[] }` and returns
|
|
118
|
+
`{ "data": [{ "embedding": number[] }] }`. Configured
|
|
119
|
+
via `worker.toml`. The API key is read from an
|
|
120
|
+
environment variable named by `api_key_env`.
|
|
121
|
+
|
|
122
|
+
## Vector Storage
|
|
123
|
+
|
|
124
|
+
### New Index Files
|
|
125
|
+
|
|
126
|
+
Two new files are added to `indexes/` alongside the
|
|
127
|
+
existing index files. They follow the same rebuild
|
|
128
|
+
semantics as `terms.idx`, `positions.idx`, and
|
|
129
|
+
`corpus.dat`: derived data, rebuildable from section
|
|
130
|
+
content, excluded from version control.
|
|
131
|
+
|
|
132
|
+
**`vectors.idx`** -- binary, fixed-width records.
|
|
133
|
+
|
|
134
|
+
Header layout:
|
|
135
|
+
|
|
136
|
+
| Bytes | Field | Type | Description |
|
|
137
|
+
|-------|----------------|--------|-------------------------------|
|
|
138
|
+
| 0-3 | magic | u8[4] | `b"KBVX"` -- format sentinel |
|
|
139
|
+
| 4 | version | u8 | Format version, currently `1` |
|
|
140
|
+
| 5-6 | dimensions | u16 | Vector length per record |
|
|
141
|
+
| 7-10 | record_count | u32 | Total number of records |
|
|
142
|
+
|
|
143
|
+
Each record immediately follows the header:
|
|
144
|
+
|
|
145
|
+
| Bytes | Field | Type | Description |
|
|
146
|
+
|----------------|----------------|----------------|-------------------|
|
|
147
|
+
| 0-15 | kbid_hash | u8[16] | First 16 bytes of the section kbid, used as a compact lookup key |
|
|
148
|
+
| 16 onwards | embedding | f32[dimensions]| Raw embedding vector |
|
|
149
|
+
|
|
150
|
+
Record size = `16 + dimensions * 4` bytes. All records
|
|
151
|
+
are the same size, enabling O(1) offset computation by
|
|
152
|
+
record index and binary search by kbid hash.
|
|
153
|
+
|
|
154
|
+
**`vectors-meta.toml`** -- human-readable metadata.
|
|
155
|
+
|
|
156
|
+
```toml
|
|
157
|
+
[vectors]
|
|
158
|
+
model_name = "all-MiniLM-L6-v2"
|
|
159
|
+
dimensions = 384
|
|
160
|
+
version = 1
|
|
161
|
+
last_built = "2026-06-23T10:00:00Z"
|
|
162
|
+
section_count = 2847
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
| Field | Description |
|
|
166
|
+
|-----------------|-------------------------------------------|
|
|
167
|
+
| `model_name` | Model name from `EmbeddingProvider.modelName()`. Used for stale detection. |
|
|
168
|
+
| `dimensions` | Must match the `dimensions` header in `vectors.idx`. |
|
|
169
|
+
| `version` | `vectors.idx` format version. |
|
|
170
|
+
| `last_built` | ISO 8601 timestamp of the last rebuild. |
|
|
171
|
+
| `section_count` | Number of sections embedded. |
|
|
172
|
+
|
|
173
|
+
### Updated Directory Layout
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
.kbdb/
|
|
177
|
+
└── indexes/
|
|
178
|
+
├── meta.toml
|
|
179
|
+
├── terms.idx
|
|
180
|
+
├── positions.idx
|
|
181
|
+
├── corpus.dat
|
|
182
|
+
├── references.idx
|
|
183
|
+
├── vectors.idx # new -- binary embedding store
|
|
184
|
+
└── vectors-meta.toml # new -- embedding metadata
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Embedding Lifecycle
|
|
188
|
+
|
|
189
|
+
### Learn Time
|
|
190
|
+
|
|
191
|
+
When a section is added via `kbdb learn`, the lexical
|
|
192
|
+
indexing pipeline runs first (unchanged). After lexical
|
|
193
|
+
indexing completes, the daemon asynchronously computes
|
|
194
|
+
an embedding for the section using the configured
|
|
195
|
+
`EmbeddingProvider`.
|
|
196
|
+
|
|
197
|
+
The embedding input is the concatenation of the
|
|
198
|
+
section's title and body content:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
{title}\n{content}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
The title is prepended because it carries strong
|
|
205
|
+
semantic weight (it receives a 2.0x BM25F field weight
|
|
206
|
+
for the same reason). Concatenating both fields gives
|
|
207
|
+
the embedding model the same semantic signal that BM25F
|
|
208
|
+
heading-weight gives to lexical scoring.
|
|
209
|
+
|
|
210
|
+
Sections with no body content (binary sections where
|
|
211
|
+
content is base64) embed only the title and
|
|
212
|
+
description. Sections with neither title nor body
|
|
213
|
+
content are not embedded.
|
|
214
|
+
|
|
215
|
+
Embedding is best-effort at learn time: if the provider
|
|
216
|
+
fails for a section, the section is still stored
|
|
217
|
+
lexically. A warning is emitted in the learn response
|
|
218
|
+
(`vector_embedding_failed: true`).
|
|
219
|
+
|
|
220
|
+
### Rebuild
|
|
221
|
+
|
|
222
|
+
`kbdb rebuild` regenerates all vector embeddings from
|
|
223
|
+
section content alongside the existing lexical index
|
|
224
|
+
rebuild. Sections are embedded in batches of up to 64
|
|
225
|
+
to respect provider rate limits. The `vectors.idx` and
|
|
226
|
+
`vectors-meta.toml` files are written atomically after
|
|
227
|
+
all embeddings are computed.
|
|
228
|
+
|
|
229
|
+
### Stale Detection
|
|
230
|
+
|
|
231
|
+
When the daemon starts, it reads `vectors-meta.toml`
|
|
232
|
+
and compares `model_name` to the currently configured
|
|
233
|
+
provider's `modelName()`. If they differ, the vector
|
|
234
|
+
index is marked stale. Stale vector indexes are not
|
|
235
|
+
used for retrieval. Search falls back to lexical-only
|
|
236
|
+
with a warning field in the response:
|
|
237
|
+
`vector_index_stale: true`.
|
|
238
|
+
|
|
239
|
+
The agent or operator must run `kbdb rebuild` to
|
|
240
|
+
regenerate vectors with the new model before hybrid or
|
|
241
|
+
vector search resumes.
|
|
242
|
+
|
|
243
|
+
## Score Fusion
|
|
244
|
+
|
|
245
|
+
### Reciprocal Rank Fusion (RRF)
|
|
246
|
+
|
|
247
|
+
RRF combines the lexical ranked list and the vector
|
|
248
|
+
ranked list into a single fused list without requiring
|
|
249
|
+
score normalization. BM25F scores and cosine similarity
|
|
250
|
+
scores live on different scales and cannot be directly
|
|
251
|
+
added -- RRF sidesteps this by working on ranks rather
|
|
252
|
+
than scores.
|
|
253
|
+
|
|
254
|
+
Formula:
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
score(d) = 1/(k + rank_lexical(d)) + 1/(k + rank_vector(d))
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Where:
|
|
261
|
+
|
|
262
|
+
- `k = 60` (standard default, configurable via
|
|
263
|
+
`worker.toml` as `rrf_k`)
|
|
264
|
+
- `rank_lexical(d)` is the 1-based rank of document `d`
|
|
265
|
+
in the BM25F result list, or infinity if `d` does not
|
|
266
|
+
appear in the lexical results
|
|
267
|
+
- `rank_vector(d)` is the 1-based rank of document `d`
|
|
268
|
+
in the cosine similarity result list, or infinity if
|
|
269
|
+
`d` does not appear in the vector results
|
|
270
|
+
- A rank of infinity contributes 0 to the sum (since
|
|
271
|
+
`1/(k + ∞) = 0`)
|
|
272
|
+
|
|
273
|
+
Documents appearing in only one result set receive full
|
|
274
|
+
contribution from that set and zero from the other.
|
|
275
|
+
Documents appearing in both receive a higher combined
|
|
276
|
+
score than either path could produce alone, naturally
|
|
277
|
+
surfacing cross-path agreement.
|
|
278
|
+
|
|
279
|
+
The final result list is sorted by RRF score descending.
|
|
280
|
+
|
|
281
|
+
### Why RRF
|
|
282
|
+
|
|
283
|
+
- Parameter-light: `k = 60` is the well-established
|
|
284
|
+
default from the original RRF paper (Cormack et al.,
|
|
285
|
+
2009). It rarely needs tuning.
|
|
286
|
+
- No normalization: BM25F scores and cosine similarity
|
|
287
|
+
are not comparable in magnitude. RRF requires only
|
|
288
|
+
rank order, not the scores themselves.
|
|
289
|
+
- Robust: adding a low-quality second path cannot hurt
|
|
290
|
+
the top results badly because RRF dampens rank
|
|
291
|
+
contributions as `k` is approached.
|
|
292
|
+
|
|
293
|
+
## Search Mode Parameter
|
|
294
|
+
|
|
295
|
+
A new `search_mode` parameter controls which retrieval
|
|
296
|
+
paths are active for a given search request.
|
|
297
|
+
|
|
298
|
+
| Value | Retrieval behaviour | Embedding provider required |
|
|
299
|
+
|------------|---------------------------------------------|-----------------------------|
|
|
300
|
+
| `lexical` | Lexical path only. Current behaviour. Default. | No |
|
|
301
|
+
| `vector` | Vector path only. Cosine similarity ranking. | Yes |
|
|
302
|
+
| `hybrid` | Both paths, RRF fusion. | Yes |
|
|
303
|
+
|
|
304
|
+
The default is `lexical`. Existing integrations that do
|
|
305
|
+
not supply `search_mode` are unchanged. This is a
|
|
306
|
+
strict backward-compatibility guarantee.
|
|
307
|
+
|
|
308
|
+
Requesting `vector` or `hybrid` when no embedding
|
|
309
|
+
provider is configured (i.e. `NullEmbeddingProvider` is
|
|
310
|
+
active) returns a structured error:
|
|
311
|
+
|
|
312
|
+
```json
|
|
313
|
+
{
|
|
314
|
+
"error": "Vector search requires a configured embedding provider",
|
|
315
|
+
"code": "EMBEDDING_PROVIDER_NOT_CONFIGURED"
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## CLI and MCP Surface
|
|
320
|
+
|
|
321
|
+
### CLI
|
|
322
|
+
|
|
323
|
+
The `search` subcommand gains an optional `--mode` flag:
|
|
324
|
+
|
|
325
|
+
```
|
|
326
|
+
kbdb search "database rationale"
|
|
327
|
+
kbdb search --mode hybrid "database rationale"
|
|
328
|
+
kbdb search --mode vector "database rationale"
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Omitting `--mode` defaults to `lexical`. The flag is
|
|
332
|
+
not shown in the short help unless an embedding provider
|
|
333
|
+
is configured.
|
|
334
|
+
|
|
335
|
+
### MCP
|
|
336
|
+
|
|
337
|
+
The `search` MCP tool gains an optional `mode` parameter
|
|
338
|
+
(string enum: `"lexical" | "vector" | "hybrid"`). The
|
|
339
|
+
parameter is documented as optional in the tool schema
|
|
340
|
+
with a default of `"lexical"`.
|
|
341
|
+
|
|
342
|
+
### Response Envelope
|
|
343
|
+
|
|
344
|
+
`PagedSearchResult` gains two new fields:
|
|
345
|
+
|
|
346
|
+
| Field | Type | Description |
|
|
347
|
+
|--------------------|--------|---------------------------------|
|
|
348
|
+
| `search_mode` | string | The mode that was requested: `"lexical"`, `"vector"`, or `"hybrid"` |
|
|
349
|
+
| `retrieval_method` | string | The mode that was actually used: `"lexical"`, `"vector"`, or `"hybrid"`. Differs from `search_mode` when a fallback occurred (e.g. stale vector index forced `"lexical"`). |
|
|
350
|
+
|
|
351
|
+
Both fields are always present in the response,
|
|
352
|
+
including when `search_mode` was not supplied (in which
|
|
353
|
+
case both fields are `"lexical"`).
|
|
354
|
+
|
|
355
|
+
## Configuration
|
|
356
|
+
|
|
357
|
+
`worker.toml` gains an `[embedding]` section:
|
|
358
|
+
|
|
359
|
+
```toml
|
|
360
|
+
[embedding]
|
|
361
|
+
provider = "onnx" # "onnx" | "api" | "none"
|
|
362
|
+
model = "all-MiniLM-L6-v2"
|
|
363
|
+
dimensions = 384
|
|
364
|
+
rrf_k = 60 # RRF parameter k
|
|
365
|
+
|
|
366
|
+
# API provider only:
|
|
367
|
+
api_url = ""
|
|
368
|
+
api_key_env = "KBDB_API_KEY"
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
| Key | Default | Description |
|
|
372
|
+
|---------------|----------------------|------------------------------|
|
|
373
|
+
| `provider` | `"none"` | Which `EmbeddingProvider` implementation to use |
|
|
374
|
+
| `model` | `"all-MiniLM-L6-v2"` | Model name, passed to the provider |
|
|
375
|
+
| `dimensions` | `384` | Embedding vector length |
|
|
376
|
+
| `rrf_k` | `60` | RRF constant `k` |
|
|
377
|
+
| `api_url` | `""` | Base URL for API provider |
|
|
378
|
+
| `api_key_env` | `"KBDB_API_KEY"` | Environment variable holding the API key |
|
|
379
|
+
|
|
380
|
+
When `[embedding]` is absent from `worker.toml`,
|
|
381
|
+
`provider` defaults to `"none"` and `NullEmbeddingProvider`
|
|
382
|
+
is used.
|
|
383
|
+
|
|
384
|
+
## Fallback Behaviour
|
|
385
|
+
|
|
386
|
+
Three fallback conditions are defined. Each is surfaced
|
|
387
|
+
in the search response with a specific warning field
|
|
388
|
+
rather than silently degrading.
|
|
389
|
+
|
|
390
|
+
**No embedding provider configured.**
|
|
391
|
+
`search_mode` defaults to `lexical`. Requesting `hybrid`
|
|
392
|
+
or `vector` returns a structured error with code
|
|
393
|
+
`EMBEDDING_PROVIDER_NOT_CONFIGURED`. No silent fallback
|
|
394
|
+
occurs -- the caller receives an actionable error
|
|
395
|
+
message.
|
|
396
|
+
|
|
397
|
+
**Stale vector index (model mismatch).**
|
|
398
|
+
When `vectors-meta.toml` model name does not match the
|
|
399
|
+
configured provider's `modelName()`, the daemon marks
|
|
400
|
+
the vector index stale. Any search request that would
|
|
401
|
+
use the vector path falls back to `lexical`. The
|
|
402
|
+
response includes `retrieval_method: "lexical"` and
|
|
403
|
+
`vector_index_stale: true`. The correct remediation is
|
|
404
|
+
`kbdb rebuild`.
|
|
405
|
+
|
|
406
|
+
**Embedding failure during learn.**
|
|
407
|
+
If the embedding provider returns an error for a section
|
|
408
|
+
during learn, the section is stored lexically without an
|
|
409
|
+
embedding. The learn response includes
|
|
410
|
+
`vector_embedding_failed: true`. The section will
|
|
411
|
+
appear in lexical results but not in vector or hybrid
|
|
412
|
+
results until a rebuild is run.
|
|
413
|
+
|
|
414
|
+
## Provider Tradeoffs
|
|
415
|
+
|
|
416
|
+
| Aspect | ONNX (local) | API (cloud) |
|
|
417
|
+
|---------------|---------------------------|------------------------------|
|
|
418
|
+
| Latency | ~10 ms/embed | ~100 ms/embed |
|
|
419
|
+
| Offline | Yes | No |
|
|
420
|
+
| Cost | Free | Per-token |
|
|
421
|
+
| Quality | Good (384 dimensions) | Excellent (1536+ dimensions) |
|
|
422
|
+
| Setup | Model download on first use | API key required |
|
|
423
|
+
| Dual runtime | Deno + Node.js >= 20 | Deno + Node.js >= 20 |
|
|
424
|
+
|
|
425
|
+
Both providers implement the same `EmbeddingProvider`
|
|
426
|
+
interface. The daemon interacts only with the interface.
|
|
427
|
+
|
|
428
|
+
## Design Constraints
|
|
429
|
+
|
|
430
|
+
| Constraint | Details |
|
|
431
|
+
|-----------------------|------------------------------------------------|
|
|
432
|
+
| WASM purity | `query-parser.wasm` remains pure lexical computation with no I/O. No new WASM crate or export is added. |
|
|
433
|
+
| Backward compatibility | Default `search_mode` is `lexical`. Callers that do not supply the parameter receive identical behaviour to today. |
|
|
434
|
+
| File-based storage | `vectors.idx` and `vectors-meta.toml` follow the same derived-and-rebuildable pattern as all other index files. |
|
|
435
|
+
| Dual runtime | `EmbeddingProvider` and all embedding logic must work on Deno and Node.js >= 20. No Node-specific or Deno-specific APIs in the implementation. |
|
|
436
|
+
| No new WASM deps | All new dependencies are TypeScript-side only. The WASM modules (`fs-database.wasm`, `query-parser.wasm`, `kb-worker.wasm`) are not recompiled for this feature. |
|
package/docs/goals/mcp.md
CHANGED
|
@@ -50,6 +50,17 @@ the user.
|
|
|
50
50
|
See [CLI -- Run Modes](cli.md#run-modes) for how
|
|
51
51
|
the `kbdb` executable dispatches to MCP mode.
|
|
52
52
|
|
|
53
|
+
## Startup Health Check
|
|
54
|
+
|
|
55
|
+
When the MCP server starts, it runs
|
|
56
|
+
`client.integrityCheck()` automatically after the
|
|
57
|
+
worker daemon connection is established. If the
|
|
58
|
+
check returns `ok: false`, the server emits a
|
|
59
|
+
`notifications/message` log with level `warning`
|
|
60
|
+
listing the error summary. The server continues to
|
|
61
|
+
operate -- health issues are not fatal. This ensures
|
|
62
|
+
corruption surfaces before it produces wrong answers.
|
|
63
|
+
|
|
53
64
|
## Installation and Wiring
|
|
54
65
|
|
|
55
66
|
Installation is the same as the CLI:
|
|
@@ -332,6 +343,7 @@ daemon via the worker client.
|
|
|
332
343
|
|
|
333
344
|
Search the knowledge base. Returns ranked results
|
|
334
345
|
with headings and snippets for relevance evaluation.
|
|
346
|
+
Use multiple short keyword queries for best coverage.
|
|
335
347
|
Use `recall` to get full content of specific results.
|
|
336
348
|
|
|
337
349
|
**Parameters:**
|
|
@@ -358,13 +370,16 @@ additional calls:
|
|
|
358
370
|
"type": "text/markdown",
|
|
359
371
|
"docids": ["doc-5678"],
|
|
360
372
|
"snippet": "The system is organized...",
|
|
361
|
-
"matched_terms": ["architecture", "system"]
|
|
373
|
+
"matched_terms": ["architecture", "system"],
|
|
374
|
+
"matched_fields": ["heading", "body"],
|
|
375
|
+
"created_at": "2026-06-20T14:30:00Z"
|
|
362
376
|
}
|
|
363
377
|
],
|
|
364
378
|
"total": 42,
|
|
365
379
|
"offset": 0,
|
|
366
380
|
"limit": 20,
|
|
367
|
-
"has_more": true
|
|
381
|
+
"has_more": true,
|
|
382
|
+
"relaxed": false
|
|
368
383
|
}
|
|
369
384
|
```
|
|
370
385
|
|
|
@@ -379,6 +394,15 @@ additional calls:
|
|
|
379
394
|
matched term. Empty string for image sections.
|
|
380
395
|
- `matched_terms` -- query terms that matched, as a
|
|
381
396
|
flat `string[]`. No frequency counts.
|
|
397
|
+
- `matched_fields` -- subset of `["heading", "body",
|
|
398
|
+
"code"]` indicating which fields contained matches.
|
|
399
|
+
- `created_at` -- ISO 8601 timestamp of when the
|
|
400
|
+
section was first indexed.
|
|
401
|
+
- `relaxed` -- `true` when the result came from an
|
|
402
|
+
automatic AND-to-OR fallback (see
|
|
403
|
+
[Query Result -- Relaxed-Match
|
|
404
|
+
Fallback](query-result.md)). `false` for normal
|
|
405
|
+
results.
|
|
382
406
|
|
|
383
407
|
When `content` is `true`, each item also includes
|
|
384
408
|
a `content` field with the full section text.
|
|
@@ -393,20 +417,24 @@ Maps to `client.search()`.
|
|
|
393
417
|
|
|
394
418
|
### learn
|
|
395
419
|
|
|
396
|
-
Import content into the knowledge base.
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
420
|
+
Import content into the knowledge base. Use for
|
|
421
|
+
durable facts, decisions, and corrections. Use
|
|
422
|
+
`--replace` when updating existing knowledge. Attach
|
|
423
|
+
tags for scoping. The daemon decomposes the content
|
|
424
|
+
into sections, extracts keywords, builds indexes,
|
|
425
|
+
and assigns ranking weights.
|
|
400
426
|
|
|
401
427
|
**Parameters:**
|
|
402
428
|
|
|
403
429
|
| Name | Type | Required | Description |
|
|
404
430
|
|---------------|--------|----------|------------------|
|
|
405
|
-
| `content` | string
|
|
406
|
-
| `type` | string
|
|
407
|
-
| `title` | string
|
|
408
|
-
| `description` | string
|
|
409
|
-
| `docid` | string
|
|
431
|
+
| `content` | string | yes | Text content or base64-encoded image data |
|
|
432
|
+
| `type` | string | no | `"text/markdown"` (default), `text/*` MIME type, `"application/json"`, or `image/*` MIME type |
|
|
433
|
+
| `title` | string | no* | Section title. ***Required** for `image/*` types.* Optional for text and code types. |
|
|
434
|
+
| `description` | string | no | Optional section description |
|
|
435
|
+
| `docid` | string | no | Group under this document ID |
|
|
436
|
+
| `tags` | string[] | no | Tags for scoping and filtering |
|
|
437
|
+
| `replace` | boolean | no | Enable supersession by source key. When `true` and a section with the same source key exists, the old section is replaced. |
|
|
410
438
|
|
|
411
439
|
**Content type rules:**
|
|
412
440
|
|
|
@@ -441,6 +469,16 @@ Text and code sections return a positive
|
|
|
441
469
|
`indexed_terms_count`. Image sections return
|
|
442
470
|
`indexed_terms_count: 0`.
|
|
443
471
|
|
|
472
|
+
Additional result fields when applicable:
|
|
473
|
+
- `superseded` -- kbid of the section this one
|
|
474
|
+
replaced via `replace: true`, or `null`.
|
|
475
|
+
- `warnings` -- string array of advisory warnings
|
|
476
|
+
(e.g. `"heading_missing"` when a text section has
|
|
477
|
+
no title).
|
|
478
|
+
- `near_duplicates` -- array of
|
|
479
|
+
`{ kbid, similarity }` objects for existing
|
|
480
|
+
sections with Jaccard similarity >= 0.85.
|
|
481
|
+
|
|
444
482
|
If the content already exists in the database (same
|
|
445
483
|
kb-id) and `docid` is provided, the section is not
|
|
446
484
|
duplicated. Instead, the docid is added to the
|
|
@@ -662,8 +700,12 @@ checks pass, `ok` is `true` and `errors` is empty.
|
|
|
662
700
|
|
|
663
701
|
Error types: `checksum_mismatch`, `orphan_section`,
|
|
664
702
|
`orphan_document`, `broken_reference`,
|
|
665
|
-
`type_mismatch`, `circular_reference
|
|
666
|
-
|
|
703
|
+
`type_mismatch`, `circular_reference`,
|
|
704
|
+
`divergent_content`. The `divergent_content` error
|
|
705
|
+
flags sections sharing the same `source_key` that
|
|
706
|
+
have different content -- indicates contradictory
|
|
707
|
+
versions that should be resolved via supersession.
|
|
708
|
+
See [Database -- Integrity and
|
|
667
709
|
Maintenance](database.md).
|
|
668
710
|
|
|
669
711
|
Maps to `client.integrityCheck()`.
|
|
@@ -696,6 +738,32 @@ this to recover from index corruption.
|
|
|
696
738
|
|
|
697
739
|
Maps to `client.rebuildIndexes()`.
|
|
698
740
|
|
|
741
|
+
### export
|
|
742
|
+
|
|
743
|
+
Export the knowledge base as a self-contained
|
|
744
|
+
directory snapshot for backup or versioning. Copies
|
|
745
|
+
sections, documents, and catalog (no indexes -- they
|
|
746
|
+
are rebuildable via `rebuild`).
|
|
747
|
+
|
|
748
|
+
**Parameters:**
|
|
749
|
+
|
|
750
|
+
| Name | Type | Required | Description |
|
|
751
|
+
|--------|--------|----------|---------------------------|
|
|
752
|
+
| `path` | string | no | Export destination path (default: `./kbdb-export/`) |
|
|
753
|
+
|
|
754
|
+
**Returns:** Compact JSON with export summary:
|
|
755
|
+
|
|
756
|
+
```json
|
|
757
|
+
{
|
|
758
|
+
"path": "/home/user/kbdb-export",
|
|
759
|
+
"sections_exported": 142,
|
|
760
|
+
"documents_exported": 23,
|
|
761
|
+
"elapsed_ms": 350
|
|
762
|
+
}
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
Maps to `client.export()`.
|
|
766
|
+
|
|
699
767
|
### skill-learn
|
|
700
768
|
|
|
701
769
|
Create a new skill definition and store it in the
|
|
@@ -1057,7 +1125,7 @@ interface McpToolAnnotations {
|
|
|
1057
1125
|
}
|
|
1058
1126
|
```
|
|
1059
1127
|
|
|
1060
|
-
Annotations for all
|
|
1128
|
+
Annotations for all 19 kbdb tools:
|
|
1061
1129
|
|
|
1062
1130
|
| Tool | title | readOnly | destructive | idempotent | openWorld |
|
|
1063
1131
|
|----------------|-------------------|----------|-------------|------------|-----------|
|
|
@@ -1071,6 +1139,7 @@ Annotations for all 18 kbdb tools:
|
|
|
1071
1139
|
| `check` | Integrity Check | true | false | true | false |
|
|
1072
1140
|
| `gc` | Garbage Collect | false | true | false | false |
|
|
1073
1141
|
| `rebuild` | Rebuild Indexes | false | false | false | false |
|
|
1142
|
+
| `export` | Export Snapshot | false | false | true | false |
|
|
1074
1143
|
| `skill-learn` | Create Skill | false | false | true | false |
|
|
1075
1144
|
| `skill-list` | List Skills | true | false | true | false |
|
|
1076
1145
|
| `skill-get` | Get Skill | true | false | true | false |
|