@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
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ArchGuard
|
|
2
2
|
|
|
3
|
-
ArchGuard analyzes source code to extract architectural insights and generates **Mermaid diagrams** at multiple levels of detail. It supports TypeScript (stable), Go (stable), Java (beta), and
|
|
3
|
+
ArchGuard analyzes source code to extract architectural insights and generates **Mermaid diagrams** at multiple levels of detail. It supports TypeScript (stable), Go (stable), Java (beta), Python (beta), C++ (beta), and Kotlin/Android (beta) through a plugin system, and exposes query and MCP workflows for architecture inspection.
|
|
4
4
|
|
|
5
5
|
## Screenshots
|
|
6
6
|
|
|
@@ -16,10 +16,11 @@ ArchGuard analyzes source code to extract architectural insights and generates *
|
|
|
16
16
|
## Features
|
|
17
17
|
|
|
18
18
|
- **AI-Native MCP Interface**: Query architecture in natural language from Claude Code or Codex — analyze projects, trace dependencies, find implementers, detect cycles
|
|
19
|
-
- **Multi-Language Support**: TypeScript, Go, Java, Python via plugin system
|
|
19
|
+
- **Multi-Language Support**: TypeScript, Go, Java, Python, C++, Kotlin/Android via plugin system
|
|
20
20
|
- **Multi-Level Diagrams**: Package (high-level), Class (default), Method (low-level)
|
|
21
21
|
- **Go Architecture Atlas**: 4-layer visualization — package graph, capability graph, goroutine topology, flow graph
|
|
22
|
-
- **
|
|
22
|
+
- **Kotlin/Android Support**: Auto-detect Kotlin projects, parse `build.gradle.kts` / `settings.gradle.kts`, and plan multi-module diagrams
|
|
23
|
+
- **Static Test Analysis**: Test coverage mapping, assertion density, orphan detection, and quality issues — no test execution required, including Kotlin/Android projects
|
|
23
24
|
- **Parallel Processing**: High-performance parsing with configurable concurrency
|
|
24
25
|
- **Smart Caching**: File-based caching with SHA-256 hashing for fast repeated runs
|
|
25
26
|
- **Zero External Dependencies**: Local Mermaid rendering using isomorphic-mermaid
|
|
@@ -43,6 +44,24 @@ Register the MCP server (project scope):
|
|
|
43
44
|
claude mcp add --scope project archguard -- archguard mcp
|
|
44
45
|
```
|
|
45
46
|
|
|
47
|
+
Or install it for Claude Code user scope, including the bundled repository
|
|
48
|
+
skills from this checkout:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
bash scripts/install-claude-user-scope.sh
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This installs the `archguard` binary globally for the current user, registers
|
|
55
|
+
`archguard mcp` in `~/.claude/mcp.json`, and syncs all skills from
|
|
56
|
+
`.agents/skills/` into `~/.claude/skills/`.
|
|
57
|
+
|
|
58
|
+
If you already have fresh `dist/` artifacts and only want to re-install the user
|
|
59
|
+
scope wiring, use:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
bash scripts/install-claude-user-scope.sh --skip-build
|
|
63
|
+
```
|
|
64
|
+
|
|
46
65
|
Then ask Claude to analyze any project:
|
|
47
66
|
|
|
48
67
|
> Analyze the architecture of `/path/to/my-project` using archguard MCP.
|
|
@@ -99,7 +118,7 @@ Point archguard at any project path — no configuration file needed:
|
|
|
99
118
|
|
|
100
119
|
> Analyze the architecture of `/home/user/work/my-project` using archguard MCP.
|
|
101
120
|
|
|
102
|
-
Archguard auto-detects the language and project structure, generates diagrams under `<project>/.archguard/`, and builds the query index for follow-up queries.
|
|
121
|
+
Archguard auto-detects the language and project structure, generates diagrams under `<project>/.archguard/`, and builds the query index for follow-up queries. Kotlin/Android projects are detected from `build.gradle.kts`, `settings.gradle.kts`, `.kt`, and `.kts` markers and can be analyzed without forcing `--lang kotlin`.
|
|
103
122
|
|
|
104
123
|
### Standalone CLI
|
|
105
124
|
|
|
@@ -130,7 +149,7 @@ archguard analyze [options]
|
|
|
130
149
|
|
|
131
150
|
- `-s, --sources <paths...>` - Source directories; triggers auto-detection and multi-diagram generation
|
|
132
151
|
- `--diagrams <levels...>` - Filter by level: `package` | `class` | `method` (language-dependent)
|
|
133
|
-
- `--lang <language>` - Language: `typescript` | `go` | `java` | `python` (auto-detected)
|
|
152
|
+
- `--lang <language>` - Language: `typescript` | `go` | `java` | `python` | `cpp` | `kotlin` (auto-detected)
|
|
134
153
|
- `--config <path>` - Config file path (default: `archguard.config.json`)
|
|
135
154
|
|
|
136
155
|
**Output:**
|
|
@@ -162,11 +181,6 @@ archguard analyze [options]
|
|
|
162
181
|
- `--atlas-include-tests` - Include test packages in Atlas
|
|
163
182
|
- `--atlas-protocols <protocols>` - Protocols included in flow graph
|
|
164
183
|
|
|
165
|
-
**Claude CLI:**
|
|
166
|
-
|
|
167
|
-
- `--cli-command <command>` - Claude CLI executable (default: `claude`)
|
|
168
|
-
- `--cli-args <args>` - Additional Claude CLI arguments
|
|
169
|
-
|
|
170
184
|
**Examples:**
|
|
171
185
|
|
|
172
186
|
```bash
|
|
@@ -199,6 +213,9 @@ archguard analyze --include-tests
|
|
|
199
213
|
|
|
200
214
|
# Refresh test report only, skip re-parsing source (faster)
|
|
201
215
|
archguard analyze --tests-only
|
|
216
|
+
|
|
217
|
+
# Kotlin/Android project (explicit language selection is optional)
|
|
218
|
+
archguard analyze -s ./app/src/main/java --lang kotlin
|
|
202
219
|
```
|
|
203
220
|
|
|
204
221
|
### `query`
|
|
@@ -277,7 +294,17 @@ Test analysis (requires `archguard_analyze(includeTests: true)` first):
|
|
|
277
294
|
| `archguard_detect_test_patterns` | Detect test frameworks and return suggested pattern config — call this first |
|
|
278
295
|
| `archguard_get_test_metrics` | Summary: file counts, entity coverage ratio, assertion density, issue counts |
|
|
279
296
|
| `archguard_get_test_issues` | Per-file issues: `zero_assertion`, `orphan_test`, `assertion_poverty`, `skip_accumulation` |
|
|
280
|
-
| `
|
|
297
|
+
| `archguard_get_entity_coverage` | Per-entity coverage map with confidence scores |
|
|
298
|
+
|
|
299
|
+
Git history analysis:
|
|
300
|
+
|
|
301
|
+
| Tool | Purpose |
|
|
302
|
+
|------|---------|
|
|
303
|
+
| `archguard_analyze_git` | Index git history for change-based queries |
|
|
304
|
+
| `archguard_get_change_context` | Commits and changed files for an entity |
|
|
305
|
+
| `archguard_get_cochange` | Files that frequently change together |
|
|
306
|
+
| `archguard_get_change_risk` | Change risk score based on churn and coupling |
|
|
307
|
+
| `archguard_get_ownership` | Author ownership breakdown per file or entity |
|
|
281
308
|
|
|
282
309
|
See [MCP Usage Guide](docs/user-guide/mcp-usage.md) for setup, tool reference, and usage patterns.
|
|
283
310
|
|
|
@@ -301,12 +328,14 @@ archguard cache path # Show cache directory
|
|
|
301
328
|
|
|
302
329
|
## Language Support
|
|
303
330
|
|
|
304
|
-
| Language
|
|
305
|
-
|
|
306
|
-
| TypeScript
|
|
307
|
-
| Go
|
|
308
|
-
| Java
|
|
309
|
-
| Python
|
|
331
|
+
| Language | Status | Parser | Features |
|
|
332
|
+
|----------------|--------|---------------------------|----------------------------------------------------|
|
|
333
|
+
| TypeScript | Stable | ts-morph (AST) | Classes, interfaces, enums, dependencies, path aliases |
|
|
334
|
+
| Go | Stable | tree-sitter + gopls | Structs, interfaces, goroutines, Architecture Atlas |
|
|
335
|
+
| Java | Beta | tree-sitter | Classes, interfaces, Maven/Gradle deps |
|
|
336
|
+
| Python | Beta | tree-sitter | Classes, functions, pip/Poetry deps |
|
|
337
|
+
| C++ | Beta | tree-sitter | Structs, classes, inheritance, CMake deps |
|
|
338
|
+
| Kotlin/Android | Beta | tree-sitter | Classes, interfaces, top-level functions, `build.gradle.kts` deps, `settings.gradle.kts` multi-module planning, static test analysis |
|
|
310
339
|
|
|
311
340
|
### Go Architecture Atlas
|
|
312
341
|
|
|
@@ -410,8 +439,34 @@ archguard analyze --diagrams class method
|
|
|
410
439
|
| `cache.enabled` | boolean | `true` | Enable file-based caching |
|
|
411
440
|
| `mermaid.theme` | string | `default` | Diagram theme |
|
|
412
441
|
| `mermaid.transparentBackground` | boolean | `true` | Transparent PNG background |
|
|
413
|
-
| `
|
|
414
|
-
|
|
442
|
+
| `projectSemantics` | object | — | Skill-authored project knowledge consumed during analysis |
|
|
443
|
+
|
|
444
|
+
## Skill-Authored Project Semantics
|
|
445
|
+
|
|
446
|
+
ArchGuard does not discover project semantics at runtime. Skills or users write project knowledge, and ArchGuard loads, validates, merges, and consumes it during analysis.
|
|
447
|
+
|
|
448
|
+
Authoritative locations and priority:
|
|
449
|
+
|
|
450
|
+
1. `archguard.config.json.projectSemantics`
|
|
451
|
+
2. `.archguard/project-semantics.json`
|
|
452
|
+
3. built-in defaults
|
|
453
|
+
|
|
454
|
+
The sidecar file uses the same shape as `archguard.config.json.projectSemantics`.
|
|
455
|
+
|
|
456
|
+
```json
|
|
457
|
+
{
|
|
458
|
+
"additionalTestPatterns": ["tests/**/*.ts"],
|
|
459
|
+
"customAssertionPatterns": ["expect[A-Z]\\w+"],
|
|
460
|
+
"architecturalLayers": {
|
|
461
|
+
"src/analysis": "analysis",
|
|
462
|
+
"src/cli": "cli",
|
|
463
|
+
"src/rendering": "rendering"
|
|
464
|
+
},
|
|
465
|
+
"suggestedDepth": 2
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
If either the config `projectSemantics` block or `.archguard/project-semantics.json` is malformed, ArchGuard fails fast during configuration load or analysis startup instead of silently ignoring the knowledge.
|
|
415
470
|
|
|
416
471
|
## Output Formats
|
|
417
472
|
|
|
@@ -515,7 +570,9 @@ archguard/
|
|
|
515
570
|
│ │ ├── golang/ # Stable (tree-sitter + gopls + Atlas)
|
|
516
571
|
│ │ │ └── atlas/ # package, capability, goroutine, flow builders
|
|
517
572
|
│ │ ├── java/ # Beta
|
|
518
|
-
│ │
|
|
573
|
+
│ │ ├── python/ # Beta
|
|
574
|
+
│ │ ├── cpp/ # Beta (tree-sitter + CMake)
|
|
575
|
+
│ │ └── kotlin/ # Beta (tree-sitter + build.gradle.kts)
|
|
519
576
|
│ └── types/ # Core types (config, ArchJSON, extensions)
|
|
520
577
|
├── tests/
|
|
521
578
|
│ ├── unit/ # Unit tests
|
|
@@ -594,11 +651,11 @@ npm run build
|
|
|
594
651
|
# Analyze ArchGuard itself
|
|
595
652
|
node dist/cli/index.js analyze -v
|
|
596
653
|
|
|
597
|
-
# Package-level overview
|
|
598
|
-
node dist/cli/index.js analyze
|
|
654
|
+
# Package-level overview only
|
|
655
|
+
node dist/cli/index.js analyze --diagrams package
|
|
599
656
|
|
|
600
657
|
# Method-level detail for a module
|
|
601
|
-
node dist/cli/index.js analyze -s ./src/cli
|
|
658
|
+
node dist/cli/index.js analyze -s ./src/cli --diagrams method
|
|
602
659
|
```
|
|
603
660
|
|
|
604
661
|
## Technology Stack
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PackageGraph, PackageNode } from '../types/extensions/go-atlas.js';
|
|
2
|
+
export interface EnrichedPackageNode extends PackageNode {
|
|
3
|
+
fanIn: number;
|
|
4
|
+
fanOut: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function computePackageFanMetrics(graph: PackageGraph): {
|
|
7
|
+
fanIn: Map<string, number>;
|
|
8
|
+
fanOut: Map<string, number>;
|
|
9
|
+
};
|
|
10
|
+
export declare function enrichPackageNodes(nodes: PackageNode[], fanIn: Map<string, number>, fanOut: Map<string, number>): EnrichedPackageNode[];
|
|
11
|
+
//# sourceMappingURL=atlas-metrics-analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas-metrics-analysis.d.ts","sourceRoot":"","sources":["../../src/analysis/atlas-metrics-analysis.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAEhF,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAQD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG;IAC7D,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAUA;AAMD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,mBAAmB,EAAE,CAMvB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function computePackageFanMetrics(graph) {
|
|
2
|
+
const fanIn = new Map();
|
|
3
|
+
const fanOut = new Map();
|
|
4
|
+
for (const edge of graph.edges) {
|
|
5
|
+
fanIn.set(edge.target, (fanIn.get(edge.target) ?? 0) + 1);
|
|
6
|
+
fanOut.set(edge.source, (fanOut.get(edge.source) ?? 0) + 1);
|
|
7
|
+
}
|
|
8
|
+
return { fanIn, fanOut };
|
|
9
|
+
}
|
|
10
|
+
export function enrichPackageNodes(nodes, fanIn, fanOut) {
|
|
11
|
+
return nodes.map((node) => ({
|
|
12
|
+
...node,
|
|
13
|
+
fanIn: fanIn.get(node.id) ?? 0,
|
|
14
|
+
fanOut: fanOut.get(node.id) ?? 0,
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=atlas-metrics-analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas-metrics-analysis.js","sourceRoot":"","sources":["../../src/analysis/atlas-metrics-analysis.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,wBAAwB,CAAC,KAAmB;IAI1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAMD,MAAM,UAAU,kBAAkB,CAChC,KAAoB,EACpB,KAA0B,EAC1B,MAA2B;IAE3B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,IAAI;QACP,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;KACjC,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DependencyConstraintRule, RuleResult } from './rule-types.js';
|
|
2
|
+
import type { Relation } from '../../types/index.js';
|
|
3
|
+
export declare function checkDependencyConstraint(rule: DependencyConstraintRule, relations: Relation[]): RuleResult;
|
|
4
|
+
//# sourceMappingURL=dependency-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-checker.d.ts","sourceRoot":"","sources":["../../../src/analysis/fitness/dependency-checker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,wBAAwB,EAC9B,SAAS,EAAE,QAAQ,EAAE,GACpB,UAAU,CAaZ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import micromatch from 'micromatch';
|
|
2
|
+
export function checkDependencyConstraint(rule, relations) {
|
|
3
|
+
for (const relation of relations) {
|
|
4
|
+
const sourceMatches = micromatch.isMatch(relation.source, rule.from);
|
|
5
|
+
const targetMatches = micromatch.isMatch(relation.target, rule.to);
|
|
6
|
+
if (sourceMatches && targetMatches) {
|
|
7
|
+
return {
|
|
8
|
+
rule,
|
|
9
|
+
passed: false,
|
|
10
|
+
detail: `Forbidden dependency: ${relation.source} → ${relation.target}. ${rule.message}`,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return { rule, passed: true };
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=dependency-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-checker.js","sourceRoot":"","sources":["../../../src/analysis/fitness/dependency-checker.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,MAAM,UAAU,yBAAyB,CACvC,IAA8B,EAC9B,SAAqB;IAErB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;YACnC,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,yBAAyB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;aACzF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MetricThresholdRule, FitnessRule, RuleResult } from './rule-types.js';
|
|
2
|
+
import type { MetricVector } from '../../types/metric-vector.js';
|
|
3
|
+
import type { Relation } from '../../types/index.js';
|
|
4
|
+
export declare function evaluateMetricRule(rule: MetricThresholdRule, vector: MetricVector): RuleResult;
|
|
5
|
+
export declare function evaluateAllRules(rules: FitnessRule[], vector: MetricVector, relations: Relation[]): RuleResult[];
|
|
6
|
+
//# sourceMappingURL=rule-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-evaluator.d.ts","sourceRoot":"","sources":["../../../src/analysis/fitness/rule-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAmCjD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,GAAG,UAAU,CAsB9F;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAAE,EACpB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,QAAQ,EAAE,GACpB,UAAU,EAAE,CAUd"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { evaluateGimLossRule } from '../gim/gim-loss-evaluator.js';
|
|
2
|
+
import { checkDependencyConstraint } from './dependency-checker.js';
|
|
3
|
+
const KNOWN_METRIC_KEYS = new Set([
|
|
4
|
+
'schemaVersion',
|
|
5
|
+
'totalEntities',
|
|
6
|
+
'totalRelations',
|
|
7
|
+
'inferredRelationRatio',
|
|
8
|
+
'sccCount',
|
|
9
|
+
'maxInDegree',
|
|
10
|
+
'maxOutDegree',
|
|
11
|
+
'maxPackageSize',
|
|
12
|
+
'giniInDegree',
|
|
13
|
+
'giniPackageSize',
|
|
14
|
+
'packageCount',
|
|
15
|
+
'entityCoverageRatio',
|
|
16
|
+
]);
|
|
17
|
+
function compare(actual, op, threshold) {
|
|
18
|
+
switch (op) {
|
|
19
|
+
case '<':
|
|
20
|
+
return actual < threshold;
|
|
21
|
+
case '<=':
|
|
22
|
+
return actual <= threshold;
|
|
23
|
+
case '>':
|
|
24
|
+
return actual > threshold;
|
|
25
|
+
case '>=':
|
|
26
|
+
return actual >= threshold;
|
|
27
|
+
case '==':
|
|
28
|
+
return actual === threshold;
|
|
29
|
+
case '!=':
|
|
30
|
+
return actual !== threshold;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function evaluateMetricRule(rule, vector) {
|
|
34
|
+
if (!KNOWN_METRIC_KEYS.has(rule.metric)) {
|
|
35
|
+
return {
|
|
36
|
+
rule,
|
|
37
|
+
passed: false,
|
|
38
|
+
detail: `Unknown metric: '${rule.metric}'`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const raw = vector[rule.metric];
|
|
42
|
+
if (raw === null || raw === undefined) {
|
|
43
|
+
return {
|
|
44
|
+
rule,
|
|
45
|
+
passed: false,
|
|
46
|
+
detail: `Metric '${rule.metric}' is not available (did you run with --include-tests?)`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const actual = raw;
|
|
50
|
+
const passed = compare(actual, rule.op, rule.value);
|
|
51
|
+
return { rule, passed, actual };
|
|
52
|
+
}
|
|
53
|
+
export function evaluateAllRules(rules, vector, relations) {
|
|
54
|
+
return rules.map((rule) => {
|
|
55
|
+
if (rule.type === 'no-dependency') {
|
|
56
|
+
return checkDependencyConstraint(rule, relations);
|
|
57
|
+
}
|
|
58
|
+
if (rule.type === 'gim-loss') {
|
|
59
|
+
return evaluateGimLossRule(rule, vector);
|
|
60
|
+
}
|
|
61
|
+
return evaluateMetricRule(rule, vector);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=rule-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-evaluator.js","sourceRoot":"","sources":["../../../src/analysis/fitness/rule-evaluator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAG3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS;IACxC,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,uBAAuB;IACvB,UAAU;IACV,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,iBAAiB;IACjB,cAAc;IACd,qBAAqB;CACtB,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,MAAc,EAAE,EAA6B,EAAE,SAAiB;IAC/E,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,GAAG;YACN,OAAO,MAAM,GAAG,SAAS,CAAC;QAC5B,KAAK,IAAI;YACP,OAAO,MAAM,IAAI,SAAS,CAAC;QAC7B,KAAK,GAAG;YACN,OAAO,MAAM,GAAG,SAAS,CAAC;QAC5B,KAAK,IAAI;YACP,OAAO,MAAM,IAAI,SAAS,CAAC;QAC7B,KAAK,IAAI;YACP,OAAO,MAAM,KAAK,SAAS,CAAC;QAC9B,KAAK,IAAI;YACP,OAAO,MAAM,KAAK,SAAS,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAyB,EAAE,MAAoB;IAChF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,oBAAoB,IAAI,CAAC,MAAM,GAAG;SAC3C,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAI,MAA6C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW,IAAI,CAAC,MAAM,wDAAwD;SACvF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,GAAa,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,MAAoB,EACpB,SAAqB;IAErB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAClC,OAAO,yBAAyB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type ComparisonOp = '<' | '<=' | '>' | '>=' | '==' | '!=';
|
|
2
|
+
export interface MetricThresholdRule {
|
|
3
|
+
type?: 'metric';
|
|
4
|
+
metric: string;
|
|
5
|
+
op: ComparisonOp;
|
|
6
|
+
value: number;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DependencyConstraintRule {
|
|
10
|
+
type: 'no-dependency';
|
|
11
|
+
from: string;
|
|
12
|
+
to: string;
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
export type GimLossType = 'feasibility' | 'consistency' | 'description-length' | 'generation-alignment';
|
|
16
|
+
export interface GimLossRule {
|
|
17
|
+
type: 'gim-loss';
|
|
18
|
+
loss: GimLossType;
|
|
19
|
+
op: ComparisonOp;
|
|
20
|
+
value: number;
|
|
21
|
+
message: string;
|
|
22
|
+
}
|
|
23
|
+
export type FitnessRule = MetricThresholdRule | DependencyConstraintRule | GimLossRule;
|
|
24
|
+
export interface FitnessConfig {
|
|
25
|
+
rules: FitnessRule[];
|
|
26
|
+
failOnViolation: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface RuleResult {
|
|
29
|
+
rule: FitnessRule;
|
|
30
|
+
passed: boolean;
|
|
31
|
+
actual?: number | string;
|
|
32
|
+
detail?: string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=rule-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-types.d.ts","sourceRoot":"","sources":["../../../src/analysis/fitness/rule-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAExG,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,wBAAwB,GAAG,WAAW,CAAC;AAEvF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-types.js","sourceRoot":"","sources":["../../../src/analysis/fitness/rule-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MetricSnapshot } from '../snapshot-store.js';
|
|
2
|
+
export type DirectionType = 'expansion' | 'contraction' | 'stable' | 'insufficient_data';
|
|
3
|
+
export type ConfidenceLevel = 'low' | 'medium';
|
|
4
|
+
export interface DirectionSignal {
|
|
5
|
+
metric: string;
|
|
6
|
+
direction: 'expansion' | 'contraction' | 'neutral';
|
|
7
|
+
delta: number | null;
|
|
8
|
+
percentChange: number | null;
|
|
9
|
+
}
|
|
10
|
+
export interface DirectionHint {
|
|
11
|
+
direction: DirectionType;
|
|
12
|
+
confidence: ConfidenceLevel | null;
|
|
13
|
+
signals: DirectionSignal[];
|
|
14
|
+
caveat: string;
|
|
15
|
+
recommendation: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function computeDirectionHint(snapshots: MetricSnapshot[]): DirectionHint;
|
|
18
|
+
//# sourceMappingURL=direction-hint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direction-hint.d.ts","sourceRoot":"","sources":["../../../src/analysis/gim/direction-hint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,mBAAmB,CAAC;AACzF,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAgCD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,aAAa,CAqD/E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { diffSnapshots } from '../snapshot-diff.js';
|
|
2
|
+
const EXPANSION_ON_INCREASE = new Set(['totalEntities', 'totalRelations', 'packageCount', 'sccCount', 'giniInDegree']);
|
|
3
|
+
const THRESHOLD_PCT = 5;
|
|
4
|
+
function signalDirection(metric, percentChange, delta) {
|
|
5
|
+
if (delta === null)
|
|
6
|
+
return 'neutral';
|
|
7
|
+
if (metric === 'sccCount') {
|
|
8
|
+
if (delta > 0)
|
|
9
|
+
return 'expansion';
|
|
10
|
+
if (delta < 0)
|
|
11
|
+
return 'contraction';
|
|
12
|
+
return 'neutral';
|
|
13
|
+
}
|
|
14
|
+
if (percentChange === null || Math.abs(percentChange) < THRESHOLD_PCT)
|
|
15
|
+
return 'neutral';
|
|
16
|
+
const increasing = delta > 0;
|
|
17
|
+
const expansionOnIncrease = EXPANSION_ON_INCREASE.has(metric);
|
|
18
|
+
if (increasing)
|
|
19
|
+
return expansionOnIncrease ? 'expansion' : 'contraction';
|
|
20
|
+
return expansionOnIncrease ? 'contraction' : 'expansion';
|
|
21
|
+
}
|
|
22
|
+
const RECOMMENDATION = {
|
|
23
|
+
expansion: 'System is in expansion phase. Consider scheduling contraction/refactor work to prevent structural debt from accumulating.',
|
|
24
|
+
contraction: 'System is in contraction phase. Good time to stabilize interfaces and consolidate responsibilities.',
|
|
25
|
+
stable: 'System is stable. Monitor key metrics (sccCount, giniInDegree) to catch early phase transitions.',
|
|
26
|
+
insufficient_data: 'Not enough snapshots to determine direction. Run archguard analyze to generate a second snapshot.',
|
|
27
|
+
};
|
|
28
|
+
export function computeDirectionHint(snapshots) {
|
|
29
|
+
const CAVEAT = 'Based on 2-point comparison only. Direction may flip between consecutive snapshots. Treat as a weak signal, not a definitive trend.';
|
|
30
|
+
if (snapshots.length < 2) {
|
|
31
|
+
return {
|
|
32
|
+
direction: 'insufficient_data',
|
|
33
|
+
confidence: null,
|
|
34
|
+
signals: [],
|
|
35
|
+
caveat: CAVEAT,
|
|
36
|
+
recommendation: RECOMMENDATION.insufficient_data,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const newer = snapshots[0];
|
|
40
|
+
const older = snapshots[1];
|
|
41
|
+
const diff = diffSnapshots(older, newer);
|
|
42
|
+
const trackedMetrics = ['totalEntities', 'totalRelations', 'packageCount', 'sccCount', 'giniInDegree'];
|
|
43
|
+
const signals = trackedMetrics.map((metric) => {
|
|
44
|
+
const entry = diff.entries.find((e) => e.metric === metric);
|
|
45
|
+
const dir = entry
|
|
46
|
+
? signalDirection(metric, entry.percentChange, entry.delta)
|
|
47
|
+
: 'neutral';
|
|
48
|
+
return {
|
|
49
|
+
metric,
|
|
50
|
+
direction: dir,
|
|
51
|
+
delta: entry?.delta ?? null,
|
|
52
|
+
percentChange: entry?.percentChange ?? null,
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
const expansionCount = signals.filter((s) => s.direction === 'expansion').length;
|
|
56
|
+
const contractionCount = signals.filter((s) => s.direction === 'contraction').length;
|
|
57
|
+
let direction;
|
|
58
|
+
if (expansionCount > contractionCount && expansionCount > signals.length / 2) {
|
|
59
|
+
direction = 'expansion';
|
|
60
|
+
}
|
|
61
|
+
else if (contractionCount > expansionCount && contractionCount > signals.length / 2) {
|
|
62
|
+
direction = 'contraction';
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
direction = 'stable';
|
|
66
|
+
}
|
|
67
|
+
const confidence = snapshots.length >= 3 ? 'medium' : 'low';
|
|
68
|
+
return {
|
|
69
|
+
direction,
|
|
70
|
+
confidence,
|
|
71
|
+
signals,
|
|
72
|
+
caveat: CAVEAT,
|
|
73
|
+
recommendation: RECOMMENDATION[direction],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=direction-hint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direction-hint.js","sourceRoot":"","sources":["../../../src/analysis/gim/direction-hint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GimLossRule } from '../fitness/rule-types.js';
|
|
2
|
+
import type { RuleResult } from '../fitness/rule-types.js';
|
|
3
|
+
import type { MetricVector } from '../../types/metric-vector.js';
|
|
4
|
+
export interface LossStatus {
|
|
5
|
+
value: number;
|
|
6
|
+
status: 'healthy' | 'warning' | 'info';
|
|
7
|
+
detail: string;
|
|
8
|
+
proxy: true;
|
|
9
|
+
}
|
|
10
|
+
type LossName = GimLossRule['loss'];
|
|
11
|
+
export declare function evaluateGimLossRule(rule: GimLossRule, vector: MetricVector): RuleResult;
|
|
12
|
+
export declare function computeAllLosses(vector: MetricVector): Record<LossName, LossStatus>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=gim-loss-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gim-loss-evaluator.d.ts","sourceRoot":"","sources":["../../../src/analysis/gim/gim-loss-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;CACb;AAED,KAAK,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAmCpC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,UAAU,CAiBvF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAgCnF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
function resolveProxy(loss, vector) {
|
|
2
|
+
switch (loss) {
|
|
3
|
+
case 'feasibility':
|
|
4
|
+
return vector.sccCount;
|
|
5
|
+
case 'consistency':
|
|
6
|
+
return vector.inferredRelationRatio;
|
|
7
|
+
case 'description-length':
|
|
8
|
+
return vector.totalEntities + vector.totalRelations;
|
|
9
|
+
case 'generation-alignment':
|
|
10
|
+
return vector.giniInDegree;
|
|
11
|
+
default:
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function compare(actual, op, threshold) {
|
|
16
|
+
switch (op) {
|
|
17
|
+
case '<': return actual < threshold;
|
|
18
|
+
case '<=': return actual <= threshold;
|
|
19
|
+
case '>': return actual > threshold;
|
|
20
|
+
case '>=': return actual >= threshold;
|
|
21
|
+
case '==': return actual === threshold;
|
|
22
|
+
case '!=': return actual !== threshold;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const PROXY_LABELS = {
|
|
26
|
+
feasibility: 'sccCount (proxy for ℒ_F)',
|
|
27
|
+
consistency: 'inferredRelationRatio (proxy for ℒ_C)',
|
|
28
|
+
'description-length': 'totalEntities + totalRelations (proxy for ℒ_D)',
|
|
29
|
+
'generation-alignment': 'giniInDegree (proxy for ℒ_A)',
|
|
30
|
+
};
|
|
31
|
+
export function evaluateGimLossRule(rule, vector) {
|
|
32
|
+
const proxyValue = resolveProxy(rule.loss, vector);
|
|
33
|
+
if (proxyValue === null) {
|
|
34
|
+
return {
|
|
35
|
+
rule,
|
|
36
|
+
passed: false,
|
|
37
|
+
detail: `Unknown GIM loss type: '${rule.loss}'`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const passed = compare(proxyValue, rule.op, rule.value);
|
|
41
|
+
return {
|
|
42
|
+
rule,
|
|
43
|
+
passed,
|
|
44
|
+
actual: proxyValue,
|
|
45
|
+
detail: `${PROXY_LABELS[rule.loss]} = ${proxyValue}`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function computeAllLosses(vector) {
|
|
49
|
+
const feasibilityVal = vector.sccCount;
|
|
50
|
+
const consistencyVal = vector.inferredRelationRatio;
|
|
51
|
+
const descLengthVal = vector.totalEntities + vector.totalRelations;
|
|
52
|
+
const alignmentVal = vector.giniInDegree;
|
|
53
|
+
return {
|
|
54
|
+
feasibility: {
|
|
55
|
+
value: feasibilityVal,
|
|
56
|
+
status: feasibilityVal === 0 ? 'healthy' : 'warning',
|
|
57
|
+
detail: `sccCount=${feasibilityVal}. Proxy for structural feasibility loss ℒ_F. Zero cycles = minimum feasibility loss.`,
|
|
58
|
+
proxy: true,
|
|
59
|
+
},
|
|
60
|
+
consistency: {
|
|
61
|
+
value: consistencyVal,
|
|
62
|
+
status: consistencyVal <= 0.3 ? 'healthy' : 'warning',
|
|
63
|
+
detail: `inferredRelationRatio=${consistencyVal.toFixed(3)}. Proxy for consistency loss ℒ_C. High ratio = many unresolved type dependencies.`,
|
|
64
|
+
proxy: true,
|
|
65
|
+
},
|
|
66
|
+
'description-length': {
|
|
67
|
+
value: descLengthVal,
|
|
68
|
+
status: 'info',
|
|
69
|
+
detail: `totalEntities(${vector.totalEntities}) + totalRelations(${vector.totalRelations}) = ${descLengthVal}. Proxy for description-length loss ℒ_D. Smaller = easier to describe.`,
|
|
70
|
+
proxy: true,
|
|
71
|
+
},
|
|
72
|
+
'generation-alignment': {
|
|
73
|
+
value: alignmentVal,
|
|
74
|
+
status: alignmentVal <= 0.5 ? 'healthy' : 'warning',
|
|
75
|
+
detail: `giniInDegree=${alignmentVal.toFixed(3)}. Proxy for generation-alignment loss ℒ_A. High gini = few nodes dominate dependency graph.`,
|
|
76
|
+
proxy: true,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=gim-loss-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gim-loss-evaluator.js","sourceRoot":"","sources":["../../../src/analysis/gim/gim-loss-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gini.d.ts","sourceRoot":"","sources":["../../src/analysis/gini.ts"],"names":[],"mappings":"AASA,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAaxD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function giniCoefficient(values) {
|
|
2
|
+
const n = values.length;
|
|
3
|
+
if (n === 0)
|
|
4
|
+
return 0;
|
|
5
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
6
|
+
const sum = sorted.reduce((acc, v) => acc + v, 0);
|
|
7
|
+
if (sum === 0)
|
|
8
|
+
return 0;
|
|
9
|
+
const weightedSum = sorted.reduce((acc, v, idx) => acc + (idx + 1) * v, 0);
|
|
10
|
+
return (2 * weightedSum) / (n * sum) - (n + 1) / n;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=gini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gini.js","sourceRoot":"","sources":["../../src/analysis/gini.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,eAAe,CAAC,MAAgB;IAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtB,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAElD,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAGxB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3E,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC"}
|