projscan 0.11.0 → 0.12.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.
Files changed (203) hide show
  1. package/README.md +45 -26
  2. package/dist/analyzers/unusedDependencyCheck.js +69 -17
  3. package/dist/analyzers/unusedDependencyCheck.js.map +1 -1
  4. package/dist/cli/_shared.d.ts +16 -0
  5. package/dist/cli/_shared.js +210 -0
  6. package/dist/cli/_shared.js.map +1 -0
  7. package/dist/cli/commands/analyze.d.ts +1 -0
  8. package/dist/cli/commands/analyze.js +87 -0
  9. package/dist/cli/commands/analyze.js.map +1 -0
  10. package/dist/cli/commands/audit.d.ts +1 -0
  11. package/dist/cli/commands/audit.js +47 -0
  12. package/dist/cli/commands/audit.js.map +1 -0
  13. package/dist/cli/commands/badge.d.ts +1 -0
  14. package/dist/cli/commands/badge.js +45 -0
  15. package/dist/cli/commands/badge.js.map +1 -0
  16. package/dist/cli/commands/ci.d.ts +1 -0
  17. package/dist/cli/commands/ci.js +57 -0
  18. package/dist/cli/commands/ci.js.map +1 -0
  19. package/dist/cli/commands/coupling.d.ts +1 -0
  20. package/dist/cli/commands/coupling.js +83 -0
  21. package/dist/cli/commands/coupling.js.map +1 -0
  22. package/dist/cli/commands/coverage.d.ts +1 -0
  23. package/dist/cli/commands/coverage.js +63 -0
  24. package/dist/cli/commands/coverage.js.map +1 -0
  25. package/dist/cli/commands/dependencies.d.ts +1 -0
  26. package/dist/cli/commands/dependencies.js +45 -0
  27. package/dist/cli/commands/dependencies.js.map +1 -0
  28. package/dist/cli/commands/diagram.d.ts +1 -0
  29. package/dist/cli/commands/diagram.js +45 -0
  30. package/dist/cli/commands/diagram.js.map +1 -0
  31. package/dist/cli/commands/diff.d.ts +1 -0
  32. package/dist/cli/commands/diff.js +70 -0
  33. package/dist/cli/commands/diff.js.map +1 -0
  34. package/dist/cli/commands/doctor.d.ts +1 -0
  35. package/dist/cli/commands/doctor.js +62 -0
  36. package/dist/cli/commands/doctor.js.map +1 -0
  37. package/dist/cli/commands/explain.d.ts +1 -0
  38. package/dist/cli/commands/explain.js +42 -0
  39. package/dist/cli/commands/explain.js.map +1 -0
  40. package/dist/cli/commands/file.d.ts +1 -0
  41. package/dist/cli/commands/file.js +45 -0
  42. package/dist/cli/commands/file.js.map +1 -0
  43. package/dist/cli/commands/fix.d.ts +1 -0
  44. package/dist/cli/commands/fix.js +70 -0
  45. package/dist/cli/commands/fix.js.map +1 -0
  46. package/dist/cli/commands/help.d.ts +1 -0
  47. package/dist/cli/commands/help.js +11 -0
  48. package/dist/cli/commands/help.js.map +1 -0
  49. package/dist/cli/commands/hotspots.d.ts +1 -0
  50. package/dist/cli/commands/hotspots.js +74 -0
  51. package/dist/cli/commands/hotspots.js.map +1 -0
  52. package/dist/cli/commands/mcp.d.ts +1 -0
  53. package/dist/cli/commands/mcp.js +21 -0
  54. package/dist/cli/commands/mcp.js.map +1 -0
  55. package/dist/cli/commands/outdated.d.ts +1 -0
  56. package/dist/cli/commands/outdated.js +51 -0
  57. package/dist/cli/commands/outdated.js.map +1 -0
  58. package/dist/cli/commands/prDiff.d.ts +1 -0
  59. package/dist/cli/commands/prDiff.js +59 -0
  60. package/dist/cli/commands/prDiff.js.map +1 -0
  61. package/dist/cli/commands/search.d.ts +1 -0
  62. package/dist/cli/commands/search.js +233 -0
  63. package/dist/cli/commands/search.js.map +1 -0
  64. package/dist/cli/commands/structure.d.ts +1 -0
  65. package/dist/cli/commands/structure.js +58 -0
  66. package/dist/cli/commands/structure.js.map +1 -0
  67. package/dist/cli/commands/upgrade.d.ts +1 -0
  68. package/dist/cli/commands/upgrade.js +44 -0
  69. package/dist/cli/commands/upgrade.js.map +1 -0
  70. package/dist/cli/commands/workspaces.d.ts +1 -0
  71. package/dist/cli/commands/workspaces.js +35 -0
  72. package/dist/cli/commands/workspaces.js.map +1 -0
  73. package/dist/cli/index.js +45 -1416
  74. package/dist/cli/index.js.map +1 -1
  75. package/dist/core/couplingAnalyzer.d.ts +1 -1
  76. package/dist/core/couplingAnalyzer.js +3 -3
  77. package/dist/core/hotspotAnalyzer.js +2 -2
  78. package/dist/core/languages/LanguageAdapter.d.ts +1 -1
  79. package/dist/core/languages/goAdapter.js +7 -5
  80. package/dist/core/languages/goAdapter.js.map +1 -1
  81. package/dist/core/languages/goCallSites.d.ts +20 -0
  82. package/dist/core/languages/goCallSites.js +42 -0
  83. package/dist/core/languages/goCallSites.js.map +1 -0
  84. package/dist/core/languages/goCyclomatic.d.ts +1 -1
  85. package/dist/core/languages/goCyclomatic.js +2 -2
  86. package/dist/core/languages/goExports.d.ts +1 -1
  87. package/dist/core/languages/goExports.js +1 -1
  88. package/dist/core/languages/goManifests.d.ts +1 -1
  89. package/dist/core/languages/goManifests.js +2 -2
  90. package/dist/core/languages/javaAdapter.d.ts +2 -0
  91. package/dist/core/languages/javaAdapter.js +148 -0
  92. package/dist/core/languages/javaAdapter.js.map +1 -0
  93. package/dist/core/languages/javaCallSites.d.ts +16 -0
  94. package/dist/core/languages/javaCallSites.js +45 -0
  95. package/dist/core/languages/javaCallSites.js.map +1 -0
  96. package/dist/core/languages/javaCyclomatic.d.ts +21 -0
  97. package/dist/core/languages/javaCyclomatic.js +49 -0
  98. package/dist/core/languages/javaCyclomatic.js.map +1 -0
  99. package/dist/core/languages/javaExports.d.ts +25 -0
  100. package/dist/core/languages/javaExports.js +80 -0
  101. package/dist/core/languages/javaExports.js.map +1 -0
  102. package/dist/core/languages/javaImports.d.ts +25 -0
  103. package/dist/core/languages/javaImports.js +49 -0
  104. package/dist/core/languages/javaImports.js.map +1 -0
  105. package/dist/core/languages/javaManifests.d.ts +25 -0
  106. package/dist/core/languages/javaManifests.js +86 -0
  107. package/dist/core/languages/javaManifests.js.map +1 -0
  108. package/dist/core/languages/pythonAdapter.js +3 -1
  109. package/dist/core/languages/pythonAdapter.js.map +1 -1
  110. package/dist/core/languages/pythonCallSites.d.ts +19 -0
  111. package/dist/core/languages/pythonCallSites.js +40 -0
  112. package/dist/core/languages/pythonCallSites.js.map +1 -0
  113. package/dist/core/languages/registry.js +3 -1
  114. package/dist/core/languages/registry.js.map +1 -1
  115. package/dist/core/languages/rubyAdapter.d.ts +2 -0
  116. package/dist/core/languages/rubyAdapter.js +131 -0
  117. package/dist/core/languages/rubyAdapter.js.map +1 -0
  118. package/dist/core/languages/rubyCallSites.d.ts +16 -0
  119. package/dist/core/languages/rubyCallSites.js +34 -0
  120. package/dist/core/languages/rubyCallSites.js.map +1 -0
  121. package/dist/core/languages/rubyCyclomatic.d.ts +19 -0
  122. package/dist/core/languages/rubyCyclomatic.js +47 -0
  123. package/dist/core/languages/rubyCyclomatic.js.map +1 -0
  124. package/dist/core/languages/rubyExports.d.ts +24 -0
  125. package/dist/core/languages/rubyExports.js +53 -0
  126. package/dist/core/languages/rubyExports.js.map +1 -0
  127. package/dist/core/languages/rubyImports.d.ts +12 -0
  128. package/dist/core/languages/rubyImports.js +75 -0
  129. package/dist/core/languages/rubyImports.js.map +1 -0
  130. package/dist/core/languages/rubyManifests.d.ts +20 -0
  131. package/dist/core/languages/rubyManifests.js +55 -0
  132. package/dist/core/languages/rubyManifests.js.map +1 -0
  133. package/dist/core/languages/treeSitterLoader.js +3 -1
  134. package/dist/core/languages/treeSitterLoader.js.map +1 -1
  135. package/dist/core/monorepo.js +5 -5
  136. package/dist/core/outdatedDetector.d.ts +13 -2
  137. package/dist/core/outdatedDetector.js +86 -16
  138. package/dist/core/outdatedDetector.js.map +1 -1
  139. package/dist/core/prDiff.d.ts +1 -1
  140. package/dist/core/prDiff.js +2 -2
  141. package/dist/grammars/tree-sitter-java.wasm +0 -0
  142. package/dist/grammars/tree-sitter-ruby.wasm +0 -0
  143. package/dist/mcp/server.js +0 -22
  144. package/dist/mcp/server.js.map +1 -1
  145. package/dist/mcp/tools/_shared.d.ts +24 -0
  146. package/dist/mcp/tools/_shared.js +82 -0
  147. package/dist/mcp/tools/_shared.js.map +1 -0
  148. package/dist/mcp/tools/analyze.d.ts +2 -0
  149. package/dist/mcp/tools/analyze.js +55 -0
  150. package/dist/mcp/tools/analyze.js.map +1 -0
  151. package/dist/mcp/tools/audit.d.ts +2 -0
  152. package/dist/mcp/tools/audit.js +32 -0
  153. package/dist/mcp/tools/audit.js.map +1 -0
  154. package/dist/mcp/tools/coupling.d.ts +2 -0
  155. package/dist/mcp/tools/coupling.js +67 -0
  156. package/dist/mcp/tools/coupling.js.map +1 -0
  157. package/dist/mcp/tools/coverage.d.ts +2 -0
  158. package/dist/mcp/tools/coverage.js +53 -0
  159. package/dist/mcp/tools/coverage.js.map +1 -0
  160. package/dist/mcp/tools/dependencies.d.ts +2 -0
  161. package/dist/mcp/tools/dependencies.js +16 -0
  162. package/dist/mcp/tools/dependencies.js.map +1 -0
  163. package/dist/mcp/tools/doctor.d.ts +2 -0
  164. package/dist/mcp/tools/doctor.js +30 -0
  165. package/dist/mcp/tools/doctor.js.map +1 -0
  166. package/dist/mcp/tools/explain.d.ts +2 -0
  167. package/dist/mcp/tools/explain.js +30 -0
  168. package/dist/mcp/tools/explain.js.map +1 -0
  169. package/dist/mcp/tools/file.d.ts +2 -0
  170. package/dist/mcp/tools/file.js +22 -0
  171. package/dist/mcp/tools/file.js.map +1 -0
  172. package/dist/mcp/tools/graph.d.ts +2 -0
  173. package/dist/mcp/tools/graph.js +69 -0
  174. package/dist/mcp/tools/graph.js.map +1 -0
  175. package/dist/mcp/tools/hotspots.d.ts +2 -0
  176. package/dist/mcp/tools/hotspots.js +64 -0
  177. package/dist/mcp/tools/hotspots.js.map +1 -0
  178. package/dist/mcp/tools/outdated.d.ts +2 -0
  179. package/dist/mcp/tools/outdated.js +36 -0
  180. package/dist/mcp/tools/outdated.js.map +1 -0
  181. package/dist/mcp/tools/prDiff.d.ts +2 -0
  182. package/dist/mcp/tools/prDiff.js +38 -0
  183. package/dist/mcp/tools/prDiff.js.map +1 -0
  184. package/dist/mcp/tools/search.d.ts +2 -0
  185. package/dist/mcp/tools/search.js +167 -0
  186. package/dist/mcp/tools/search.js.map +1 -0
  187. package/dist/mcp/tools/structure.d.ts +2 -0
  188. package/dist/mcp/tools/structure.js +34 -0
  189. package/dist/mcp/tools/structure.js.map +1 -0
  190. package/dist/mcp/tools/upgrade.d.ts +2 -0
  191. package/dist/mcp/tools/upgrade.js +38 -0
  192. package/dist/mcp/tools/upgrade.js.map +1 -0
  193. package/dist/mcp/tools/workspaces.d.ts +2 -0
  194. package/dist/mcp/tools/workspaces.js +13 -0
  195. package/dist/mcp/tools/workspaces.js.map +1 -0
  196. package/dist/mcp/tools.d.ts +12 -6
  197. package/dist/mcp/tools.js +40 -854
  198. package/dist/mcp/tools.js.map +1 -1
  199. package/dist/tool-manifest.json +358 -0
  200. package/dist/types.d.ts +8 -6
  201. package/dist/utils/config.js +0 -10
  202. package/dist/utils/config.js.map +1 -1
  203. package/package.json +6 -3
@@ -5,10 +5,58 @@ import { drift as semverDrift } from '../utils/semver.js';
5
5
  * Offline outdated check - compares the version declared in package.json
6
6
  * to the version installed under node_modules/<pkg>/package.json.
7
7
  *
8
+ * In a monorepo (caller supplies workspaces), each package's package.json is
9
+ * scanned. Each result entry carries the workspace it came from. Installed
10
+ * versions still resolve through the root node_modules (npm/yarn/pnpm hoisting
11
+ * makes that the right place to look in 95% of installs).
12
+ *
8
13
  * Does not hit the npm registry. `latest` is filled in only when a node_modules
9
14
  * install exists; the drift calculation uses installed vs declared.
10
15
  */
11
- export async function detectOutdated(rootPath) {
16
+ export async function detectOutdated(rootPath, options = {}) {
17
+ const ws = options.workspaces;
18
+ const isMonorepo = ws !== undefined && ws.kind !== 'none' && ws.packages.length > 1;
19
+ if (!isMonorepo) {
20
+ // Single-package path: read root package.json only.
21
+ return await scanSinglePackage(rootPath, undefined);
22
+ }
23
+ // Monorepo path: scan each package's manifest, attribute results.
24
+ const nodeModules = path.join(rootPath, 'node_modules');
25
+ const nodeModulesExists = await pathExists(nodeModules);
26
+ const allPackages = [];
27
+ const byWorkspace = [];
28
+ for (const wp of ws.packages) {
29
+ if (options.workspaceFilter && wp.name !== options.workspaceFilter)
30
+ continue;
31
+ const pkgDir = wp.relativePath ? path.join(rootPath, wp.relativePath) : rootPath;
32
+ const pkgManifest = path.join(pkgDir, 'package.json');
33
+ const pkgEntries = await readManifestEntries(pkgManifest);
34
+ const pkgResults = [];
35
+ for (const [name, declared, scope] of pkgEntries) {
36
+ let installed = null;
37
+ if (nodeModulesExists)
38
+ installed = await readInstalledVersion(nodeModules, name);
39
+ pkgResults.push({
40
+ name,
41
+ declared,
42
+ installed,
43
+ latest: installed,
44
+ drift: semverDrift(declared, installed),
45
+ scope,
46
+ workspace: wp.name,
47
+ });
48
+ }
49
+ allPackages.push(...pkgResults);
50
+ byWorkspace.push({ workspace: wp.name, relativePath: wp.relativePath, total: pkgResults.length });
51
+ }
52
+ return {
53
+ available: true,
54
+ totalPackages: allPackages.length,
55
+ packages: allPackages,
56
+ byWorkspace,
57
+ };
58
+ }
59
+ async function scanSinglePackage(rootPath, workspaceName) {
12
60
  const pkgPath = path.join(rootPath, 'package.json');
13
61
  let raw;
14
62
  try {
@@ -22,9 +70,9 @@ export async function detectOutdated(rootPath) {
22
70
  packages: [],
23
71
  };
24
72
  }
25
- let pkg;
73
+ let pkgJson;
26
74
  try {
27
- pkg = JSON.parse(raw);
75
+ pkgJson = JSON.parse(raw);
28
76
  }
29
77
  catch {
30
78
  return {
@@ -34,29 +82,25 @@ export async function detectOutdated(rootPath) {
34
82
  packages: [],
35
83
  };
36
84
  }
37
- const dependencies = (pkg.dependencies ?? {});
38
- const devDependencies = (pkg.devDependencies ?? {});
39
- const entries = [
40
- ...Object.entries(dependencies).map(([n, v]) => [n, v, 'dependency']),
41
- ...Object.entries(devDependencies).map(([n, v]) => [n, v, 'devDependency']),
42
- ];
85
+ const entries = manifestEntriesFromParsed(pkgJson);
43
86
  const nodeModules = path.join(rootPath, 'node_modules');
44
87
  const nodeModulesExists = await pathExists(nodeModules);
45
88
  const packages = [];
46
89
  for (const [name, declared, scope] of entries) {
47
90
  let installed = null;
48
- if (nodeModulesExists) {
91
+ if (nodeModulesExists)
49
92
  installed = await readInstalledVersion(nodeModules, name);
50
- }
51
- const drift = semverDrift(declared, installed);
52
- packages.push({
93
+ const entry = {
53
94
  name,
54
95
  declared,
55
96
  installed,
56
- latest: installed, // without registry lookup, installed is the best we know
57
- drift,
97
+ latest: installed,
98
+ drift: semverDrift(declared, installed),
58
99
  scope,
59
- });
100
+ };
101
+ if (workspaceName)
102
+ entry.workspace = workspaceName;
103
+ packages.push(entry);
60
104
  }
61
105
  return {
62
106
  available: true,
@@ -64,6 +108,32 @@ export async function detectOutdated(rootPath) {
64
108
  packages,
65
109
  };
66
110
  }
111
+ function manifestEntriesFromParsed(pkg) {
112
+ const dependencies = (pkg.dependencies ?? {});
113
+ const devDependencies = (pkg.devDependencies ?? {});
114
+ return [
115
+ ...Object.entries(dependencies).map(([n, v]) => [n, v, 'dependency']),
116
+ ...Object.entries(devDependencies).map(([n, v]) => [n, v, 'devDependency']),
117
+ ];
118
+ }
119
+ /** Read deps/devDeps from a package.json. Returns [] if file unreadable/invalid (used in monorepo iteration where one bad workspace shouldn't fail the whole scan). */
120
+ async function readManifestEntries(pkgPath) {
121
+ let raw;
122
+ try {
123
+ raw = await fs.readFile(pkgPath, 'utf-8');
124
+ }
125
+ catch {
126
+ return [];
127
+ }
128
+ let pkg;
129
+ try {
130
+ pkg = JSON.parse(raw);
131
+ }
132
+ catch {
133
+ return [];
134
+ }
135
+ return manifestEntriesFromParsed(pkg);
136
+ }
67
137
  async function pathExists(p) {
68
138
  try {
69
139
  await fs.access(p);
@@ -1 +1 @@
1
- {"version":3,"file":"outdatedDetector.js","sourceRoot":"","sources":["../../src/core/outdatedDetector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outdatedDetector.js","sourceRoot":"","sources":["../../src/core/outdatedDetector.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export interface PrDiffOptions {
20
20
  * "what whitespace changed on line 42."
21
21
  */
22
22
  export declare function computePrDiff(rootPath: string, options?: PrDiffOptions): Promise<PrDiffReport>;
23
- /** Pure function exported for unit testing without a real git repo. */
23
+ /** Pure function - exported for unit testing without a real git repo. */
24
24
  export declare function diffGraphs(baseRef: string, baseSha: string | null, headRef: string, headSha: string | null, baseGraph: CodeGraph, headGraph: CodeGraph): PrDiffReport;
25
25
  /**
26
26
  * Pair removed/added export names that look like renames. A pair counts as a
@@ -66,7 +66,7 @@ export async function computePrDiff(rootPath, options = {}) {
66
66
  }
67
67
  return diffGraphs(baseRef, baseSha, headRef, headSha, baseGraph, headGraph);
68
68
  }
69
- /** Pure function exported for unit testing without a real git repo. */
69
+ /** Pure function - exported for unit testing without a real git repo. */
70
70
  export function diffGraphs(baseRef, baseSha, headRef, headSha, baseGraph, headGraph) {
71
71
  const filesAdded = [];
72
72
  const filesRemoved = [];
@@ -204,7 +204,7 @@ function levenshtein(a, b) {
204
204
  return n;
205
205
  if (n === 0)
206
206
  return m;
207
- // Two-row DP small allocations keep this cheap on the realistic name sizes.
207
+ // Two-row DP - small allocations keep this cheap on the realistic name sizes.
208
208
  let prev = new Array(n + 1);
209
209
  let curr = new Array(n + 1);
210
210
  for (let j = 0; j <= n; j++)
@@ -8,8 +8,6 @@ import { getResourceDefinitions, readResource } from './resources.js';
8
8
  import { applyBudget } from './tokenBudget.js';
9
9
  import { withProgress } from './progress.js';
10
10
  import { toContentBlocks } from './chunker.js';
11
- import { recordToolCall } from '../core/telemetry.js';
12
- import { loadConfig } from '../utils/config.js';
13
11
  const SUPPORTED_PROTOCOL_VERSIONS = ['2025-03-26', '2024-11-05'];
14
12
  const PROTOCOL_VERSION = SUPPORTED_PROTOCOL_VERSIONS[0];
15
13
  const JSONRPC_ERROR = {
@@ -81,7 +79,6 @@ export function createMcpServer(rootPath, options = {}) {
81
79
  if (!handler) {
82
80
  return fail(id, JSONRPC_ERROR.MethodNotFound, `Unknown tool: ${name}`);
83
81
  }
84
- const startedAt = Date.now();
85
82
  try {
86
83
  const args = params.arguments ?? {};
87
84
  // Progress emitter: if the client supplied a progressToken AND
@@ -121,8 +118,6 @@ export function createMcpServer(rootPath, options = {}) {
121
118
  const content = wantsStreaming
122
119
  ? toContentBlocks(payload)
123
120
  : [{ type: 'text', text: safeStringify(payload) }];
124
- // Telemetry: opt-in, fire-and-forget, never blocks the response.
125
- void recordTelemetrySafe(name, Date.now() - startedAt, true, undefined, rootPath);
126
121
  return ok(id, {
127
122
  content,
128
123
  isError: false,
@@ -130,8 +125,6 @@ export function createMcpServer(rootPath, options = {}) {
130
125
  }
131
126
  catch (err) {
132
127
  const message = err instanceof Error ? err.message : String(err);
133
- const code = err instanceof Error ? err.name : 'Error';
134
- void recordTelemetrySafe(name, Date.now() - startedAt, false, code, rootPath);
135
128
  return ok(id, {
136
129
  content: [{ type: 'text', text: `Error: ${message}` }],
137
130
  isError: true,
@@ -241,21 +234,6 @@ function attachBudgetSidecar(value, info) {
241
234
  }
242
235
  return { ...value, _budget: info };
243
236
  }
244
- /**
245
- * Wraps recordToolCall with config loading. Telemetry is opt-in via
246
- * .projscanrc telemetry block (or PROJSCAN_TELEMETRY env). Best-effort: if
247
- * loading config or writing the event throws, we swallow it — telemetry must
248
- * never break a tool call.
249
- */
250
- async function recordTelemetrySafe(name, durationMs, ok, errorCode, rootPath) {
251
- try {
252
- const { config } = await loadConfig(rootPath);
253
- await recordToolCall(name, durationMs, ok, errorCode, config.telemetry);
254
- }
255
- catch {
256
- // intentionally silent
257
- }
258
- }
259
237
  export async function runMcpServer(rootPath) {
260
238
  const server = createMcpServer(rootPath, {
261
239
  notify: (payload) => {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { FileEntry, FileExplanation, McpToolDefinition, DirectoryNode } from '../../types.js';
2
+ export interface McpToolHandler {
3
+ (args: Record<string, unknown>, rootPath: string): Promise<unknown>;
4
+ }
5
+ export interface McpTool extends McpToolDefinition {
6
+ handler: McpToolHandler;
7
+ }
8
+ /**
9
+ * A repo is "Python-dominated" if it has a pyproject.toml OR setup.py AND
10
+ * either no node_modules directory or no package.json.
11
+ */
12
+ export declare function isPythonDominated(rootPath: string, files: FileEntry[]): Promise<boolean>;
13
+ /**
14
+ * Resolve the `package` arg to a (file -> boolean) filter, or null when
15
+ * scoping wasn't requested.
16
+ */
17
+ export declare function resolvePackageFilter(rootPath: string, args: Record<string, unknown>): Promise<((file: string) => boolean) | null>;
18
+ export declare const PACKAGE_ARG_SCHEMA: {
19
+ readonly type: "string";
20
+ readonly description: "Optional. Workspace package name (from projscan_workspaces) to scope results to one package only.";
21
+ };
22
+ /** Walk a DirectoryNode tree to find the node whose `path` equals targetPath. */
23
+ export declare function sliceTree(node: DirectoryNode, targetPath: string): DirectoryNode | null;
24
+ export declare function explainFile(absolutePath: string, content: string, rootPath: string): FileExplanation;
@@ -0,0 +1,82 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ import { extractImports, extractExports, inferPurpose, detectFileIssues, } from '../../core/fileInspector.js';
4
+ import { detectWorkspaces } from '../../core/monorepo.js';
5
+ /**
6
+ * A repo is "Python-dominated" if it has a pyproject.toml OR setup.py AND
7
+ * either no node_modules directory or no package.json.
8
+ */
9
+ export async function isPythonDominated(rootPath, files) {
10
+ const hasPython = files.some((f) => f.extension === '.py' || f.extension === '.pyw');
11
+ if (!hasPython)
12
+ return false;
13
+ const manifests = ['pyproject.toml', 'setup.py', 'setup.cfg'];
14
+ let hasPyManifest = false;
15
+ for (const m of manifests) {
16
+ try {
17
+ await fs.access(path.join(rootPath, m));
18
+ hasPyManifest = true;
19
+ break;
20
+ }
21
+ catch {
22
+ // next
23
+ }
24
+ }
25
+ if (!hasPyManifest)
26
+ return false;
27
+ try {
28
+ await fs.access(path.join(rootPath, 'package.json'));
29
+ return false;
30
+ }
31
+ catch {
32
+ return true;
33
+ }
34
+ }
35
+ /**
36
+ * Resolve the `package` arg to a (file -> boolean) filter, or null when
37
+ * scoping wasn't requested.
38
+ */
39
+ export async function resolvePackageFilter(rootPath, args) {
40
+ const name = typeof args.package === 'string' && args.package.length > 0 ? args.package : null;
41
+ if (!name)
42
+ return null;
43
+ const ws = await detectWorkspaces(rootPath);
44
+ const pkg = ws.packages.find((p) => p.name === name);
45
+ if (!pkg)
46
+ return () => false;
47
+ if (pkg.isRoot)
48
+ return () => true;
49
+ const prefix = pkg.relativePath + '/';
50
+ return (file) => file === pkg.relativePath || file.startsWith(prefix);
51
+ }
52
+ export const PACKAGE_ARG_SCHEMA = {
53
+ type: 'string',
54
+ description: 'Optional. Workspace package name (from projscan_workspaces) to scope results to one package only.',
55
+ };
56
+ /** Walk a DirectoryNode tree to find the node whose `path` equals targetPath. */
57
+ export function sliceTree(node, targetPath) {
58
+ if (node.path === targetPath)
59
+ return node;
60
+ for (const child of node.children) {
61
+ const hit = sliceTree(child, targetPath);
62
+ if (hit)
63
+ return hit;
64
+ }
65
+ return null;
66
+ }
67
+ export function explainFile(absolutePath, content, rootPath) {
68
+ const lines = content.split('\n');
69
+ const imports = extractImports(content);
70
+ const exports = extractExports(content);
71
+ const purpose = inferPurpose(absolutePath, exports);
72
+ const potentialIssues = detectFileIssues(content, lines.length);
73
+ return {
74
+ filePath: path.relative(rootPath, absolutePath),
75
+ purpose,
76
+ imports,
77
+ exports,
78
+ potentialIssues,
79
+ lineCount: lines.length,
80
+ };
81
+ }
82
+ //# sourceMappingURL=_shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/mcp/tools/_shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type McpTool } from './_shared.js';
2
+ export declare const analyzeTool: McpTool;
@@ -0,0 +1,55 @@
1
+ import path from 'node:path';
2
+ import { scanRepository } from '../../core/repositoryScanner.js';
3
+ import { detectLanguages } from '../../core/languageDetector.js';
4
+ import { detectFrameworks } from '../../core/frameworkDetector.js';
5
+ import { analyzeDependencies } from '../../core/dependencyAnalyzer.js';
6
+ import { collectIssues } from '../../core/issueEngine.js';
7
+ import { calculateScore } from '../../utils/scoreCalculator.js';
8
+ import { emitProgress } from '../progress.js';
9
+ import { PACKAGE_ARG_SCHEMA, resolvePackageFilter } from './_shared.js';
10
+ export const analyzeTool = {
11
+ name: 'projscan_analyze',
12
+ 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.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ package: PACKAGE_ARG_SCHEMA,
17
+ },
18
+ },
19
+ handler: async (args, rootPath) => {
20
+ emitProgress(0, 5, 'scanning repository');
21
+ const scan = await scanRepository(rootPath);
22
+ emitProgress(1, 5, 'detecting languages + frameworks');
23
+ const languages = detectLanguages(scan.files);
24
+ const frameworks = await detectFrameworks(rootPath, scan.files);
25
+ emitProgress(2, 5, 'analyzing dependencies');
26
+ const dependencies = await analyzeDependencies(rootPath);
27
+ emitProgress(3, 5, 'running analyzers');
28
+ let issues = await collectIssues(rootPath, scan.files);
29
+ const passes = await resolvePackageFilter(rootPath, args);
30
+ if (passes) {
31
+ issues = issues.filter((i) => {
32
+ const locs = i.locations ?? [];
33
+ if (locs.length === 0)
34
+ return false;
35
+ return locs.some((l) => l.file && passes(l.file));
36
+ });
37
+ }
38
+ emitProgress(4, 5, 'scoring');
39
+ const health = calculateScore(issues);
40
+ emitProgress(5, 5, 'done');
41
+ const report = {
42
+ projectName: path.basename(rootPath),
43
+ rootPath,
44
+ scan: { ...scan, files: [], directoryTree: scan.directoryTree },
45
+ languages,
46
+ frameworks,
47
+ dependencies,
48
+ issues,
49
+ timestamp: new Date().toISOString(),
50
+ health,
51
+ };
52
+ return report;
53
+ },
54
+ };
55
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/mcp/tools/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAgB,MAAM,cAAc,CAAC;AAGtF,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,sKAAsK;IACxK,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,kBAAkB;SAC5B;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5C,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,kCAAkC,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACzD,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACxC,IAAI,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACpC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,MAAM,GAA+C;YACzD,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,QAAQ;YACR,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;YAC/D,SAAS;YACT,UAAU;YACV,YAAY;YACZ,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM;SACP,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpTool } from './_shared.js';
2
+ export declare const auditTool: McpTool;
@@ -0,0 +1,32 @@
1
+ import { runAudit } from '../../core/auditRunner.js';
2
+ import { paginate, listChecksum, readPageParams } from '../pagination.js';
3
+ import { emitProgress } from '../progress.js';
4
+ export const auditTool = {
5
+ name: 'projscan_audit',
6
+ 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.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ cursor: { type: 'string', description: 'Opaque cursor from a previous response.' },
11
+ page_size: { type: 'number', description: 'Items per page (default 50).' },
12
+ max_tokens: { type: 'number', description: 'Cap response size.' },
13
+ },
14
+ },
15
+ handler: async (args, rootPath) => {
16
+ emitProgress(0, 2, 'running npm audit');
17
+ const report = await runAudit(rootPath);
18
+ if (!report.available)
19
+ return report;
20
+ emitProgress(1, 2, 'normalizing findings');
21
+ const page = paginate(report.findings, readPageParams(args), listChecksum(report.findings));
22
+ emitProgress(2, 2, 'done');
23
+ return {
24
+ available: true,
25
+ summary: report.summary,
26
+ findings: page.items,
27
+ total: page.total,
28
+ nextCursor: page.nextCursor,
29
+ };
30
+ },
31
+ };
32
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/mcp/tools/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,6LAA6L;IAC/L,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;YAClF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;YAC1E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;SAClE;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC;QACrC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5F,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO;YACL,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,IAAI,CAAC,KAAK;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpTool } from './_shared.js';
2
+ export declare const couplingTool: McpTool;
@@ -0,0 +1,67 @@
1
+ import { scanRepository } from '../../core/repositoryScanner.js';
2
+ import { buildCodeGraph } from '../../core/codeGraph.js';
3
+ import { loadCachedGraph, saveCachedGraph } from '../../core/indexCache.js';
4
+ import { computeCoupling, filterCoupling } from '../../core/couplingAnalyzer.js';
5
+ import { detectWorkspaces, filterFilesByPackage } from '../../core/monorepo.js';
6
+ import { paginate, listChecksum, readPageParams } from '../pagination.js';
7
+ import { emitProgress } from '../progress.js';
8
+ export const couplingTool = {
9
+ name: 'projscan_coupling',
10
+ 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.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ file: {
15
+ type: 'string',
16
+ description: "Optional. When set, the response includes only this file's coupling row (cycles list still returned in full).",
17
+ },
18
+ direction: {
19
+ type: 'string',
20
+ description: 'Filter/sort applied to `files`. Default "all".',
21
+ enum: ['all', 'high_fan_in', 'high_fan_out', 'cycles_only'],
22
+ },
23
+ limit: { type: 'number', description: 'Max file rows returned (default 25, max 500).' },
24
+ max_tokens: { type: 'number', description: 'Cap the response to roughly this many tokens.' },
25
+ package: {
26
+ type: 'string',
27
+ description: 'Optional. Workspace package name (from projscan_workspaces) to scope coupling rows to one package only.',
28
+ },
29
+ },
30
+ },
31
+ handler: async (args, rootPath) => {
32
+ emitProgress(0, 3, 'building code graph');
33
+ const scan = await scanRepository(rootPath);
34
+ const cached = await loadCachedGraph(rootPath);
35
+ const graph = await buildCodeGraph(rootPath, scan.files, cached);
36
+ await saveCachedGraph(rootPath, graph);
37
+ emitProgress(1, 3, 'computing coupling + cycles');
38
+ const ws = await detectWorkspaces(rootPath);
39
+ const report = computeCoupling(graph, ws);
40
+ const direction = (typeof args.direction === 'string' ? args.direction : 'all');
41
+ const limit = Math.max(1, Math.min(500, typeof args.limit === 'number' ? args.limit : 25));
42
+ const file = typeof args.file === 'string' ? args.file : undefined;
43
+ let files = filterCoupling(report, direction);
44
+ if (file)
45
+ files = files.filter((f) => f.relativePath === file);
46
+ if (typeof args.package === 'string' && args.package.length > 0) {
47
+ const ws2 = await detectWorkspaces(rootPath);
48
+ const allowed = new Set(filterFilesByPackage(ws2, args.package, files.map((f) => f.relativePath)));
49
+ files = files.filter((f) => allowed.has(f.relativePath));
50
+ }
51
+ files = files.slice(0, limit);
52
+ emitProgress(2, 3, 'paginating');
53
+ const page = paginate(files, readPageParams(args), listChecksum(files));
54
+ emitProgress(3, 3, 'done');
55
+ return {
56
+ files: page.items,
57
+ cycles: report.cycles,
58
+ crossPackageEdges: report.crossPackageEdges,
59
+ totalFiles: report.totalFiles,
60
+ totalCycles: report.totalCycles,
61
+ totalCrossPackageEdges: report.totalCrossPackageEdges,
62
+ nextCursor: page.nextCursor,
63
+ total: page.total,
64
+ };
65
+ },
66
+ };
67
+ //# sourceMappingURL=coupling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coupling.js","sourceRoot":"","sources":["../../../src/mcp/tools/coupling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type McpTool } from './_shared.js';
2
+ export declare const coverageTool: McpTool;