@monoes/monograph 1.5.6 → 1.5.8
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 +31 -15
- package/dist/src/analysis/changed-files.d.ts +3 -0
- package/dist/src/analysis/changed-files.d.ts.map +1 -1
- package/dist/src/analysis/changed-files.js +11 -9
- package/dist/src/analysis/changed-files.js.map +1 -1
- package/dist/src/analysis/changed-workspaces.d.ts.map +1 -1
- package/dist/src/analysis/changed-workspaces.js +2 -9
- package/dist/src/analysis/changed-workspaces.js.map +1 -1
- package/dist/src/analysis/git-changed-files.d.ts +3 -0
- package/dist/src/analysis/git-changed-files.d.ts.map +1 -1
- package/dist/src/analysis/git-changed-files.js +17 -12
- package/dist/src/analysis/git-changed-files.js.map +1 -1
- package/dist/src/analysis/git-ref.d.ts +33 -0
- package/dist/src/analysis/git-ref.d.ts.map +1 -0
- package/dist/src/analysis/git-ref.js +54 -0
- package/dist/src/analysis/git-ref.js.map +1 -0
- package/dist/src/analyze/boundary-analysis.d.ts.map +1 -1
- package/dist/src/analyze/boundary-analysis.js +42 -42
- package/dist/src/analyze/boundary-analysis.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lsp/server.d.ts +1 -1
- package/dist/src/lsp/server.d.ts.map +1 -1
- package/dist/src/lsp/server.js +48 -13
- package/dist/src/lsp/server.js.map +1 -1
- package/dist/src/mcp-tools/api-impact.d.ts.map +1 -1
- package/dist/src/mcp-tools/api-impact.js +1 -16
- package/dist/src/mcp-tools/api-impact.js.map +1 -1
- package/dist/src/mcp-tools/context.d.ts.map +1 -1
- package/dist/src/mcp-tools/context.js +12 -23
- package/dist/src/mcp-tools/context.js.map +1 -1
- package/dist/src/mcp-tools/explain.d.ts.map +1 -1
- package/dist/src/mcp-tools/explain.js +15 -20
- package/dist/src/mcp-tools/explain.js.map +1 -1
- package/dist/src/mcp-tools/graph-query.d.ts.map +1 -1
- package/dist/src/mcp-tools/graph-query.js +10 -19
- package/dist/src/mcp-tools/graph-query.js.map +1 -1
- package/dist/src/mcp-tools/impact.d.ts.map +1 -1
- package/dist/src/mcp-tools/impact.js +38 -41
- package/dist/src/mcp-tools/impact.js.map +1 -1
- package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
- package/dist/src/mcp-tools/neighbors.js +4 -22
- package/dist/src/mcp-tools/neighbors.js.map +1 -1
- package/dist/src/mcp-tools/query.d.ts.map +1 -1
- package/dist/src/mcp-tools/query.js +14 -9
- package/dist/src/mcp-tools/query.js.map +1 -1
- package/dist/src/mcp-tools/rename.d.ts.map +1 -1
- package/dist/src/mcp-tools/rename.js +3 -20
- package/dist/src/mcp-tools/rename.js.map +1 -1
- package/dist/src/parsers/c.d.ts.map +1 -1
- package/dist/src/parsers/c.js +12 -0
- package/dist/src/parsers/c.js.map +1 -1
- package/dist/src/parsers/extractor.d.ts.map +1 -1
- package/dist/src/parsers/extractor.js +2 -1
- package/dist/src/parsers/extractor.js.map +1 -1
- package/dist/src/parsers/go.d.ts.map +1 -1
- package/dist/src/parsers/go.js +19 -1
- package/dist/src/parsers/go.js.map +1 -1
- package/dist/src/parsers/language-config.d.ts +4 -0
- package/dist/src/parsers/language-config.d.ts.map +1 -1
- package/dist/src/parsers/language-parsers.d.ts.map +1 -1
- package/dist/src/parsers/language-parsers.js +3 -1
- package/dist/src/parsers/language-parsers.js.map +1 -1
- package/dist/src/parsers/loader.d.ts +1 -0
- package/dist/src/parsers/loader.d.ts.map +1 -1
- package/dist/src/parsers/loader.js +161 -20
- package/dist/src/parsers/loader.js.map +1 -1
- package/dist/src/parsers/python.d.ts.map +1 -1
- package/dist/src/parsers/python.js +6 -0
- package/dist/src/parsers/python.js.map +1 -1
- package/dist/src/parsers/rust.d.ts.map +1 -1
- package/dist/src/parsers/rust.js +10 -0
- package/dist/src/parsers/rust.js.map +1 -1
- package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/src/pipeline/orchestrator.js +17 -0
- package/dist/src/pipeline/orchestrator.js.map +1 -1
- package/dist/src/pipeline/phases/pdf-parse.d.ts.map +1 -1
- package/dist/src/pipeline/phases/pdf-parse.js +10 -11
- package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
- package/dist/src/storage/edge-store.d.ts +1 -0
- package/dist/src/storage/edge-store.d.ts.map +1 -1
- package/dist/src/storage/edge-store.js +5 -8
- package/dist/src/storage/edge-store.js.map +1 -1
- package/dist/src/storage/node-store.d.ts +1 -0
- package/dist/src/storage/node-store.d.ts.map +1 -1
- package/dist/src/storage/node-store.js +11 -12
- package/dist/src/storage/node-store.js.map +1 -1
- package/dist/src/storage/schema.d.ts.map +1 -1
- package/dist/src/storage/schema.js +6 -0
- package/dist/src/storage/schema.js.map +1 -1
- package/dist/src/storage/utils.d.ts +11 -0
- package/dist/src/storage/utils.d.ts.map +1 -0
- package/dist/src/storage/utils.js +24 -0
- package/dist/src/storage/utils.js.map +1 -0
- 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/dist/src/fix/deps.d.ts +0 -14
- package/dist/src/fix/deps.d.ts.map +0 -1
- package/dist/src/fix/deps.js +0 -47
- package/dist/src/fix/deps.js.map +0 -1
- package/dist/src/fix/enum-members.d.ts +0 -20
- package/dist/src/fix/enum-members.d.ts.map +0 -1
- package/dist/src/fix/enum-members.js +0 -95
- package/dist/src/fix/enum-members.js.map +0 -1
- package/dist/src/fix/export-surgery.d.ts +0 -14
- package/dist/src/fix/export-surgery.d.ts.map +0 -1
- package/dist/src/fix/export-surgery.js +0 -140
- package/dist/src/fix/export-surgery.js.map +0 -1
- package/dist/src/fix/exports.d.ts +0 -16
- package/dist/src/fix/exports.d.ts.map +0 -1
- package/dist/src/fix/exports.js +0 -65
- package/dist/src/fix/exports.js.map +0 -1
- package/dist/src/fix/orchestrator.d.ts +0 -28
- package/dist/src/fix/orchestrator.d.ts.map +0 -1
- package/dist/src/fix/orchestrator.js +0 -39
- package/dist/src/fix/orchestrator.js.map +0 -1
- 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
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
const EXPORT_LIST_RE = /^(\s*)(export\s+)(type\s+)?\{([^}]*)\}(.*)$/;
|
|
2
|
-
function findExportSpan(lines, startIdx) {
|
|
3
|
-
let text = lines[startIdx];
|
|
4
|
-
let endIdx = startIdx;
|
|
5
|
-
if (!text.includes('{')) {
|
|
6
|
-
return { startIdx, endIdx, fullText: text };
|
|
7
|
-
}
|
|
8
|
-
if (text.includes('}')) {
|
|
9
|
-
return { startIdx, endIdx, fullText: text };
|
|
10
|
-
}
|
|
11
|
-
for (let i = startIdx + 1; i < lines.length; i++) {
|
|
12
|
-
text += '\n' + lines[i];
|
|
13
|
-
endIdx = i;
|
|
14
|
-
if (lines[i].includes('}'))
|
|
15
|
-
break;
|
|
16
|
-
}
|
|
17
|
-
return { startIdx, endIdx, fullText: text };
|
|
18
|
-
}
|
|
19
|
-
function removeSpecifierFromList(specifierList, exportName) {
|
|
20
|
-
const specifiers = specifierList.split(',').map(s => s.trim()).filter(Boolean);
|
|
21
|
-
const filtered = specifiers.filter(spec => {
|
|
22
|
-
const baseName = spec.split(/\s+as\s+/)[0].trim();
|
|
23
|
-
return baseName !== exportName;
|
|
24
|
-
});
|
|
25
|
-
if (filtered.length === specifiers.length)
|
|
26
|
-
return null;
|
|
27
|
-
return filtered.join(', ');
|
|
28
|
-
}
|
|
29
|
-
function applySurgery(fileContent, exportName, line, expectType) {
|
|
30
|
-
const lines = fileContent.split('\n');
|
|
31
|
-
const idx = line - 1;
|
|
32
|
-
if (idx < 0 || idx >= lines.length) {
|
|
33
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
34
|
-
}
|
|
35
|
-
const { startIdx, endIdx, fullText } = findExportSpan(lines, idx);
|
|
36
|
-
const singleLineMatch = fullText.replace(/\n/g, ' ').match(EXPORT_LIST_RE);
|
|
37
|
-
if (!singleLineMatch) {
|
|
38
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
39
|
-
}
|
|
40
|
-
const indent = singleLineMatch[1];
|
|
41
|
-
const exportKw = singleLineMatch[2];
|
|
42
|
-
const typeKw = singleLineMatch[3] ?? '';
|
|
43
|
-
const specifierList = singleLineMatch[4];
|
|
44
|
-
const tail = singleLineMatch[5];
|
|
45
|
-
if (expectType === true && !typeKw) {
|
|
46
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
47
|
-
}
|
|
48
|
-
if (expectType === false && typeKw) {
|
|
49
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
50
|
-
}
|
|
51
|
-
const newList = removeSpecifierFromList(specifierList, exportName);
|
|
52
|
-
if (newList === null) {
|
|
53
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
54
|
-
}
|
|
55
|
-
const spanSize = endIdx - startIdx + 1;
|
|
56
|
-
const newLines = [...lines];
|
|
57
|
-
if (newList.trim() === '') {
|
|
58
|
-
newLines.splice(startIdx, spanSize);
|
|
59
|
-
return {
|
|
60
|
-
modified: true,
|
|
61
|
-
newContent: newLines.join('\n'),
|
|
62
|
-
linesRemoved: spanSize,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
const replacement = `${indent}${exportKw}${typeKw}{ ${newList} }${tail}`;
|
|
66
|
-
newLines.splice(startIdx, spanSize, replacement);
|
|
67
|
-
return {
|
|
68
|
-
modified: true,
|
|
69
|
-
newContent: newLines.join('\n'),
|
|
70
|
-
linesRemoved: spanSize - 1,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
export function removeNameFromExportList(fileContent, exportName, line) {
|
|
74
|
-
return applySurgery(fileContent, exportName, line, false);
|
|
75
|
-
}
|
|
76
|
-
export function removeTypeFromExportList(fileContent, exportName, line) {
|
|
77
|
-
return applySurgery(fileContent, exportName, line, true);
|
|
78
|
-
}
|
|
79
|
-
export function promoteToTypeExport(fileContent, exportName, line) {
|
|
80
|
-
const lines = fileContent.split('\n');
|
|
81
|
-
const idx = line - 1;
|
|
82
|
-
if (idx < 0 || idx >= lines.length) {
|
|
83
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
84
|
-
}
|
|
85
|
-
const { startIdx, endIdx, fullText } = findExportSpan(lines, idx);
|
|
86
|
-
const normalised = fullText.replace(/\n/g, ' ');
|
|
87
|
-
const match = normalised.match(EXPORT_LIST_RE);
|
|
88
|
-
if (!match || match[3]) {
|
|
89
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
90
|
-
}
|
|
91
|
-
const indent = match[1];
|
|
92
|
-
const specifierList = match[4];
|
|
93
|
-
const tail = match[5];
|
|
94
|
-
const specifiers = specifierList.split(',').map(s => s.trim()).filter(Boolean);
|
|
95
|
-
const target = specifiers.find(spec => spec.split(/\s+as\s+/)[0].trim() === exportName);
|
|
96
|
-
if (!target) {
|
|
97
|
-
return { modified: false, newContent: fileContent, linesRemoved: 0 };
|
|
98
|
-
}
|
|
99
|
-
const remaining = specifiers.filter(spec => spec.split(/\s+as\s+/)[0].trim() !== exportName);
|
|
100
|
-
const spanSize = endIdx - startIdx + 1;
|
|
101
|
-
const newLines = [...lines];
|
|
102
|
-
const typeExportLine = `${indent}export type { ${target} }`;
|
|
103
|
-
if (remaining.length === 0) {
|
|
104
|
-
newLines.splice(startIdx, spanSize, typeExportLine);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
const valueExportLine = `${indent}export { ${remaining.join(', ')} }${tail}`;
|
|
108
|
-
newLines.splice(startIdx, spanSize, valueExportLine, typeExportLine);
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
modified: true,
|
|
112
|
-
newContent: newLines.join('\n'),
|
|
113
|
-
linesRemoved: spanSize - newLines.length + lines.length,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
export function applyExportSurgeries(fileContent, surgeries) {
|
|
117
|
-
const sorted = [...surgeries].sort((a, b) => b.line - a.line);
|
|
118
|
-
let content = fileContent;
|
|
119
|
-
let totalLinesRemoved = 0;
|
|
120
|
-
let anyModified = false;
|
|
121
|
-
for (const surgery of sorted) {
|
|
122
|
-
let result;
|
|
123
|
-
if (surgery.action === 'remove') {
|
|
124
|
-
result = removeNameFromExportList(content, surgery.exportName, surgery.line);
|
|
125
|
-
}
|
|
126
|
-
else if (surgery.action === 'remove-type') {
|
|
127
|
-
result = removeTypeFromExportList(content, surgery.exportName, surgery.line);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
result = promoteToTypeExport(content, surgery.exportName, surgery.line);
|
|
131
|
-
}
|
|
132
|
-
if (result.modified) {
|
|
133
|
-
content = result.newContent;
|
|
134
|
-
totalLinesRemoved += result.linesRemoved;
|
|
135
|
-
anyModified = true;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return { modified: anyModified, newContent: content, linesRemoved: totalLinesRemoved };
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=export-surgery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-surgery.js","sourceRoot":"","sources":["../../../src/fix/export-surgery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export interface ExportFix {
|
|
2
|
-
filePath: string;
|
|
3
|
-
exportName: string;
|
|
4
|
-
lineNumber: number;
|
|
5
|
-
fixType: 'remove-export-keyword' | 'remove-entire-declaration';
|
|
6
|
-
}
|
|
7
|
-
export interface FixResult {
|
|
8
|
-
filePath: string;
|
|
9
|
-
fixesApplied: number;
|
|
10
|
-
dryRun: boolean;
|
|
11
|
-
diff: string[];
|
|
12
|
-
}
|
|
13
|
-
export declare function fixUnusedExports(fixes: ExportFix[], options?: {
|
|
14
|
-
dryRun?: boolean;
|
|
15
|
-
}): FixResult[];
|
|
16
|
-
//# sourceMappingURL=exports.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/fix/exports.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,uBAAuB,GAAG,2BAA2B,CAAC;CAChE;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,SAAS,EAAE,CAuEb"}
|
package/dist/src/fix/exports.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, renameSync } from 'fs';
|
|
2
|
-
import { tmpdir } from 'os';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
export function fixUnusedExports(fixes, options) {
|
|
5
|
-
const dryRun = options?.dryRun ?? false;
|
|
6
|
-
// Group fixes by filePath
|
|
7
|
-
const byFile = new Map();
|
|
8
|
-
for (const fix of fixes) {
|
|
9
|
-
const existing = byFile.get(fix.filePath) ?? [];
|
|
10
|
-
existing.push(fix);
|
|
11
|
-
byFile.set(fix.filePath, existing);
|
|
12
|
-
}
|
|
13
|
-
const results = [];
|
|
14
|
-
for (const [filePath, fileFixes] of byFile) {
|
|
15
|
-
let content;
|
|
16
|
-
try {
|
|
17
|
-
content = readFileSync(filePath, 'utf8');
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
// Skip files we can't read
|
|
21
|
-
continue;
|
|
22
|
-
}
|
|
23
|
-
const lines = content.split('\n');
|
|
24
|
-
const diff = [];
|
|
25
|
-
let fixesApplied = 0;
|
|
26
|
-
// Sort by lineNumber descending to avoid line-shift bugs
|
|
27
|
-
const sortedFixes = [...fileFixes].sort((a, b) => b.lineNumber - a.lineNumber);
|
|
28
|
-
for (const fix of sortedFixes) {
|
|
29
|
-
const idx = fix.lineNumber - 1;
|
|
30
|
-
if (idx < 0 || idx >= lines.length)
|
|
31
|
-
continue;
|
|
32
|
-
const originalLine = lines[idx];
|
|
33
|
-
if (fix.fixType === 'remove-export-keyword') {
|
|
34
|
-
// Remove the 'export ' prefix from the line
|
|
35
|
-
const newLine = originalLine.replace(/^(\s*)export (default function|function|const|class|type|interface|default )/, '$1$2');
|
|
36
|
-
if (newLine !== originalLine) {
|
|
37
|
-
diff.push(`- ${originalLine}`);
|
|
38
|
-
diff.push(`+ ${newLine}`);
|
|
39
|
-
lines[idx] = newLine;
|
|
40
|
-
fixesApplied++;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else if (fix.fixType === 'remove-entire-declaration') {
|
|
44
|
-
diff.push(`- ${originalLine}`);
|
|
45
|
-
lines.splice(idx, 1);
|
|
46
|
-
fixesApplied++;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (!dryRun && fixesApplied > 0) {
|
|
50
|
-
const newContent = lines.join('\n');
|
|
51
|
-
// Atomic write: temp file then rename
|
|
52
|
-
const tmpFile = join(tmpdir(), `monograph-fix-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
|
|
53
|
-
writeFileSync(tmpFile, newContent, 'utf8');
|
|
54
|
-
renameSync(tmpFile, filePath);
|
|
55
|
-
}
|
|
56
|
-
results.push({
|
|
57
|
-
filePath,
|
|
58
|
-
fixesApplied,
|
|
59
|
-
dryRun,
|
|
60
|
-
diff,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return results;
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=exports.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../../src/fix/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAgB5B,MAAM,UAAU,gBAAgB,CAC9B,KAAkB,EAClB,OAA8B;IAE9B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC;IAExC,0BAA0B;IAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC;QAC3C,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,yDAAyD;QACzD,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAE/E,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;YAC/B,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM;gBAAE,SAAS;YAE7C,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAEhC,IAAI,GAAG,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;gBAC5C,4CAA4C;gBAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAClC,8EAA8E,EAC9E,MAAM,CACP,CAAC;gBACF,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;oBAC1B,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;oBACrB,YAAY,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,OAAO,KAAK,2BAA2B,EAAE,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;gBAC/B,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrB,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,sCAAsC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzG,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC3C,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,YAAY;YACZ,MAAM;YACN,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export interface FixerAnalysisResults {
|
|
2
|
-
unusedExports: unknown[];
|
|
3
|
-
unusedDependencies: unknown[];
|
|
4
|
-
unusedEnumMembers: unknown[];
|
|
5
|
-
}
|
|
6
|
-
export interface FixOptions {
|
|
7
|
-
root: string;
|
|
8
|
-
output: 'human' | 'json';
|
|
9
|
-
dryRun: boolean;
|
|
10
|
-
yes: boolean;
|
|
11
|
-
quiet: boolean;
|
|
12
|
-
}
|
|
13
|
-
export interface FixRecord {
|
|
14
|
-
file: string;
|
|
15
|
-
kind: string;
|
|
16
|
-
name: string;
|
|
17
|
-
applied: boolean;
|
|
18
|
-
dryRun: boolean;
|
|
19
|
-
}
|
|
20
|
-
export type FixApplier = (root: string, results: FixerAnalysisResults, dryRun: boolean, out: FixRecord[]) => Promise<boolean>;
|
|
21
|
-
export declare function runFix(results: FixerAnalysisResults, opts: FixOptions, appliers?: {
|
|
22
|
-
exports?: FixApplier;
|
|
23
|
-
deps?: FixApplier;
|
|
24
|
-
enumMembers?: FixApplier;
|
|
25
|
-
}): Promise<{
|
|
26
|
-
exitCode: number;
|
|
27
|
-
}>;
|
|
28
|
-
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/fix/orchestrator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,kBAAkB,EAAE,OAAO,EAAE,CAAC;IAC9B,iBAAiB,EAAE,OAAO,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9H,wBAAsB,MAAM,CAC1B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,GAAE;IACR,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,UAAU,CAAC;CACrB,GACL,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC/B"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export async function runFix(results, opts, appliers = {}) {
|
|
2
|
-
const isTTY = Boolean(process.stdin.isTTY);
|
|
3
|
-
if (!opts.dryRun && !opts.yes && !isTTY) {
|
|
4
|
-
const msg = 'fix requires --yes in non-interactive environments. Use --dry-run to preview first.';
|
|
5
|
-
if (opts.output === 'json')
|
|
6
|
-
console.log(JSON.stringify({ error: msg }));
|
|
7
|
-
else
|
|
8
|
-
console.error(`Error: ${msg}`);
|
|
9
|
-
return { exitCode: 2 };
|
|
10
|
-
}
|
|
11
|
-
const total = results.unusedExports.length + results.unusedDependencies.length + results.unusedEnumMembers.length;
|
|
12
|
-
if (total === 0) {
|
|
13
|
-
if (opts.output === 'json')
|
|
14
|
-
console.log(JSON.stringify({ dryRun: opts.dryRun, fixes: [], total_fixed: 0 }));
|
|
15
|
-
else if (!opts.quiet)
|
|
16
|
-
console.error('No issues to fix.');
|
|
17
|
-
return { exitCode: 0 };
|
|
18
|
-
}
|
|
19
|
-
const fixes = [];
|
|
20
|
-
let hadError = false;
|
|
21
|
-
if (appliers.exports && results.unusedExports.length > 0)
|
|
22
|
-
hadError ||= await appliers.exports(opts.root, results, opts.dryRun, fixes);
|
|
23
|
-
if (appliers.deps && results.unusedDependencies.length > 0)
|
|
24
|
-
hadError ||= await appliers.deps(opts.root, results, opts.dryRun, fixes);
|
|
25
|
-
if (appliers.enumMembers && results.unusedEnumMembers.length > 0)
|
|
26
|
-
hadError ||= await appliers.enumMembers(opts.root, results, opts.dryRun, fixes);
|
|
27
|
-
if (opts.output === 'json') {
|
|
28
|
-
const applied = fixes.filter(f => f.applied).length;
|
|
29
|
-
console.log(JSON.stringify({ dryRun: opts.dryRun, fixes, total_fixed: applied }, null, 2));
|
|
30
|
-
}
|
|
31
|
-
else if (!opts.quiet) {
|
|
32
|
-
if (opts.dryRun)
|
|
33
|
-
console.error('Dry run complete. No files were modified.');
|
|
34
|
-
else
|
|
35
|
-
console.error(`Fixed ${fixes.filter(f => f.applied).length} issue(s).`);
|
|
36
|
-
}
|
|
37
|
-
return { exitCode: hadError ? 2 : 0 };
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/fix/orchestrator.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAA6B,EAC7B,IAAgB,EAChB,QAAQ,GAIJ,EAAE;IAEN,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,qFAAqF,CAAC;QAClG,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;;YACnE,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAClH,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aACvG,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACzD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,IAAI,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QACtD,QAAQ,KAAK,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9E,IAAI,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;QACxD,QAAQ,KAAK,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC9D,QAAQ,KAAK,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAElF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;;YACvE,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { runBenchmark, estimateTokens } from '../../analysis/benchmark.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(nodeCount: number): Database.Database {
|
|
6
|
-
const db = new Database(':memory:');
|
|
7
|
-
db.exec(`
|
|
8
|
-
CREATE TABLE nodes (id TEXT PRIMARY KEY, name TEXT, label TEXT, file_path TEXT, start_line INTEGER, end_line INTEGER, community_id INTEGER);
|
|
9
|
-
CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT, target_id TEXT, relation TEXT, confidence TEXT, confidence_score REAL);
|
|
10
|
-
`);
|
|
11
|
-
const insert = db.prepare('INSERT INTO nodes VALUES (?,?,?,?,?,?,?)');
|
|
12
|
-
for (let i = 0; i < nodeCount; i++) {
|
|
13
|
-
insert.run(`n${i}`, `symbol_${i}`, 'Function', `/app/file${i % 10}.ts`, i * 5 + 1, i * 5 + 4, i % 3);
|
|
14
|
-
}
|
|
15
|
-
for (let i = 1; i < Math.min(nodeCount, 20); i++) {
|
|
16
|
-
db.prepare('INSERT INTO edges VALUES (?,?,?,?,?,?)').run(`e${i}`, `n${i - 1}`, `n${i}`, 'CALLS', 'EXTRACTED', 0.9);
|
|
17
|
-
}
|
|
18
|
-
return db;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
describe('estimateTokens', () => {
|
|
22
|
-
it('estimates tokens as text length divided by 4', () => {
|
|
23
|
-
expect(estimateTokens('a'.repeat(400))).toBe(100);
|
|
24
|
-
expect(estimateTokens('')).toBe(0);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
describe('runBenchmark', () => {
|
|
29
|
-
it('returns corpus_tokens, avg_query_tokens, and reduction_ratio', () => {
|
|
30
|
-
const db = makeDb(50);
|
|
31
|
-
const result = runBenchmark(db, { corpusWordCount: 5000 });
|
|
32
|
-
expect(result.corpus_tokens).toBeGreaterThan(0);
|
|
33
|
-
expect(result.avg_query_tokens).toBeGreaterThanOrEqual(0);
|
|
34
|
-
expect(result.reduction_ratio).toBeGreaterThanOrEqual(0);
|
|
35
|
-
expect(result.nodes).toBe(50);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('returns per_question breakdown', () => {
|
|
39
|
-
const db = makeDb(30);
|
|
40
|
-
const result = runBenchmark(db, {
|
|
41
|
-
questions: ['how does authentication work', 'what is the entry point'],
|
|
42
|
-
corpusWordCount: 3000,
|
|
43
|
-
});
|
|
44
|
-
expect(Array.isArray(result.per_question)).toBe(true);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('works with no matching nodes gracefully', () => {
|
|
48
|
-
const db = makeDb(5);
|
|
49
|
-
const result = runBenchmark(db, { questions: ['zzz_nonexistent_xyz'] });
|
|
50
|
-
expect(result.nodes).toBe(5);
|
|
51
|
-
expect(typeof result.reduction_ratio).toBe('number');
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('uses default questions when none provided', () => {
|
|
55
|
-
const db = makeDb(20);
|
|
56
|
-
const result = runBenchmark(db);
|
|
57
|
-
expect(result.per_question.length).toBeGreaterThan(0);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { silhouetteScore, modularityScore } from '../../analysis/cluster-quality.js';
|
|
3
|
-
|
|
4
|
-
describe('silhouetteScore', () => {
|
|
5
|
-
it('returns 0 for a single node', () => {
|
|
6
|
-
const memberships = new Map([['a', 0]]);
|
|
7
|
-
const edges: Array<{ sourceId: string; targetId: string }> = [];
|
|
8
|
-
expect(silhouetteScore(memberships, edges)).toBeCloseTo(0);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('returns 1 for two perfectly separated communities with no cross edges', () => {
|
|
12
|
-
// Community 0: a-b-c fully connected, Community 1: d-e-f fully connected
|
|
13
|
-
const memberships = new Map([
|
|
14
|
-
['a', 0], ['b', 0], ['c', 0],
|
|
15
|
-
['d', 1], ['e', 1], ['f', 1],
|
|
16
|
-
]);
|
|
17
|
-
const edges = [
|
|
18
|
-
{ sourceId: 'a', targetId: 'b' },
|
|
19
|
-
{ sourceId: 'b', targetId: 'c' },
|
|
20
|
-
{ sourceId: 'a', targetId: 'c' },
|
|
21
|
-
{ sourceId: 'd', targetId: 'e' },
|
|
22
|
-
{ sourceId: 'e', targetId: 'f' },
|
|
23
|
-
{ sourceId: 'd', targetId: 'f' },
|
|
24
|
-
];
|
|
25
|
-
const score = silhouetteScore(memberships, edges);
|
|
26
|
-
expect(score).toBeGreaterThan(0.5);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('returns negative score for misassigned nodes (cross edges dominate)', () => {
|
|
30
|
-
// Node 'a' is in community 0 but only connected to community 1 nodes
|
|
31
|
-
const memberships = new Map([
|
|
32
|
-
['a', 0],
|
|
33
|
-
['b', 1], ['c', 1], ['d', 1],
|
|
34
|
-
]);
|
|
35
|
-
const edges = [
|
|
36
|
-
{ sourceId: 'a', targetId: 'b' },
|
|
37
|
-
{ sourceId: 'a', targetId: 'c' },
|
|
38
|
-
{ sourceId: 'a', targetId: 'd' },
|
|
39
|
-
{ sourceId: 'b', targetId: 'c' },
|
|
40
|
-
{ sourceId: 'c', targetId: 'd' },
|
|
41
|
-
];
|
|
42
|
-
const score = silhouetteScore(memberships, edges);
|
|
43
|
-
// 'a' is isolated in its community, so its silhouette is negative
|
|
44
|
-
expect(score).toBeLessThan(0.5);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('handles nodes with no edges gracefully', () => {
|
|
48
|
-
const memberships = new Map([['x', 0], ['y', 1]]);
|
|
49
|
-
const edges: Array<{ sourceId: string; targetId: string }> = [];
|
|
50
|
-
const score = silhouetteScore(memberships, edges);
|
|
51
|
-
expect(typeof score).toBe('number');
|
|
52
|
-
expect(isNaN(score)).toBe(false);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
describe('modularityScore', () => {
|
|
57
|
-
it('returns 0 for empty graph', () => {
|
|
58
|
-
const memberships = new Map<string, number>();
|
|
59
|
-
const edges: Array<{ sourceId: string; targetId: string }> = [];
|
|
60
|
-
expect(modularityScore(memberships, edges)).toBeCloseTo(0);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('returns positive value for well-structured communities', () => {
|
|
64
|
-
// Two dense clusters with few cross edges
|
|
65
|
-
const memberships = new Map([
|
|
66
|
-
['a', 0], ['b', 0], ['c', 0],
|
|
67
|
-
['d', 1], ['e', 1], ['f', 1],
|
|
68
|
-
]);
|
|
69
|
-
const edges = [
|
|
70
|
-
{ sourceId: 'a', targetId: 'b' },
|
|
71
|
-
{ sourceId: 'b', targetId: 'c' },
|
|
72
|
-
{ sourceId: 'a', targetId: 'c' },
|
|
73
|
-
{ sourceId: 'd', targetId: 'e' },
|
|
74
|
-
{ sourceId: 'e', targetId: 'f' },
|
|
75
|
-
{ sourceId: 'd', targetId: 'f' },
|
|
76
|
-
{ sourceId: 'c', targetId: 'd' }, // one bridge edge
|
|
77
|
-
];
|
|
78
|
-
const q = modularityScore(memberships, edges);
|
|
79
|
-
expect(q).toBeGreaterThan(0);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('returns close to 0 or negative for random partition', () => {
|
|
83
|
-
// All edges cross community boundaries
|
|
84
|
-
const memberships = new Map([
|
|
85
|
-
['a', 0], ['b', 1], ['c', 0], ['d', 1],
|
|
86
|
-
]);
|
|
87
|
-
const edges = [
|
|
88
|
-
{ sourceId: 'a', targetId: 'b' },
|
|
89
|
-
{ sourceId: 'b', targetId: 'c' },
|
|
90
|
-
{ sourceId: 'c', targetId: 'd' },
|
|
91
|
-
{ sourceId: 'd', targetId: 'a' },
|
|
92
|
-
];
|
|
93
|
-
const q = modularityScore(memberships, edges);
|
|
94
|
-
expect(q).toBeLessThan(0.3);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('handles single-community graph', () => {
|
|
98
|
-
const memberships = new Map([['a', 0], ['b', 0], ['c', 0]]);
|
|
99
|
-
const edges = [
|
|
100
|
-
{ sourceId: 'a', targetId: 'b' },
|
|
101
|
-
{ sourceId: 'b', targetId: 'c' },
|
|
102
|
-
];
|
|
103
|
-
const q = modularityScore(memberships, edges);
|
|
104
|
-
expect(typeof q).toBe('number');
|
|
105
|
-
});
|
|
106
|
-
});
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { checkCorpusHealth, type CorpusHealthResult } from '../../analysis/corpus-health.js';
|
|
3
|
-
|
|
4
|
-
describe('checkCorpusHealth', () => {
|
|
5
|
-
it('passes for healthy corpus', () => {
|
|
6
|
-
const r = checkCorpusHealth({ wordCount: 100_000, fileCount: 50 });
|
|
7
|
-
expect(r.healthy).toBe(true);
|
|
8
|
-
expect(r.warnings).toHaveLength(0);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('warns when corpus too small', () => {
|
|
12
|
-
const r = checkCorpusHealth({ wordCount: 10_000, fileCount: 10 });
|
|
13
|
-
expect(r.healthy).toBe(false);
|
|
14
|
-
expect(r.warnings.some(w => /small/i.test(w))).toBe(true);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('warns when corpus too large', () => {
|
|
18
|
-
const r = checkCorpusHealth({ wordCount: 600_000, fileCount: 100 });
|
|
19
|
-
expect(r.healthy).toBe(false);
|
|
20
|
-
expect(r.warnings.some(w => /large/i.test(w))).toBe(true);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('warns when file count too high', () => {
|
|
24
|
-
const r = checkCorpusHealth({ wordCount: 200_000, fileCount: 250 });
|
|
25
|
-
expect(r.healthy).toBe(false);
|
|
26
|
-
expect(r.warnings.some(w => /file/i.test(w))).toBe(true);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('collects multiple warnings', () => {
|
|
30
|
-
const r = checkCorpusHealth({ wordCount: 600_000, fileCount: 300 });
|
|
31
|
-
expect(r.warnings.length).toBeGreaterThanOrEqual(2);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import {
|
|
3
|
-
dependencyHealth,
|
|
4
|
-
type DependencyHealthInput,
|
|
5
|
-
} from '../../analysis/dependency-health.js';
|
|
6
|
-
|
|
7
|
-
describe('dependencyHealth', () => {
|
|
8
|
-
it('returns score 1 for a perfectly healthy small graph', () => {
|
|
9
|
-
const input: DependencyHealthInput = {
|
|
10
|
-
nodes: ['a', 'b', 'c'],
|
|
11
|
-
edges: [
|
|
12
|
-
{ sourceId: 'a', targetId: 'b' },
|
|
13
|
-
{ sourceId: 'b', targetId: 'c' },
|
|
14
|
-
],
|
|
15
|
-
cycleCount: 0,
|
|
16
|
-
deadNodeCount: 0,
|
|
17
|
-
};
|
|
18
|
-
const result = dependencyHealth(input);
|
|
19
|
-
expect(result.score).toBeGreaterThan(0.8);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('penalizes cycles', () => {
|
|
23
|
-
const baseline: DependencyHealthInput = {
|
|
24
|
-
nodes: ['a', 'b', 'c'],
|
|
25
|
-
edges: [
|
|
26
|
-
{ sourceId: 'a', targetId: 'b' },
|
|
27
|
-
{ sourceId: 'b', targetId: 'c' },
|
|
28
|
-
],
|
|
29
|
-
cycleCount: 0,
|
|
30
|
-
deadNodeCount: 0,
|
|
31
|
-
};
|
|
32
|
-
const withCycle: DependencyHealthInput = {
|
|
33
|
-
...baseline,
|
|
34
|
-
edges: [
|
|
35
|
-
...baseline.edges,
|
|
36
|
-
{ sourceId: 'c', targetId: 'a' },
|
|
37
|
-
],
|
|
38
|
-
cycleCount: 1,
|
|
39
|
-
};
|
|
40
|
-
expect(dependencyHealth(withCycle).score).toBeLessThan(dependencyHealth(baseline).score);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('penalizes dead code', () => {
|
|
44
|
-
const baseline: DependencyHealthInput = {
|
|
45
|
-
nodes: ['a', 'b', 'c'],
|
|
46
|
-
edges: [{ sourceId: 'a', targetId: 'b' }],
|
|
47
|
-
cycleCount: 0,
|
|
48
|
-
deadNodeCount: 0,
|
|
49
|
-
};
|
|
50
|
-
const withDead: DependencyHealthInput = { ...baseline, deadNodeCount: 2 };
|
|
51
|
-
expect(dependencyHealth(withDead).score).toBeLessThan(dependencyHealth(baseline).score);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('penalizes high fan-in concentration (god nodes)', () => {
|
|
55
|
-
// One node targeted by all others → god node
|
|
56
|
-
const nodes = ['a', 'b', 'c', 'd', 'e', 'hub'];
|
|
57
|
-
const edges = nodes.slice(0, 5).map(n => ({ sourceId: n, targetId: 'hub' }));
|
|
58
|
-
const input: DependencyHealthInput = {
|
|
59
|
-
nodes,
|
|
60
|
-
edges,
|
|
61
|
-
cycleCount: 0,
|
|
62
|
-
deadNodeCount: 0,
|
|
63
|
-
};
|
|
64
|
-
const result = dependencyHealth(input);
|
|
65
|
-
expect(result.score).toBeLessThan(1);
|
|
66
|
-
expect(result.details.godNodeConcentration).toBeGreaterThan(0);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('returns score in [0, 1] range', () => {
|
|
70
|
-
const input: DependencyHealthInput = {
|
|
71
|
-
nodes: ['a', 'b'],
|
|
72
|
-
edges: [{ sourceId: 'a', targetId: 'b' }, { sourceId: 'b', targetId: 'a' }],
|
|
73
|
-
cycleCount: 1,
|
|
74
|
-
deadNodeCount: 1,
|
|
75
|
-
};
|
|
76
|
-
const result = dependencyHealth(input);
|
|
77
|
-
expect(result.score).toBeGreaterThanOrEqual(0);
|
|
78
|
-
expect(result.score).toBeLessThanOrEqual(1);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('exposes details breakdown', () => {
|
|
82
|
-
const input: DependencyHealthInput = {
|
|
83
|
-
nodes: ['a', 'b', 'c'],
|
|
84
|
-
edges: [{ sourceId: 'a', targetId: 'b' }],
|
|
85
|
-
cycleCount: 0,
|
|
86
|
-
deadNodeCount: 1,
|
|
87
|
-
};
|
|
88
|
-
const { details } = dependencyHealth(input);
|
|
89
|
-
expect(typeof details.cyclePenalty).toBe('number');
|
|
90
|
-
expect(typeof details.deadCodeRatio).toBe('number');
|
|
91
|
-
expect(typeof details.fanSkew).toBe('number');
|
|
92
|
-
expect(typeof details.godNodeConcentration).toBe('number');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('handles empty graph without throwing', () => {
|
|
96
|
-
const input: DependencyHealthInput = {
|
|
97
|
-
nodes: [],
|
|
98
|
-
edges: [],
|
|
99
|
-
cycleCount: 0,
|
|
100
|
-
deadNodeCount: 0,
|
|
101
|
-
};
|
|
102
|
-
expect(() => dependencyHealth(input)).not.toThrow();
|
|
103
|
-
expect(dependencyHealth(input).score).toBe(1);
|
|
104
|
-
});
|
|
105
|
-
});
|