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
package/dist/types.d.ts
CHANGED
|
@@ -47,11 +47,28 @@ export interface DependencyReport {
|
|
|
47
47
|
dependencies: Record<string, string>;
|
|
48
48
|
devDependencies: Record<string, string>;
|
|
49
49
|
risks: DependencyRisk[];
|
|
50
|
+
/**
|
|
51
|
+
* Per-workspace breakdown when scanning a monorepo (0.13.0+). Absent for
|
|
52
|
+
* single-package repos. The top-level `totalDependencies`,
|
|
53
|
+
* `totalDevDependencies`, `dependencies`, `devDependencies`, and `risks`
|
|
54
|
+
* fields aggregate across all workspaces (root manifest + each package).
|
|
55
|
+
* For per-package detail, read this array.
|
|
56
|
+
*/
|
|
57
|
+
byWorkspace?: Array<{
|
|
58
|
+
workspace: string;
|
|
59
|
+
relativePath: string;
|
|
60
|
+
isRoot: boolean;
|
|
61
|
+
totalDependencies: number;
|
|
62
|
+
totalDevDependencies: number;
|
|
63
|
+
risks: DependencyRisk[];
|
|
64
|
+
}>;
|
|
50
65
|
}
|
|
51
66
|
export interface DependencyRisk {
|
|
52
67
|
name: string;
|
|
53
68
|
reason: string;
|
|
54
69
|
severity: 'low' | 'medium' | 'high';
|
|
70
|
+
/** Workspace package name when found in a monorepo workspace manifest. Absent for the root. */
|
|
71
|
+
workspace?: string;
|
|
55
72
|
}
|
|
56
73
|
export type IssueSeverity = 'info' | 'warning' | 'error';
|
|
57
74
|
export interface IssueLocation {
|
|
@@ -70,6 +87,77 @@ export interface Issue {
|
|
|
70
87
|
fixAvailable: boolean;
|
|
71
88
|
fixId?: string;
|
|
72
89
|
locations?: IssueLocation[];
|
|
90
|
+
/**
|
|
91
|
+
* One-line hint shown inline in projscan_doctor output (0.14.0+). Points
|
|
92
|
+
* at the fix-suggest pipeline. Absent when no template matches the issue.
|
|
93
|
+
*/
|
|
94
|
+
suggestedAction?: {
|
|
95
|
+
summary: string;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Structured action prompt the agent can paste into its plan. Returned by
|
|
100
|
+
* projscan_fix_suggest. projscan does not run an LLM - this is rule-driven
|
|
101
|
+
* guidance with the issue, the location, and a one-paragraph instruction
|
|
102
|
+
* the agent (LLM) is expected to act on.
|
|
103
|
+
*/
|
|
104
|
+
export interface FixSuggestion {
|
|
105
|
+
/** Echoes the input issue id when matched. */
|
|
106
|
+
issueId: string;
|
|
107
|
+
/** Severity level passed through from the source issue. */
|
|
108
|
+
severity: IssueSeverity;
|
|
109
|
+
/** Issue category passed through. */
|
|
110
|
+
category: string;
|
|
111
|
+
/** One-line "what is wrong". */
|
|
112
|
+
headline: string;
|
|
113
|
+
/** 2-4 sentences of why this matters. Severity-anchored. */
|
|
114
|
+
why: string;
|
|
115
|
+
/** Affected locations (mirrors Issue.locations when known). */
|
|
116
|
+
where: IssueLocation[];
|
|
117
|
+
/** One-paragraph instruction for the driving agent. */
|
|
118
|
+
instruction: string;
|
|
119
|
+
/** Optional "verify the fix by..." note. */
|
|
120
|
+
suggestedTest?: string;
|
|
121
|
+
/** Optional related files (importers, peer rules) for context. */
|
|
122
|
+
relatedFiles?: string[];
|
|
123
|
+
/** Optional documentation links. */
|
|
124
|
+
references?: string[];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Markdown-rendered deep dive for a single issue. Returned by
|
|
128
|
+
* projscan_explain_issue. Includes the surrounding code excerpt and any
|
|
129
|
+
* git-log evidence of similar fixes already merged in this repo.
|
|
130
|
+
*/
|
|
131
|
+
export interface IssueExplanation {
|
|
132
|
+
issueId: string;
|
|
133
|
+
title: string;
|
|
134
|
+
severity: IssueSeverity;
|
|
135
|
+
category: string;
|
|
136
|
+
headline: string;
|
|
137
|
+
/** Source-code excerpt around the primary location. Empty when no location. */
|
|
138
|
+
excerpt: {
|
|
139
|
+
file: string;
|
|
140
|
+
startLine: number;
|
|
141
|
+
endLine: number;
|
|
142
|
+
lines: string[];
|
|
143
|
+
} | null;
|
|
144
|
+
/** Other open issues touching the same file (id + title pairs). */
|
|
145
|
+
relatedIssues: Array<{
|
|
146
|
+
id: string;
|
|
147
|
+
title: string;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* Git log references where this issue id (or its rule prefix) appears in a
|
|
151
|
+
* commit message - hints at how teammates have addressed it before.
|
|
152
|
+
* Empty when none found or git history unavailable.
|
|
153
|
+
*/
|
|
154
|
+
similarFixes: Array<{
|
|
155
|
+
sha: string;
|
|
156
|
+
subject: string;
|
|
157
|
+
date: string;
|
|
158
|
+
}>;
|
|
159
|
+
/** The full FixSuggestion if a template matched; null otherwise. */
|
|
160
|
+
fix: FixSuggestion | null;
|
|
73
161
|
}
|
|
74
162
|
export interface Fix {
|
|
75
163
|
id: string;
|
|
@@ -167,12 +255,20 @@ export interface OutdatedPackage {
|
|
|
167
255
|
latest: string | null;
|
|
168
256
|
drift: SemverDrift;
|
|
169
257
|
scope: 'dependency' | 'devDependency';
|
|
258
|
+
/** Workspace package this dep was declared in. Empty/undefined when not a monorepo. */
|
|
259
|
+
workspace?: string;
|
|
170
260
|
}
|
|
171
261
|
export interface OutdatedReport {
|
|
172
262
|
available: boolean;
|
|
173
263
|
reason?: string;
|
|
174
264
|
totalPackages: number;
|
|
175
265
|
packages: OutdatedPackage[];
|
|
266
|
+
/** Per-workspace breakdown when scanning a monorepo. Empty for single-package repos. */
|
|
267
|
+
byWorkspace?: Array<{
|
|
268
|
+
workspace: string;
|
|
269
|
+
relativePath: string;
|
|
270
|
+
total: number;
|
|
271
|
+
}>;
|
|
176
272
|
}
|
|
177
273
|
export type AuditSeverity = 'critical' | 'high' | 'moderate' | 'low' | 'info';
|
|
178
274
|
export interface AuditFinding {
|
|
@@ -245,13 +341,30 @@ export interface ProjscanConfig {
|
|
|
245
341
|
ignore?: string[];
|
|
246
342
|
disableRules?: string[];
|
|
247
343
|
severityOverrides?: Record<string, IssueSeverity>;
|
|
248
|
-
/**
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
344
|
+
/**
|
|
345
|
+
* Monorepo-specific configuration (0.14.0+). Currently scopes the
|
|
346
|
+
* cross-package import policy: each entry says "package P may only import
|
|
347
|
+
* from these listed packages, or specifically may NOT import from these
|
|
348
|
+
* listed packages." Edges that violate become `cross-package-violation-*`
|
|
349
|
+
* issues in projscan_doctor.
|
|
350
|
+
*/
|
|
351
|
+
monorepo?: {
|
|
352
|
+
importPolicy?: ImportPolicyRule[];
|
|
253
353
|
};
|
|
254
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* One cross-package import rule. `from` is the package name (matches
|
|
357
|
+
* WorkspacePackage.name). Exactly one of `allow` / `deny` is required. Both
|
|
358
|
+
* lists are package-name globs - a leading `!` negates a single entry, and a
|
|
359
|
+
* single `*` is the wildcard. When both `allow` and `deny` are set, allow
|
|
360
|
+
* is checked first and a hit short-circuits as ALLOWED; otherwise deny is
|
|
361
|
+
* checked.
|
|
362
|
+
*/
|
|
363
|
+
export interface ImportPolicyRule {
|
|
364
|
+
from: string;
|
|
365
|
+
allow?: string[];
|
|
366
|
+
deny?: string[];
|
|
367
|
+
}
|
|
255
368
|
export interface LoadedConfig {
|
|
256
369
|
config: ProjscanConfig;
|
|
257
370
|
source: string | null;
|
|
@@ -389,6 +502,105 @@ export interface PrDiffReport {
|
|
|
389
502
|
filesModified: FileAstDiff[];
|
|
390
503
|
totalFilesChanged: number;
|
|
391
504
|
}
|
|
505
|
+
/**
|
|
506
|
+
* One changed file enriched with risk signals. The agent calling
|
|
507
|
+
* projscan_review uses these to decide which files need careful review.
|
|
508
|
+
*/
|
|
509
|
+
export interface ReviewFile {
|
|
510
|
+
relativePath: string;
|
|
511
|
+
status: 'added' | 'removed' | 'modified';
|
|
512
|
+
/** Hotspot risk score for the head version. null when file isn't in the hotspot scope. */
|
|
513
|
+
riskScore: number | null;
|
|
514
|
+
/** Cyclomatic complexity at head. null when no AST adapter parsed it. */
|
|
515
|
+
cyclomaticComplexity: number | null;
|
|
516
|
+
/** Delta from the structural diff (mirrors FileAstDiff.cyclomaticDelta). null when file was added/removed. */
|
|
517
|
+
cyclomaticDelta: number | null;
|
|
518
|
+
/** Number of exports added in this PR. */
|
|
519
|
+
exportsAdded: number;
|
|
520
|
+
/** Number of exports removed in this PR. */
|
|
521
|
+
exportsRemoved: number;
|
|
522
|
+
/** Number of imports added. */
|
|
523
|
+
importsAdded: number;
|
|
524
|
+
/** Number of imports removed. */
|
|
525
|
+
importsRemoved: number;
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* A circular import that exists at head and either didn't exist at base or
|
|
529
|
+
* grew. Surfaced separately from the file list so reviewers see at-a-glance
|
|
530
|
+
* whether the PR introduces new architectural debt.
|
|
531
|
+
*/
|
|
532
|
+
export interface ReviewCycle {
|
|
533
|
+
files: string[];
|
|
534
|
+
size: number;
|
|
535
|
+
/**
|
|
536
|
+
* 'new' = no overlap with any base cycle; 'expanded' = at least one new
|
|
537
|
+
* file added to an existing cycle.
|
|
538
|
+
*/
|
|
539
|
+
classification: 'new' | 'expanded';
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* A function whose CC newly crossed a worry threshold (>= 10) at head, or
|
|
543
|
+
* was added with high CC, or jumped by 5+ since base.
|
|
544
|
+
*/
|
|
545
|
+
export interface ReviewFunction {
|
|
546
|
+
file: string;
|
|
547
|
+
name: string;
|
|
548
|
+
line: number;
|
|
549
|
+
endLine: number;
|
|
550
|
+
cyclomaticComplexity: number;
|
|
551
|
+
/** CC at base. null when the function did not exist at base. */
|
|
552
|
+
baseCc: number | null;
|
|
553
|
+
/** Why this function shows up. */
|
|
554
|
+
reason: 'added' | 'jumped' | 'crossed-threshold';
|
|
555
|
+
}
|
|
556
|
+
/** Workspace-package-scoped dependency change. Aggregates root + workspaces. */
|
|
557
|
+
export interface ReviewDependencyChange {
|
|
558
|
+
/** Workspace name; '' for the root manifest. */
|
|
559
|
+
workspace: string;
|
|
560
|
+
manifestFile: string;
|
|
561
|
+
added: Array<{
|
|
562
|
+
name: string;
|
|
563
|
+
version: string;
|
|
564
|
+
kind: 'dep' | 'dev';
|
|
565
|
+
}>;
|
|
566
|
+
removed: Array<{
|
|
567
|
+
name: string;
|
|
568
|
+
version: string;
|
|
569
|
+
kind: 'dep' | 'dev';
|
|
570
|
+
}>;
|
|
571
|
+
bumped: Array<{
|
|
572
|
+
name: string;
|
|
573
|
+
from: string;
|
|
574
|
+
to: string;
|
|
575
|
+
kind: 'dep' | 'dev';
|
|
576
|
+
}>;
|
|
577
|
+
}
|
|
578
|
+
export interface ReviewReport {
|
|
579
|
+
available: boolean;
|
|
580
|
+
reason?: string;
|
|
581
|
+
base: {
|
|
582
|
+
ref: string;
|
|
583
|
+
resolvedSha: string | null;
|
|
584
|
+
};
|
|
585
|
+
head: {
|
|
586
|
+
ref: string;
|
|
587
|
+
resolvedSha: string | null;
|
|
588
|
+
};
|
|
589
|
+
/** The structural diff (same shape as projscan_pr_diff). */
|
|
590
|
+
prDiff: PrDiffReport;
|
|
591
|
+
/** Each changed file annotated with risk + CC + delta. Sorted by risk desc. */
|
|
592
|
+
changedFiles: ReviewFile[];
|
|
593
|
+
/** Cycles introduced or expanded by this PR. Empty when none. */
|
|
594
|
+
newCycles: ReviewCycle[];
|
|
595
|
+
/** Functions that meaningfully grew or were added with high CC. Sorted by CC desc. */
|
|
596
|
+
riskyFunctions: ReviewFunction[];
|
|
597
|
+
/** package.json deltas across root + workspaces. */
|
|
598
|
+
dependencyChanges: ReviewDependencyChange[];
|
|
599
|
+
/** 'ok' = ship it; 'review' = needs careful look; 'block' = strongly suggests rework. */
|
|
600
|
+
verdict: 'ok' | 'review' | 'block';
|
|
601
|
+
/** One-line bullets explaining the verdict. */
|
|
602
|
+
summary: string[];
|
|
603
|
+
}
|
|
392
604
|
export interface FileInspection {
|
|
393
605
|
relativePath: string;
|
|
394
606
|
exists: boolean;
|
|
@@ -409,6 +621,24 @@ export interface FileInspection {
|
|
|
409
621
|
fanOut?: number | null;
|
|
410
622
|
/** Adapter id (e.g. 'javascript', 'python'). Set when the graph was available. */
|
|
411
623
|
language?: string;
|
|
624
|
+
/**
|
|
625
|
+
* Per-function McCabe CC (0.13.0+). Sorted by cyclomaticComplexity desc.
|
|
626
|
+
* Empty array when the file has no functions or the adapter doesn't yet
|
|
627
|
+
* support per-function granularity.
|
|
628
|
+
*/
|
|
629
|
+
functions?: FunctionDetail[];
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* Per-function CC entry exposed via projscan_file. Mirrors the internal
|
|
633
|
+
* `FunctionInfo` from `core/ast.ts` but is part of the stable API surface.
|
|
634
|
+
*/
|
|
635
|
+
export interface FunctionDetail {
|
|
636
|
+
name: string;
|
|
637
|
+
/** 1-based start line. */
|
|
638
|
+
line: number;
|
|
639
|
+
/** 1-based end line. */
|
|
640
|
+
endLine: number;
|
|
641
|
+
cyclomaticComplexity: number;
|
|
412
642
|
}
|
|
413
643
|
export interface McpToolDefinition {
|
|
414
644
|
name: string;
|
package/dist/utils/config.js
CHANGED
|
@@ -89,15 +89,32 @@ function normalize(input) {
|
|
|
89
89
|
if (Object.keys(overrides).length)
|
|
90
90
|
out.severityOverrides = overrides;
|
|
91
91
|
}
|
|
92
|
-
if (obj.
|
|
93
|
-
const
|
|
94
|
-
const
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
92
|
+
if (obj.monorepo && typeof obj.monorepo === 'object') {
|
|
93
|
+
const m = obj.monorepo;
|
|
94
|
+
const monorepo = {};
|
|
95
|
+
if (Array.isArray(m.importPolicy)) {
|
|
96
|
+
const rules = [];
|
|
97
|
+
for (const entry of m.importPolicy) {
|
|
98
|
+
if (!entry || typeof entry !== 'object')
|
|
99
|
+
continue;
|
|
100
|
+
const e = entry;
|
|
101
|
+
if (typeof e.from !== 'string' || !e.from)
|
|
102
|
+
continue;
|
|
103
|
+
const rule = { from: e.from };
|
|
104
|
+
if (Array.isArray(e.allow)) {
|
|
105
|
+
rule.allow = e.allow.filter((v) => typeof v === 'string');
|
|
106
|
+
}
|
|
107
|
+
if (Array.isArray(e.deny)) {
|
|
108
|
+
rule.deny = e.deny.filter((v) => typeof v === 'string');
|
|
109
|
+
}
|
|
110
|
+
if (rule.allow || rule.deny)
|
|
111
|
+
rules.push(rule);
|
|
112
|
+
}
|
|
113
|
+
if (rules.length > 0)
|
|
114
|
+
monorepo.importPolicy = rules;
|
|
115
|
+
}
|
|
116
|
+
if (Object.keys(monorepo).length)
|
|
117
|
+
out.monorepo = monorepo;
|
|
101
118
|
}
|
|
102
119
|
return out;
|
|
103
120
|
}
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,MAAM,iBAAiB,GAAG,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,UAAU,CAAC;AAE3B,MAAM,gBAAgB,GAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,YAAqB;IAErB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAC5C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;YACzC,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACzC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,kCAAkC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI,OAAO,EAAE,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,QAAgB;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAE/B,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,GAAG,CAAC,QAAmC,CAAC;QAClD,MAAM,QAAQ,GAA4C,EAAE,CAAC;QAC7D,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAClD,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5D,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CACxC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,iBAAiB,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;QACvE,MAAM,GAAG,GAAG,GAAG,CAAC,iBAA4C,CAAC;QAC7D,MAAM,SAAS,GAAkC,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAK,gBAA6B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5E,SAAS,CAAC,GAAG,CAAC,GAAG,GAAoB,CAAC;YACxC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACvE,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,GAAG,CAAC,QAAmC,CAAC;QAClD,MAAM,QAAQ,GAA4C,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAuB,EAAE,CAAC;YACrC,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,SAAS;gBAClD,MAAM,CAAC,GAAG,KAAgC,CAAC;gBAC3C,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI;oBAAE,SAAS;gBACpD,MAAM,IAAI,GAAqB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;gBACzE,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;gBACvE,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5D,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,MAAsB;IAEtB,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAEjD,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;SACtD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,QAAQ;QAC3D,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC7C,CAAC,CAAC,KAAK,CACV,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,QAAkB;IACpD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projscan",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Agent-first code intelligence. MCP server (2025-03-26) with AST parsing for JavaScript, TypeScript, Python, and
|
|
3
|
+
"version": "0.14.0",
|
|
4
|
+
"description": "Agent-first code intelligence. MCP server (2025-03-26) with AST parsing for JavaScript, TypeScript, Python, Go, Java, and Ruby; code graph, file + per-function AST cyclomatic complexity, coupling + cycle detection, structural PR diff, one-call PR review (projscan_review), rule-driven fix suggestions (projscan_fix_suggest, projscan_explain_issue) closing the diagnose-fix loop, monorepo workspace awareness with cross-package import policy + per-package dependencies / outdated / audit, BM25 + optional semantic search, cursor pagination, progress notifications, context-budgeted output, and a stable-surface CI guard. CLI on the side.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -13,12 +13,15 @@
|
|
|
13
13
|
"README.md"
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
|
-
"build": "tsc && node scripts/copy-wasm.mjs",
|
|
16
|
+
"build": "tsc && node scripts/copy-wasm.mjs && node scripts/generate-tool-manifest.mjs",
|
|
17
17
|
"dev": "tsc --watch",
|
|
18
18
|
"test": "vitest run",
|
|
19
19
|
"test:watch": "vitest",
|
|
20
20
|
"lint": "eslint src/",
|
|
21
21
|
"format": "prettier --write .",
|
|
22
|
+
"bench": "node scripts/bench.mjs",
|
|
23
|
+
"bench:references": "node scripts/bench-references.mjs",
|
|
24
|
+
"check:stability": "node scripts/check-stability.mjs",
|
|
22
25
|
"prepare": "npm run build"
|
|
23
26
|
},
|
|
24
27
|
"keywords": [
|
|
@@ -59,7 +62,9 @@
|
|
|
59
62
|
"fast-glob": "^3.3.2",
|
|
60
63
|
"ora": "^8.1.0",
|
|
61
64
|
"tree-sitter-go": "^0.25.0",
|
|
65
|
+
"tree-sitter-java": "^0.23.5",
|
|
62
66
|
"tree-sitter-python": "^0.25.0",
|
|
67
|
+
"tree-sitter-ruby": "^0.23.1",
|
|
63
68
|
"web-tree-sitter": "^0.26.8"
|
|
64
69
|
},
|
|
65
70
|
"peerDependencies": {
|