@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,58 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { isUrl, buildWhisperPrompt, VIDEO_EXTENSIONS } from '../../ingest/transcribe.js';
|
|
3
|
-
|
|
4
|
-
describe('isUrl', () => {
|
|
5
|
-
it('returns true for http:// URLs', () => {
|
|
6
|
-
expect(isUrl('http://example.com/video.mp4')).toBe(true);
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
it('returns true for https:// URLs', () => {
|
|
10
|
-
expect(isUrl('https://www.youtube.com/watch?v=abc')).toBe(true);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('returns true for www. prefixed strings', () => {
|
|
14
|
-
expect(isUrl('www.youtube.com/watch?v=abc')).toBe(true);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('returns false for local file paths', () => {
|
|
18
|
-
expect(isUrl('/path/to/video.mp4')).toBe(false);
|
|
19
|
-
expect(isUrl('./relative/video.mp4')).toBe(false);
|
|
20
|
-
expect(isUrl('video.mp4')).toBe(false);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
describe('buildWhisperPrompt', () => {
|
|
25
|
-
it('returns fallback prompt for empty labels', () => {
|
|
26
|
-
const prompt = buildWhisperPrompt([]);
|
|
27
|
-
expect(prompt).toContain('punctuation');
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('includes top 5 labels in the prompt', () => {
|
|
31
|
-
const labels = ['React', 'TypeScript', 'GraphQL', 'Node.js', 'Webpack', 'Babel'];
|
|
32
|
-
const prompt = buildWhisperPrompt(labels);
|
|
33
|
-
expect(prompt).toContain('React');
|
|
34
|
-
expect(prompt).toContain('TypeScript');
|
|
35
|
-
expect(prompt).toContain('GraphQL');
|
|
36
|
-
// 6th label should not appear
|
|
37
|
-
expect(prompt).not.toContain('Babel');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('produces a domain hint in the expected format', () => {
|
|
41
|
-
const prompt = buildWhisperPrompt(['Auth', 'JWT']);
|
|
42
|
-
expect(prompt).toMatch(/Technical discussion about Auth, JWT/);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
describe('VIDEO_EXTENSIONS', () => {
|
|
47
|
-
it('includes common video extensions', () => {
|
|
48
|
-
expect(VIDEO_EXTENSIONS.has('.mp4')).toBe(true);
|
|
49
|
-
expect(VIDEO_EXTENSIONS.has('.mov')).toBe(true);
|
|
50
|
-
expect(VIDEO_EXTENSIONS.has('.webm')).toBe(true);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('includes common audio extensions', () => {
|
|
54
|
-
expect(VIDEO_EXTENSIONS.has('.mp3')).toBe(true);
|
|
55
|
-
expect(VIDEO_EXTENSIONS.has('.wav')).toBe(true);
|
|
56
|
-
expect(VIDEO_EXTENSIONS.has('.m4a')).toBe(true);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { ingestUrl, classifyUrlType } from '../../ingest/url-ingest.js';
|
|
3
|
-
|
|
4
|
-
describe('classifyUrlType', () => {
|
|
5
|
-
it('detects arxiv', () => {
|
|
6
|
-
expect(classifyUrlType('https://arxiv.org/abs/2401.00001')).toBe('paper');
|
|
7
|
-
});
|
|
8
|
-
it('detects github', () => {
|
|
9
|
-
expect(classifyUrlType('https://github.com/user/repo')).toBe('github');
|
|
10
|
-
});
|
|
11
|
-
it('detects youtube', () => {
|
|
12
|
-
expect(classifyUrlType('https://www.youtube.com/watch?v=abc')).toBe('video');
|
|
13
|
-
});
|
|
14
|
-
it('defaults to webpage', () => {
|
|
15
|
-
expect(classifyUrlType('https://example.com/article')).toBe('webpage');
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
describe('ingestUrl', () => {
|
|
20
|
-
it('returns IngestResult with id, type, and url', async () => {
|
|
21
|
-
const mockFetch = vi.fn().mockResolvedValue({
|
|
22
|
-
ok: true,
|
|
23
|
-
text: async () => '<html><title>Test Page</title><body>Hello world content here</body></html>',
|
|
24
|
-
headers: { get: (_h: string) => 'text/html' },
|
|
25
|
-
});
|
|
26
|
-
const result = await ingestUrl('https://example.com/page', { fetch: mockFetch as any });
|
|
27
|
-
expect(result.url).toBe('https://example.com/page');
|
|
28
|
-
expect(result.type).toBe('webpage');
|
|
29
|
-
expect(typeof result.id).toBe('string');
|
|
30
|
-
expect(result.title).toBeTruthy();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('blocks private URLs', async () => {
|
|
34
|
-
await expect(ingestUrl('http://localhost/admin', {})).rejects.toThrow();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('blocks oversized responses', async () => {
|
|
38
|
-
const bigBody = 'x'.repeat(11 * 1024 * 1024);
|
|
39
|
-
const mockFetch = vi.fn().mockResolvedValue({
|
|
40
|
-
ok: true,
|
|
41
|
-
text: async () => bigBody,
|
|
42
|
-
headers: { get: (h: string) => h === 'content-length' ? String(bigBody.length) : 'text/html' },
|
|
43
|
-
});
|
|
44
|
-
await expect(
|
|
45
|
-
ingestUrl('https://example.com/big', { fetch: mockFetch as any, maxBytes: 10 * 1024 * 1024 })
|
|
46
|
-
).rejects.toThrow(/too large/i);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { repoContextResource } from '../../mcp-resources/repo-context-resource.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(): 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
|
-
CREATE TABLE index_meta (key TEXT PRIMARY KEY, value TEXT);
|
|
11
|
-
INSERT INTO nodes VALUES ('n1', 'UserService', 'Class', '/app/user.ts', 1, 50, 1);
|
|
12
|
-
INSERT INTO index_meta VALUES ('indexed_at', '2026-05-01T00:00:00.000Z');
|
|
13
|
-
`);
|
|
14
|
-
return db;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
describe('repoContextResource', () => {
|
|
18
|
-
it('has uri and handler', () => {
|
|
19
|
-
expect(repoContextResource.uri).toBeDefined();
|
|
20
|
-
expect(typeof repoContextResource.handler).toBe('function');
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('handler returns node count, edge count, indexedAt', () => {
|
|
24
|
-
const db = makeDb();
|
|
25
|
-
const result = repoContextResource.handler(db) as any;
|
|
26
|
-
expect(result.nodeCount).toBe(1);
|
|
27
|
-
expect(result.edgeCount).toBe(0);
|
|
28
|
-
expect(result.indexedAt).toBe('2026-05-01T00:00:00.000Z');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('result includes available tools list', () => {
|
|
32
|
-
const db = makeDb();
|
|
33
|
-
const result = repoContextResource.handler(db) as any;
|
|
34
|
-
expect(Array.isArray(result.availableTools)).toBe(true);
|
|
35
|
-
expect(result.availableTools.length).toBeGreaterThan(0);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { reposResource } from '../../mcp-resources/repos-resource.js';
|
|
4
|
-
import { namedClusterResource } from '../../mcp-resources/named-cluster-resource.js';
|
|
5
|
-
import { namedProcessResource } from '../../mcp-resources/named-process-resource.js';
|
|
6
|
-
|
|
7
|
-
function makeDb(): Database.Database {
|
|
8
|
-
const db = new Database(':memory:');
|
|
9
|
-
db.exec(`
|
|
10
|
-
CREATE TABLE nodes (id TEXT PRIMARY KEY, name TEXT, label TEXT, file_path TEXT, start_line INTEGER, end_line INTEGER, community_id INTEGER);
|
|
11
|
-
CREATE TABLE communities (id INTEGER PRIMARY KEY, label TEXT);
|
|
12
|
-
INSERT INTO communities VALUES (1, 'auth-cluster');
|
|
13
|
-
INSERT INTO nodes VALUES ('n1', 'UserService', 'Class', '/app/user.ts', 1, 50, 1);
|
|
14
|
-
INSERT INTO nodes VALUES ('n2', 'main', 'Function', '/app/main.ts', 1, 20, null);
|
|
15
|
-
`);
|
|
16
|
-
return db;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
describe('reposResource', () => {
|
|
20
|
-
it('has uri and handler defined', () => {
|
|
21
|
-
expect(reposResource.uri).toBeDefined();
|
|
22
|
-
expect(typeof reposResource.handler).toBe('function');
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('handler returns an array', () => {
|
|
26
|
-
const db = makeDb();
|
|
27
|
-
const result = reposResource.handler(db);
|
|
28
|
-
expect(Array.isArray(result)).toBe(true);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
describe('namedClusterResource', () => {
|
|
33
|
-
it('has uri and handler defined', () => {
|
|
34
|
-
expect(namedClusterResource.uri).toBeDefined();
|
|
35
|
-
expect(typeof namedClusterResource.handler).toBe('function');
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('handler returns cluster data for known label', () => {
|
|
39
|
-
const db = makeDb();
|
|
40
|
-
const result = namedClusterResource.handler(db, { name: 'auth-cluster' }) as any;
|
|
41
|
-
expect(result).not.toBeNull();
|
|
42
|
-
expect(result.label).toBe('auth-cluster');
|
|
43
|
-
expect(Array.isArray(result.members)).toBe(true);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('returns null for unknown cluster', () => {
|
|
47
|
-
const db = makeDb();
|
|
48
|
-
const result = namedClusterResource.handler(db, { name: 'nonexistent' });
|
|
49
|
-
expect(result).toBeNull();
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
describe('namedProcessResource', () => {
|
|
54
|
-
it('has uri and handler defined', () => {
|
|
55
|
-
expect(namedProcessResource.uri).toBeDefined();
|
|
56
|
-
expect(typeof namedProcessResource.handler).toBe('function');
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('handler returns node for known name', () => {
|
|
60
|
-
const db = makeDb();
|
|
61
|
-
const result = namedProcessResource.handler(db, { name: 'UserService' }) as any;
|
|
62
|
-
expect(result).not.toBeNull();
|
|
63
|
-
expect(result.name).toBe('UserService');
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it('returns null for unknown name', () => {
|
|
67
|
-
const db = makeDb();
|
|
68
|
-
const result = namedProcessResource.handler(db, { name: 'nonexistent' });
|
|
69
|
-
expect(result).toBeNull();
|
|
70
|
-
});
|
|
71
|
-
});
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { wikiResource, wikiPageResource } from '../../mcp-resources/wiki-resource.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(): Database.Database {
|
|
6
|
-
const db = new Database(':memory:');
|
|
7
|
-
db.exec(`
|
|
8
|
-
CREATE TABLE wiki_pages (
|
|
9
|
-
community_id TEXT PRIMARY KEY,
|
|
10
|
-
content TEXT NOT NULL,
|
|
11
|
-
generated_at TEXT NOT NULL
|
|
12
|
-
);
|
|
13
|
-
INSERT INTO wiki_pages VALUES ('1', '# Auth cluster\nHandles user authentication.', '2026-05-01T00:00:00Z');
|
|
14
|
-
INSERT INTO wiki_pages VALUES ('2', '# Data cluster\nManages database access.', '2026-05-01T00:00:00Z');
|
|
15
|
-
`);
|
|
16
|
-
return db;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
describe('wikiResource (list)', () => {
|
|
20
|
-
it('has correct URI and name', () => {
|
|
21
|
-
expect(wikiResource.uri).toBe('monograph://wiki');
|
|
22
|
-
expect(wikiResource.name).toBe('wiki');
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('handler returns all wiki pages', () => {
|
|
26
|
-
const db = makeDb();
|
|
27
|
-
const result = wikiResource.handler(db) as any[];
|
|
28
|
-
expect(Array.isArray(result)).toBe(true);
|
|
29
|
-
expect(result.length).toBe(2);
|
|
30
|
-
expect(result[0].communityId).toBeDefined();
|
|
31
|
-
expect(result[0].content).toBeDefined();
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
describe('wikiPageResource (single)', () => {
|
|
36
|
-
it('has URI with {communityId} template', () => {
|
|
37
|
-
expect(wikiPageResource.uri).toContain('{communityId}');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('returns a single wiki page by communityId', () => {
|
|
41
|
-
const db = makeDb();
|
|
42
|
-
const result = wikiPageResource.handler(db, { communityId: '1' }) as any;
|
|
43
|
-
expect(result).not.toBeNull();
|
|
44
|
-
expect(result.content).toContain('Auth cluster');
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('returns null for unknown communityId', () => {
|
|
48
|
-
const db = makeDb();
|
|
49
|
-
const result = wikiPageResource.handler(db, { communityId: '999' });
|
|
50
|
-
expect(result).toBeNull();
|
|
51
|
-
});
|
|
52
|
-
});
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { explainNode } from '../../mcp-tools/explain.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(): 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, norm_label TEXT, is_exported INTEGER, language TEXT, properties TEXT);
|
|
9
|
-
CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT, target_id TEXT, relation TEXT, confidence TEXT, confidence_score REAL);
|
|
10
|
-
INSERT INTO nodes VALUES ('n1', 'UserService', 'Class', '/app/user.ts', 1, 50, 1, 'userservice', 1, 'typescript', null);
|
|
11
|
-
INSERT INTO nodes VALUES ('n2', 'getUser', 'Function', '/app/user.ts', 5, 15, 1, 'getuser', 1, 'typescript', null);
|
|
12
|
-
INSERT INTO nodes VALUES ('n3', 'Database', 'Class', '/app/db.ts', 1, 100, 2, 'database', 1, 'typescript', null);
|
|
13
|
-
INSERT INTO edges VALUES ('e1', 'n1', 'n2', 'HAS_METHOD', 'EXTRACTED', 1.0);
|
|
14
|
-
INSERT INTO edges VALUES ('e2', 'n2', 'n3', 'CALLS', 'EXTRACTED', 1.0);
|
|
15
|
-
`);
|
|
16
|
-
return db;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
describe('explainNode', () => {
|
|
20
|
-
it('returns an explanation string for a known node', () => {
|
|
21
|
-
const db = makeDb();
|
|
22
|
-
const result = explainNode(db, 'UserService');
|
|
23
|
-
expect(result.explanation).toBeDefined();
|
|
24
|
-
expect(result.explanation).toContain('UserService');
|
|
25
|
-
expect(result.explanation).toContain('Class');
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('explanation mentions outbound connections', () => {
|
|
29
|
-
const db = makeDb();
|
|
30
|
-
const result = explainNode(db, 'UserService');
|
|
31
|
-
expect(result.explanation).toContain('getUser');
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('returns null explanation for unknown node', () => {
|
|
35
|
-
const db = makeDb();
|
|
36
|
-
const result = explainNode(db, 'NonExistent');
|
|
37
|
-
expect(result.node).toBeNull();
|
|
38
|
-
expect(result.explanation).toBeNull();
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('includes connection count in summary', () => {
|
|
42
|
-
const db = makeDb();
|
|
43
|
-
const result = explainNode(db, 'getUser');
|
|
44
|
-
expect(result.connectionCount).toBeGreaterThanOrEqual(0);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { queryGraph as queryGraphMcp } from '../../mcp-tools/graph-query.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(): 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, norm_label TEXT, is_exported INTEGER, language TEXT, properties TEXT);
|
|
9
|
-
CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT, target_id TEXT, relation TEXT, confidence TEXT, confidence_score REAL);
|
|
10
|
-
INSERT INTO nodes VALUES ('n1', 'AuthService', 'Class', '/app/auth.ts', 1, 50, 1, 'authservice', 1, 'typescript', null);
|
|
11
|
-
INSERT INTO nodes VALUES ('n2', 'login', 'Function', '/app/auth.ts', 5, 20, 1, 'login', 1, 'typescript', null);
|
|
12
|
-
INSERT INTO nodes VALUES ('n3', 'Database', 'Class', '/app/db.ts', 1, 100, 2, 'database', 1, 'typescript', null);
|
|
13
|
-
INSERT INTO edges VALUES ('e1', 'n1', 'n2', 'HAS_METHOD', 'EXTRACTED', 1.0);
|
|
14
|
-
INSERT INTO edges VALUES ('e2', 'n2', 'n3', 'CALLS', 'EXTRACTED', 1.0);
|
|
15
|
-
`);
|
|
16
|
-
return db;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
describe('queryGraphMcp', () => {
|
|
20
|
-
it('returns nodes matching query string', () => {
|
|
21
|
-
const db = makeDb();
|
|
22
|
-
const result = queryGraphMcp(db, { query: 'auth', mode: 'bfs' });
|
|
23
|
-
expect(result.nodes.length).toBeGreaterThan(0);
|
|
24
|
-
expect(result.nodes.some(n => n.name === 'AuthService')).toBe(true);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('respects tokenBudget — stops when estimate exceeded', () => {
|
|
28
|
-
const db = makeDb();
|
|
29
|
-
const result = queryGraphMcp(db, { query: 'auth', mode: 'bfs', tokenBudget: 10 });
|
|
30
|
-
// Very small budget — should return minimal results
|
|
31
|
-
expect(result.truncated).toBe(true);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('works with dfs mode', () => {
|
|
35
|
-
const db = makeDb();
|
|
36
|
-
const result = queryGraphMcp(db, { query: 'auth', mode: 'dfs' });
|
|
37
|
-
expect(result.nodes.length).toBeGreaterThan(0);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('result has mode in metadata', () => {
|
|
41
|
-
const db = makeDb();
|
|
42
|
-
const result = queryGraphMcp(db, { query: 'login', mode: 'bfs' });
|
|
43
|
-
expect(result.mode).toBe('bfs');
|
|
44
|
-
});
|
|
45
|
-
});
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
|
|
3
|
-
describe('group-sync tool exports', () => {
|
|
4
|
-
it('runGroupSync is exported from mcp-tools index', async () => {
|
|
5
|
-
const mod = await import('../../mcp-tools/index.js');
|
|
6
|
-
expect(typeof (mod as any).runGroupSync).toBe('function');
|
|
7
|
-
});
|
|
8
|
-
});
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { monographImpact } from '../../mcp-tools/impact.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(): Database.Database {
|
|
6
|
-
const db = new Database(':memory:');
|
|
7
|
-
db.exec(`
|
|
8
|
-
CREATE TABLE nodes (id TEXT PRIMARY KEY, label TEXT NOT NULL, name TEXT NOT NULL,
|
|
9
|
-
norm_label TEXT, file_path TEXT, start_line INTEGER, end_line INTEGER,
|
|
10
|
-
community_id INTEGER, is_exported INTEGER DEFAULT 0, language TEXT, properties TEXT);
|
|
11
|
-
CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT NOT NULL, target_id TEXT NOT NULL,
|
|
12
|
-
relation TEXT NOT NULL, confidence TEXT DEFAULT 'EXTRACTED', confidence_score REAL DEFAULT 1.0,
|
|
13
|
-
properties TEXT);
|
|
14
|
-
`);
|
|
15
|
-
db.prepare(`INSERT INTO nodes VALUES ('n1','Function','doA',null,'/a.ts',1,5,null,1,null,null)`).run();
|
|
16
|
-
db.prepare(`INSERT INTO nodes VALUES ('n2','Function','doB',null,'/b.ts',1,3,null,1,null,null)`).run();
|
|
17
|
-
db.prepare(`INSERT INTO nodes VALUES ('n3','Function','doC',null,'/c.ts',1,3,null,1,null,null)`).run();
|
|
18
|
-
db.prepare(`INSERT INTO edges VALUES ('e1','n2','n1','CALLS','EXTRACTED',0.9,null)`).run();
|
|
19
|
-
db.prepare(`INSERT INTO edges VALUES ('e2','n3','n1','CALLS','AMBIGUOUS',0.2,null)`).run();
|
|
20
|
-
return db;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
describe('monographImpact filtering', () => {
|
|
24
|
-
it('minConfidenceScore filters low-confidence callers', async () => {
|
|
25
|
-
const db = makeDb();
|
|
26
|
-
const result = await monographImpact(db, 'n1', { minConfidenceScore: 0.5 });
|
|
27
|
-
const callerIds = result.directCallers.map(n => n.id);
|
|
28
|
-
expect(callerIds).toContain('n2');
|
|
29
|
-
expect(callerIds).not.toContain('n3');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('without filter returns all callers', async () => {
|
|
33
|
-
const db = makeDb();
|
|
34
|
-
const result = await monographImpact(db, 'n1', {});
|
|
35
|
-
const callerIds = result.directCallers.map(n => n.id);
|
|
36
|
-
expect(callerIds).toContain('n2');
|
|
37
|
-
expect(callerIds).toContain('n3');
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('relationTypes restricts edge traversal', async () => {
|
|
41
|
-
const db = makeDb();
|
|
42
|
-
db.prepare(`INSERT INTO edges VALUES ('e3','n3','n1','IMPORTS','EXTRACTED',0.9,null)`).run();
|
|
43
|
-
const result = await monographImpact(db, 'n1', { relationTypes: ['IMPORTS'] });
|
|
44
|
-
const callerIds = result.directCallers.map(n => n.id);
|
|
45
|
-
expect(callerIds).toContain('n3');
|
|
46
|
-
expect(callerIds).not.toContain('n2');
|
|
47
|
-
});
|
|
48
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { computeRiskLevel, type RiskLevel } from '../../mcp-tools/impact.js';
|
|
3
|
-
|
|
4
|
-
describe('computeRiskLevel', () => {
|
|
5
|
-
it('returns CRITICAL for score > 0.75', () => {
|
|
6
|
-
expect(computeRiskLevel(0.9)).toBe('CRITICAL');
|
|
7
|
-
expect(computeRiskLevel(1.0)).toBe('CRITICAL');
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
it('returns HIGH for score 0.5-0.75', () => {
|
|
11
|
-
expect(computeRiskLevel(0.6)).toBe('HIGH');
|
|
12
|
-
expect(computeRiskLevel(0.75)).toBe('HIGH');
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('returns MEDIUM for score 0.25-0.5', () => {
|
|
16
|
-
expect(computeRiskLevel(0.3)).toBe('MEDIUM');
|
|
17
|
-
expect(computeRiskLevel(0.5)).toBe('MEDIUM');
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it('returns LOW for score < 0.25', () => {
|
|
21
|
-
expect(computeRiskLevel(0)).toBe('LOW');
|
|
22
|
-
expect(computeRiskLevel(0.24)).toBe('LOW');
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { listReposTool } from '../../mcp-tools/list-repos.js';
|
|
3
|
-
|
|
4
|
-
describe('listReposTool', () => {
|
|
5
|
-
it('has correct name', () => {
|
|
6
|
-
expect(listReposTool.name).toBe('monograph_list_repos');
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
it('has description', () => {
|
|
10
|
-
expect(typeof listReposTool.description).toBe('string');
|
|
11
|
-
expect(listReposTool.description.length).toBeGreaterThan(5);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('has inputSchema', () => {
|
|
15
|
-
expect(listReposTool.inputSchema).toBeDefined();
|
|
16
|
-
expect(listReposTool.inputSchema.type).toBe('object');
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it('handler returns repos array', async () => {
|
|
20
|
-
const result = await listReposTool.handler({});
|
|
21
|
-
expect(result).toHaveProperty('repos');
|
|
22
|
-
expect(Array.isArray(result.repos)).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { getMonographNeighbors } from '../../mcp-tools/neighbors.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(): 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, norm_label TEXT, is_exported INTEGER, language TEXT, properties TEXT);
|
|
9
|
-
CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT, target_id TEXT, relation TEXT, confidence TEXT, confidence_score REAL);
|
|
10
|
-
INSERT INTO nodes VALUES ('n1', 'UserService', 'Class', '/app/user.ts', 1, 50, 1, 'userservice', 1, 'typescript', null);
|
|
11
|
-
INSERT INTO nodes VALUES ('n2', 'getUser', 'Function', '/app/user.ts', 5, 15, 1, 'getuser', 1, 'typescript', null);
|
|
12
|
-
INSERT INTO nodes VALUES ('n3', 'Database', 'Class', '/app/db.ts', 1, 100, 2, 'database', 1, 'typescript', null);
|
|
13
|
-
INSERT INTO edges VALUES ('e1', 'n1', 'n2', 'HAS_METHOD', 'EXTRACTED', 1.0);
|
|
14
|
-
INSERT INTO edges VALUES ('e2', 'n1', 'n3', 'CALLS', 'INFERRED', 0.7);
|
|
15
|
-
`);
|
|
16
|
-
return db;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
describe('getMonographNeighbors', () => {
|
|
20
|
-
it('returns outbound neighbors with edge details', () => {
|
|
21
|
-
const db = makeDb();
|
|
22
|
-
const result = getMonographNeighbors(db, { name: 'UserService' });
|
|
23
|
-
expect(result.node).not.toBeNull();
|
|
24
|
-
expect(result.neighbors.length).toBe(2);
|
|
25
|
-
const rels = result.neighbors.map(n => n.relation);
|
|
26
|
-
expect(rels).toContain('HAS_METHOD');
|
|
27
|
-
expect(rels).toContain('CALLS');
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('can filter by relation type', () => {
|
|
31
|
-
const db = makeDb();
|
|
32
|
-
const result = getMonographNeighbors(db, { name: 'UserService', relationFilter: 'CALLS' });
|
|
33
|
-
expect(result.neighbors.every(n => n.relation === 'CALLS')).toBe(true);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('returns null node for unknown symbol', () => {
|
|
37
|
-
const db = makeDb();
|
|
38
|
-
const result = getMonographNeighbors(db, { name: 'NonExistent' });
|
|
39
|
-
expect(result.node).toBeNull();
|
|
40
|
-
expect(result.neighbors).toEqual([]);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('includes inbound neighbors', () => {
|
|
44
|
-
const db = makeDb();
|
|
45
|
-
const result = getMonographNeighbors(db, { name: 'getUser', includeInbound: true });
|
|
46
|
-
expect(result.neighbors.some(n => n.direction === 'inbound')).toBe(true);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { monographQueryTool } from '../../mcp-tools/query.js';
|
|
4
|
-
|
|
5
|
-
function makeDb(): Database.Database {
|
|
6
|
-
const db = new Database(':memory:');
|
|
7
|
-
db.exec(`
|
|
8
|
-
CREATE TABLE nodes (id TEXT PRIMARY KEY, label TEXT NOT NULL, name TEXT NOT NULL,
|
|
9
|
-
norm_label TEXT, file_path TEXT, start_line INTEGER, end_line INTEGER,
|
|
10
|
-
community_id INTEGER, is_exported INTEGER DEFAULT 0, language TEXT, properties TEXT);
|
|
11
|
-
CREATE TABLE edges (id TEXT PRIMARY KEY, source_id TEXT NOT NULL, target_id TEXT NOT NULL,
|
|
12
|
-
relation TEXT NOT NULL, confidence TEXT DEFAULT 'EXTRACTED', confidence_score REAL DEFAULT 1.0,
|
|
13
|
-
properties TEXT);
|
|
14
|
-
`);
|
|
15
|
-
db.prepare(`INSERT INTO nodes VALUES ('n1','Process','PaymentFlow',null,'/pay.ts',1,20,1,1,null,null)`).run();
|
|
16
|
-
db.prepare(`INSERT INTO nodes VALUES ('n2','Function','processPayment',null,'/pay.ts',5,15,1,1,null,null)`).run();
|
|
17
|
-
return db;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
describe('monographQueryTool', () => {
|
|
21
|
-
it('has correct name', () => {
|
|
22
|
-
expect(monographQueryTool.name).toBe('monograph_query');
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('has query parameter in schema', () => {
|
|
26
|
-
expect(monographQueryTool.inputSchema.properties).toHaveProperty('query');
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('has repoPath parameter in schema', () => {
|
|
30
|
-
expect(monographQueryTool.inputSchema.properties).toHaveProperty('repoPath');
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('has includeProcesses parameter', () => {
|
|
34
|
-
expect(monographQueryTool.inputSchema.properties).toHaveProperty('includeProcesses');
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('returns results array when neither repoPath nor db provided', async () => {
|
|
38
|
-
const result = await monographQueryTool.handler({ query: 'payment' } as any);
|
|
39
|
-
expect(result).toHaveProperty('results');
|
|
40
|
-
expect(Array.isArray(result.results)).toBe(true);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { extractSymbolsForLanguage } from '../../parsers/language-parsers.js';
|
|
3
|
-
|
|
4
|
-
describe('Scala extraction', () => {
|
|
5
|
-
it('extracts object and class definitions', () => {
|
|
6
|
-
const src = `object PaymentService { def process(order: Order): Unit = {} }\nclass OrderRepo extends BaseRepo {}`;
|
|
7
|
-
const r = extractSymbolsForLanguage(src, '/pay.scala', 'scala');
|
|
8
|
-
const names = r.map(s => s.name);
|
|
9
|
-
expect(names).toContain('PaymentService');
|
|
10
|
-
expect(names).toContain('OrderRepo');
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
describe('Lua extraction', () => {
|
|
15
|
-
it('extracts function definitions', () => {
|
|
16
|
-
const src = `function greet(name)\n return "Hello " .. name\nend\nlocal function helper() end`;
|
|
17
|
-
const r = extractSymbolsForLanguage(src, '/util.lua', 'lua');
|
|
18
|
-
const names = r.map(s => s.name);
|
|
19
|
-
expect(names).toContain('greet');
|
|
20
|
-
expect(names).toContain('helper');
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
describe('Zig extraction', () => {
|
|
25
|
-
it('extracts pub fn declarations', () => {
|
|
26
|
-
const src = `pub fn allocate(size: usize) anyerror![]u8 {}\nfn helper() void {}`;
|
|
27
|
-
const r = extractSymbolsForLanguage(src, '/alloc.zig', 'zig');
|
|
28
|
-
const names = r.map(s => s.name);
|
|
29
|
-
expect(names).toContain('allocate');
|
|
30
|
-
expect(names).toContain('helper');
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
describe('PowerShell extraction', () => {
|
|
35
|
-
it('extracts function declarations', () => {
|
|
36
|
-
const src = `function Get-User { param($id) }\nfunction Set-Config { param($cfg) }`;
|
|
37
|
-
const r = extractSymbolsForLanguage(src, '/util.ps1', 'powershell');
|
|
38
|
-
const names = r.map(s => s.name);
|
|
39
|
-
expect(names).toContain('Get-User');
|
|
40
|
-
expect(names).toContain('Set-Config');
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
describe('Elixir extraction', () => {
|
|
45
|
-
it('extracts defmodule and def', () => {
|
|
46
|
-
const src = `defmodule PayApp.Payments do\n def process(order) do\n :ok\n end\nend`;
|
|
47
|
-
const r = extractSymbolsForLanguage(src, '/payments.ex', 'elixir');
|
|
48
|
-
const names = r.map(s => s.name);
|
|
49
|
-
expect(names).toContain('PayApp.Payments');
|
|
50
|
-
expect(names).toContain('process');
|
|
51
|
-
});
|
|
52
|
-
});
|