@vpxa/kb 0.1.13 → 0.1.16
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 +65 -12
- package/package.json +14 -7
- package/packages/analyzers/dist/blast-radius-analyzer.d.ts +17 -21
- package/packages/analyzers/dist/blast-radius-analyzer.js +5 -12
- package/packages/analyzers/dist/dependency-analyzer.d.ts +31 -28
- package/packages/analyzers/dist/dependency-analyzer.js +6 -9
- package/packages/analyzers/dist/diagram-generator.d.ts +12 -9
- package/packages/analyzers/dist/diagram-generator.js +2 -4
- package/packages/analyzers/dist/entry-point-analyzer.d.ts +39 -36
- package/packages/analyzers/dist/entry-point-analyzer.js +4 -6
- package/packages/analyzers/dist/index.d.ts +12 -14
- package/packages/analyzers/dist/index.js +1 -1
- package/packages/analyzers/dist/knowledge-producer.d.ts +34 -26
- package/packages/analyzers/dist/knowledge-producer.js +17 -15
- package/packages/analyzers/dist/pattern-analyzer.d.ts +14 -11
- package/packages/analyzers/dist/pattern-analyzer.js +2 -5
- package/packages/analyzers/dist/regex-call-graph.d.ts +6 -13
- package/packages/analyzers/dist/regex-call-graph.js +1 -1
- package/packages/analyzers/dist/structure-analyzer.d.ts +13 -10
- package/packages/analyzers/dist/structure-analyzer.js +2 -4
- package/packages/analyzers/dist/symbol-analyzer.d.ts +13 -9
- package/packages/analyzers/dist/symbol-analyzer.js +9 -13
- package/packages/analyzers/dist/ts-call-graph.d.ts +16 -14
- package/packages/analyzers/dist/ts-call-graph.js +1 -1
- package/packages/analyzers/dist/types.d.ts +82 -80
- package/packages/analyzers/dist/types.js +1 -0
- package/packages/chunker/dist/call-graph-extractor.d.ts +15 -12
- package/packages/chunker/dist/call-graph-extractor.js +1 -1
- package/packages/chunker/dist/chunker-factory.d.ts +16 -4
- package/packages/chunker/dist/chunker-factory.js +1 -1
- package/packages/chunker/dist/chunker.interface.d.ts +8 -5
- package/packages/chunker/dist/chunker.interface.js +1 -0
- package/packages/chunker/dist/code-chunker.d.ts +16 -13
- package/packages/chunker/dist/code-chunker.js +11 -14
- package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
- package/packages/chunker/dist/extractors/call-extractor.js +1 -0
- package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
- package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/import-extractor.js +1 -0
- package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
- package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
- package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
- package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/symbol-extractor.js +1 -0
- package/packages/chunker/dist/extractors/types.d.ts +36 -0
- package/packages/chunker/dist/extractors/types.js +1 -0
- package/packages/chunker/dist/generic-chunker.d.ts +14 -11
- package/packages/chunker/dist/generic-chunker.js +5 -5
- package/packages/chunker/dist/index.d.ts +19 -8
- package/packages/chunker/dist/index.js +1 -1
- package/packages/chunker/dist/markdown-chunker.d.ts +16 -13
- package/packages/chunker/dist/markdown-chunker.js +3 -10
- package/packages/chunker/dist/wasm/languages.d.ts +18 -0
- package/packages/chunker/dist/wasm/languages.js +1 -0
- package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
- package/packages/chunker/dist/wasm/query-executor.js +1 -0
- package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
- package/packages/chunker/dist/wasm/runtime.js +1 -0
- package/packages/chunker/dist/wasm/types.d.ts +84 -0
- package/packages/chunker/dist/wasm/types.js +1 -0
- package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
- package/packages/chunker/dist/wasm-chunker.js +6 -0
- package/packages/chunker/src/queries/go/calls.scm +11 -0
- package/packages/chunker/src/queries/go/entry-points.scm +20 -0
- package/packages/chunker/src/queries/go/imports.scm +6 -0
- package/packages/chunker/src/queries/go/patterns.scm +25 -0
- package/packages/chunker/src/queries/go/symbols.scm +26 -0
- package/packages/chunker/src/queries/java/calls.scm +10 -0
- package/packages/chunker/src/queries/java/entry-points.scm +27 -0
- package/packages/chunker/src/queries/java/imports.scm +11 -0
- package/packages/chunker/src/queries/java/patterns.scm +27 -0
- package/packages/chunker/src/queries/java/symbols.scm +28 -0
- package/packages/chunker/src/queries/javascript/calls.scm +21 -0
- package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
- package/packages/chunker/src/queries/javascript/imports.scm +32 -0
- package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
- package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
- package/packages/chunker/src/queries/python/calls.scm +11 -0
- package/packages/chunker/src/queries/python/entry-points.scm +21 -0
- package/packages/chunker/src/queries/python/imports.scm +14 -0
- package/packages/chunker/src/queries/python/patterns.scm +25 -0
- package/packages/chunker/src/queries/python/symbols.scm +17 -0
- package/packages/chunker/src/queries/rust/calls.scm +20 -0
- package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
- package/packages/chunker/src/queries/rust/imports.scm +26 -0
- package/packages/chunker/src/queries/rust/patterns.scm +18 -0
- package/packages/chunker/src/queries/rust/symbols.scm +73 -0
- package/packages/chunker/src/queries/typescript/calls.scm +21 -0
- package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
- package/packages/chunker/src/queries/typescript/imports.scm +35 -0
- package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
- package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
- package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter.wasm +0 -0
- package/packages/cli/dist/commands/analyze.d.ts +6 -3
- package/packages/cli/dist/commands/analyze.js +2 -3
- package/packages/cli/dist/commands/context-cmds.d.ts +6 -3
- package/packages/cli/dist/commands/context-cmds.js +1 -1
- package/packages/cli/dist/commands/environment.d.ts +6 -3
- package/packages/cli/dist/commands/environment.js +1 -2
- package/packages/cli/dist/commands/execution.d.ts +6 -3
- package/packages/cli/dist/commands/execution.js +1 -1
- package/packages/cli/dist/commands/graph.d.ts +6 -3
- package/packages/cli/dist/commands/graph.js +5 -6
- package/packages/cli/dist/commands/init/adapters.d.ts +28 -0
- package/packages/cli/dist/commands/init/adapters.js +1 -0
- package/packages/cli/dist/commands/init/config.d.ts +10 -0
- package/packages/cli/dist/commands/init/config.js +3 -0
- package/packages/cli/dist/commands/init/constants.d.ts +18 -0
- package/packages/cli/dist/commands/init/constants.js +1 -0
- package/packages/cli/dist/commands/init/curated.d.ts +7 -0
- package/packages/cli/dist/commands/init/curated.js +1 -0
- package/packages/cli/dist/commands/init/global.d.ts +34 -0
- package/packages/cli/dist/commands/init/global.js +5 -0
- package/packages/cli/dist/commands/init/index.d.ts +28 -0
- package/packages/cli/dist/commands/init/index.js +5 -0
- package/packages/cli/dist/commands/init/scaffold.d.ts +23 -0
- package/packages/cli/dist/commands/init/scaffold.js +1 -0
- package/packages/cli/dist/commands/init/templates.d.ts +9 -0
- package/packages/cli/dist/commands/init/templates.js +165 -0
- package/packages/cli/dist/commands/knowledge.d.ts +6 -3
- package/packages/cli/dist/commands/knowledge.js +1 -1
- package/packages/cli/dist/commands/search.d.ts +6 -3
- package/packages/cli/dist/commands/search.js +1 -8
- package/packages/cli/dist/commands/system.d.ts +6 -3
- package/packages/cli/dist/commands/system.js +4 -7
- package/packages/cli/dist/commands/workspace.d.ts +6 -3
- package/packages/cli/dist/commands/workspace.js +1 -2
- package/packages/cli/dist/context.d.ts +7 -5
- package/packages/cli/dist/context.js +1 -1
- package/packages/cli/dist/helpers.d.ts +51 -48
- package/packages/cli/dist/helpers.js +5 -5
- package/packages/cli/dist/index.d.ts +4 -2
- package/packages/cli/dist/index.js +2 -2
- package/packages/cli/dist/kb-init.d.ts +48 -51
- package/packages/cli/dist/kb-init.js +1 -1
- package/packages/cli/dist/types.d.ts +8 -6
- package/packages/cli/dist/types.js +1 -0
- package/packages/core/dist/constants.d.ts +58 -34
- package/packages/core/dist/constants.js +1 -1
- package/packages/core/dist/content-detector.d.ts +8 -8
- package/packages/core/dist/content-detector.js +1 -1
- package/packages/core/dist/errors.d.ts +15 -13
- package/packages/core/dist/errors.js +1 -1
- package/packages/core/dist/global-registry.d.ts +62 -0
- package/packages/core/dist/global-registry.js +1 -0
- package/packages/core/dist/index.d.ts +7 -6
- package/packages/core/dist/index.js +1 -1
- package/packages/core/dist/logger.d.ts +19 -8
- package/packages/core/dist/logger.js +1 -1
- package/packages/core/dist/types.d.ts +107 -92
- package/packages/core/dist/types.js +1 -0
- package/packages/embeddings/dist/embedder.interface.d.ts +22 -20
- package/packages/embeddings/dist/embedder.interface.js +1 -0
- package/packages/embeddings/dist/index.d.ts +3 -3
- package/packages/embeddings/dist/index.js +1 -1
- package/packages/embeddings/dist/onnx-embedder.d.ts +21 -23
- package/packages/embeddings/dist/onnx-embedder.js +1 -1
- package/packages/enterprise-bridge/dist/cache.d.ts +28 -0
- package/packages/enterprise-bridge/dist/cache.js +1 -0
- package/packages/enterprise-bridge/dist/er-client.d.ts +37 -0
- package/packages/enterprise-bridge/dist/er-client.js +1 -0
- package/packages/enterprise-bridge/dist/evolution-collector.d.ts +62 -0
- package/packages/enterprise-bridge/dist/evolution-collector.js +1 -0
- package/packages/enterprise-bridge/dist/index.d.ts +8 -0
- package/packages/enterprise-bridge/dist/index.js +1 -0
- package/packages/enterprise-bridge/dist/policy-store.d.ts +45 -0
- package/packages/enterprise-bridge/dist/policy-store.js +1 -0
- package/packages/enterprise-bridge/dist/push-adapter.d.ts +23 -0
- package/packages/enterprise-bridge/dist/push-adapter.js +1 -0
- package/packages/enterprise-bridge/dist/result-merger.d.ts +14 -0
- package/packages/enterprise-bridge/dist/result-merger.js +1 -0
- package/packages/enterprise-bridge/dist/types.d.ts +81 -0
- package/packages/enterprise-bridge/dist/types.js +1 -0
- package/packages/indexer/dist/file-hasher.d.ts +5 -3
- package/packages/indexer/dist/file-hasher.js +1 -1
- package/packages/indexer/dist/filesystem-crawler.d.ts +23 -21
- package/packages/indexer/dist/filesystem-crawler.js +1 -1
- package/packages/indexer/dist/graph-extractor.d.ts +9 -13
- package/packages/indexer/dist/graph-extractor.js +1 -1
- package/packages/indexer/dist/incremental-indexer.d.ts +49 -44
- package/packages/indexer/dist/incremental-indexer.js +1 -1
- package/packages/indexer/dist/index.d.ts +5 -5
- package/packages/indexer/dist/index.js +1 -1
- package/packages/server/dist/api.d.ts +3 -8
- package/packages/server/dist/api.js +1 -1
- package/packages/server/dist/config.d.ts +6 -3
- package/packages/server/dist/config.js +1 -1
- package/packages/server/dist/cross-workspace.d.ts +43 -0
- package/packages/server/dist/cross-workspace.js +1 -0
- package/packages/server/dist/curated-manager.d.ts +80 -78
- package/packages/server/dist/curated-manager.js +5 -10
- package/packages/server/dist/index.d.ts +1 -2
- package/packages/server/dist/index.js +1 -1
- package/packages/server/dist/replay-interceptor.d.ts +6 -7
- package/packages/server/dist/replay-interceptor.js +1 -1
- package/packages/server/dist/resources/resources.d.ts +7 -4
- package/packages/server/dist/resources/resources.js +2 -2
- package/packages/server/dist/server.d.ts +37 -25
- package/packages/server/dist/server.js +1 -1
- package/packages/server/dist/tools/analyze.tools.d.ts +14 -11
- package/packages/server/dist/tools/analyze.tools.js +1 -3
- package/packages/server/dist/tools/audit.tool.d.ts +8 -5
- package/packages/server/dist/tools/audit.tool.js +1 -4
- package/packages/server/dist/tools/bridge.tools.d.ts +34 -0
- package/packages/server/dist/tools/bridge.tools.js +15 -0
- package/packages/server/dist/tools/evolution.tools.d.ts +7 -0
- package/packages/server/dist/tools/evolution.tools.js +5 -0
- package/packages/server/dist/tools/forge.tools.d.ts +13 -12
- package/packages/server/dist/tools/forge.tools.js +10 -13
- package/packages/server/dist/tools/forget.tool.d.ts +7 -4
- package/packages/server/dist/tools/forget.tool.js +1 -7
- package/packages/server/dist/tools/graph.tool.d.ts +7 -4
- package/packages/server/dist/tools/graph.tool.js +4 -5
- package/packages/server/dist/tools/list.tool.d.ts +7 -4
- package/packages/server/dist/tools/list.tool.js +2 -8
- package/packages/server/dist/tools/lookup.tool.d.ts +7 -4
- package/packages/server/dist/tools/lookup.tool.js +2 -9
- package/packages/server/dist/tools/onboard.tool.d.ts +8 -5
- package/packages/server/dist/tools/onboard.tool.js +2 -2
- package/packages/server/dist/tools/policy.tools.d.ts +7 -0
- package/packages/server/dist/tools/policy.tools.js +2 -0
- package/packages/server/dist/tools/produce.tool.d.ts +6 -3
- package/packages/server/dist/tools/produce.tool.js +2 -2
- package/packages/server/dist/tools/read.tool.d.ts +7 -4
- package/packages/server/dist/tools/read.tool.js +2 -6
- package/packages/server/dist/tools/reindex.tool.d.ts +10 -7
- package/packages/server/dist/tools/reindex.tool.js +3 -2
- package/packages/server/dist/tools/remember.tool.d.ts +8 -4
- package/packages/server/dist/tools/remember.tool.js +3 -5
- package/packages/server/dist/tools/replay.tool.d.ts +6 -3
- package/packages/server/dist/tools/replay.tool.js +2 -6
- package/packages/server/dist/tools/search.tool.d.ts +10 -5
- package/packages/server/dist/tools/search.tool.js +6 -22
- package/packages/server/dist/tools/status.tool.d.ts +12 -4
- package/packages/server/dist/tools/status.tool.js +2 -3
- package/packages/server/dist/tools/toolkit.tools.d.ts +36 -35
- package/packages/server/dist/tools/toolkit.tools.js +20 -24
- package/packages/server/dist/tools/update.tool.d.ts +7 -4
- package/packages/server/dist/tools/update.tool.js +1 -6
- package/packages/server/dist/tools/utility.tools.d.ts +15 -15
- package/packages/server/dist/tools/utility.tools.js +10 -23
- package/packages/server/dist/version-check.d.ts +5 -2
- package/packages/server/dist/version-check.js +1 -1
- package/packages/store/dist/graph-store.interface.d.ts +89 -87
- package/packages/store/dist/graph-store.interface.js +1 -0
- package/packages/store/dist/index.d.ts +6 -6
- package/packages/store/dist/index.js +1 -1
- package/packages/store/dist/lance-store.d.ts +37 -31
- package/packages/store/dist/lance-store.js +1 -1
- package/packages/store/dist/sqlite-graph-store.d.ts +43 -47
- package/packages/store/dist/sqlite-graph-store.js +13 -13
- package/packages/store/dist/store-factory.d.ts +11 -8
- package/packages/store/dist/store-factory.js +1 -1
- package/packages/store/dist/store.interface.d.ts +47 -47
- package/packages/store/dist/store.interface.js +1 -0
- package/packages/tools/dist/audit.d.ts +61 -62
- package/packages/tools/dist/audit.js +4 -5
- package/packages/tools/dist/batch.d.ts +20 -18
- package/packages/tools/dist/batch.js +1 -1
- package/packages/tools/dist/changelog.d.ts +29 -27
- package/packages/tools/dist/changelog.js +2 -2
- package/packages/tools/dist/check.d.ts +42 -39
- package/packages/tools/dist/check.js +2 -2
- package/packages/tools/dist/checkpoint.d.ts +17 -15
- package/packages/tools/dist/checkpoint.js +1 -2
- package/packages/tools/dist/codemod.d.ts +35 -33
- package/packages/tools/dist/codemod.js +2 -2
- package/packages/tools/dist/compact.d.ts +34 -38
- package/packages/tools/dist/compact.js +2 -2
- package/packages/tools/dist/data-transform.d.ts +10 -8
- package/packages/tools/dist/data-transform.js +1 -1
- package/packages/tools/dist/dead-symbols.d.ts +29 -26
- package/packages/tools/dist/dead-symbols.js +2 -2
- package/packages/tools/dist/delegate.d.ts +26 -24
- package/packages/tools/dist/delegate.js +1 -5
- package/packages/tools/dist/diff-parse.d.ts +24 -22
- package/packages/tools/dist/diff-parse.js +3 -3
- package/packages/tools/dist/digest.d.ts +43 -46
- package/packages/tools/dist/digest.js +4 -5
- package/packages/tools/dist/dogfood-log.d.ts +49 -0
- package/packages/tools/dist/dogfood-log.js +2 -0
- package/packages/tools/dist/encode.d.ts +11 -9
- package/packages/tools/dist/encode.js +1 -1
- package/packages/tools/dist/env-info.d.ts +25 -23
- package/packages/tools/dist/env-info.js +1 -1
- package/packages/tools/dist/eval.d.ts +13 -11
- package/packages/tools/dist/eval.js +2 -3
- package/packages/tools/dist/evidence-map.d.ts +64 -62
- package/packages/tools/dist/evidence-map.js +2 -3
- package/packages/tools/dist/file-cache.d.ts +41 -0
- package/packages/tools/dist/file-cache.js +3 -0
- package/packages/tools/dist/file-summary.d.ts +50 -30
- package/packages/tools/dist/file-summary.js +2 -2
- package/packages/tools/dist/file-walk.d.ts +6 -4
- package/packages/tools/dist/file-walk.js +1 -1
- package/packages/tools/dist/find-examples.d.ts +26 -22
- package/packages/tools/dist/find-examples.js +3 -3
- package/packages/tools/dist/find.d.ts +39 -41
- package/packages/tools/dist/find.js +1 -1
- package/packages/tools/dist/forge-classify.d.ts +35 -39
- package/packages/tools/dist/forge-classify.js +2 -2
- package/packages/tools/dist/forge-ground.d.ts +58 -61
- package/packages/tools/dist/forge-ground.js +1 -1
- package/packages/tools/dist/git-context.d.ts +22 -20
- package/packages/tools/dist/git-context.js +3 -3
- package/packages/tools/dist/graph-query.d.ts +75 -79
- package/packages/tools/dist/graph-query.js +1 -1
- package/packages/tools/dist/guide.d.ts +14 -12
- package/packages/tools/dist/guide.js +1 -1
- package/packages/tools/dist/health.d.ts +13 -11
- package/packages/tools/dist/health.js +2 -2
- package/packages/tools/dist/http-request.d.ts +20 -18
- package/packages/tools/dist/http-request.js +1 -1
- package/packages/tools/dist/index.d.ts +55 -53
- package/packages/tools/dist/index.js +1 -1
- package/packages/tools/dist/lane.d.ts +28 -26
- package/packages/tools/dist/lane.js +6 -7
- package/packages/tools/dist/measure.d.ts +34 -30
- package/packages/tools/dist/measure.js +2 -2
- package/packages/tools/dist/onboard.d.ts +29 -27
- package/packages/tools/dist/onboard.js +17 -41
- package/packages/tools/dist/parse-output.d.ts +48 -46
- package/packages/tools/dist/parse-output.js +2 -2
- package/packages/tools/dist/path-resolver.d.ts +4 -2
- package/packages/tools/dist/path-resolver.js +1 -1
- package/packages/tools/dist/process-manager.d.ts +18 -16
- package/packages/tools/dist/process-manager.js +1 -1
- package/packages/tools/dist/queue.d.ts +28 -26
- package/packages/tools/dist/queue.js +1 -2
- package/packages/tools/dist/regex-test.d.ts +26 -24
- package/packages/tools/dist/regex-test.js +1 -1
- package/packages/tools/dist/rename.d.ts +28 -26
- package/packages/tools/dist/rename.js +2 -2
- package/packages/tools/dist/replay.d.ts +33 -31
- package/packages/tools/dist/replay.js +4 -6
- package/packages/tools/dist/response-envelope.d.ts +32 -30
- package/packages/tools/dist/response-envelope.js +1 -1
- package/packages/tools/dist/schema-validate.d.ts +15 -13
- package/packages/tools/dist/schema-validate.js +1 -1
- package/packages/tools/dist/scope-map.d.ts +45 -48
- package/packages/tools/dist/scope-map.js +1 -1
- package/packages/tools/dist/snippet.d.ts +26 -25
- package/packages/tools/dist/snippet.js +1 -1
- package/packages/tools/dist/stash.d.ts +13 -11
- package/packages/tools/dist/stash.js +1 -2
- package/packages/tools/dist/stratum-card.d.ts +27 -28
- package/packages/tools/dist/stratum-card.js +3 -5
- package/packages/tools/dist/symbol.d.ts +31 -26
- package/packages/tools/dist/symbol.js +3 -3
- package/packages/tools/dist/test-run.d.ts +19 -16
- package/packages/tools/dist/test-run.js +2 -2
- package/packages/tools/dist/text-utils.d.ts +6 -4
- package/packages/tools/dist/text-utils.js +2 -2
- package/packages/tools/dist/time-utils.d.ts +15 -13
- package/packages/tools/dist/time-utils.js +1 -1
- package/packages/tools/dist/trace.d.ts +26 -21
- package/packages/tools/dist/trace.js +2 -2
- package/packages/tools/dist/truncation.d.ts +6 -4
- package/packages/tools/dist/truncation.js +6 -13
- package/packages/tools/dist/watch.d.ts +28 -26
- package/packages/tools/dist/watch.js +1 -1
- package/packages/tools/dist/web-fetch.d.ts +35 -33
- package/packages/tools/dist/web-fetch.js +6 -12
- package/packages/tools/dist/web-search.d.ts +16 -14
- package/packages/tools/dist/web-search.js +1 -1
- package/packages/tools/dist/workset.d.ts +19 -17
- package/packages/tools/dist/workset.js +1 -2
- package/packages/tui/dist/App-CYLNJLr6.js +2 -0
- package/packages/tui/dist/App.d.ts +11 -6
- package/packages/tui/dist/App.js +1 -450
- package/packages/tui/dist/CuratedPanel-sYdZAICX.js +2 -0
- package/packages/tui/dist/LogPanel-DtMnoyXT.js +3 -0
- package/packages/tui/dist/SearchPanel-DREo6zgt.js +2 -0
- package/packages/tui/dist/StatusPanel-2ex8fLOO.js +2 -0
- package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
- package/packages/tui/dist/devtools-DUyj952l.js +7 -0
- package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +28 -0
- package/packages/tui/dist/index-B9VpfVPP.d.ts +13 -0
- package/packages/tui/dist/index.d.ts +3 -19
- package/packages/tui/dist/index.js +1 -476
- package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +316 -0
- package/packages/tui/dist/panels/CuratedPanel.d.ts +11 -6
- package/packages/tui/dist/panels/CuratedPanel.js +1 -371
- package/packages/tui/dist/panels/LogPanel.d.ts +7 -3
- package/packages/tui/dist/panels/LogPanel.js +1 -449
- package/packages/tui/dist/panels/SearchPanel.d.ts +14 -8
- package/packages/tui/dist/panels/SearchPanel.js +1 -372
- package/packages/tui/dist/panels/StatusPanel.d.ts +11 -6
- package/packages/tui/dist/panels/StatusPanel.js +1 -371
- package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +150 -0
- package/scaffold/adapters/claude-code.mjs +20 -0
- package/scaffold/adapters/copilot.mjs +320 -0
- package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +21 -0
- package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +21 -0
- package/scaffold/copilot/agents/Documenter.agent.md +42 -0
- package/scaffold/copilot/agents/Orchestrator.agent.md +104 -0
- package/scaffold/copilot/agents/Planner.agent.md +54 -0
- package/scaffold/copilot/agents/Refactor.agent.md +36 -0
- package/scaffold/copilot/agents/Researcher-Alpha.agent.md +20 -0
- package/scaffold/copilot/agents/Researcher-Beta.agent.md +20 -0
- package/scaffold/copilot/agents/Researcher-Delta.agent.md +20 -0
- package/scaffold/copilot/agents/Researcher-Gamma.agent.md +20 -0
- package/scaffold/definitions/agents.mjs +165 -0
- package/scaffold/definitions/bodies.mjs +292 -0
- package/scaffold/definitions/hooks.mjs +43 -0
- package/scaffold/definitions/models.mjs +56 -0
- package/scaffold/definitions/plugins.mjs +24 -0
- package/scaffold/definitions/prompts.mjs +145 -0
- package/scaffold/definitions/protocols.mjs +322 -0
- package/scaffold/definitions/tools.mjs +176 -0
- package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
- package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
- package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +12 -0
- package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +12 -0
- package/scaffold/general/agents/Debugger.agent.md +31 -0
- package/scaffold/general/agents/Documenter.agent.md +42 -0
- package/scaffold/general/agents/Explorer.agent.md +50 -0
- package/scaffold/general/agents/Frontend.agent.md +29 -0
- package/scaffold/general/agents/Implementer.agent.md +31 -0
- package/scaffold/general/agents/Orchestrator.agent.md +104 -0
- package/scaffold/general/agents/Planner.agent.md +55 -0
- package/scaffold/general/agents/README.md +57 -0
- package/scaffold/general/agents/Refactor.agent.md +36 -0
- package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
- package/scaffold/general/agents/Security.agent.md +42 -0
- package/scaffold/general/agents/_shared/adr-protocol.md +91 -0
- package/scaffold/general/agents/_shared/architect-reviewer-base.md +50 -0
- package/scaffold/general/agents/_shared/code-agent-base.md +88 -0
- package/scaffold/general/agents/_shared/code-reviewer-base.md +54 -0
- package/scaffold/general/agents/_shared/decision-protocol.md +27 -0
- package/scaffold/general/agents/_shared/forge-protocol.md +46 -0
- package/scaffold/general/agents/_shared/researcher-base.md +61 -0
- package/scaffold/general/agents/templates/adr-template.md +27 -0
- package/scaffold/general/agents/templates/execution-state.md +25 -0
- package/scaffold/general/prompts/ask.prompt.md +20 -0
- package/scaffold/general/prompts/debug.prompt.md +25 -0
- package/scaffold/general/prompts/design.prompt.md +22 -0
- package/scaffold/general/prompts/implement.prompt.md +26 -0
- package/scaffold/general/prompts/plan.prompt.md +24 -0
- package/scaffold/general/prompts/review.prompt.md +31 -0
- package/scaffold/generate.mjs +74 -0
- package/skills/adr-skill/SKILL.md +329 -0
- package/skills/adr-skill/assets/templates/adr-madr.md +89 -0
- package/skills/adr-skill/assets/templates/adr-readme.md +20 -0
- package/skills/adr-skill/assets/templates/adr-simple.md +46 -0
- package/skills/adr-skill/references/adr-conventions.md +95 -0
- package/skills/adr-skill/references/examples.md +193 -0
- package/skills/adr-skill/references/review-checklist.md +77 -0
- package/skills/adr-skill/references/template-variants.md +52 -0
- package/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
- package/skills/adr-skill/scripts/new_adr.js +391 -0
- package/skills/adr-skill/scripts/set_adr_status.js +169 -0
- package/skills/brainstorming/SKILL.md +259 -0
- package/skills/brainstorming/scripts/frame-template.html +365 -0
- package/skills/brainstorming/scripts/helper.js +216 -0
- package/skills/brainstorming/scripts/server.cjs +9 -0
- package/skills/brainstorming/scripts/server.src.cjs +249 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/brainstorming/visual-companion.md +430 -0
- package/skills/c4-architecture/SKILL.md +295 -0
- package/skills/c4-architecture/references/advanced-patterns.md +552 -0
- package/skills/c4-architecture/references/c4-syntax.md +492 -0
- package/skills/c4-architecture/references/common-mistakes.md +437 -0
- package/skills/knowledge-base/SKILL.md +100 -10
- package/skills/lesson-learned/SKILL.md +105 -0
- package/skills/lesson-learned/references/anti-patterns.md +55 -0
- package/skills/lesson-learned/references/se-principles.md +109 -0
- package/skills/requirements-clarity/SKILL.md +324 -0
- package/skills/session-handoff/SKILL.md +189 -0
- package/skills/session-handoff/references/handoff-template.md +139 -0
- package/skills/session-handoff/references/resume-checklist.md +80 -0
- package/skills/session-handoff/scripts/check_staleness.js +269 -0
- package/skills/session-handoff/scripts/create_handoff.js +299 -0
- package/skills/session-handoff/scripts/list_handoffs.js +113 -0
- package/skills/session-handoff/scripts/validate_handoff.js +241 -0
- package/packages/chunker/dist/treesitter-chunker.d.ts +0 -47
- package/packages/chunker/dist/treesitter-chunker.js +0 -8
- package/packages/cli/dist/commands/init.d.ts +0 -10
- package/packages/cli/dist/commands/init.js +0 -308
|
@@ -1,47 +1,52 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { IGraphStore, IKnowledgeStore } from "@kb/store";
|
|
2
|
+
import { IndexStats, KBConfig } from "@kb/core";
|
|
3
|
+
import { IEmbedder } from "@kb/embeddings";
|
|
4
|
+
|
|
5
|
+
//#region packages/indexer/src/incremental-indexer.d.ts
|
|
6
|
+
interface IndexProgress {
|
|
7
|
+
phase: 'crawling' | 'chunking' | 'embedding' | 'storing' | 'cleanup' | 'done';
|
|
8
|
+
filesTotal: number;
|
|
9
|
+
filesProcessed: number;
|
|
10
|
+
chunksTotal: number;
|
|
11
|
+
chunksProcessed: number;
|
|
12
|
+
/** The file currently being processed */
|
|
13
|
+
currentFile?: string;
|
|
12
14
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
type ProgressCallback = (progress: IndexProgress) => void;
|
|
16
|
+
interface IndexResult {
|
|
17
|
+
filesProcessed: number;
|
|
18
|
+
filesSkipped: number;
|
|
19
|
+
chunksCreated: number;
|
|
20
|
+
filesRemoved: number;
|
|
21
|
+
durationMs: number;
|
|
20
22
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
23
|
+
declare class IncrementalIndexer {
|
|
24
|
+
private readonly embedder;
|
|
25
|
+
private readonly store;
|
|
26
|
+
private readonly crawler;
|
|
27
|
+
private indexing;
|
|
28
|
+
private graphStore?;
|
|
29
|
+
/** Whether an index operation is currently in progress. */
|
|
30
|
+
get isIndexing(): boolean;
|
|
31
|
+
constructor(embedder: IEmbedder, store: IKnowledgeStore);
|
|
32
|
+
/** Set the graph store for auto-population during indexing and cleanup on re-index. */
|
|
33
|
+
setGraphStore(graphStore: IGraphStore): void;
|
|
34
|
+
/**
|
|
35
|
+
* Index all configured sources. Only re-indexes files that have changed.
|
|
36
|
+
* Sources are crawled in parallel, and file processing runs concurrently
|
|
37
|
+
* up to `config.indexing.concurrency` (default: half of CPU cores).
|
|
38
|
+
*/
|
|
39
|
+
index(config: KBConfig, onProgress?: ProgressCallback): Promise<IndexResult>;
|
|
40
|
+
private doIndex;
|
|
41
|
+
/**
|
|
42
|
+
* Force re-index all files (ignoring hashes).
|
|
43
|
+
*/
|
|
44
|
+
reindexAll(config: KBConfig, onProgress?: ProgressCallback): Promise<IndexResult>;
|
|
45
|
+
private doReindex;
|
|
46
|
+
/**
|
|
47
|
+
* Get current index statistics.
|
|
48
|
+
*/
|
|
49
|
+
getStats(): Promise<IndexStats>;
|
|
46
50
|
}
|
|
47
|
-
//#
|
|
51
|
+
//#endregion
|
|
52
|
+
export { IncrementalIndexer, IndexProgress, IndexResult, ProgressCallback };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{generateRecordId as e,hashContent as t}from"./file-hasher.js";import{FilesystemCrawler as n}from"./filesystem-crawler.js";import{extractGraph as r}from"./graph-extractor.js";import{KB_PATHS as i,createLogger as a,detectContentType as o,serializeError as s}from"../../core/dist/index.js";import{availableParallelism as c}from"node:os";import{createChunkerSync as l}from"../../chunker/dist/index.js";const u=a(`indexer`);async function d(e,t,n,r){let i=0;async function a(){for(;i<e.length;){let n=i++;try{await t(e[n])}catch(t){r?.(e[n],t)}}}await Promise.all(Array.from({length:Math.min(n,e.length)},()=>a()))}const f=Math.max(1,Math.floor(c()/2));var p=class{crawler;indexing=!1;graphStore;get isIndexing(){return this.indexing}constructor(e,t){this.embedder=e,this.store=t,this.crawler=new n}setGraphStore(e){this.graphStore=e}async index(e,t){if(this.indexing)throw Error(`Indexing is already in progress`);this.indexing=!0;try{return await this.doIndex(e,t,{})}finally{this.indexing=!1}}async doIndex(n,a,c={}){let p=Date.now(),m=0,h=0,g=0,_=0,v=n.indexing.concurrency??f;a?.({phase:`crawling`,filesTotal:0,filesProcessed:0,chunksTotal:0,chunksProcessed:0});let y=(await Promise.all(n.sources.map(e=>this.crawler.crawl({rootDir:e.path,excludePatterns:e.excludePatterns})))).flat(),b,x;if(c.skipHashCheck)b=y,x=[];else{let e=await this.store.listSourcePaths(),n=new Set(y.map(e=>e.relativePath));x=e.filter(e=>!n.has(e)&&!e.startsWith(`${i.aiCurated}/`)),b=[],await d(y,async e=>{let n=t(e.content),r=await this.store.getBySourcePath(e.relativePath);if(r.length>0&&r[0].fileHash===n){h++;return}b.push(e)},v,(e,t)=>u.error(`Hash check failed`,{sourcePath:e.relativePath,...s(t)}))}let S=b.length,C=[],w=[],T=0,E=async()=>{if(this.graphStore){try{C.length>0&&await this.graphStore.upsertNodes(C),w.length>0&&await this.graphStore.upsertEdges(w)}catch(e){u.warn(`Graph batch flush failed`,s(e))}C=[],w=[],T=0}};return await d(b,async n=>{a?.({phase:`chunking`,filesTotal:S,filesProcessed:m,chunksTotal:g,chunksProcessed:g,currentFile:n.relativePath});let i=o(n.relativePath),d=l(n.extension).chunk(n.content,{sourcePath:n.relativePath,contentType:i});if(d.length===0)return;a?.({phase:`embedding`,filesTotal:S,filesProcessed:m,chunksTotal:g+d.length,chunksProcessed:g,currentFile:n.relativePath});let f=await this.embedder.embedBatch(d.map(e=>e.text)),p=t(n.content),h=d.map((t,r)=>({id:e(n.relativePath,r),content:t.text,sourcePath:t.sourcePath,contentType:t.contentType,headingPath:t.headingPath,chunkIndex:t.chunkIndex,totalChunks:t.totalChunks,startLine:t.startLine,endLine:t.endLine,fileHash:p,indexedAt:new Date().toISOString(),origin:`indexed`,tags:[],version:1}));if(a?.({phase:`storing`,filesTotal:S,filesProcessed:m,chunksTotal:g+d.length,chunksProcessed:g,currentFile:n.relativePath}),await this.store.upsert(h,f),this.graphStore)try{c.graphCleared||await this.graphStore.deleteBySourcePath(n.relativePath);let e=r(n.content,n.relativePath);e.nodes.length>0&&C.push(...e.nodes),e.edges.length>0&&w.push(...e.edges),T++,T>=50&&await E()}catch(e){u.warn(`Graph extraction failed`,{sourcePath:n.relativePath,...s(e)})}m++,g+=d.length},v,(e,t)=>u.error(`Processing failed`,{sourcePath:e.relativePath,...s(t)})),await E(),x.length>0&&(a?.({phase:`cleanup`,filesTotal:S,filesProcessed:m,chunksTotal:g,chunksProcessed:g}),await d(x,async e=>{await this.store.deleteBySourcePath(e),this.graphStore&&await this.graphStore.deleteBySourcePath(e).catch(t=>u.warn(`Graph cleanup failed`,{sourcePath:e,...s(t)})),_++},v,(e,t)=>u.error(`Cleanup failed`,{sourcePath:e,...s(t)}))),a?.({phase:`done`,filesTotal:S,filesProcessed:m,chunksTotal:g,chunksProcessed:g}),{filesProcessed:m,filesSkipped:h,chunksCreated:g,filesRemoved:_,durationMs:Date.now()-p}}async reindexAll(e,t){if(this.indexing)throw Error(`Indexing is already in progress`);this.indexing=!0;try{if(await this.store.dropTable(),this.graphStore)try{let e=await this.graphStore.getStats();e.nodeCount>0&&(await this.graphStore.clear(),u.info(`Graph store cleared`,{nodeCount:e.nodeCount,edgeCount:e.edgeCount}))}catch(e){u.warn(`Graph store clear failed`,s(e))}return await this.doReindex(e,t)}catch(e){throw this.indexing=!1,e}}async doReindex(e,t){try{return await this.doIndex(e,t,{skipHashCheck:!0,graphCleared:!0})}finally{this.indexing=!1}}async getStats(){return this.store.getStats()}};export{p as IncrementalIndexer};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { generateRecordId, hashContent } from "./file-hasher.js";
|
|
2
|
+
import { CrawlOptions, CrawlResult, FilesystemCrawler } from "./filesystem-crawler.js";
|
|
3
|
+
import { ExtractedGraph, extractGraph } from "./graph-extractor.js";
|
|
4
|
+
import { IncrementalIndexer, IndexProgress, IndexResult, ProgressCallback } from "./incremental-indexer.js";
|
|
5
|
+
export { type CrawlOptions, type CrawlResult, type ExtractedGraph, FilesystemCrawler, IncrementalIndexer, type IndexProgress, type IndexResult, type ProgressCallback, extractGraph, generateRecordId, hashContent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{generateRecordId as
|
|
1
|
+
import{generateRecordId as e,hashContent as t}from"./file-hasher.js";import{FilesystemCrawler as n}from"./filesystem-crawler.js";import{extractGraph as r}from"./graph-extractor.js";import{IncrementalIndexer as i}from"./incremental-indexer.js";export{n as FilesystemCrawler,i as IncrementalIndexer,r as extractGraph,e as generateRecordId,t as hashContent};
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
export { loadConfig } from './config.js';
|
|
6
|
-
export type { KnowledgeBaseComponents } from './server.js';
|
|
7
|
-
export { createMcpServer, createServer, initializeKnowledgeBase } from './server.js';
|
|
8
|
-
//# sourceMappingURL=api.d.ts.map
|
|
1
|
+
import { loadConfig } from "./config.js";
|
|
2
|
+
import { KnowledgeBaseComponents, createMcpServer, createServer, initializeKnowledgeBase } from "./server.js";
|
|
3
|
+
export { type KnowledgeBaseComponents, createMcpServer, createServer, initializeKnowledgeBase, loadConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{loadConfig as
|
|
1
|
+
import{loadConfig as e}from"./config.js";import{createMcpServer as t,createServer as n,initializeKnowledgeBase as r}from"./server.js";export{t as createMcpServer,n as createServer,r as initializeKnowledgeBase,e as loadConfig};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
//#
|
|
1
|
+
import { KBConfig } from "@kb/core";
|
|
2
|
+
|
|
3
|
+
//#region packages/server/src/config.d.ts
|
|
4
|
+
declare function loadConfig(): KBConfig;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { loadConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as
|
|
1
|
+
import{existsSync as e,readFileSync as t}from"node:fs";import{dirname as n,resolve as r}from"node:path";import{fileURLToPath as i}from"node:url";import{KB_PATHS as a,createLogger as o,getPartitionDir as s,isGlobalInstalled as c,registerWorkspace as l,serializeError as u}from"../../core/dist/index.js";const d=n(i(import.meta.url)),f=o(`server`);function p(e,t,n){let i=r(e),a=r(t);if(!i.startsWith(a))throw Error(`Config ${n} path escapes workspace root: ${e} is not under ${t}`);return i}function m(){let i=process.env.KB_CONFIG_PATH??(e(r(process.cwd(),`kb.config.json`))?r(process.cwd(),`kb.config.json`):r(d,`..`,`..`,`..`,`kb.config.json`));try{let e=t(i,`utf-8`),o=JSON.parse(e);if(!o.sources||!Array.isArray(o.sources)||o.sources.length===0)throw Error(`Config must have at least one source`);if(!o.store?.path)throw Error(`Config must specify store.path`);let s=n(i);return o.sources=o.sources.map(e=>({...e,path:p(r(s,e.path),s,`source`)})),o.store.path=p(r(s,o.store.path),s,`store`),o.curated=o.curated??{path:a.aiCurated},o.curated.path=p(r(s,o.curated.path),s,`curated`),g(o,s),o}catch(e){return f.error(`Failed to load config`,{configPath:i,...u(e)}),f.warn(`Falling back to default configuration`,{configPath:i}),h()}}function h(){let e=process.env.KB_WORKSPACE_ROOT??process.cwd(),t={sources:[{path:e,excludePatterns:[`node_modules/**`,`dist/**`,`.git/**`,`coverage/**`,`*.lock`,`pnpm-lock.yaml`]}],serverName:`knowledge-base`,indexing:{chunkSize:1500,chunkOverlap:200,minChunkSize:100},embedding:{model:`mixedbread-ai/mxbai-embed-large-v1`,dimensions:1024},store:{backend:`lancedb`,path:r(e,a.data)},curated:{path:r(e,a.aiCurated)}};return g(t,e),t}function g(e,t){if(!c())return;let n=t,i=l(n);e.store.path=r(s(i.partition)),e.curated||={path:r(n,a.aiCurated)}}export{m as loadConfig};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { RegistryEntry, SearchResult } from "@kb/core";
|
|
2
|
+
import { IKnowledgeStore, SearchOptions } from "@kb/store";
|
|
3
|
+
|
|
4
|
+
//#region packages/server/src/cross-workspace.d.ts
|
|
5
|
+
interface CrossWorkspaceOptions {
|
|
6
|
+
/** Workspace partition names or folder basenames to include. `"*"` means all. */
|
|
7
|
+
workspaces: string[];
|
|
8
|
+
/** Current workspace partition (excluded from cross-workspace queries to avoid double results) */
|
|
9
|
+
currentPartition?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolve workspace identifiers to partition entries.
|
|
13
|
+
* Accepts partition keys (exact) or folder basenames (fuzzy match).
|
|
14
|
+
* Special value `"*"` resolves to all registered workspaces.
|
|
15
|
+
*/
|
|
16
|
+
declare function resolveWorkspaces(identifiers: string[], currentPartition?: string): RegistryEntry[];
|
|
17
|
+
/**
|
|
18
|
+
* Open temporary read-only store instances for the specified workspace partitions.
|
|
19
|
+
* Caller MUST call closeAll() when done.
|
|
20
|
+
*/
|
|
21
|
+
declare function openWorkspaceStores(entries: RegistryEntry[]): Promise<{
|
|
22
|
+
stores: Map<string, IKnowledgeStore>;
|
|
23
|
+
closeAll: () => Promise<void>;
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Fan-out a vector search to multiple workspace stores in parallel.
|
|
27
|
+
* Returns merged results sorted by score descending, with workspace labels.
|
|
28
|
+
*/
|
|
29
|
+
declare function fanOutSearch(stores: Map<string, IKnowledgeStore>, queryVector: Float32Array, options: SearchOptions & {
|
|
30
|
+
limit: number;
|
|
31
|
+
}): Promise<Array<SearchResult & {
|
|
32
|
+
workspace: string;
|
|
33
|
+
}>>;
|
|
34
|
+
/**
|
|
35
|
+
* Fan-out a full-text search to multiple workspace stores in parallel.
|
|
36
|
+
*/
|
|
37
|
+
declare function fanOutFtsSearch(stores: Map<string, IKnowledgeStore>, query: string, options: SearchOptions & {
|
|
38
|
+
limit: number;
|
|
39
|
+
}): Promise<Array<SearchResult & {
|
|
40
|
+
workspace: string;
|
|
41
|
+
}>>;
|
|
42
|
+
//#endregion
|
|
43
|
+
export { CrossWorkspaceOptions, fanOutFtsSearch, fanOutSearch, openWorkspaceStores, resolveWorkspaces };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createLogger as e,getPartitionDir as t,isGlobalInstalled as n,listWorkspaces as r}from"../../core/dist/index.js";import{createStore as i}from"../../store/dist/index.js";const a=e(`cross-workspace`);function o(e,t){if(!n())return[];let i=r();if(i.length===0)return[];if(e.includes(`*`))return t?i.filter(e=>e.partition!==t):i;let a=[];for(let n of e){let e=i.find(e=>e.partition===n);if(e){e.partition!==t&&a.push(e);continue}let r=i.filter(e=>e.partition!==t&&e.partition.replace(/-[a-f0-9]{8}$/,``)===n.toLowerCase());a.push(...r)}let o=new Set;return a.filter(e=>o.has(e.partition)?!1:(o.add(e.partition),!0))}async function s(e){let n=new Map;for(let r of e)try{let e=await i({backend:`lancedb`,path:t(r.partition)});await e.initialize(),n.set(r.partition,e)}catch(e){a.warn(`Failed to open workspace store`,{partition:r.partition,err:e})}return{stores:n,closeAll:async()=>{for(let[,e]of n)try{await e.close()}catch{}}}}async function c(e,t,n){let r=[...e.entries()].map(async([e,r])=>{try{return(await r.search(t,n)).map(t=>({...t,workspace:e}))}catch(t){return a.warn(`Cross-workspace search failed for partition`,{partition:e,err:t}),[]}});return(await Promise.all(r)).flat().sort((e,t)=>t.score-e.score).slice(0,n.limit)}async function l(e,t,n){let r=[...e.entries()].map(async([e,r])=>{try{return(await r.ftsSearch(t,n)).map(t=>({...t,workspace:e}))}catch(t){return a.warn(`Cross-workspace FTS search failed for partition`,{partition:e,err:t}),[]}});return(await Promise.all(r)).flat().sort((e,t)=>t.score-e.score).slice(0,n.limit)}export{l as fanOutFtsSearch,c as fanOutSearch,s as openWorkspaceStores,o as resolveWorkspaces};
|
|
@@ -1,86 +1,88 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { IEmbedder } from "@kb/embeddings";
|
|
2
|
+
import { IKnowledgeStore } from "@kb/store";
|
|
3
|
+
|
|
4
|
+
//#region packages/server/src/curated-manager.d.ts
|
|
5
|
+
type CuratedCategory = string;
|
|
6
|
+
interface CuratedEntry {
|
|
7
|
+
path: string;
|
|
8
|
+
title: string;
|
|
9
|
+
category: string;
|
|
10
|
+
tags: string[];
|
|
11
|
+
version: number;
|
|
12
|
+
created: string;
|
|
13
|
+
updated: string;
|
|
14
|
+
contentPreview: string;
|
|
13
15
|
}
|
|
14
16
|
interface CuratedFrontmatter {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
title: string;
|
|
18
|
+
category: string;
|
|
19
|
+
tags: string[];
|
|
20
|
+
created: string;
|
|
21
|
+
updated: string;
|
|
22
|
+
version: number;
|
|
23
|
+
origin: 'curated';
|
|
24
|
+
changelog: Array<{
|
|
20
25
|
version: number;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
date: string;
|
|
25
|
-
reason: string;
|
|
26
|
-
}>;
|
|
26
|
+
date: string;
|
|
27
|
+
reason: string;
|
|
28
|
+
}>;
|
|
27
29
|
}
|
|
28
30
|
/**
|
|
29
31
|
* Manages curated knowledge files — the LLM's persistent memory.
|
|
30
|
-
* Files are stored as markdown in a curated/ directory with YAML frontmatter.
|
|
32
|
+
* Files are stored as markdown in a .ai/curated/ directory with YAML frontmatter.
|
|
31
33
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
34
|
+
declare class CuratedKnowledgeManager {
|
|
35
|
+
private readonly curatedDir;
|
|
36
|
+
private readonly store;
|
|
37
|
+
private readonly embedder;
|
|
38
|
+
constructor(curatedDir: string, store: IKnowledgeStore, embedder: IEmbedder);
|
|
39
|
+
remember(title: string, content: string, category: CuratedCategory, tags?: string[]): Promise<{
|
|
40
|
+
path: string;
|
|
41
|
+
}>;
|
|
42
|
+
update(relativePath: string, newContent: string, reason: string): Promise<{
|
|
43
|
+
path: string;
|
|
44
|
+
version: number;
|
|
45
|
+
}>;
|
|
46
|
+
forget(relativePath: string, _reason: string): Promise<{
|
|
47
|
+
path: string;
|
|
48
|
+
}>;
|
|
49
|
+
read(relativePath: string): Promise<CuratedEntry & {
|
|
50
|
+
content: string;
|
|
51
|
+
}>;
|
|
52
|
+
list(filters?: {
|
|
53
|
+
category?: CuratedCategory;
|
|
54
|
+
tag?: string;
|
|
55
|
+
}): Promise<CuratedEntry[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Re-index all curated files into the vector store.
|
|
58
|
+
* Call this after the indexer has run to restore curated vectors
|
|
59
|
+
* that may have been lost, or to bulk-sync disk state to vectors.
|
|
60
|
+
*/
|
|
61
|
+
reindexAll(): Promise<{
|
|
62
|
+
indexed: number;
|
|
63
|
+
errors: string[];
|
|
64
|
+
}>;
|
|
65
|
+
private indexCuratedFile;
|
|
66
|
+
private discoverCategories;
|
|
67
|
+
private guardPath;
|
|
68
|
+
private validateCategoryName;
|
|
69
|
+
private validateContentSize;
|
|
70
|
+
private slugify;
|
|
71
|
+
/** Return a unique `category/slug.md` path, appending `-2`, `-3`, … on collision. */
|
|
72
|
+
private uniqueRelativePath;
|
|
73
|
+
private hash;
|
|
74
|
+
private hashId;
|
|
75
|
+
/**
|
|
76
|
+
* Simple YAML frontmatter serializer (no gray-matter dependency).
|
|
77
|
+
*/
|
|
78
|
+
private serializeFile;
|
|
79
|
+
/**
|
|
80
|
+
* Simple YAML frontmatter parser (no gray-matter dependency).
|
|
81
|
+
*/
|
|
82
|
+
parseFile(raw: string): {
|
|
83
|
+
frontmatter: CuratedFrontmatter;
|
|
84
|
+
content: string;
|
|
85
|
+
};
|
|
84
86
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
//#endregion
|
|
88
|
+
export { CuratedCategory, CuratedEntry, CuratedKnowledgeManager };
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import{createHash as
|
|
2
|
-
`).length,fileHash:this.hash(
|
|
3
|
-
`).length,fileHash:this.hash(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
`)}
|
|
7
|
-
|
|
8
|
-
${t}
|
|
9
|
-
`}parseFile(t){const e=t.match(/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/);if(!e)return{frontmatter:{title:"Untitled",category:"notes",tags:[],created:"",updated:"",version:1,origin:"curated",changelog:[]},content:t};const n=e[1],r=e[2].trim(),a={},s=[],i=n.split(`
|
|
10
|
-
`);let g=!1,c={};for(const d of i){if(/^changelog:\s*$/.test(d)){g=!0;continue}if(g){const p=d.match(/^\s+-\s+version:\s*(\d+)$/);if(p){c.version!=null&&s.push(c),c={version:parseInt(p[1],10)};continue}const o=d.match(/^\s+date:\s*(.+)$/);if(o){c.date=o[1].trim();continue}const l=d.match(/^\s+reason:\s*"?(.*?)"?\s*$/);if(l){c.reason=l[1];continue}/^\w/.test(d)&&(g=!1,c.version!=null&&s.push(c),c={});continue}const h=d.match(/^(\w+):\s*(.*)$/);if(h){const p=h[1];let o=h[2];typeof o=="string"&&o.startsWith("[")&&o.endsWith("]")?o=o.slice(1,-1).split(",").map(l=>l.trim().replace(/^"|"$/g,"")).filter(l=>l.length>0):typeof o=="string"&&/^\d+$/.test(o)?o=parseInt(o,10):typeof o=="string"&&o.startsWith('"')&&o.endsWith('"')&&(o=o.slice(1,-1)),a[p]=o}}return c.version!=null&&s.push(c),{frontmatter:{title:a.title??"Untitled",category:a.category??"notes",tags:a.tags??[],created:a.created??"",updated:a.updated??"",version:a.version??1,origin:"curated",changelog:s},content:r}}}export{k as CuratedKnowledgeManager};
|
|
1
|
+
import{dirname as e,isAbsolute as t,join as n}from"node:path";import{createLogger as r,serializeError as i}from"../../core/dist/index.js";import{createHash as a}from"node:crypto";import{mkdir as o,readFile as s,readdir as c,stat as l,unlink as u,writeFile as d}from"node:fs/promises";const f=50*1024,p=r(`server`);var m=class{constructor(e,t,n){this.curatedDir=e,this.store=t,this.embedder=n}async remember(t,r,i,a=[]){this.validateCategoryName(i),this.validateContentSize(r);let s=this.slugify(t),c=await this.uniqueRelativePath(i,s),l=n(this.curatedDir,c),f=new Date().toISOString(),p={title:t,category:i,tags:a,created:f,updated:f,version:1,origin:`curated`,changelog:[{version:1,date:f,reason:`Initial creation`}]},m=this.serializeFile(r,p);await o(e(l),{recursive:!0});try{await d(l,m,{encoding:`utf-8`,flag:`wx`})}catch(e){throw e.code===`EEXIST`?Error(`Concurrent write collision for "${c}" — retry the operation`):e}try{await this.indexCuratedFile(c,r,p)}catch(e){throw await u(l).catch(()=>{}),Error(`Remember failed: wrote file but indexing failed — rolled back. ${e.message}`)}return{path:c}}async update(e,t,r){this.guardPath(e),this.validateContentSize(t);let i=n(this.curatedDir,e),a=await s(i,`utf-8`),{frontmatter:o}=this.parseFile(a),c=(o.version??1)+1,l=new Date().toISOString();return o.version=c,o.updated=l,o.changelog=[...o.changelog??[],{version:c,date:l,reason:r}],await d(i,this.serializeFile(t,o),`utf-8`),await this.indexCuratedFile(e,t,o),{path:e,version:c}}async forget(e,t){this.guardPath(e),await u(n(this.curatedDir,e));let r=`.ai/curated/${e}`;return await this.store.deleteBySourcePath(r).catch(e=>{p.warn(`File deleted but vector cleanup failed`,{sourcePath:r,...i(e)})}),{path:e}}async read(e){this.guardPath(e);let t=await s(n(this.curatedDir,e),`utf-8`),{frontmatter:r,content:i}=this.parseFile(t),a=e.split(`/`)[0];return{path:e,title:r.title??e,category:a,tags:r.tags??[],version:r.version??1,created:r.created??``,updated:r.updated??``,contentPreview:i.slice(0,200),content:i}}async list(e){let t=[],r=e?.category?[e.category]:await this.discoverCategories();for(let i of r){let r=n(this.curatedDir,i);try{let a=await c(r);for(let o of a){if(!o.endsWith(`.md`))continue;let a=await s(n(r,o),`utf-8`),{frontmatter:c,content:l}=this.parseFile(a);e?.tag&&!(c.tags??[]).includes(e.tag)||t.push({path:`${i}/${o}`,title:c.title??o,category:i,tags:c.tags??[],version:c.version??1,created:c.created??``,updated:c.updated??``,contentPreview:l.slice(0,200)})}}catch{}}return t}async reindexAll(){let e=await this.discoverCategories(),t=[],r=[];for(let a of e){let e=n(this.curatedDir,a),o;try{o=(await c(e)).filter(e=>e.endsWith(`.md`))}catch{continue}for(let c of o){let o=`${a}/${c}`,l=n(e,c);try{let e=await s(l,`utf-8`),{frontmatter:t,content:n}=this.parseFile(e);r.push({relativePath:o,content:n,frontmatter:t})}catch(e){p.error(`Failed to read curated file`,{relativePath:o,...i(e)}),t.push(`${o}: read failed`)}}}if(r.length===0)return{indexed:0,errors:t};let a=await this.embedder.embedBatch(r.map(e=>e.content)),o=new Date().toISOString(),l=r.map(e=>{let t=`.ai/curated/${e.relativePath}`;return{id:this.hashId(t,0),content:e.content,sourcePath:t,contentType:`curated-knowledge`,headingPath:e.frontmatter.title,chunkIndex:0,totalChunks:1,startLine:1,endLine:e.content.split(`
|
|
2
|
+
`).length,fileHash:this.hash(e.content),indexedAt:o,origin:`curated`,tags:e.frontmatter.tags,category:e.frontmatter.category,version:e.frontmatter.version}});return await this.store.upsert(l,a),{indexed:r.length,errors:t}}async indexCuratedFile(e,t,n){let r=await this.embedder.embed(t),i=`.ai/curated/${e}`,a=new Date().toISOString(),o={id:this.hashId(i,0),content:t,sourcePath:i,contentType:`curated-knowledge`,headingPath:n.title,chunkIndex:0,totalChunks:1,startLine:1,endLine:t.split(`
|
|
3
|
+
`).length,fileHash:this.hash(t),indexedAt:a,origin:`curated`,tags:n.tags,category:n.category,version:n.version};await this.store.upsert([o],[r])}async discoverCategories(){try{return(await c(this.curatedDir,{withFileTypes:!0})).filter(e=>e.isDirectory()&&/^[a-z][a-z0-9-]*$/.test(e.name)).map(e=>e.name)}catch{return[]}}guardPath(e){if(e.includes(`..`)||t(e))throw Error(`Invalid path: ${e}. Must be relative within .ai/curated/ directory.`);let n=e.split(`/`)[0];this.validateCategoryName(n)}validateCategoryName(e){if(!/^[a-z][a-z0-9-]*$/.test(e))throw Error(`Invalid category name: "${e}". Must be lowercase kebab-case (e.g., "decisions", "api-contracts").`)}validateContentSize(e){if(Buffer.byteLength(e,`utf-8`)>f)throw Error(`Content exceeds maximum size of ${f/1024}KB`)}slugify(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``).slice(0,80)}async uniqueRelativePath(e,t){let r=`${e}/${t}.md`,i=n(this.curatedDir,r);try{await l(i)}catch{return r}for(let r=2;r<=100;r++){let i=`${e}/${t}-${r}.md`;try{await l(n(this.curatedDir,i))}catch{return i}}throw Error(`Too many entries with slug "${t}" in category "${e}"`)}hash(e){return a(`sha256`).update(e).digest(`hex`).slice(0,16)}hashId(e,t){return this.hash(`${e}::${t}`)}serializeFile(e,t){return`${[`---`,`title: "${t.title.replace(/"/g,`\\"`)}"`,`category: ${t.category}`,`tags: [${t.tags.map(e=>`"${e}"`).join(`, `)}]`,`created: ${t.created}`,`updated: ${t.updated}`,`version: ${t.version}`,`origin: ${t.origin}`,`changelog:`,...t.changelog.map(e=>` - version: ${e.version}\n date: ${e.date}\n reason: "${e.reason.replace(/"/g,`\\"`)}"`),`---`].join(`
|
|
4
|
+
`)}\n\n${e}\n`}parseFile(e){let t=e.match(/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/);if(!t)return{frontmatter:{title:`Untitled`,category:`notes`,tags:[],created:``,updated:``,version:1,origin:`curated`,changelog:[]},content:e};let n=t[1],r=t[2].trim(),i={},a=[],o=n.split(`
|
|
5
|
+
`),s=!1,c={};for(let e of o){if(/^changelog:\s*$/.test(e)){s=!0;continue}if(s){let t=e.match(/^\s+-\s+version:\s*(\d+)$/);if(t){c.version!=null&&a.push(c),c={version:parseInt(t[1],10)};continue}let n=e.match(/^\s+date:\s*(.+)$/);if(n){c.date=n[1].trim();continue}let r=e.match(/^\s+reason:\s*"?(.*?)"?\s*$/);if(r){c.reason=r[1];continue}/^\w/.test(e)&&(s=!1,c.version!=null&&a.push(c),c={});continue}let t=e.match(/^(\w+):\s*(.*)$/);if(t){let e=t[1],n=t[2];typeof n==`string`&&n.startsWith(`[`)&&n.endsWith(`]`)?n=n.slice(1,-1).split(`,`).map(e=>e.trim().replace(/^"|"$/g,``)).filter(e=>e.length>0):typeof n==`string`&&/^\d+$/.test(n)?n=parseInt(n,10):typeof n==`string`&&n.startsWith(`"`)&&n.endsWith(`"`)&&(n=n.slice(1,-1)),i[e]=n}}return c.version!=null&&a.push(c),{frontmatter:{title:i.title??`Untitled`,category:i.category??`notes`,tags:i.tags??[],created:i.created??``,updated:i.updated??``,version:i.version??1,origin:`curated`,changelog:a},content:r}}};export{m as CuratedKnowledgeManager};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
export { };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{loadConfig as e}from"./config.js";import{checkForUpdates as t}from"./version-check.js";import{ALL_TOOL_NAMES as n,createLazyServer as r,createMcpServer as i,initializeKnowledgeBase as a}from"./server.js";import{createLogger as o,serializeError as s}from"../../core/dist/index.js";import{parseArgs as c}from"node:util";const l=o(`server`),{values:u}=c({options:{transport:{type:`string`,default:process.env.KB_TRANSPORT??`stdio`},port:{type:`string`,default:process.env.KB_PORT??`3210`}}});async function d(){process.on(`unhandledRejection`,e=>{l.error(`Unhandled rejection`,s(e))}),l.info(`Starting MCP Knowledge Base server`);let o=e();if(l.info(`Config loaded`,{sourceCount:o.sources.length,storePath:o.store.path}),t(),u.transport===`http`){let{StreamableHTTPServerTransport:e}=await import(`@modelcontextprotocol/sdk/server/streamableHttp.js`),t=(await import(`express`)).default,r=await a(o),c=i(r,o);l.info(`MCP server configured`,{toolCount:n.length,resourceCount:2});let d=t();d.use(t.json()),d.use((e,t,n)=>{if(t.setHeader(`Access-Control-Allow-Origin`,process.env.KB_CORS_ORIGIN??`*`),t.setHeader(`Access-Control-Allow-Methods`,`GET, POST, DELETE, OPTIONS`),t.setHeader(`Access-Control-Allow-Headers`,`Content-Type, Authorization`),e.method===`OPTIONS`){t.status(204).end();return}n()}),d.get(`/health`,(e,t)=>{t.json({status:`ok`})}),d.post(`/mcp`,async(t,n)=>{try{let r=new e({sessionIdGenerator:void 0});await c.connect(r),await r.handleRequest(t,n,t.body),n.on(`close`,()=>{r.close()})}catch(e){l.error(`MCP handler error`,s(e)),n.headersSent||n.status(500).json({jsonrpc:`2.0`,error:{code:-32603,message:`Internal server error`},id:null})}}),d.get(`/mcp`,(e,t)=>{t.writeHead(405).end(JSON.stringify({jsonrpc:`2.0`,error:{code:-32e3,message:`Method not allowed.`},id:null}))}),d.delete(`/mcp`,(e,t)=>{t.writeHead(405).end(JSON.stringify({jsonrpc:`2.0`,error:{code:-32e3,message:`Method not allowed.`},id:null}))});let f=Number(u.port),p=d.listen(f,()=>{l.info(`MCP server listening`,{url:`http://0.0.0.0:${f}/mcp`,port:f}),(async()=>{try{let e=o.sources.map(e=>e.path).join(`, `);l.info(`Running initial index`,{sourcePaths:e});let t=await r.indexer.index(o,e=>{e.phase===`crawling`||e.phase===`done`||e.phase===`chunking`&&e.currentFile&&l.debug(`Indexing file`,{current:e.filesProcessed+1,total:e.filesTotal,file:e.currentFile})});l.info(`Initial index complete`,{filesProcessed:t.filesProcessed,filesSkipped:t.filesSkipped,chunksCreated:t.chunksCreated,durationMs:t.durationMs});try{let e=await r.curated.reindexAll();l.info(`Curated re-index complete`,{indexed:e.indexed})}catch(e){l.error(`Curated re-index failed`,s(e))}}catch(e){l.error(`Initial index failed; will retry on kb_reindex`,s(e))}})().catch(e=>l.error(`Initial index failed`,s(e)))}),m=async e=>{l.info(`Shutdown signal received`,{signal:e}),p.close(),await c.close(),await r.graphStore.close().catch(()=>{}),await r.store.close(),await r.embedder.shutdown(),process.exit(0)};process.on(`SIGINT`,()=>m(`SIGINT`)),process.on(`SIGTERM`,()=>m(`SIGTERM`))}else{let{server:e,ready:t,runInitialIndex:n}=r(o),{StdioServerTransport:i}=await import(`@modelcontextprotocol/sdk/server/stdio.js`),a=new i;await e.connect(a),l.info(`MCP server started`,{transport:`stdio`}),t.catch(e=>{l.error(`Initialization failed`,s(e)),process.exit(1)}),process.env.KB_AUTO_INDEX===`false`?l.warn(`Auto-index disabled; use kb_reindex to index manually`):n().catch(e=>l.error(`Initial index failed`,s(e)))}}d().catch(e=>{l.error(`Fatal error`,s(e)),process.exit(1)});export{};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/server/src/replay-interceptor.d.ts
|
|
6
4
|
/**
|
|
7
5
|
* Wrap the McpServer's registerTool method so that every tool invocation
|
|
8
6
|
* is logged to the replay JSONL audit trail.
|
|
9
7
|
*/
|
|
10
|
-
|
|
11
|
-
//#
|
|
8
|
+
declare function installReplayInterceptor(server: McpServer): void;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { installReplayInterceptor };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{replayAppend as
|
|
1
|
+
import{replayAppend as e}from"../../tools/dist/index.js";const t=/key|token|secret|auth|password|bearer/i,n=new Set([`eval`,`env`]);function r(e,r){if(n.has(e))return JSON.stringify({_redacted:!0,tool:e});if(e===`http`&&r.headers&&typeof r.headers==`object`){let e={...r},n={};for(let[e,i]of Object.entries(r.headers))n[e]=t.test(e)?`[REDACTED]`:i;return e.headers=n,JSON.stringify(e).slice(0,200)}return JSON.stringify(r).slice(0,200)}function i(t){let n=t.registerTool.bind(t);t.registerTool=(t,i,a)=>n(t,i,async(n,i)=>{let o=Date.now();try{let s=await a(n,i);return e({ts:new Date().toISOString(),source:`mcp`,tool:t,input:r(t,n),durationMs:Date.now()-o,status:`ok`,output:JSON.stringify(s).slice(0,200)}),s}catch(i){throw e({ts:new Date().toISOString(),source:`mcp`,tool:t,input:r(t,n),durationMs:Date.now()-o,status:`error`,output:i instanceof Error?i.message:String(i)}),i}})}export{i as installReplayInterceptor};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
//#
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { IKnowledgeStore } from "@kb/store";
|
|
3
|
+
|
|
4
|
+
//#region packages/server/src/resources/resources.d.ts
|
|
5
|
+
declare function registerResources(server: McpServer, store: IKnowledgeStore): void;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { registerResources };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
2
|
-
`),mimeType
|
|
1
|
+
function e(e,t){e.resource(`kb-status`,`kb://status`,{description:`Current knowledge base status and statistics`,mimeType:`text/plain`},async()=>{let e=await t.getStats();return{contents:[{uri:`kb://status`,text:`Knowledge Base: ${e.totalRecords} records from ${e.totalFiles} files. Last indexed: ${e.lastIndexedAt??`Never`}`,mimeType:`text/plain`}]}}),e.resource(`kb-file-tree`,`kb://file-tree`,{description:`List of all indexed source files`,mimeType:`text/plain`},async()=>({contents:[{uri:`kb://file-tree`,text:(await t.listSourcePaths()).sort().join(`
|
|
2
|
+
`),mimeType:`text/plain`}]}))}export{e as registerResources};
|