@lzehrung/codegraph 2.1.1 → 2.2.0
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 +2 -2
- package/codegraph-skill/codegraph/SKILL.md +25 -7
- package/dist/agent/artifact.d.ts.map +1 -1
- package/dist/agent/artifact.js +105 -14
- package/dist/agent/artifact.js.map +1 -1
- package/dist/agent/explain.d.ts +3 -0
- package/dist/agent/explain.d.ts.map +1 -1
- package/dist/agent/explain.js +8 -0
- package/dist/agent/explain.js.map +1 -1
- package/dist/agent/explore.d.ts.map +1 -1
- package/dist/agent/explore.js +8 -1
- package/dist/agent/explore.js.map +1 -1
- package/dist/agent/handles.d.ts.map +1 -1
- package/dist/agent/handles.js +2 -8
- package/dist/agent/handles.js.map +1 -1
- package/dist/agent/orient.js +2 -16
- package/dist/agent/orient.js.map +1 -1
- package/dist/agent/packet.d.ts.map +1 -1
- package/dist/agent/packet.js +5 -12
- package/dist/agent/packet.js.map +1 -1
- package/dist/agent/query-index/content.d.ts +1 -1
- package/dist/agent/query-index/content.js +4 -4
- package/dist/agent/query-index/content.js.map +1 -1
- package/dist/agent/query-index/store.d.ts +5 -4
- package/dist/agent/query-index/store.d.ts.map +1 -1
- package/dist/agent/query-index/store.js +56 -18
- package/dist/agent/query-index/store.js.map +1 -1
- package/dist/agent/query-index/update.d.ts.map +1 -1
- package/dist/agent/query-index/update.js +24 -9
- package/dist/agent/query-index/update.js.map +1 -1
- package/dist/agent/renamePreview.d.ts.map +1 -1
- package/dist/agent/renamePreview.js +51 -2
- package/dist/agent/renamePreview.js.map +1 -1
- package/dist/agent/search.d.ts +3 -1
- package/dist/agent/search.d.ts.map +1 -1
- package/dist/agent/search.js +64 -18
- package/dist/agent/search.js.map +1 -1
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +4 -4
- package/dist/agent/session.js.map +1 -1
- package/dist/agent-tools.js +6 -6
- package/dist/agent-tools.js.map +1 -1
- package/dist/bin/cli.js +9242 -6344
- package/dist/bin/queryIndexWorker.js +437 -86
- package/dist/bin/rawQueryWorker.js +26 -2
- package/dist/chunking/chunkSplit.js +0 -15
- package/dist/chunking/chunkSplit.js.map +1 -1
- package/dist/cli/callHierarchy.d.ts.map +1 -1
- package/dist/cli/callHierarchy.js +9 -2
- package/dist/cli/callHierarchy.js.map +1 -1
- package/dist/cli/commandCatalog.d.ts.map +1 -1
- package/dist/cli/commandCatalog.js +1 -0
- package/dist/cli/commandCatalog.js.map +1 -1
- package/dist/cli/commandTable.d.ts.map +1 -1
- package/dist/cli/commandTable.js +18 -1
- package/dist/cli/commandTable.js.map +1 -1
- package/dist/cli/compileCache.d.ts +5 -0
- package/dist/cli/compileCache.d.ts.map +1 -1
- package/dist/cli/compileCache.js +18 -0
- package/dist/cli/compileCache.js.map +1 -1
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +0 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/graph.d.ts.map +1 -1
- package/dist/cli/graph.js +52 -16
- package/dist/cli/graph.js.map +1 -1
- package/dist/cli/grep.d.ts +1 -1
- package/dist/cli/grep.d.ts.map +1 -1
- package/dist/cli/grep.js +14 -4
- package/dist/cli/grep.js.map +1 -1
- package/dist/cli/help.d.ts +2 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +23 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/indexPolicy.d.ts.map +1 -1
- package/dist/cli/indexPolicy.js +1 -0
- package/dist/cli/indexPolicy.js.map +1 -1
- package/dist/cli/inspect.d.ts.map +1 -1
- package/dist/cli/inspect.js +5 -2
- package/dist/cli/inspect.js.map +1 -1
- package/dist/cli/install.js +1 -1
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/options.d.ts +1 -1
- package/dist/cli/options.d.ts.map +1 -1
- package/dist/cli/options.js +54 -5
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/renamePreview.d.ts.map +1 -1
- package/dist/cli/renamePreview.js +7 -1
- package/dist/cli/renamePreview.js.map +1 -1
- package/dist/cli/rootPolicy.d.ts.map +1 -1
- package/dist/cli/rootPolicy.js +36 -3
- package/dist/cli/rootPolicy.js.map +1 -1
- package/dist/cli/server.d.ts +59 -0
- package/dist/cli/server.d.ts.map +1 -0
- package/dist/cli/server.js +906 -0
- package/dist/cli/server.js.map +1 -0
- package/dist/cli/skill.js +1 -1
- package/dist/cli/skill.js.map +1 -1
- package/dist/cli/sql.js +1 -1
- package/dist/cli/symbols.d.ts.map +1 -1
- package/dist/cli/symbols.js +4 -2
- package/dist/cli/symbols.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +37 -16
- package/dist/cli.js.map +1 -1
- package/dist/documentLinks/check.d.ts.map +1 -1
- package/dist/documentLinks/check.js +20 -9
- package/dist/documentLinks/check.js.map +1 -1
- package/dist/documentLinks.d.ts.map +1 -1
- package/dist/documentLinks.js +0 -1
- package/dist/documentLinks.js.map +1 -1
- package/dist/drift/snapshot.js +1 -1
- package/dist/drift/snapshot.js.map +1 -1
- package/dist/duplicates/scoring.d.ts.map +1 -1
- package/dist/duplicates/scoring.js.map +1 -1
- package/dist/duplicates/types.d.ts +2 -0
- package/dist/duplicates/types.d.ts.map +1 -1
- package/dist/duplicates/unitCache.d.ts.map +1 -1
- package/dist/duplicates/unitCache.js +1 -1
- package/dist/duplicates/unitCache.js.map +1 -1
- package/dist/duplicates/units.d.ts.map +1 -1
- package/dist/duplicates/units.js +8 -5
- package/dist/duplicates/units.js.map +1 -1
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +59 -6
- package/dist/duplicates.js.map +1 -1
- package/dist/graph-edge-collector.d.ts +0 -2
- package/dist/graph-edge-collector.d.ts.map +1 -1
- package/dist/graph-edge-collector.js +2 -4
- package/dist/graph-edge-collector.js.map +1 -1
- package/dist/graphs/edgeResolution.d.ts.map +1 -1
- package/dist/graphs/specifiers.d.ts +1 -1
- package/dist/graphs/specifiers.d.ts.map +1 -1
- package/dist/graphs/specifiers.js +1 -1
- package/dist/graphs/specifiers.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed.d.ts +10 -1
- package/dist/graphs/symbol-graph-detailed.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed.js +18 -5
- package/dist/graphs/symbol-graph-detailed.js.map +1 -1
- package/dist/impact/analyzer.d.ts.map +1 -1
- package/dist/impact/analyzer.js +4 -1
- package/dist/impact/analyzer.js.map +1 -1
- package/dist/impact/budgets.d.ts.map +1 -1
- package/dist/impact/budgets.js +5 -3
- package/dist/impact/budgets.js.map +1 -1
- package/dist/impact/callCompatibility.d.ts +8 -1
- package/dist/impact/callCompatibility.d.ts.map +1 -1
- package/dist/impact/callCompatibility.js +55 -17
- package/dist/impact/callCompatibility.js.map +1 -1
- package/dist/impact/context.d.ts.map +1 -1
- package/dist/impact/context.js +4 -1
- package/dist/impact/context.js.map +1 -1
- package/dist/impact/direct.d.ts +1 -1
- package/dist/impact/direct.d.ts.map +1 -1
- package/dist/impact/parse.d.ts.map +1 -1
- package/dist/impact/parse.js +10 -1
- package/dist/impact/parse.js.map +1 -1
- package/dist/impact/report-suggestions.d.ts.map +1 -1
- package/dist/impact/report-suggestions.js +17 -11
- package/dist/impact/report-suggestions.js.map +1 -1
- package/dist/impact/report.d.ts.map +1 -1
- package/dist/impact/report.js +13 -2
- package/dist/impact/report.js.map +1 -1
- package/dist/impact/reportCompact.d.ts.map +1 -1
- package/dist/impact/reportCompact.js +1 -0
- package/dist/impact/reportCompact.js.map +1 -1
- package/dist/impact/reportFull.d.ts.map +1 -1
- package/dist/impact/reportFull.js +1 -0
- package/dist/impact/reportFull.js.map +1 -1
- package/dist/impact/reportParts.d.ts +9 -0
- package/dist/impact/reportParts.d.ts.map +1 -1
- package/dist/impact/severity.d.ts +3 -2
- package/dist/impact/severity.d.ts.map +1 -1
- package/dist/impact/severity.js +16 -5
- package/dist/impact/severity.js.map +1 -1
- package/dist/impact/streaming.d.ts.map +1 -1
- package/dist/impact/streaming.js +5 -5
- package/dist/impact/streaming.js.map +1 -1
- package/dist/impact/transitive.d.ts.map +1 -1
- package/dist/impact/transitive.js +13 -5
- package/dist/impact/transitive.js.map +1 -1
- package/dist/impact/types.d.ts +14 -0
- package/dist/impact/types.d.ts.map +1 -1
- package/dist/impact/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indexer/build-cache/manifest.d.ts +5 -3
- package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
- package/dist/indexer/build-cache/manifest.js +122 -15
- package/dist/indexer/build-cache/manifest.js.map +1 -1
- package/dist/indexer/build-cache/module-cache.d.ts +1 -0
- package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache/module-cache.js +7 -1
- package/dist/indexer/build-cache/module-cache.js.map +1 -1
- package/dist/indexer/build-cache/options.d.ts.map +1 -1
- package/dist/indexer/build-cache/options.js +0 -2
- package/dist/indexer/build-cache/options.js.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.d.ts +15 -11
- package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.js +167 -79
- package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
- package/dist/indexer/build-cache/resolver-environment.d.ts +2 -2
- package/dist/indexer/build-cache/resolver-environment.d.ts.map +1 -1
- package/dist/indexer/build-cache/resolver-environment.js +33 -6
- package/dist/indexer/build-cache/resolver-environment.js.map +1 -1
- package/dist/indexer/build-cache.d.ts +2 -2
- package/dist/indexer/build-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache.js +2 -2
- package/dist/indexer/build-cache.js.map +1 -1
- package/dist/indexer/build-index.d.ts.map +1 -1
- package/dist/indexer/build-index.js +164 -84
- package/dist/indexer/build-index.js.map +1 -1
- package/dist/indexer/build-manifest.d.ts.map +1 -1
- package/dist/indexer/build-manifest.js +3 -0
- package/dist/indexer/build-manifest.js.map +1 -1
- package/dist/indexer/build-workers.d.ts +30 -3
- package/dist/indexer/build-workers.d.ts.map +1 -1
- package/dist/indexer/build-workers.js +111 -45
- package/dist/indexer/build-workers.js.map +1 -1
- package/dist/indexer/call-hierarchy.d.ts.map +1 -1
- package/dist/indexer/import-types.d.ts +8 -0
- package/dist/indexer/import-types.d.ts.map +1 -1
- package/dist/indexer/imports/python.d.ts.map +1 -1
- package/dist/indexer/imports/python.js +13 -8
- package/dist/indexer/imports/python.js.map +1 -1
- package/dist/indexer/imports.d.ts +0 -3
- package/dist/indexer/imports.d.ts.map +1 -1
- package/dist/indexer/imports.js +1 -1
- package/dist/indexer/imports.js.map +1 -1
- package/dist/indexer/incremental-plan.d.ts +2 -1
- package/dist/indexer/incremental-plan.d.ts.map +1 -1
- package/dist/indexer/incremental-plan.js +7 -4
- package/dist/indexer/incremental-plan.js.map +1 -1
- package/dist/indexer/locals-and-exports.d.ts +2 -2
- package/dist/indexer/locals-and-exports.d.ts.map +1 -1
- package/dist/indexer/locals-and-exports.js +27 -3
- package/dist/indexer/locals-and-exports.js.map +1 -1
- package/dist/indexer/navigation-local.d.ts +2 -2
- package/dist/indexer/navigation-local.d.ts.map +1 -1
- package/dist/indexer/navigation-local.js +2 -2
- package/dist/indexer/navigation-local.js.map +1 -1
- package/dist/indexer/navigation-references.d.ts +1 -2
- package/dist/indexer/navigation-references.d.ts.map +1 -1
- package/dist/indexer/navigation-references.js +8 -2
- package/dist/indexer/navigation-references.js.map +1 -1
- package/dist/indexer/navigation.d.ts.map +1 -1
- package/dist/indexer/navigation.js +12 -4
- package/dist/indexer/navigation.js.map +1 -1
- package/dist/indexer/parse-context.d.ts +2 -5
- package/dist/indexer/parse-context.d.ts.map +1 -1
- package/dist/indexer/parse-context.js +34 -8
- package/dist/indexer/parse-context.js.map +1 -1
- package/dist/indexer/scope.d.ts +2 -2
- package/dist/indexer/scope.d.ts.map +1 -1
- package/dist/indexer/scope.js +1 -1
- package/dist/indexer/scope.js.map +1 -1
- package/dist/indexer/types.d.ts +5 -1
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/indexer.d.ts +3 -6
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +5 -8
- package/dist/indexer.js.map +1 -1
- package/dist/installer/locks.d.ts.map +1 -1
- package/dist/installer/locks.js +1 -3
- package/dist/installer/locks.js.map +1 -1
- package/dist/installer/registry.d.ts.map +1 -1
- package/dist/installer/registry.js +63 -32
- package/dist/installer/registry.js.map +1 -1
- package/dist/languages/definitions/c.d.ts.map +1 -1
- package/dist/languages/definitions/c.js +0 -1
- package/dist/languages/definitions/c.js.map +1 -1
- package/dist/languages/definitions/cFamily.d.ts +0 -1
- package/dist/languages/definitions/cFamily.d.ts.map +1 -1
- package/dist/languages/definitions/cFamily.js +0 -2
- package/dist/languages/definitions/cFamily.js.map +1 -1
- package/dist/languages/definitions/cpp.d.ts.map +1 -1
- package/dist/languages/definitions/cpp.js +0 -1
- package/dist/languages/definitions/cpp.js.map +1 -1
- package/dist/languages/definitions/csharp.d.ts.map +1 -1
- package/dist/languages/definitions/csharp.js +0 -2
- package/dist/languages/definitions/csharp.js.map +1 -1
- package/dist/languages/definitions/css.d.ts.map +1 -1
- package/dist/languages/definitions/css.js +0 -2
- package/dist/languages/definitions/css.js.map +1 -1
- package/dist/languages/definitions/go.d.ts.map +1 -1
- package/dist/languages/definitions/go.js +0 -2
- package/dist/languages/definitions/go.js.map +1 -1
- package/dist/languages/definitions/html.d.ts.map +1 -1
- package/dist/languages/definitions/html.js +0 -2
- package/dist/languages/definitions/html.js.map +1 -1
- package/dist/languages/definitions/htmlStub.d.ts.map +1 -1
- package/dist/languages/definitions/htmlStub.js +0 -2
- package/dist/languages/definitions/htmlStub.js.map +1 -1
- package/dist/languages/definitions/java.d.ts.map +1 -1
- package/dist/languages/definitions/java.js +0 -2
- package/dist/languages/definitions/java.js.map +1 -1
- package/dist/languages/definitions/javascript.d.ts.map +1 -1
- package/dist/languages/definitions/javascript.js +0 -2
- package/dist/languages/definitions/javascript.js.map +1 -1
- package/dist/languages/definitions/kotlin.d.ts.map +1 -1
- package/dist/languages/definitions/kotlin.js +0 -2
- package/dist/languages/definitions/kotlin.js.map +1 -1
- package/dist/languages/definitions/less.d.ts.map +1 -1
- package/dist/languages/definitions/less.js +0 -2
- package/dist/languages/definitions/less.js.map +1 -1
- package/dist/languages/definitions/php.d.ts.map +1 -1
- package/dist/languages/definitions/php.js +0 -2
- package/dist/languages/definitions/php.js.map +1 -1
- package/dist/languages/definitions/python.d.ts.map +1 -1
- package/dist/languages/definitions/python.js +0 -2
- package/dist/languages/definitions/python.js.map +1 -1
- package/dist/languages/definitions/ruby.d.ts.map +1 -1
- package/dist/languages/definitions/ruby.js +0 -2
- package/dist/languages/definitions/ruby.js.map +1 -1
- package/dist/languages/definitions/rust.d.ts.map +1 -1
- package/dist/languages/definitions/rust.js +0 -2
- package/dist/languages/definitions/rust.js.map +1 -1
- package/dist/languages/definitions/scss.d.ts.map +1 -1
- package/dist/languages/definitions/scss.js +0 -2
- package/dist/languages/definitions/scss.js.map +1 -1
- package/dist/languages/definitions/sql.d.ts.map +1 -1
- package/dist/languages/definitions/sql.js +0 -2
- package/dist/languages/definitions/sql.js.map +1 -1
- package/dist/languages/definitions/svelte.d.ts.map +1 -1
- package/dist/languages/definitions/svelte.js +0 -2
- package/dist/languages/definitions/svelte.js.map +1 -1
- package/dist/languages/definitions/swift.d.ts.map +1 -1
- package/dist/languages/definitions/swift.js +0 -2
- package/dist/languages/definitions/swift.js.map +1 -1
- package/dist/languages/definitions/typescript.d.ts.map +1 -1
- package/dist/languages/definitions/typescript.js +0 -3
- package/dist/languages/definitions/typescript.js.map +1 -1
- package/dist/languages/definitions/vue.d.ts.map +1 -1
- package/dist/languages/definitions/vue.js +0 -2
- package/dist/languages/definitions/vue.js.map +1 -1
- package/dist/languages/definitions/zig.d.ts.map +1 -1
- package/dist/languages/definitions/zig.js +0 -2
- package/dist/languages/definitions/zig.js.map +1 -1
- package/dist/languages/filePrep.d.ts +0 -2
- package/dist/languages/filePrep.d.ts.map +1 -1
- package/dist/languages/filePrep.js +0 -1
- package/dist/languages/filePrep.js.map +1 -1
- package/dist/languages/types.d.ts +19 -5
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages.d.ts +1 -3
- package/dist/languages.d.ts.map +1 -1
- package/dist/languages.js +0 -7
- package/dist/languages.js.map +1 -1
- package/dist/lifecycle/manifest.d.ts.map +1 -1
- package/dist/lifecycle/manifest.js +21 -4
- package/dist/lifecycle/manifest.js.map +1 -1
- package/dist/mcp/handlers.d.ts +275 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/handlers.js +657 -0
- package/dist/mcp/handlers.js.map +1 -0
- package/dist/mcp/httpTransport.d.ts +14 -0
- package/dist/mcp/httpTransport.d.ts.map +1 -0
- package/dist/mcp/httpTransport.js +185 -0
- package/dist/mcp/httpTransport.js.map +1 -0
- package/dist/mcp/legacySessions.d.ts +38 -0
- package/dist/mcp/legacySessions.d.ts.map +1 -0
- package/dist/mcp/legacySessions.js +264 -0
- package/dist/mcp/legacySessions.js.map +1 -0
- package/dist/mcp/lifecycleHealth.d.ts +12 -0
- package/dist/mcp/lifecycleHealth.d.ts.map +1 -0
- package/dist/mcp/lifecycleHealth.js +37 -0
- package/dist/mcp/lifecycleHealth.js.map +1 -0
- package/dist/mcp/protocol.d.ts +35 -0
- package/dist/mcp/protocol.d.ts.map +1 -0
- package/dist/mcp/protocol.js +577 -0
- package/dist/mcp/protocol.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -291
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +13 -1517
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +8 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/native/bindingLoader.d.ts +27 -0
- package/dist/native/bindingLoader.d.ts.map +1 -1
- package/dist/native/bindingLoader.js +18 -1
- package/dist/native/bindingLoader.js.map +1 -1
- package/dist/native/contracts.d.ts +59 -12
- package/dist/native/contracts.d.ts.map +1 -1
- package/dist/native/execution.d.ts +10 -1
- package/dist/native/execution.d.ts.map +1 -1
- package/dist/native/execution.js +59 -3
- package/dist/native/execution.js.map +1 -1
- package/dist/native/projectedTree.d.ts +20 -5
- package/dist/native/projectedTree.d.ts.map +1 -1
- package/dist/native/projectedTree.js +100 -48
- package/dist/native/projectedTree.js.map +1 -1
- package/dist/native/runtime.d.ts +47 -1
- package/dist/native/runtime.d.ts.map +1 -1
- package/dist/native/runtime.js +151 -8
- package/dist/native/runtime.js.map +1 -1
- package/dist/native/runtimeCache.d.ts +92 -0
- package/dist/native/runtimeCache.d.ts.map +1 -1
- package/dist/native/runtimeCache.js +443 -13
- package/dist/native/runtimeCache.js.map +1 -1
- package/dist/native/treeShape.d.ts +21 -0
- package/dist/native/treeShape.d.ts.map +1 -0
- package/dist/native/treeShape.js +28 -0
- package/dist/native/treeShape.js.map +1 -0
- package/dist/native/treeSitterNative.d.ts +3 -3
- package/dist/native/treeSitterNative.d.ts.map +1 -1
- package/dist/native/treeSitterNative.js +2 -2
- package/dist/native/treeSitterNative.js.map +1 -1
- package/dist/presets.d.ts +7 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +4 -0
- package/dist/presets.js.map +1 -1
- package/dist/review/candidates.d.ts.map +1 -1
- package/dist/review/candidates.js +4 -1
- package/dist/review/candidates.js.map +1 -1
- package/dist/review/deleted.js +2 -2
- package/dist/review/deleted.js.map +1 -1
- package/dist/review/summaries.d.ts +5 -0
- package/dist/review/summaries.d.ts.map +1 -1
- package/dist/review/summaries.js +19 -11
- package/dist/review/summaries.js.map +1 -1
- package/dist/review/types.d.ts +3 -1
- package/dist/review/types.d.ts.map +1 -1
- package/dist/review/types.js +8 -1
- package/dist/review/types.js.map +1 -1
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +7 -3
- package/dist/review.js.map +1 -1
- package/dist/sql/extractFacts.d.ts.map +1 -1
- package/dist/sql/extractFacts.js +1 -1
- package/dist/sql/extractFacts.js.map +1 -1
- package/dist/sqlite/schema.d.ts +2 -1
- package/dist/sqlite/schema.d.ts.map +1 -1
- package/dist/sqlite/schema.js +15 -1
- package/dist/sqlite/schema.js.map +1 -1
- package/dist/sqlite/write.d.ts.map +1 -1
- package/dist/sqlite/write.js +15 -0
- package/dist/sqlite/write.js.map +1 -1
- package/dist/sqlite-driver.d.ts +11 -0
- package/dist/sqlite-driver.d.ts.map +1 -1
- package/dist/sqlite-driver.js +27 -2
- package/dist/sqlite-driver.js.map +1 -1
- package/dist/util/concurrency.d.ts +1 -0
- package/dist/util/concurrency.d.ts.map +1 -1
- package/dist/util/concurrency.js +9 -2
- package/dist/util/concurrency.js.map +1 -1
- package/dist/util/confinedFile.d.ts +1 -0
- package/dist/util/confinedFile.d.ts.map +1 -1
- package/dist/util/confinedFile.js +17 -5
- package/dist/util/confinedFile.js.map +1 -1
- package/dist/util/errors.d.ts +2 -0
- package/dist/util/errors.d.ts.map +1 -1
- package/dist/util/errors.js +18 -0
- package/dist/util/errors.js.map +1 -1
- package/dist/util/git.d.ts.map +1 -1
- package/dist/util/git.js +72 -7
- package/dist/util/git.js.map +1 -1
- package/dist/util/lazySymbols.js +1 -1
- package/dist/util/lazySymbols.js.map +1 -1
- package/dist/util/paths.d.ts.map +1 -1
- package/dist/util/paths.js +45 -9
- package/dist/util/paths.js.map +1 -1
- package/dist/util/resolution/jvm.d.ts.map +1 -1
- package/dist/util/resolution/jvm.js +14 -8
- package/dist/util/resolution/jvm.js.map +1 -1
- package/dist/util/resolution/php.d.ts.map +1 -1
- package/dist/util/resolution/php.js +0 -1
- package/dist/util/resolution/php.js.map +1 -1
- package/dist/util/resolution/tsconfig.d.ts.map +1 -1
- package/dist/util/resolution/tsconfig.js +26 -12
- package/dist/util/resolution/tsconfig.js.map +1 -1
- package/dist/util/resolution.d.ts.map +1 -1
- package/dist/util/resolution.js +5 -5
- package/dist/util/resolution.js.map +1 -1
- package/dist/worker/nativeExtractWorker.d.ts +14 -6
- package/dist/worker/nativeExtractWorker.d.ts.map +1 -1
- package/dist/worker/nativeExtractWorker.js +67 -14
- package/dist/worker/nativeExtractWorker.js.map +1 -1
- package/dist/worker/nativeWorkerPool.d.ts +4 -0
- package/dist/worker/nativeWorkerPool.d.ts.map +1 -1
- package/dist/worker/nativeWorkerPool.js +6 -1
- package/dist/worker/nativeWorkerPool.js.map +1 -1
- package/docs/mcp.md +22 -6
- package/package.json +3 -3
- package/dist/languages/definitions/loadLanguage.d.ts +0 -2
- package/dist/languages/definitions/loadLanguage.d.ts.map +0 -1
- package/dist/languages/definitions/loadLanguage.js +0 -2
- package/dist/languages/definitions/loadLanguage.js.map +0 -1
- package/dist/parserBackend.d.ts +0 -57
- package/dist/parserBackend.d.ts.map +0 -1
- package/dist/parserBackend.js +0 -33
- package/dist/parserBackend.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createHmac, randomBytes, timingSafeEqual } from "node:crypto";
|
|
2
|
+
export const MCP_LIFECYCLE_HEALTH_TOKEN_ENV = "CODEGRAPH_MCP_LIFECYCLE_HEALTH_TOKEN";
|
|
3
|
+
const TOKEN_BYTES = 32;
|
|
4
|
+
const CHALLENGE_BYTES = 16;
|
|
5
|
+
const TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/;
|
|
6
|
+
export function createMcpLifecycleHealthToken() {
|
|
7
|
+
return randomBytes(TOKEN_BYTES).toString("base64url");
|
|
8
|
+
}
|
|
9
|
+
export function readMcpLifecycleHealthToken(env = process.env) {
|
|
10
|
+
const value = env[MCP_LIFECYCLE_HEALTH_TOKEN_ENV];
|
|
11
|
+
if (!value || !TOKEN_PATTERN.test(value))
|
|
12
|
+
return undefined;
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
export function createMcpLifecycleHealthChallenge() {
|
|
16
|
+
return randomBytes(CHALLENGE_BYTES).toString("base64url");
|
|
17
|
+
}
|
|
18
|
+
export function createMcpLifecycleHealthProof(token, challenge, identity) {
|
|
19
|
+
return createHmac("sha256", token).update(serializeHealthIdentity(challenge, identity)).digest("base64url");
|
|
20
|
+
}
|
|
21
|
+
export function matchesMcpLifecycleHealthProof(proof, token, challenge, identity) {
|
|
22
|
+
if (!proof)
|
|
23
|
+
return false;
|
|
24
|
+
const expected = createMcpLifecycleHealthProof(token, challenge, identity);
|
|
25
|
+
const proofBytes = Buffer.from(proof);
|
|
26
|
+
const expectedBytes = Buffer.from(expected);
|
|
27
|
+
return proofBytes.length === expectedBytes.length && timingSafeEqual(proofBytes, expectedBytes);
|
|
28
|
+
}
|
|
29
|
+
function serializeHealthIdentity(challenge, identity) {
|
|
30
|
+
return JSON.stringify({
|
|
31
|
+
challenge,
|
|
32
|
+
pid: identity.pid,
|
|
33
|
+
root: identity.root,
|
|
34
|
+
startedAt: identity.startedAt,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=lifecycleHealth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycleHealth.js","sourceRoot":"","sources":["../../src/mcp/lifecycleHealth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,CAAC,MAAM,8BAA8B,GAAG,sCAAsC,CAAC;AAQrF,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAE5C,MAAM,UAAU,6BAA6B;IAC3C,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9E,MAAM,KAAK,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAAa,EACb,SAAiB,EACjB,QAAoC;IAEpC,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,KAAyB,EACzB,KAAa,EACb,SAAiB,EACjB,QAAoC;IAEpC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAiB,EAAE,QAAoC;IACtF,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,SAAS;QACT,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { StdioServerTransport } from "@modelcontextprotocol/server/stdio";
|
|
2
|
+
import { type Readable, type Writable } from "node:stream";
|
|
3
|
+
import { Server } from "@modelcontextprotocol/server";
|
|
4
|
+
import { type CodegraphRuntimeIdentity, type InstalledVersionChecker } from "../runtimeIdentity.js";
|
|
5
|
+
import type { CodegraphMcpHandlers } from "./handlers.js";
|
|
6
|
+
export declare const DEFAULT_MCP_TOOL_TIMEOUT_MS: number;
|
|
7
|
+
export declare const DEFAULT_MCP_TOOL_CONCURRENCY = 4;
|
|
8
|
+
export declare function assertMcpToolTimeout(value: number): number;
|
|
9
|
+
export type McpToolOperationTracker = {
|
|
10
|
+
isAccepting: () => boolean;
|
|
11
|
+
track: <T>(operation: () => Promise<T>) => Promise<T> | undefined;
|
|
12
|
+
stop: () => void;
|
|
13
|
+
drain: () => Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
export type McpToolConcurrencyTracker = {
|
|
16
|
+
inFlight: number;
|
|
17
|
+
maximum: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function createCodegraphMcpProtocolServer(handlers: CodegraphMcpHandlers, runtimeIdentity?: CodegraphRuntimeIdentity, installedVersion?: InstalledVersionChecker, toolCallState?: {
|
|
20
|
+
firstToolCallPending: boolean;
|
|
21
|
+
}, maxConcurrentToolCalls?: number, mcpToolTimeoutMs?: number): Server;
|
|
22
|
+
export declare function createCodegraphMcpProtocolServerWithTracker(handlers: CodegraphMcpHandlers, runtimeIdentity: CodegraphRuntimeIdentity, installedVersion: InstalledVersionChecker, toolCallState: {
|
|
23
|
+
firstToolCallPending: boolean;
|
|
24
|
+
}, mcpToolTimeoutMs: number, toolOperations: McpToolOperationTracker, toolConcurrency: McpToolConcurrencyTracker): Server;
|
|
25
|
+
export type McpProtocolFactory = {
|
|
26
|
+
create: () => Server;
|
|
27
|
+
stop: () => void;
|
|
28
|
+
drain: () => Promise<void>;
|
|
29
|
+
};
|
|
30
|
+
export declare function createCodegraphMcpProtocolFactory(handlers: CodegraphMcpHandlers, runtimeIdentity: CodegraphRuntimeIdentity, maxConcurrentToolCalls?: number, mcpToolTimeoutMs?: number): McpProtocolFactory;
|
|
31
|
+
export declare function createParseErrorReportingStdin(input: Readable, output: Writable): Readable;
|
|
32
|
+
export declare function awaitMcpToolOperation<T>(signal: AbortSignal | undefined, operation: Promise<T>, onSettled: () => void): Promise<T>;
|
|
33
|
+
export declare function callMcpTool(handlers: CodegraphMcpHandlers, name: string, input: unknown, signal?: AbortSignal): Promise<unknown>;
|
|
34
|
+
export declare function createCodegraphMcpStdioTransport(input: Readable, output: Writable): StdioServerTransport;
|
|
35
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/mcp/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAa,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAoC,MAAM,EAAuB,MAAM,8BAA8B,CAAC;AAgB7G,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,oBAAoB,EAAqB,MAAM,eAAe,CAAC;AAG7E,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAG1D,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAM9C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO1D;AACD,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AA2BF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAMF,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,oBAAoB,EAC9B,eAAe,GAAE,wBAA2F,EAC5G,gBAAgB,GAAE,uBAAwE,EAC1F,aAAa,GAAE;IAAE,oBAAoB,EAAE,OAAO,CAAA;CAAmC,EACjF,sBAAsB,SAA+B,EACrD,gBAAgB,SAA8B,GAC7C,MAAM,CAUR;AAED,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,oBAAoB,EAC9B,eAAe,EAAE,wBAAwB,EACzC,gBAAgB,EAAE,uBAAuB,EACzC,aAAa,EAAE;IAAE,oBAAoB,EAAE,OAAO,CAAA;CAAE,EAChD,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,uBAAuB,EACvC,eAAe,EAAE,yBAAyB,GACzC,MAAM,CAuGR;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,oBAAoB,EAC9B,eAAe,EAAE,wBAAwB,EACzC,sBAAsB,SAA+B,EACrD,gBAAgB,SAA8B,GAC7C,kBAAkB,CAoBpB;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAiD1F;AAwCD,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EACrB,SAAS,EAAE,MAAM,IAAI,GACpB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAgBD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAoElB;AA+SD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,oBAAoB,CAIxG"}
|
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
import { StdioServerTransport } from "@modelcontextprotocol/server/stdio";
|
|
2
|
+
import { Transform } from "node:stream";
|
|
3
|
+
import { ProtocolError, ProtocolErrorCode, Server } from "@modelcontextprotocol/server";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { MAX_FILE_VIEW_BYTES, MAX_FILE_VIEW_LINES } from "../agent/fileView.js";
|
|
6
|
+
import { MAX_GRAPH_DEPTH } from "../agent/search.js";
|
|
7
|
+
import { errorMessage } from "../util/errors.js";
|
|
8
|
+
import { SymbolKind } from "../indexer/types.js";
|
|
9
|
+
import { MAX_WORKSPACE_SYMBOL_LIMIT } from "../indexer/workspace-symbols.js";
|
|
10
|
+
import { listCodegraphMcpTools, MAX_RENAME_PREVIEW_EDITS, MCP_TOOL_REGISTRY, MAX_REFACTOR_PLAN_LIMIT, } from "./tools.js";
|
|
11
|
+
import { getCurrentNativeBindingOrigin } from "../native/runtime.js";
|
|
12
|
+
import { captureCodegraphRuntimeIdentity, createInstalledVersionChecker, } from "../runtimeIdentity.js";
|
|
13
|
+
import { getLegacyRequestAbortSignal } from "./legacySessions.js";
|
|
14
|
+
export const DEFAULT_MCP_TOOL_TIMEOUT_MS = 30 * 60 * 1000;
|
|
15
|
+
const MAX_MCP_TOOL_TIMEOUT_MS = 2_147_483_647;
|
|
16
|
+
const MAX_MCP_STDIO_FRAME_BYTES = 10 * 1024 * 1024;
|
|
17
|
+
export const DEFAULT_MCP_TOOL_CONCURRENCY = 4;
|
|
18
|
+
function normalizeMcpToolConcurrency(value) {
|
|
19
|
+
if (!Number.isFinite(value))
|
|
20
|
+
return DEFAULT_MCP_TOOL_CONCURRENCY;
|
|
21
|
+
return Math.max(1, Math.floor(value));
|
|
22
|
+
}
|
|
23
|
+
export function assertMcpToolTimeout(value) {
|
|
24
|
+
if (!Number.isSafeInteger(value) || value < 0 || value > MAX_MCP_TOOL_TIMEOUT_MS) {
|
|
25
|
+
throw new RangeError(`mcpToolTimeoutMs must be a whole number from 0 through ${MAX_MCP_TOOL_TIMEOUT_MS}; 0 disables the deadline.`);
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function createMcpToolOperationTracker() {
|
|
30
|
+
let accepting = true;
|
|
31
|
+
const operations = new Set();
|
|
32
|
+
return {
|
|
33
|
+
isAccepting: () => accepting,
|
|
34
|
+
track: (operation) => {
|
|
35
|
+
if (!accepting)
|
|
36
|
+
return undefined;
|
|
37
|
+
const tracked = operation();
|
|
38
|
+
operations.add(tracked);
|
|
39
|
+
void tracked.then(() => operations.delete(tracked), () => operations.delete(tracked));
|
|
40
|
+
return tracked;
|
|
41
|
+
},
|
|
42
|
+
stop: () => {
|
|
43
|
+
accepting = false;
|
|
44
|
+
},
|
|
45
|
+
drain: async () => {
|
|
46
|
+
accepting = false;
|
|
47
|
+
await Promise.allSettled([...operations]);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function createMcpToolConcurrencyTracker(maximum) {
|
|
52
|
+
return { inFlight: 0, maximum: normalizeMcpToolConcurrency(maximum) };
|
|
53
|
+
}
|
|
54
|
+
export function createCodegraphMcpProtocolServer(handlers, runtimeIdentity = captureCodegraphRuntimeIdentity(getCurrentNativeBindingOrigin()), installedVersion = createInstalledVersionChecker(runtimeIdentity), toolCallState = { firstToolCallPending: true }, maxConcurrentToolCalls = DEFAULT_MCP_TOOL_CONCURRENCY, mcpToolTimeoutMs = DEFAULT_MCP_TOOL_TIMEOUT_MS) {
|
|
55
|
+
return createCodegraphMcpProtocolServerWithTracker(handlers, runtimeIdentity, installedVersion, toolCallState, assertMcpToolTimeout(mcpToolTimeoutMs), createMcpToolOperationTracker(), createMcpToolConcurrencyTracker(maxConcurrentToolCalls));
|
|
56
|
+
}
|
|
57
|
+
export function createCodegraphMcpProtocolServerWithTracker(handlers, runtimeIdentity, installedVersion, toolCallState, mcpToolTimeoutMs, toolOperations, toolConcurrency) {
|
|
58
|
+
const server = new Server({
|
|
59
|
+
name: "codegraph",
|
|
60
|
+
version: runtimeIdentity.runningVersion,
|
|
61
|
+
}, {
|
|
62
|
+
capabilities: { tools: {}, logging: {} },
|
|
63
|
+
});
|
|
64
|
+
const activeToolCalls = new Map();
|
|
65
|
+
server.setNotificationHandler("notifications/cancelled", (notification) => {
|
|
66
|
+
const requestId = notification.params.requestId;
|
|
67
|
+
if (requestId !== undefined) {
|
|
68
|
+
activeToolCalls.get(requestId)?.abort(new Error("MCP tool call was cancelled."));
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
server.setRequestHandler("tools/list", () => ({ tools: listCodegraphMcpTools() }));
|
|
72
|
+
server.setRequestHandler("tools/call", async (request, ctx) => {
|
|
73
|
+
if (!toolOperations.isAccepting()) {
|
|
74
|
+
throw new Error("MCP server is shutting down.");
|
|
75
|
+
}
|
|
76
|
+
if (toolConcurrency.inFlight >= toolConcurrency.maximum) {
|
|
77
|
+
throw new Error("MCP tool execution is busy; retry shortly.");
|
|
78
|
+
}
|
|
79
|
+
toolConcurrency.inFlight += 1;
|
|
80
|
+
const isFirstToolCall = toolCallState.firstToolCallPending;
|
|
81
|
+
toolCallState.firstToolCallPending = false;
|
|
82
|
+
const progressToken = isFirstToolCall ? getToolCallProgressToken(request.params) : undefined;
|
|
83
|
+
const emitFirstToolCallVisibility = async (level, progress, message) => {
|
|
84
|
+
if (!isFirstToolCall)
|
|
85
|
+
return;
|
|
86
|
+
try {
|
|
87
|
+
await ctx.mcpReq.log(level, message, "codegraph");
|
|
88
|
+
if (progressToken !== undefined) {
|
|
89
|
+
await ctx.mcpReq.notify({
|
|
90
|
+
method: "notifications/progress",
|
|
91
|
+
params: { progressToken, progress, total: 1, message },
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error(`[codegraph] MCP cold-start visibility failed: ${errorMessage(error)}`);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
await emitFirstToolCallVisibility("info", 0, `Codegraph is warming the first tool call for '${request.params.name}'.`);
|
|
100
|
+
try {
|
|
101
|
+
installedVersion.check();
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error(`[codegraph] installed-version check failed: ${errorMessage(error)}`);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const toolCallAbort = createMcpToolAbortSignal([ctx.mcpReq.signal, getLegacyRequestAbortSignal()], request.params.name, mcpToolTimeoutMs);
|
|
108
|
+
activeToolCalls.set(ctx.mcpReq.id, toolCallAbort);
|
|
109
|
+
try {
|
|
110
|
+
const operation = toolOperations.track(() => callMcpTool(handlers, request.params.name, request.params.arguments ?? {}, toolCallAbort.signal));
|
|
111
|
+
if (operation === undefined) {
|
|
112
|
+
toolConcurrency.inFlight -= 1;
|
|
113
|
+
throw new Error("MCP server is shutting down.");
|
|
114
|
+
}
|
|
115
|
+
const releaseToolCall = () => {
|
|
116
|
+
toolConcurrency.inFlight -= 1;
|
|
117
|
+
};
|
|
118
|
+
try {
|
|
119
|
+
const result = await awaitMcpToolOperation(toolCallAbort.signal, operation, releaseToolCall);
|
|
120
|
+
await emitFirstToolCallVisibility("info", 1, `Codegraph finished warming the first tool call for '${request.params.name}'.`);
|
|
121
|
+
return toToolResult(result);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (error instanceof ProtocolError || toolCallAbort.signal.aborted)
|
|
125
|
+
throw error;
|
|
126
|
+
return toToolErrorResult(error);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
activeToolCalls.delete(ctx.mcpReq.id);
|
|
131
|
+
toolCallAbort.dispose();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
await emitFirstToolCallVisibility("error", 1, `Codegraph failed while warming the first tool call for '${request.params.name}'.`);
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return server;
|
|
140
|
+
}
|
|
141
|
+
export function createCodegraphMcpProtocolFactory(handlers, runtimeIdentity, maxConcurrentToolCalls = DEFAULT_MCP_TOOL_CONCURRENCY, mcpToolTimeoutMs = DEFAULT_MCP_TOOL_TIMEOUT_MS) {
|
|
142
|
+
const toolConcurrency = createMcpToolConcurrencyTracker(maxConcurrentToolCalls);
|
|
143
|
+
const installedVersion = createInstalledVersionChecker(runtimeIdentity);
|
|
144
|
+
const toolCallState = { firstToolCallPending: true };
|
|
145
|
+
const toolOperations = createMcpToolOperationTracker();
|
|
146
|
+
const timeout = assertMcpToolTimeout(mcpToolTimeoutMs);
|
|
147
|
+
return {
|
|
148
|
+
create: () => createCodegraphMcpProtocolServerWithTracker(handlers, runtimeIdentity, installedVersion, toolCallState, timeout, toolOperations, toolConcurrency),
|
|
149
|
+
stop: () => toolOperations.stop(),
|
|
150
|
+
drain: () => toolOperations.drain(),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export function createParseErrorReportingStdin(input, output) {
|
|
154
|
+
let pending = Buffer.alloc(0);
|
|
155
|
+
const processFrame = (rawFrame, stream) => {
|
|
156
|
+
const frame = rawFrame.at(-1) === 13 ? rawFrame.subarray(0, -1) : rawFrame;
|
|
157
|
+
if (!frame.length)
|
|
158
|
+
return;
|
|
159
|
+
if (frame.length > MAX_MCP_STDIO_FRAME_BYTES) {
|
|
160
|
+
return new Error("MCP stdio frame exceeded 10 MiB.");
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
JSON.parse(frame.toString("utf8"));
|
|
164
|
+
stream.push(frame);
|
|
165
|
+
stream.push("\n");
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
output.write(`${JSON.stringify({
|
|
169
|
+
jsonrpc: "2.0",
|
|
170
|
+
id: null,
|
|
171
|
+
error: { code: ProtocolErrorCode.ParseError, message: "Parse error" },
|
|
172
|
+
})}\n`);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
const filter = new Transform({
|
|
176
|
+
transform(chunk, _encoding, callback) {
|
|
177
|
+
pending = Buffer.concat([pending, chunk]);
|
|
178
|
+
let newline = pending.indexOf(10);
|
|
179
|
+
while (newline >= 0) {
|
|
180
|
+
const error = processFrame(pending.subarray(0, newline), this);
|
|
181
|
+
pending = pending.subarray(newline + 1);
|
|
182
|
+
if (error !== undefined) {
|
|
183
|
+
callback(error);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
newline = pending.indexOf(10);
|
|
187
|
+
}
|
|
188
|
+
if (pending.length > MAX_MCP_STDIO_FRAME_BYTES) {
|
|
189
|
+
callback(new Error("MCP stdio frame exceeded 10 MiB."));
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
callback();
|
|
193
|
+
},
|
|
194
|
+
flush(callback) {
|
|
195
|
+
const error = processFrame(pending, this);
|
|
196
|
+
pending = Buffer.alloc(0);
|
|
197
|
+
callback(error);
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
input.pipe(filter);
|
|
201
|
+
return filter;
|
|
202
|
+
}
|
|
203
|
+
function createMcpToolAbortSignal(requestSignals, toolName, timeoutMs) {
|
|
204
|
+
const controller = new AbortController();
|
|
205
|
+
const listeners = [];
|
|
206
|
+
for (const requestSignal of requestSignals) {
|
|
207
|
+
if (requestSignal === undefined)
|
|
208
|
+
continue;
|
|
209
|
+
const onAbort = () => {
|
|
210
|
+
controller.abort(requestSignal.reason);
|
|
211
|
+
};
|
|
212
|
+
listeners.push({ signal: requestSignal, onAbort });
|
|
213
|
+
if (requestSignal.aborted)
|
|
214
|
+
onAbort();
|
|
215
|
+
else
|
|
216
|
+
requestSignal.addEventListener("abort", onAbort, { once: true });
|
|
217
|
+
}
|
|
218
|
+
const timeout = timeoutMs > 0
|
|
219
|
+
? setTimeout(() => {
|
|
220
|
+
controller.abort(new Error(`MCP tool '${toolName}' exceeded the configured deadline of ${timeoutMs} ms.`));
|
|
221
|
+
}, timeoutMs)
|
|
222
|
+
: undefined;
|
|
223
|
+
timeout?.unref?.();
|
|
224
|
+
return {
|
|
225
|
+
signal: controller.signal,
|
|
226
|
+
abort: (reason) => controller.abort(reason),
|
|
227
|
+
dispose: () => {
|
|
228
|
+
clearTimeout(timeout);
|
|
229
|
+
for (const listener of listeners)
|
|
230
|
+
listener.signal.removeEventListener("abort", listener.onAbort);
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
export function awaitMcpToolOperation(signal, operation, onSettled) {
|
|
235
|
+
void operation.then(onSettled, onSettled);
|
|
236
|
+
return withAbortSignal(signal, operation);
|
|
237
|
+
}
|
|
238
|
+
function withAbortSignal(signal, operation) {
|
|
239
|
+
if (!signal)
|
|
240
|
+
return operation;
|
|
241
|
+
const cancellationError = () => {
|
|
242
|
+
const reason = signal.reason;
|
|
243
|
+
if (reason instanceof Error && reason.name !== "AbortError")
|
|
244
|
+
return reason;
|
|
245
|
+
return new Error("MCP tool call was cancelled.");
|
|
246
|
+
};
|
|
247
|
+
if (signal.aborted)
|
|
248
|
+
return Promise.reject(cancellationError());
|
|
249
|
+
const cancellation = Promise.withResolvers();
|
|
250
|
+
const onAbort = () => cancellation.reject(cancellationError());
|
|
251
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
252
|
+
return Promise.race([operation, cancellation.promise]).finally(() => signal.removeEventListener("abort", onAbort));
|
|
253
|
+
}
|
|
254
|
+
export async function callMcpTool(handlers, name, input, signal) {
|
|
255
|
+
const tool = MCP_TOOL_REGISTRY.find((entry) => entry.name === name);
|
|
256
|
+
if (!tool)
|
|
257
|
+
throw new ProtocolError(ProtocolErrorCode.MethodNotFound, `Unknown MCP tool: ${name}`);
|
|
258
|
+
switch (tool.dispatch.handler) {
|
|
259
|
+
case "search":
|
|
260
|
+
return await handlers.search(parseMcpToolInput(searchSchema, input, name), signal);
|
|
261
|
+
case "workspace_symbols":
|
|
262
|
+
return await handlers.workspace_symbols(parseMcpToolInput(workspaceSymbolsSchema, input, name), signal);
|
|
263
|
+
case "rename_preview":
|
|
264
|
+
return await handlers.rename_preview(parseMcpToolInput(renamePreviewSchema, input, name), signal);
|
|
265
|
+
case "refactor_plan":
|
|
266
|
+
return await handlers.refactor_plan(parseMcpToolInput(refactorPlanSchema, input, name), signal);
|
|
267
|
+
case "calls":
|
|
268
|
+
if (tool.dispatch.direction) {
|
|
269
|
+
return await handlers.calls({ ...parseMcpToolInput(callHierarchySchema, input, name), direction: tool.dispatch.direction }, signal);
|
|
270
|
+
}
|
|
271
|
+
return await handlers.calls(parseMcpToolInput(callsSchema, input, name), signal);
|
|
272
|
+
case "type_hierarchy":
|
|
273
|
+
if (tool.dispatch.direction) {
|
|
274
|
+
return await handlers.type_hierarchy({ ...parseMcpToolInput(typeHierarchySchema, input, name), direction: tool.dispatch.direction }, signal);
|
|
275
|
+
}
|
|
276
|
+
return await handlers.type_hierarchy(parseMcpToolInput(typeHierarchyUnifiedSchema, input, name), signal);
|
|
277
|
+
case "implementations":
|
|
278
|
+
return await handlers.implementations(parseMcpToolInput(implementationsSchema, input, name), signal);
|
|
279
|
+
case "explore":
|
|
280
|
+
return await handlers.explore(parseMcpToolInput(exploreSchema, input, name), signal);
|
|
281
|
+
case "orient":
|
|
282
|
+
return await handlers.orient(parseMcpToolInput(orientSchema, input, name), signal);
|
|
283
|
+
case "packet_get":
|
|
284
|
+
return await handlers.packet_get(parseMcpToolInput(packetGetSchema, input, name), signal);
|
|
285
|
+
case "get_file":
|
|
286
|
+
return await handlers.get_file(parseMcpToolInput(getFileSchema, input, name), signal);
|
|
287
|
+
case "get_symbol":
|
|
288
|
+
return await handlers.get_symbol(parseMcpToolInput(handleSchema, input, name), signal);
|
|
289
|
+
case "goto":
|
|
290
|
+
return await callGotoTool(handlers, input, signal);
|
|
291
|
+
case "refs":
|
|
292
|
+
return await callRefsTool(handlers, input, signal);
|
|
293
|
+
case "file_deps":
|
|
294
|
+
if (tool.dispatch.direction) {
|
|
295
|
+
return await handlers.file_deps({ ...parseMcpToolInput(fileGraphSchema, input, name), direction: tool.dispatch.direction }, signal);
|
|
296
|
+
}
|
|
297
|
+
return await handlers.file_deps(parseMcpToolInput(fileDepsUnifiedSchema, input, name), signal);
|
|
298
|
+
case "path":
|
|
299
|
+
return await handlers.path(parseMcpToolInput(pathSchema, input, name), signal);
|
|
300
|
+
case "impact":
|
|
301
|
+
return await handlers.impact(parseMcpToolInput(gitRangeSchema, input, name), signal);
|
|
302
|
+
case "review":
|
|
303
|
+
return await handlers.review(parseMcpToolInput(reviewSchema, input, name), signal);
|
|
304
|
+
case "query_sqlite":
|
|
305
|
+
return await handlers.query_sqlite(parseMcpToolInput(querySqliteSchema, input, name), {
|
|
306
|
+
...(signal ? { signal } : {}),
|
|
307
|
+
});
|
|
308
|
+
case "refresh_index":
|
|
309
|
+
return await handlers.refresh_index(parseMcpToolInput(refreshIndexSchema, input, name), signal);
|
|
310
|
+
case "artifact_build":
|
|
311
|
+
return await handlers.artifact_build(parseMcpToolInput(artifactBuildSchema, input, name), signal);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
async function callGotoTool(handlers, input, signal) {
|
|
315
|
+
const request = parseMcpToolInput(navigationSchema, input, "goto");
|
|
316
|
+
if (request.handle !== undefined)
|
|
317
|
+
return await handlers.goto({ handle: request.handle }, signal);
|
|
318
|
+
if (request.file === undefined || request.line === undefined || request.column === undefined) {
|
|
319
|
+
throw new ProtocolError(ProtocolErrorCode.InvalidParams, "goto requires either handle or file, line, and column.");
|
|
320
|
+
}
|
|
321
|
+
return await handlers.goto({ file: request.file, line: request.line, column: request.column }, signal);
|
|
322
|
+
}
|
|
323
|
+
async function callRefsTool(handlers, input, signal) {
|
|
324
|
+
const request = parseMcpToolInput(refsSchema, input, "refs");
|
|
325
|
+
if (request.handle !== undefined) {
|
|
326
|
+
return await handlers.refs({ handle: request.handle, ...(request.limit !== undefined ? { limit: request.limit } : {}) }, signal);
|
|
327
|
+
}
|
|
328
|
+
if (request.file === undefined || request.line === undefined || request.column === undefined) {
|
|
329
|
+
throw new ProtocolError(ProtocolErrorCode.InvalidParams, "refs requires either handle or file, line, and column.");
|
|
330
|
+
}
|
|
331
|
+
return await handlers.refs({
|
|
332
|
+
file: request.file,
|
|
333
|
+
line: request.line,
|
|
334
|
+
column: request.column,
|
|
335
|
+
...(request.limit !== undefined ? { limit: request.limit } : {}),
|
|
336
|
+
}, signal);
|
|
337
|
+
}
|
|
338
|
+
function toToolResult(value) {
|
|
339
|
+
return {
|
|
340
|
+
content: [
|
|
341
|
+
{
|
|
342
|
+
type: "text",
|
|
343
|
+
text: JSON.stringify(value, null, 2),
|
|
344
|
+
},
|
|
345
|
+
],
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function toToolErrorResult(error) {
|
|
349
|
+
const message = errorMessage(error).replace(/(?:[A-Za-z]:)?[/\\][^'"\n]*?(?=(?:[/\\][^'"\n]*)?['"]|$)/g, "<path>");
|
|
350
|
+
return { isError: true, content: [{ type: "text", text: message }] };
|
|
351
|
+
}
|
|
352
|
+
const mcpProgressTokenSchema = z.union([z.string(), z.number()]);
|
|
353
|
+
const toolCallMetaSchema = z
|
|
354
|
+
.object({
|
|
355
|
+
_meta: z.object({ progressToken: mcpProgressTokenSchema.optional() }).passthrough().optional(),
|
|
356
|
+
progressToken: mcpProgressTokenSchema.optional(),
|
|
357
|
+
})
|
|
358
|
+
.passthrough();
|
|
359
|
+
function getToolCallProgressToken(params) {
|
|
360
|
+
const parsed = toolCallMetaSchema.safeParse(params);
|
|
361
|
+
if (!parsed.success)
|
|
362
|
+
return undefined;
|
|
363
|
+
return parsed.data._meta?.progressToken ?? parsed.data.progressToken;
|
|
364
|
+
}
|
|
365
|
+
function formatMcpInvalidParams(toolName, error) {
|
|
366
|
+
const details = error.issues
|
|
367
|
+
.map((issue) => {
|
|
368
|
+
const path = issue.path.length ? issue.path.join(".") : "(root)";
|
|
369
|
+
return `${path}: ${issue.message}`;
|
|
370
|
+
})
|
|
371
|
+
.join("; ");
|
|
372
|
+
return `Invalid parameters for ${toolName}: ${details}`;
|
|
373
|
+
}
|
|
374
|
+
function parseMcpToolInput(schema, input, toolName) {
|
|
375
|
+
const parsed = schema.safeParse(input);
|
|
376
|
+
if (parsed.success)
|
|
377
|
+
return parsed.data;
|
|
378
|
+
throw new ProtocolError(ProtocolErrorCode.InvalidParams, formatMcpInvalidParams(toolName, parsed.error));
|
|
379
|
+
}
|
|
380
|
+
const searchSchema = z
|
|
381
|
+
.object({
|
|
382
|
+
query: z.string(),
|
|
383
|
+
mode: z.enum(["hybrid", "symbol", "path", "text", "graph", "sql"]).optional(),
|
|
384
|
+
from: z.string().optional(),
|
|
385
|
+
depth: z.number().int().nonnegative().max(MAX_GRAPH_DEPTH).optional(),
|
|
386
|
+
limit: z.number().int().nonnegative().optional(),
|
|
387
|
+
})
|
|
388
|
+
.strict();
|
|
389
|
+
const workspaceSymbolsSchema = z
|
|
390
|
+
.object({
|
|
391
|
+
query: z.string(),
|
|
392
|
+
kinds: z.array(z.nativeEnum(SymbolKind)).optional(),
|
|
393
|
+
exportedOnly: z.boolean().optional(),
|
|
394
|
+
includeImports: z.boolean().optional(),
|
|
395
|
+
fileGlob: z.string().optional(),
|
|
396
|
+
limit: z.number().int().nonnegative().max(MAX_WORKSPACE_SYMBOL_LIMIT).optional(),
|
|
397
|
+
})
|
|
398
|
+
.strict();
|
|
399
|
+
const renamePreviewSchema = z
|
|
400
|
+
.object({
|
|
401
|
+
handle: z.string(),
|
|
402
|
+
newName: z.string(),
|
|
403
|
+
includeComments: z.boolean().optional(),
|
|
404
|
+
includeStrings: z.boolean().optional(),
|
|
405
|
+
includeFilenames: z.boolean().optional(),
|
|
406
|
+
maxEdits: z.number().int().min(1).max(MAX_RENAME_PREVIEW_EDITS).optional(),
|
|
407
|
+
})
|
|
408
|
+
.strict();
|
|
409
|
+
const refactorPlanSchema = z
|
|
410
|
+
.object({
|
|
411
|
+
handle: z.string(),
|
|
412
|
+
renameTo: z.string().optional(),
|
|
413
|
+
maxReferences: z.number().int().nonnegative().max(MAX_REFACTOR_PLAN_LIMIT).optional(),
|
|
414
|
+
maxCallers: z.number().int().nonnegative().max(MAX_REFACTOR_PLAN_LIMIT).optional(),
|
|
415
|
+
maxHierarchy: z.number().int().nonnegative().max(MAX_REFACTOR_PLAN_LIMIT).optional(),
|
|
416
|
+
includeSource: z.boolean().optional(),
|
|
417
|
+
})
|
|
418
|
+
.strict();
|
|
419
|
+
const callHierarchySchema = z
|
|
420
|
+
.object({
|
|
421
|
+
handle: z.string(),
|
|
422
|
+
depth: z.number().int().min(1).max(5).optional(),
|
|
423
|
+
limit: z.number().int().nonnegative().max(500).optional(),
|
|
424
|
+
includeHeuristic: z.boolean().optional(),
|
|
425
|
+
})
|
|
426
|
+
.strict();
|
|
427
|
+
const callsSchema = callHierarchySchema
|
|
428
|
+
.extend({
|
|
429
|
+
direction: z.enum(["callers", "callees"]),
|
|
430
|
+
})
|
|
431
|
+
.strict();
|
|
432
|
+
const typeHierarchySchema = z
|
|
433
|
+
.object({
|
|
434
|
+
handle: z.string(),
|
|
435
|
+
depth: z.number().int().min(1).max(10).optional(),
|
|
436
|
+
limit: z.number().int().nonnegative().max(500).optional(),
|
|
437
|
+
})
|
|
438
|
+
.strict();
|
|
439
|
+
const typeHierarchyUnifiedSchema = typeHierarchySchema
|
|
440
|
+
.extend({
|
|
441
|
+
direction: z.enum(["supertypes", "subtypes"]),
|
|
442
|
+
})
|
|
443
|
+
.strict();
|
|
444
|
+
const implementationsSchema = z
|
|
445
|
+
.object({
|
|
446
|
+
handle: z.string(),
|
|
447
|
+
limit: z.number().int().nonnegative().max(500).optional(),
|
|
448
|
+
})
|
|
449
|
+
.strict();
|
|
450
|
+
const exploreSchema = z
|
|
451
|
+
.object({
|
|
452
|
+
query: z.string(),
|
|
453
|
+
limit: z.number().int().nonnegative().max(50).optional(),
|
|
454
|
+
maxPackets: z.number().int().nonnegative().max(10).optional(),
|
|
455
|
+
maxPaths: z.number().int().nonnegative().max(10).optional(),
|
|
456
|
+
includeSource: z.boolean().optional(),
|
|
457
|
+
})
|
|
458
|
+
.strict();
|
|
459
|
+
const orientSchema = z
|
|
460
|
+
.object({
|
|
461
|
+
includeRoots: z.array(z.string()).optional(),
|
|
462
|
+
budget: z.enum(["small", "medium", "large"]).optional(),
|
|
463
|
+
})
|
|
464
|
+
.strict();
|
|
465
|
+
const packetGetSchema = z
|
|
466
|
+
.object({
|
|
467
|
+
target: z.string(),
|
|
468
|
+
maxSymbols: z.number().int().positive().max(200).optional(),
|
|
469
|
+
maxSnippets: z.number().int().positive().max(50).optional(),
|
|
470
|
+
maxDuplicates: z.number().int().positive().max(20).optional(),
|
|
471
|
+
})
|
|
472
|
+
.strict();
|
|
473
|
+
const getFileSchema = z
|
|
474
|
+
.object({
|
|
475
|
+
file: z.string(),
|
|
476
|
+
offset: z.number().int().positive().optional(),
|
|
477
|
+
limit: z.number().int().positive().max(MAX_FILE_VIEW_LINES).optional(),
|
|
478
|
+
maxBytes: z.number().int().positive().max(MAX_FILE_VIEW_BYTES).optional(),
|
|
479
|
+
includeGraphContext: z.boolean().optional(),
|
|
480
|
+
allowSensitive: z.boolean().optional(),
|
|
481
|
+
})
|
|
482
|
+
.strict();
|
|
483
|
+
const handleSchema = z
|
|
484
|
+
.object({
|
|
485
|
+
handle: z.string(),
|
|
486
|
+
})
|
|
487
|
+
.strict();
|
|
488
|
+
const navigationSchema = z
|
|
489
|
+
.object({
|
|
490
|
+
handle: z.string().optional(),
|
|
491
|
+
file: z.string().optional(),
|
|
492
|
+
line: z.number().int().positive().optional(),
|
|
493
|
+
column: z.number().int().nonnegative().optional(),
|
|
494
|
+
})
|
|
495
|
+
.strict()
|
|
496
|
+
.refine((request) => {
|
|
497
|
+
const hasHandle = request.handle !== undefined;
|
|
498
|
+
const hasAnyPosition = request.file !== undefined || request.line !== undefined || request.column !== undefined;
|
|
499
|
+
const hasCompletePosition = request.file !== undefined && request.line !== undefined && request.column !== undefined;
|
|
500
|
+
return hasHandle ? !hasAnyPosition : hasCompletePosition;
|
|
501
|
+
}, { message: "goto requires either handle or file, line, and column." });
|
|
502
|
+
const refsSchema = z
|
|
503
|
+
.object({
|
|
504
|
+
handle: z.string().optional(),
|
|
505
|
+
file: z.string().optional(),
|
|
506
|
+
line: z.number().int().positive().optional(),
|
|
507
|
+
column: z.number().int().nonnegative().optional(),
|
|
508
|
+
limit: z.number().int().nonnegative().optional(),
|
|
509
|
+
})
|
|
510
|
+
.strict()
|
|
511
|
+
.refine((request) => {
|
|
512
|
+
const hasHandle = request.handle !== undefined;
|
|
513
|
+
const hasAnyPosition = request.file !== undefined || request.line !== undefined || request.column !== undefined;
|
|
514
|
+
const hasCompletePosition = request.file !== undefined && request.line !== undefined && request.column !== undefined;
|
|
515
|
+
return hasHandle ? !hasAnyPosition : hasCompletePosition;
|
|
516
|
+
}, {
|
|
517
|
+
message: "refs requires either handle or file, line, and column.",
|
|
518
|
+
});
|
|
519
|
+
const fileGraphSchema = z
|
|
520
|
+
.object({
|
|
521
|
+
file: z.string(),
|
|
522
|
+
depth: z.number().int().nonnegative().optional(),
|
|
523
|
+
limit: z.number().int().nonnegative().optional(),
|
|
524
|
+
})
|
|
525
|
+
.strict();
|
|
526
|
+
const fileDepsUnifiedSchema = fileGraphSchema
|
|
527
|
+
.extend({
|
|
528
|
+
direction: z.enum(["deps", "rdeps"]),
|
|
529
|
+
})
|
|
530
|
+
.strict();
|
|
531
|
+
const pathSchema = z
|
|
532
|
+
.object({
|
|
533
|
+
from: z.string(),
|
|
534
|
+
to: z.string(),
|
|
535
|
+
})
|
|
536
|
+
.strict();
|
|
537
|
+
const gitRangeSchema = z
|
|
538
|
+
.object({
|
|
539
|
+
base: z.string(),
|
|
540
|
+
head: z.string(),
|
|
541
|
+
})
|
|
542
|
+
.strict();
|
|
543
|
+
const reviewSchema = z
|
|
544
|
+
.object({
|
|
545
|
+
base: z.string(),
|
|
546
|
+
head: z.string(),
|
|
547
|
+
reviewDepth: z.enum(["minimal", "standard", "deep"]).optional(),
|
|
548
|
+
})
|
|
549
|
+
.strict();
|
|
550
|
+
const querySqliteSchema = z
|
|
551
|
+
.object({
|
|
552
|
+
query: z.string(),
|
|
553
|
+
params: z.array(z.union([z.string(), z.number(), z.null()])).optional(),
|
|
554
|
+
limit: z.number().int().nonnegative().optional(),
|
|
555
|
+
})
|
|
556
|
+
.strict();
|
|
557
|
+
const refreshIndexSchema = z
|
|
558
|
+
.object({
|
|
559
|
+
warmup: z.enum(["off", "base", "symbols"]).optional(),
|
|
560
|
+
})
|
|
561
|
+
.strict();
|
|
562
|
+
const artifactBuildSchema = z
|
|
563
|
+
.object({
|
|
564
|
+
outDir: z.string().optional(),
|
|
565
|
+
sqlite: z.boolean().optional(),
|
|
566
|
+
graphJson: z.boolean().optional(),
|
|
567
|
+
report: z.boolean().optional(),
|
|
568
|
+
questions: z.boolean().optional(),
|
|
569
|
+
force: z.boolean().optional(),
|
|
570
|
+
})
|
|
571
|
+
.strict();
|
|
572
|
+
export function createCodegraphMcpStdioTransport(input, output) {
|
|
573
|
+
return new StdioServerTransport(createParseErrorReportingStdin(input, output), output, {
|
|
574
|
+
maxBufferSize: MAX_MCP_STDIO_FRAME_BYTES,
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
//# sourceMappingURL=protocol.js.map
|