@monoes/monograph 1.5.6 → 1.5.7
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 +25 -9
- package/dist/src/mcp-tools/impact.d.ts.map +1 -1
- package/dist/src/mcp-tools/impact.js +1 -10
- package/dist/src/mcp-tools/impact.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -9
- package/.monomind/data/ranked-context.json +0 -5
- package/.monomind/loops/mastermind-review-1782162423447.json +0 -16
- package/.monomind/sessions/session-1777578175215.json +0 -15
- package/.monomind/sessions/session-1777823684507.json +0 -15
- package/.monomind/sessions/session-1777928944749.json +0 -15
- package/.monomind/sessions/session-1778052902210.json +0 -15
- package/.monomind/sessions/session-1778056744636.json +0 -15
- package/.monomind/sessions/session-1778061077599.json +0 -15
- package/.monomind/sessions/session-1778102154764.json +0 -15
- package/__tests__/analysis/shape-extractor.test.ts +0 -124
- package/__tests__/analysis/surprise-scorer.test.ts +0 -154
- package/__tests__/cache/extraction-cache.test.ts +0 -45
- package/__tests__/cli/ai-context.test.ts +0 -175
- package/__tests__/cli/augment.test.ts +0 -128
- package/__tests__/cli/doctor.test.ts +0 -125
- package/__tests__/cli/eval-server.test.ts +0 -89
- package/__tests__/cli/setup.test.ts +0 -178
- package/__tests__/cli/skill-gen.test.ts +0 -280
- package/__tests__/export/formats.test.ts +0 -82
- package/__tests__/fixtures/sample.c +0 -25
- package/__tests__/fixtures/sample.cpp +0 -32
- package/__tests__/fixtures/sample.dart +0 -34
- package/__tests__/fixtures/sample.kt +0 -30
- package/__tests__/fixtures/sample.php +0 -30
- package/__tests__/fixtures/sample.py +0 -11
- package/__tests__/fixtures/sample.rb +0 -26
- package/__tests__/fixtures/sample.swift +0 -42
- package/__tests__/fixtures/sample.ts +0 -17
- package/__tests__/fixtures/sample.vue +0 -40
- package/__tests__/groups/group-search.test.ts +0 -221
- package/__tests__/groups/group-sync.test.ts +0 -336
- package/__tests__/integration/build-atomicity.test.ts +0 -61
- package/__tests__/integration/call-attribution.test.ts +0 -116
- package/__tests__/integration/full-pipeline.test.ts +0 -64
- package/__tests__/integration/graph-report-freshness.test.ts +0 -53
- package/__tests__/integration/incremental-build.test.ts +0 -103
- package/__tests__/mcp-resources/resources.test.ts +0 -256
- package/__tests__/mcp-tools/api-impact.test.ts +0 -188
- package/__tests__/mcp-tools/context.test.ts +0 -130
- package/__tests__/mcp-tools/cypher.test.ts +0 -258
- package/__tests__/mcp-tools/detect-changes.test.ts +0 -114
- package/__tests__/mcp-tools/impact.test.ts +0 -133
- package/__tests__/mcp-tools/rename.test.ts +0 -117
- package/__tests__/mcp-tools/route-map.test.ts +0 -237
- package/__tests__/mcp-tools/shape-check.test.ts +0 -202
- package/__tests__/mcp-tools/tool-map.test.ts +0 -135
- package/__tests__/parsers/c.test.ts +0 -28
- package/__tests__/parsers/cpp.test.ts +0 -28
- package/__tests__/parsers/csharp.test.ts +0 -62
- package/__tests__/parsers/dart.test.ts +0 -28
- package/__tests__/parsers/kotlin.test.ts +0 -28
- package/__tests__/parsers/loader.test.ts +0 -14
- package/__tests__/parsers/php.test.ts +0 -28
- package/__tests__/parsers/python.test.ts +0 -32
- package/__tests__/parsers/ruby.test.ts +0 -33
- package/__tests__/parsers/swift.test.ts +0 -28
- package/__tests__/parsers/typescript.test.ts +0 -45
- package/__tests__/parsers/vue.test.ts +0 -28
- package/__tests__/pipeline/analysis.test.ts +0 -58
- package/__tests__/pipeline/phases/corpus-check.test.ts +0 -26
- package/__tests__/pipeline/phases/evidence.test.ts +0 -41
- package/__tests__/pipeline/phases/field-access.test.ts +0 -22
- package/__tests__/pipeline/phases/leiden.test.ts +0 -72
- package/__tests__/pipeline/phases/markdown.test.ts +0 -84
- package/__tests__/pipeline/phases/middleware-extractor.test.ts +0 -131
- package/__tests__/pipeline/phases/orm.test.ts +0 -379
- package/__tests__/pipeline/phases/processes.test.ts +0 -191
- package/__tests__/pipeline/phases/routes.test.ts +0 -195
- package/__tests__/pipeline/phases/scope-resolution.test.ts +0 -133
- package/__tests__/pipeline/phases/tools.test.ts +0 -161
- package/__tests__/pipeline/phases/variables.test.ts +0 -30
- package/__tests__/pipeline/phases/wildcard-synthesis.test.ts +0 -207
- package/__tests__/pipeline/phases.test.ts +0 -41
- package/__tests__/pipeline/runner.test.ts +0 -28
- package/__tests__/registry/repo-registry.test.ts +0 -127
- package/__tests__/reporting/graph-report.suggest.test.ts +0 -36
- package/__tests__/reporting/graph-report.test.ts +0 -165
- package/__tests__/search/ast-chunker.test.ts +0 -63
- package/__tests__/search/rrf.test.ts +0 -95
- package/__tests__/security/safe-fetch.test.ts +0 -41
- package/__tests__/security/sensitive-files.test.ts +0 -32
- package/__tests__/setup.ts +0 -1
- package/__tests__/skills/platform-skills.test.ts +0 -63
- package/__tests__/staleness/git-staleness.test.ts +0 -107
- package/__tests__/storage/db.test.ts +0 -37
- package/__tests__/storage/evidence-roundtrip.test.ts +0 -89
- package/__tests__/storage/stores.test.ts +0 -165
- package/__tests__/types.test.ts +0 -13
- package/__tests__/validation/extraction-validator.test.ts +0 -48
- package/__tests__/watch/watcher.test.ts +0 -31
- package/__tests__/web/analyze-api.test.ts +0 -66
- package/__tests__/web/api.test.ts +0 -210
- package/__tests__/web/mcp-http.test.ts +0 -67
- package/__tests__/web/react-ui.test.ts +0 -43
- package/__tests__/wiki/gist-publisher.test.ts +0 -66
- package/__tests__/wiki/providers.test.ts +0 -69
- package/__tests__/wiki/wiki-generator.test.ts +0 -260
- package/src/__tests__/analysis/benchmark.test.ts +0 -59
- package/src/__tests__/analysis/cluster-quality.test.ts +0 -106
- package/src/__tests__/analysis/corpus-health.test.ts +0 -33
- package/src/__tests__/analysis/dependency-health.test.ts +0 -105
- package/src/__tests__/analysis/file-classifier.test.ts +0 -50
- package/src/__tests__/analysis/node-similarity.test.ts +0 -81
- package/src/__tests__/cache/augment-cache.test.ts +0 -55
- package/src/__tests__/cli/check-update.test.ts +0 -42
- package/src/__tests__/cli/hooks-install.test.ts +0 -56
- package/src/__tests__/cli/hooks-marker.test.ts +0 -138
- package/src/__tests__/cli/hooks-status.test.ts +0 -42
- package/src/__tests__/export/adjacency-matrix.test.ts +0 -116
- package/src/__tests__/export/csv.test.ts +0 -39
- package/src/__tests__/export/dot.test.ts +0 -86
- package/src/__tests__/export/gexf.test.ts +0 -78
- package/src/__tests__/export/graphml.test.ts +0 -57
- package/src/__tests__/export/mermaid.test.ts +0 -89
- package/src/__tests__/graph/betweenness.test.ts +0 -89
- package/src/__tests__/graph/cycles.test.ts +0 -131
- package/src/__tests__/graph/dead-code.test.ts +0 -174
- package/src/__tests__/graph/dfs.test.ts +0 -62
- package/src/__tests__/graph/diff-summary.test.ts +0 -83
- package/src/__tests__/graph/edge-filter.test.ts +0 -129
- package/src/__tests__/graph/import-chain.test.ts +0 -111
- package/src/__tests__/graph/merge.test.ts +0 -151
- package/src/__tests__/graph/node-search.test.ts +0 -167
- package/src/__tests__/graph/normalize-id.test.ts +0 -102
- package/src/__tests__/graph/pagerank.test.ts +0 -96
- package/src/__tests__/graph/prune.test.ts +0 -110
- package/src/__tests__/graph/regex-search.test.ts +0 -166
- package/src/__tests__/graph/ripple-impact.test.ts +0 -73
- package/src/__tests__/graph/scc.test.ts +0 -85
- package/src/__tests__/graph/statistics.test.ts +0 -219
- package/src/__tests__/graph/subgraph.test.ts +0 -127
- package/src/__tests__/graph/topo-sort.test.ts +0 -110
- package/src/__tests__/graph/wcc.test.ts +0 -101
- package/src/__tests__/groups/grpc-extractor.test.ts +0 -47
- package/src/__tests__/groups/service-boundary.test.ts +0 -86
- package/src/__tests__/groups/topic-extractor.test.ts +0 -43
- package/src/__tests__/ingest/git-clone.test.ts +0 -128
- package/src/__tests__/ingest/query-memory.test.ts +0 -123
- package/src/__tests__/ingest/transcribe.test.ts +0 -58
- package/src/__tests__/ingest/url-ingest.test.ts +0 -48
- package/src/__tests__/mcp-resources/repo-context-resource.test.ts +0 -37
- package/src/__tests__/mcp-resources/repos-resource.test.ts +0 -71
- package/src/__tests__/mcp-resources/wiki-resource.test.ts +0 -52
- package/src/__tests__/mcp-tools/explain.test.ts +0 -46
- package/src/__tests__/mcp-tools/graph-query.test.ts +0 -45
- package/src/__tests__/mcp-tools/group-sync.test.ts +0 -8
- package/src/__tests__/mcp-tools/impact-filtering.test.ts +0 -48
- package/src/__tests__/mcp-tools/impact.risk.test.ts +0 -24
- package/src/__tests__/mcp-tools/list-repos.test.ts +0 -24
- package/src/__tests__/mcp-tools/neighbors.test.ts +0 -48
- package/src/__tests__/mcp-tools/query.test.ts +0 -42
- package/src/__tests__/parsers/language-parsers.test.ts +0 -52
- package/src/__tests__/parsers/named-bindings.test.ts +0 -73
- package/src/__tests__/pipeline/cluster-only.test.ts +0 -33
- package/src/__tests__/pipeline/phases/bridge-adapters/electron-ipc.test.ts +0 -87
- package/src/__tests__/pipeline/phases/bridge-adapters/tauri.test.ts +0 -116
- package/src/__tests__/pipeline/phases/bridge-adapters/wails.test.ts +0 -81
- package/src/__tests__/pipeline/phases/bridge-resolver.test.ts +0 -110
- package/src/__tests__/pipeline/phases/communities.cohesion.test.ts +0 -43
- package/src/__tests__/pipeline/phases/community-split.test.ts +0 -30
- package/src/__tests__/pipeline/phases/framework-detect.test.ts +0 -65
- package/src/__tests__/pipeline/phases/import-resolver.test.ts +0 -64
- package/src/__tests__/pipeline/phases/parse-arrow.test.ts +0 -33
- package/src/__tests__/pipeline/phases/parse-csharp.test.ts +0 -33
- package/src/__tests__/pipeline/phases/scan.monographignore.test.ts +0 -53
- package/src/__tests__/pipeline/phases/scan.negation.test.ts +0 -40
- package/src/__tests__/pipeline/phases/scope-resolution.go.test.ts +0 -34
- package/src/__tests__/pipeline/phases/scope-resolution.java.test.ts +0 -30
- package/src/__tests__/pipeline/phases/scope-resolution.rust.test.ts +0 -31
- package/src/__tests__/pipeline/phases/suggest-questions.test.ts +0 -46
- package/src/__tests__/pipeline/phases/surprises-scoring.test.ts +0 -46
- package/src/__tests__/pipeline/phases/variables-phase.test.ts +0 -78
- package/src/__tests__/pipeline/phases/wildcard-phase.test.ts +0 -99
- package/src/__tests__/pipeline/runner.parallel.test.ts +0 -78
- package/src/__tests__/reporting/graph-report-confidence.test.ts +0 -43
- package/src/__tests__/reporting/graph-report-gaps.test.ts +0 -41
- package/src/__tests__/scope-resolution/call-sites.test.ts +0 -89
- package/src/__tests__/scope-resolution/evidence-weights.test.ts +0 -49
- package/src/__tests__/search/diacritic.test.ts +0 -23
- package/src/__tests__/security/safe-fetch.test.ts +0 -125
- package/src/__tests__/skills/platform-skills.extra.test.ts +0 -36
- package/src/__tests__/web/api.clusters.test.ts +0 -65
- package/src/__tests__/web/api.file.test.ts +0 -44
- package/src/__tests__/web/api.grep.test.ts +0 -47
- package/src/__tests__/web/api.info.test.ts +0 -18
- package/src/__tests__/web/api.jobs.test.ts +0 -47
- package/src/__tests__/web/api.progress.test.ts +0 -25
- package/src/__tests__/web/api.stream.test.ts +0 -35
- package/src/__tests__/wiki/providers-reasoning.test.ts +0 -46
- package/src/__tests__/wiki/wiki-review-mode.test.ts +0 -22
- package/src/analysis/benchmark.ts +0 -132
- package/src/analysis/changed-files.ts +0 -73
- package/src/analysis/changed-workspaces.ts +0 -94
- package/src/analysis/churn-cache.ts +0 -179
- package/src/analysis/churn-trend.ts +0 -57
- package/src/analysis/churn.ts +0 -263
- package/src/analysis/cluster-quality.ts +0 -142
- package/src/analysis/combined.ts +0 -41
- package/src/analysis/corpus-health.ts +0 -41
- package/src/analysis/coverage-gaps.ts +0 -246
- package/src/analysis/dep-classification.ts +0 -167
- package/src/analysis/dependency-health.ts +0 -146
- package/src/analysis/duplicate-exports.ts +0 -110
- package/src/analysis/fallow-suppression.ts +0 -98
- package/src/analysis/feature-flags-config.ts +0 -47
- package/src/analysis/feature-flags.ts +0 -223
- package/src/analysis/file-classifier.ts +0 -87
- package/src/analysis/git-changed-files.ts +0 -62
- package/src/analysis/health-baseline.ts +0 -80
- package/src/analysis/issue-filters.ts +0 -56
- package/src/analysis/list.ts +0 -74
- package/src/analysis/node-similarity.ts +0 -115
- package/src/analysis/private-type-leaks.ts +0 -119
- package/src/analysis/progress.ts +0 -43
- package/src/analysis/project-state.ts +0 -95
- package/src/analysis/regression-config.ts +0 -36
- package/src/analysis/rule-overrides.ts +0 -81
- package/src/analysis/scripts.ts +0 -95
- package/src/analysis/shape-extractor.ts +0 -202
- package/src/analysis/since-duration.ts +0 -42
- package/src/analysis/suppression-context.ts +0 -95
- package/src/analysis/suppressions.ts +0 -80
- package/src/analysis/surprise-scorer.ts +0 -74
- package/src/analysis/targets.ts +0 -237
- package/src/analysis/unused-class-members.ts +0 -79
- package/src/analysis/workspace-filter.ts +0 -89
- package/src/analyze/boundary-analysis.ts +0 -129
- package/src/analyze/predicates/file.ts +0 -86
- package/src/analyze/predicates/import.ts +0 -90
- package/src/analyze/predicates/lifecycle.ts +0 -55
- package/src/analyze/unused-deps.ts +0 -70
- package/src/analyze/unused-exports.ts +0 -145
- package/src/analyze/unused-files.ts +0 -46
- package/src/api/production-override.ts +0 -63
- package/src/api/programmatic.ts +0 -118
- package/src/audit.ts +0 -234
- package/src/cache/augment-cache.ts +0 -63
- package/src/cache/extraction-cache.ts +0 -141
- package/src/check/filtering.ts +0 -78
- package/src/check/index.ts +0 -99
- package/src/check/output.ts +0 -79
- package/src/check/rules.ts +0 -61
- package/src/ci-template.ts +0 -84
- package/src/claude-cli.ts +0 -59
- package/src/cli/ai-context.ts +0 -193
- package/src/cli/augment.ts +0 -114
- package/src/cli/check-update.ts +0 -40
- package/src/cli/doctor.ts +0 -182
- package/src/cli/eval-server.ts +0 -126
- package/src/cli/hooks-install.ts +0 -202
- package/src/cli/setup.ts +0 -197
- package/src/cli/skill-gen.ts +0 -347
- package/src/commands/flags.ts +0 -72
- package/src/config/boundary-config.ts +0 -183
- package/src/config/cli-schema.ts +0 -81
- package/src/config/config-parsing.ts +0 -102
- package/src/config/duplicates-config.ts +0 -62
- package/src/config/external-plugin.ts +0 -77
- package/src/config/health-config.ts +0 -42
- package/src/config/ignore-exports-used-in-file.ts +0 -46
- package/src/config/migration-types.ts +0 -73
- package/src/config/output-format.ts +0 -24
- package/src/config/plugins/builtin.ts +0 -411
- package/src/config/plugins/registry.ts +0 -77
- package/src/config/plugins/types.ts +0 -14
- package/src/config/resolution.ts +0 -102
- package/src/config/rules.ts +0 -70
- package/src/config/schema-gen.ts +0 -115
- package/src/config/types.ts +0 -149
- package/src/config/used-class-members.ts +0 -53
- package/src/config/validate.ts +0 -108
- package/src/config/workspace.ts +0 -137
- package/src/coverage/cloud-client.ts +0 -111
- package/src/coverage/upload-inventory.ts +0 -84
- package/src/coverage/upload-source-maps.ts +0 -97
- package/src/discover/entry-points.ts +0 -51
- package/src/discover/infrastructure-entries.ts +0 -175
- package/src/duplicates/detect/concatenation.ts +0 -37
- package/src/duplicates/detect/extraction.ts +0 -107
- package/src/duplicates/detect/filtering.ts +0 -112
- package/src/duplicates/detect/lcp.ts +0 -27
- package/src/duplicates/detect/ranking.ts +0 -16
- package/src/duplicates/detect/statistics.ts +0 -69
- package/src/duplicates/detect/suffix-array.ts +0 -88
- package/src/duplicates/families.ts +0 -95
- package/src/duplicates/normalize.ts +0 -58
- package/src/duplicates/shingle-filter.ts +0 -37
- package/src/duplicates/token-types.ts +0 -62
- package/src/duplicates/tokenize/index.ts +0 -104
- package/src/error/fallow-error.ts +0 -94
- package/src/error.ts +0 -47
- package/src/export/adjacency-matrix.ts +0 -127
- package/src/export/analysis-json.ts +0 -87
- package/src/export/badge.ts +0 -105
- package/src/export/canvas.ts +0 -42
- package/src/export/codeclimate.ts +0 -201
- package/src/export/compact-health.ts +0 -119
- package/src/export/compact.ts +0 -83
- package/src/export/csv.ts +0 -33
- package/src/export/cypher.ts +0 -33
- package/src/export/dot.ts +0 -52
- package/src/export/gexf.ts +0 -59
- package/src/export/graphml.ts +0 -50
- package/src/export/html.ts +0 -548
- package/src/export/index.ts +0 -9
- package/src/export/json.ts +0 -36
- package/src/export/markdown.ts +0 -290
- package/src/export/mermaid.ts +0 -100
- package/src/export/obsidian.ts +0 -44
- package/src/export/sarif.ts +0 -245
- package/src/export/svg.ts +0 -68
- package/src/fix/deps.ts +0 -70
- package/src/fix/enum-members.ts +0 -103
- package/src/fix/export-surgery.ts +0 -197
- package/src/fix/exports.ts +0 -93
- package/src/fix/orchestrator.ts +0 -67
- package/src/graph/analyzer.ts +0 -69
- package/src/graph/author-analytics.ts +0 -217
- package/src/graph/baseline.ts +0 -432
- package/src/graph/clone-families.ts +0 -132
- package/src/graph/codeowners-extended.ts +0 -114
- package/src/graph/codeowners-gitlab.ts +0 -150
- package/src/graph/codeowners.ts +0 -217
- package/src/graph/complexity.ts +0 -200
- package/src/graph/cross-reference-findings.ts +0 -85
- package/src/graph/cross-reference.ts +0 -139
- package/src/graph/cycle-detection.ts +0 -311
- package/src/graph/cycles.ts +0 -222
- package/src/graph/dead-code.ts +0 -128
- package/src/graph/dependency-closure.ts +0 -126
- package/src/graph/dfs.ts +0 -118
- package/src/graph/diff.ts +0 -92
- package/src/graph/duplication-stats.ts +0 -79
- package/src/graph/edge-filter.ts +0 -117
- package/src/graph/explain.ts +0 -133
- package/src/graph/external-style-usage.ts +0 -81
- package/src/graph/health-score.ts +0 -179
- package/src/graph/hotspots.ts +0 -219
- package/src/graph/import-chain.ts +0 -148
- package/src/graph/loader.ts +0 -44
- package/src/graph/maintainability.ts +0 -156
- package/src/graph/merge.ts +0 -174
- package/src/graph/mirrored-dirs.ts +0 -202
- package/src/graph/narrowing.ts +0 -92
- package/src/graph/node-search.ts +0 -201
- package/src/graph/node-types.ts +0 -67
- package/src/graph/normalize-id.ts +0 -138
- package/src/graph/pagerank.ts +0 -165
- package/src/graph/prune.ts +0 -95
- package/src/graph/re-exports/propagate.ts +0 -95
- package/src/graph/reachability.ts +0 -99
- package/src/graph/regex-search.ts +0 -232
- package/src/graph/regression.ts +0 -199
- package/src/graph/resolve/discover-types.ts +0 -45
- package/src/graph/resolve/dynamic-imports.ts +0 -102
- package/src/graph/resolve/fallbacks.ts +0 -79
- package/src/graph/resolve/index.ts +0 -68
- package/src/graph/resolve/path-info.ts +0 -41
- package/src/graph/resolve/re-exports.ts +0 -14
- package/src/graph/resolve/react-native.ts +0 -27
- package/src/graph/resolve/require-imports.ts +0 -18
- package/src/graph/resolve/specifier.ts +0 -120
- package/src/graph/resolve/static-imports.ts +0 -14
- package/src/graph/resolve/types.ts +0 -108
- package/src/graph/resolve/upgrades.ts +0 -32
- package/src/graph/ripple-impact.ts +0 -131
- package/src/graph/risk-profile.ts +0 -179
- package/src/graph/statistics.ts +0 -165
- package/src/graph/stats.ts +0 -157
- package/src/graph/subgraph.ts +0 -162
- package/src/graph/topo-sort.ts +0 -171
- package/src/graph/wcc.ts +0 -187
- package/src/groups/contract-bridge.ts +0 -103
- package/src/groups/contract-registry.ts +0 -263
- package/src/groups/group-config.ts +0 -108
- package/src/groups/group-search.ts +0 -139
- package/src/groups/group-sync.ts +0 -82
- package/src/groups/grpc-extractor.ts +0 -64
- package/src/groups/service-boundary.ts +0 -119
- package/src/groups/topic-extractor.ts +0 -90
- package/src/health/analysis-counts-snapshot.ts +0 -57
- package/src/health/analysis-counts.ts +0 -70
- package/src/health/complexity-findings.ts +0 -115
- package/src/health/distribution-thresholds.ts +0 -54
- package/src/health/grouping.ts +0 -138
- package/src/health/health-grouping.ts +0 -86
- package/src/health/health-report-types.ts +0 -165
- package/src/health/health-report.ts +0 -81
- package/src/health/health-score.ts +0 -65
- package/src/health/hotspot-utils.ts +0 -55
- package/src/health/hotspots.ts +0 -104
- package/src/health/large-functions.ts +0 -34
- package/src/health/ownership-metrics.ts +0 -61
- package/src/health/ownership-risk.ts +0 -98
- package/src/health/ownership.ts +0 -174
- package/src/health/quality-gate.ts +0 -57
- package/src/health/risk-profile.ts +0 -39
- package/src/health/runtime-coverage-report.ts +0 -101
- package/src/health/runtime-coverage.ts +0 -71
- package/src/health/scores.ts +0 -72
- package/src/health/scoring-types.ts +0 -48
- package/src/health/target-thresholds.ts +0 -92
- package/src/health/target-types.ts +0 -54
- package/src/health/targets.ts +0 -151
- package/src/health/timings.ts +0 -86
- package/src/health/trend-types.ts +0 -57
- package/src/health/trends.ts +0 -86
- package/src/health/vital-signs-compute.ts +0 -108
- package/src/health/vital-signs-snapshot.ts +0 -72
- package/src/health/vital-signs.ts +0 -101
- package/src/index.ts +0 -111
- package/src/ingest/git-clone.ts +0 -246
- package/src/ingest/query-memory.ts +0 -132
- package/src/ingest/transcribe.ts +0 -254
- package/src/ingest/url-ingest.ts +0 -87
- package/src/init/agent-hooks.ts +0 -86
- package/src/init/git-hooks.ts +0 -71
- package/src/init/project-detection.ts +0 -105
- package/src/license/manager.ts +0 -120
- package/src/lsp/code-actions.ts +0 -127
- package/src/lsp/code-lens.ts +0 -56
- package/src/lsp/diagnostics-ext.ts +0 -150
- package/src/lsp/diagnostics-push.ts +0 -103
- package/src/lsp/diagnostics.ts +0 -98
- package/src/lsp/hover.ts +0 -64
- package/src/lsp/server.ts +0 -254
- package/src/mcp/params.ts +0 -201
- package/src/mcp/resources.ts +0 -124
- package/src/mcp/tool-builders.ts +0 -203
- package/src/mcp-resources/communities-resource.ts +0 -72
- package/src/mcp-resources/graph-resource.ts +0 -14
- package/src/mcp-resources/index.ts +0 -9
- package/src/mcp-resources/named-cluster-resource.ts +0 -35
- package/src/mcp-resources/named-process-resource.ts +0 -26
- package/src/mcp-resources/processes-resource.ts +0 -67
- package/src/mcp-resources/repo-context-resource.ts +0 -36
- package/src/mcp-resources/repos-resource.ts +0 -21
- package/src/mcp-resources/schema-resource.ts +0 -46
- package/src/mcp-resources/wiki-resource.ts +0 -23
- package/src/mcp-tools/api-impact.ts +0 -181
- package/src/mcp-tools/context.ts +0 -111
- package/src/mcp-tools/cypher.ts +0 -29
- package/src/mcp-tools/detect-changes.ts +0 -116
- package/src/mcp-tools/explain.ts +0 -65
- package/src/mcp-tools/graph-query.ts +0 -128
- package/src/mcp-tools/group-list.ts +0 -88
- package/src/mcp-tools/group-query.ts +0 -26
- package/src/mcp-tools/group-sync.ts +0 -32
- package/src/mcp-tools/impact.ts +0 -202
- package/src/mcp-tools/index.ts +0 -21
- package/src/mcp-tools/list-repos.ts +0 -38
- package/src/mcp-tools/neighbors.ts +0 -80
- package/src/mcp-tools/query.ts +0 -86
- package/src/mcp-tools/rename.ts +0 -118
- package/src/mcp-tools/route-map.ts +0 -98
- package/src/mcp-tools/serve.ts +0 -41
- package/src/mcp-tools/shape-check.ts +0 -182
- package/src/mcp-tools/staleness.ts +0 -13
- package/src/mcp-tools/tool-map.ts +0 -66
- package/src/mcp-tools/wiki-build.ts +0 -37
- package/src/mcp-tools/wiki.ts +0 -28
- package/src/migrate/jscpd.ts +0 -78
- package/src/migrate/jsonc-gen.ts +0 -38
- package/src/migrate/knip.ts +0 -126
- package/src/migrate/toml-gen.ts +0 -48
- package/src/parsers/c.ts +0 -31
- package/src/parsers/cpp.ts +0 -29
- package/src/parsers/csharp.ts +0 -43
- package/src/parsers/dart.ts +0 -39
- package/src/parsers/extractor.ts +0 -202
- package/src/parsers/go.ts +0 -27
- package/src/parsers/java.ts +0 -27
- package/src/parsers/kotlin.ts +0 -36
- package/src/parsers/language-config.ts +0 -28
- package/src/parsers/language-parsers.ts +0 -120
- package/src/parsers/loader.ts +0 -149
- package/src/parsers/named-bindings.ts +0 -63
- package/src/parsers/php.ts +0 -37
- package/src/parsers/python.ts +0 -26
- package/src/parsers/ruby.ts +0 -39
- package/src/parsers/rust.ts +0 -25
- package/src/parsers/swift.ts +0 -28
- package/src/parsers/typescript.ts +0 -41
- package/src/parsers/vue.ts +0 -79
- package/src/pipeline/cluster-only.ts +0 -64
- package/src/pipeline/effort.ts +0 -50
- package/src/pipeline/orchestrator.ts +0 -384
- package/src/pipeline/phases/boundary.ts +0 -151
- package/src/pipeline/phases/bridge-adapters/electron-ipc.ts +0 -91
- package/src/pipeline/phases/bridge-adapters/registry.ts +0 -14
- package/src/pipeline/phases/bridge-adapters/tauri.ts +0 -103
- package/src/pipeline/phases/bridge-adapters/types.ts +0 -31
- package/src/pipeline/phases/bridge-adapters/wails.ts +0 -33
- package/src/pipeline/phases/bridge-resolver.ts +0 -77
- package/src/pipeline/phases/call-site-extractors.ts +0 -177
- package/src/pipeline/phases/communities.ts +0 -183
- package/src/pipeline/phases/contextual-proximity.ts +0 -88
- package/src/pipeline/phases/cross-file.ts +0 -116
- package/src/pipeline/phases/docs-parse.ts +0 -307
- package/src/pipeline/phases/evidence.ts +0 -9
- package/src/pipeline/phases/field-access.ts +0 -49
- package/src/pipeline/phases/framework-detect.ts +0 -109
- package/src/pipeline/phases/god-nodes.ts +0 -163
- package/src/pipeline/phases/import-resolver.ts +0 -114
- package/src/pipeline/phases/leiden.ts +0 -77
- package/src/pipeline/phases/llm-extract.ts +0 -178
- package/src/pipeline/phases/markdown.ts +0 -121
- package/src/pipeline/phases/middleware-extractor.ts +0 -127
- package/src/pipeline/phases/module-resolution.ts +0 -294
- package/src/pipeline/phases/mro.ts +0 -56
- package/src/pipeline/phases/orm.ts +0 -503
- package/src/pipeline/phases/parse.ts +0 -222
- package/src/pipeline/phases/pdf-parse.ts +0 -133
- package/src/pipeline/phases/processes.ts +0 -249
- package/src/pipeline/phases/re-export-propagation.ts +0 -160
- package/src/pipeline/phases/reachability.ts +0 -156
- package/src/pipeline/phases/routes.ts +0 -350
- package/src/pipeline/phases/scan.ts +0 -133
- package/src/pipeline/phases/scope-resolution.ts +0 -442
- package/src/pipeline/phases/structure.ts +0 -68
- package/src/pipeline/phases/suggest.ts +0 -92
- package/src/pipeline/phases/surprises.ts +0 -83
- package/src/pipeline/phases/tools.ts +0 -180
- package/src/pipeline/phases/variables-phase.ts +0 -37
- package/src/pipeline/phases/variables.ts +0 -67
- package/src/pipeline/phases/wildcard-phase.ts +0 -50
- package/src/pipeline/phases/wildcard-synthesis.ts +0 -214
- package/src/pipeline/progress.ts +0 -58
- package/src/pipeline/runner.ts +0 -88
- package/src/pipeline/types.ts +0 -41
- package/src/query/cypher-parser.ts +0 -450
- package/src/registry/repo-registry.ts +0 -125
- package/src/regression/baseline-deltas.ts +0 -215
- package/src/regression/baseline.ts +0 -76
- package/src/regression/counts.ts +0 -87
- package/src/regression/outcome.ts +0 -78
- package/src/regression/tolerance.ts +0 -35
- package/src/report/attributed-duplication.ts +0 -112
- package/src/report/badge-svg.ts +0 -100
- package/src/report/cross-ref-human.ts +0 -50
- package/src/report/duplication-grouping.ts +0 -74
- package/src/report/grouping.ts +0 -137
- package/src/report/human-check.ts +0 -291
- package/src/report/human-dupes.ts +0 -142
- package/src/report/human-health.ts +0 -195
- package/src/report/human.ts +0 -120
- package/src/report/json-actions.ts +0 -91
- package/src/report/json-builders.ts +0 -70
- package/src/report/json-schema.ts +0 -75
- package/src/report/number-format.ts +0 -91
- package/src/report/output-grouped.ts +0 -102
- package/src/report/pipeline-perf.ts +0 -56
- package/src/report/trace-human.ts +0 -127
- package/src/reporting/graph-report.ts +0 -431
- package/src/results/fallow-results.ts +0 -152
- package/src/results/types.ts +0 -149
- package/src/scope-resolution/evidence-weights.ts +0 -41
- package/src/search/ast-chunker.ts +0 -206
- package/src/search/diacritic.ts +0 -7
- package/src/search/hybrid-query.ts +0 -65
- package/src/search/rrf.ts +0 -51
- package/src/security/safe-fetch.ts +0 -113
- package/src/security/sensitive-files.ts +0 -24
- package/src/skills/platform-skills.ts +0 -233
- package/src/staleness/git-staleness.ts +0 -66
- package/src/storage/db.ts +0 -110
- package/src/storage/edge-store.ts +0 -103
- package/src/storage/file-cache.ts +0 -78
- package/src/storage/fts-store.ts +0 -385
- package/src/storage/node-store.ts +0 -209
- package/src/storage/schema.ts +0 -171
- package/src/storage/suppressions.ts +0 -145
- package/src/storage/unlinked-refs.ts +0 -117
- package/src/types.ts +0 -197
- package/src/validation/extraction-validator.ts +0 -54
- package/src/watch/watcher.ts +0 -160
- package/src/web/analyze-api.ts +0 -146
- package/src/web/api.ts +0 -584
- package/src/web/async-jobs.ts +0 -109
- package/src/web/mcp-http.ts +0 -227
- package/src/web/react-ui.ts +0 -78
- package/src/web/server.ts +0 -90
- package/src/web/ui/index.html +0 -204
- package/src/wiki/gist-publisher.ts +0 -76
- package/src/wiki/prompt-builder.ts +0 -35
- package/src/wiki/providers.ts +0 -134
- package/src/wiki/wiki-generator.ts +0 -223
- package/src/wiki/wiki-store.ts +0 -49
- package/tsconfig.json +0 -11
- package/vitest.config.ts +0 -20
package/src/license/manager.ts
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
// Offline + online license lifecycle: activate trial, refresh, status, verify JWT.
|
|
2
|
-
|
|
3
|
-
export type LicenseTier = 'free' | 'trial' | 'pro' | 'enterprise';
|
|
4
|
-
|
|
5
|
-
export interface LicenseFeatures {
|
|
6
|
-
cloudCoverage: boolean;
|
|
7
|
-
mcp: boolean;
|
|
8
|
-
customRules: boolean;
|
|
9
|
-
ssoSaml: boolean;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface LicenseStatus {
|
|
13
|
-
tier: LicenseTier;
|
|
14
|
-
seats: number;
|
|
15
|
-
features: LicenseFeatures;
|
|
16
|
-
expiresAt?: Date;
|
|
17
|
-
daysRemaining?: number;
|
|
18
|
-
isExpired: boolean;
|
|
19
|
-
isInWarningWindow: boolean;
|
|
20
|
-
isWatermarked: boolean;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface ActivateOptions {
|
|
24
|
-
email: string;
|
|
25
|
-
apiBase?: string;
|
|
26
|
-
licenseStorePath?: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface LicenseJwtPayload {
|
|
30
|
-
sub: string;
|
|
31
|
-
tier: LicenseTier;
|
|
32
|
-
seats: number;
|
|
33
|
-
features: string[];
|
|
34
|
-
exp: number;
|
|
35
|
-
iat: number;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export class LicenseError extends Error {
|
|
39
|
-
constructor(message: string, public readonly code: string) {
|
|
40
|
-
super(message);
|
|
41
|
-
this.name = 'LicenseError';
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const WARNING_WINDOW_DAYS = 14;
|
|
46
|
-
const FREE_FEATURES: LicenseFeatures = { cloudCoverage: false, mcp: false, customRules: false, ssoSaml: false };
|
|
47
|
-
|
|
48
|
-
/** Parse a JWT payload without signature verification (use verifyLicenseJwt for full check). */
|
|
49
|
-
export function parseLicenseJwt(jwt: string): LicenseJwtPayload {
|
|
50
|
-
const parts = jwt.split('.');
|
|
51
|
-
if (parts.length !== 3) throw new LicenseError('Malformed JWT', 'MALFORMED_JWT');
|
|
52
|
-
try {
|
|
53
|
-
const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
|
|
54
|
-
return payload as LicenseJwtPayload;
|
|
55
|
-
} catch {
|
|
56
|
-
throw new LicenseError('Failed to decode JWT payload', 'DECODE_ERROR');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** Derive LicenseStatus from a parsed JWT payload. */
|
|
61
|
-
export function licenseStatusFromPayload(payload: LicenseJwtPayload): LicenseStatus {
|
|
62
|
-
const expiresAt = new Date(payload.exp * 1000);
|
|
63
|
-
const now = Date.now();
|
|
64
|
-
const daysRemaining = Math.ceil((expiresAt.getTime() - now) / 86_400_000);
|
|
65
|
-
const isExpired = daysRemaining <= 0;
|
|
66
|
-
const isInWarningWindow = !isExpired && daysRemaining <= WARNING_WINDOW_DAYS;
|
|
67
|
-
const featureSet = new Set(payload.features ?? []);
|
|
68
|
-
return {
|
|
69
|
-
tier: payload.tier,
|
|
70
|
-
seats: payload.seats ?? 1,
|
|
71
|
-
features: {
|
|
72
|
-
cloudCoverage: featureSet.has('cloud_coverage'),
|
|
73
|
-
mcp: featureSet.has('mcp'),
|
|
74
|
-
customRules: featureSet.has('custom_rules'),
|
|
75
|
-
ssoSaml: featureSet.has('sso_saml'),
|
|
76
|
-
},
|
|
77
|
-
expiresAt,
|
|
78
|
-
daysRemaining: Math.max(daysRemaining, 0),
|
|
79
|
-
isExpired,
|
|
80
|
-
isInWarningWindow,
|
|
81
|
-
isWatermarked: isExpired || payload.tier === 'free',
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** Activate a trial license via the cloud API. */
|
|
86
|
-
export async function activateTrial(opts: ActivateOptions): Promise<string> {
|
|
87
|
-
const base = opts.apiBase ?? 'https://api.fallow.cloud/v1';
|
|
88
|
-
const res = await fetch(`${base}/license/trial`, {
|
|
89
|
-
method: 'POST',
|
|
90
|
-
headers: { 'Content-Type': 'application/json' },
|
|
91
|
-
body: JSON.stringify({ email: opts.email }),
|
|
92
|
-
});
|
|
93
|
-
if (!res.ok) throw new LicenseError(`Activation failed: HTTP ${res.status}`, 'ACTIVATION_FAILED');
|
|
94
|
-
const data = await res.json() as { jwt: string };
|
|
95
|
-
return data.jwt;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/** Refresh an existing license JWT. */
|
|
99
|
-
export async function refreshLicense(jwt: string, opts: Pick<ActivateOptions, 'apiBase'>): Promise<string> {
|
|
100
|
-
const base = opts.apiBase ?? 'https://api.fallow.cloud/v1';
|
|
101
|
-
const res = await fetch(`${base}/license/refresh`, {
|
|
102
|
-
method: 'POST',
|
|
103
|
-
headers: { Authorization: `Bearer ${jwt}`, 'Content-Type': 'application/json' },
|
|
104
|
-
});
|
|
105
|
-
if (!res.ok) throw new LicenseError(`Refresh failed: HTTP ${res.status}`, 'REFRESH_FAILED');
|
|
106
|
-
const data = await res.json() as { jwt: string };
|
|
107
|
-
return data.jwt;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/** Get the free-tier license status (no JWT required). */
|
|
111
|
-
export function getFreeLicenseStatus(): LicenseStatus {
|
|
112
|
-
return {
|
|
113
|
-
tier: 'free',
|
|
114
|
-
seats: 1,
|
|
115
|
-
features: FREE_FEATURES,
|
|
116
|
-
isExpired: false,
|
|
117
|
-
isInWarningWindow: false,
|
|
118
|
-
isWatermarked: false,
|
|
119
|
-
};
|
|
120
|
-
}
|
package/src/lsp/code-actions.ts
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import type { LspRange } from './code-lens.js';
|
|
2
|
-
|
|
3
|
-
export interface LspTextEdit {
|
|
4
|
-
range: LspRange;
|
|
5
|
-
newText: string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface LspWorkspaceEdit {
|
|
9
|
-
changes: Record<string, LspTextEdit[]>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface CodeAction {
|
|
13
|
-
title: string;
|
|
14
|
-
kind: 'quickfix' | 'refactor';
|
|
15
|
-
diagnostics?: string[];
|
|
16
|
-
edit?: LspWorkspaceEdit;
|
|
17
|
-
isPreferred?: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface UnusedExportLocation {
|
|
21
|
-
exportName: string;
|
|
22
|
-
filePath: string;
|
|
23
|
-
uri: string;
|
|
24
|
-
line: number; // 1-based
|
|
25
|
-
col: number;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type ExportKeywordVariant = 'export' | 'export default' | 'export const' | 'export function' | 'export class' | 'export type' | 'export interface' | 'export enum';
|
|
29
|
-
|
|
30
|
-
function detectExportVariant(sourceLine: string): { prefix: string; start: number } | null {
|
|
31
|
-
const variants = [
|
|
32
|
-
'export default ',
|
|
33
|
-
'export const ',
|
|
34
|
-
'export function ',
|
|
35
|
-
'export class ',
|
|
36
|
-
'export abstract class ',
|
|
37
|
-
'export interface ',
|
|
38
|
-
'export type ',
|
|
39
|
-
'export enum ',
|
|
40
|
-
'export ',
|
|
41
|
-
];
|
|
42
|
-
const trimmed = sourceLine.trimStart();
|
|
43
|
-
const indent = sourceLine.length - trimmed.length;
|
|
44
|
-
for (const v of variants) {
|
|
45
|
-
if (trimmed.startsWith(v)) {
|
|
46
|
-
return { prefix: v, start: indent };
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function buildRemoveExportActions(
|
|
53
|
-
unusedExports: UnusedExportLocation[],
|
|
54
|
-
cursorLine: number, // 0-based LSP
|
|
55
|
-
fileLines: string[],
|
|
56
|
-
maxActionsPerFile = 10,
|
|
57
|
-
): CodeAction[] {
|
|
58
|
-
const actions: CodeAction[] = [];
|
|
59
|
-
const inRange = unusedExports.filter(e => e.line - 1 === cursorLine);
|
|
60
|
-
for (const ue of inRange.slice(0, maxActionsPerFile)) {
|
|
61
|
-
const sourceLine = fileLines[ue.line - 1] ?? '';
|
|
62
|
-
const variant = detectExportVariant(sourceLine);
|
|
63
|
-
if (!variant) continue;
|
|
64
|
-
const removeRange: LspRange = {
|
|
65
|
-
start: { line: ue.line - 1, character: variant.start },
|
|
66
|
-
end: { line: ue.line - 1, character: variant.start + variant.prefix.length },
|
|
67
|
-
};
|
|
68
|
-
actions.push({
|
|
69
|
-
title: `Remove 'export' from '${ue.exportName}'`,
|
|
70
|
-
kind: 'quickfix',
|
|
71
|
-
isPreferred: true,
|
|
72
|
-
edit: {
|
|
73
|
-
changes: {
|
|
74
|
-
[ue.uri]: [{ range: removeRange, newText: '' }],
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
return actions;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function buildSuppressActions(
|
|
83
|
-
unusedExports: UnusedExportLocation[],
|
|
84
|
-
cursorLine: number, // 0-based LSP
|
|
85
|
-
fileLines: string[],
|
|
86
|
-
): CodeAction[] {
|
|
87
|
-
const actions: CodeAction[] = [];
|
|
88
|
-
const inRange = unusedExports.filter(e => e.line - 1 === cursorLine);
|
|
89
|
-
for (const ue of inRange) {
|
|
90
|
-
const targetLine = ue.line - 1; // 0-based
|
|
91
|
-
const sourceLine = fileLines[targetLine] ?? '';
|
|
92
|
-
const indent = sourceLine.length - sourceLine.trimStart().length;
|
|
93
|
-
const suppressComment = ' '.repeat(indent) + '// monograph-ignore\n';
|
|
94
|
-
const insertRange: LspRange = {
|
|
95
|
-
start: { line: targetLine, character: 0 },
|
|
96
|
-
end: { line: targetLine, character: 0 },
|
|
97
|
-
};
|
|
98
|
-
actions.push({
|
|
99
|
-
title: `Suppress monograph warning for '${ue.exportName}'`,
|
|
100
|
-
kind: 'quickfix',
|
|
101
|
-
edit: {
|
|
102
|
-
changes: {
|
|
103
|
-
[ue.uri]: [{ range: insertRange, newText: suppressComment }],
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
return actions;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ── Round 9: delete-file code actions ─────────────────────────────────────────
|
|
112
|
-
|
|
113
|
-
export interface DeleteFileAction {
|
|
114
|
-
kind: 'deleteFile';
|
|
115
|
-
title: string;
|
|
116
|
-
filePath: string;
|
|
117
|
-
isPreferred: boolean;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function buildDeleteFileActions(filePath: string): DeleteFileAction[] {
|
|
121
|
-
return [{
|
|
122
|
-
kind: 'deleteFile',
|
|
123
|
-
title: `Delete unused file: ${filePath.split('/').pop() ?? filePath}`,
|
|
124
|
-
filePath,
|
|
125
|
-
isPreferred: false,
|
|
126
|
-
}];
|
|
127
|
-
}
|
package/src/lsp/code-lens.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
export interface LspPosition {
|
|
2
|
-
line: number; // 0-based
|
|
3
|
-
character: number;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface LspRange {
|
|
7
|
-
start: LspPosition;
|
|
8
|
-
end: LspPosition;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface LspCommand {
|
|
12
|
-
title: string;
|
|
13
|
-
command: string;
|
|
14
|
-
arguments?: unknown[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface MonographCodeLens {
|
|
18
|
-
range: LspRange;
|
|
19
|
-
command?: LspCommand;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface ExportUsage {
|
|
23
|
-
exportName: string;
|
|
24
|
-
line: number; // 1-based
|
|
25
|
-
col: number; // 1-based
|
|
26
|
-
referenceLocations: Array<{ uri: string; line: number; character: number }>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function buildCodeLenses(
|
|
30
|
-
usages: ExportUsage[],
|
|
31
|
-
documentUri: string,
|
|
32
|
-
): MonographCodeLens[] {
|
|
33
|
-
return usages.map(usage => {
|
|
34
|
-
const lspLine = usage.line - 1; // 1-based → 0-based
|
|
35
|
-
const lspCol = usage.col - 1;
|
|
36
|
-
const range: LspRange = {
|
|
37
|
-
start: { line: lspLine, character: lspCol },
|
|
38
|
-
end: { line: lspLine, character: lspCol + usage.exportName.length },
|
|
39
|
-
};
|
|
40
|
-
const refCount = usage.referenceLocations.length;
|
|
41
|
-
if (refCount === 0) {
|
|
42
|
-
return {
|
|
43
|
-
range,
|
|
44
|
-
command: { title: '0 references', command: 'monograph.noop' },
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
range,
|
|
49
|
-
command: {
|
|
50
|
-
title: `${refCount} reference${refCount === 1 ? '' : 's'}`,
|
|
51
|
-
command: 'editor.action.showReferences',
|
|
52
|
-
arguments: [documentUri, { line: lspLine, character: lspCol }, usage.referenceLocations],
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
});
|
|
56
|
-
}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import type { LspRange } from './code-lens.js';
|
|
2
|
-
import type { MonographDiagnostic } from './diagnostics.js';
|
|
3
|
-
|
|
4
|
-
// ── Unused-symbol diagnostics ────────────────────────────────────────────────
|
|
5
|
-
|
|
6
|
-
export interface UnusedSymbolLocation {
|
|
7
|
-
uri: string;
|
|
8
|
-
line: number; // 1-based
|
|
9
|
-
col: number;
|
|
10
|
-
name: string;
|
|
11
|
-
symbolKind: 'export' | 'type' | 'member' | 'file';
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function buildUnusedSymbolDiagnostics(
|
|
15
|
-
symbols: UnusedSymbolLocation[],
|
|
16
|
-
): Map<string, MonographDiagnostic[]> {
|
|
17
|
-
const map = new Map<string, MonographDiagnostic[]>();
|
|
18
|
-
for (const sym of symbols) {
|
|
19
|
-
const range: LspRange = {
|
|
20
|
-
start: { line: sym.line - 1, character: sym.col - 1 },
|
|
21
|
-
end: { line: sym.line - 1, character: sym.col - 1 + sym.name.length },
|
|
22
|
-
};
|
|
23
|
-
const messages: Record<UnusedSymbolLocation['symbolKind'], string> = {
|
|
24
|
-
export: `'${sym.name}' is exported but has no external consumers`,
|
|
25
|
-
type: `Type '${sym.name}' is exported but never imported elsewhere`,
|
|
26
|
-
member: `Class member '${sym.name}' is never used outside this class`,
|
|
27
|
-
file: `File '${sym.name}' has no importers and no entry-point role`,
|
|
28
|
-
};
|
|
29
|
-
const diag: MonographDiagnostic = {
|
|
30
|
-
range,
|
|
31
|
-
severity: 2, // Warning
|
|
32
|
-
code: `monograph/unused-${sym.symbolKind}`,
|
|
33
|
-
source: 'monograph',
|
|
34
|
-
message: messages[sym.symbolKind],
|
|
35
|
-
tags: [1], // Unnecessary
|
|
36
|
-
};
|
|
37
|
-
const arr = map.get(sym.uri) ?? [];
|
|
38
|
-
arr.push(diag);
|
|
39
|
-
map.set(sym.uri, arr);
|
|
40
|
-
}
|
|
41
|
-
return map;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// ── Structural diagnostics ────────────────────────────────────────────────────
|
|
45
|
-
|
|
46
|
-
export interface CircularDepLocation {
|
|
47
|
-
uri: string;
|
|
48
|
-
importLine: number; // 1-based, the import that closes the cycle
|
|
49
|
-
cycle: string[]; // module names in cycle
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface BoundaryViolationLocation {
|
|
53
|
-
uri: string;
|
|
54
|
-
line: number;
|
|
55
|
-
fromZone: string;
|
|
56
|
-
toZone: string;
|
|
57
|
-
importedPath: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function buildCircularDepDiagnostics(
|
|
61
|
-
cycles: CircularDepLocation[],
|
|
62
|
-
): Map<string, MonographDiagnostic[]> {
|
|
63
|
-
const map = new Map<string, MonographDiagnostic[]>();
|
|
64
|
-
for (const cycle of cycles) {
|
|
65
|
-
const line0 = cycle.importLine - 1;
|
|
66
|
-
const range: LspRange = {
|
|
67
|
-
start: { line: line0, character: 0 },
|
|
68
|
-
end: { line: line0, character: 65535 },
|
|
69
|
-
};
|
|
70
|
-
const diag: MonographDiagnostic = {
|
|
71
|
-
range,
|
|
72
|
-
severity: 2, // Warning
|
|
73
|
-
code: 'monograph/circular-dep',
|
|
74
|
-
source: 'monograph',
|
|
75
|
-
message: `Circular dependency: ${cycle.cycle.join(' → ')}`,
|
|
76
|
-
};
|
|
77
|
-
const arr = map.get(cycle.uri) ?? [];
|
|
78
|
-
arr.push(diag);
|
|
79
|
-
map.set(cycle.uri, arr);
|
|
80
|
-
}
|
|
81
|
-
return map;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function buildBoundaryViolationDiagnostics(
|
|
85
|
-
violations: BoundaryViolationLocation[],
|
|
86
|
-
): Map<string, MonographDiagnostic[]> {
|
|
87
|
-
const map = new Map<string, MonographDiagnostic[]>();
|
|
88
|
-
for (const v of violations) {
|
|
89
|
-
const line0 = v.line - 1;
|
|
90
|
-
const range: LspRange = {
|
|
91
|
-
start: { line: line0, character: 0 },
|
|
92
|
-
end: { line: line0, character: 65535 },
|
|
93
|
-
};
|
|
94
|
-
const diag: MonographDiagnostic = {
|
|
95
|
-
range,
|
|
96
|
-
severity: 1, // Error
|
|
97
|
-
code: 'monograph/boundary-violation',
|
|
98
|
-
source: 'monograph',
|
|
99
|
-
message: `Boundary violation: zone '${v.fromZone}' cannot import from zone '${v.toZone}' (${v.importedPath})`,
|
|
100
|
-
};
|
|
101
|
-
const arr = map.get(v.uri) ?? [];
|
|
102
|
-
arr.push(diag);
|
|
103
|
-
map.set(v.uri, arr);
|
|
104
|
-
}
|
|
105
|
-
return map;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// ── Quality diagnostics ───────────────────────────────────────────────────────
|
|
109
|
-
|
|
110
|
-
export interface ComplexityIssueLocation {
|
|
111
|
-
uri: string;
|
|
112
|
-
line: number; // 1-based
|
|
113
|
-
functionName: string;
|
|
114
|
-
cyclomaticComplexity: number;
|
|
115
|
-
cognitiveComplexity?: number;
|
|
116
|
-
crapScore?: number;
|
|
117
|
-
severity: 'moderate' | 'high' | 'critical';
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function buildComplexityDiagnostics(
|
|
121
|
-
issues: ComplexityIssueLocation[],
|
|
122
|
-
): Map<string, MonographDiagnostic[]> {
|
|
123
|
-
const map = new Map<string, MonographDiagnostic[]>();
|
|
124
|
-
for (const issue of issues) {
|
|
125
|
-
const line0 = issue.line - 1;
|
|
126
|
-
const range: LspRange = {
|
|
127
|
-
start: { line: line0, character: 0 },
|
|
128
|
-
end: { line: line0, character: issue.functionName.length },
|
|
129
|
-
};
|
|
130
|
-
const lspSeverity: Record<ComplexityIssueLocation['severity'], 1 | 2 | 3> = {
|
|
131
|
-
moderate: 3, // Information
|
|
132
|
-
high: 2, // Warning
|
|
133
|
-
critical: 1, // Error
|
|
134
|
-
};
|
|
135
|
-
const parts = [`CC=${issue.cyclomaticComplexity}`];
|
|
136
|
-
if (issue.cognitiveComplexity != null) parts.push(`cognitive=${issue.cognitiveComplexity}`);
|
|
137
|
-
if (issue.crapScore != null) parts.push(`CRAP=${issue.crapScore.toFixed(1)}`);
|
|
138
|
-
const diag: MonographDiagnostic = {
|
|
139
|
-
range,
|
|
140
|
-
severity: lspSeverity[issue.severity],
|
|
141
|
-
code: `monograph/complexity-${issue.severity}`,
|
|
142
|
-
source: 'monograph',
|
|
143
|
-
message: `'${issue.functionName}' has ${issue.severity} complexity (${parts.join(', ')})`,
|
|
144
|
-
};
|
|
145
|
-
const arr = map.get(issue.uri) ?? [];
|
|
146
|
-
arr.push(diag);
|
|
147
|
-
map.set(issue.uri, arr);
|
|
148
|
-
}
|
|
149
|
-
return map;
|
|
150
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
// Granular LSP diagnostic push-functions for each finding category.
|
|
2
|
-
|
|
3
|
-
export type DiagnosticSeverity = 'error' | 'warning' | 'information' | 'hint';
|
|
4
|
-
|
|
5
|
-
export interface LspRange {
|
|
6
|
-
start: { line: number; character: number };
|
|
7
|
-
end: { line: number; character: number };
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface LspDiagnosticEntry {
|
|
11
|
-
filePath: string;
|
|
12
|
-
range: LspRange;
|
|
13
|
-
message: string;
|
|
14
|
-
severity: DiagnosticSeverity;
|
|
15
|
-
code: string;
|
|
16
|
-
source: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export type DiagnosticMap = Map<string, LspDiagnosticEntry[]>;
|
|
20
|
-
|
|
21
|
-
function singleLineDiag(
|
|
22
|
-
map: DiagnosticMap,
|
|
23
|
-
filePath: string,
|
|
24
|
-
line: number,
|
|
25
|
-
message: string,
|
|
26
|
-
code: string,
|
|
27
|
-
severity: DiagnosticSeverity = 'warning',
|
|
28
|
-
): void {
|
|
29
|
-
if (!map.has(filePath)) map.set(filePath, []);
|
|
30
|
-
map.get(filePath)!.push({
|
|
31
|
-
filePath,
|
|
32
|
-
range: { start: { line, character: 0 }, end: { line, character: 9999 } },
|
|
33
|
-
message,
|
|
34
|
-
severity,
|
|
35
|
-
code,
|
|
36
|
-
source: 'monograph',
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface UnusedExportFinding { filePath: string; line: number; symbol: string }
|
|
41
|
-
export interface UnusedFileFinding { filePath: string }
|
|
42
|
-
export interface UnresolvedImportFinding { filePath: string; line: number; specifier: string }
|
|
43
|
-
export interface UnusedDepFinding { name: string; kind: 'unused' | 'unlisted' }
|
|
44
|
-
export interface UnusedMemberFinding { filePath: string; line: number; className: string; member: string }
|
|
45
|
-
export interface CircularDepFinding { files: string[] }
|
|
46
|
-
export interface BoundaryViolFinding { fromFile: string; toFile: string; line: number; rule: string }
|
|
47
|
-
export interface DupeExportFinding { filePath: string; line: number; symbol: string }
|
|
48
|
-
export interface DuplicationFinding { filePath: string; startLine: number; endLine: number; groupId: number }
|
|
49
|
-
export interface StaleSuppressionFinding { filePath: string; line: number; code: string }
|
|
50
|
-
|
|
51
|
-
export function pushExportDiagnostics(map: DiagnosticMap, results: UnusedExportFinding[]): void {
|
|
52
|
-
for (const r of results)
|
|
53
|
-
singleLineDiag(map, r.filePath, r.line, `Unused export '${r.symbol}'`, 'unused-export');
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function pushFileDiagnostics(map: DiagnosticMap, results: UnusedFileFinding[]): void {
|
|
57
|
-
for (const r of results)
|
|
58
|
-
singleLineDiag(map, r.filePath, 0, 'File has no consumers and may be dead code', 'unused-file');
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function pushImportDiagnostics(map: DiagnosticMap, results: UnresolvedImportFinding[]): void {
|
|
62
|
-
for (const r of results)
|
|
63
|
-
singleLineDiag(map, r.filePath, r.line, `Cannot resolve import '${r.specifier}'`, 'unresolved-import', 'error');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function pushDepDiagnostics(map: DiagnosticMap, results: UnusedDepFinding[]): void {
|
|
67
|
-
const msg = (r: UnusedDepFinding) =>
|
|
68
|
-
r.kind === 'unused' ? `Package '${r.name}' is listed but not imported` : `Package '${r.name}' is imported but not in dependencies`;
|
|
69
|
-
for (const r of results)
|
|
70
|
-
singleLineDiag(map, 'package.json', 0, msg(r), r.kind === 'unused' ? 'unused-dep' : 'unlisted-dep');
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export function pushMemberDiagnostics(map: DiagnosticMap, results: UnusedMemberFinding[]): void {
|
|
74
|
-
for (const r of results)
|
|
75
|
-
singleLineDiag(map, r.filePath, r.line, `Unused member '${r.className}.${r.member}'`, 'unused-member');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function pushCircularDepDiagnostics(map: DiagnosticMap, results: CircularDepFinding[]): void {
|
|
79
|
-
for (const r of results) {
|
|
80
|
-
const first = r.files[0];
|
|
81
|
-
if (first) singleLineDiag(map, first, 0, `Circular dependency involving ${r.files.length} files`, 'circular-dep', 'warning');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export function pushBoundaryViolationDiagnostics(map: DiagnosticMap, results: BoundaryViolFinding[]): void {
|
|
86
|
-
for (const r of results)
|
|
87
|
-
singleLineDiag(map, r.fromFile, r.line, `Boundary violation: imports from restricted zone (rule: ${r.rule})`, 'boundary-violation', 'error');
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export function pushDuplicateExportDiagnostics(map: DiagnosticMap, results: DupeExportFinding[]): void {
|
|
91
|
-
for (const r of results)
|
|
92
|
-
singleLineDiag(map, r.filePath, r.line, `Duplicate export '${r.symbol}' — exported from multiple files`, 'duplicate-export');
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export function pushDuplicationDiagnostics(map: DiagnosticMap, results: DuplicationFinding[]): void {
|
|
96
|
-
for (const r of results)
|
|
97
|
-
singleLineDiag(map, r.filePath, r.startLine, `Code duplication (group ${r.groupId}, lines ${r.startLine}-${r.endLine})`, 'duplication', 'information');
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export function pushStaleSuppressionDiagnostics(map: DiagnosticMap, results: StaleSuppressionFinding[]): void {
|
|
101
|
-
for (const r of results)
|
|
102
|
-
singleLineDiag(map, r.filePath, r.line, `Stale suppression comment for '${r.code}' — no matching finding`, 'stale-suppression', 'hint');
|
|
103
|
-
}
|
package/src/lsp/diagnostics.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import type { LspRange } from './code-lens.js';
|
|
2
|
-
|
|
3
|
-
export type DiagnosticSeverity = 1 | 2 | 3 | 4; // Error | Warning | Information | Hint
|
|
4
|
-
export type DiagnosticTag = 1 | 2; // Unnecessary | Deprecated
|
|
5
|
-
|
|
6
|
-
export interface RelatedInformation {
|
|
7
|
-
uri: string;
|
|
8
|
-
range: LspRange;
|
|
9
|
-
message: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface MonographDiagnostic {
|
|
13
|
-
range: LspRange;
|
|
14
|
-
severity: DiagnosticSeverity;
|
|
15
|
-
code: string;
|
|
16
|
-
source: string;
|
|
17
|
-
message: string;
|
|
18
|
-
tags?: DiagnosticTag[];
|
|
19
|
-
relatedInformation?: RelatedInformation[];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface DuplicateExportLocation {
|
|
23
|
-
uri: string;
|
|
24
|
-
line: number; // 1-based
|
|
25
|
-
col: number;
|
|
26
|
-
exportName: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface DuplicateExportGroup {
|
|
30
|
-
name: string;
|
|
31
|
-
locations: DuplicateExportLocation[];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface StaleSuppressionInfo {
|
|
35
|
-
uri: string;
|
|
36
|
-
line: number; // 1-based
|
|
37
|
-
description: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function makeRange(line: number, col: number, nameLength: number): LspRange {
|
|
41
|
-
return {
|
|
42
|
-
start: { line: line - 1, character: col - 1 },
|
|
43
|
-
end: { line: line - 1, character: col - 1 + nameLength },
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function buildDuplicateExportDiagnostics(
|
|
48
|
-
groups: DuplicateExportGroup[],
|
|
49
|
-
): Map<string, MonographDiagnostic[]> {
|
|
50
|
-
const map = new Map<string, MonographDiagnostic[]>();
|
|
51
|
-
for (const group of groups) {
|
|
52
|
-
for (const loc of group.locations) {
|
|
53
|
-
const related: RelatedInformation[] = group.locations
|
|
54
|
-
.filter(other => other !== loc)
|
|
55
|
-
.map(other => ({
|
|
56
|
-
uri: other.uri,
|
|
57
|
-
range: makeRange(other.line, other.col, group.name.length),
|
|
58
|
-
message: `Also exported as '${group.name}' here`,
|
|
59
|
-
}));
|
|
60
|
-
const diag: MonographDiagnostic = {
|
|
61
|
-
range: makeRange(loc.line, loc.col, group.name.length),
|
|
62
|
-
severity: 2, // Warning
|
|
63
|
-
code: 'monograph/duplicate-export',
|
|
64
|
-
source: 'monograph',
|
|
65
|
-
message: `'${group.name}' is exported from ${group.locations.length} files`,
|
|
66
|
-
relatedInformation: related,
|
|
67
|
-
};
|
|
68
|
-
const arr = map.get(loc.uri) ?? [];
|
|
69
|
-
arr.push(diag);
|
|
70
|
-
map.set(loc.uri, arr);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return map;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export function buildStaleSuppressionDiagnostics(
|
|
77
|
-
suppressions: StaleSuppressionInfo[],
|
|
78
|
-
): Map<string, MonographDiagnostic[]> {
|
|
79
|
-
const map = new Map<string, MonographDiagnostic[]>();
|
|
80
|
-
for (const s of suppressions) {
|
|
81
|
-
const range: LspRange = {
|
|
82
|
-
start: { line: s.line - 1, character: 0 },
|
|
83
|
-
end: { line: s.line - 1, character: 65535 },
|
|
84
|
-
};
|
|
85
|
-
const diag: MonographDiagnostic = {
|
|
86
|
-
range,
|
|
87
|
-
severity: 4, // Hint
|
|
88
|
-
code: 'monograph/stale-suppression',
|
|
89
|
-
source: 'monograph',
|
|
90
|
-
message: s.description,
|
|
91
|
-
tags: [1], // Unnecessary
|
|
92
|
-
};
|
|
93
|
-
const arr = map.get(s.uri) ?? [];
|
|
94
|
-
arr.push(diag);
|
|
95
|
-
map.set(s.uri, arr);
|
|
96
|
-
}
|
|
97
|
-
return map;
|
|
98
|
-
}
|