@dikolab/kbdb 0.3.0 → 0.3.2
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 +89 -120
- 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 +63 -9
- package/dist/cli.cjs.map +2 -2
- package/dist/cli.mjs +63 -9
- package/dist/cli.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/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/resolve-skill-names.function.d.ts +16 -0
- package/dist/src/shared/cli/functions/run-search.function.d.ts +1 -0
- 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/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 +2 -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/search-client.interface.d.ts +71 -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/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 +2 -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-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-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-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/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/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/typings/add-section-result.model.d.ts +2 -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-daemon/classes/ipc-error.class.d.ts +17 -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_bg.wasm +0 -0
- package/dist/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
- package/docs/details/cli.md +9 -0
- package/docs/details/mcp-server.md +5 -3
- package/docs/details/search-and-ranking.md +55 -0
- package/docs/goals/auto-capture.md +378 -0
- package/docs/goals/benchmarking.md +296 -0
- package/docs/goals/concurrency.md +259 -0
- package/docs/goals/hybrid-search.md +436 -0
- package/docs/goals/semantic-dedup.md +229 -0
- package/docs/goals/sync.md +217 -0
- package/docs/modules/rust/fs-database/indexes/vectors.md +110 -0
- package/docs/modules/typescript/shared/auto-capture/module.md +73 -0
- 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 +171 -167
- 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 +121 -0
- package/docs/release-notes/0.3.2.md +64 -0
- package/docs/release-notes/README.md +3 -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/format-mcp-output.function.ts +41 -0
- 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/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/parse-args.function.ts +3 -0
- package/src/shared/cli/functions/resolve-skill-names.function.ts +43 -0
- package/src/shared/cli/functions/run-search.function.ts +2 -0
- 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/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 +2 -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/search-client.interface.ts +73 -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 +6 -3
- 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 +28 -0
- 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 +18 -0
- 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 +2 -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-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-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-type.function.ts +30 -0
- package/src/shared/wasm-codec/functions/decode-wasm-list.function.ts +31 -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/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/typings/add-section-result.model.ts +2 -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-daemon/classes/ipc-error.class.ts +22 -0
- 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/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_bg.wasm +0 -0
- package/src/wasm/kb-worker/kbdb_worker_bg.wasm +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { SearchClient } from './search-client.interface.ts';
|
|
2
|
+
import type { LearnClient } from './learn-client.interface.ts';
|
|
3
|
+
import type { UnlearnClient } from '../functions/run-unlearn.function.ts';
|
|
4
|
+
import type { ContentClient } from '../functions/run-content.function.ts';
|
|
5
|
+
import type { CheckClient } from './check-client.interface.ts';
|
|
6
|
+
import type { GcClient } from '../functions/run-gc.function.ts';
|
|
7
|
+
import type { RebuildClient } from '../functions/run-rebuild.function.ts';
|
|
8
|
+
import type { StatusClient } from '../functions/run-status.function.ts';
|
|
9
|
+
import type { DbMigrateClient } from '../functions/run-db-migrate.function.ts';
|
|
10
|
+
import type { SkillLearnClient } from '../functions/run-skill-learn.function.ts';
|
|
11
|
+
import type { SkillListClient } from '../functions/run-skill-list.function.ts';
|
|
12
|
+
import type { SkillGetClient } from '../functions/run-skill-get.function.ts';
|
|
13
|
+
import type { SkillDeleteClient } from '../functions/run-skill-delete.function.ts';
|
|
14
|
+
import type { AgentCreateClient } from './agent-create-client.interface.ts';
|
|
15
|
+
import type { AgentListClient } from '../functions/run-agent-list.function.ts';
|
|
16
|
+
import type { AgentGetClient } from './agent-get-client.interface.ts';
|
|
17
|
+
import type { AgentDeleteClient } from '../functions/run-agent-delete.function.ts';
|
|
18
|
+
import type { RecallClient } from '../functions/run-recall.function.ts';
|
|
19
|
+
import type { ExportClient } from '../functions/run-export.function.ts';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Intersection of all data-command client interfaces.
|
|
23
|
+
*
|
|
24
|
+
* Each run* function defines its own minimal interface; this
|
|
25
|
+
* intersection combines them so `dispatchCommand` can route
|
|
26
|
+
* to any command handler with full type safety.
|
|
27
|
+
*/
|
|
28
|
+
export type DispatchClient = SearchClient &
|
|
29
|
+
LearnClient &
|
|
30
|
+
UnlearnClient &
|
|
31
|
+
ContentClient &
|
|
32
|
+
CheckClient &
|
|
33
|
+
GcClient &
|
|
34
|
+
RebuildClient &
|
|
35
|
+
StatusClient &
|
|
36
|
+
DbMigrateClient &
|
|
37
|
+
SkillLearnClient &
|
|
38
|
+
SkillListClient &
|
|
39
|
+
SkillGetClient &
|
|
40
|
+
SkillDeleteClient &
|
|
41
|
+
AgentCreateClient &
|
|
42
|
+
AgentListClient &
|
|
43
|
+
AgentGetClient &
|
|
44
|
+
AgentDeleteClient &
|
|
45
|
+
RecallClient &
|
|
46
|
+
ExportClient;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal client interface required by `runLearn`.
|
|
3
|
+
*
|
|
4
|
+
* Decouples the CLI function from the concrete `WorkerClient`
|
|
5
|
+
* implementation, making it straightforward to test with mocks.
|
|
6
|
+
*/
|
|
7
|
+
export interface LearnClient {
|
|
8
|
+
/**
|
|
9
|
+
* Ingests a content section into the knowledge base.
|
|
10
|
+
*
|
|
11
|
+
* @param params - section metadata and raw text content
|
|
12
|
+
* @returns enriched result containing the new kbid plus
|
|
13
|
+
* optional supersession, warnings, and near-duplicate info
|
|
14
|
+
*/
|
|
15
|
+
addSection(params: {
|
|
16
|
+
sectionType: string;
|
|
17
|
+
content: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
docid?: string;
|
|
21
|
+
tags?: string[];
|
|
22
|
+
replace?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Absolute path to the source file. Required for supersession
|
|
25
|
+
* via source key when `replace` is `true`.
|
|
26
|
+
*/
|
|
27
|
+
sourcePath?: string;
|
|
28
|
+
}): Promise<LearnAddSectionResult>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Enriched add-section result returned by the daemon. */
|
|
32
|
+
export interface LearnAddSectionResult {
|
|
33
|
+
/** Knowledge-base identifier assigned to the new section. */
|
|
34
|
+
readonly kbid: string;
|
|
35
|
+
/**
|
|
36
|
+
* Kbid of the section superseded via `--replace`,
|
|
37
|
+
* or `null` / `undefined` when none.
|
|
38
|
+
*/
|
|
39
|
+
readonly superseded?: string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Advisory warning strings (e.g. `"heading_missing"`).
|
|
42
|
+
* May be absent from older daemon versions.
|
|
43
|
+
*/
|
|
44
|
+
readonly warnings?: string[];
|
|
45
|
+
/**
|
|
46
|
+
* Near-duplicate sections with similarity >= 0.85.
|
|
47
|
+
* May be absent from older daemon versions.
|
|
48
|
+
*/
|
|
49
|
+
readonly near_duplicates?: {
|
|
50
|
+
readonly kbid: string;
|
|
51
|
+
readonly similarity: number;
|
|
52
|
+
}[];
|
|
53
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal client interface required by `runSearch`.
|
|
3
|
+
*
|
|
4
|
+
* Decouples the CLI function from the concrete `WorkerClient`
|
|
5
|
+
* implementation, making it straightforward to test with mocks.
|
|
6
|
+
*/
|
|
7
|
+
export interface SearchClient {
|
|
8
|
+
/**
|
|
9
|
+
* Searches the knowledge base and returns paginated results.
|
|
10
|
+
*
|
|
11
|
+
* @param params - query, mode, limit, and offset
|
|
12
|
+
*/
|
|
13
|
+
search(params: {
|
|
14
|
+
query: string;
|
|
15
|
+
mode?: string;
|
|
16
|
+
/** Search algorithm: `'lexical'`, `'vector'`, or `'hybrid'`. */
|
|
17
|
+
algo?: string;
|
|
18
|
+
limit?: number;
|
|
19
|
+
offset?: number;
|
|
20
|
+
}): Promise<SearchClientResponse>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Raw paginated search response from the daemon. */
|
|
24
|
+
export interface SearchClientResponse {
|
|
25
|
+
/** Result items for the current page. */
|
|
26
|
+
readonly items: readonly SearchClientItem[];
|
|
27
|
+
/** Total number of matches across all pages. */
|
|
28
|
+
readonly total: number;
|
|
29
|
+
/** Number of results skipped. */
|
|
30
|
+
readonly offset: number;
|
|
31
|
+
/** Maximum results per page. */
|
|
32
|
+
readonly limit: number;
|
|
33
|
+
/** Whether more results exist beyond this page. */
|
|
34
|
+
readonly has_more: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* When `true`, the engine relaxed the query to produce results.
|
|
37
|
+
* May be absent from older daemon versions.
|
|
38
|
+
*/
|
|
39
|
+
readonly relaxed?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** A single raw search result item returned by the daemon. */
|
|
43
|
+
export interface SearchClientItem {
|
|
44
|
+
/** Knowledge-base identifier of the matched section. */
|
|
45
|
+
readonly kbid: string;
|
|
46
|
+
/** Section heading, or null when untitled. */
|
|
47
|
+
readonly heading: string | null;
|
|
48
|
+
/** MIME type of the section content. */
|
|
49
|
+
readonly type: string;
|
|
50
|
+
/** Document IDs this section belongs to. */
|
|
51
|
+
readonly docids: readonly string[];
|
|
52
|
+
/** Relevance score from the ranking engine. */
|
|
53
|
+
readonly score: number;
|
|
54
|
+
/** KWIC excerpt centered on the highest-scoring matched term. */
|
|
55
|
+
readonly snippet: string;
|
|
56
|
+
/** Query terms that matched within this section. */
|
|
57
|
+
readonly matched_terms: readonly string[];
|
|
58
|
+
/**
|
|
59
|
+
* Fields that contained at least one match.
|
|
60
|
+
* May be absent from older daemon versions.
|
|
61
|
+
*/
|
|
62
|
+
readonly matched_fields?: readonly string[];
|
|
63
|
+
/**
|
|
64
|
+
* Normalised confidence score (0.0-1.0) relative to the top result.
|
|
65
|
+
* May be absent from older daemon versions.
|
|
66
|
+
*/
|
|
67
|
+
readonly confidence?: number;
|
|
68
|
+
/**
|
|
69
|
+
* ISO 8601 creation timestamp of the section.
|
|
70
|
+
* May be absent from older daemon versions.
|
|
71
|
+
*/
|
|
72
|
+
readonly created_at?: string;
|
|
73
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from '../typings/embedding-provider.interface.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No-op embedding provider used when embeddings are not configured.
|
|
5
|
+
*
|
|
6
|
+
* Satisfies the `EmbeddingProvider` contract without performing any
|
|
7
|
+
* computation. Use this as the default when no provider is selected
|
|
8
|
+
* in the config.
|
|
9
|
+
*/
|
|
10
|
+
export class NullEmbeddingProvider implements EmbeddingProvider {
|
|
11
|
+
/**
|
|
12
|
+
* Returns an empty `Float32Array` for each input text.
|
|
13
|
+
*
|
|
14
|
+
* @param texts - input strings (contents are ignored)
|
|
15
|
+
*/
|
|
16
|
+
embed(texts: string[]): Promise<Float32Array[]> {
|
|
17
|
+
return Promise.resolve(texts.map(() => new Float32Array(0)));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Always returns 0 -- no dimensions when disabled. */
|
|
21
|
+
dimensions(): number {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Always returns `'none'`. */
|
|
26
|
+
modelName(): string {
|
|
27
|
+
return 'none';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimum Jaccard coefficient to flag a section as a near-duplicate
|
|
3
|
+
* directly via the Jaccard pass.
|
|
4
|
+
*/
|
|
5
|
+
export const JACCARD_THRESHOLD = 0.85;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Lower bound of the Jaccard pre-filter band that triggers the
|
|
9
|
+
* cosine-similarity pass.
|
|
10
|
+
*/
|
|
11
|
+
export const JACCARD_BAND_MIN = 0.4;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Minimum cosine similarity to flag a section as a near-duplicate
|
|
15
|
+
* via the cosine pass.
|
|
16
|
+
*/
|
|
17
|
+
export const COSINE_THRESHOLD = 0.92;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import type { VectorIndexEntry } from '../typings/vector-index-entry.model.ts';
|
|
4
|
+
|
|
5
|
+
const MAGIC = 'KBVX';
|
|
6
|
+
const VERSION = 1;
|
|
7
|
+
const KBID_WIDTH = 64;
|
|
8
|
+
const HEADER_SIZE = 32;
|
|
9
|
+
|
|
10
|
+
function writeHeader(
|
|
11
|
+
buf: Buffer,
|
|
12
|
+
dimensions: number,
|
|
13
|
+
count: number,
|
|
14
|
+
modelLen: number,
|
|
15
|
+
): void {
|
|
16
|
+
buf.write(MAGIC, 0, 'ascii');
|
|
17
|
+
buf.writeUInt32LE(VERSION, 4);
|
|
18
|
+
buf.writeUInt32LE(dimensions, 8);
|
|
19
|
+
buf.writeUInt32LE(count, 12);
|
|
20
|
+
buf.writeUInt32LE(modelLen, 16);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function writeRecord(
|
|
24
|
+
buf: Buffer,
|
|
25
|
+
offset: number,
|
|
26
|
+
entry: VectorIndexEntry,
|
|
27
|
+
dimensions: number,
|
|
28
|
+
encoder: TextEncoder,
|
|
29
|
+
): void {
|
|
30
|
+
const kbidBytes = encoder.encode(entry.kbid);
|
|
31
|
+
kbidBytes.forEach((b, i) => {
|
|
32
|
+
if (i < KBID_WIDTH) buf.writeUInt8(b, offset + i);
|
|
33
|
+
});
|
|
34
|
+
for (let d = 0; d < dimensions; d++) {
|
|
35
|
+
buf.writeFloatLE(
|
|
36
|
+
entry.vector[d] ?? 0,
|
|
37
|
+
offset + KBID_WIDTH + d * 4,
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Writes a binary `vectors.idx` file to the given directory.
|
|
44
|
+
*
|
|
45
|
+
* Header: 32 bytes (magic KBVX, version u32, dimensions u32, count
|
|
46
|
+
* u32, model-name length u32, 12 reserved bytes). Followed by the
|
|
47
|
+
* model name (UTF-8) then records (64-byte kbid + dims*4 floats).
|
|
48
|
+
*
|
|
49
|
+
* @param dirPath - directory where `vectors.idx` will be written
|
|
50
|
+
* @param modelName - name of the embedding model used
|
|
51
|
+
* @param dimensions - vector dimension count
|
|
52
|
+
* @param entries - kbid/vector pairs to index
|
|
53
|
+
*/
|
|
54
|
+
export function buildVectorIndex(
|
|
55
|
+
dirPath: string,
|
|
56
|
+
modelName: string,
|
|
57
|
+
dimensions: number,
|
|
58
|
+
entries: VectorIndexEntry[],
|
|
59
|
+
): Promise<void> {
|
|
60
|
+
const encoder = new TextEncoder();
|
|
61
|
+
const modelBytes = encoder.encode(modelName);
|
|
62
|
+
const modelLen = modelBytes.length;
|
|
63
|
+
const recordSize = KBID_WIDTH + dimensions * 4;
|
|
64
|
+
const totalSize =
|
|
65
|
+
HEADER_SIZE + modelLen + entries.length * recordSize;
|
|
66
|
+
|
|
67
|
+
const buf = Buffer.alloc(totalSize, 0);
|
|
68
|
+
writeHeader(buf, dimensions, entries.length, modelLen);
|
|
69
|
+
modelBytes.forEach((b, i) => buf.writeUInt8(b, HEADER_SIZE + i));
|
|
70
|
+
|
|
71
|
+
let recOffset = HEADER_SIZE + modelLen;
|
|
72
|
+
for (const entry of entries) {
|
|
73
|
+
writeRecord(buf, recOffset, entry, dimensions, encoder);
|
|
74
|
+
recOffset += recordSize;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
writeFileSync(join(dirPath, 'vectors.idx'), buf);
|
|
78
|
+
return Promise.resolve();
|
|
79
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes cosine similarity between two vectors.
|
|
3
|
+
*
|
|
4
|
+
* Returns `dot(a, b) / (||a|| * ||b||)`. Returns `0` when either
|
|
5
|
+
* vector has zero magnitude to avoid division by zero.
|
|
6
|
+
*
|
|
7
|
+
* @param a - first embedding vector
|
|
8
|
+
* @param b - second embedding vector
|
|
9
|
+
*/
|
|
10
|
+
export function cosineSimilarity(
|
|
11
|
+
a: Float32Array,
|
|
12
|
+
b: Float32Array,
|
|
13
|
+
): number {
|
|
14
|
+
let dot = 0;
|
|
15
|
+
let magA = 0;
|
|
16
|
+
let magB = 0;
|
|
17
|
+
|
|
18
|
+
for (let i = 0; i < a.length; i++) {
|
|
19
|
+
const ai = a[i] ?? 0;
|
|
20
|
+
const bi = b[i] ?? 0;
|
|
21
|
+
dot += ai * bi;
|
|
22
|
+
magA += ai * ai;
|
|
23
|
+
magB += bi * bi;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (magA === 0 || magB === 0) {
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return dot / (Math.sqrt(magA) * Math.sqrt(magB));
|
|
31
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { EmbeddingProvider } from '../typings/embedding-provider.interface.ts';
|
|
2
|
+
import type { NearDuplicateCandidate } from '../typings/near-duplicate-candidate.model.ts';
|
|
3
|
+
import type { NearDuplicateResult } from '../typings/near-duplicate-result.model.ts';
|
|
4
|
+
import { jaccardCoefficient } from './jaccard-coefficient.function.ts';
|
|
5
|
+
import { cosineSimilarity } from './cosine-similarity.function.ts';
|
|
6
|
+
import {
|
|
7
|
+
JACCARD_THRESHOLD,
|
|
8
|
+
JACCARD_BAND_MIN,
|
|
9
|
+
COSINE_THRESHOLD,
|
|
10
|
+
} from '../constants/near-duplicate-thresholds.constant.ts';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Two-pass near-duplicate detection.
|
|
14
|
+
*
|
|
15
|
+
* Pass 1: Jaccard coefficient (always runs).
|
|
16
|
+
* Pass 2: Cosine similarity on embeddings (only when `provider` is
|
|
17
|
+
* available and the Jaccard score falls in the pre-filter band
|
|
18
|
+
* [0.40, 0.85)).
|
|
19
|
+
*
|
|
20
|
+
* @param candidate - the new section to test against existing ones
|
|
21
|
+
* @param existing - known sections to compare against
|
|
22
|
+
* @param provider - optional embedding provider; when absent or null,
|
|
23
|
+
* the cosine pass is skipped entirely
|
|
24
|
+
* @returns detected near-duplicates in the same order as `existing`
|
|
25
|
+
*/
|
|
26
|
+
export function detectNearDuplicates(
|
|
27
|
+
candidate: NearDuplicateCandidate,
|
|
28
|
+
existing: NearDuplicateCandidate[],
|
|
29
|
+
provider?: EmbeddingProvider | null,
|
|
30
|
+
): NearDuplicateResult[] {
|
|
31
|
+
const results: NearDuplicateResult[] = [];
|
|
32
|
+
|
|
33
|
+
for (const entry of existing) {
|
|
34
|
+
const jaccard = jaccardCoefficient(
|
|
35
|
+
candidate.tokens,
|
|
36
|
+
entry.tokens,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
if (jaccard >= JACCARD_THRESHOLD) {
|
|
40
|
+
results.push({
|
|
41
|
+
kbid: entry.kbid,
|
|
42
|
+
score: jaccard,
|
|
43
|
+
method: 'jaccard',
|
|
44
|
+
});
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (
|
|
49
|
+
provider != null &&
|
|
50
|
+
jaccard >= JACCARD_BAND_MIN &&
|
|
51
|
+
candidate.embedding != null &&
|
|
52
|
+
entry.embedding != null
|
|
53
|
+
) {
|
|
54
|
+
const cosine = cosineSimilarity(
|
|
55
|
+
candidate.embedding,
|
|
56
|
+
entry.embedding,
|
|
57
|
+
);
|
|
58
|
+
if (cosine >= COSINE_THRESHOLD) {
|
|
59
|
+
results.push({
|
|
60
|
+
kbid: entry.kbid,
|
|
61
|
+
score: cosine,
|
|
62
|
+
method: 'cosine',
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return results;
|
|
69
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes Jaccard coefficient between two token sets.
|
|
3
|
+
*
|
|
4
|
+
* `|A ∩ B| / |A ∪ B|`. Returns `0` if both sets are empty.
|
|
5
|
+
*
|
|
6
|
+
* @param a - first token set
|
|
7
|
+
* @param b - second token set
|
|
8
|
+
*/
|
|
9
|
+
export function jaccardCoefficient(
|
|
10
|
+
a: ReadonlySet<string>,
|
|
11
|
+
b: ReadonlySet<string>,
|
|
12
|
+
): number {
|
|
13
|
+
if (a.size === 0 || b.size === 0) {
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let intersection = 0;
|
|
18
|
+
for (const token of a) {
|
|
19
|
+
if (b.has(token)) {
|
|
20
|
+
intersection++;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const union = a.size + b.size - intersection;
|
|
25
|
+
return union > 0 ? intersection / union : 0;
|
|
26
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import type { VectorIndexMeta } from '../typings/vector-index-meta.model.ts';
|
|
3
|
+
|
|
4
|
+
/** Expected magic string in the first 4 bytes of a KBVX index. */
|
|
5
|
+
const MAGIC = 'KBVX';
|
|
6
|
+
|
|
7
|
+
/** Fixed header size in bytes. */
|
|
8
|
+
const HEADER_SIZE = 32;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Reads the 32-byte header from a `vectors.idx` file and returns
|
|
12
|
+
* the embedded `VectorIndexMeta`.
|
|
13
|
+
*
|
|
14
|
+
* @param filePath - absolute path to the `vectors.idx` file
|
|
15
|
+
* @throws {Error} if the file does not exist or the magic bytes do
|
|
16
|
+
* not match the expected `KBVX` signature
|
|
17
|
+
*/
|
|
18
|
+
export function readVectorIndexMeta(filePath: string): VectorIndexMeta {
|
|
19
|
+
const buf = readFileSync(filePath);
|
|
20
|
+
|
|
21
|
+
if (buf.length < HEADER_SIZE) {
|
|
22
|
+
throw new Error(
|
|
23
|
+
`vectors.idx too small: ${String(buf.length)} bytes`,
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const magic = buf.toString('ascii', 0, 4);
|
|
28
|
+
if (magic !== MAGIC) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
`invalid vectors.idx: expected magic ${MAGIC}, got ${magic}`,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const version = buf.readUInt32LE(4);
|
|
35
|
+
const dimensions = buf.readUInt32LE(8);
|
|
36
|
+
const count = buf.readUInt32LE(12);
|
|
37
|
+
const modelLen = buf.readUInt32LE(16);
|
|
38
|
+
|
|
39
|
+
const modelName = buf
|
|
40
|
+
.toString('utf-8', HEADER_SIZE, HEADER_SIZE + modelLen)
|
|
41
|
+
.replace(/\0/g, '');
|
|
42
|
+
|
|
43
|
+
return { modelName, dimensions, count, version };
|
|
44
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Default RRF smoothing constant. */
|
|
2
|
+
const DEFAULT_K = 60;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Fuses lexical and vector rankings using Reciprocal Rank Fusion.
|
|
6
|
+
*
|
|
7
|
+
* For each kbid in either map the fused score is:
|
|
8
|
+
* `1/(k + lexicalRank) + 1/(k + vectorRank)`.
|
|
9
|
+
* When a kbid appears in only one map the missing rank contributes
|
|
10
|
+
* `0` (treated as infinite rank -- no contribution).
|
|
11
|
+
*
|
|
12
|
+
* @param lexicalRanks - map of kbid to 1-based lexical rank position
|
|
13
|
+
* @param vectorRanks - map of kbid to 1-based vector rank position
|
|
14
|
+
* @param k - RRF smoothing constant (default 60)
|
|
15
|
+
* @returns map of kbid to fused RRF score
|
|
16
|
+
*/
|
|
17
|
+
export function rrfFuse(
|
|
18
|
+
lexicalRanks: Map<string, number>,
|
|
19
|
+
vectorRanks: Map<string, number>,
|
|
20
|
+
k: number = DEFAULT_K,
|
|
21
|
+
): Map<string, number> {
|
|
22
|
+
const scores = new Map<string, number>();
|
|
23
|
+
|
|
24
|
+
for (const [kbid, rank] of lexicalRanks) {
|
|
25
|
+
scores.set(kbid, (scores.get(kbid) ?? 0) + 1 / (k + rank));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
for (const [kbid, rank] of vectorRanks) {
|
|
29
|
+
scores.set(kbid, (scores.get(kbid) ?? 0) + 1 / (k + rank));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return scores;
|
|
33
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import type { VectorSearchResult } from '../typings/vector-search-result.model.ts';
|
|
3
|
+
import { cosineSimilarity } from './cosine-similarity.function.ts';
|
|
4
|
+
|
|
5
|
+
/** Fixed header size in bytes. */
|
|
6
|
+
const HEADER_SIZE = 32;
|
|
7
|
+
|
|
8
|
+
/** Fixed width in bytes for the stored kbid string. */
|
|
9
|
+
const KBID_WIDTH = 64;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Brute-force linear scan of a `vectors.idx` file.
|
|
13
|
+
*
|
|
14
|
+
* Reads every stored vector, computes cosine similarity against
|
|
15
|
+
* `queryVector`, then returns the top `topN` results sorted by
|
|
16
|
+
* score descending.
|
|
17
|
+
*
|
|
18
|
+
* @param filePath - absolute path to the `vectors.idx` file
|
|
19
|
+
* @param queryVector - embedding to search against
|
|
20
|
+
* @param topN - maximum number of results to return
|
|
21
|
+
* @returns results sorted by descending cosine similarity score
|
|
22
|
+
*/
|
|
23
|
+
export function searchVectors(
|
|
24
|
+
filePath: string,
|
|
25
|
+
queryVector: Float32Array,
|
|
26
|
+
topN: number,
|
|
27
|
+
): VectorSearchResult[] {
|
|
28
|
+
const buf = readFileSync(filePath);
|
|
29
|
+
|
|
30
|
+
if (buf.length < HEADER_SIZE) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const dimensions = buf.readUInt32LE(8);
|
|
35
|
+
const count = buf.readUInt32LE(12);
|
|
36
|
+
const modelLen = buf.readUInt32LE(16);
|
|
37
|
+
const dataStart = HEADER_SIZE + modelLen;
|
|
38
|
+
const recordSize = KBID_WIDTH + dimensions * 4;
|
|
39
|
+
|
|
40
|
+
const results: VectorSearchResult[] = [];
|
|
41
|
+
|
|
42
|
+
for (let i = 0; i < count; i++) {
|
|
43
|
+
const recOffset = dataStart + i * recordSize;
|
|
44
|
+
const kbid = buf
|
|
45
|
+
.toString('utf-8', recOffset, recOffset + KBID_WIDTH)
|
|
46
|
+
.replace(/\0/g, '');
|
|
47
|
+
|
|
48
|
+
const vector = new Float32Array(dimensions);
|
|
49
|
+
for (let d = 0; d < dimensions; d++) {
|
|
50
|
+
vector[d] = buf.readFloatLE(recOffset + KBID_WIDTH + d * 4);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const score = cosineSimilarity(queryVector, vector);
|
|
54
|
+
results.push({ kbid, score });
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
results.sort((a, b) => b.score - a.score);
|
|
58
|
+
return results.slice(0, topN);
|
|
59
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { NullEmbeddingProvider } from './classes/null-embedding-provider.class.ts';
|
|
2
|
+
export { cosineSimilarity } from './functions/cosine-similarity.function.ts';
|
|
3
|
+
export { rrfFuse } from './functions/rrf-fuse.function.ts';
|
|
4
|
+
export { buildVectorIndex } from './functions/build-vector-index.function.ts';
|
|
5
|
+
export { searchVectors } from './functions/search-vectors.function.ts';
|
|
6
|
+
export { readVectorIndexMeta } from './functions/read-vector-index-meta.function.ts';
|
|
7
|
+
export { jaccardCoefficient } from './functions/jaccard-coefficient.function.ts';
|
|
8
|
+
export { detectNearDuplicates } from './functions/detect-near-duplicates.function.ts';
|
|
9
|
+
export {
|
|
10
|
+
JACCARD_THRESHOLD,
|
|
11
|
+
JACCARD_BAND_MIN,
|
|
12
|
+
COSINE_THRESHOLD,
|
|
13
|
+
} from './constants/near-duplicate-thresholds.constant.ts';
|
|
14
|
+
export type { EmbeddingProvider } from './typings/embedding-provider.interface.ts';
|
|
15
|
+
export type { EmbeddingConfig } from './typings/embedding-config.interface.ts';
|
|
16
|
+
export type { VectorSearchResult } from './typings/vector-search-result.model.ts';
|
|
17
|
+
export type { VectorIndexMeta } from './typings/vector-index-meta.model.ts';
|
|
18
|
+
export type { VectorIndexEntry } from './typings/vector-index-entry.model.ts';
|
|
19
|
+
export type { NearDuplicateCandidate } from './typings/near-duplicate-candidate.model.ts';
|
|
20
|
+
export type { NearDuplicateResult } from './typings/near-duplicate-result.model.ts';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Configuration for the embedding provider. */
|
|
2
|
+
export interface EmbeddingConfig {
|
|
3
|
+
/**
|
|
4
|
+
* Provider type.
|
|
5
|
+
*
|
|
6
|
+
* - `'none'` -- embeddings disabled (default)
|
|
7
|
+
* - `'onnx'` -- local ONNX Runtime model
|
|
8
|
+
* - `'api'` -- remote HTTP embedding API
|
|
9
|
+
*/
|
|
10
|
+
readonly provider: 'none' | 'onnx' | 'api';
|
|
11
|
+
|
|
12
|
+
/** Model name or path (for onnx/api providers). */
|
|
13
|
+
readonly model?: string;
|
|
14
|
+
|
|
15
|
+
/** API endpoint URL (for api provider). */
|
|
16
|
+
readonly endpoint?: string;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Number of dimensions the model produces
|
|
20
|
+
* (required for api provider).
|
|
21
|
+
*/
|
|
22
|
+
readonly dimensions?: number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Pluggable embedding provider interface. */
|
|
2
|
+
export interface EmbeddingProvider {
|
|
3
|
+
/**
|
|
4
|
+
* Compute embedding vectors for text inputs.
|
|
5
|
+
*
|
|
6
|
+
* @param texts - list of text strings to embed
|
|
7
|
+
* @returns a Float32Array embedding for each input text,
|
|
8
|
+
* in the same order
|
|
9
|
+
*/
|
|
10
|
+
embed(texts: string[]): Promise<Float32Array[]>;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Number of dimensions in the embedding vector.
|
|
14
|
+
*
|
|
15
|
+
* Returns 0 when embeddings are disabled.
|
|
16
|
+
*/
|
|
17
|
+
dimensions(): number;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Name of the underlying model.
|
|
21
|
+
*
|
|
22
|
+
* Returns `'none'` when embeddings are disabled.
|
|
23
|
+
*/
|
|
24
|
+
modelName(): string;
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A document section candidate for near-duplicate detection.
|
|
3
|
+
*
|
|
4
|
+
* Carries the token set for Jaccard comparison and an optional
|
|
5
|
+
* embedding vector for cosine-similarity comparison.
|
|
6
|
+
*/
|
|
7
|
+
export interface NearDuplicateCandidate {
|
|
8
|
+
/** Knowledge-base identifier for this section. */
|
|
9
|
+
readonly kbid: string;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Set of lowercased word tokens extracted from the section body.
|
|
13
|
+
*
|
|
14
|
+
* Used by the Jaccard coefficient pass.
|
|
15
|
+
*/
|
|
16
|
+
readonly tokens: Set<string>;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Optional embedding vector for this section.
|
|
20
|
+
*
|
|
21
|
+
* When present and a provider is available, used as the
|
|
22
|
+
* cosine-similarity pass input.
|
|
23
|
+
*/
|
|
24
|
+
readonly embedding?: Float32Array;
|
|
25
|
+
}
|