sverklo 0.7.2 → 0.8.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.
@@ -0,0 +1,33 @@
1
+ import type { Indexer } from "../indexer/indexer.js";
2
+ export interface HealthDimension {
3
+ name: string;
4
+ grade: string;
5
+ score: number;
6
+ detail: string;
7
+ }
8
+ export interface HealthScore {
9
+ grade: string;
10
+ numericScore: number;
11
+ dimensions: HealthDimension[];
12
+ }
13
+ export interface SecurityIssue {
14
+ file: string;
15
+ line: number;
16
+ pattern: string;
17
+ severity: "critical" | "high" | "medium" | "low";
18
+ snippet: string;
19
+ }
20
+ export interface AuditAnalysis {
21
+ healthScore: HealthScore;
22
+ securityIssues: SecurityIssue[];
23
+ circularDeps: string[][];
24
+ }
25
+ export declare function scanSecurity(indexer: Indexer): SecurityIssue[];
26
+ export declare function detectCycles(files: Array<{
27
+ id: number;
28
+ path: string;
29
+ }>, edges: Array<{
30
+ source_file_id: number;
31
+ target_file_id: number;
32
+ }>): string[][];
33
+ export declare function analyzeCodebase(indexer: Indexer): AuditAnalysis;
@@ -0,0 +1,371 @@
1
+ // ─── Grade helpers ───
2
+ const GRADE_VALUES = { A: 5, B: 4, C: 3, D: 2, F: 1 };
3
+ function numericToGrade(score) {
4
+ if (score >= 4.5)
5
+ return "A";
6
+ if (score >= 3.5)
7
+ return "B";
8
+ if (score >= 2.5)
9
+ return "C";
10
+ if (score >= 1.5)
11
+ return "D";
12
+ return "F";
13
+ }
14
+ function deadCodeGrade(pct) {
15
+ if (pct <= 5)
16
+ return "A";
17
+ if (pct <= 15)
18
+ return "B";
19
+ if (pct <= 25)
20
+ return "C";
21
+ if (pct <= 40)
22
+ return "D";
23
+ return "F";
24
+ }
25
+ function circularDepsGrade(count) {
26
+ if (count === 0)
27
+ return "A";
28
+ if (count <= 2)
29
+ return "B";
30
+ if (count <= 5)
31
+ return "C";
32
+ if (count <= 10)
33
+ return "D";
34
+ return "F";
35
+ }
36
+ function couplingGrade(maxFanIn) {
37
+ if (maxFanIn < 10)
38
+ return "A";
39
+ if (maxFanIn <= 20)
40
+ return "B";
41
+ if (maxFanIn <= 35)
42
+ return "C";
43
+ if (maxFanIn <= 50)
44
+ return "D";
45
+ return "F";
46
+ }
47
+ function securityGrade(issueCount) {
48
+ if (issueCount === 0)
49
+ return "A";
50
+ if (issueCount <= 2)
51
+ return "B";
52
+ if (issueCount <= 5)
53
+ return "C";
54
+ if (issueCount <= 10)
55
+ return "D";
56
+ return "F";
57
+ }
58
+ const SECURITY_PATTERNS = [
59
+ // Hardcoded secrets
60
+ {
61
+ name: "Hardcoded secret",
62
+ regex: /(password|secret|api_key|apikey|token|auth)\s*[:=]\s*['"][^'"]{8,}['"]/i,
63
+ severity: "critical",
64
+ },
65
+ {
66
+ name: "Private key",
67
+ regex: /-----BEGIN (RSA |EC |DSA )?PRIVATE KEY-----/,
68
+ severity: "critical",
69
+ },
70
+ {
71
+ name: "API token",
72
+ regex: /(ghp_|gho_|github_pat_|sk-|pk_live_|pk_test_|sk_live_|sk_test_)[a-zA-Z0-9]{20,}/,
73
+ severity: "critical",
74
+ },
75
+ // SQL injection
76
+ {
77
+ name: "SQL injection (template literal)",
78
+ regex: /(query|exec|execute|raw)\s*\(\s*['"`].*\$\{/,
79
+ severity: "high",
80
+ },
81
+ {
82
+ name: "SQL injection (string concat)",
83
+ regex: /\+\s*['"].*(?:SELECT|INSERT|UPDATE|DELETE|DROP|WHERE)/i,
84
+ severity: "high",
85
+ },
86
+ // Dangerous eval
87
+ {
88
+ name: "eval() usage",
89
+ regex: /\beval\s*\(/,
90
+ severity: "high",
91
+ },
92
+ {
93
+ name: "new Function() usage",
94
+ regex: /new\s+Function\s*\(/,
95
+ severity: "high",
96
+ },
97
+ {
98
+ name: "setTimeout with string",
99
+ regex: /setTimeout\s*\(\s*['"`]/,
100
+ severity: "high",
101
+ },
102
+ {
103
+ name: "setInterval with string",
104
+ regex: /setInterval\s*\(\s*['"`]/,
105
+ severity: "high",
106
+ },
107
+ // Debug statements — debugger is always flagged
108
+ {
109
+ name: "debugger statement",
110
+ regex: /\bdebugger\s*;/,
111
+ severity: "low",
112
+ },
113
+ ];
114
+ /** Files that should be excluded from debug-statement scanning. */
115
+ const NON_PRODUCTION_FILE = /(^|\/)(tests?|__tests__|spec|specs|examples?|benchmarks?|fixtures?|scripts?|docs?)(\/|$)/;
116
+ const ENV_EXAMPLE_FILE = /\.env\.example$/;
117
+ export function scanSecurity(indexer) {
118
+ const allChunks = indexer.chunkStore.getAllWithFile();
119
+ const issues = [];
120
+ // Track deduplicated issues by file:line:pattern
121
+ const seen = new Set();
122
+ // For console.log counting: accumulate per-file counts first, then
123
+ // only emit issues for files with >10 occurrences.
124
+ const consoleLogsByFile = new Map();
125
+ for (const chunk of allChunks) {
126
+ const filePath = chunk.filePath;
127
+ // Skip .env.example files entirely
128
+ if (ENV_EXAMPLE_FILE.test(filePath))
129
+ continue;
130
+ const isTestFile = NON_PRODUCTION_FILE.test(filePath);
131
+ const lines = chunk.content.split("\n");
132
+ for (let i = 0; i < lines.length; i++) {
133
+ const line = lines[i];
134
+ const absoluteLine = chunk.start_line + i;
135
+ // Check all security patterns
136
+ for (const pattern of SECURITY_PATTERNS) {
137
+ if (pattern.regex.test(line)) {
138
+ const key = `${filePath}:${absoluteLine}:${pattern.name}`;
139
+ if (seen.has(key))
140
+ continue;
141
+ seen.add(key);
142
+ issues.push({
143
+ file: filePath,
144
+ line: absoluteLine,
145
+ pattern: pattern.name,
146
+ severity: pattern.severity,
147
+ snippet: line.trim().slice(0, 120),
148
+ });
149
+ }
150
+ }
151
+ // Track console.log separately (only for non-test files)
152
+ if (!isTestFile && /console\.log\s*\(/.test(line)) {
153
+ const key = `${filePath}:${absoluteLine}:console.log`;
154
+ if (!seen.has(key)) {
155
+ seen.add(key);
156
+ if (!consoleLogsByFile.has(filePath)) {
157
+ consoleLogsByFile.set(filePath, []);
158
+ }
159
+ consoleLogsByFile.get(filePath).push({
160
+ line: absoluteLine,
161
+ snippet: line.trim().slice(0, 120),
162
+ });
163
+ }
164
+ }
165
+ }
166
+ }
167
+ // Only flag console.log if a file has >10 occurrences
168
+ for (const [filePath, entries] of consoleLogsByFile) {
169
+ if (entries.length > 10) {
170
+ for (const entry of entries) {
171
+ issues.push({
172
+ file: filePath,
173
+ line: entry.line,
174
+ pattern: "Excessive console.log",
175
+ severity: "low",
176
+ snippet: entry.snippet,
177
+ });
178
+ }
179
+ }
180
+ }
181
+ return issues;
182
+ }
183
+ // ─── Circular Dependency Detection ───
184
+ export function detectCycles(files, edges) {
185
+ // Build adjacency list
186
+ const adj = new Map();
187
+ const idToPath = new Map();
188
+ for (const f of files) {
189
+ idToPath.set(f.id, f.path);
190
+ adj.set(f.id, []);
191
+ }
192
+ for (const e of edges) {
193
+ const neighbors = adj.get(e.source_file_id);
194
+ if (neighbors) {
195
+ neighbors.push(e.target_file_id);
196
+ }
197
+ }
198
+ // DFS with white (0), gray (1), black (2) coloring
199
+ const WHITE = 0;
200
+ const GRAY = 1;
201
+ const BLACK = 2;
202
+ const color = new Map();
203
+ const parent = new Map(); // for cycle reconstruction
204
+ const cycles = [];
205
+ // Deduplicate cycles by their normalized form
206
+ const seenCycles = new Set();
207
+ for (const f of files) {
208
+ color.set(f.id, WHITE);
209
+ }
210
+ function dfs(u) {
211
+ color.set(u, GRAY);
212
+ const neighbors = adj.get(u) || [];
213
+ for (const v of neighbors) {
214
+ if (!idToPath.has(v))
215
+ continue; // target not in our file set
216
+ const vc = color.get(v);
217
+ if (vc === WHITE) {
218
+ parent.set(v, u);
219
+ dfs(v);
220
+ }
221
+ else if (vc === GRAY) {
222
+ // Found a cycle — reconstruct it
223
+ const cycle = [];
224
+ let current = u;
225
+ cycle.push(idToPath.get(v));
226
+ while (current !== v) {
227
+ cycle.push(idToPath.get(current));
228
+ current = parent.get(current);
229
+ // Safety: if we loop too many times, break (shouldn't happen)
230
+ if (cycle.length > files.length)
231
+ break;
232
+ }
233
+ cycle.reverse();
234
+ // Normalize: rotate so the lexicographically smallest path is first
235
+ const normalized = normalizeCycle(cycle);
236
+ const key = normalized.join(" -> ");
237
+ if (!seenCycles.has(key)) {
238
+ seenCycles.add(key);
239
+ cycles.push(normalized);
240
+ }
241
+ }
242
+ // BLACK nodes are already fully explored — skip
243
+ }
244
+ color.set(u, BLACK);
245
+ }
246
+ for (const f of files) {
247
+ if (color.get(f.id) === WHITE) {
248
+ dfs(f.id);
249
+ }
250
+ }
251
+ return cycles;
252
+ }
253
+ /** Rotate a cycle so the lexicographically smallest path is first. */
254
+ function normalizeCycle(cycle) {
255
+ if (cycle.length === 0)
256
+ return cycle;
257
+ let minIdx = 0;
258
+ for (let i = 1; i < cycle.length; i++) {
259
+ if (cycle[i] < cycle[minIdx]) {
260
+ minIdx = i;
261
+ }
262
+ }
263
+ return [...cycle.slice(minIdx), ...cycle.slice(0, minIdx)];
264
+ }
265
+ // ─── Coupling: max fan-in ───
266
+ function computeMaxFanIn(files, edges) {
267
+ const idToPath = new Map();
268
+ for (const f of files) {
269
+ idToPath.set(f.id, f.path);
270
+ }
271
+ const importerCount = new Map();
272
+ for (const e of edges) {
273
+ importerCount.set(e.target_file_id, (importerCount.get(e.target_file_id) || 0) + 1);
274
+ }
275
+ let maxFanIn = 0;
276
+ let maxFile = "";
277
+ for (const [fileId, count] of importerCount) {
278
+ if (count > maxFanIn) {
279
+ maxFanIn = count;
280
+ maxFile = idToPath.get(fileId) || `file#${fileId}`;
281
+ }
282
+ }
283
+ return { maxFanIn, file: maxFile };
284
+ }
285
+ // ─── Dead code percentage ───
286
+ function computeDeadCodePct(indexer) {
287
+ const allChunks = indexer.chunkStore.getAllWithFile();
288
+ const allRefs = indexer.symbolRefStore.getAll();
289
+ const refsByName = new Map();
290
+ for (const r of allRefs) {
291
+ refsByName.set(r.target_name, (refsByName.get(r.target_name) || 0) + 1);
292
+ }
293
+ const NON_SHIPPING = /(^|\/)(tests?|__tests__|spec|specs|examples?|benchmarks?|fixtures?|scripts?|docs?)(\/|$)/;
294
+ const namedChunks = allChunks.filter((c) => c.name &&
295
+ (c.type === "function" || c.type === "class" || c.type === "method") &&
296
+ !NON_SHIPPING.test(c.filePath));
297
+ let orphanCount = 0;
298
+ for (const c of namedChunks) {
299
+ if (["main", "default", "index", "__init__", "constructor"].includes(c.name))
300
+ continue;
301
+ const fullName = c.name;
302
+ const dot = fullName.lastIndexOf(".");
303
+ const bareName = dot >= 0 ? fullName.slice(dot + 1) : fullName;
304
+ const refs = (refsByName.get(fullName) || 0) +
305
+ (dot >= 0 ? refsByName.get(bareName) || 0 : 0);
306
+ if (refs === 0)
307
+ orphanCount++;
308
+ }
309
+ const totalCount = namedChunks.length;
310
+ const pct = totalCount === 0 ? 0 : (orphanCount / totalCount) * 100;
311
+ return { pct, orphanCount, totalCount };
312
+ }
313
+ // ─── Main analysis function ───
314
+ export function analyzeCodebase(indexer) {
315
+ const files = indexer.fileStore.getAll();
316
+ const edges = indexer.graphStore.getAll();
317
+ // 1. Security scan
318
+ const securityIssues = scanSecurity(indexer);
319
+ // 2. Circular dependency detection
320
+ const circularDeps = detectCycles(files, edges);
321
+ // 3. Dead code
322
+ const { pct: deadCodePct, orphanCount, totalCount } = computeDeadCodePct(indexer);
323
+ // 4. Coupling (max fan-in)
324
+ const { maxFanIn, file: maxFanInFile } = computeMaxFanIn(files, edges);
325
+ // 5. Compute health dimensions
326
+ const dcGrade = deadCodeGrade(deadCodePct);
327
+ const cdGrade = circularDepsGrade(circularDeps.length);
328
+ const cpGrade = couplingGrade(maxFanIn);
329
+ const scGrade = securityGrade(securityIssues.length);
330
+ const dimensions = [
331
+ {
332
+ name: "Dead code",
333
+ grade: dcGrade,
334
+ score: GRADE_VALUES[dcGrade],
335
+ detail: `${Math.round(deadCodePct)}% orphan symbols (${orphanCount}/${totalCount})`,
336
+ },
337
+ {
338
+ name: "Circular deps",
339
+ grade: cdGrade,
340
+ score: GRADE_VALUES[cdGrade],
341
+ detail: `${circularDeps.length} cycle${circularDeps.length === 1 ? "" : "s"} detected`,
342
+ },
343
+ {
344
+ name: "Coupling",
345
+ grade: cpGrade,
346
+ score: GRADE_VALUES[cpGrade],
347
+ detail: maxFanIn > 0
348
+ ? `max fan-in: ${maxFanIn} (${maxFanInFile})`
349
+ : "no dependencies tracked",
350
+ },
351
+ {
352
+ name: "Security",
353
+ grade: scGrade,
354
+ score: GRADE_VALUES[scGrade],
355
+ detail: `${securityIssues.length} issue${securityIssues.length === 1 ? "" : "s"} found`,
356
+ },
357
+ ];
358
+ // 6. Weighted average (equal 25% each)
359
+ const numericScore = dimensions.reduce((sum, d) => sum + d.score, 0) / dimensions.length;
360
+ const overallGrade = numericToGrade(numericScore);
361
+ return {
362
+ healthScore: {
363
+ grade: overallGrade,
364
+ numericScore,
365
+ dimensions,
366
+ },
367
+ securityIssues,
368
+ circularDeps,
369
+ };
370
+ }
371
+ //# sourceMappingURL=audit-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-analysis.js","sourceRoot":"","sources":["../../../src/server/audit-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { resolveBudget } from "../../utils/budget.js";
2
+ import { analyzeCodebase } from "../audit-analysis.js";
2
3
  export const auditTool = {
3
4
  name: "sverklo_audit",
4
5
  description: "Project report: god nodes, hub files, orphans, language mix, memory health.",
@@ -100,6 +101,8 @@ export function handleAudit(indexer, args) {
100
101
  const sortedLangs = Object.entries(languages)
101
102
  .sort((a, b) => b[1] - a[1])
102
103
  .slice(0, 5);
104
+ // ─── Run analysis (health score, security, circular deps) ───
105
+ const analysis = analyzeCodebase(indexer);
103
106
  // ─── Build markdown report with section-level budgeting ───
104
107
  const sections = [];
105
108
  let usedTokens = 0;
@@ -114,9 +117,21 @@ export function handleAudit(indexer, args) {
114
117
  usedTokens += cost;
115
118
  return true;
116
119
  }
117
- // Header + Overview
120
+ // Header with grade + health score table
121
+ {
122
+ const hsLines = [];
123
+ hsLines.push(`# Sverklo Project Audit — Grade: ${analysis.healthScore.grade}\n`);
124
+ hsLines.push(`| Dimension | Score | Detail |`);
125
+ hsLines.push(`|---|---|---|`);
126
+ for (const d of analysis.healthScore.dimensions) {
127
+ hsLines.push(`| ${d.name} | ${d.grade} | ${d.detail} |`);
128
+ }
129
+ hsLines.push("");
130
+ if (!addSection(hsLines.join("\n")))
131
+ return sections.join("\n");
132
+ }
133
+ // Overview
118
134
  const overviewLines = [];
119
- overviewLines.push(`# Sverklo Project Audit\n`);
120
135
  overviewLines.push(`## Overview\n`);
121
136
  overviewLines.push(`- **${files.length}** files indexed`);
122
137
  overviewLines.push(`- **${chunkCount}** code symbols extracted`);
@@ -198,6 +213,51 @@ export function handleAudit(indexer, args) {
198
213
  if (!addSection(memLines.join("\n")))
199
214
  return sections.join("\n");
200
215
  }
216
+ // Circular Dependencies
217
+ if (analysis.circularDeps.length > 0) {
218
+ const cycleLines = [];
219
+ cycleLines.push(`## Circular Dependencies (${analysis.circularDeps.length} cycle${analysis.circularDeps.length === 1 ? "" : "s"})`);
220
+ cycleLines.push("");
221
+ for (let i = 0; i < analysis.circularDeps.length; i++) {
222
+ const cycle = analysis.circularDeps[i];
223
+ // Show as: a -> b -> c -> a (closing the loop)
224
+ const display = [...cycle, cycle[0]].join(" -> ");
225
+ cycleLines.push(`${i + 1}. ${display}`);
226
+ }
227
+ cycleLines.push("");
228
+ if (!addSection(cycleLines.join("\n")))
229
+ return sections.join("\n");
230
+ }
231
+ // Security Issues
232
+ if (analysis.securityIssues.length > 0) {
233
+ const secLines = [];
234
+ secLines.push(`## Security Issues (${analysis.securityIssues.length} found)`);
235
+ secLines.push("");
236
+ // Group by severity
237
+ const bySeverity = new Map();
238
+ for (const issue of analysis.securityIssues) {
239
+ if (!bySeverity.has(issue.severity))
240
+ bySeverity.set(issue.severity, []);
241
+ bySeverity.get(issue.severity).push(issue);
242
+ }
243
+ const severityOrder = ["critical", "high", "medium", "low"];
244
+ for (const sev of severityOrder) {
245
+ const group = bySeverity.get(sev);
246
+ if (!group || group.length === 0)
247
+ continue;
248
+ secLines.push(`### ${sev.charAt(0).toUpperCase() + sev.slice(1)} (${group.length})`);
249
+ for (const issue of group.slice(0, 10)) {
250
+ secLines.push(`- **${issue.pattern}** — \`${issue.file}:${issue.line}\``);
251
+ secLines.push(` \`${issue.snippet}\``);
252
+ }
253
+ if (group.length > 10) {
254
+ secLines.push(`- _...and ${group.length - 10} more_`);
255
+ }
256
+ secLines.push("");
257
+ }
258
+ if (!addSection(secLines.join("\n")))
259
+ return sections.join("\n");
260
+ }
201
261
  // Suggested queries
202
262
  if (godNodes.length > 0) {
203
263
  const suggestLines = [];
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../src/server/tools/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../src/server/tools/audit.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sverklo",
3
3
  "mcpName": "io.github.sverklo/sverklo",
4
- "version": "0.7.2",
4
+ "version": "0.8.0",
5
5
  "description": "Sverklo — local-first code intelligence MCP server. Diff-aware MR review, risk scoring, hybrid semantic search, PageRank ranking, persistent memory. Zero config.",
6
6
  "type": "module",
7
7
  "bin": {