projscan 0.11.0 → 0.14.0
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 +57 -33
- package/dist/analyzers/crossPackageImportCheck.d.ts +13 -0
- package/dist/analyzers/crossPackageImportCheck.js +136 -0
- package/dist/analyzers/crossPackageImportCheck.js.map +1 -0
- package/dist/analyzers/cycleCheck.d.ts +12 -0
- package/dist/analyzers/cycleCheck.js +65 -0
- package/dist/analyzers/cycleCheck.js.map +1 -0
- package/dist/analyzers/unusedDependencyCheck.js +69 -17
- package/dist/analyzers/unusedDependencyCheck.js.map +1 -1
- package/dist/cli/_shared.d.ts +16 -0
- package/dist/cli/_shared.js +210 -0
- package/dist/cli/_shared.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +1 -0
- package/dist/cli/commands/analyze.js +87 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +1 -0
- package/dist/cli/commands/audit.js +53 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/badge.d.ts +1 -0
- package/dist/cli/commands/badge.js +45 -0
- package/dist/cli/commands/badge.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +1 -0
- package/dist/cli/commands/ci.js +57 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/coupling.d.ts +1 -0
- package/dist/cli/commands/coupling.js +83 -0
- package/dist/cli/commands/coupling.js.map +1 -0
- package/dist/cli/commands/coverage.d.ts +1 -0
- package/dist/cli/commands/coverage.js +63 -0
- package/dist/cli/commands/coverage.js.map +1 -0
- package/dist/cli/commands/dependencies.d.ts +1 -0
- package/dist/cli/commands/dependencies.js +46 -0
- package/dist/cli/commands/dependencies.js.map +1 -0
- package/dist/cli/commands/diagram.d.ts +1 -0
- package/dist/cli/commands/diagram.js +45 -0
- package/dist/cli/commands/diagram.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +1 -0
- package/dist/cli/commands/diff.js +70 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +1 -0
- package/dist/cli/commands/doctor.js +62 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +1 -0
- package/dist/cli/commands/explain.js +42 -0
- package/dist/cli/commands/explain.js.map +1 -0
- package/dist/cli/commands/explainIssue.d.ts +1 -0
- package/dist/cli/commands/explainIssue.js +49 -0
- package/dist/cli/commands/explainIssue.js.map +1 -0
- package/dist/cli/commands/file.d.ts +1 -0
- package/dist/cli/commands/file.js +45 -0
- package/dist/cli/commands/file.js.map +1 -0
- package/dist/cli/commands/fix.d.ts +1 -0
- package/dist/cli/commands/fix.js +70 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/fixSuggest.d.ts +1 -0
- package/dist/cli/commands/fixSuggest.js +71 -0
- package/dist/cli/commands/fixSuggest.js.map +1 -0
- package/dist/cli/commands/help.d.ts +1 -0
- package/dist/cli/commands/help.js +11 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/hotspots.d.ts +1 -0
- package/dist/cli/commands/hotspots.js +74 -0
- package/dist/cli/commands/hotspots.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +1 -0
- package/dist/cli/commands/mcp.js +21 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/outdated.d.ts +1 -0
- package/dist/cli/commands/outdated.js +51 -0
- package/dist/cli/commands/outdated.js.map +1 -0
- package/dist/cli/commands/prDiff.d.ts +1 -0
- package/dist/cli/commands/prDiff.js +59 -0
- package/dist/cli/commands/prDiff.js.map +1 -0
- package/dist/cli/commands/review.d.ts +1 -0
- package/dist/cli/commands/review.js +66 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/search.d.ts +1 -0
- package/dist/cli/commands/search.js +233 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/structure.d.ts +1 -0
- package/dist/cli/commands/structure.js +58 -0
- package/dist/cli/commands/structure.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +1 -0
- package/dist/cli/commands/upgrade.js +44 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/commands/workspaces.d.ts +1 -0
- package/dist/cli/commands/workspaces.js +35 -0
- package/dist/cli/commands/workspaces.js.map +1 -0
- package/dist/cli/index.js +51 -1416
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ast.d.ts +20 -0
- package/dist/core/ast.js +190 -0
- package/dist/core/ast.js.map +1 -1
- package/dist/core/auditRunner.d.ts +8 -0
- package/dist/core/auditRunner.js +50 -1
- package/dist/core/auditRunner.js.map +1 -1
- package/dist/core/codeGraph.d.ts +7 -1
- package/dist/core/codeGraph.js +2 -0
- package/dist/core/codeGraph.js.map +1 -1
- package/dist/core/couplingAnalyzer.d.ts +1 -1
- package/dist/core/couplingAnalyzer.js +3 -3
- package/dist/core/dependencyAnalyzer.d.ts +15 -1
- package/dist/core/dependencyAnalyzer.js +115 -18
- package/dist/core/dependencyAnalyzer.js.map +1 -1
- package/dist/core/explainIssue.d.ts +9 -0
- package/dist/core/explainIssue.js +106 -0
- package/dist/core/explainIssue.js.map +1 -0
- package/dist/core/fileInspector.js +12 -0
- package/dist/core/fileInspector.js.map +1 -1
- package/dist/core/fixSuggest.d.ts +41 -0
- package/dist/core/fixSuggest.js +327 -0
- package/dist/core/fixSuggest.js.map +1 -0
- package/dist/core/hotspotAnalyzer.js +2 -2
- package/dist/core/indexCache.js +5 -1
- package/dist/core/indexCache.js.map +1 -1
- package/dist/core/issueEngine.js +18 -0
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/languages/LanguageAdapter.d.ts +1 -1
- package/dist/core/languages/goAdapter.js +12 -5
- package/dist/core/languages/goAdapter.js.map +1 -1
- package/dist/core/languages/goCallSites.d.ts +20 -0
- package/dist/core/languages/goCallSites.js +42 -0
- package/dist/core/languages/goCallSites.js.map +1 -0
- package/dist/core/languages/goCyclomatic.d.ts +1 -1
- package/dist/core/languages/goCyclomatic.js +2 -2
- package/dist/core/languages/goExports.d.ts +1 -1
- package/dist/core/languages/goExports.js +1 -1
- package/dist/core/languages/goFunctions.d.ts +24 -0
- package/dist/core/languages/goFunctions.js +99 -0
- package/dist/core/languages/goFunctions.js.map +1 -0
- package/dist/core/languages/goManifests.d.ts +1 -1
- package/dist/core/languages/goManifests.js +2 -2
- package/dist/core/languages/javaAdapter.d.ts +2 -0
- package/dist/core/languages/javaAdapter.js +153 -0
- package/dist/core/languages/javaAdapter.js.map +1 -0
- package/dist/core/languages/javaCallSites.d.ts +16 -0
- package/dist/core/languages/javaCallSites.js +45 -0
- package/dist/core/languages/javaCallSites.js.map +1 -0
- package/dist/core/languages/javaCyclomatic.d.ts +21 -0
- package/dist/core/languages/javaCyclomatic.js +49 -0
- package/dist/core/languages/javaCyclomatic.js.map +1 -0
- package/dist/core/languages/javaExports.d.ts +25 -0
- package/dist/core/languages/javaExports.js +80 -0
- package/dist/core/languages/javaExports.js.map +1 -0
- package/dist/core/languages/javaFunctions.d.ts +22 -0
- package/dist/core/languages/javaFunctions.js +87 -0
- package/dist/core/languages/javaFunctions.js.map +1 -0
- package/dist/core/languages/javaImports.d.ts +25 -0
- package/dist/core/languages/javaImports.js +49 -0
- package/dist/core/languages/javaImports.js.map +1 -0
- package/dist/core/languages/javaManifests.d.ts +25 -0
- package/dist/core/languages/javaManifests.js +86 -0
- package/dist/core/languages/javaManifests.js.map +1 -0
- package/dist/core/languages/pythonAdapter.js +8 -1
- package/dist/core/languages/pythonAdapter.js.map +1 -1
- package/dist/core/languages/pythonCallSites.d.ts +19 -0
- package/dist/core/languages/pythonCallSites.js +40 -0
- package/dist/core/languages/pythonCallSites.js.map +1 -0
- package/dist/core/languages/pythonFunctions.d.ts +23 -0
- package/dist/core/languages/pythonFunctions.js +87 -0
- package/dist/core/languages/pythonFunctions.js.map +1 -0
- package/dist/core/languages/registry.js +3 -1
- package/dist/core/languages/registry.js.map +1 -1
- package/dist/core/languages/rubyAdapter.d.ts +2 -0
- package/dist/core/languages/rubyAdapter.js +136 -0
- package/dist/core/languages/rubyAdapter.js.map +1 -0
- package/dist/core/languages/rubyCallSites.d.ts +16 -0
- package/dist/core/languages/rubyCallSites.js +34 -0
- package/dist/core/languages/rubyCallSites.js.map +1 -0
- package/dist/core/languages/rubyCyclomatic.d.ts +19 -0
- package/dist/core/languages/rubyCyclomatic.js +47 -0
- package/dist/core/languages/rubyCyclomatic.js.map +1 -0
- package/dist/core/languages/rubyExports.d.ts +24 -0
- package/dist/core/languages/rubyExports.js +53 -0
- package/dist/core/languages/rubyExports.js.map +1 -0
- package/dist/core/languages/rubyFunctions.d.ts +22 -0
- package/dist/core/languages/rubyFunctions.js +91 -0
- package/dist/core/languages/rubyFunctions.js.map +1 -0
- package/dist/core/languages/rubyImports.d.ts +12 -0
- package/dist/core/languages/rubyImports.js +75 -0
- package/dist/core/languages/rubyImports.js.map +1 -0
- package/dist/core/languages/rubyManifests.d.ts +20 -0
- package/dist/core/languages/rubyManifests.js +55 -0
- package/dist/core/languages/rubyManifests.js.map +1 -0
- package/dist/core/languages/treeSitterLoader.js +3 -1
- package/dist/core/languages/treeSitterLoader.js.map +1 -1
- package/dist/core/monorepo.js +5 -5
- package/dist/core/outdatedDetector.d.ts +13 -2
- package/dist/core/outdatedDetector.js +86 -16
- package/dist/core/outdatedDetector.js.map +1 -1
- package/dist/core/prDiff.d.ts +1 -1
- package/dist/core/prDiff.js +2 -2
- package/dist/core/review.d.ts +21 -0
- package/dist/core/review.js +457 -0
- package/dist/core/review.js.map +1 -0
- package/dist/grammars/tree-sitter-java.wasm +0 -0
- package/dist/grammars/tree-sitter-ruby.wasm +0 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +0 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/_shared.d.ts +24 -0
- package/dist/mcp/tools/_shared.js +82 -0
- package/dist/mcp/tools/_shared.js.map +1 -0
- package/dist/mcp/tools/analyze.d.ts +2 -0
- package/dist/mcp/tools/analyze.js +55 -0
- package/dist/mcp/tools/analyze.js.map +1 -0
- package/dist/mcp/tools/audit.d.ts +2 -0
- package/dist/mcp/tools/audit.js +37 -0
- package/dist/mcp/tools/audit.js.map +1 -0
- package/dist/mcp/tools/coupling.d.ts +2 -0
- package/dist/mcp/tools/coupling.js +67 -0
- package/dist/mcp/tools/coupling.js.map +1 -0
- package/dist/mcp/tools/coverage.d.ts +2 -0
- package/dist/mcp/tools/coverage.js +53 -0
- package/dist/mcp/tools/coverage.js.map +1 -0
- package/dist/mcp/tools/dependencies.d.ts +2 -0
- package/dist/mcp/tools/dependencies.js +22 -0
- package/dist/mcp/tools/dependencies.js.map +1 -0
- package/dist/mcp/tools/doctor.d.ts +2 -0
- package/dist/mcp/tools/doctor.js +30 -0
- package/dist/mcp/tools/doctor.js.map +1 -0
- package/dist/mcp/tools/explain.d.ts +2 -0
- package/dist/mcp/tools/explain.js +30 -0
- package/dist/mcp/tools/explain.js.map +1 -0
- package/dist/mcp/tools/explainIssue.d.ts +2 -0
- package/dist/mcp/tools/explainIssue.js +30 -0
- package/dist/mcp/tools/explainIssue.js.map +1 -0
- package/dist/mcp/tools/file.d.ts +2 -0
- package/dist/mcp/tools/file.js +22 -0
- package/dist/mcp/tools/file.js.map +1 -0
- package/dist/mcp/tools/fixSuggest.d.ts +2 -0
- package/dist/mcp/tools/fixSuggest.js +57 -0
- package/dist/mcp/tools/fixSuggest.js.map +1 -0
- package/dist/mcp/tools/graph.d.ts +2 -0
- package/dist/mcp/tools/graph.js +69 -0
- package/dist/mcp/tools/graph.js.map +1 -0
- package/dist/mcp/tools/hotspots.d.ts +2 -0
- package/dist/mcp/tools/hotspots.js +103 -0
- package/dist/mcp/tools/hotspots.js.map +1 -0
- package/dist/mcp/tools/outdated.d.ts +2 -0
- package/dist/mcp/tools/outdated.js +36 -0
- package/dist/mcp/tools/outdated.js.map +1 -0
- package/dist/mcp/tools/prDiff.d.ts +2 -0
- package/dist/mcp/tools/prDiff.js +38 -0
- package/dist/mcp/tools/prDiff.js.map +1 -0
- package/dist/mcp/tools/review.d.ts +2 -0
- package/dist/mcp/tools/review.js +54 -0
- package/dist/mcp/tools/review.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +2 -0
- package/dist/mcp/tools/search.js +167 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/structure.d.ts +2 -0
- package/dist/mcp/tools/structure.js +34 -0
- package/dist/mcp/tools/structure.js.map +1 -0
- package/dist/mcp/tools/upgrade.d.ts +2 -0
- package/dist/mcp/tools/upgrade.js +38 -0
- package/dist/mcp/tools/upgrade.js.map +1 -0
- package/dist/mcp/tools/workspaces.d.ts +2 -0
- package/dist/mcp/tools/workspaces.js +13 -0
- package/dist/mcp/tools/workspaces.js.map +1 -0
- package/dist/mcp/tools.d.ts +12 -6
- package/dist/mcp/tools.js +46 -854
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reporters/consoleReporter.d.ts +9 -1
- package/dist/reporters/consoleReporter.js +177 -0
- package/dist/reporters/consoleReporter.js.map +1 -1
- package/dist/reporters/jsonReporter.d.ts +9 -1
- package/dist/reporters/jsonReporter.js +9 -0
- package/dist/reporters/jsonReporter.js.map +1 -1
- package/dist/reporters/markdownReporter.d.ts +9 -1
- package/dist/reporters/markdownReporter.js +141 -0
- package/dist/reporters/markdownReporter.js.map +1 -1
- package/dist/tool-manifest.json +446 -0
- package/dist/types.d.ts +235 -5
- package/dist/utils/config.js +26 -9
- package/dist/utils/config.js.map +1 -1
- package/package.json +8 -3
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "projscan",
|
|
3
|
+
"version": "0.14.0",
|
|
4
|
+
"mcpProtocolVersion": "2025-03-26",
|
|
5
|
+
"generatedAt": "2026-04-26T14:13:37.446Z",
|
|
6
|
+
"toolCount": 19,
|
|
7
|
+
"tools": [
|
|
8
|
+
{
|
|
9
|
+
"name": "projscan_analyze",
|
|
10
|
+
"description": "Run a full projscan analysis of the project: languages, frameworks, dependencies, issues, and health score. Use this to understand a codebase before making changes.",
|
|
11
|
+
"inputSchema": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"properties": {
|
|
14
|
+
"package": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only."
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "projscan_doctor",
|
|
23
|
+
"description": "Run a health check on the project. Returns a 0-100 score, letter grade, and the list of issues (linting, formatting, tests, security, architecture).",
|
|
24
|
+
"inputSchema": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"package": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only."
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "projscan_hotspots",
|
|
36
|
+
"description": "Rank files by risk using git churn × AST cyclomatic complexity × open issues. Returns the most dangerous files to touch. Each hotspot includes `cyclomaticComplexity` (null for non-AST languages, where line count is used as fallback). Supports cursor-based pagination: pass the `nextCursor` from a previous response back as `cursor` to fetch the next page. Pass `view: \"functions\"` to flatten results into the top-N riskiest individual functions across all hotspots, ranked by per-function CC.",
|
|
37
|
+
"inputSchema": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"properties": {
|
|
40
|
+
"limit": {
|
|
41
|
+
"type": "number",
|
|
42
|
+
"description": "Cap on total hotspots ranked (default 100). For paging the returned set, use `page_size` + `cursor` instead."
|
|
43
|
+
},
|
|
44
|
+
"since": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Git history window. Examples: \"12 months ago\", \"2024-01-01\". Default: \"12 months ago\"."
|
|
47
|
+
},
|
|
48
|
+
"cursor": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"description": "Opaque cursor from a previous response. Omit for the first page."
|
|
51
|
+
},
|
|
52
|
+
"page_size": {
|
|
53
|
+
"type": "number",
|
|
54
|
+
"description": "Items per page (default 50, max 500)."
|
|
55
|
+
},
|
|
56
|
+
"max_tokens": {
|
|
57
|
+
"type": "number",
|
|
58
|
+
"description": "Cap response to roughly this many tokens."
|
|
59
|
+
},
|
|
60
|
+
"package": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope hotspots to one package only."
|
|
63
|
+
},
|
|
64
|
+
"view": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"enum": [
|
|
67
|
+
"files",
|
|
68
|
+
"functions"
|
|
69
|
+
],
|
|
70
|
+
"description": "Output shape. \"files\" (default) returns ranked hotspot files. \"functions\" returns the top-N individual functions across all hotspots, sorted by per-function CC desc."
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "projscan_explain",
|
|
77
|
+
"description": "Explain a single file: purpose, imports, exports, and potential issues. Useful for understanding unfamiliar code before editing.",
|
|
78
|
+
"inputSchema": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"properties": {
|
|
81
|
+
"file": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"description": "Path to the file relative to the project root."
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"required": [
|
|
87
|
+
"file"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "projscan_file",
|
|
93
|
+
"description": "Drill into a single file: purpose, imports, exports, churn/risk/ownership, related health issues, AST cyclomatic complexity, coupling (fan-in / fan-out), and per-function CC ranked by complexity. Use this after projscan_hotspots when deciding how to approach a specific risky file.",
|
|
94
|
+
"inputSchema": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"properties": {
|
|
97
|
+
"file": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"description": "Path to the file relative to the project root."
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"required": [
|
|
103
|
+
"file"
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"name": "projscan_structure",
|
|
109
|
+
"description": "Return the project directory tree with file counts.",
|
|
110
|
+
"inputSchema": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"properties": {
|
|
113
|
+
"package": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only."
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "projscan_dependencies",
|
|
122
|
+
"description": "Analyze package.json dependencies and return counts and risks (deprecated packages, wildcard versions, etc.). In a monorepo, returns aggregated totals plus a `byWorkspace` breakdown; pass `package` to scope to one workspace.",
|
|
123
|
+
"inputSchema": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"properties": {
|
|
126
|
+
"package": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"description": "Optional. Workspace package name to scope analysis to one workspace only."
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"name": "projscan_outdated",
|
|
135
|
+
"description": "Compare declared vs installed versions of every package. Reports drift (patch/minor/major). Workspace-aware in monorepos: each package.json is scanned, and each entry is tagged with the workspace it came from. Pass `package` to scope to a single workspace. Offline - does not hit the npm registry. Supports cursor pagination.",
|
|
136
|
+
"inputSchema": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"properties": {
|
|
139
|
+
"package": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only."
|
|
142
|
+
},
|
|
143
|
+
"cursor": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"description": "Opaque cursor from a previous response."
|
|
146
|
+
},
|
|
147
|
+
"page_size": {
|
|
148
|
+
"type": "number",
|
|
149
|
+
"description": "Items per page (default 50)."
|
|
150
|
+
},
|
|
151
|
+
"max_tokens": {
|
|
152
|
+
"type": "number",
|
|
153
|
+
"description": "Cap response size."
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"name": "projscan_audit",
|
|
160
|
+
"description": "Run `npm audit` and return a normalized summary of vulnerabilities (critical / high / moderate / low / info). Requires package-lock.json. Supports cursor pagination on the findings array. Pass `package` in a monorepo to scope findings to direct deps of one workspace package.",
|
|
161
|
+
"inputSchema": {
|
|
162
|
+
"type": "object",
|
|
163
|
+
"properties": {
|
|
164
|
+
"cursor": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "Opaque cursor from a previous response."
|
|
167
|
+
},
|
|
168
|
+
"page_size": {
|
|
169
|
+
"type": "number",
|
|
170
|
+
"description": "Items per page (default 50)."
|
|
171
|
+
},
|
|
172
|
+
"max_tokens": {
|
|
173
|
+
"type": "number",
|
|
174
|
+
"description": "Cap response size."
|
|
175
|
+
},
|
|
176
|
+
"package": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"description": "Optional. Workspace package name to scope audit findings to one workspace only."
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "projscan_upgrade",
|
|
185
|
+
"description": "Preview the impact of upgrading a package: semver drift, breaking-change markers from the local CHANGELOG, and the files in your repo that import it. Offline.",
|
|
186
|
+
"inputSchema": {
|
|
187
|
+
"type": "object",
|
|
188
|
+
"properties": {
|
|
189
|
+
"package": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"description": "Name of the package to preview."
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
"required": [
|
|
195
|
+
"package"
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "projscan_coverage",
|
|
201
|
+
"description": "Join test coverage with hotspot risk. Returns files ranked by \"risk × uncovered fraction\" - the scariest untested files. Requires a coverage file at coverage/lcov.info, coverage/coverage-final.json, or coverage/coverage-summary.json.",
|
|
202
|
+
"inputSchema": {
|
|
203
|
+
"type": "object",
|
|
204
|
+
"properties": {
|
|
205
|
+
"limit": {
|
|
206
|
+
"type": "number",
|
|
207
|
+
"description": "How many entries to return (default: 30, max: 200)."
|
|
208
|
+
},
|
|
209
|
+
"max_tokens": {
|
|
210
|
+
"type": "number",
|
|
211
|
+
"description": "Cap the response size to roughly this many tokens (~4 chars/token). Truncates the entries array to fit."
|
|
212
|
+
},
|
|
213
|
+
"package": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only."
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"name": "projscan_graph",
|
|
222
|
+
"description": "Query the AST-based code graph directly. Returns imports, exports, importers, or symbol definitions for a file or symbol. Agents should prefer this over analyze/doctor/explain for targeted structural questions - it is much cheaper and more accurate.",
|
|
223
|
+
"inputSchema": {
|
|
224
|
+
"type": "object",
|
|
225
|
+
"properties": {
|
|
226
|
+
"file": {
|
|
227
|
+
"type": "string",
|
|
228
|
+
"description": "File path (relative to project root) to query."
|
|
229
|
+
},
|
|
230
|
+
"symbol": {
|
|
231
|
+
"type": "string",
|
|
232
|
+
"description": "Symbol name to query (e.g. a function or class). Use instead of `file` to find where a symbol is defined."
|
|
233
|
+
},
|
|
234
|
+
"direction": {
|
|
235
|
+
"type": "string",
|
|
236
|
+
"description": "What to return: \"imports\" (what the file imports), \"exports\" (what the file exports), \"importers\" (who imports the file), \"symbol_defs\" (files defining the symbol), \"package_importers\" (files importing a package by name).",
|
|
237
|
+
"enum": [
|
|
238
|
+
"imports",
|
|
239
|
+
"exports",
|
|
240
|
+
"importers",
|
|
241
|
+
"symbol_defs",
|
|
242
|
+
"package_importers"
|
|
243
|
+
]
|
|
244
|
+
},
|
|
245
|
+
"limit": {
|
|
246
|
+
"type": "number",
|
|
247
|
+
"description": "Max entries returned (default 50)."
|
|
248
|
+
},
|
|
249
|
+
"max_tokens": {
|
|
250
|
+
"type": "number",
|
|
251
|
+
"description": "Cap the response to roughly this many tokens."
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
"required": [
|
|
255
|
+
"direction"
|
|
256
|
+
]
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"name": "projscan_coupling",
|
|
261
|
+
"description": "Per-file coupling metrics (fan-in, fan-out, instability) and circular-import cycles, derived from the AST code graph. Use `direction` to focus the result: \"all\" returns every file sorted by fan-in; \"high_fan_in\" / \"high_fan_out\" sort accordingly; \"cycles_only\" returns just the files participating in import cycles. Cycles are reported separately as strongly-connected components of size >= 2.",
|
|
262
|
+
"inputSchema": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"properties": {
|
|
265
|
+
"file": {
|
|
266
|
+
"type": "string",
|
|
267
|
+
"description": "Optional. When set, the response includes only this file's coupling row (cycles list still returned in full)."
|
|
268
|
+
},
|
|
269
|
+
"direction": {
|
|
270
|
+
"type": "string",
|
|
271
|
+
"description": "Filter/sort applied to `files`. Default \"all\".",
|
|
272
|
+
"enum": [
|
|
273
|
+
"all",
|
|
274
|
+
"high_fan_in",
|
|
275
|
+
"high_fan_out",
|
|
276
|
+
"cycles_only"
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
"limit": {
|
|
280
|
+
"type": "number",
|
|
281
|
+
"description": "Max file rows returned (default 25, max 500)."
|
|
282
|
+
},
|
|
283
|
+
"max_tokens": {
|
|
284
|
+
"type": "number",
|
|
285
|
+
"description": "Cap the response to roughly this many tokens."
|
|
286
|
+
},
|
|
287
|
+
"package": {
|
|
288
|
+
"type": "string",
|
|
289
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope coupling rows to one package only."
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"name": "projscan_workspaces",
|
|
296
|
+
"description": "List monorepo workspace packages (npm/yarn workspaces, pnpm-workspace.yaml, Nx/Turbo/Lerna fallback). Returns one row per package with name, relative path, and version. Use the package `name` as the `package` argument on projscan_hotspots / projscan_coupling to scope those tools to a single package.",
|
|
297
|
+
"inputSchema": {
|
|
298
|
+
"type": "object",
|
|
299
|
+
"properties": {}
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"name": "projscan_pr_diff",
|
|
304
|
+
"description": "Structural (AST) diff between two refs - what changed in exports, imports, call sites, cyclomatic complexity, and fan-in. Not a text diff: this surfaces the symbols and edges that an agent reviewing a PR actually cares about. Defaults: base=origin/main (falls back to main/master/HEAD~1), head=HEAD. Spins up a throwaway git worktree at the base ref to get a clean second graph.",
|
|
305
|
+
"inputSchema": {
|
|
306
|
+
"type": "object",
|
|
307
|
+
"properties": {
|
|
308
|
+
"base": {
|
|
309
|
+
"type": "string",
|
|
310
|
+
"description": "Base ref (branch, tag, sha). Default: origin/main, falling back to main/master/HEAD~1."
|
|
311
|
+
},
|
|
312
|
+
"head": {
|
|
313
|
+
"type": "string",
|
|
314
|
+
"description": "Head ref. Default: HEAD."
|
|
315
|
+
},
|
|
316
|
+
"max_tokens": {
|
|
317
|
+
"type": "number",
|
|
318
|
+
"description": "Cap the response to roughly this many tokens."
|
|
319
|
+
},
|
|
320
|
+
"package": {
|
|
321
|
+
"type": "string",
|
|
322
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only."
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"name": "projscan_review",
|
|
329
|
+
"description": "One-call PR review. Combines projscan_pr_diff + per-changed-file risk score + new/expanded import cycles + risky function additions + dependency changes, plus a verdict (\"ok\" | \"review\" | \"block\") with a one-line summary. Use when an agent is asked \"is this PR safe to merge?\" Defaults: base=origin/main (falls back to main/master/HEAD~1), head=HEAD.",
|
|
330
|
+
"inputSchema": {
|
|
331
|
+
"type": "object",
|
|
332
|
+
"properties": {
|
|
333
|
+
"base": {
|
|
334
|
+
"type": "string",
|
|
335
|
+
"description": "Base ref (branch, tag, sha). Default: origin/main, falling back to main/master/HEAD~1."
|
|
336
|
+
},
|
|
337
|
+
"head": {
|
|
338
|
+
"type": "string",
|
|
339
|
+
"description": "Head ref. Default: HEAD."
|
|
340
|
+
},
|
|
341
|
+
"max_tokens": {
|
|
342
|
+
"type": "number",
|
|
343
|
+
"description": "Cap the response to roughly this many tokens."
|
|
344
|
+
},
|
|
345
|
+
"package": {
|
|
346
|
+
"type": "string",
|
|
347
|
+
"description": "Optional. Workspace package name to scope all sections of the review to a single package."
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"name": "projscan_fix_suggest",
|
|
354
|
+
"description": "Given an issue id (from projscan_doctor / projscan_analyze) OR a file + rule pair, return a structured action prompt: headline, why it matters, where to change, one-paragraph instruction the agent can execute, optional suggested test. Rule-driven; no LLM inside projscan. Use this to close the diagnose -> fix loop.",
|
|
355
|
+
"inputSchema": {
|
|
356
|
+
"type": "object",
|
|
357
|
+
"properties": {
|
|
358
|
+
"issue_id": {
|
|
359
|
+
"type": "string",
|
|
360
|
+
"description": "Issue id from a previous projscan_doctor / projscan_analyze response."
|
|
361
|
+
},
|
|
362
|
+
"file": {
|
|
363
|
+
"type": "string",
|
|
364
|
+
"description": "File path (repo-relative). Required when no `issue_id` is given - combined with `rule` to synthesize a fix request."
|
|
365
|
+
},
|
|
366
|
+
"rule": {
|
|
367
|
+
"type": "string",
|
|
368
|
+
"description": "Rule / issue-id prefix (e.g. \"unused-dependency\", \"cycle-detected\"). Required when no `issue_id` is given."
|
|
369
|
+
},
|
|
370
|
+
"severity": {
|
|
371
|
+
"type": "string",
|
|
372
|
+
"enum": [
|
|
373
|
+
"info",
|
|
374
|
+
"warning",
|
|
375
|
+
"error"
|
|
376
|
+
],
|
|
377
|
+
"description": "Optional. When synthesizing via file+rule, sets the severity for the suggestion. Default: warning."
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"name": "projscan_explain_issue",
|
|
384
|
+
"description": "Deep-dive on a single open issue: severity, surrounding code excerpt, other issues touching the same file, similar fixes from git log (commit messages that mention this rule), and the structured fix-action prompt. Use when an agent needs more context than projscan_doctor gives - typically before applying a fix.",
|
|
385
|
+
"inputSchema": {
|
|
386
|
+
"type": "object",
|
|
387
|
+
"properties": {
|
|
388
|
+
"issue_id": {
|
|
389
|
+
"type": "string",
|
|
390
|
+
"description": "Issue id from a previous projscan_doctor / projscan_analyze response."
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
"required": [
|
|
394
|
+
"issue_id"
|
|
395
|
+
]
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"name": "projscan_search",
|
|
400
|
+
"description": "Ranked search across the project. Lexical (BM25) by default; optional semantic (vector) and hybrid (RRF fusion) modes available when the @xenova/transformers peer dependency is installed. Scope controls what to search: \"auto\"/\"content\" (ranked content matches with excerpts), \"symbols\" (exported names), \"files\" (path substring).",
|
|
401
|
+
"inputSchema": {
|
|
402
|
+
"type": "object",
|
|
403
|
+
"properties": {
|
|
404
|
+
"query": {
|
|
405
|
+
"type": "string",
|
|
406
|
+
"description": "Search string. Multi-word queries are treated as OR across BM25 terms; semantic mode embeds the full query."
|
|
407
|
+
},
|
|
408
|
+
"scope": {
|
|
409
|
+
"type": "string",
|
|
410
|
+
"description": "What to search over: \"auto\" (= content), \"symbols\", \"files\", \"content\".",
|
|
411
|
+
"enum": [
|
|
412
|
+
"auto",
|
|
413
|
+
"symbols",
|
|
414
|
+
"files",
|
|
415
|
+
"content"
|
|
416
|
+
]
|
|
417
|
+
},
|
|
418
|
+
"mode": {
|
|
419
|
+
"type": "string",
|
|
420
|
+
"description": "\"lexical\" (default, BM25) | \"semantic\" (embeddings, requires peer dep) | \"hybrid\" (BM25 + semantic via reciprocal rank fusion). Ignored for \"symbols\" and \"files\" scopes.",
|
|
421
|
+
"enum": [
|
|
422
|
+
"lexical",
|
|
423
|
+
"semantic",
|
|
424
|
+
"hybrid"
|
|
425
|
+
]
|
|
426
|
+
},
|
|
427
|
+
"limit": {
|
|
428
|
+
"type": "number",
|
|
429
|
+
"description": "Max matches returned (default 30)."
|
|
430
|
+
},
|
|
431
|
+
"max_tokens": {
|
|
432
|
+
"type": "number",
|
|
433
|
+
"description": "Cap the response to roughly this many tokens."
|
|
434
|
+
},
|
|
435
|
+
"package": {
|
|
436
|
+
"type": "string",
|
|
437
|
+
"description": "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only."
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
"required": [
|
|
441
|
+
"query"
|
|
442
|
+
]
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
]
|
|
446
|
+
}
|