@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
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { tmpdir } from 'os';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import { unlinkSync, existsSync } from 'fs';
|
|
4
|
-
import { openDb, closeDb } from '../../src/storage/db.js';
|
|
5
|
-
import { insertNode } from '../../src/storage/node-store.js';
|
|
6
|
-
import { insertEdge } from '../../src/storage/edge-store.js';
|
|
7
|
-
import { getToolMap } from '../../src/mcp-tools/tool-map.js';
|
|
8
|
-
import type { MonographNode, MonographEdge } from '../../src/types.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Graph:
|
|
12
|
-
* Tool node: "auth_login" → HANDLES_TOOL → handler function "handleAuthLogin"
|
|
13
|
-
* Tool node: "list_users" (no handler)
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
const dbPath = join(tmpdir(), `monograph-tool-map-${Date.now()}.db`);
|
|
17
|
-
let db: ReturnType<typeof openDb>;
|
|
18
|
-
|
|
19
|
-
const toolAuthLogin: MonographNode = {
|
|
20
|
-
id: 'tool_auth_login',
|
|
21
|
-
label: 'Tool',
|
|
22
|
-
name: 'auth_login',
|
|
23
|
-
normLabel: 'auth_login',
|
|
24
|
-
filePath: 'src/tools/auth.ts',
|
|
25
|
-
startLine: 0,
|
|
26
|
-
isExported: false,
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const toolListUsers: MonographNode = {
|
|
30
|
-
id: 'tool_list_users',
|
|
31
|
-
label: 'Tool',
|
|
32
|
-
name: 'list_users',
|
|
33
|
-
normLabel: 'list_users',
|
|
34
|
-
filePath: 'src/tools/users.ts',
|
|
35
|
-
startLine: 0,
|
|
36
|
-
isExported: false,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const handlerAuthLogin: MonographNode = {
|
|
40
|
-
id: 'fn_handle_auth_login',
|
|
41
|
-
label: 'Function',
|
|
42
|
-
name: 'handleAuthLogin',
|
|
43
|
-
normLabel: 'handleauthlogin',
|
|
44
|
-
filePath: 'src/handlers/auth-handler.ts',
|
|
45
|
-
startLine: 12,
|
|
46
|
-
isExported: true,
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const handlesToolEdge: MonographEdge = {
|
|
50
|
-
id: 'e_tool_handler',
|
|
51
|
-
sourceId: 'tool_auth_login',
|
|
52
|
-
targetId: 'fn_handle_auth_login',
|
|
53
|
-
relation: 'HANDLES_TOOL',
|
|
54
|
-
confidence: 'EXTRACTED',
|
|
55
|
-
confidenceScore: 0.9,
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
beforeAll(() => {
|
|
59
|
-
db = openDb(dbPath);
|
|
60
|
-
insertNode(db, toolAuthLogin);
|
|
61
|
-
insertNode(db, toolListUsers);
|
|
62
|
-
insertNode(db, handlerAuthLogin);
|
|
63
|
-
insertEdge(db, handlesToolEdge);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
afterAll(() => {
|
|
67
|
-
closeDb(db);
|
|
68
|
-
for (const p of [dbPath, dbPath + '-wal', dbPath + '-shm']) {
|
|
69
|
-
if (existsSync(p)) unlinkSync(p);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
describe('getToolMap', () => {
|
|
74
|
-
it('returns both tools when no filter is given', () => {
|
|
75
|
-
const result = getToolMap(db);
|
|
76
|
-
expect(result).toHaveLength(2);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('returns tools sorted by name', () => {
|
|
80
|
-
const result = getToolMap(db);
|
|
81
|
-
const names = result.map((t) => t.name);
|
|
82
|
-
expect(names).toEqual([...names].sort());
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('attaches handler info when HANDLES_TOOL edge exists', () => {
|
|
86
|
-
const result = getToolMap(db);
|
|
87
|
-
const authTool = result.find((t) => t.name === 'auth_login');
|
|
88
|
-
expect(authTool).toBeDefined();
|
|
89
|
-
expect(authTool!.handlerName).toBe('handleAuthLogin');
|
|
90
|
-
expect(authTool!.handlerFile).toBe('src/handlers/auth-handler.ts');
|
|
91
|
-
expect(authTool!.handlerLine).toBe(12);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('handler fields are null when no HANDLES_TOOL edge exists', () => {
|
|
95
|
-
const result = getToolMap(db);
|
|
96
|
-
const usersTool = result.find((t) => t.name === 'list_users');
|
|
97
|
-
expect(usersTool).toBeDefined();
|
|
98
|
-
expect(usersTool!.handlerName).toBeNull();
|
|
99
|
-
expect(usersTool!.handlerFile).toBeNull();
|
|
100
|
-
expect(usersTool!.handlerLine).toBeNull();
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('filters by tool name substring', () => {
|
|
104
|
-
const result = getToolMap(db, { tool: 'auth' });
|
|
105
|
-
expect(result).toHaveLength(1);
|
|
106
|
-
expect(result[0].name).toBe('auth_login');
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('filter with no match returns empty array', () => {
|
|
110
|
-
const result = getToolMap(db, { tool: 'nonexistent' });
|
|
111
|
-
expect(result).toHaveLength(0);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('returns empty array when no Tool nodes exist', () => {
|
|
115
|
-
const emptyDbPath = join(tmpdir(), `monograph-tool-map-empty-${Date.now()}.db`);
|
|
116
|
-
const emptyDb = openDb(emptyDbPath);
|
|
117
|
-
try {
|
|
118
|
-
const result = getToolMap(emptyDb);
|
|
119
|
-
expect(result).toHaveLength(0);
|
|
120
|
-
} finally {
|
|
121
|
-
closeDb(emptyDb);
|
|
122
|
-
for (const p of [emptyDbPath, emptyDbPath + '-wal', emptyDbPath + '-shm']) {
|
|
123
|
-
if (existsSync(p)) unlinkSync(p);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it('result entries include id and filePath fields', () => {
|
|
129
|
-
const result = getToolMap(db);
|
|
130
|
-
const authTool = result.find((t) => t.name === 'auth_login');
|
|
131
|
-
expect(authTool).toBeDefined();
|
|
132
|
-
expect(authTool!.id).toBe('tool_auth_login');
|
|
133
|
-
expect(authTool!.filePath).toBe('src/tools/auth.ts');
|
|
134
|
-
});
|
|
135
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.c');
|
|
8
|
-
|
|
9
|
-
describe('C parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.c');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (ABI mismatch).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.cpp');
|
|
8
|
-
|
|
9
|
-
describe('C++ parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.cpp');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (ABI mismatch).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { join, dirname } from 'path';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
4
|
-
|
|
5
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
|
|
7
|
-
const CSHARP_SOURCE = `
|
|
8
|
-
using System;
|
|
9
|
-
using System.Collections.Generic;
|
|
10
|
-
|
|
11
|
-
namespace MyApp.Models {
|
|
12
|
-
public interface IUserService {
|
|
13
|
-
User GetUser(int id);
|
|
14
|
-
bool CreateUser(string name);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
public class User {
|
|
18
|
-
public int Id { get; set; }
|
|
19
|
-
public string Name { get; set; }
|
|
20
|
-
|
|
21
|
-
public User(int id, string name) {
|
|
22
|
-
Id = id;
|
|
23
|
-
Name = name;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public class UserService : IUserService {
|
|
28
|
-
private readonly List<User> _users = new();
|
|
29
|
-
|
|
30
|
-
public User GetUser(int id) {
|
|
31
|
-
return _users.Find(u => u.Id == id);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
public bool CreateUser(string name) {
|
|
35
|
-
_users.Add(new User(_users.Count + 1, name));
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
`;
|
|
41
|
-
|
|
42
|
-
const fixturePath = join(__dirname, '../fixtures/sample.cs');
|
|
43
|
-
|
|
44
|
-
describe('C# parser', () => {
|
|
45
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
46
|
-
|
|
47
|
-
beforeAll(async () => {
|
|
48
|
-
result = await parseFile(fixturePath, CSHARP_SOURCE, 'src/sample.cs');
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
52
|
-
// Grammar may be unavailable on certain platforms (ABI mismatch or ESM conflict).
|
|
53
|
-
// Skip gracefully when no nodes were extracted.
|
|
54
|
-
if (result.nodes.length === 0) return;
|
|
55
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
59
|
-
if (result.nodes.length === 0) return;
|
|
60
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.dart');
|
|
8
|
-
|
|
9
|
-
describe('Dart parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.dart');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (no prebuilt native binding).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.kt');
|
|
8
|
-
|
|
9
|
-
describe('Kotlin parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.kt');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (no prebuilt native binding).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { getParser, isSupportedExtension } from '../../src/parsers/loader.js';
|
|
2
|
-
|
|
3
|
-
describe('isSupportedExtension', () => {
|
|
4
|
-
it('recognises .ts', () => expect(isSupportedExtension('.ts')).toBe(true));
|
|
5
|
-
it('recognises .py', () => expect(isSupportedExtension('.py')).toBe(true));
|
|
6
|
-
it('rejects .css', () => expect(isSupportedExtension('.css')).toBe(false));
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
describe('getParser', () => {
|
|
10
|
-
it('returns a parser for TypeScript', async () => {
|
|
11
|
-
const parser = await getParser('.ts');
|
|
12
|
-
expect(parser).toBeDefined();
|
|
13
|
-
});
|
|
14
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.php');
|
|
8
|
-
|
|
9
|
-
describe('PHP parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.php');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (ABI mismatch).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.py');
|
|
8
|
-
|
|
9
|
-
describe('Python parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.py');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts the class', () => {
|
|
18
|
-
expect(result.nodes.some(n => n.label === 'Class' && n.name === 'UserService')).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('extracts the method', () => {
|
|
22
|
-
expect(result.nodes.some(n => n.label === 'Method' && n.name === 'get_user')).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('extracts the function', () => {
|
|
26
|
-
expect(result.nodes.some(n => n.label === 'Function' && n.name === 'helper_fn')).toBe(true);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('extracts IMPORTS edge for os.path', () => {
|
|
30
|
-
expect(result.edges.some(e => e.relation === 'IMPORTS')).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.rb');
|
|
8
|
-
|
|
9
|
-
describe('Ruby parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.rb');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (ABI mismatch).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('extracts IMPORTS edges (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.edges.some(e => e.relation === 'IMPORTS')).toBe(true);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
30
|
-
if (result.nodes.length === 0) return;
|
|
31
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.swift');
|
|
8
|
-
|
|
9
|
-
describe('Swift parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.swift');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (ABI mismatch).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.ts');
|
|
8
|
-
|
|
9
|
-
describe('TypeScript parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.ts');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts the interface node', () => {
|
|
18
|
-
expect(result.nodes.some(n => n.label === 'Interface' && n.name === 'UserService')).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('extracts the class node', () => {
|
|
22
|
-
expect(result.nodes.some(n => n.label === 'Class' && n.name === 'UserServiceImpl')).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('extracts the function node', () => {
|
|
26
|
-
expect(result.nodes.some(n => n.label === 'Function' && n.name === 'helperFn')).toBe(true);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('extracts the method node', () => {
|
|
30
|
-
expect(result.nodes.some(n => n.label === 'Method' && n.name === 'getUser')).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('extracts the IMPLEMENTS edge', () => {
|
|
34
|
-
expect(result.edges.some(e => e.relation === 'IMPLEMENTS')).toBe(true);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('extracts the IMPORTS edge for fs/promises', () => {
|
|
38
|
-
expect(result.edges.some(e => e.relation === 'IMPORTS' && e.targetId.includes('fs'))).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('marks exported symbols', () => {
|
|
42
|
-
const cls = result.nodes.find(n => n.name === 'UserServiceImpl');
|
|
43
|
-
expect(cls?.isExported).toBe(true);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { parseFile } from '../../src/parsers/loader.js';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixturePath = join(__dirname, '../fixtures/sample.vue');
|
|
8
|
-
|
|
9
|
-
describe('Vue parser', () => {
|
|
10
|
-
let result: Awaited<ReturnType<typeof parseFile>>;
|
|
11
|
-
|
|
12
|
-
beforeAll(async () => {
|
|
13
|
-
const source = readFileSync(fixturePath, 'utf-8');
|
|
14
|
-
result = await parseFile(fixturePath, source, 'src/sample.vue');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('extracts at least one symbol node (skipped if grammar unavailable)', () => {
|
|
18
|
-
// Grammar may be unavailable on certain platforms (ABI mismatch).
|
|
19
|
-
// Skip gracefully when no nodes were extracted.
|
|
20
|
-
if (result.nodes.length === 0) return;
|
|
21
|
-
expect(result.nodes.length).toBeGreaterThanOrEqual(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('produces no fatal parse errors (skipped if grammar unavailable)', () => {
|
|
25
|
-
if (result.nodes.length === 0) return;
|
|
26
|
-
expect(result.parseErrors).toHaveLength(0);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { vi } from 'vitest';
|
|
2
|
-
import type { PipelineContext } from '../../src/pipeline/types.js';
|
|
3
|
-
import { godNodesPhase } from '../../src/pipeline/phases/god-nodes.js';
|
|
4
|
-
import { suggestPhase } from '../../src/pipeline/phases/suggest.js';
|
|
5
|
-
|
|
6
|
-
describe('god-nodes phase', () => {
|
|
7
|
-
it('returns top nodes by degree, excluding File/Folder nodes', async () => {
|
|
8
|
-
const ctx = { onProgress: vi.fn() } as unknown as PipelineContext;
|
|
9
|
-
const deps = new Map<string, unknown>();
|
|
10
|
-
deps.set('cross-file', {
|
|
11
|
-
resolvedEdges: [
|
|
12
|
-
{ id: 'e1', sourceId: 'cls_a', targetId: 'fn_b', relation: 'CALLS', confidence: 'EXTRACTED', confidenceScore: 1.0 },
|
|
13
|
-
{ id: 'e2', sourceId: 'cls_a', targetId: 'fn_c', relation: 'CALLS', confidence: 'EXTRACTED', confidenceScore: 1.0 },
|
|
14
|
-
]
|
|
15
|
-
});
|
|
16
|
-
deps.set('parse', {
|
|
17
|
-
symbolNodes: [
|
|
18
|
-
{ id: 'cls_a', label: 'Class', name: 'A', normLabel: 'a', isExported: true },
|
|
19
|
-
{ id: 'fn_b', label: 'Function', name: 'b', normLabel: 'b', isExported: false },
|
|
20
|
-
{ id: 'fn_c', label: 'Function', name: 'c', normLabel: 'c', isExported: false },
|
|
21
|
-
{ id: 'file_x', label: 'File', name: 'x.ts', normLabel: 'x.ts', isExported: false },
|
|
22
|
-
],
|
|
23
|
-
allEdges: []
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const result = await godNodesPhase.execute(ctx, deps) as { godNodes: unknown[] };
|
|
27
|
-
const ids = result.godNodes.map((n: any) => n.id);
|
|
28
|
-
expect(ids).toContain('cls_a');
|
|
29
|
-
expect(ids).not.toContain('file_x');
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
describe('suggest phase', () => {
|
|
34
|
-
it('returns at least one signal type', async () => {
|
|
35
|
-
const ctx = { onProgress: vi.fn() } as unknown as PipelineContext;
|
|
36
|
-
const deps = new Map<string, unknown>();
|
|
37
|
-
|
|
38
|
-
deps.set('parse', {
|
|
39
|
-
symbolNodes: [
|
|
40
|
-
{ id: 'n1', label: 'Class', name: 'A', normLabel: 'a', isExported: false },
|
|
41
|
-
{ id: 'n2', label: 'Class', name: 'B', normLabel: 'b', isExported: false },
|
|
42
|
-
],
|
|
43
|
-
allEdges: [{
|
|
44
|
-
id: 'e1', sourceId: 'n1', targetId: 'n2',
|
|
45
|
-
relation: 'CALLS', confidence: 'AMBIGUOUS', confidenceScore: 0.2
|
|
46
|
-
}]
|
|
47
|
-
});
|
|
48
|
-
deps.set('cross-file', { resolvedEdges: [] });
|
|
49
|
-
deps.set('mro', { mroEdges: [] });
|
|
50
|
-
deps.set('communities', { memberships: new Map(), communityLabels: new Map() });
|
|
51
|
-
deps.set('god-nodes', { godNodes: [] });
|
|
52
|
-
deps.set('surprises', { surprises: [] });
|
|
53
|
-
|
|
54
|
-
const result = await suggestPhase.execute(ctx, deps) as { questions: unknown[] };
|
|
55
|
-
expect(result.questions.length).toBeGreaterThan(0);
|
|
56
|
-
expect((result.questions[0] as any).type).toBe('ambiguous_edge');
|
|
57
|
-
});
|
|
58
|
-
});
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { assessCorpus, type CorpusAssessment } from '../../../src/pipeline/phases/scan.js';
|
|
3
|
-
|
|
4
|
-
describe('assessCorpus', () => {
|
|
5
|
-
it('warns when corpus is too small (< 50K estimated words)', () => {
|
|
6
|
-
const result = assessCorpus({ fileCount: 3, totalBytes: 5_000 });
|
|
7
|
-
expect(result.warning).toContain('too small');
|
|
8
|
-
expect(result.level).toBe('info');
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('warns when corpus is too large (> 500K estimated words)', () => {
|
|
12
|
-
const result = assessCorpus({ fileCount: 10, totalBytes: 4_000_000 });
|
|
13
|
-
expect(result.warning).toContain('large');
|
|
14
|
-
expect(result.level).toBe('warn');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('warns when file count is high (> 200 files)', () => {
|
|
18
|
-
const result = assessCorpus({ fileCount: 250, totalBytes: 2_000_000 });
|
|
19
|
-
expect(result.level).toBe('warn');
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('returns ok for typical corpus', () => {
|
|
23
|
-
const result = assessCorpus({ fileCount: 40, totalBytes: 400_000 });
|
|
24
|
-
expect(result.level).toBe('ok');
|
|
25
|
-
});
|
|
26
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { makeEvidence, mergeEvidence } from '../../../src/pipeline/phases/evidence.js';
|
|
3
|
-
|
|
4
|
-
describe('makeEvidence', () => {
|
|
5
|
-
it('creates an evidence entry', () => {
|
|
6
|
-
const e = makeEvidence('import', 0.9, 'direct import');
|
|
7
|
-
expect(e.kind).toBe('import');
|
|
8
|
-
expect(e.weight).toBe(0.9);
|
|
9
|
-
expect(e.note).toBe('direct import');
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it('clamps weight to 0-1', () => {
|
|
13
|
-
expect(makeEvidence('x', 2.0).weight).toBe(1.0);
|
|
14
|
-
expect(makeEvidence('x', -0.5).weight).toBe(0.0);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('omits note when not provided', () => {
|
|
18
|
-
const e = makeEvidence('call', 0.5);
|
|
19
|
-
expect(e.note).toBeUndefined();
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
describe('mergeEvidence', () => {
|
|
24
|
-
it('appends to existing evidence', () => {
|
|
25
|
-
const existing = [makeEvidence('a', 0.5)];
|
|
26
|
-
const merged = mergeEvidence(existing, makeEvidence('b', 0.8));
|
|
27
|
-
expect(merged).toHaveLength(2);
|
|
28
|
-
expect(merged[1].kind).toBe('b');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('handles undefined existing', () => {
|
|
32
|
-
const merged = mergeEvidence(undefined, makeEvidence('c', 0.3));
|
|
33
|
-
expect(merged).toHaveLength(1);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('does not mutate the original array', () => {
|
|
37
|
-
const existing = [makeEvidence('a', 0.5)];
|
|
38
|
-
mergeEvidence(existing, makeEvidence('b', 0.8));
|
|
39
|
-
expect(existing).toHaveLength(1);
|
|
40
|
-
});
|
|
41
|
-
});
|