@mohantn/gate-keeper 2.1.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/.github/instructions/dotnet-api-integration.instructions.md +416 -0
- package/.github/instructions/dotnet-development.instructions.md +353 -0
- package/.github/instructions/dotnet-testing.instructions.md +406 -0
- package/.github/instructions/gate-keeper.instructions.md +91 -0
- package/.github/instructions/react-development.instructions.md +315 -0
- package/.github/instructions/react-testing-optimization.instructions.md +373 -0
- package/.github/instructions/uiux.instructions.md +261 -0
- package/LICENSE +21 -0
- package/README.md +181 -0
- package/dist/analyzer/coverage-analyzer.d.ts +126 -0
- package/dist/analyzer/coverage-analyzer.d.ts.map +1 -0
- package/dist/analyzer/coverage-analyzer.js +633 -0
- package/dist/analyzer/coverage-analyzer.js.map +1 -0
- package/dist/analyzer/csharp-analyzer.d.ts +28 -0
- package/dist/analyzer/csharp-analyzer.d.ts.map +1 -0
- package/dist/analyzer/csharp-analyzer.js +437 -0
- package/dist/analyzer/csharp-analyzer.js.map +1 -0
- package/dist/analyzer/pattern-detector.d.ts +5 -0
- package/dist/analyzer/pattern-detector.d.ts.map +1 -0
- package/dist/analyzer/pattern-detector.js +74 -0
- package/dist/analyzer/pattern-detector.js.map +1 -0
- package/dist/analyzer/refactoring-advisor.d.ts +7 -0
- package/dist/analyzer/refactoring-advisor.d.ts.map +1 -0
- package/dist/analyzer/refactoring-advisor.js +280 -0
- package/dist/analyzer/refactoring-advisor.js.map +1 -0
- package/dist/analyzer/sonar-eslint-runner.d.ts +3 -0
- package/dist/analyzer/sonar-eslint-runner.d.ts.map +1 -0
- package/dist/analyzer/sonar-eslint-runner.js +136 -0
- package/dist/analyzer/sonar-eslint-runner.js.map +1 -0
- package/dist/analyzer/sonar-rule-map.d.ts +19 -0
- package/dist/analyzer/sonar-rule-map.d.ts.map +1 -0
- package/dist/analyzer/sonar-rule-map.js +67 -0
- package/dist/analyzer/sonar-rule-map.js.map +1 -0
- package/dist/analyzer/string-analyzer.d.ts +27 -0
- package/dist/analyzer/string-analyzer.d.ts.map +1 -0
- package/dist/analyzer/string-analyzer.js +274 -0
- package/dist/analyzer/string-analyzer.js.map +1 -0
- package/dist/analyzer/typescript-analyzer.d.ts +27 -0
- package/dist/analyzer/typescript-analyzer.d.ts.map +1 -0
- package/dist/analyzer/typescript-analyzer.js +437 -0
- package/dist/analyzer/typescript-analyzer.js.map +1 -0
- package/dist/analyzer/universal-analyzer.d.ts +10 -0
- package/dist/analyzer/universal-analyzer.d.ts.map +1 -0
- package/dist/analyzer/universal-analyzer.js +155 -0
- package/dist/analyzer/universal-analyzer.js.map +1 -0
- package/dist/cache/quality-cache.d.ts +119 -0
- package/dist/cache/quality-cache.d.ts.map +1 -0
- package/dist/cache/quality-cache.js +130 -0
- package/dist/cache/quality-cache.js.map +1 -0
- package/dist/cache/sqlite-cache.d.ts +43 -0
- package/dist/cache/sqlite-cache.d.ts.map +1 -0
- package/dist/cache/sqlite-cache.js +346 -0
- package/dist/cache/sqlite-cache.js.map +1 -0
- package/dist/cli/query-repl.d.ts +37 -0
- package/dist/cli/query-repl.d.ts.map +1 -0
- package/dist/cli/query-repl.js +298 -0
- package/dist/cli/query-repl.js.map +1 -0
- package/dist/cli/repl-algorithms.d.ts +49 -0
- package/dist/cli/repl-algorithms.d.ts.map +1 -0
- package/dist/cli/repl-algorithms.js +147 -0
- package/dist/cli/repl-algorithms.js.map +1 -0
- package/dist/cli/setup-core.d.ts +38 -0
- package/dist/cli/setup-core.d.ts.map +1 -0
- package/dist/cli/setup-core.js +427 -0
- package/dist/cli/setup-core.js.map +1 -0
- package/dist/cli/setup.d.ts +25 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +159 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli-entry.d.ts +19 -0
- package/dist/cli-entry.d.ts.map +1 -0
- package/dist/cli-entry.js +178 -0
- package/dist/cli-entry.js.map +1 -0
- package/dist/daemon/watch-mode.d.ts +41 -0
- package/dist/daemon/watch-mode.d.ts.map +1 -0
- package/dist/daemon/watch-mode.js +163 -0
- package/dist/daemon/watch-mode.js.map +1 -0
- package/dist/daemon.d.ts +24 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +357 -0
- package/dist/daemon.js.map +1 -0
- package/dist/github/app.d.ts +34 -0
- package/dist/github/app.d.ts.map +1 -0
- package/dist/github/app.js +261 -0
- package/dist/github/app.js.map +1 -0
- package/dist/github/commenter.d.ts +67 -0
- package/dist/github/commenter.d.ts.map +1 -0
- package/dist/github/commenter.js +155 -0
- package/dist/github/commenter.js.map +1 -0
- package/dist/graph/dependency-graph.d.ts +28 -0
- package/dist/graph/dependency-graph.d.ts.map +1 -0
- package/dist/graph/dependency-graph.js +198 -0
- package/dist/graph/dependency-graph.js.map +1 -0
- package/dist/graph/global-graph.d.ts +65 -0
- package/dist/graph/global-graph.d.ts.map +1 -0
- package/dist/graph/global-graph.js +153 -0
- package/dist/graph/global-graph.js.map +1 -0
- package/dist/graph/graph-algorithms.d.ts +90 -0
- package/dist/graph/graph-algorithms.d.ts.map +1 -0
- package/dist/graph/graph-algorithms.js +180 -0
- package/dist/graph/graph-algorithms.js.map +1 -0
- package/dist/graph/graph-export.d.ts +68 -0
- package/dist/graph/graph-export.d.ts.map +1 -0
- package/dist/graph/graph-export.js +264 -0
- package/dist/graph/graph-export.js.map +1 -0
- package/dist/graph/graph-report.d.ts +34 -0
- package/dist/graph/graph-report.d.ts.map +1 -0
- package/dist/graph/graph-report.js +136 -0
- package/dist/graph/graph-report.js.map +1 -0
- package/dist/graph/graph-summary.d.ts +68 -0
- package/dist/graph/graph-summary.d.ts.map +1 -0
- package/dist/graph/graph-summary.js +213 -0
- package/dist/graph/graph-summary.js.map +1 -0
- package/dist/graph/graphify-ignore.d.ts +32 -0
- package/dist/graph/graphify-ignore.d.ts.map +1 -0
- package/dist/graph/graphify-ignore.js +124 -0
- package/dist/graph/graphify-ignore.js.map +1 -0
- package/dist/graph/question-suggester.d.ts +30 -0
- package/dist/graph/question-suggester.d.ts.map +1 -0
- package/dist/graph/question-suggester.js +113 -0
- package/dist/graph/question-suggester.js.map +1 -0
- package/dist/graph/relationship-extractor.d.ts +40 -0
- package/dist/graph/relationship-extractor.d.ts.map +1 -0
- package/dist/graph/relationship-extractor.js +254 -0
- package/dist/graph/relationship-extractor.js.map +1 -0
- package/dist/graph/relationship-types.d.ts +24 -0
- package/dist/graph/relationship-types.d.ts.map +1 -0
- package/dist/graph/relationship-types.js +21 -0
- package/dist/graph/relationship-types.js.map +1 -0
- package/dist/graph/surprising-connections.d.ts +39 -0
- package/dist/graph/surprising-connections.d.ts.map +1 -0
- package/dist/graph/surprising-connections.js +127 -0
- package/dist/graph/surprising-connections.js.map +1 -0
- package/dist/hook-pre-tool-use.d.ts +14 -0
- package/dist/hook-pre-tool-use.d.ts.map +1 -0
- package/dist/hook-pre-tool-use.js +167 -0
- package/dist/hook-pre-tool-use.js.map +1 -0
- package/dist/hook-receiver.d.ts +29 -0
- package/dist/hook-receiver.d.ts.map +1 -0
- package/dist/hook-receiver.js +327 -0
- package/dist/hook-receiver.js.map +1 -0
- package/dist/hooks/git-hooks.d.ts +30 -0
- package/dist/hooks/git-hooks.d.ts.map +1 -0
- package/dist/hooks/git-hooks.js +179 -0
- package/dist/hooks/git-hooks.js.map +1 -0
- package/dist/mcp/cache-preload.d.ts +29 -0
- package/dist/mcp/cache-preload.d.ts.map +1 -0
- package/dist/mcp/cache-preload.js +103 -0
- package/dist/mcp/cache-preload.js.map +1 -0
- package/dist/mcp/handlers/analysis.d.ts +4 -0
- package/dist/mcp/handlers/analysis.d.ts.map +1 -0
- package/dist/mcp/handlers/analysis.js +196 -0
- package/dist/mcp/handlers/analysis.js.map +1 -0
- package/dist/mcp/handlers/context.d.ts +25 -0
- package/dist/mcp/handlers/context.d.ts.map +1 -0
- package/dist/mcp/handlers/context.js +382 -0
- package/dist/mcp/handlers/context.js.map +1 -0
- package/dist/mcp/handlers/graph-intelligence.d.ts +26 -0
- package/dist/mcp/handlers/graph-intelligence.d.ts.map +1 -0
- package/dist/mcp/handlers/graph-intelligence.js +371 -0
- package/dist/mcp/handlers/graph-intelligence.js.map +1 -0
- package/dist/mcp/handlers/graph-query.d.ts +25 -0
- package/dist/mcp/handlers/graph-query.d.ts.map +1 -0
- package/dist/mcp/handlers/graph-query.js +410 -0
- package/dist/mcp/handlers/graph-query.js.map +1 -0
- package/dist/mcp/handlers/graph.d.ts +5 -0
- package/dist/mcp/handlers/graph.d.ts.map +1 -0
- package/dist/mcp/handlers/graph.js +283 -0
- package/dist/mcp/handlers/graph.js.map +1 -0
- package/dist/mcp/handlers/impact-format.d.ts +9 -0
- package/dist/mcp/handlers/impact-format.d.ts.map +1 -0
- package/dist/mcp/handlers/impact-format.js +189 -0
- package/dist/mcp/handlers/impact-format.js.map +1 -0
- package/dist/mcp/handlers/impact.d.ts +4 -0
- package/dist/mcp/handlers/impact.d.ts.map +1 -0
- package/dist/mcp/handlers/impact.js +139 -0
- package/dist/mcp/handlers/impact.js.map +1 -0
- package/dist/mcp/handlers/improvement.d.ts +4 -0
- package/dist/mcp/handlers/improvement.d.ts.map +1 -0
- package/dist/mcp/handlers/improvement.js +136 -0
- package/dist/mcp/handlers/improvement.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +14 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -0
- package/dist/mcp/handlers/index.js +36 -0
- package/dist/mcp/handlers/index.js.map +1 -0
- package/dist/mcp/handlers/platform-installer.d.ts +10 -0
- package/dist/mcp/handlers/platform-installer.d.ts.map +1 -0
- package/dist/mcp/handlers/platform-installer.js +168 -0
- package/dist/mcp/handlers/platform-installer.js.map +1 -0
- package/dist/mcp/handlers/pr-review.d.ts +33 -0
- package/dist/mcp/handlers/pr-review.d.ts.map +1 -0
- package/dist/mcp/handlers/pr-review.js +170 -0
- package/dist/mcp/handlers/pr-review.js.map +1 -0
- package/dist/mcp/handlers/shared.d.ts +20 -0
- package/dist/mcp/handlers/shared.d.ts.map +1 -0
- package/dist/mcp/handlers/shared.js +27 -0
- package/dist/mcp/handlers/shared.js.map +1 -0
- package/dist/mcp/handlers/types.d.ts +46 -0
- package/dist/mcp/handlers/types.d.ts.map +1 -0
- package/dist/mcp/handlers/types.js +3 -0
- package/dist/mcp/handlers/types.js.map +1 -0
- package/dist/mcp/helpers.d.ts +36 -0
- package/dist/mcp/helpers.d.ts.map +1 -0
- package/dist/mcp/helpers.js +199 -0
- package/dist/mcp/helpers.js.map +1 -0
- package/dist/mcp/installer.d.ts +22 -0
- package/dist/mcp/installer.d.ts.map +1 -0
- package/dist/mcp/installer.js +341 -0
- package/dist/mcp/installer.js.map +1 -0
- package/dist/mcp/server.d.ts +111 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +216 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/token-tracker.d.ts +47 -0
- package/dist/mcp/token-tracker.d.ts.map +1 -0
- package/dist/mcp/token-tracker.js +93 -0
- package/dist/mcp/token-tracker.js.map +1 -0
- package/dist/quality-loop/file-lock.d.ts +12 -0
- package/dist/quality-loop/file-lock.d.ts.map +1 -0
- package/dist/quality-loop/file-lock.js +38 -0
- package/dist/quality-loop/file-lock.js.map +1 -0
- package/dist/quality-loop/fix-worker.d.ts +44 -0
- package/dist/quality-loop/fix-worker.d.ts.map +1 -0
- package/dist/quality-loop/fix-worker.js +414 -0
- package/dist/quality-loop/fix-worker.js.map +1 -0
- package/dist/quality-loop/orchestrator.d.ts +137 -0
- package/dist/quality-loop/orchestrator.d.ts.map +1 -0
- package/dist/quality-loop/orchestrator.js +894 -0
- package/dist/quality-loop/orchestrator.js.map +1 -0
- package/dist/quality-loop/queue-manager.d.ts +45 -0
- package/dist/quality-loop/queue-manager.d.ts.map +1 -0
- package/dist/quality-loop/queue-manager.js +173 -0
- package/dist/quality-loop/queue-manager.js.map +1 -0
- package/dist/rating/rating-calculator.d.ts +15 -0
- package/dist/rating/rating-calculator.d.ts.map +1 -0
- package/dist/rating/rating-calculator.js +136 -0
- package/dist/rating/rating-calculator.js.map +1 -0
- package/dist/types/agent.d.ts +49 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +7 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types.d.ts +156 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util/fix-text.d.ts +7 -0
- package/dist/util/fix-text.d.ts.map +1 -0
- package/dist/util/fix-text.js +13 -0
- package/dist/util/fix-text.js.map +1 -0
- package/dist/viz/graph-viz.d.ts +40 -0
- package/dist/viz/graph-viz.d.ts.map +1 -0
- package/dist/viz/graph-viz.js +332 -0
- package/dist/viz/graph-viz.js.map +1 -0
- package/dist/viz/viz-helpers.d.ts +13 -0
- package/dist/viz/viz-helpers.d.ts.map +1 -0
- package/dist/viz/viz-helpers.js +134 -0
- package/dist/viz/viz-helpers.js.map +1 -0
- package/dist/viz/viz-routes.d.ts +28 -0
- package/dist/viz/viz-routes.d.ts.map +1 -0
- package/dist/viz/viz-routes.js +333 -0
- package/dist/viz/viz-routes.js.map +1 -0
- package/dist/viz/viz-scanner.d.ts +20 -0
- package/dist/viz/viz-scanner.d.ts.map +1 -0
- package/dist/viz/viz-scanner.js +241 -0
- package/dist/viz/viz-scanner.js.map +1 -0
- package/dist/viz/viz-server.d.ts +38 -0
- package/dist/viz/viz-server.d.ts.map +1 -0
- package/dist/viz/viz-server.js +240 -0
- package/dist/viz/viz-server.js.map +1 -0
- package/package.json +89 -0
- package/scripts/postinstall.js +28 -0
- package/scripts/setup.sh +113 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.globToRegex = globToRegex;
|
|
37
|
+
exports.extToConfigLang = extToConfigLang;
|
|
38
|
+
exports.shouldExcludeFile = shouldExcludeFile;
|
|
39
|
+
exports.walkFiles = walkFiles;
|
|
40
|
+
exports.getGitDiffStats = getGitDiffStats;
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const SCAN_EXCLUDE_DIRS = new Set([
|
|
45
|
+
'node_modules', 'dist', 'build', '.git', '.next', 'out',
|
|
46
|
+
'coverage', 'vendor', '.cache', '__pycache__', 'bin', 'obj'
|
|
47
|
+
]);
|
|
48
|
+
/** Convert a simple glob pattern to a RegExp. Supports * and ** wildcards. */
|
|
49
|
+
function globToRegex(pattern) {
|
|
50
|
+
const escaped = pattern
|
|
51
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
52
|
+
.replace(/\*\*/g, '__GLOBSTAR__')
|
|
53
|
+
.replace(/\*/g, '[^/]*')
|
|
54
|
+
.replace(/__GLOBSTAR__/g, '.*');
|
|
55
|
+
return new RegExp(`(?:^|/)${escaped}$`, 'i');
|
|
56
|
+
}
|
|
57
|
+
/** Map file extension to config language key */
|
|
58
|
+
function extToConfigLang(ext) {
|
|
59
|
+
if (ext === '.cs')
|
|
60
|
+
return 'csharp';
|
|
61
|
+
if (['.ts', '.tsx', '.jsx', '.js'].includes(ext))
|
|
62
|
+
return 'typescript';
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/** Check if a file path should be excluded by scan patterns */
|
|
66
|
+
function shouldExcludeFile(filePath, ext, patterns) {
|
|
67
|
+
if (!patterns)
|
|
68
|
+
return false;
|
|
69
|
+
const fileName = filePath.split('/').pop() ?? filePath;
|
|
70
|
+
if (patterns.global) {
|
|
71
|
+
for (const p of patterns.global) {
|
|
72
|
+
const re = globToRegex(p);
|
|
73
|
+
if (re.test(filePath) || re.test(fileName))
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const lang = extToConfigLang(ext);
|
|
78
|
+
const langPatterns = lang ? patterns[lang] : null;
|
|
79
|
+
if (langPatterns) {
|
|
80
|
+
for (const p of langPatterns) {
|
|
81
|
+
const re = globToRegex(p);
|
|
82
|
+
if (re.test(filePath) || re.test(fileName))
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
function* walkFiles(dir, filter) {
|
|
89
|
+
let entries;
|
|
90
|
+
try {
|
|
91
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
const fullPath = path.join(dir, entry.name);
|
|
98
|
+
if (entry.isDirectory()) {
|
|
99
|
+
if (SCAN_EXCLUDE_DIRS.has(entry.name) || entry.name.startsWith('.'))
|
|
100
|
+
continue;
|
|
101
|
+
yield* walkFiles(fullPath, filter);
|
|
102
|
+
}
|
|
103
|
+
else if (entry.isFile()) {
|
|
104
|
+
if (!filter || filter(fullPath))
|
|
105
|
+
yield fullPath;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function getGitDiffStats(filePath) {
|
|
110
|
+
try {
|
|
111
|
+
const numstat = (0, child_process_1.spawnSync)('git', ['diff', '--numstat', 'HEAD', '--', filePath], {
|
|
112
|
+
encoding: 'utf8', timeout: 5000
|
|
113
|
+
});
|
|
114
|
+
const line = numstat.stdout?.trim();
|
|
115
|
+
if (line) {
|
|
116
|
+
const parts = line.split('\t');
|
|
117
|
+
return { added: parseInt(parts[0], 10) || 0, removed: parseInt(parts[1], 10) || 0 };
|
|
118
|
+
}
|
|
119
|
+
const status = (0, child_process_1.spawnSync)('git', ['status', '--porcelain', '--', filePath], {
|
|
120
|
+
encoding: 'utf8', timeout: 5000
|
|
121
|
+
});
|
|
122
|
+
const statusLine = status.stdout?.trim() ?? '';
|
|
123
|
+
if (statusLine.startsWith('??') || statusLine.startsWith('A ')) {
|
|
124
|
+
const wc = (0, child_process_1.spawnSync)('wc', ['-l', filePath], { encoding: 'utf8' });
|
|
125
|
+
const lines = parseInt(wc.stdout?.trim().split(' ')[0] ?? '0', 10) || 0;
|
|
126
|
+
return { added: lines, removed: 0 };
|
|
127
|
+
}
|
|
128
|
+
return { added: 0, removed: 0 };
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=viz-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viz-helpers.js","sourceRoot":"","sources":["../../src/viz/viz-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { DependencyGraph } from '../graph/dependency-graph';
|
|
3
|
+
import { SqliteCache } from '../cache/sqlite-cache';
|
|
4
|
+
import { RatingCalculator } from '../rating/rating-calculator';
|
|
5
|
+
import { PatternDetector } from '../analyzer/pattern-detector';
|
|
6
|
+
import { RefactoringAdvisor } from '../analyzer/refactoring-advisor';
|
|
7
|
+
import { Config, GraphData } from '../types';
|
|
8
|
+
interface RouteDeps {
|
|
9
|
+
graphs: Map<string, DependencyGraph>;
|
|
10
|
+
cache: SqliteCache;
|
|
11
|
+
config: Config;
|
|
12
|
+
ratingCalc: RatingCalculator;
|
|
13
|
+
patternDetector: PatternDetector;
|
|
14
|
+
refactoringAdvisor: RefactoringAdvisor;
|
|
15
|
+
scanning: () => boolean;
|
|
16
|
+
setScanning: (v: boolean) => void;
|
|
17
|
+
scanFn: (force: boolean) => Promise<void>;
|
|
18
|
+
scanRepoFn: (repo: string, force: boolean) => Promise<void>;
|
|
19
|
+
mergedGraphData: () => GraphData;
|
|
20
|
+
graphFor: (repo: string) => DependencyGraph;
|
|
21
|
+
mergedOverallRating: () => number;
|
|
22
|
+
appendScanLog: (msg: string, level?: 'info' | 'warn' | 'error') => void;
|
|
23
|
+
getLiveConfig: () => Config;
|
|
24
|
+
workDir: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function registerRoutes(app: express.Application, deps: RouteDeps): void;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=viz-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viz-routes.d.ts","sourceRoot":"","sources":["../../src/viz/viz-routes.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAa,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAM7C,UAAU,SAAS;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrC,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,eAAe,EAAE,MAAM,SAAS,CAAC;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAC5C,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAClC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC;IACxE,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAmR9E"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerRoutes = registerRoutes;
|
|
40
|
+
const express_1 = __importDefault(require("express"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const viz_helpers_1 = require("./viz-helpers");
|
|
43
|
+
const GK_DIR = path.join(process.env.HOME ?? '/tmp', '.gate-keeper');
|
|
44
|
+
const CONFIG_FILE = path.join(GK_DIR, 'config.json');
|
|
45
|
+
function registerRoutes(app, deps) {
|
|
46
|
+
const dashboardBuild = path.join(__dirname, '../../dashboard/dist');
|
|
47
|
+
app.use('/viz', express_1.default.static(dashboardBuild));
|
|
48
|
+
app.get('/', (_req, res) => res.redirect('/viz'));
|
|
49
|
+
app.get('/api/repos', (_req, res) => {
|
|
50
|
+
const registered = deps.cache.getAllRepositories(true);
|
|
51
|
+
const analyzedRoots = new Set(deps.cache.getRepos());
|
|
52
|
+
const repoMap = new Map();
|
|
53
|
+
for (const r of registered) {
|
|
54
|
+
repoMap.set(r.path, {
|
|
55
|
+
repoRoot: r.path, label: r.name,
|
|
56
|
+
fileCount: deps.graphs.get(r.path)?.toGraphData().nodes.length ?? 0,
|
|
57
|
+
sessionType: r.sessionType
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
for (const repo of analyzedRoots) {
|
|
61
|
+
if (!repoMap.has(repo)) {
|
|
62
|
+
repoMap.set(repo, {
|
|
63
|
+
repoRoot: repo, label: path.basename(repo),
|
|
64
|
+
fileCount: deps.graphs.get(repo)?.toGraphData().nodes.length ?? 0,
|
|
65
|
+
sessionType: 'unknown'
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
res.json(Array.from(repoMap.values()));
|
|
70
|
+
});
|
|
71
|
+
app.get('/api/graph', (req, res) => {
|
|
72
|
+
const repo = req.query['repo'];
|
|
73
|
+
res.json(repo ? deps.graphFor(repo).toGraphData() : deps.mergedGraphData());
|
|
74
|
+
});
|
|
75
|
+
app.get('/api/hotspots', (req, res) => {
|
|
76
|
+
const repo = req.query['repo'];
|
|
77
|
+
if (repo) {
|
|
78
|
+
res.json(deps.graphFor(repo).findHotspots());
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const all = [];
|
|
82
|
+
for (const g of deps.graphs.values())
|
|
83
|
+
all.push(...g.findHotspots(10));
|
|
84
|
+
res.json(all.sort((a, b) => a.rating - b.rating).slice(0, 5));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
app.get('/api/trends', (req, res) => {
|
|
88
|
+
const filePath = req.query['file'];
|
|
89
|
+
const repo = req.query['repo'];
|
|
90
|
+
if (!filePath || !repo) {
|
|
91
|
+
res.status(400).json({ error: 'file and repo query params required' });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
res.json(deps.cache.getRatingHistory(filePath, repo));
|
|
95
|
+
});
|
|
96
|
+
app.get('/api/status', (req, res) => {
|
|
97
|
+
const repo = req.query['repo'];
|
|
98
|
+
const graph = repo ? deps.graphs.get(repo) : null;
|
|
99
|
+
res.json({
|
|
100
|
+
running: true, port: 5378,
|
|
101
|
+
overallRating: graph ? graph.overallRating() : deps.mergedOverallRating(),
|
|
102
|
+
cycles: graph ? graph.detectCycles().length : 0,
|
|
103
|
+
scanning: deps.scanning()
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
app.get('/api/cycles', (req, res) => {
|
|
107
|
+
const repo = req.query['repo'];
|
|
108
|
+
if (repo) {
|
|
109
|
+
res.json(deps.graphFor(repo).detectCycles());
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const cycles = [];
|
|
113
|
+
for (const g of deps.graphs.values())
|
|
114
|
+
cycles.push(...g.detectCycles());
|
|
115
|
+
res.json(cycles);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
app.post('/api/scan', (req, res) => {
|
|
119
|
+
if (deps.scanning()) {
|
|
120
|
+
res.status(409).json({ error: 'Scan already in progress' });
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const { repo } = req.body;
|
|
124
|
+
if (repo) {
|
|
125
|
+
res.json({ started: true, repo });
|
|
126
|
+
deps.scanRepoFn(repo, true).catch(err => console.error('[gate-keeper] Scan error:', err));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
res.json({ started: true, workDir: deps.workDir });
|
|
130
|
+
deps.scanFn(true).catch(err => console.error('[gate-keeper] Scan error:', err));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
app.get('/api/file-detail', (req, res) => {
|
|
134
|
+
const filePath = req.query['file'];
|
|
135
|
+
const repo = req.query['repo'];
|
|
136
|
+
if (!filePath || !repo) {
|
|
137
|
+
res.status(400).json({ error: 'file and repo query params required' });
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const analysis = deps.cache.get(filePath, repo);
|
|
141
|
+
if (!analysis) {
|
|
142
|
+
res.status(404).json({ error: 'File not in cache' });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const { breakdown } = deps.ratingCalc.calculateWithBreakdown(analysis.violations, analysis.metrics, analysis.dependencies);
|
|
146
|
+
const graph = deps.graphs.get(repo);
|
|
147
|
+
const cycles = graph ? graph.detectCycles() : [];
|
|
148
|
+
const refactoringHints = deps.refactoringAdvisor.suggest(analysis, cycles);
|
|
149
|
+
res.json({ analysis, ratingBreakdown: breakdown, gitDiff: (0, viz_helpers_1.getGitDiffStats)(filePath), refactoringHints });
|
|
150
|
+
});
|
|
151
|
+
app.get('/api/positions', (req, res) => {
|
|
152
|
+
const repo = req.query['repo'];
|
|
153
|
+
if (!repo) {
|
|
154
|
+
res.status(400).json({ error: 'repo param required' });
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
res.json(deps.cache.getNodePositions(repo));
|
|
158
|
+
});
|
|
159
|
+
app.post('/api/positions', (req, res) => {
|
|
160
|
+
const { repo, nodeId, x, y } = req.body;
|
|
161
|
+
if (!repo || !nodeId || x == null || y == null) {
|
|
162
|
+
res.status(400).json({ error: 'repo, nodeId, x, y required' });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
deps.cache.saveNodePosition(repo, nodeId, x, y);
|
|
166
|
+
res.json({ ok: true });
|
|
167
|
+
});
|
|
168
|
+
app.post('/api/clear', (req, res) => {
|
|
169
|
+
const { repo } = req.body;
|
|
170
|
+
if (!repo) {
|
|
171
|
+
res.status(400).json({ error: 'repo parameter required' });
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const deleted = deps.cache.clearRepo(repo);
|
|
175
|
+
deps.graphs.delete(repo);
|
|
176
|
+
console.error(`[gate-keeper] Cleared ${deleted} analyses for repo: ${repo}`);
|
|
177
|
+
res.json({ ok: true, deleted });
|
|
178
|
+
});
|
|
179
|
+
app.delete('/api/repos', (req, res) => {
|
|
180
|
+
const { repoRoot } = req.body;
|
|
181
|
+
if (!repoRoot) {
|
|
182
|
+
res.status(400).json({ error: 'repoRoot parameter required' });
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const repoRecord = deps.cache.getRepositoryByPath(repoRoot);
|
|
186
|
+
const deletedAnalyses = deps.cache.clearRepo(repoRoot);
|
|
187
|
+
deps.graphs.delete(repoRoot);
|
|
188
|
+
const deletedRepo = repoRecord ? deps.cache.deleteRepository(repoRecord.id) : 0;
|
|
189
|
+
console.error(`[gate-keeper] Deleted repo: ${repoRoot} (${deletedAnalyses} analyses, registry: ${deletedRepo})`);
|
|
190
|
+
res.json({ ok: true, deletedAnalyses, deletedRepo });
|
|
191
|
+
});
|
|
192
|
+
app.get('/api/exclude-patterns', (req, res) => {
|
|
193
|
+
const repo = req.query['repo'];
|
|
194
|
+
if (!repo) {
|
|
195
|
+
res.status(400).json({ error: 'repo param required' });
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
res.json(deps.cache.getExcludePatterns(repo));
|
|
199
|
+
});
|
|
200
|
+
app.post('/api/exclude-patterns', (req, res) => {
|
|
201
|
+
const { repo, pattern, label } = req.body;
|
|
202
|
+
if (!repo || !pattern) {
|
|
203
|
+
res.status(400).json({ error: 'repo and pattern required' });
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (pattern.length > 200) {
|
|
207
|
+
res.status(400).json({ error: 'Pattern too long (max 200 chars)' });
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const id = deps.cache.addExcludePattern(repo, pattern, label);
|
|
211
|
+
res.json({ ok: true, id });
|
|
212
|
+
});
|
|
213
|
+
app.delete('/api/exclude-patterns/:id', (req, res) => {
|
|
214
|
+
const id = parseInt(req.params['id'], 10);
|
|
215
|
+
if (isNaN(id)) {
|
|
216
|
+
res.status(400).json({ error: 'invalid id' });
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const ok = deps.cache.removeExcludePattern(id);
|
|
220
|
+
res.json({ ok });
|
|
221
|
+
});
|
|
222
|
+
app.get('/api/scan-config', (_req, res) => {
|
|
223
|
+
res.json({ scanExcludePatterns: deps.config.scanExcludePatterns ?? { global: [], csharp: [], typescript: [] } });
|
|
224
|
+
});
|
|
225
|
+
app.get('/api/scan-logs', (_req, res) => { res.json([]); });
|
|
226
|
+
app.get('/api/config', (_req, res) => { res.json(deps.getLiveConfig()); });
|
|
227
|
+
app.put('/api/config', (req, res) => {
|
|
228
|
+
const payload = req.body;
|
|
229
|
+
const current = deps.getLiveConfig();
|
|
230
|
+
const merged = {
|
|
231
|
+
minRating: typeof payload.minRating === 'number' ? payload.minRating : current.minRating,
|
|
232
|
+
scanExcludePatterns: {
|
|
233
|
+
global: payload.scanExcludePatterns?.global ?? current.scanExcludePatterns?.global ?? [],
|
|
234
|
+
csharp: payload.scanExcludePatterns?.csharp ?? current.scanExcludePatterns?.csharp ?? [],
|
|
235
|
+
typescript: payload.scanExcludePatterns?.typescript ?? current.scanExcludePatterns?.typescript ?? [],
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
if (Number.isNaN(merged.minRating) || merged.minRating < 0 || merged.minRating > 10) {
|
|
239
|
+
res.status(400).json({ error: 'minRating must be between 0 and 10' });
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
243
|
+
const fs = require('fs');
|
|
244
|
+
fs.mkdirSync(GK_DIR, { recursive: true });
|
|
245
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2));
|
|
246
|
+
deps.appendScanLog('Configuration updated', 'info');
|
|
247
|
+
res.json({ ok: true, config: merged });
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
251
|
+
res.status(500).json({ error: msg });
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
app.get('/api/patterns', (req, res) => {
|
|
255
|
+
const repo = req.query['repo'];
|
|
256
|
+
const analyses = deps.cache.getAll(repo);
|
|
257
|
+
const reports = deps.patternDetector.detect(analyses);
|
|
258
|
+
res.json(reports);
|
|
259
|
+
});
|
|
260
|
+
/**
|
|
261
|
+
* GET /api/impact-set?file=...&repo=...&depth=2
|
|
262
|
+
*
|
|
263
|
+
* Returns the same data as the get_impact_set MCP tool — a depth-bounded BFS
|
|
264
|
+
* over reverse dependencies. Used by the PreToolUse hook to check edit safety.
|
|
265
|
+
*/
|
|
266
|
+
app.get('/api/impact-set', (req, res) => {
|
|
267
|
+
const filePath = req.query['file'];
|
|
268
|
+
const repo = req.query['repo'];
|
|
269
|
+
const depth = Math.min(Number(req.query['depth'] ?? 2), 5);
|
|
270
|
+
if (!filePath || !repo) {
|
|
271
|
+
res.status(400).json({ error: 'file and repo query params required' });
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
const graph = deps.graphs.get(repo);
|
|
275
|
+
if (!graph) {
|
|
276
|
+
res.json({ filePath, depth, affected: [], fragileCount: 0, riskScore: 0 });
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const gd = graph.toGraphData();
|
|
280
|
+
const revAdj = new Map();
|
|
281
|
+
for (const e of gd.edges) {
|
|
282
|
+
const sources = revAdj.get(e.target) ?? [];
|
|
283
|
+
sources.push(e.source);
|
|
284
|
+
revAdj.set(e.target, sources);
|
|
285
|
+
}
|
|
286
|
+
const ratings = new Map(gd.nodes.map(n => [n.id, n.rating]));
|
|
287
|
+
const fileNode = gd.nodes.find(n => n.id === filePath);
|
|
288
|
+
// BFS over reverse adjacency
|
|
289
|
+
const visited = new Set();
|
|
290
|
+
const queue = [{ id: filePath, d: 0 }];
|
|
291
|
+
const affected = [];
|
|
292
|
+
while (queue.length > 0) {
|
|
293
|
+
const { id, d } = queue.shift();
|
|
294
|
+
if (d > depth)
|
|
295
|
+
continue;
|
|
296
|
+
if (id !== filePath) {
|
|
297
|
+
const r = ratings.get(id) ?? 10;
|
|
298
|
+
affected.push({
|
|
299
|
+
path: id, depth: d,
|
|
300
|
+
severity: d === 1 ? 'direct' : 'indirect',
|
|
301
|
+
rating: r, fragile: r < 6,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
for (const dependent of revAdj.get(id) ?? []) {
|
|
305
|
+
if (!visited.has(dependent) && dependent !== filePath) {
|
|
306
|
+
visited.add(dependent);
|
|
307
|
+
if (d < depth)
|
|
308
|
+
queue.push({ id: dependent, d: d + 1 });
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
const fragileCount = affected.filter(e => e.fragile).length;
|
|
313
|
+
const riskScore = fragileCount >= 3 ? 10 : fragileCount >= 1 ? 5 : 0;
|
|
314
|
+
const verdict = fragileCount >= 3 ? 'block' : fragileCount >= 1 ? 'warn' : 'safe';
|
|
315
|
+
const fileRating = fileNode?.rating ?? null;
|
|
316
|
+
const directDepCount = affected.filter(e => e.severity === 'direct').length;
|
|
317
|
+
res.json({
|
|
318
|
+
filePath, depth,
|
|
319
|
+
affected,
|
|
320
|
+
fragileCount,
|
|
321
|
+
directDependents: directDepCount,
|
|
322
|
+
riskScore,
|
|
323
|
+
verdict,
|
|
324
|
+
fileRating,
|
|
325
|
+
reason: verdict === 'block'
|
|
326
|
+
? `${fragileCount} fragile dependents — high risk of cascading failures`
|
|
327
|
+
: verdict === 'warn'
|
|
328
|
+
? `${fragileCount} fragile dependent(s) — verify after change`
|
|
329
|
+
: 'Low blast radius',
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=viz-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viz-routes.js","sourceRoot":"","sources":["../../src/viz/viz-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DependencyGraph } from '../graph/dependency-graph';
|
|
2
|
+
import { SqliteCache } from '../cache/sqlite-cache';
|
|
3
|
+
import { UniversalAnalyzer } from '../analyzer/universal-analyzer';
|
|
4
|
+
import { Config, WSMessage } from '../types';
|
|
5
|
+
interface ScannerDeps {
|
|
6
|
+
cache: SqliteCache;
|
|
7
|
+
analyzer: UniversalAnalyzer;
|
|
8
|
+
config: Config;
|
|
9
|
+
workDir: string;
|
|
10
|
+
graphs: Map<string, DependencyGraph>;
|
|
11
|
+
graphFor: (repo: string) => DependencyGraph;
|
|
12
|
+
broadcast: (msg: WSMessage, repoFilter?: string) => void;
|
|
13
|
+
appendScanLog: (msg: string, level?: 'info' | 'warn' | 'error') => void;
|
|
14
|
+
getScanning: () => boolean;
|
|
15
|
+
setScanning: (v: boolean) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function scan(deps: ScannerDeps): Promise<void>;
|
|
18
|
+
export declare function scanRepo(deps: ScannerDeps, repoRoot: string, force?: boolean): Promise<void>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=viz-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viz-scanner.d.ts","sourceRoot":"","sources":["../../src/viz/viz-scanner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAgB,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI3D,UAAU,WAAW;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAC5C,SAAS,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC;IACxE,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC;AAWD,wBAAsB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G3D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FhG"}
|