@vpxa/kb 0.1.13 → 0.1.15
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 +8 -2
- package/package.json +10 -7
- package/packages/analyzers/dist/blast-radius-analyzer.d.ts +17 -20
- package/packages/analyzers/dist/blast-radius-analyzer.js +6 -12
- package/packages/analyzers/dist/dependency-analyzer.d.ts +31 -27
- package/packages/analyzers/dist/dependency-analyzer.js +7 -9
- package/packages/analyzers/dist/diagram-generator.d.ts +12 -8
- package/packages/analyzers/dist/diagram-generator.js +3 -4
- package/packages/analyzers/dist/entry-point-analyzer.d.ts +39 -35
- package/packages/analyzers/dist/entry-point-analyzer.js +5 -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 +29 -25
- package/packages/analyzers/dist/knowledge-producer.js +16 -15
- package/packages/analyzers/dist/pattern-analyzer.d.ts +14 -10
- package/packages/analyzers/dist/pattern-analyzer.js +3 -5
- package/packages/analyzers/dist/regex-call-graph.d.ts +6 -12
- package/packages/analyzers/dist/regex-call-graph.js +2 -1
- package/packages/analyzers/dist/structure-analyzer.d.ts +13 -9
- package/packages/analyzers/dist/structure-analyzer.js +3 -4
- package/packages/analyzers/dist/symbol-analyzer.d.ts +12 -8
- package/packages/analyzers/dist/symbol-analyzer.js +8 -13
- package/packages/analyzers/dist/ts-call-graph.d.ts +16 -13
- package/packages/analyzers/dist/ts-call-graph.js +2 -1
- package/packages/analyzers/dist/types.d.ts +82 -79
- package/packages/analyzers/dist/types.js +1 -0
- package/packages/chunker/dist/call-graph-extractor.d.ts +13 -10
- package/packages/chunker/dist/call-graph-extractor.js +2 -1
- package/packages/chunker/dist/chunker-factory.d.ts +6 -2
- package/packages/chunker/dist/chunker-factory.js +2 -1
- package/packages/chunker/dist/chunker.interface.d.ts +8 -4
- package/packages/chunker/dist/chunker.interface.js +1 -0
- package/packages/chunker/dist/code-chunker.d.ts +16 -12
- package/packages/chunker/dist/code-chunker.js +12 -14
- package/packages/chunker/dist/generic-chunker.d.ts +14 -10
- package/packages/chunker/dist/generic-chunker.js +6 -5
- package/packages/chunker/dist/index.d.ts +8 -8
- package/packages/chunker/dist/index.js +1 -1
- package/packages/chunker/dist/markdown-chunker.d.ts +16 -12
- package/packages/chunker/dist/markdown-chunker.js +4 -10
- package/packages/chunker/dist/treesitter-chunker.d.ts +28 -31
- package/packages/chunker/dist/treesitter-chunker.js +7 -8
- package/packages/cli/dist/commands/analyze.d.ts +6 -2
- package/packages/cli/dist/commands/analyze.js +3 -3
- package/packages/cli/dist/commands/context-cmds.d.ts +6 -2
- package/packages/cli/dist/commands/context-cmds.js +2 -1
- package/packages/cli/dist/commands/environment.d.ts +6 -2
- package/packages/cli/dist/commands/environment.js +2 -2
- package/packages/cli/dist/commands/execution.d.ts +6 -2
- package/packages/cli/dist/commands/execution.js +2 -1
- package/packages/cli/dist/commands/graph.d.ts +6 -2
- package/packages/cli/dist/commands/graph.js +6 -6
- package/packages/cli/dist/commands/init/adapters.d.ts +27 -0
- package/packages/cli/dist/commands/init/adapters.js +2 -0
- package/packages/cli/dist/commands/init/config.d.ts +11 -0
- package/packages/cli/dist/commands/init/config.js +4 -0
- package/packages/cli/dist/commands/init/curated.d.ts +8 -0
- package/packages/cli/dist/commands/init/curated.js +2 -0
- package/packages/cli/dist/commands/init/index.d.ts +23 -0
- package/packages/cli/dist/commands/init/index.js +3 -0
- package/packages/cli/dist/commands/init/scaffold.d.ts +24 -0
- package/packages/cli/dist/commands/init/scaffold.js +2 -0
- package/packages/cli/dist/commands/init/templates.d.ts +10 -0
- package/packages/cli/dist/commands/init/templates.js +302 -0
- package/packages/cli/dist/commands/init.d.ts +8 -3
- package/packages/cli/dist/commands/init.js +120 -123
- package/packages/cli/dist/commands/knowledge.d.ts +6 -2
- package/packages/cli/dist/commands/knowledge.js +2 -1
- package/packages/cli/dist/commands/search.d.ts +6 -2
- package/packages/cli/dist/commands/search.js +2 -8
- package/packages/cli/dist/commands/system.d.ts +6 -2
- package/packages/cli/dist/commands/system.js +5 -7
- package/packages/cli/dist/commands/workspace.d.ts +6 -2
- package/packages/cli/dist/commands/workspace.js +2 -2
- package/packages/cli/dist/context.d.ts +7 -4
- package/packages/cli/dist/context.js +2 -1
- package/packages/cli/dist/helpers.d.ts +51 -47
- package/packages/cli/dist/helpers.js +6 -5
- package/packages/cli/dist/index.d.ts +4 -1
- package/packages/cli/dist/index.js +3 -2
- package/packages/cli/dist/kb-init.d.ts +48 -50
- package/packages/cli/dist/kb-init.js +2 -1
- package/packages/cli/dist/types.d.ts +8 -5
- package/packages/cli/dist/types.js +1 -0
- package/packages/core/dist/constants.d.ts +36 -33
- package/packages/core/dist/constants.js +2 -1
- package/packages/core/dist/content-detector.d.ts +8 -7
- package/packages/core/dist/content-detector.js +2 -1
- package/packages/core/dist/errors.d.ts +15 -12
- package/packages/core/dist/errors.js +2 -1
- package/packages/core/dist/index.d.ts +6 -6
- package/packages/core/dist/index.js +1 -1
- package/packages/core/dist/logger.d.ts +16 -7
- package/packages/core/dist/logger.js +2 -1
- package/packages/core/dist/types.d.ts +107 -91
- package/packages/core/dist/types.js +2 -0
- package/packages/embeddings/dist/embedder.interface.d.ts +22 -19
- 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 -22
- package/packages/embeddings/dist/onnx-embedder.js +2 -1
- package/packages/enterprise-bridge/dist/cache.d.ts +29 -0
- package/packages/enterprise-bridge/dist/cache.js +2 -0
- package/packages/enterprise-bridge/dist/er-client.d.ts +38 -0
- package/packages/enterprise-bridge/dist/er-client.js +2 -0
- package/packages/enterprise-bridge/dist/evolution-collector.d.ts +63 -0
- package/packages/enterprise-bridge/dist/evolution-collector.js +2 -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 +46 -0
- package/packages/enterprise-bridge/dist/policy-store.js +2 -0
- package/packages/enterprise-bridge/dist/push-adapter.d.ts +24 -0
- package/packages/enterprise-bridge/dist/push-adapter.js +2 -0
- package/packages/enterprise-bridge/dist/result-merger.d.ts +15 -0
- package/packages/enterprise-bridge/dist/result-merger.js +2 -0
- package/packages/enterprise-bridge/dist/types.d.ts +82 -0
- package/packages/enterprise-bridge/dist/types.js +2 -0
- package/packages/indexer/dist/file-hasher.d.ts +5 -2
- package/packages/indexer/dist/file-hasher.js +2 -1
- package/packages/indexer/dist/filesystem-crawler.d.ts +23 -20
- package/packages/indexer/dist/filesystem-crawler.js +2 -1
- package/packages/indexer/dist/graph-extractor.d.ts +9 -12
- package/packages/indexer/dist/graph-extractor.js +2 -1
- package/packages/indexer/dist/incremental-indexer.d.ts +49 -43
- package/packages/indexer/dist/incremental-indexer.js +2 -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 -2
- package/packages/server/dist/config.js +2 -1
- package/packages/server/dist/curated-manager.d.ts +79 -76
- package/packages/server/dist/curated-manager.js +6 -10
- package/packages/server/dist/index.d.ts +1 -2
- package/packages/server/dist/index.js +2 -1
- package/packages/server/dist/replay-interceptor.d.ts +6 -6
- package/packages/server/dist/replay-interceptor.js +2 -1
- package/packages/server/dist/resources/resources.d.ts +7 -3
- package/packages/server/dist/resources/resources.js +3 -2
- package/packages/server/dist/server.d.ts +34 -24
- package/packages/server/dist/server.js +2 -1
- package/packages/server/dist/tools/analyze.tools.d.ts +14 -10
- package/packages/server/dist/tools/analyze.tools.js +2 -3
- package/packages/server/dist/tools/audit.tool.d.ts +8 -4
- package/packages/server/dist/tools/audit.tool.js +2 -4
- package/packages/server/dist/tools/bridge.tools.d.ts +35 -0
- package/packages/server/dist/tools/bridge.tools.js +16 -0
- package/packages/server/dist/tools/evolution.tools.d.ts +8 -0
- package/packages/server/dist/tools/evolution.tools.js +6 -0
- package/packages/server/dist/tools/forge.tools.d.ts +13 -11
- package/packages/server/dist/tools/forge.tools.js +11 -13
- package/packages/server/dist/tools/forget.tool.d.ts +7 -3
- package/packages/server/dist/tools/forget.tool.js +2 -7
- package/packages/server/dist/tools/graph.tool.d.ts +7 -3
- package/packages/server/dist/tools/graph.tool.js +5 -5
- package/packages/server/dist/tools/list.tool.d.ts +7 -3
- package/packages/server/dist/tools/list.tool.js +3 -8
- package/packages/server/dist/tools/lookup.tool.d.ts +7 -3
- package/packages/server/dist/tools/lookup.tool.js +3 -9
- package/packages/server/dist/tools/onboard.tool.d.ts +8 -4
- package/packages/server/dist/tools/onboard.tool.js +3 -2
- package/packages/server/dist/tools/policy.tools.d.ts +8 -0
- package/packages/server/dist/tools/policy.tools.js +3 -0
- package/packages/server/dist/tools/produce.tool.d.ts +6 -2
- package/packages/server/dist/tools/produce.tool.js +3 -2
- package/packages/server/dist/tools/read.tool.d.ts +7 -3
- package/packages/server/dist/tools/read.tool.js +3 -6
- package/packages/server/dist/tools/reindex.tool.d.ts +10 -6
- package/packages/server/dist/tools/reindex.tool.js +3 -2
- package/packages/server/dist/tools/remember.tool.d.ts +8 -3
- package/packages/server/dist/tools/remember.tool.js +4 -5
- package/packages/server/dist/tools/replay.tool.d.ts +6 -2
- package/packages/server/dist/tools/replay.tool.js +3 -6
- package/packages/server/dist/tools/search.tool.d.ts +10 -4
- package/packages/server/dist/tools/search.tool.js +7 -22
- package/packages/server/dist/tools/status.tool.d.ts +7 -3
- package/packages/server/dist/tools/status.tool.js +3 -3
- package/packages/server/dist/tools/toolkit.tools.d.ts +36 -34
- package/packages/server/dist/tools/toolkit.tools.js +20 -24
- package/packages/server/dist/tools/update.tool.d.ts +7 -3
- package/packages/server/dist/tools/update.tool.js +2 -6
- package/packages/server/dist/tools/utility.tools.d.ts +15 -14
- package/packages/server/dist/tools/utility.tools.js +11 -23
- package/packages/server/dist/version-check.d.ts +5 -1
- package/packages/server/dist/version-check.js +2 -1
- package/packages/store/dist/graph-store.interface.d.ts +89 -86
- 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 -30
- package/packages/store/dist/lance-store.js +2 -1
- package/packages/store/dist/sqlite-graph-store.d.ts +43 -46
- package/packages/store/dist/sqlite-graph-store.js +14 -13
- package/packages/store/dist/store-factory.d.ts +11 -7
- package/packages/store/dist/store-factory.js +2 -1
- package/packages/store/dist/store.interface.d.ts +47 -46
- package/packages/store/dist/store.interface.js +1 -0
- package/packages/tools/dist/audit.d.ts +61 -61
- package/packages/tools/dist/audit.js +5 -5
- package/packages/tools/dist/batch.d.ts +20 -17
- package/packages/tools/dist/batch.js +2 -1
- package/packages/tools/dist/changelog.d.ts +29 -26
- package/packages/tools/dist/changelog.js +3 -2
- package/packages/tools/dist/check.d.ts +42 -38
- package/packages/tools/dist/check.js +3 -2
- package/packages/tools/dist/checkpoint.d.ts +17 -14
- package/packages/tools/dist/checkpoint.js +2 -2
- package/packages/tools/dist/codemod.d.ts +35 -32
- package/packages/tools/dist/codemod.js +3 -2
- package/packages/tools/dist/compact.d.ts +34 -37
- package/packages/tools/dist/compact.js +3 -2
- package/packages/tools/dist/data-transform.d.ts +10 -7
- package/packages/tools/dist/data-transform.js +2 -1
- package/packages/tools/dist/dead-symbols.d.ts +29 -25
- package/packages/tools/dist/dead-symbols.js +3 -2
- package/packages/tools/dist/delegate.d.ts +26 -23
- package/packages/tools/dist/delegate.js +2 -5
- package/packages/tools/dist/diff-parse.d.ts +24 -21
- package/packages/tools/dist/diff-parse.js +4 -3
- package/packages/tools/dist/digest.d.ts +43 -45
- package/packages/tools/dist/digest.js +5 -5
- package/packages/tools/dist/encode.d.ts +11 -8
- package/packages/tools/dist/encode.js +2 -1
- package/packages/tools/dist/env-info.d.ts +25 -22
- package/packages/tools/dist/env-info.js +2 -1
- package/packages/tools/dist/eval.d.ts +13 -10
- package/packages/tools/dist/eval.js +3 -3
- package/packages/tools/dist/evidence-map.d.ts +64 -61
- package/packages/tools/dist/evidence-map.js +3 -3
- package/packages/tools/dist/file-cache.d.ts +42 -0
- package/packages/tools/dist/file-cache.js +4 -0
- package/packages/tools/dist/file-summary.d.ts +34 -29
- package/packages/tools/dist/file-summary.js +3 -2
- package/packages/tools/dist/file-walk.d.ts +6 -3
- package/packages/tools/dist/file-walk.js +2 -1
- package/packages/tools/dist/find-examples.d.ts +26 -21
- package/packages/tools/dist/find-examples.js +4 -3
- package/packages/tools/dist/find.d.ts +39 -40
- package/packages/tools/dist/find.js +2 -1
- package/packages/tools/dist/forge-classify.d.ts +35 -38
- package/packages/tools/dist/forge-classify.js +3 -2
- package/packages/tools/dist/forge-ground.d.ts +58 -60
- package/packages/tools/dist/forge-ground.js +2 -1
- package/packages/tools/dist/git-context.d.ts +22 -19
- package/packages/tools/dist/git-context.js +4 -3
- package/packages/tools/dist/graph-query.d.ts +75 -78
- package/packages/tools/dist/graph-query.js +2 -1
- package/packages/tools/dist/guide.d.ts +14 -11
- package/packages/tools/dist/guide.js +2 -1
- package/packages/tools/dist/health.d.ts +13 -10
- package/packages/tools/dist/health.js +3 -2
- package/packages/tools/dist/http-request.d.ts +20 -17
- package/packages/tools/dist/http-request.js +2 -1
- package/packages/tools/dist/index.d.ts +54 -53
- package/packages/tools/dist/index.js +1 -1
- package/packages/tools/dist/lane.d.ts +28 -25
- package/packages/tools/dist/lane.js +7 -7
- package/packages/tools/dist/measure.d.ts +32 -29
- package/packages/tools/dist/measure.js +3 -2
- package/packages/tools/dist/onboard.d.ts +29 -26
- package/packages/tools/dist/onboard.js +18 -41
- package/packages/tools/dist/parse-output.d.ts +48 -45
- package/packages/tools/dist/parse-output.js +3 -2
- package/packages/tools/dist/path-resolver.d.ts +4 -1
- package/packages/tools/dist/path-resolver.js +2 -1
- package/packages/tools/dist/process-manager.d.ts +18 -15
- package/packages/tools/dist/process-manager.js +2 -1
- package/packages/tools/dist/queue.d.ts +28 -25
- package/packages/tools/dist/queue.js +2 -2
- package/packages/tools/dist/regex-test.d.ts +26 -23
- package/packages/tools/dist/regex-test.js +2 -1
- package/packages/tools/dist/rename.d.ts +28 -25
- package/packages/tools/dist/rename.js +3 -2
- package/packages/tools/dist/replay.d.ts +32 -29
- package/packages/tools/dist/replay.js +5 -6
- package/packages/tools/dist/response-envelope.d.ts +32 -29
- package/packages/tools/dist/response-envelope.js +2 -1
- package/packages/tools/dist/schema-validate.d.ts +15 -12
- package/packages/tools/dist/schema-validate.js +2 -1
- package/packages/tools/dist/scope-map.d.ts +45 -47
- package/packages/tools/dist/scope-map.js +2 -1
- package/packages/tools/dist/snippet.d.ts +26 -24
- package/packages/tools/dist/snippet.js +2 -1
- package/packages/tools/dist/stash.d.ts +13 -10
- package/packages/tools/dist/stash.js +2 -2
- package/packages/tools/dist/stratum-card.d.ts +27 -27
- package/packages/tools/dist/stratum-card.js +4 -5
- package/packages/tools/dist/symbol.d.ts +29 -25
- package/packages/tools/dist/symbol.js +4 -3
- package/packages/tools/dist/test-run.d.ts +19 -15
- package/packages/tools/dist/test-run.js +3 -2
- package/packages/tools/dist/text-utils.d.ts +6 -3
- package/packages/tools/dist/text-utils.js +3 -2
- package/packages/tools/dist/time-utils.d.ts +15 -12
- package/packages/tools/dist/time-utils.js +2 -1
- package/packages/tools/dist/trace.d.ts +24 -20
- package/packages/tools/dist/trace.js +3 -2
- package/packages/tools/dist/truncation.d.ts +6 -3
- package/packages/tools/dist/truncation.js +8 -14
- package/packages/tools/dist/watch.d.ts +28 -25
- package/packages/tools/dist/watch.js +2 -1
- package/packages/tools/dist/web-fetch.d.ts +35 -32
- package/packages/tools/dist/web-fetch.js +7 -12
- package/packages/tools/dist/web-search.d.ts +16 -13
- package/packages/tools/dist/web-search.js +2 -1
- package/packages/tools/dist/workset.d.ts +19 -16
- package/packages/tools/dist/workset.js +2 -2
- package/packages/tui/dist/App-BAlmxCCw.js +3 -0
- package/packages/tui/dist/App.d.ts +11 -5
- package/packages/tui/dist/App.js +1 -450
- package/packages/tui/dist/CuratedPanel-sYdZAICX.js +3 -0
- package/packages/tui/dist/LogPanel-DVB8Sv46.js +4 -0
- package/packages/tui/dist/SearchPanel-DREo6zgt.js +3 -0
- package/packages/tui/dist/StatusPanel-2ex8fLOO.js +3 -0
- package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
- package/packages/tui/dist/devtools-DUyj952l.js +8 -0
- package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +29 -0
- package/packages/tui/dist/index-B9VpfVPP.d.ts +14 -0
- package/packages/tui/dist/index.d.ts +3 -19
- package/packages/tui/dist/index.js +2 -476
- package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +317 -0
- package/packages/tui/dist/panels/CuratedPanel.d.ts +11 -5
- package/packages/tui/dist/panels/CuratedPanel.js +1 -371
- package/packages/tui/dist/panels/LogPanel.d.ts +7 -2
- package/packages/tui/dist/panels/LogPanel.js +1 -449
- package/packages/tui/dist/panels/SearchPanel.d.ts +14 -7
- package/packages/tui/dist/panels/SearchPanel.js +1 -372
- package/packages/tui/dist/panels/StatusPanel.d.ts +11 -5
- package/packages/tui/dist/panels/StatusPanel.js +1 -371
- package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +151 -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 +14 -0
- package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +14 -0
- package/scaffold/copilot/agents/Code-Reviewer-Alpha.agent.md +12 -0
- package/scaffold/copilot/agents/Code-Reviewer-Beta.agent.md +12 -0
- package/scaffold/copilot/agents/Debugger.agent.md +31 -0
- package/scaffold/copilot/agents/Documenter.agent.md +35 -0
- package/scaffold/copilot/agents/Explorer.agent.md +50 -0
- package/scaffold/copilot/agents/Frontend.agent.md +29 -0
- package/scaffold/copilot/agents/Implementer.agent.md +31 -0
- package/scaffold/copilot/agents/Orchestrator.agent.md +96 -0
- package/scaffold/copilot/agents/Planner.agent.md +45 -0
- package/scaffold/copilot/agents/README.md +57 -0
- package/scaffold/copilot/agents/Refactor.agent.md +30 -0
- package/scaffold/copilot/agents/Researcher-Alpha.agent.md +12 -0
- package/scaffold/copilot/agents/Researcher-Beta.agent.md +12 -0
- package/scaffold/copilot/agents/Researcher-Delta.agent.md +12 -0
- package/scaffold/copilot/agents/Researcher-Gamma.agent.md +12 -0
- package/scaffold/copilot/agents/Security.agent.md +42 -0
- package/scaffold/copilot/agents/_shared/adr-protocol.md +91 -0
- package/scaffold/copilot/agents/_shared/architect-reviewer-base.md +50 -0
- package/scaffold/copilot/agents/_shared/code-agent-base.md +70 -0
- package/scaffold/copilot/agents/_shared/code-reviewer-base.md +54 -0
- package/scaffold/copilot/agents/_shared/decision-protocol.md +27 -0
- package/scaffold/copilot/agents/_shared/forge-protocol.md +46 -0
- package/scaffold/copilot/agents/_shared/researcher-base.md +61 -0
- package/scaffold/copilot/agents/templates/adr-template.md +27 -0
- package/scaffold/copilot/agents/templates/execution-state.md +25 -0
- package/scaffold/copilot/prompts/ask.prompt.md +20 -0
- package/scaffold/copilot/prompts/debug.prompt.md +25 -0
- package/scaffold/copilot/prompts/design.prompt.md +22 -0
- package/scaffold/copilot/prompts/implement.prompt.md +26 -0
- package/scaffold/copilot/prompts/plan.prompt.md +24 -0
- package/scaffold/copilot/prompts/review.prompt.md +31 -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/generate.mjs +74 -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/knowledge-base/SKILL.md +22 -9
|
@@ -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,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
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 };
|
|
3
7
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1,2 @@
|
|
|
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{createLogger as a,serializeError as o}from"../../core/dist/index.js";const s=n(i(import.meta.url)),c=a(`server`);function l(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 u(){let i=process.env.KB_CONFIG_PATH??(e(r(process.cwd(),`kb.config.json`))?r(process.cwd(),`kb.config.json`):r(s,`..`,`..`,`..`,`kb.config.json`));try{let e=t(i,`utf-8`),a=JSON.parse(e);if(!a.sources||!Array.isArray(a.sources)||a.sources.length===0)throw Error(`Config must have at least one source`);if(!a.store?.path)throw Error(`Config must specify store.path`);let o=n(i);return a.sources=a.sources.map(e=>({...e,path:l(r(o,e.path),o,`source`)})),a.store.path=l(r(o,a.store.path),o,`store`),a.curated=a.curated??{path:`curated`},a.curated.path=l(r(o,a.curated.path),o,`curated`),a}catch(e){return c.error(`Failed to load config`,{configPath:i,...o(e)}),c.warn(`Falling back to default configuration`,{configPath:i}),d()}}function d(){let e=process.env.KB_WORKSPACE_ROOT??process.cwd();return{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,`.kb-data`)},curated:{path:r(e,`curated`)}}}export{u as loadConfig};
|
|
2
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -1,86 +1,89 @@
|
|
|
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
32
|
* Files are stored as markdown in a 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
|
-
|
|
87
|
+
//#endregion
|
|
88
|
+
export { CuratedCategory, CuratedEntry, CuratedKnowledgeManager };
|
|
86
89
|
//# sourceMappingURL=curated-manager.d.ts.map
|
|
@@ -1,10 +1,6 @@
|
|
|
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=`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=`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=`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 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};
|
|
6
|
+
//# sourceMappingURL=curated-manager.js.map
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
export { };
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{loadConfig as e}from"./config.js";import{checkForUpdates as t}from"./version-check.js";import{createLazyServer as n,createMcpServer as r,initializeKnowledgeBase as i}from"./server.js";import{createLogger as a,serializeError as o}from"../../core/dist/index.js";import{parseArgs as s}from"node:util";const c=a(`server`),{values:l}=s({options:{transport:{type:`string`,default:process.env.KB_TRANSPORT??`stdio`},port:{type:`string`,default:process.env.KB_PORT??`3210`}}});async function u(){process.on(`unhandledRejection`,e=>{c.error(`Unhandled rejection`,o(e))}),c.info(`Starting MCP Knowledge Base server`);let a=e();if(c.info(`Config loaded`,{sourceCount:a.sources.length,storePath:a.store.path}),t(),l.transport===`http`){let{StreamableHTTPServerTransport:e}=await import(`@modelcontextprotocol/sdk/server/streamableHttp.js`),t=(await import(`express`)).default,n=await i(a),s=r(n,a);c.info(`MCP server configured`,{toolCount:46,resourceCount:2});let u=t();u.use(t.json()),u.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()}),u.get(`/health`,(e,t)=>{t.json({status:`ok`})}),u.post(`/mcp`,async(t,n)=>{try{let r=new e({sessionIdGenerator:void 0});await s.connect(r),await r.handleRequest(t,n,t.body),n.on(`close`,()=>{r.close()})}catch(e){c.error(`MCP handler error`,o(e)),n.headersSent||n.status(500).json({jsonrpc:`2.0`,error:{code:-32603,message:`Internal server error`},id:null})}}),u.get(`/mcp`,(e,t)=>{t.writeHead(405).end(JSON.stringify({jsonrpc:`2.0`,error:{code:-32e3,message:`Method not allowed.`},id:null}))}),u.delete(`/mcp`,(e,t)=>{t.writeHead(405).end(JSON.stringify({jsonrpc:`2.0`,error:{code:-32e3,message:`Method not allowed.`},id:null}))});let d=Number(l.port),f=u.listen(d,()=>{c.info(`MCP server listening`,{url:`http://0.0.0.0:${d}/mcp`,port:d}),(async()=>{try{let e=a.sources.map(e=>e.path).join(`, `);c.info(`Running initial index`,{sourcePaths:e});let t=await n.indexer.index(a,e=>{e.phase===`crawling`||e.phase===`done`||e.phase===`chunking`&&e.currentFile&&c.debug(`Indexing file`,{current:e.filesProcessed+1,total:e.filesTotal,file:e.currentFile})});c.info(`Initial index complete`,{filesProcessed:t.filesProcessed,filesSkipped:t.filesSkipped,chunksCreated:t.chunksCreated,durationMs:t.durationMs});try{let e=await n.curated.reindexAll();c.info(`Curated re-index complete`,{indexed:e.indexed})}catch(e){c.error(`Curated re-index failed`,o(e))}}catch(e){c.error(`Initial index failed; will retry on kb_reindex`,o(e))}})().catch(e=>c.error(`Initial index failed`,o(e)))}),p=async e=>{c.info(`Shutdown signal received`,{signal:e}),f.close(),await s.close(),await n.graphStore.close().catch(()=>{}),await n.store.close(),await n.embedder.shutdown(),process.exit(0)};process.on(`SIGINT`,()=>p(`SIGINT`)),process.on(`SIGTERM`,()=>p(`SIGTERM`))}else{let{server:e,ready:t,runInitialIndex:r}=n(a),{StdioServerTransport:i}=await import(`@modelcontextprotocol/sdk/server/stdio.js`),s=new i;await e.connect(s),c.info(`MCP server started`,{transport:`stdio`}),t.catch(e=>{c.error(`Initialization failed`,o(e)),process.exit(1)}),process.env.KB_AUTO_INDEX===`false`?c.warn(`Auto-index disabled; use kb_reindex to index manually`):r().catch(e=>c.error(`Initial index failed`,o(e)))}}u().catch(e=>{c.error(`Fatal error`,o(e)),process.exit(1)});export{};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
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
|
-
|
|
8
|
+
declare function installReplayInterceptor(server: McpServer): void;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { installReplayInterceptor };
|
|
11
11
|
//# sourceMappingURL=replay-interceptor.d.ts.map
|
|
@@ -1 +1,2 @@
|
|
|
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};
|
|
2
|
+
//# sourceMappingURL=replay-interceptor.js.map
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
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 };
|
|
4
8
|
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -1,2 +1,3 @@
|
|
|
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};
|
|
3
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -1,31 +1,41 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { CuratedKnowledgeManager } from "./curated-manager.js";
|
|
2
|
+
import { BridgeComponents } from "./tools/bridge.tools.js";
|
|
3
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
+
import { KBConfig } from "@kb/core";
|
|
5
|
+
import { OnnxEmbedder } from "@kb/embeddings";
|
|
6
|
+
import { EvolutionCollector, PolicyStore } from "@kb/enterprise-bridge";
|
|
7
|
+
import { IncrementalIndexer } from "@kb/indexer";
|
|
8
|
+
import { IGraphStore, createStore } from "@kb/store";
|
|
9
|
+
import { FileCache } from "@kb/tools";
|
|
10
|
+
|
|
11
|
+
//#region packages/server/src/server.d.ts
|
|
12
|
+
interface KnowledgeBaseComponents {
|
|
13
|
+
embedder: OnnxEmbedder;
|
|
14
|
+
store: Awaited<ReturnType<typeof createStore>>;
|
|
15
|
+
indexer: IncrementalIndexer;
|
|
16
|
+
curated: CuratedKnowledgeManager;
|
|
17
|
+
graphStore: IGraphStore;
|
|
18
|
+
fileCache: FileCache;
|
|
19
|
+
bridge?: BridgeComponents;
|
|
20
|
+
policyStore?: PolicyStore;
|
|
21
|
+
evolutionCollector?: EvolutionCollector;
|
|
14
22
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
23
|
+
declare function initializeKnowledgeBase(config: KBConfig): Promise<KnowledgeBaseComponents>;
|
|
24
|
+
declare function createMcpServer(kb: KnowledgeBaseComponents, config: KBConfig): McpServer;
|
|
25
|
+
declare function registerMcpTools(server: McpServer, kb: KnowledgeBaseComponents, config: KBConfig): void;
|
|
18
26
|
/**
|
|
19
27
|
* Create a fully-initialized server (HTTP mode or when immediate readiness is needed).
|
|
20
28
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
declare function createServer(config: KBConfig): Promise<{
|
|
30
|
+
server: McpServer;
|
|
31
|
+
runInitialIndex: () => Promise<void>;
|
|
32
|
+
shutdown: () => Promise<void>;
|
|
25
33
|
}>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
declare function createLazyServer(config: KBConfig): {
|
|
35
|
+
server: McpServer;
|
|
36
|
+
ready: Promise<void>;
|
|
37
|
+
runInitialIndex: () => Promise<void>;
|
|
30
38
|
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { KnowledgeBaseComponents, createLazyServer, createMcpServer, createServer, initializeKnowledgeBase, registerMcpTools };
|
|
31
41
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{initializeTreeSitter as x}from"../../chunker/dist/index.js";import{OnnxEmbedder as y}from"../../embeddings/dist/index.js";import{IncrementalIndexer as w}from"../../indexer/dist/index.js";import{createStore as K,SqliteGraphStore as S}from"../../store/dist/index.js";import{McpServer as h}from"@modelcontextprotocol/sdk/server/mcp.js";import{CuratedKnowledgeManager as B}from"./curated-manager.js";import{installReplayInterceptor as C}from"./replay-interceptor.js";import{registerResources as I}from"./resources/resources.js";import{registerAnalyzeDependenciesTool as P,registerAnalyzeDiagramTool as _,registerAnalyzeEntryPointsTool as z,registerAnalyzePatternsTool as $,registerAnalyzeStructureTool as M,registerAnalyzeSymbolsTool as F,registerBlastRadiusTool as R}from"./tools/analyze.tools.js";import{registerAuditTool as b}from"./tools/audit.tool.js";import{registerDigestTool as E,registerEvidenceMapTool as A,registerForgeClassifyTool as G,registerForgeGroundTool as D,registerStratumCardTool as L}from"./tools/forge.tools.js";import{registerForgetTool as O}from"./tools/forget.tool.js";import{registerGraphTool as j}from"./tools/graph.tool.js";import{registerListTool as W}from"./tools/list.tool.js";import{registerLookupTool as q}from"./tools/lookup.tool.js";import{registerOnboardTool as H}from"./tools/onboard.tool.js";import{registerProduceKnowledgeTool as N}from"./tools/produce.tool.js";import{registerReadTool as Q}from"./tools/read.tool.js";import{registerReindexTool as U}from"./tools/reindex.tool.js";import{registerRememberTool as V}from"./tools/remember.tool.js";import{registerReplayTool as J}from"./tools/replay.tool.js";import{registerSearchTool as X}from"./tools/search.tool.js";import{registerStatusTool as Y}from"./tools/status.tool.js";import{registerBatchTool as Z,registerCheckpointTool as k,registerCheckTool as v,registerCodemodTool as ee,registerCompactTool as oe,registerDataTransformTool as re,registerDeadSymbolsTool as te,registerDelegateTool as ie,registerDiffParseTool as ne,registerEvalTool as se,registerFileSummaryTool as ae,registerFindTool as le,registerGitContextTool as de,registerGuideTool as ce,registerHealthTool as me,registerLaneTool as pe,registerParseOutputTool as ge,registerProcessTool as ue,registerQueueTool as he,registerRenameTool as Te,registerScopeMapTool as fe,registerStashTool as xe,registerSymbolTool as ye,registerTestRunTool as we,registerTraceTool as Ke,registerWatchTool as Se,registerWebFetchTool as Be,registerWorksetTool as Ce}from"./tools/toolkit.tools.js";import{registerUpdateTool as Ie}from"./tools/update.tool.js";import{registerChangelogTool as Pe,registerEncodeTool as _e,registerEnvTool as ze,registerHttpTool as $e,registerMeasureTool as Me,registerRegexTestTool as Fe,registerSchemaValidateTool as Re,registerSnippetTool as be,registerTimeTool as Ee,registerWebSearchTool as Ae}from"./tools/utility.tools.js";async function T(e){console.error("[KB] Initializing knowledge base components...");const o=new y({model:e.embedding.model,dimensions:e.embedding.dimensions});await o.initialize(),console.error(`[KB] Embedder loaded: ${o.modelId} (${o.dimensions}d)`);const n=await K({backend:e.store.backend,path:e.store.path});await n.initialize(),console.error("[KB] Store initialized");const d=new w(o,n),a=e.curated.path,c=new B(a,n,o),s=new S({path:e.store.path});await s.initialize(),console.error("[KB] Graph store initialized"),d.setGraphStore(s);const l=await x();return console.error(l?"[KB] Tree-sitter chunking enabled":"[KB] Tree-sitter not available \u2014 using regex-based code chunking"),{embedder:o,store:n,indexer:d,curated:c,graphStore:s}}function Ge(e,o){const n=new h({name:"kb",version:"0.1.0"});return f(n,e,o),n}function f(e,o,n){C(e),X(e,o.embedder,o.store,o.graphStore),q(e,o.store),Y(e,o.store,o.graphStore),U(e,o.indexer,n,o.curated,o.store),V(e,o.curated),Ie(e,o.curated),O(e,o.curated),Q(e,o.curated),W(e,o.curated),M(e,o.store,o.embedder),P(e,o.store,o.embedder),F(e,o.store,o.embedder),$(e,o.store,o.embedder),z(e,o.store,o.embedder),_(e,o.store,o.embedder),R(e,o.store,o.embedder),N(e),H(e,o.store,o.embedder),j(e,o.graphStore),b(e,o.store,o.embedder),oe(e,o.embedder),fe(e,o.embedder,o.store),le(e,o.embedder,o.store),ge(e),Ce(e),v(e),Z(e,o.embedder,o.store),ye(e,o.embedder,o.store),se(e),we(e),xe(e),de(e),ne(e),Te(e),ee(e),ae(e),k(e),re(e),Ke(e,o.embedder,o.store),ue(e),Se(e),te(e,o.embedder,o.store),ie(e),me(e),pe(e),he(e),Be(e),ce(e),A(e),E(e,o.embedder),G(e),L(e,o.embedder),D(e,o.embedder,o.store),Ae(e),$e(e),Fe(e),_e(e),Me(e),Pe(e),Re(e),be(e),ze(e),Ee(e),I(e,o.store),J(e)}async function mo(e){const o=await T(e),n=Ge(o,e);console.error("[KB] MCP server configured with 64 tools and 2 resources");const d=async()=>{try{const l=e.sources.map(r=>r.path).join(", ");console.error(`[KB] Running initial index for sources: ${l}`);const m=await o.indexer.index(e,r=>{r.phase==="crawling"||r.phase==="done"||(r.phase==="chunking"&&r.currentFile&&console.error(`[KB] [${r.filesProcessed+1}/${r.filesTotal}] ${r.currentFile}`),r.phase==="cleanup"&&console.error(`[KB] cleanup: removing ${r.filesTotal-r.filesProcessed} stale entries`))});console.error(`[KB] Indexed ${m.filesProcessed} files (${m.filesSkipped} skipped, ${m.chunksCreated} chunks) in ${(m.durationMs/1e3).toFixed(1)}s`);try{await o.store.createFtsIndex()}catch(r){console.error("[KB] FTS index creation failed (non-fatal):",r)}try{const r=await o.curated.reindexAll();console.error(`[KB] Curated re-index: ${r.indexed} entries restored to vector store`)}catch(r){console.error("[KB] Curated re-index failed:",r)}}catch(l){console.error("[KB] Initial index failed (will retry on kb_reindex):",l)}},a=async()=>{console.error("[KB] Shutting down..."),await o.graphStore.close().catch(()=>{}),await o.store.close(),process.exit(0)};process.on("SIGINT",a),process.on("SIGTERM",a);const c=process.ppid,s=setInterval(()=>{try{process.kill(c,0)}catch{console.error("[KB] Parent process died \u2014 orphan detected, shutting down..."),clearInterval(s),a()}},5e3);return s.unref(),{server:n,runInitialIndex:d,shutdown:a}}const De=["analyze_dependencies","analyze_diagram","analyze_entry_points","analyze_patterns","analyze_structure","analyze_symbols","batch","blast_radius","changelog","check","checkpoint","codemod","compact","data_transform","dead_symbols","delegate","diff_parse","digest","encode","env","eval","evidence_map","file_summary","find","forge_classify","forge_ground","forget","git_context","graph","guide","health","http","lane","list","lookup","measure","onboard","parse_output","process","produce_knowledge","queue","read","regex_test","reindex","remember","rename","replay","schema_validate","scope_map","search","snippet","stash","status","stratum_card","symbol","test_run","time","trace","update","watch","web_fetch","web_search","workset"];function po(e){const o=new h({name:"kb",version:"0.1.0"}),n="KB is still initializing, please retry in a few seconds.",d=De.map(i=>o.registerTool(i,{description:`${i} (initializing...)`,inputSchema:{}},async()=>({content:[{type:"text",text:n}]}))),a=o.resource("kb-status","kb://status",{description:"Knowledge base status (initializing...)",mimeType:"text/plain"},async()=>({contents:[{uri:"kb://status",text:"KB is initializing...",mimeType:"text/plain"}]}));let c;const s=new Promise(i=>{c=i}),l=(async()=>{const i=await T(e);for(const p of d)p.remove();a.remove(),f(o,i,e),console.error("[KB] MCP server configured with 64 tools and 2 resources"),c?.(i)})(),m=async()=>{const i=await s;try{const p=e.sources.map(t=>t.path).join(", ");console.error(`[KB] Running initial index for sources: ${p}`);const g=await i.indexer.index(e,t=>{t.phase==="crawling"||t.phase==="done"||(t.phase==="chunking"&&t.currentFile&&console.error(`[KB] [${t.filesProcessed+1}/${t.filesTotal}] ${t.currentFile}`),t.phase==="cleanup"&&console.error(`[KB] cleanup: removing ${t.filesTotal-t.filesProcessed} stale entries`))});console.error(`[KB] Indexed ${g.filesProcessed} files (${g.filesSkipped} skipped, ${g.chunksCreated} chunks) in ${(g.durationMs/1e3).toFixed(1)}s`);try{await i.store.createFtsIndex()}catch(t){console.error("[KB] FTS index creation failed (non-fatal):",t)}try{const t=await i.curated.reindexAll();console.error(`[KB] Curated re-index: ${t.indexed} entries restored to vector store`)}catch(t){console.error("[KB] Curated re-index failed:",t)}}catch(p){console.error("[KB] Initial index failed (will retry on kb_reindex):",p)}},r=process.ppid,u=setInterval(()=>{try{process.kill(r,0)}catch{console.error("[KB] Parent process died \u2014 orphan detected, shutting down..."),clearInterval(u),s.then(i=>{i.graphStore.close().catch(()=>{}),i.store.close()}).catch(()=>{}),process.exit(0)}},5e3);return u.unref(),{server:o,ready:l,runInitialIndex:m}}export{po as createLazyServer,Ge as createMcpServer,mo as createServer,T as initializeKnowledgeBase,f as registerMcpTools};
|
|
1
|
+
import{CuratedKnowledgeManager as e}from"./curated-manager.js";import{installReplayInterceptor as t}from"./replay-interceptor.js";import{registerResources as n}from"./resources/resources.js";import{registerAnalyzeDependenciesTool as r,registerAnalyzeDiagramTool as i,registerAnalyzeEntryPointsTool as a,registerAnalyzePatternsTool as o,registerAnalyzeStructureTool as s,registerAnalyzeSymbolsTool as c,registerBlastRadiusTool as l}from"./tools/analyze.tools.js";import{registerAuditTool as u}from"./tools/audit.tool.js";import{initBridgeComponents as d,registerErPullTool as ee,registerErPushTool as te,registerErSyncStatusTool as ne}from"./tools/bridge.tools.js";import{registerErEvolveReviewTool as re}from"./tools/evolution.tools.js";import{registerDigestTool as ie,registerEvidenceMapTool as ae,registerForgeClassifyTool as oe,registerForgeGroundTool as se,registerStratumCardTool as ce}from"./tools/forge.tools.js";import{registerForgetTool as le}from"./tools/forget.tool.js";import{registerGraphTool as f}from"./tools/graph.tool.js";import{registerListTool as p}from"./tools/list.tool.js";import{registerLookupTool as m}from"./tools/lookup.tool.js";import{registerOnboardTool as h}from"./tools/onboard.tool.js";import{registerErUpdatePolicyTool as g}from"./tools/policy.tools.js";import{registerProduceKnowledgeTool as _}from"./tools/produce.tool.js";import{registerReadTool as v}from"./tools/read.tool.js";import{registerReindexTool as y}from"./tools/reindex.tool.js";import{registerRememberTool as b}from"./tools/remember.tool.js";import{registerReplayTool as x}from"./tools/replay.tool.js";import{registerSearchTool as S}from"./tools/search.tool.js";import{registerStatusTool as C}from"./tools/status.tool.js";import{registerBatchTool as w,registerCheckTool as T,registerCheckpointTool as E,registerCodemodTool as D,registerCompactTool as O,registerDataTransformTool as k,registerDeadSymbolsTool as A,registerDelegateTool as j,registerDiffParseTool as M,registerEvalTool as N,registerFileSummaryTool as P,registerFindTool as F,registerGitContextTool as I,registerGuideTool as L,registerHealthTool as R,registerLaneTool as z,registerParseOutputTool as B,registerProcessTool as V,registerQueueTool as H,registerRenameTool as U,registerScopeMapTool as W,registerStashTool as ue,registerSymbolTool as de,registerTestRunTool as fe,registerTraceTool as pe,registerWatchTool as me,registerWebFetchTool as he,registerWorksetTool as ge}from"./tools/toolkit.tools.js";import{registerUpdateTool as _e}from"./tools/update.tool.js";import{registerChangelogTool as ve,registerEncodeTool as ye,registerEnvTool as be,registerHttpTool as xe,registerMeasureTool as Se,registerRegexTestTool as Ce,registerSchemaValidateTool as we,registerSnippetTool as Te,registerTimeTool as Ee,registerWebSearchTool as De}from"./tools/utility.tools.js";import{getCurrentVersion as G}from"./version-check.js";import{createLogger as Oe,serializeError as K}from"../../core/dist/index.js";import{initializeTreeSitter as ke}from"../../chunker/dist/index.js";import{OnnxEmbedder as Ae}from"../../embeddings/dist/index.js";import{EvolutionCollector as je,PolicyStore as Me}from"../../enterprise-bridge/dist/index.js";import{IncrementalIndexer as Ne}from"../../indexer/dist/index.js";import{SqliteGraphStore as q,createStore as Pe}from"../../store/dist/index.js";import{FileCache as Fe}from"../../tools/dist/index.js";import{McpServer as J}from"@modelcontextprotocol/sdk/server/mcp.js";const Y=Oe(`server`);async function X(t){Y.info(`Initializing knowledge base components`);let n=new Ae({model:t.embedding.model,dimensions:t.embedding.dimensions});await n.initialize(),Y.info(`Embedder loaded`,{modelId:n.modelId,dimensions:n.dimensions});let r=await Pe({backend:t.store.backend,path:t.store.path});await r.initialize(),Y.info(`Store initialized`);let i=new Ne(n,r),a=t.curated.path,o=new e(a,r,n),s=new q({path:t.store.path});await s.initialize(),Y.info(`Graph store initialized`),i.setGraphStore(s),await ke()?Y.info(`Tree-sitter chunking enabled`):Y.warn(`Tree-sitter not available; using regex-based code chunking`);let c=d(t.er),l=c?new Me(t.curated.path):void 0;l&&Y.info(`Policy store initialized`,{ruleCount:l.getRules().length});let u=c?new je:void 0;return{embedder:n,store:r,indexer:i,curated:o,graphStore:s,fileCache:new Fe,bridge:c,policyStore:l,evolutionCollector:u}}function Z(e,t){let n=new J({name:t.serverName??`knowledge-base`,version:G()});return Q(n,e,t),n}function Q(e,d,G){t(e),S(e,d.embedder,d.store,d.graphStore,d.bridge,d.evolutionCollector),m(e,d.store),C(e,d.store,d.graphStore),y(e,d.indexer,G,d.curated,d.store),b(e,d.curated,d.policyStore,d.evolutionCollector),_e(e,d.curated),le(e,d.curated),v(e,d.curated),p(e,d.curated),s(e,d.store,d.embedder),r(e,d.store,d.embedder),c(e,d.store,d.embedder),o(e,d.store,d.embedder),a(e,d.store,d.embedder),i(e,d.store,d.embedder),l(e,d.store,d.embedder),_(e),h(e,d.store,d.embedder),f(e,d.graphStore),u(e,d.store,d.embedder),O(e,d.embedder,d.fileCache),W(e,d.embedder,d.store),F(e,d.embedder,d.store),B(e),ge(e),T(e),w(e,d.embedder,d.store),de(e,d.embedder,d.store),N(e),fe(e),ue(e),I(e),M(e),U(e),D(e),P(e,d.fileCache),E(e),k(e),pe(e,d.embedder,d.store),V(e),me(e),A(e,d.embedder,d.store),j(e),R(e),z(e),H(e),he(e),L(e),ae(e),ie(e,d.embedder),oe(e),ce(e,d.embedder,d.fileCache),se(e,d.embedder,d.store),De(e),xe(e),Ce(e),ye(e),Se(e),ve(e),we(e),Te(e),be(e),Ee(e),d.bridge&&(te(e,d.bridge,d.evolutionCollector),ee(e,d.bridge),ne(e,d.bridge)),d.policyStore&&g(e,d.policyStore),d.evolutionCollector&&re(e,d.evolutionCollector),n(e,d.store),x(e)}async function Ie(e){let t=await X(e),n=Z(t,e);Y.info(`MCP server configured`,{toolCount:$.length,resourceCount:2});let r=async()=>{try{let n=e.sources.map(e=>e.path).join(`, `);Y.info(`Running initial index`,{sourcePaths:n});let r=await t.indexer.index(e,e=>{e.phase===`crawling`||e.phase===`done`||(e.phase===`chunking`&&e.currentFile&&Y.debug(`Indexing file`,{current:e.filesProcessed+1,total:e.filesTotal,file:e.currentFile}),e.phase===`cleanup`&&Y.debug(`Index cleanup`,{staleEntries:e.filesTotal-e.filesProcessed}))});Y.info(`Initial index complete`,{filesProcessed:r.filesProcessed,filesSkipped:r.filesSkipped,chunksCreated:r.chunksCreated,durationMs:r.durationMs});try{await t.store.createFtsIndex()}catch(e){Y.warn(`FTS index creation failed`,K(e))}try{let e=await t.curated.reindexAll();Y.info(`Curated re-index complete`,{indexed:e.indexed})}catch(e){Y.error(`Curated re-index failed`,K(e))}}catch(e){Y.error(`Initial index failed; will retry on kb_reindex`,K(e))}},i=async()=>{Y.info(`Shutting down`),await t.embedder.shutdown().catch(()=>{}),await t.graphStore.close().catch(()=>{}),await t.store.close(),process.exit(0)};process.on(`SIGINT`,i),process.on(`SIGTERM`,i);let a=process.ppid,o=setInterval(()=>{try{process.kill(a,0)}catch{Y.info(`Parent process died; shutting down`,{parentPid:a}),clearInterval(o),i()}},5e3);return o.unref(),{server:n,runInitialIndex:r,shutdown:i}}const Le=new Set(`batch.changelog.check.checkpoint.codemod.data_transform.delegate.diff_parse.encode.env.eval.evidence_map.file_summary.forge_classify.git_context.guide.health.http.lane.measure.parse_output.process.queue.read.regex_test.reindex.remember.rename.replay.schema_validate.snippet.stash.test_run.time.update.forget.list.watch.web_fetch.web_search.workset`.split(`.`)),$=`analyze_dependencies.analyze_diagram.analyze_entry_points.analyze_patterns.analyze_structure.analyze_symbols.audit.batch.blast_radius.changelog.check.checkpoint.codemod.compact.data_transform.dead_symbols.delegate.diff_parse.digest.encode.env.eval.evidence_map.file_summary.find.forge_classify.forge_ground.forget.git_context.graph.guide.health.http.lane.list.lookup.measure.onboard.parse_output.process.produce_knowledge.queue.read.regex_test.reindex.remember.rename.replay.schema_validate.scope_map.search.snippet.stash.status.stratum_card.symbol.test_run.time.trace.update.watch.web_fetch.web_search.workset`.split(`.`);function Re(e){let t=new J({name:e.serverName??`knowledge-base`,version:G()}),n=$.map(e=>t.registerTool(e,{description:`${e} (initializing...)`,inputSchema:{}},async()=>({content:[{type:`text`,text:`KB is still initializing, please retry in a few seconds.`}]}))),r=t.resource(`kb-status`,`kb://status`,{description:`Knowledge base status (initializing...)`,mimeType:`text/plain`},async()=>({contents:[{uri:`kb://status`,text:`KB is initializing...`,mimeType:`text/plain`}]})),i,a=new Promise(e=>{i=e}),o=(async()=>{let a=await X(e);for(let e of n)e.remove();r.remove(),Q(t,a,e);let o=t._registeredTools??{};for(let[e,t]of Object.entries(o)){if(Le.has(e))continue;let n=t.handler;t.handler=async(...t)=>{if(!a.indexer.isIndexing)return n(...t);let r=new Promise(t=>setTimeout(()=>t({content:[{type:`text`,text:`⏳ KB is currently indexing. The tool "${e}" requires indexed data and cannot complete right now.\n\nPlease retry in a minute, or use index-independent tools (eval, check, encode, regex_test, stash, etc.) in the meantime.\n\nTo check progress, try again shortly — indexing will complete automatically.`}]}),5e3));return Promise.race([n(...t),r])}}let s=Object.keys(o).length;s!==$.length&&Y.warn(`ALL_TOOL_NAMES count mismatch`,{expectedToolCount:$.length,registeredToolCount:s}),Y.info(`MCP server configured`,{toolCount:$.length,resourceCount:2}),i?.(a)})(),s=async()=>{let t=await a;try{let n=e.sources.map(e=>e.path).join(`, `);Y.info(`Running initial index`,{sourcePaths:n});let r=await t.indexer.index(e,e=>{e.phase===`crawling`||e.phase===`done`||(e.phase===`chunking`&&e.currentFile&&Y.debug(`Indexing file`,{current:e.filesProcessed+1,total:e.filesTotal,file:e.currentFile}),e.phase===`cleanup`&&Y.debug(`Index cleanup`,{staleEntries:e.filesTotal-e.filesProcessed}))});Y.info(`Initial index complete`,{filesProcessed:r.filesProcessed,filesSkipped:r.filesSkipped,chunksCreated:r.chunksCreated,durationMs:r.durationMs});try{await t.store.createFtsIndex()}catch(e){Y.warn(`FTS index creation failed`,K(e))}try{let e=await t.curated.reindexAll();Y.info(`Curated re-index complete`,{indexed:e.indexed})}catch(e){Y.error(`Curated re-index failed`,K(e))}}catch(e){Y.error(`Initial index failed; will retry on kb_reindex`,K(e))}},c=process.ppid,l=setInterval(()=>{try{process.kill(c,0)}catch{Y.info(`Parent process died; shutting down`,{parentPid:c}),clearInterval(l),a.then(async e=>{await e.embedder.shutdown().catch(()=>{}),await e.graphStore.close().catch(()=>{}),await e.store.close().catch(()=>{})}).catch(()=>{}).finally(()=>process.exit(0))}},5e3);return l.unref(),{server:t,ready:o,runInitialIndex:s}}export{Re as createLazyServer,Z as createMcpServer,Ie as createServer,X as initializeKnowledgeBase,Q as registerMcpTools};
|
|
2
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { IEmbedder } from "@kb/embeddings";
|
|
3
|
+
import { IKnowledgeStore } from "@kb/store";
|
|
4
|
+
|
|
5
|
+
//#region packages/server/src/tools/analyze.tools.d.ts
|
|
6
|
+
declare function registerAnalyzeStructureTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
7
|
+
declare function registerAnalyzeDependenciesTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
8
|
+
declare function registerAnalyzeSymbolsTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
9
|
+
declare function registerAnalyzePatternsTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
10
|
+
declare function registerAnalyzeEntryPointsTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
11
|
+
declare function registerAnalyzeDiagramTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
12
|
+
declare function registerBlastRadiusTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { registerAnalyzeDependenciesTool, registerAnalyzeDiagramTool, registerAnalyzeEntryPointsTool, registerAnalyzePatternsTool, registerAnalyzeStructureTool, registerAnalyzeSymbolsTool, registerBlastRadiusTool };
|
|
11
15
|
//# sourceMappingURL=analyze.tools.d.ts.map
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import{createHash as
|
|
2
|
-
|
|
3
|
-
> **\u26A0 Caveats:** ${r.join("; ")}`}async function u(r,n,a,o,e){try{const t=g("sha256").update(o).digest("hex").slice(0,12),i=`produced/analysis/${a}/${t}.md`,c=g("sha256").update(e).digest("hex").slice(0,16),d=new Date().toISOString(),l=e.length>2e3?e.split(/(?=^## )/m).filter(p=>p.trim().length>0):[e],m=l.map((p,x)=>({id:g("sha256").update(`${i}::${x}`).digest("hex").slice(0,16),content:p.trim(),sourcePath:i,contentType:"produced-knowledge",chunkIndex:x,totalChunks:l.length,startLine:0,endLine:0,fileHash:c,indexedAt:d,origin:"produced",tags:["analysis",a],category:"analysis",version:1})),b=await n.embedBatch(m.map(p=>p.content));await r.upsert(m,b),console.error(`[KB] Auto-persisted ${a} analysis (${m.length} chunks)`)}catch(t){console.error(`[KB] Auto-persist ${a} failed:`,t)}}function M(r,n,a){const o=new A;r.registerTool("analyze_structure",{description:"Analyze the file/directory structure of a codebase. Returns an annotated tree with language stats.",inputSchema:{path:s.string().describe("Root path to analyze"),max_depth:s.number().min(1).max(10).default(6).describe("Maximum directory depth"),format:s.enum(["json","markdown"]).default("markdown").describe("Output format"),max_tokens:f}},async({path:e,max_depth:t,format:i,max_tokens:c})=>{try{const d=await o.analyze(e,{format:i,maxDepth:t});return u(n,a,"structure",e,d.output),{content:[{type:"text",text:h(d.output+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` for import graphs, or `analyze_patterns` to detect architecture patterns._",c)}]}}catch(d){return{content:[{type:"text",text:`Analysis failed: ${d.message}`}],isError:!0}}})}function j(r,n,a){const o=new z;r.registerTool("analyze_dependencies",{description:"Analyze import/require dependencies across a codebase. Shows external packages and internal module graph.",inputSchema:{path:s.string().describe("Root path to analyze"),format:s.enum(["json","markdown","mermaid"]).default("markdown").describe("Output format"),max_tokens:f}},async({path:e,format:t,max_tokens:i})=>{try{const c=await o.analyze(e,{format:t});return u(n,a,"dependencies",e,c.output),{content:[{type:"text",text:h(c.output+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_symbols` to explore exported symbols, or `analyze_diagram` for visual representation._",i)}]}}catch(c){return{content:[{type:"text",text:`Analysis failed: ${c.message}`}],isError:!0}}})}function D(r,n,a){const o=new E;r.registerTool("analyze_symbols",{description:"Extract exported and local symbols (functions, classes, interfaces, types, constants) from a codebase.",inputSchema:{path:s.string().describe("Root path to analyze"),filter:s.string().optional().describe("Filter symbols by name substring"),format:s.enum(["json","markdown"]).default("markdown").describe("Output format")}},async({path:e,filter:t,format:i})=>{try{const c=await o.analyze(e,{format:i,filter:t});return u(n,a,"symbols",e,c.output),{content:[{type:"text",text:c.output+y()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see import relationships, or `search` to find usage patterns._"}]}}catch(c){return{content:[{type:"text",text:`Analysis failed: ${c.message}`}],isError:!0}}})}function U(r,n,a){const o=new S;r.registerTool("analyze_patterns",{description:"Detect architectural patterns, frameworks, and conventions in a codebase using directory structure and code heuristics.",inputSchema:{path:s.string().describe("Root path to analyze")}},async({path:e})=>{try{const t=await o.analyze(e);return u(n,a,"patterns",e,t.output),{content:[{type:"text",text:t.output+y()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_entry_points` to find Lambda handlers and main exports, or `produce_knowledge` for full analysis._"}]}}catch(t){return{content:[{type:"text",text:`Analysis failed: ${t.message}`}],isError:!0}}})}function C(r,n,a){const o=new v;r.registerTool("analyze_entry_points",{description:"Find entry points: Lambda handlers, main exports, CLI bins, and server start scripts.",inputSchema:{path:s.string().describe("Root path to analyze")}},async({path:e})=>{try{const t=await o.analyze(e);return u(n,a,"entry-points",e,t.output),{content:[{type:"text",text:t.output+y()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see what each entry point imports, or `produce_knowledge` for comprehensive analysis._"}]}}catch(t){return{content:[{type:"text",text:`Analysis failed: ${t.message}`}],isError:!0}}})}function O(r,n,a){const o=new _;r.registerTool("analyze_diagram",{description:"Generate a Mermaid diagram of the codebase architecture or dependency graph.",inputSchema:{path:s.string().describe("Root path to analyze"),diagram_type:s.enum(["architecture","dependencies"]).default("architecture").describe("Type of diagram")}},async({path:e,diagram_type:t})=>{try{const i=await o.analyze(e,{diagramType:t});return u(n,a,"diagram",e,i.output),{content:[{type:"text",text:i.output+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_structure` for detailed file tree, or `produce_knowledge` for comprehensive analysis._"}]}}catch(i){return{content:[{type:"text",text:`Diagram generation failed: ${i.message}`}],isError:!0}}})}function P(r,n,a){const o=new w;r.registerTool("blast_radius",{description:"Given a list of changed files, trace the dependency graph to find all affected files (direct + transitive importers) and their tests. Useful for scoping code reviews and impact analysis.",inputSchema:{path:s.string().describe("Root path of the codebase"),files:s.array(s.string()).min(1).describe("Changed file paths (relative to root)"),max_depth:s.number().min(1).max(20).default(5).describe("Maximum transitive dependency depth"),format:s.enum(["json","markdown"]).default("markdown").describe("Output format"),max_tokens:f}},async({path:e,files:t,max_depth:i,format:c,max_tokens:d})=>{try{const l=await o.analyze(e,{files:t,maxDepth:i,format:c});return u(n,a,"blast-radius",e,l.output),{content:[{type:"text",text:h(l.output+y()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see the full import graph, or `analyze_symbols` to inspect affected exports._",d)}]}}catch(l){return{content:[{type:"text",text:`Blast radius analysis failed: ${l.message}`}],isError:!0}}})}export{j as registerAnalyzeDependenciesTool,O as registerAnalyzeDiagramTool,C as registerAnalyzeEntryPointsTool,U as registerAnalyzePatternsTool,M as registerAnalyzeStructureTool,D as registerAnalyzeSymbolsTool,P as registerBlastRadiusTool};
|
|
1
|
+
import{createHash as e}from"node:crypto";import{BlastRadiusAnalyzer as t,DependencyAnalyzer as n,DiagramGenerator as r,EntryPointAnalyzer as i,PatternAnalyzer as a,StructureAnalyzer as o,SymbolAnalyzer as s}from"../../../analyzers/dist/index.js";import{TreeSitterRuntime as c}from"../../../chunker/dist/index.js";import{createLogger as l,serializeError as u}from"../../../core/dist/index.js";import{truncateToTokenBudget as d}from"../../../tools/dist/index.js";import{z as f}from"zod";const p=l(`tools`),m=f.number().min(100).max(5e4).optional().describe(`Maximum token budget for the response. When set, output is truncated to fit.`);function h(e,t){return t?d(e,t):e}function g(){let e=[];return c.get()||e.push(`Tree-sitter unavailable — using regex fallback, symbol/pattern confidence reduced`),e.length===0?``:`\n\n> **⚠ Caveats:** ${e.join(`; `)}`}async function _(t,n,r,i,a){try{let o=`produced/analysis/${r}/${e(`sha256`).update(i).digest(`hex`).slice(0,12)}.md`,s=e(`sha256`).update(a).digest(`hex`).slice(0,16),c=new Date().toISOString(),l=a.length>2e3?a.split(/(?=^## )/m).filter(e=>e.trim().length>0):[a],u=l.map((t,n)=>({id:e(`sha256`).update(`${o}::${n}`).digest(`hex`).slice(0,16),content:t.trim(),sourcePath:o,contentType:`produced-knowledge`,chunkIndex:n,totalChunks:l.length,startLine:0,endLine:0,fileHash:s,indexedAt:c,origin:`produced`,tags:[`analysis`,r],category:`analysis`,version:1})),d=await n.embedBatch(u.map(e=>e.content));await t.upsert(u,d),p.info(`Auto-persisted analysis`,{analyzerName:r,chunkCount:u.length})}catch(e){p.warn(`Auto-persist analysis failed`,{analyzerName:r,...u(e)})}}function v(e,t,n){let r=new o;e.registerTool(`analyze_structure`,{description:`Analyze the file/directory structure of a codebase. Returns an annotated tree with language stats.`,inputSchema:{path:f.string().describe(`Root path to analyze`),max_depth:f.number().min(1).max(10).default(6).describe(`Maximum directory depth`),format:f.enum([`json`,`markdown`]).default(`markdown`).describe(`Output format`),max_tokens:m}},async({path:e,max_depth:i,format:a,max_tokens:o})=>{try{let s=await r.analyze(e,{format:a,maxDepth:i});return _(t,n,`structure`,e,s.output),{content:[{type:`text`,text:h(s.output+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` for import graphs, or `analyze_patterns` to detect architecture patterns._",o)}]}}catch(e){return p.error(`Analysis failed`,u(e)),{content:[{type:`text`,text:`Analysis failed. Check server logs for details.`}],isError:!0}}})}function y(e,t,r){let i=new n;e.registerTool(`analyze_dependencies`,{description:`Analyze import/require dependencies across a codebase. Shows external packages and internal module graph.`,inputSchema:{path:f.string().describe(`Root path to analyze`),format:f.enum([`json`,`markdown`,`mermaid`]).default(`markdown`).describe(`Output format`),max_tokens:m}},async({path:e,format:n,max_tokens:a})=>{try{let o=await i.analyze(e,{format:n});return _(t,r,`dependencies`,e,o.output),{content:[{type:`text`,text:h(o.output+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_symbols` to explore exported symbols, or `analyze_diagram` for visual representation._",a)}]}}catch(e){return p.error(`Analysis failed`,u(e)),{content:[{type:`text`,text:`Analysis failed. Check server logs for details.`}],isError:!0}}})}function b(e,t,n){let r=new s;e.registerTool(`analyze_symbols`,{description:`Extract exported and local symbols (functions, classes, interfaces, types, constants) from a codebase.`,inputSchema:{path:f.string().describe(`Root path to analyze`),filter:f.string().optional().describe(`Filter symbols by name substring`),format:f.enum([`json`,`markdown`]).default(`markdown`).describe(`Output format`)}},async({path:e,filter:i,format:a})=>{try{let o=await r.analyze(e,{format:a,filter:i});return _(t,n,`symbols`,e,o.output),{content:[{type:`text`,text:o.output+g()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see import relationships, or `search` to find usage patterns._"}]}}catch(e){return p.error(`Analysis failed`,u(e)),{content:[{type:`text`,text:`Analysis failed. Check server logs for details.`}],isError:!0}}})}function x(e,t,n){let r=new a;e.registerTool(`analyze_patterns`,{description:`Detect architectural patterns, frameworks, and conventions in a codebase using directory structure and code heuristics.`,inputSchema:{path:f.string().describe(`Root path to analyze`)}},async({path:e})=>{try{let i=await r.analyze(e);return _(t,n,`patterns`,e,i.output),{content:[{type:`text`,text:i.output+g()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_entry_points` to find Lambda handlers and main exports, or `produce_knowledge` for full analysis._"}]}}catch(e){return p.error(`Analysis failed`,u(e)),{content:[{type:`text`,text:`Analysis failed. Check server logs for details.`}],isError:!0}}})}function S(e,t,n){let r=new i;e.registerTool(`analyze_entry_points`,{description:`Find entry points: Lambda handlers, main exports, CLI bins, and server start scripts.`,inputSchema:{path:f.string().describe(`Root path to analyze`)}},async({path:e})=>{try{let i=await r.analyze(e);return _(t,n,`entry-points`,e,i.output),{content:[{type:`text`,text:i.output+g()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see what each entry point imports, or `produce_knowledge` for comprehensive analysis._"}]}}catch(e){return p.error(`Analysis failed`,u(e)),{content:[{type:`text`,text:`Analysis failed. Check server logs for details.`}],isError:!0}}})}function C(e,t,n){let i=new r;e.registerTool(`analyze_diagram`,{description:`Generate a Mermaid diagram of the codebase architecture or dependency graph.`,inputSchema:{path:f.string().describe(`Root path to analyze`),diagram_type:f.enum([`architecture`,`dependencies`]).default(`architecture`).describe(`Type of diagram`)}},async({path:e,diagram_type:r})=>{try{let a=await i.analyze(e,{diagramType:r});return _(t,n,`diagram`,e,a.output),{content:[{type:`text`,text:a.output+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_structure` for detailed file tree, or `produce_knowledge` for comprehensive analysis._"}]}}catch(e){return p.error(`Diagram generation failed`,u(e)),{content:[{type:`text`,text:`Diagram generation failed. Check server logs for details.`}],isError:!0}}})}function w(e,n,r){let i=new t;e.registerTool(`blast_radius`,{description:`Given a list of changed files, trace the dependency graph to find all affected files (direct + transitive importers) and their tests. Useful for scoping code reviews and impact analysis.`,inputSchema:{path:f.string().describe(`Root path of the codebase`),files:f.array(f.string()).min(1).describe(`Changed file paths (relative to root)`),max_depth:f.number().min(1).max(20).default(5).describe(`Maximum transitive dependency depth`),format:f.enum([`json`,`markdown`]).default(`markdown`).describe(`Output format`),max_tokens:m}},async({path:e,files:t,max_depth:a,format:o,max_tokens:s})=>{try{let c=await i.analyze(e,{files:t,maxDepth:a,format:o});return _(n,r,`blast-radius`,e,c.output),{content:[{type:`text`,text:h(c.output+g()+"\n\n---\n_Analysis auto-saved to KB. Next: Use `analyze_dependencies` to see the full import graph, or `analyze_symbols` to inspect affected exports._",s)}]}}catch(e){return p.error(`Blast radius analysis failed`,u(e)),{content:[{type:`text`,text:`Blast radius analysis failed. Check server logs for details.`}],isError:!0}}})}export{y as registerAnalyzeDependenciesTool,C as registerAnalyzeDiagramTool,S as registerAnalyzeEntryPointsTool,x as registerAnalyzePatternsTool,v as registerAnalyzeStructureTool,b as registerAnalyzeSymbolsTool,w as registerBlastRadiusTool};
|
|
2
|
+
//# sourceMappingURL=analyze.tools.js.map
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { IEmbedder } from "@kb/embeddings";
|
|
3
|
+
import { IKnowledgeStore } from "@kb/store";
|
|
4
|
+
|
|
5
|
+
//#region packages/server/src/tools/audit.tool.d.ts
|
|
6
|
+
declare function registerAuditTool(server: McpServer, store: IKnowledgeStore, embedder: IEmbedder): void;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { registerAuditTool };
|
|
5
9
|
//# sourceMappingURL=audit.tool.d.ts.map
|