@yalehwang/archguard 0.1.23 → 0.1.31
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 +80 -23
- package/dist/analysis/atlas-metrics-analysis.d.ts +11 -0
- package/dist/analysis/atlas-metrics-analysis.d.ts.map +1 -0
- package/dist/analysis/atlas-metrics-analysis.js +17 -0
- package/dist/analysis/atlas-metrics-analysis.js.map +1 -0
- package/dist/analysis/fitness/dependency-checker.d.ts +4 -0
- package/dist/analysis/fitness/dependency-checker.d.ts.map +1 -0
- package/dist/analysis/fitness/dependency-checker.js +16 -0
- package/dist/analysis/fitness/dependency-checker.js.map +1 -0
- package/dist/analysis/fitness/rule-evaluator.d.ts +6 -0
- package/dist/analysis/fitness/rule-evaluator.d.ts.map +1 -0
- package/dist/analysis/fitness/rule-evaluator.js +64 -0
- package/dist/analysis/fitness/rule-evaluator.js.map +1 -0
- package/dist/analysis/fitness/rule-types.d.ts +34 -0
- package/dist/analysis/fitness/rule-types.d.ts.map +1 -0
- package/dist/analysis/fitness/rule-types.js +2 -0
- package/dist/analysis/fitness/rule-types.js.map +1 -0
- package/dist/analysis/gim/direction-hint.d.ts +18 -0
- package/dist/analysis/gim/direction-hint.d.ts.map +1 -0
- package/dist/analysis/gim/direction-hint.js +76 -0
- package/dist/analysis/gim/direction-hint.js.map +1 -0
- package/dist/analysis/gim/gim-loss-evaluator.d.ts +14 -0
- package/dist/analysis/gim/gim-loss-evaluator.d.ts.map +1 -0
- package/dist/analysis/gim/gim-loss-evaluator.js +80 -0
- package/dist/analysis/gim/gim-loss-evaluator.js.map +1 -0
- package/dist/analysis/gini.d.ts +2 -0
- package/dist/analysis/gini.d.ts.map +1 -0
- package/dist/analysis/gini.js +12 -0
- package/dist/analysis/gini.js.map +1 -0
- package/dist/analysis/git-history/git-log-reader.d.ts +24 -0
- package/dist/analysis/git-history/git-log-reader.d.ts.map +1 -0
- package/dist/analysis/git-history/git-log-reader.js +117 -0
- package/dist/analysis/git-history/git-log-reader.js.map +1 -0
- package/dist/analysis/git-history/history-aggregator.d.ts +19 -0
- package/dist/analysis/git-history/history-aggregator.d.ts.map +1 -0
- package/dist/analysis/git-history/history-aggregator.js +291 -0
- package/dist/analysis/git-history/history-aggregator.js.map +1 -0
- package/dist/analysis/git-history/history-query.d.ts +111 -0
- package/dist/analysis/git-history/history-query.d.ts.map +1 -0
- package/dist/analysis/git-history/history-query.js +201 -0
- package/dist/analysis/git-history/history-query.js.map +1 -0
- package/dist/analysis/git-history/index.d.ts +4 -0
- package/dist/analysis/git-history/index.d.ts.map +1 -0
- package/dist/analysis/git-history/index.js +4 -0
- package/dist/analysis/git-history/index.js.map +1 -0
- package/dist/analysis/metric-vector-builder.d.ts +5 -0
- package/dist/analysis/metric-vector-builder.d.ts.map +1 -0
- package/dist/analysis/metric-vector-builder.js +47 -0
- package/dist/analysis/metric-vector-builder.js.map +1 -0
- package/dist/analysis/metrics-history-reader.d.ts +4 -0
- package/dist/analysis/metrics-history-reader.d.ts.map +1 -0
- package/dist/analysis/metrics-history-reader.js +24 -0
- package/dist/analysis/metrics-history-reader.js.map +1 -0
- package/dist/analysis/package-metrics-analysis.d.ts +18 -0
- package/dist/analysis/package-metrics-analysis.d.ts.map +1 -0
- package/dist/analysis/package-metrics-analysis.js +59 -0
- package/dist/analysis/package-metrics-analysis.js.map +1 -0
- package/dist/analysis/project-semantics-loader.d.ts +3 -0
- package/dist/analysis/project-semantics-loader.d.ts.map +1 -0
- package/dist/analysis/project-semantics-loader.js +25 -0
- package/dist/analysis/project-semantics-loader.js.map +1 -0
- package/dist/analysis/snapshot-diff.d.ts +19 -0
- package/dist/analysis/snapshot-diff.d.ts.map +1 -0
- package/dist/analysis/snapshot-diff.js +54 -0
- package/dist/analysis/snapshot-diff.js.map +1 -0
- package/dist/analysis/snapshot-store.d.ts +15 -0
- package/dist/analysis/snapshot-store.d.ts.map +1 -0
- package/dist/analysis/snapshot-store.js +96 -0
- package/dist/analysis/snapshot-store.js.map +1 -0
- package/dist/analysis/test-analyzer.d.ts +4 -1
- package/dist/analysis/test-analyzer.d.ts.map +1 -1
- package/dist/analysis/test-analyzer.js +67 -14
- package/dist/analysis/test-analyzer.js.map +1 -1
- package/dist/analysis/test-coverage-mapper.d.ts +1 -1
- package/dist/analysis/test-coverage-mapper.d.ts.map +1 -1
- package/dist/analysis/test-coverage-mapper.js +32 -2
- package/dist/analysis/test-coverage-mapper.js.map +1 -1
- package/dist/analysis/test-issue-detector.d.ts +1 -1
- package/dist/analysis/test-issue-detector.d.ts.map +1 -1
- package/dist/analysis/test-issue-detector.js +7 -2
- package/dist/analysis/test-issue-detector.js.map +1 -1
- package/dist/analysis/test-pattern-advisor.d.ts +2 -0
- package/dist/analysis/test-pattern-advisor.d.ts.map +1 -0
- package/dist/analysis/test-pattern-advisor.js +59 -0
- package/dist/analysis/test-pattern-advisor.js.map +1 -0
- package/dist/cli/analyze/normalize-to-diagrams.d.ts +9 -0
- package/dist/cli/analyze/normalize-to-diagrams.d.ts.map +1 -1
- package/dist/cli/analyze/normalize-to-diagrams.js +35 -26
- package/dist/cli/analyze/normalize-to-diagrams.js.map +1 -1
- package/dist/cli/analyze/run-analysis.d.ts +1 -1
- package/dist/cli/analyze/run-analysis.d.ts.map +1 -1
- package/dist/cli/analyze/run-analysis.js +186 -32
- package/dist/cli/analyze/run-analysis.js.map +1 -1
- package/dist/cli/{cache-manager.d.ts → cache/cache-manager.d.ts} +1 -1
- package/dist/cli/cache/cache-manager.d.ts.map +1 -0
- package/dist/cli/{cache-manager.js → cache/cache-manager.js} +2 -2
- package/dist/cli/cache/cache-manager.js.map +1 -0
- package/dist/cli/cognitive/ccb-assembler.d.ts +8 -0
- package/dist/cli/cognitive/ccb-assembler.d.ts.map +1 -0
- package/dist/cli/cognitive/ccb-assembler.js +213 -0
- package/dist/cli/cognitive/ccb-assembler.js.map +1 -0
- package/dist/cli/cognitive/ccb-reader.d.ts +7 -0
- package/dist/cli/cognitive/ccb-reader.d.ts.map +1 -0
- package/dist/cli/cognitive/ccb-reader.js +27 -0
- package/dist/cli/cognitive/ccb-reader.js.map +1 -0
- package/dist/cli/cognitive/ccb-schema.d.ts +36 -0
- package/dist/cli/cognitive/ccb-schema.d.ts.map +1 -0
- package/dist/cli/cognitive/ccb-schema.js +2 -0
- package/dist/cli/cognitive/ccb-schema.js.map +1 -0
- package/dist/cli/cognitive/ccb-writer.d.ts +3 -0
- package/dist/cli/cognitive/ccb-writer.d.ts.map +1 -0
- package/dist/cli/cognitive/ccb-writer.js +12 -0
- package/dist/cli/cognitive/ccb-writer.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +23 -4
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/cache.js +2 -2
- package/dist/cli/commands/cache.js.map +1 -1
- package/dist/cli/commands/check.d.ts +3 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +48 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +3 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +89 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +1 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/query.d.ts +51 -0
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +373 -17
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/config-loader.d.ts +50 -0
- package/dist/cli/config-loader.d.ts.map +1 -1
- package/dist/cli/config-loader.js +33 -0
- package/dist/cli/config-loader.js.map +1 -1
- package/dist/cli/{errors.d.ts → errors/index.d.ts} +16 -2
- package/dist/cli/errors/index.d.ts.map +1 -0
- package/dist/cli/{error-handler.js → errors/index.js} +32 -2
- package/dist/cli/errors/index.js.map +1 -0
- package/dist/cli/git-history/git-log-reader.d.ts +2 -0
- package/dist/cli/git-history/git-log-reader.d.ts.map +1 -0
- package/dist/cli/git-history/git-log-reader.js +2 -0
- package/dist/cli/git-history/git-log-reader.js.map +1 -0
- package/dist/cli/git-history/history-aggregator.d.ts +2 -0
- package/dist/cli/git-history/history-aggregator.d.ts.map +1 -0
- package/dist/cli/git-history/history-aggregator.js +2 -0
- package/dist/cli/git-history/history-aggregator.js.map +1 -0
- package/dist/cli/git-history/history-loader.d.ts +11 -0
- package/dist/cli/git-history/history-loader.d.ts.map +1 -0
- package/dist/cli/git-history/history-loader.js +30 -0
- package/dist/cli/git-history/history-loader.js.map +1 -0
- package/dist/cli/git-history/history-query.d.ts +2 -0
- package/dist/cli/git-history/history-query.d.ts.map +1 -0
- package/dist/cli/git-history/history-query.js +2 -0
- package/dist/cli/git-history/history-query.js.map +1 -0
- package/dist/cli/git-history/history-writer.d.ts +3 -0
- package/dist/cli/git-history/history-writer.d.ts.map +1 -0
- package/dist/cli/git-history/history-writer.js +14 -0
- package/dist/cli/git-history/history-writer.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp/analyze-tool.d.ts.map +1 -1
- package/dist/cli/mcp/analyze-tool.js +10 -4
- package/dist/cli/mcp/analyze-tool.js.map +1 -1
- package/dist/cli/mcp/mcp-server.d.ts.map +1 -1
- package/dist/cli/mcp/mcp-server.js +166 -47
- package/dist/cli/mcp/mcp-server.js.map +1 -1
- package/dist/cli/mcp/tools/atlas-analytics-tools.d.ts +7 -0
- package/dist/cli/mcp/tools/atlas-analytics-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/atlas-analytics-tools.js +190 -0
- package/dist/cli/mcp/tools/atlas-analytics-tools.js.map +1 -0
- package/dist/cli/mcp/tools/call-graph-tools.d.ts +3 -0
- package/dist/cli/mcp/tools/call-graph-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/call-graph-tools.js +47 -0
- package/dist/cli/mcp/tools/call-graph-tools.js.map +1 -0
- package/dist/cli/mcp/tools/ccb-tool.d.ts +3 -0
- package/dist/cli/mcp/tools/ccb-tool.d.ts.map +1 -0
- package/dist/cli/mcp/tools/ccb-tool.js +63 -0
- package/dist/cli/mcp/tools/ccb-tool.js.map +1 -0
- package/dist/cli/mcp/tools/cognitive-summary-tool.d.ts +3 -0
- package/dist/cli/mcp/tools/cognitive-summary-tool.d.ts.map +1 -0
- package/dist/cli/mcp/tools/cognitive-summary-tool.js +118 -0
- package/dist/cli/mcp/tools/cognitive-summary-tool.js.map +1 -0
- package/dist/cli/mcp/tools/gim-tools.d.ts +3 -0
- package/dist/cli/mcp/tools/gim-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/gim-tools.js +78 -0
- package/dist/cli/mcp/tools/gim-tools.js.map +1 -0
- package/dist/cli/mcp/tools/git-history-analyze-tool.d.ts +3 -0
- package/dist/cli/mcp/tools/git-history-analyze-tool.d.ts.map +1 -0
- package/dist/cli/mcp/tools/git-history-analyze-tool.js +172 -0
- package/dist/cli/mcp/tools/git-history-analyze-tool.js.map +1 -0
- package/dist/cli/mcp/tools/git-history-evidence-pack-tool.d.ts +3 -0
- package/dist/cli/mcp/tools/git-history-evidence-pack-tool.d.ts.map +1 -0
- package/dist/cli/mcp/tools/git-history-evidence-pack-tool.js +87 -0
- package/dist/cli/mcp/tools/git-history-evidence-pack-tool.js.map +1 -0
- package/dist/cli/mcp/tools/git-history-tools.d.ts +3 -0
- package/dist/cli/mcp/tools/git-history-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/git-history-tools.js +125 -0
- package/dist/cli/mcp/tools/git-history-tools.js.map +1 -0
- package/dist/cli/mcp/tools/metric-trend-tools.d.ts +8 -0
- package/dist/cli/mcp/tools/metric-trend-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/metric-trend-tools.js +50 -0
- package/dist/cli/mcp/tools/metric-trend-tools.js.map +1 -0
- package/dist/cli/mcp/tools/package-metrics-tools.d.ts +7 -0
- package/dist/cli/mcp/tools/package-metrics-tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools/package-metrics-tools.js +62 -0
- package/dist/cli/mcp/tools/package-metrics-tools.js.map +1 -0
- package/dist/cli/mcp/tools/test-analysis-tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools/test-analysis-tools.js +75 -84
- package/dist/cli/mcp/tools/test-analysis-tools.js.map +1 -1
- package/dist/cli/metrics-history-writer.d.ts +16 -0
- package/dist/cli/metrics-history-writer.d.ts.map +1 -0
- package/dist/cli/metrics-history-writer.js +16 -0
- package/dist/cli/metrics-history-writer.js.map +1 -0
- package/dist/cli/processors/arch-json-provider-types.d.ts +12 -0
- package/dist/cli/processors/arch-json-provider-types.d.ts.map +1 -0
- package/dist/cli/processors/arch-json-provider-types.js +2 -0
- package/dist/cli/processors/arch-json-provider-types.js.map +1 -0
- package/dist/cli/processors/arch-json-provider.d.ts +4 -13
- package/dist/cli/processors/arch-json-provider.d.ts.map +1 -1
- package/dist/cli/processors/arch-json-provider.js +54 -76
- package/dist/cli/processors/arch-json-provider.js.map +1 -1
- package/dist/cli/processors/arch-json-utils.d.ts +4 -0
- package/dist/cli/processors/arch-json-utils.d.ts.map +1 -0
- package/dist/cli/processors/arch-json-utils.js +73 -0
- package/dist/cli/processors/arch-json-utils.js.map +1 -0
- package/dist/cli/processors/diagram-output-router.d.ts +3 -1
- package/dist/cli/processors/diagram-output-router.d.ts.map +1 -1
- package/dist/cli/processors/diagram-output-router.js +28 -3
- package/dist/cli/processors/diagram-output-router.js.map +1 -1
- package/dist/cli/processors/diagram-pipeline-runner.d.ts +20 -0
- package/dist/cli/processors/diagram-pipeline-runner.d.ts.map +1 -0
- package/dist/cli/processors/diagram-pipeline-runner.js +171 -0
- package/dist/cli/processors/diagram-pipeline-runner.js.map +1 -0
- package/dist/cli/processors/diagram-processor.d.ts +11 -8
- package/dist/cli/processors/diagram-processor.d.ts.map +1 -1
- package/dist/cli/processors/diagram-processor.js +19 -148
- package/dist/cli/processors/diagram-processor.js.map +1 -1
- package/dist/cli/processors/query-scope-collector.d.ts +11 -0
- package/dist/cli/processors/query-scope-collector.d.ts.map +1 -0
- package/dist/cli/processors/query-scope-collector.js +44 -0
- package/dist/cli/processors/query-scope-collector.js.map +1 -0
- package/dist/cli/processors/test-coverage-writer.d.ts +4 -0
- package/dist/cli/processors/test-coverage-writer.d.ts.map +1 -0
- package/dist/cli/processors/test-coverage-writer.js +22 -0
- package/dist/cli/processors/test-coverage-writer.js.map +1 -0
- package/dist/cli/processors/worker-pool-factory.d.ts +6 -0
- package/dist/cli/processors/worker-pool-factory.d.ts.map +1 -0
- package/dist/cli/processors/worker-pool-factory.js +22 -0
- package/dist/cli/processors/worker-pool-factory.js.map +1 -0
- package/dist/cli/{progress.d.ts → progress/index.d.ts} +1 -1
- package/dist/cli/progress/index.d.ts.map +1 -0
- package/dist/cli/{progress.js → progress/index.js} +1 -1
- package/dist/cli/progress/index.js.map +1 -0
- package/dist/cli/query/arch-index-builder.d.ts +1 -3
- package/dist/cli/query/arch-index-builder.d.ts.map +1 -1
- package/dist/cli/query/arch-index-builder.js +1 -125
- package/dist/cli/query/arch-index-builder.js.map +1 -1
- package/dist/cli/query/arch-index.d.ts +2 -16
- package/dist/cli/query/arch-index.d.ts.map +1 -1
- package/dist/cli/query/arch-index.js +1 -1
- package/dist/cli/query/arch-index.js.map +1 -1
- package/dist/cli/query/engine-loader.d.ts +9 -1
- package/dist/cli/query/engine-loader.d.ts.map +1 -1
- package/dist/cli/query/engine-loader.js +5 -1
- package/dist/cli/query/engine-loader.js.map +1 -1
- package/dist/cli/query/query-artifacts.d.ts.map +1 -1
- package/dist/cli/query/query-artifacts.js +2 -1
- package/dist/cli/query/query-artifacts.js.map +1 -1
- package/dist/cli/query/query-engine.d.ts +3 -105
- package/dist/cli/query/query-engine.d.ts.map +1 -1
- package/dist/cli/query/query-engine.js +1 -417
- package/dist/cli/query/query-engine.js.map +1 -1
- package/dist/cli/utils/java-project-structure-detector.js +1 -1
- package/dist/cli/utils/java-project-structure-detector.js.map +1 -1
- package/dist/cli/utils/kotlin-project-structure-detector.d.ts +7 -0
- package/dist/cli/utils/kotlin-project-structure-detector.d.ts.map +1 -0
- package/dist/cli/utils/kotlin-project-structure-detector.js +101 -0
- package/dist/cli/utils/kotlin-project-structure-detector.js.map +1 -0
- package/dist/cli/utils/output-path-resolver.d.ts.map +1 -1
- package/dist/cli/utils/output-path-resolver.js.map +1 -1
- package/dist/cli/utils/project-language-detector.d.ts +1 -1
- package/dist/cli/utils/project-language-detector.d.ts.map +1 -1
- package/dist/cli/utils/project-language-detector.js +5 -1
- package/dist/cli/utils/project-language-detector.js.map +1 -1
- package/dist/cli/utils/project-structure-detector.js +3 -3
- package/dist/cli/utils/project-structure-detector.js.map +1 -1
- package/dist/cli/utils/test-output-writer.d.ts +1 -1
- package/dist/cli/utils/test-output-writer.d.ts.map +1 -1
- package/dist/cli/utils/test-output-writer.js.map +1 -1
- package/dist/core/entity-type-registry.d.ts +10 -0
- package/dist/core/entity-type-registry.d.ts.map +1 -0
- package/dist/core/entity-type-registry.js +17 -0
- package/dist/core/entity-type-registry.js.map +1 -0
- package/dist/core/interfaces/dependency.d.ts +1 -1
- package/dist/core/interfaces/dependency.d.ts.map +1 -1
- package/dist/core/interfaces/index.d.ts +2 -0
- package/dist/core/interfaces/index.d.ts.map +1 -1
- package/dist/core/interfaces/index.js.map +1 -1
- package/dist/core/interfaces/language-plugin.d.ts +8 -1
- package/dist/core/interfaces/language-plugin.d.ts.map +1 -1
- package/dist/core/interfaces/parser-facade.d.ts +5 -0
- package/dist/core/interfaces/parser-facade.d.ts.map +1 -0
- package/dist/core/interfaces/parser-facade.js +2 -0
- package/dist/core/interfaces/parser-facade.js.map +1 -0
- package/dist/core/interfaces/renderer-facade.d.ts +8 -0
- package/dist/core/interfaces/renderer-facade.d.ts.map +1 -0
- package/dist/core/interfaces/renderer-facade.js +2 -0
- package/dist/core/interfaces/renderer-facade.js.map +1 -0
- package/dist/core/interfaces/validation.d.ts.map +1 -1
- package/dist/core/plugin-registry.d.ts.map +1 -1
- package/dist/core/plugin-registry.js +2 -0
- package/dist/core/plugin-registry.js.map +1 -1
- package/dist/core/query/arch-index-builder.d.ts +4 -0
- package/dist/core/query/arch-index-builder.d.ts.map +1 -0
- package/dist/core/query/arch-index-builder.js +126 -0
- package/dist/core/query/arch-index-builder.js.map +1 -0
- package/dist/core/query/arch-index.d.ts +17 -0
- package/dist/core/query/arch-index.d.ts.map +1 -0
- package/dist/core/query/arch-index.js +2 -0
- package/dist/core/query/arch-index.js.map +1 -0
- package/dist/core/query/arch-metrics-cognitive.d.ts +32 -0
- package/dist/core/query/arch-metrics-cognitive.d.ts.map +1 -0
- package/dist/core/query/arch-metrics-cognitive.js +60 -0
- package/dist/core/query/arch-metrics-cognitive.js.map +1 -0
- package/dist/core/query/arch-metrics-quality.d.ts +24 -0
- package/dist/core/query/arch-metrics-quality.d.ts.map +1 -0
- package/dist/core/query/arch-metrics-quality.js +86 -0
- package/dist/core/query/arch-metrics-quality.js.map +1 -0
- package/dist/core/query/arch-metrics-structure.d.ts +43 -0
- package/dist/core/query/arch-metrics-structure.d.ts.map +1 -0
- package/dist/core/query/arch-metrics-structure.js +291 -0
- package/dist/core/query/arch-metrics-structure.js.map +1 -0
- package/dist/core/query/arch-metrics.d.ts +54 -0
- package/dist/core/query/arch-metrics.d.ts.map +1 -0
- package/dist/core/query/arch-metrics.js +42 -0
- package/dist/core/query/arch-metrics.js.map +1 -0
- package/dist/core/query/edge-list-serializer.d.ts +4 -0
- package/dist/core/query/edge-list-serializer.d.ts.map +1 -0
- package/dist/core/query/edge-list-serializer.js +24 -0
- package/dist/core/query/edge-list-serializer.js.map +1 -0
- package/dist/core/query/entity-query-service.d.ts +15 -0
- package/dist/core/query/entity-query-service.d.ts.map +1 -0
- package/dist/core/query/entity-query-service.js +51 -0
- package/dist/core/query/entity-query-service.js.map +1 -0
- package/dist/core/query/extension-accessor.d.ts +15 -0
- package/dist/core/query/extension-accessor.d.ts.map +1 -0
- package/dist/core/query/extension-accessor.js +28 -0
- package/dist/core/query/extension-accessor.js.map +1 -0
- package/dist/core/query/index.d.ts +8 -0
- package/dist/core/query/index.d.ts.map +1 -0
- package/dist/core/query/index.js +6 -0
- package/dist/core/query/index.js.map +1 -0
- package/dist/core/query/output-scope-filter.d.ts +6 -0
- package/dist/core/query/output-scope-filter.d.ts.map +1 -0
- package/dist/core/query/output-scope-filter.js +45 -0
- package/dist/core/query/output-scope-filter.js.map +1 -0
- package/dist/core/query/query-engine.d.ts +116 -0
- package/dist/core/query/query-engine.d.ts.map +1 -0
- package/dist/core/query/query-engine.js +105 -0
- package/dist/core/query/query-engine.js.map +1 -0
- package/dist/core/query/relation-query-service.d.ts +21 -0
- package/dist/core/query/relation-query-service.d.ts.map +1 -0
- package/dist/core/query/relation-query-service.js +124 -0
- package/dist/core/query/relation-query-service.js.map +1 -0
- package/dist/mermaid/auto-repair.d.ts +1 -1
- package/dist/mermaid/auto-repair.d.ts.map +1 -1
- package/dist/mermaid/auto-repair.js +6 -6
- package/dist/mermaid/auto-repair.js.map +1 -1
- package/dist/mermaid/cpp-package-flowchart-generator.js +1 -1
- package/dist/mermaid/cpp-package-flowchart-generator.js.map +1 -1
- package/dist/mermaid/diagram-generator.d.ts +2 -1
- package/dist/mermaid/diagram-generator.d.ts.map +1 -1
- package/dist/mermaid/diagram-generator.js +17 -16
- package/dist/mermaid/diagram-generator.js.map +1 -1
- package/dist/mermaid/generator-formatting.d.ts +1 -1
- package/dist/mermaid/generator-formatting.d.ts.map +1 -1
- package/dist/mermaid/generator-formatting.js +2 -0
- package/dist/mermaid/generator-formatting.js.map +1 -1
- package/dist/mermaid/generator-validation.d.ts.map +1 -1
- package/dist/mermaid/generator-validation.js.map +1 -1
- package/dist/mermaid/generator.d.ts +5 -10
- package/dist/mermaid/generator.d.ts.map +1 -1
- package/dist/mermaid/generator.js +192 -227
- package/dist/mermaid/generator.js.map +1 -1
- package/dist/mermaid/grouper.d.ts.map +1 -1
- package/dist/mermaid/grouper.js.map +1 -1
- package/dist/mermaid/test-coverage-renderer.d.ts +1 -1
- package/dist/mermaid/test-coverage-renderer.d.ts.map +1 -1
- package/dist/mermaid/ts-module-graph-renderer.d.ts +6 -2
- package/dist/mermaid/ts-module-graph-renderer.d.ts.map +1 -1
- package/dist/mermaid/ts-module-graph-renderer.js +49 -2
- package/dist/mermaid/ts-module-graph-renderer.js.map +1 -1
- package/dist/mermaid/validator-quality.js +1 -1
- package/dist/mermaid/validator-quality.js.map +1 -1
- package/dist/mermaid/validator-render.js +1 -1
- package/dist/mermaid/validator-render.js.map +1 -1
- package/dist/parser/archjson-aggregator.d.ts +1 -0
- package/dist/parser/archjson-aggregator.d.ts.map +1 -1
- package/dist/parser/archjson-aggregator.js +37 -7
- package/dist/parser/archjson-aggregator.js.map +1 -1
- package/dist/parser/call-edge-extractor.d.ts +13 -0
- package/dist/parser/call-edge-extractor.d.ts.map +1 -0
- package/dist/parser/call-edge-extractor.js +70 -0
- package/dist/parser/call-edge-extractor.js.map +1 -0
- package/dist/parser/metrics-calculator.d.ts.map +1 -1
- package/dist/parser/metrics-calculator.js +2 -1
- package/dist/parser/metrics-calculator.js.map +1 -1
- package/dist/parser/parallel-parser.d.ts +2 -1
- package/dist/parser/parallel-parser.d.ts.map +1 -1
- package/dist/parser/parallel-parser.js +4 -2
- package/dist/parser/parallel-parser.js.map +1 -1
- package/dist/parser/relation-extractor.d.ts +1 -0
- package/dist/parser/relation-extractor.d.ts.map +1 -1
- package/dist/parser/relation-extractor.js +84 -4
- package/dist/parser/relation-extractor.js.map +1 -1
- package/dist/parser/typescript-parser.d.ts +2 -0
- package/dist/parser/typescript-parser.d.ts.map +1 -1
- package/dist/parser/typescript-parser.js +44 -5
- package/dist/parser/typescript-parser.js.map +1 -1
- package/dist/plugins/cpp/archjson-mapper.d.ts.map +1 -1
- package/dist/plugins/cpp/archjson-mapper.js.map +1 -1
- package/dist/plugins/cpp/builders/class-builder.d.ts.map +1 -1
- package/dist/plugins/cpp/builders/class-builder.js +6 -1
- package/dist/plugins/cpp/builders/class-builder.js.map +1 -1
- package/dist/plugins/cpp/index.d.ts +3 -3
- package/dist/plugins/cpp/index.d.ts.map +1 -1
- package/dist/plugins/cpp/index.js +36 -7
- package/dist/plugins/cpp/index.js.map +1 -1
- package/dist/plugins/cpp/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/cpp/tree-sitter-bridge.js +10 -7
- package/dist/plugins/cpp/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/golang/archjson-mapper.d.ts +3 -1
- package/dist/plugins/golang/archjson-mapper.d.ts.map +1 -1
- package/dist/plugins/golang/archjson-mapper.js +56 -1
- package/dist/plugins/golang/archjson-mapper.js.map +1 -1
- package/dist/plugins/golang/atlas/behavior-analyzer.d.ts +2 -1
- package/dist/plugins/golang/atlas/behavior-analyzer.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/behavior-analyzer.js +2 -2
- package/dist/plugins/golang/atlas/behavior-analyzer.js.map +1 -1
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.d.ts +5 -1
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.js +43 -1
- package/dist/plugins/golang/atlas/builders/capability-graph-builder.js.map +1 -1
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.d.ts +3 -0
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.js +166 -6
- package/dist/plugins/golang/atlas/builders/flow-graph-builder.js.map +1 -1
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.js +12 -5
- package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.js.map +1 -1
- package/dist/plugins/golang/atlas/builders/package-graph-builder.js +5 -5
- package/dist/plugins/golang/atlas/builders/package-graph-builder.js.map +1 -1
- package/dist/plugins/golang/atlas/framework-detector.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/framework-detector.js +2 -0
- package/dist/plugins/golang/atlas/framework-detector.js.map +1 -1
- package/dist/plugins/golang/atlas/go-mod-resolver.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/go-mod-resolver.js +3 -3
- package/dist/plugins/golang/atlas/go-mod-resolver.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/atlas-renderer.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/atlas-renderer.js +32 -2
- package/dist/plugins/golang/atlas/renderers/atlas-renderer.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/capability-mermaid-template.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/capability-mermaid-template.js +16 -5
- package/dist/plugins/golang/atlas/renderers/capability-mermaid-template.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/flow-mermaid-template.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/goroutine-mermaid-template.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/goroutine-mermaid-template.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/mermaid-templates.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/package-mermaid-template.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/package-mermaid-template.js +5 -5
- package/dist/plugins/golang/atlas/renderers/package-mermaid-template.js.map +1 -1
- package/dist/plugins/golang/atlas/renderers/template-shared.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/renderers/template-shared.js.map +1 -1
- package/dist/plugins/golang/atlas/types.d.ts +9 -3
- package/dist/plugins/golang/atlas/types.d.ts.map +1 -1
- package/dist/plugins/golang/atlas/types.js +1 -1
- package/dist/plugins/golang/atlas/types.js.map +1 -1
- package/dist/plugins/golang/builders/function-builder.d.ts +19 -0
- package/dist/plugins/golang/builders/function-builder.d.ts.map +1 -0
- package/dist/plugins/golang/builders/function-builder.js +206 -0
- package/dist/plugins/golang/builders/function-builder.js.map +1 -0
- package/dist/plugins/golang/builders/goroutine-builder.d.ts +11 -0
- package/dist/plugins/golang/builders/goroutine-builder.d.ts.map +1 -0
- package/dist/plugins/golang/builders/goroutine-builder.js +147 -0
- package/dist/plugins/golang/builders/goroutine-builder.js.map +1 -0
- package/dist/plugins/golang/builders/interface-builder.d.ts +9 -0
- package/dist/plugins/golang/builders/interface-builder.d.ts.map +1 -0
- package/dist/plugins/golang/builders/interface-builder.js +126 -0
- package/dist/plugins/golang/builders/interface-builder.js.map +1 -0
- package/dist/plugins/golang/builders/node-utils.d.ts +8 -0
- package/dist/plugins/golang/builders/node-utils.d.ts.map +1 -0
- package/dist/plugins/golang/builders/node-utils.js +18 -0
- package/dist/plugins/golang/builders/node-utils.js.map +1 -0
- package/dist/plugins/golang/builders/struct-builder.d.ts +12 -0
- package/dist/plugins/golang/builders/struct-builder.d.ts.map +1 -0
- package/dist/plugins/golang/builders/struct-builder.js +81 -0
- package/dist/plugins/golang/builders/struct-builder.js.map +1 -0
- package/dist/plugins/golang/go-atlas-adapter.d.ts +11 -0
- package/dist/plugins/golang/go-atlas-adapter.d.ts.map +1 -0
- package/dist/plugins/golang/go-atlas-adapter.js +47 -0
- package/dist/plugins/golang/go-atlas-adapter.js.map +1 -0
- package/dist/plugins/golang/go-atlas-coordinator.d.ts +12 -0
- package/dist/plugins/golang/go-atlas-coordinator.d.ts.map +1 -0
- package/dist/plugins/golang/go-atlas-coordinator.js +76 -0
- package/dist/plugins/golang/go-atlas-coordinator.js.map +1 -0
- package/dist/plugins/golang/go-mod-reader.d.ts +2 -0
- package/dist/plugins/golang/go-mod-reader.d.ts.map +1 -0
- package/dist/plugins/golang/go-mod-reader.js +12 -0
- package/dist/plugins/golang/go-mod-reader.js.map +1 -0
- package/dist/plugins/golang/go-parse-coordinator.d.ts +23 -0
- package/dist/plugins/golang/go-parse-coordinator.d.ts.map +1 -0
- package/dist/plugins/golang/go-parse-coordinator.js +137 -0
- package/dist/plugins/golang/go-parse-coordinator.js.map +1 -0
- package/dist/plugins/golang/go-test-analyzer.d.ts +10 -0
- package/dist/plugins/golang/go-test-analyzer.d.ts.map +1 -0
- package/dist/plugins/golang/go-test-analyzer.js +90 -0
- package/dist/plugins/golang/go-test-analyzer.js.map +1 -0
- package/dist/plugins/golang/gopls-client.js +6 -6
- package/dist/plugins/golang/gopls-client.js.map +1 -1
- package/dist/plugins/golang/gopls-interface-resolver.d.ts +19 -0
- package/dist/plugins/golang/gopls-interface-resolver.d.ts.map +1 -0
- package/dist/plugins/golang/gopls-interface-resolver.js +49 -0
- package/dist/plugins/golang/gopls-interface-resolver.js.map +1 -0
- package/dist/plugins/golang/index.d.ts +12 -17
- package/dist/plugins/golang/index.d.ts.map +1 -1
- package/dist/plugins/golang/index.js +44 -326
- package/dist/plugins/golang/index.js.map +1 -1
- package/dist/plugins/golang/tree-sitter-bridge.d.ts +4 -24
- package/dist/plugins/golang/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/golang/tree-sitter-bridge.js +16 -526
- package/dist/plugins/golang/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/golang/types.d.ts +5 -0
- package/dist/plugins/golang/types.d.ts.map +1 -1
- package/dist/plugins/java/archjson-mapper.d.ts +3 -1
- package/dist/plugins/java/archjson-mapper.d.ts.map +1 -1
- package/dist/plugins/java/archjson-mapper.js +123 -0
- package/dist/plugins/java/archjson-mapper.js.map +1 -1
- package/dist/plugins/java/dependency-extractor.js +2 -2
- package/dist/plugins/java/dependency-extractor.js.map +1 -1
- package/dist/plugins/java/index.d.ts +2 -2
- package/dist/plugins/java/index.d.ts.map +1 -1
- package/dist/plugins/java/index.js +73 -16
- package/dist/plugins/java/index.js.map +1 -1
- package/dist/plugins/java/maven-crossmodule-parser.d.ts +9 -0
- package/dist/plugins/java/maven-crossmodule-parser.d.ts.map +1 -0
- package/dist/plugins/java/maven-crossmodule-parser.js +54 -0
- package/dist/plugins/java/maven-crossmodule-parser.js.map +1 -0
- package/dist/plugins/java/tree-sitter-bridge.d.ts +2 -0
- package/dist/plugins/java/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/java/tree-sitter-bridge.js +70 -7
- package/dist/plugins/java/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/java/types.d.ts +7 -0
- package/dist/plugins/java/types.d.ts.map +1 -1
- package/dist/plugins/kotlin/archjson-mapper.d.ts +12 -0
- package/dist/plugins/kotlin/archjson-mapper.d.ts.map +1 -0
- package/dist/plugins/kotlin/archjson-mapper.js +157 -0
- package/dist/plugins/kotlin/archjson-mapper.js.map +1 -0
- package/dist/plugins/kotlin/builders/class-builder.d.ts +26 -0
- package/dist/plugins/kotlin/builders/class-builder.d.ts.map +1 -0
- package/dist/plugins/kotlin/builders/class-builder.js +366 -0
- package/dist/plugins/kotlin/builders/class-builder.js.map +1 -0
- package/dist/plugins/kotlin/builders/function-builder.d.ts +15 -0
- package/dist/plugins/kotlin/builders/function-builder.d.ts.map +1 -0
- package/dist/plugins/kotlin/builders/function-builder.js +172 -0
- package/dist/plugins/kotlin/builders/function-builder.js.map +1 -0
- package/dist/plugins/kotlin/builders/import-resolver.d.ts +5 -0
- package/dist/plugins/kotlin/builders/import-resolver.d.ts.map +1 -0
- package/dist/plugins/kotlin/builders/import-resolver.js +10 -0
- package/dist/plugins/kotlin/builders/import-resolver.js.map +1 -0
- package/dist/plugins/kotlin/dependency-extractor.d.ts +13 -0
- package/dist/plugins/kotlin/dependency-extractor.d.ts.map +1 -0
- package/dist/plugins/kotlin/dependency-extractor.js +104 -0
- package/dist/plugins/kotlin/dependency-extractor.js.map +1 -0
- package/dist/plugins/kotlin/index.d.ts +26 -0
- package/dist/plugins/kotlin/index.d.ts.map +1 -0
- package/dist/plugins/kotlin/index.js +238 -0
- package/dist/plugins/kotlin/index.js.map +1 -0
- package/dist/plugins/kotlin/kotlin-type-extractor.d.ts +7 -0
- package/dist/plugins/kotlin/kotlin-type-extractor.d.ts.map +1 -0
- package/dist/plugins/kotlin/kotlin-type-extractor.js +96 -0
- package/dist/plugins/kotlin/kotlin-type-extractor.js.map +1 -0
- package/dist/plugins/kotlin/tree-sitter-bridge.d.ts +15 -0
- package/dist/plugins/kotlin/tree-sitter-bridge.d.ts.map +1 -0
- package/dist/plugins/kotlin/tree-sitter-bridge.js +79 -0
- package/dist/plugins/kotlin/tree-sitter-bridge.js.map +1 -0
- package/dist/plugins/kotlin/types.d.ts +48 -0
- package/dist/plugins/kotlin/types.d.ts.map +1 -0
- package/dist/plugins/kotlin/types.js +2 -0
- package/dist/plugins/kotlin/types.js.map +1 -0
- package/dist/plugins/python/archjson-mapper.d.ts +7 -2
- package/dist/plugins/python/archjson-mapper.d.ts.map +1 -1
- package/dist/plugins/python/archjson-mapper.js +117 -10
- package/dist/plugins/python/archjson-mapper.js.map +1 -1
- package/dist/plugins/python/dependency-extractor.js +1 -1
- package/dist/plugins/python/dependency-extractor.js.map +1 -1
- package/dist/plugins/python/import-extractor.d.ts +11 -0
- package/dist/plugins/python/import-extractor.d.ts.map +1 -0
- package/dist/plugins/python/import-extractor.js +67 -0
- package/dist/plugins/python/import-extractor.js.map +1 -0
- package/dist/plugins/python/index.d.ts +4 -3
- package/dist/plugins/python/index.d.ts.map +1 -1
- package/dist/plugins/python/index.js +86 -11
- package/dist/plugins/python/index.js.map +1 -1
- package/dist/plugins/python/tree-sitter-bridge.d.ts +2 -0
- package/dist/plugins/python/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/python/tree-sitter-bridge.js +67 -1
- package/dist/plugins/python/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/python/types.d.ts +6 -0
- package/dist/plugins/python/types.d.ts.map +1 -1
- package/dist/plugins/shared/mapper-utils.d.ts +1 -1
- package/dist/plugins/shared/mapper-utils.d.ts.map +1 -1
- package/dist/plugins/shared/mapper-utils.js.map +1 -1
- package/dist/plugins/typescript/builders/module-graph-builder.d.ts +2 -2
- package/dist/plugins/typescript/builders/module-graph-builder.d.ts.map +1 -1
- package/dist/plugins/typescript/builders/module-graph-builder.js +29 -8
- package/dist/plugins/typescript/builders/module-graph-builder.js.map +1 -1
- package/dist/plugins/typescript/index.d.ts +3 -2
- package/dist/plugins/typescript/index.d.ts.map +1 -1
- package/dist/plugins/typescript/index.js +116 -10
- package/dist/plugins/typescript/index.js.map +1 -1
- package/dist/plugins/typescript/typescript-analyzer.d.ts +2 -2
- package/dist/plugins/typescript/typescript-analyzer.d.ts.map +1 -1
- package/dist/plugins/typescript/typescript-analyzer.js +1 -1
- package/dist/plugins/typescript/typescript-analyzer.js.map +1 -1
- package/dist/types/cognitive-summary.d.ts +20 -0
- package/dist/types/cognitive-summary.d.ts.map +1 -0
- package/dist/types/cognitive-summary.js +2 -0
- package/dist/types/cognitive-summary.js.map +1 -0
- package/dist/types/config-cli.d.ts +4 -0
- package/dist/types/config-cli.d.ts.map +1 -1
- package/dist/types/config-global.d.ts +4 -0
- package/dist/types/config-global.d.ts.map +1 -1
- package/dist/types/{extensions.d.ts → extensions/go-atlas.d.ts} +5 -106
- package/dist/types/extensions/go-atlas.d.ts.map +1 -0
- package/dist/types/extensions/go-atlas.js +2 -0
- package/dist/types/extensions/go-atlas.js.map +1 -0
- package/dist/types/extensions/index.d.ts +15 -0
- package/dist/types/extensions/index.d.ts.map +1 -0
- package/dist/types/extensions/index.js +5 -0
- package/dist/types/extensions/index.js.map +1 -0
- package/dist/types/extensions/project-semantics.d.ts +55 -0
- package/dist/types/extensions/project-semantics.d.ts.map +1 -0
- package/dist/types/extensions/project-semantics.js +126 -0
- package/dist/types/extensions/project-semantics.js.map +1 -0
- package/dist/types/extensions/test-analysis.d.ts +68 -0
- package/dist/types/extensions/test-analysis.d.ts.map +1 -0
- package/dist/types/extensions/test-analysis.js +2 -0
- package/dist/types/extensions/test-analysis.js.map +1 -0
- package/dist/types/extensions/ts-analysis.d.ts +33 -0
- package/dist/types/extensions/ts-analysis.d.ts.map +1 -0
- package/dist/types/extensions/ts-analysis.js +2 -0
- package/dist/types/extensions/ts-analysis.js.map +1 -0
- package/dist/types/git-history.d.ts +68 -0
- package/dist/types/git-history.d.ts.map +1 -0
- package/dist/types/git-history.js +2 -0
- package/dist/types/git-history.js.map +1 -0
- package/dist/types/index.d.ts +38 -29
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/metric-vector.d.ts +17 -0
- package/dist/types/metric-vector.d.ts.map +1 -0
- package/dist/types/metric-vector.js +2 -0
- package/dist/types/metric-vector.js.map +1 -0
- package/dist/utils/cli-detector.js +2 -2
- package/dist/utils/cli-detector.js.map +1 -1
- package/dist/utils/tsconfig-finder.d.ts.map +1 -1
- package/dist/utils/tsconfig-finder.js +6 -1
- package/dist/utils/tsconfig-finder.js.map +1 -1
- package/node_modules/tree-sitter/prebuilds/linux-x64/node.napi.glibc.node +0 -0
- package/package.json +5 -2
- package/dist/cli/cache-manager.d.ts.map +0 -1
- package/dist/cli/cache-manager.js.map +0 -1
- package/dist/cli/error-handler.d.ts +0 -15
- package/dist/cli/error-handler.d.ts.map +0 -1
- package/dist/cli/error-handler.js.map +0 -1
- package/dist/cli/errors.d.ts.map +0 -1
- package/dist/cli/errors.js +0 -31
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/progress.d.ts.map +0 -1
- package/dist/cli/progress.js.map +0 -1
- package/dist/types/extensions.d.ts.map +0 -1
- package/dist/types/extensions.js +0 -4
- package/dist/types/extensions.js.map +0 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { resolveRoot } from '../mcp-server.js';
|
|
4
|
+
import { loadHistoryData, GitHistoryNotFoundError } from '../../git-history/history-loader.js';
|
|
5
|
+
import { HistoryQuery } from '../../git-history/history-query.js';
|
|
6
|
+
const NOT_ANALYZED_MSG = 'No git history data found. Run `archguard_analyze_git` first to collect history artifacts.';
|
|
7
|
+
function textResponse(text) {
|
|
8
|
+
return { content: [{ type: 'text', text }] };
|
|
9
|
+
}
|
|
10
|
+
function formatEvidencePack(pack) {
|
|
11
|
+
const lines = [];
|
|
12
|
+
lines.push('## Evidence Pack');
|
|
13
|
+
lines.push('');
|
|
14
|
+
if (pack.results.length === 0 && pack.notFound.length > 0) {
|
|
15
|
+
lines.push('No targets were found in git history data.');
|
|
16
|
+
lines.push('');
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
lines.push('| target | type | riskScore | riskLevel | topFactor |');
|
|
20
|
+
lines.push('|--------|------|-----------|-----------|-----------|');
|
|
21
|
+
for (const entry of pack.results) {
|
|
22
|
+
lines.push(`| ${entry.target} | ${entry.targetType} | ${entry.riskScore.toFixed(3)} | ${entry.riskLevel} | ${entry.topFactor} |`);
|
|
23
|
+
}
|
|
24
|
+
lines.push('');
|
|
25
|
+
}
|
|
26
|
+
lines.push('## Hotspots');
|
|
27
|
+
lines.push('');
|
|
28
|
+
if (pack.hotspots.length === 0) {
|
|
29
|
+
lines.push('_No hotspots (no targets resolved)._');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
for (let i = 0; i < pack.hotspots.length; i++) {
|
|
33
|
+
const h = pack.hotspots[i];
|
|
34
|
+
lines.push(`${i + 1}. **${h.target}** (${h.targetType}) — riskScore: ${h.riskScore.toFixed(3)}, riskLevel: ${h.riskLevel}, topFactor: ${h.topFactor}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
lines.push('');
|
|
38
|
+
if (pack.notFound.length > 0) {
|
|
39
|
+
lines.push('## Not Found');
|
|
40
|
+
lines.push('');
|
|
41
|
+
for (const nf of pack.notFound) {
|
|
42
|
+
lines.push(`- ${nf.target} (${nf.targetType}): ${nf.reason}`);
|
|
43
|
+
}
|
|
44
|
+
lines.push('');
|
|
45
|
+
}
|
|
46
|
+
lines.push('```json');
|
|
47
|
+
lines.push(JSON.stringify(pack, null, 2));
|
|
48
|
+
lines.push('```');
|
|
49
|
+
return lines.join('\n');
|
|
50
|
+
}
|
|
51
|
+
export function registerEvidencePackTool(server, defaultRoot) {
|
|
52
|
+
server.tool('archguard_get_evidence_pack', 'Return a gate-ready aggregated risk evidence pack for multiple files or packages. Each target returns riskScore, riskLevel, and topFactor. Response includes per-target details, top-3 hotspots sorted by risk, and any not-found targets. Use before dispatching tasks to inject structural risk context. Requires archguard_analyze_git.', {
|
|
53
|
+
projectRoot: z
|
|
54
|
+
.string()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
57
|
+
targets: z
|
|
58
|
+
.array(z.object({
|
|
59
|
+
targetType: z
|
|
60
|
+
.enum(['file', 'package'])
|
|
61
|
+
.describe('Whether the target is a file path or a package path.'),
|
|
62
|
+
target: z
|
|
63
|
+
.string()
|
|
64
|
+
.describe('File path or package path to query (e.g. "src/cli/mcp-server.ts" or "src/cli").'),
|
|
65
|
+
}))
|
|
66
|
+
.min(1)
|
|
67
|
+
.max(20)
|
|
68
|
+
.describe('List of targets to query (1–20 entries).'),
|
|
69
|
+
}, async (params) => {
|
|
70
|
+
const root = resolveRoot(params.projectRoot, defaultRoot);
|
|
71
|
+
const archguardDir = path.join(root, '.archguard');
|
|
72
|
+
try {
|
|
73
|
+
const data = await loadHistoryData(archguardDir);
|
|
74
|
+
const query = new HistoryQuery(data);
|
|
75
|
+
const pack = query.getEvidencePack(params.targets);
|
|
76
|
+
return textResponse(formatEvidencePack(pack));
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
if (err instanceof GitHistoryNotFoundError) {
|
|
80
|
+
return textResponse(NOT_ANALYZED_MSG);
|
|
81
|
+
}
|
|
82
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
+
return textResponse(`Evidence pack query failed: ${message}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=git-history-evidence-pack-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-history-evidence-pack-tool.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/git-history-evidence-pack-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-history-tools.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/git-history-tools.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA4JpF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { resolveRoot } from '../mcp-server.js';
|
|
4
|
+
import { loadHistoryData, GitHistoryNotFoundError } from '../../git-history/history-loader.js';
|
|
5
|
+
import { HistoryQuery } from '../../git-history/history-query.js';
|
|
6
|
+
const NOT_ANALYZED_MSG = 'No git history data found. Run `archguard_analyze_git` first to collect history artifacts.';
|
|
7
|
+
function textResponse(text) {
|
|
8
|
+
return { content: [{ type: 'text', text }] };
|
|
9
|
+
}
|
|
10
|
+
export function registerGitHistoryTools(server, defaultRoot) {
|
|
11
|
+
server.tool('archguard_get_change_context', 'Get change-context summary for a file or package before editing. Returns churn, ownership, top co-change neighbors, and risk hints. Requires archguard_analyze_git to have been run first. Results reflect the analyzed time window only; rename and entity-level tracking are not supported in v1.', {
|
|
12
|
+
projectRoot: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
16
|
+
targetType: z
|
|
17
|
+
.enum(['package', 'file'])
|
|
18
|
+
.describe('Whether the target is a package path or a file path.'),
|
|
19
|
+
target: z
|
|
20
|
+
.string()
|
|
21
|
+
.describe('Package path or file path to query (e.g. "src/cli" or "src/cli/mcp/mcp-server.ts").'),
|
|
22
|
+
}, async (params) => {
|
|
23
|
+
const root = resolveRoot(params.projectRoot, defaultRoot);
|
|
24
|
+
const archguardDir = path.join(root, '.archguard');
|
|
25
|
+
try {
|
|
26
|
+
const data = await loadHistoryData(archguardDir);
|
|
27
|
+
const query = new HistoryQuery(data);
|
|
28
|
+
const result = query.getChangeContext(params.targetType, params.target);
|
|
29
|
+
return textResponse(JSON.stringify(result, null, 2));
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
if (err instanceof GitHistoryNotFoundError) {
|
|
33
|
+
return textResponse(NOT_ANALYZED_MSG);
|
|
34
|
+
}
|
|
35
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
36
|
+
return textResponse(`Target "${params.target}" not found in git history data. ${message}`);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
server.tool('archguard_get_cochange', 'Return strongest co-change neighbors for a file or package. Co-change is an evolutionary signal only — it does not imply direct runtime or static dependency. Requires archguard_analyze_git.', {
|
|
40
|
+
projectRoot: z
|
|
41
|
+
.string()
|
|
42
|
+
.optional()
|
|
43
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
44
|
+
targetType: z
|
|
45
|
+
.enum(['package', 'file'])
|
|
46
|
+
.describe('Whether the target is a package path or a file path.'),
|
|
47
|
+
target: z.string().describe('Package path or file path to query.'),
|
|
48
|
+
topN: z.coerce
|
|
49
|
+
.number()
|
|
50
|
+
.min(1)
|
|
51
|
+
.max(20)
|
|
52
|
+
.default(10)
|
|
53
|
+
.describe('Maximum number of co-change neighbors to return (default: 10, max: 20).'),
|
|
54
|
+
}, async (params) => {
|
|
55
|
+
const root = resolveRoot(params.projectRoot, defaultRoot);
|
|
56
|
+
const archguardDir = path.join(root, '.archguard');
|
|
57
|
+
const topN = params.topN ?? 10;
|
|
58
|
+
try {
|
|
59
|
+
const data = await loadHistoryData(archguardDir);
|
|
60
|
+
const query = new HistoryQuery(data);
|
|
61
|
+
const result = query.getCochange(params.targetType, params.target, topN);
|
|
62
|
+
return textResponse(JSON.stringify(result, null, 2));
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
if (err instanceof GitHistoryNotFoundError) {
|
|
66
|
+
return textResponse(NOT_ANALYZED_MSG);
|
|
67
|
+
}
|
|
68
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
69
|
+
return textResponse(`Target "${params.target}" not found in git history data. ${message}`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
server.tool('archguard_get_change_risk', 'Return an explainable risk score for changing a file or package. Score is a heuristic based on churn, author count, ownership concentration, co-change breadth, and recent activity — not a predictive defect model. Requires archguard_analyze_git.', {
|
|
73
|
+
projectRoot: z
|
|
74
|
+
.string()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
77
|
+
targetType: z
|
|
78
|
+
.enum(['package', 'file'])
|
|
79
|
+
.describe('Whether the target is a package path or a file path.'),
|
|
80
|
+
target: z.string().describe('Package path or file path to query.'),
|
|
81
|
+
}, async (params) => {
|
|
82
|
+
const root = resolveRoot(params.projectRoot, defaultRoot);
|
|
83
|
+
const archguardDir = path.join(root, '.archguard');
|
|
84
|
+
try {
|
|
85
|
+
const data = await loadHistoryData(archguardDir);
|
|
86
|
+
const query = new HistoryQuery(data);
|
|
87
|
+
const result = query.getChangeRisk(params.targetType, params.target);
|
|
88
|
+
return textResponse(JSON.stringify(result, null, 2));
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
if (err instanceof GitHistoryNotFoundError) {
|
|
92
|
+
return textResponse(NOT_ANALYZED_MSG);
|
|
93
|
+
}
|
|
94
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
95
|
+
return textResponse(`Target "${params.target}" not found in git history data. ${message}`);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
server.tool('archguard_get_ownership', 'Return maintainer concentration data for a file or package: contributors ranked by commit share, primary owner, active maintainers count, and bus-factor proxy. Requires archguard_analyze_git.', {
|
|
99
|
+
projectRoot: z
|
|
100
|
+
.string()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
103
|
+
targetType: z
|
|
104
|
+
.enum(['package', 'file'])
|
|
105
|
+
.describe('Whether the target is a package path or a file path.'),
|
|
106
|
+
target: z.string().describe('Package path or file path to query.'),
|
|
107
|
+
}, async (params) => {
|
|
108
|
+
const root = resolveRoot(params.projectRoot, defaultRoot);
|
|
109
|
+
const archguardDir = path.join(root, '.archguard');
|
|
110
|
+
try {
|
|
111
|
+
const data = await loadHistoryData(archguardDir);
|
|
112
|
+
const query = new HistoryQuery(data);
|
|
113
|
+
const result = query.getOwnership(params.targetType, params.target);
|
|
114
|
+
return textResponse(JSON.stringify(result, null, 2));
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
if (err instanceof GitHistoryNotFoundError) {
|
|
118
|
+
return textResponse(NOT_ANALYZED_MSG);
|
|
119
|
+
}
|
|
120
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
121
|
+
return textResponse(`Target "${params.target}" not found in git history data. ${message}`);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=git-history-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-history-tools.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/git-history-tools.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAMlE,MAAM,gBAAgB,GACpB,4FAA4F,CAAC;AAM/F,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAMD,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,WAAmB;IAK5E,MAAM,CAAC,IAAI,CACT,8BAA8B,EAE9B,qSAAqS,EACrS;QACE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;QAC5F,UAAU,EAAE,CAAC;aACV,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aACzB,QAAQ,CAAC,sDAAsD,CAAC;QACnE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,CACP,qFAAqF,CACtF;KACJ,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACxE,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,OAAO,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,YAAY,CAAC,WAAW,MAAM,CAAC,MAAM,oCAAoC,OAAO,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CACF,CAAC;IAMF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,+LAA+L,EAC/L;QACE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;QAC5F,UAAU,EAAE,CAAC;aACV,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aACzB,QAAQ,CAAC,sDAAsD,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAClE,IAAI,EAAE,CAAC,CAAC,MAAM;aACX,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,yEAAyE,CAAC;KACvF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzE,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,OAAO,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,YAAY,CAAC,WAAW,MAAM,CAAC,MAAM,oCAAoC,OAAO,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CACF,CAAC;IAMF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,sPAAsP,EACtP;QACE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;QAC5F,UAAU,EAAE,CAAC;aACV,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aACzB,QAAQ,CAAC,sDAAsD,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KACnE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACrE,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,OAAO,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,YAAY,CAAC,WAAW,MAAM,CAAC,MAAM,oCAAoC,OAAO,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CACF,CAAC;IAMF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,iMAAiM,EACjM;QACE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;QAC5F,UAAU,EAAE,CAAC;aACV,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aACzB,QAAQ,CAAC,sDAAsD,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KACnE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACpE,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,OAAO,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,YAAY,CAAC,WAAW,MAAM,CAAC,MAAM,oCAAoC,OAAO,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { PackageMetricsSnapshot } from '../../metrics-history-writer.js';
|
|
3
|
+
export interface TrendSnapshot {
|
|
4
|
+
timestamp: string;
|
|
5
|
+
packages: PackageMetricsSnapshot[];
|
|
6
|
+
}
|
|
7
|
+
export declare function registerMetricTrendTools(server: McpServer, defaultRoot: string): void;
|
|
8
|
+
//# sourceMappingURL=metric-trend-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-trend-tools.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/metric-trend-tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAQ9E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAmDrF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { resolveRoot } from '../mcp-server.js';
|
|
4
|
+
import { readHistoryEntries } from '../../../analysis/metrics-history-reader.js';
|
|
5
|
+
function textResponse(text) {
|
|
6
|
+
return { content: [{ type: 'text', text }] };
|
|
7
|
+
}
|
|
8
|
+
export function registerMetricTrendTools(server, defaultRoot) {
|
|
9
|
+
server.tool('archguard_get_metric_trend', 'Return the historical time series of package-level structural metrics ' +
|
|
10
|
+
'(fan-in, fan-out, cycle count, entity count) recorded by each analyze run. ' +
|
|
11
|
+
'Each snapshot corresponds to one analyze invocation. ' +
|
|
12
|
+
'Use packageName to focus on a single package trend. ' +
|
|
13
|
+
'Data is pure numeric — no semantic annotations or LLM-generated content.', {
|
|
14
|
+
projectRoot: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
18
|
+
packageName: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Filter to a single package name. Omit to return all packages for each snapshot.'),
|
|
22
|
+
}, async ({ projectRoot, packageName }) => {
|
|
23
|
+
try {
|
|
24
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
25
|
+
const outputDir = path.join(root, '.archguard');
|
|
26
|
+
const allEntries = await readHistoryEntries(outputDir);
|
|
27
|
+
let snapshots;
|
|
28
|
+
if (packageName !== undefined) {
|
|
29
|
+
snapshots = allEntries
|
|
30
|
+
.map((entry) => ({
|
|
31
|
+
timestamp: entry.timestamp,
|
|
32
|
+
packages: entry.packages.filter((p) => p.name === packageName),
|
|
33
|
+
}))
|
|
34
|
+
.filter((s) => s.packages.length > 0);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
snapshots = allEntries.map((entry) => ({
|
|
38
|
+
timestamp: entry.timestamp,
|
|
39
|
+
packages: entry.packages,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
return textResponse(JSON.stringify({ snapshots }, null, 2));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
46
|
+
return textResponse(`Error: ${msg}`);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=metric-trend-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-trend-tools.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/metric-trend-tools.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAOD,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,WAAmB;IAC7E,MAAM,CAAC,IAAI,CAET,4BAA4B,EAC5B,wEAAwE;QACtE,6EAA6E;QAC7E,uDAAuD;QACvD,sDAAsD;QACtD,0EAA0E,EAC5E;QACE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;QAC5F,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iFAAiF,CAClF;KACJ,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAEvD,IAAI,SAA0B,CAAC;YAE/B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAE9B,SAAS,GAAG,UAAU;qBACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACf,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;iBAC/D,CAAC,CAAC;qBACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACrC,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACzB,CAAC,CAAC,CAAC;YACN,CAAC;YAED,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { extractPackageName, computePackageFanMetricsFromRelations, computeCycleMetrics } from '../../../analysis/package-metrics-analysis.js';
|
|
3
|
+
import type { PackageMetricsEntry } from '../../../analysis/package-metrics-analysis.js';
|
|
4
|
+
export type { PackageMetricsEntry };
|
|
5
|
+
export { extractPackageName, computePackageFanMetricsFromRelations, computeCycleMetrics };
|
|
6
|
+
export declare function registerPackageMetricsTools(server: McpServer, defaultRoot: string): void;
|
|
7
|
+
//# sourceMappingURL=package-metrics-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-metrics-tools.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/package-metrics-tools.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,EACL,kBAAkB,EAClB,qCAAqC,EACrC,mBAAmB,EACpB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,YAAY,EAAE,mBAAmB,EAAE,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,qCAAqC,EAAE,mBAAmB,EAAE,CAAC;AAU1F,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAuExF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { loadEngine } from '../../query/engine-loader.js';
|
|
4
|
+
import { resolveRoot } from '../mcp-server.js';
|
|
5
|
+
import { extractPackageName, computePackageFanMetricsFromRelations, computeCycleMetrics, } from '../../../analysis/package-metrics-analysis.js';
|
|
6
|
+
export { extractPackageName, computePackageFanMetricsFromRelations, computeCycleMetrics };
|
|
7
|
+
function textResponse(text) {
|
|
8
|
+
return { content: [{ type: 'text', text }] };
|
|
9
|
+
}
|
|
10
|
+
export function registerPackageMetricsTools(server, defaultRoot) {
|
|
11
|
+
server.tool('archguard_get_package_metrics', 'Aggregate fan-in, fan-out, and cycle count per package. ' +
|
|
12
|
+
'fan-in = number of incoming cross-package relations; ' +
|
|
13
|
+
'fan-out = number of outgoing cross-package relations; ' +
|
|
14
|
+
'cycleCount = number of SCCs the package participates in; ' +
|
|
15
|
+
'cyclesWith = entity names from co-cycling SCCs. ' +
|
|
16
|
+
'Works for all languages (TypeScript, Go, Java, Python, C++, Kotlin).', {
|
|
17
|
+
projectRoot: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Root directory of the target project. Defaults to the MCP server startup cwd.'),
|
|
21
|
+
scope: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe('Query scope key. Omit to use manifest.globalScopeKey.'),
|
|
25
|
+
packageName: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe('Filter results to a single package name. Omit to return metrics for all packages.'),
|
|
29
|
+
}, async ({ projectRoot, scope, packageName }) => {
|
|
30
|
+
try {
|
|
31
|
+
const root = resolveRoot(projectRoot, defaultRoot);
|
|
32
|
+
const archDir = path.join(root, '.archguard');
|
|
33
|
+
const { engine, extensionAccessor } = await loadEngine(archDir, scope);
|
|
34
|
+
const entityIds = extensionAccessor.getEntityIds();
|
|
35
|
+
const allPackageNames = new Set(entityIds.map(extractPackageName));
|
|
36
|
+
const relations = extensionAccessor.getRelations();
|
|
37
|
+
const { fanIn, fanOut } = computePackageFanMetricsFromRelations(relations, allPackageNames);
|
|
38
|
+
const cycles = engine.getCycles();
|
|
39
|
+
const cycleMetrics = computeCycleMetrics(cycles, allPackageNames);
|
|
40
|
+
let packages = Array.from(allPackageNames).map((pkg) => {
|
|
41
|
+
const cm = cycleMetrics.get(pkg) ?? { cycleCount: 0, cyclesWith: [] };
|
|
42
|
+
return {
|
|
43
|
+
packageName: pkg,
|
|
44
|
+
fanIn: fanIn.get(pkg) ?? 0,
|
|
45
|
+
fanOut: fanOut.get(pkg) ?? 0,
|
|
46
|
+
cycleCount: cm.cycleCount,
|
|
47
|
+
cyclesWith: cm.cyclesWith,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
if (packageName !== undefined) {
|
|
51
|
+
packages = packages.filter((p) => p.packageName === packageName);
|
|
52
|
+
}
|
|
53
|
+
packages.sort((a, b) => a.packageName.localeCompare(b.packageName));
|
|
54
|
+
return textResponse(JSON.stringify({ packages }, null, 2));
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
58
|
+
return textResponse(`Error: ${msg}`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=package-metrics-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-metrics-tools.js","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/package-metrics-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-analysis-tools.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/test-analysis-tools.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"test-analysis-tools.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/test-analysis-tools.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgEzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAgNtF"}
|
|
@@ -1,69 +1,31 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import { loadEngine } from '../../query/engine-loader.js';
|
|
3
|
+
import { loadEngine, readManifest } from '../../query/engine-loader.js';
|
|
4
4
|
import { resolveRoot } from '../mcp-server.js';
|
|
5
|
-
|
|
6
|
-
const assertionPatterns = [];
|
|
7
|
-
for (const fw of frameworks) {
|
|
8
|
-
switch (fw) {
|
|
9
|
-
case 'vitest':
|
|
10
|
-
case 'jest':
|
|
11
|
-
case 'mocha':
|
|
12
|
-
case 'jasmine':
|
|
13
|
-
if (!assertionPatterns.includes('\\bexpect\\s*\\('))
|
|
14
|
-
assertionPatterns.push('\\bexpect\\s*\\(');
|
|
15
|
-
break;
|
|
16
|
-
case 'junit4':
|
|
17
|
-
case 'junit5':
|
|
18
|
-
assertionPatterns.push('\\bAssert\\.assert\\w+\\s*\\(', '\\bAssertions\\.assert\\w+\\s*\\(', '\\bassertEquals\\s*\\(', '\\bassertTrue\\s*\\(', '\\bassertFalse\\s*\\(', '\\bassertNotNull\\s*\\(', '\\bassertThat\\s*\\(');
|
|
19
|
-
break;
|
|
20
|
-
case 'testng':
|
|
21
|
-
if (!assertionPatterns.includes('\\bassertEquals\\s*\\('))
|
|
22
|
-
assertionPatterns.push('\\bassertEquals\\s*\\(', '\\bassertTrue\\s*\\(', '\\bassertNotNull\\s*\\(');
|
|
23
|
-
break;
|
|
24
|
-
case 'jmh':
|
|
25
|
-
break;
|
|
26
|
-
case 'assertj':
|
|
27
|
-
if (!assertionPatterns.includes('\\bassertThat\\s*\\('))
|
|
28
|
-
assertionPatterns.push('\\bassertThat\\s*\\(');
|
|
29
|
-
break;
|
|
30
|
-
case 'testify':
|
|
31
|
-
assertionPatterns.push('\\b(?:assert|require)\\.\\w+\\s*\\(');
|
|
32
|
-
break;
|
|
33
|
-
case 'testing':
|
|
34
|
-
assertionPatterns.push('\\bt\\.(?:Error|Errorf|Fatal|Fatalf|Fail|FailNow)\\s*\\(');
|
|
35
|
-
break;
|
|
36
|
-
case 'gtest':
|
|
37
|
-
assertionPatterns.push('\\bEXPECT_\\w+\\s*\\(', '\\bASSERT_\\w+\\s*\\(');
|
|
38
|
-
break;
|
|
39
|
-
case 'catch2':
|
|
40
|
-
case 'doctest':
|
|
41
|
-
assertionPatterns.push('\\bREQUIRE\\s*\\(', '\\bCHECK\\s*\\(');
|
|
42
|
-
break;
|
|
43
|
-
case 'assert':
|
|
44
|
-
assertionPatterns.push('\\bassert\\s*\\(', '\\bassert_\\w+\\s*\\(', '\\bt\\.assert_\\w+\\s*\\(', '\\bGGML_ASSERT\\s*\\(');
|
|
45
|
-
break;
|
|
46
|
-
case 'pytest':
|
|
47
|
-
assertionPatterns.push('\\bassert\\b', '.assert');
|
|
48
|
-
break;
|
|
49
|
-
case 'unittest':
|
|
50
|
-
assertionPatterns.push('\\bself\\.assert\\w+\\s*\\(');
|
|
51
|
-
break;
|
|
52
|
-
case 'playwright':
|
|
53
|
-
case 'cypress':
|
|
54
|
-
if (!assertionPatterns.includes('\\bexpect\\s*\\('))
|
|
55
|
-
assertionPatterns.push('\\bexpect\\s*\\(');
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (assertionPatterns.length === 0)
|
|
60
|
-
return {};
|
|
61
|
-
return { assertionPatterns: [...new Set(assertionPatterns)] };
|
|
62
|
-
}
|
|
5
|
+
import { buildSuggestedPatternConfig } from '../../../analysis/test-pattern-advisor.js';
|
|
63
6
|
const NOT_ANALYZED_MSG = 'No test analysis data found. Run `archguard_analyze` with `includeTests: true` first.';
|
|
64
7
|
function textResponse(text) {
|
|
65
8
|
return { content: [{ type: 'text', text }] };
|
|
66
9
|
}
|
|
10
|
+
async function buildZeroTestsDiagnosticResponse(archDir) {
|
|
11
|
+
let availableScopes = '';
|
|
12
|
+
try {
|
|
13
|
+
const manifest = await readManifest(archDir);
|
|
14
|
+
availableScopes = manifest.scopes?.map((s) => `${s.key} (${s.label})`).join(', ') ?? '';
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
}
|
|
18
|
+
return textResponse(JSON.stringify({
|
|
19
|
+
error: 'No test files found in the analyzed scope.',
|
|
20
|
+
diagnosis: [
|
|
21
|
+
'The current ArchJSON scope covers only source files (e.g. src/) and excludes tests/.',
|
|
22
|
+
'Fix: Re-run archguard_analyze with --include-tests flag.',
|
|
23
|
+
availableScopes
|
|
24
|
+
? `Available scopes: ${availableScopes}`
|
|
25
|
+
: 'Run archguard_analyze first to generate analysis data.',
|
|
26
|
+
],
|
|
27
|
+
}, null, 2));
|
|
28
|
+
}
|
|
67
29
|
const patternConfigSchema = z
|
|
68
30
|
.object({
|
|
69
31
|
assertionPatterns: z.array(z.string()).optional(),
|
|
@@ -80,21 +42,23 @@ const patternConfigSchema = z
|
|
|
80
42
|
.optional();
|
|
81
43
|
export function registerTestAnalysisTools(server, defaultRoot) {
|
|
82
44
|
server.tool('archguard_detect_test_patterns', 'Pattern-First tool: call this FIRST before any other test analysis tool. Detects test frameworks and conventions in the project. Returns suggestedPatternConfig and notes. Review the notes and correct the config if needed before passing to other tools.', {
|
|
83
|
-
projectRoot: z
|
|
45
|
+
projectRoot: z.string().optional().describe('Project root (default: server startup cwd)'),
|
|
46
|
+
scope: z
|
|
84
47
|
.string()
|
|
85
48
|
.optional()
|
|
86
|
-
.describe('
|
|
87
|
-
}, async ({ projectRoot }) => {
|
|
49
|
+
.describe('Analysis scope key. Omit to use the widest available scope containing test data.'),
|
|
50
|
+
}, async ({ projectRoot, scope }) => {
|
|
88
51
|
try {
|
|
89
52
|
const root = resolveRoot(projectRoot, defaultRoot);
|
|
90
53
|
const archDir = path.join(root, '.archguard');
|
|
91
|
-
let
|
|
54
|
+
let _engine = null;
|
|
55
|
+
let extensionAccessor = null;
|
|
92
56
|
try {
|
|
93
|
-
engine = await loadEngine(archDir);
|
|
57
|
+
({ engine: _engine, extensionAccessor } = await loadEngine(archDir, scope));
|
|
94
58
|
}
|
|
95
59
|
catch {
|
|
96
60
|
}
|
|
97
|
-
if (!
|
|
61
|
+
if (!extensionAccessor || !extensionAccessor.hasTestAnalysis()) {
|
|
98
62
|
const frameworks = [];
|
|
99
63
|
try {
|
|
100
64
|
const fs = await import('fs-extra');
|
|
@@ -126,7 +90,10 @@ export function registerTestAnalysisTools(server, defaultRoot) {
|
|
|
126
90
|
],
|
|
127
91
|
}, null, 2));
|
|
128
92
|
}
|
|
129
|
-
const analysis =
|
|
93
|
+
const analysis = extensionAccessor.getTestAnalysis();
|
|
94
|
+
if (analysis.metrics.totalTestFiles === 0) {
|
|
95
|
+
return buildZeroTestsDiagnosticResponse(archDir);
|
|
96
|
+
}
|
|
130
97
|
const frameworks = [...new Set(analysis.testFiles.flatMap((f) => f.frameworks))];
|
|
131
98
|
const suggestedPatternConfig = buildSuggestedPatternConfig(frameworks);
|
|
132
99
|
return textResponse(JSON.stringify({
|
|
@@ -145,20 +112,29 @@ export function registerTestAnalysisTools(server, defaultRoot) {
|
|
|
145
112
|
return textResponse(`Error: ${e.message}`);
|
|
146
113
|
}
|
|
147
114
|
});
|
|
148
|
-
server.tool('archguard_get_test_issues', '
|
|
115
|
+
server.tool('archguard_get_test_issues', 'Return static-analysis test quality issues (orphan_test, zero_assertion, skip_accumulation); ' +
|
|
116
|
+
'orphan_test and zero_assertion results may include false positives when tests use import ' +
|
|
117
|
+
'aliases, custom assertion helpers, or long setup blocks. Call archguard_detect_test_patterns first.', {
|
|
149
118
|
projectRoot: z.string().optional().describe('Project root (default: server startup cwd)'),
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
.enum(['warning', 'info'])
|
|
119
|
+
scope: z
|
|
120
|
+
.string()
|
|
153
121
|
.optional()
|
|
154
|
-
.describe('
|
|
155
|
-
|
|
122
|
+
.describe('Analysis scope key. Omit to use the widest available scope containing test data.'),
|
|
123
|
+
patternConfig: patternConfigSchema.describe('Pattern config for detection (informational only — analysis data was produced at ' +
|
|
124
|
+
'archguard_analyze time; changing this field at query time does not re-analyze or ' +
|
|
125
|
+
'alter the stored results).'),
|
|
126
|
+
severity: z.enum(['warning', 'info']).optional().describe('Filter by severity'),
|
|
127
|
+
}, async ({ projectRoot, scope, severity }) => {
|
|
156
128
|
try {
|
|
157
129
|
const root = resolveRoot(projectRoot, defaultRoot);
|
|
158
|
-
const
|
|
159
|
-
|
|
130
|
+
const archDir = path.join(root, '.archguard');
|
|
131
|
+
const { engine: _engine, extensionAccessor } = await loadEngine(archDir, scope);
|
|
132
|
+
if (!extensionAccessor.hasTestAnalysis())
|
|
160
133
|
return textResponse(NOT_ANALYZED_MSG);
|
|
161
|
-
const analysis =
|
|
134
|
+
const analysis = extensionAccessor.getTestAnalysis();
|
|
135
|
+
if (analysis.metrics.totalTestFiles === 0) {
|
|
136
|
+
return buildZeroTestsDiagnosticResponse(archDir);
|
|
137
|
+
}
|
|
162
138
|
const issues = severity
|
|
163
139
|
? analysis.issues.filter((i) => i.severity === severity)
|
|
164
140
|
: analysis.issues;
|
|
@@ -168,17 +144,32 @@ export function registerTestAnalysisTools(server, defaultRoot) {
|
|
|
168
144
|
return textResponse(`Error: ${e.message}`);
|
|
169
145
|
}
|
|
170
146
|
});
|
|
171
|
-
server.tool('archguard_get_test_metrics', '
|
|
147
|
+
server.tool('archguard_get_test_metrics', 'Return test metrics summary (coverage ratios, assertion density, test file counts); ' +
|
|
148
|
+
'coverage is inferred from static import-path and filename matching, not runtime tracing — ' +
|
|
149
|
+
'scores are an approximation. Call archguard_detect_test_patterns first.', {
|
|
172
150
|
projectRoot: z.string().optional().describe('Project root (default: server startup cwd)'),
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
151
|
+
scope: z
|
|
152
|
+
.string()
|
|
153
|
+
.optional()
|
|
154
|
+
.describe('Analysis scope key. Omit to use the widest available scope containing test data.'),
|
|
155
|
+
patternConfig: patternConfigSchema.describe('Pattern config for detection (informational only — analysis data was produced at ' +
|
|
156
|
+
'archguard_analyze time; changing this field at query time does not re-analyze or ' +
|
|
157
|
+
'alter the stored results).'),
|
|
158
|
+
includePackageBreakdown: z
|
|
159
|
+
.boolean()
|
|
160
|
+
.optional()
|
|
161
|
+
.describe('When true, includes per-package coverage breakdown sorted ascending by coverageRatio.'),
|
|
162
|
+
}, async ({ projectRoot, scope, includePackageBreakdown }) => {
|
|
176
163
|
try {
|
|
177
164
|
const root = resolveRoot(projectRoot, defaultRoot);
|
|
178
|
-
const
|
|
179
|
-
|
|
165
|
+
const archDir = path.join(root, '.archguard');
|
|
166
|
+
const { engine, extensionAccessor } = await loadEngine(archDir, scope);
|
|
167
|
+
if (!extensionAccessor.hasTestAnalysis())
|
|
180
168
|
return textResponse(NOT_ANALYZED_MSG);
|
|
181
|
-
const analysis =
|
|
169
|
+
const analysis = extensionAccessor.getTestAnalysis();
|
|
170
|
+
if (analysis.metrics.totalTestFiles === 0) {
|
|
171
|
+
return buildZeroTestsDiagnosticResponse(archDir);
|
|
172
|
+
}
|
|
182
173
|
const result = { ...analysis.metrics };
|
|
183
174
|
if (includePackageBreakdown) {
|
|
184
175
|
result.packageCoverage = engine.getPackageCoverage();
|
|
@@ -203,8 +194,8 @@ export function registerTestAnalysisTools(server, defaultRoot) {
|
|
|
203
194
|
}, async ({ projectRoot, entityId }) => {
|
|
204
195
|
try {
|
|
205
196
|
const root = resolveRoot(projectRoot, defaultRoot);
|
|
206
|
-
const engine = await loadEngine(path.join(root, '.archguard'));
|
|
207
|
-
if (!
|
|
197
|
+
const { engine, extensionAccessor } = await loadEngine(path.join(root, '.archguard'));
|
|
198
|
+
if (!extensionAccessor.hasTestAnalysis())
|
|
208
199
|
return textResponse(NOT_ANALYZED_MSG);
|
|
209
200
|
const result = engine.getEntityCoverage(entityId);
|
|
210
201
|
return textResponse(JSON.stringify(result, null, 2));
|