ghostpatch 1.0.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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +213 -0
  3. package/__tests__/detectors.test.ts +224 -0
  4. package/__tests__/rules.test.ts +117 -0
  5. package/__tests__/scanner.test.ts +222 -0
  6. package/dist/ai/anthropic.d.ts +11 -0
  7. package/dist/ai/anthropic.d.ts.map +1 -0
  8. package/dist/ai/anthropic.js +76 -0
  9. package/dist/ai/anthropic.js.map +1 -0
  10. package/dist/ai/huggingface.d.ts +12 -0
  11. package/dist/ai/huggingface.d.ts.map +1 -0
  12. package/dist/ai/huggingface.js +95 -0
  13. package/dist/ai/huggingface.js.map +1 -0
  14. package/dist/ai/openai.d.ts +11 -0
  15. package/dist/ai/openai.d.ts.map +1 -0
  16. package/dist/ai/openai.js +71 -0
  17. package/dist/ai/openai.js.map +1 -0
  18. package/dist/ai/prompts.d.ts +5 -0
  19. package/dist/ai/prompts.d.ts.map +1 -0
  20. package/dist/ai/prompts.js +101 -0
  21. package/dist/ai/prompts.js.map +1 -0
  22. package/dist/ai/provider.d.ts +9 -0
  23. package/dist/ai/provider.d.ts.map +1 -0
  24. package/dist/ai/provider.js +66 -0
  25. package/dist/ai/provider.js.map +1 -0
  26. package/dist/cli/index.d.ts +3 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +318 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/core/reporter.d.ts +7 -0
  31. package/dist/core/reporter.d.ts.map +1 -0
  32. package/dist/core/reporter.js +366 -0
  33. package/dist/core/reporter.js.map +1 -0
  34. package/dist/core/rules.d.ts +8 -0
  35. package/dist/core/rules.d.ts.map +1 -0
  36. package/dist/core/rules.js +1077 -0
  37. package/dist/core/rules.js.map +1 -0
  38. package/dist/core/scanner.d.ts +6 -0
  39. package/dist/core/scanner.d.ts.map +1 -0
  40. package/dist/core/scanner.js +217 -0
  41. package/dist/core/scanner.js.map +1 -0
  42. package/dist/core/severity.d.ts +100 -0
  43. package/dist/core/severity.d.ts.map +1 -0
  44. package/dist/core/severity.js +52 -0
  45. package/dist/core/severity.js.map +1 -0
  46. package/dist/detectors/auth.d.ts +3 -0
  47. package/dist/detectors/auth.d.ts.map +1 -0
  48. package/dist/detectors/auth.js +138 -0
  49. package/dist/detectors/auth.js.map +1 -0
  50. package/dist/detectors/crypto.d.ts +3 -0
  51. package/dist/detectors/crypto.d.ts.map +1 -0
  52. package/dist/detectors/crypto.js +128 -0
  53. package/dist/detectors/crypto.js.map +1 -0
  54. package/dist/detectors/dependency.d.ts +4 -0
  55. package/dist/detectors/dependency.d.ts.map +1 -0
  56. package/dist/detectors/dependency.js +267 -0
  57. package/dist/detectors/dependency.js.map +1 -0
  58. package/dist/detectors/deserialize.d.ts +3 -0
  59. package/dist/detectors/deserialize.d.ts.map +1 -0
  60. package/dist/detectors/deserialize.js +107 -0
  61. package/dist/detectors/deserialize.js.map +1 -0
  62. package/dist/detectors/injection.d.ts +3 -0
  63. package/dist/detectors/injection.d.ts.map +1 -0
  64. package/dist/detectors/injection.js +158 -0
  65. package/dist/detectors/injection.js.map +1 -0
  66. package/dist/detectors/misconfig.d.ts +3 -0
  67. package/dist/detectors/misconfig.d.ts.map +1 -0
  68. package/dist/detectors/misconfig.js +153 -0
  69. package/dist/detectors/misconfig.js.map +1 -0
  70. package/dist/detectors/pathtraversal.d.ts +3 -0
  71. package/dist/detectors/pathtraversal.d.ts.map +1 -0
  72. package/dist/detectors/pathtraversal.js +90 -0
  73. package/dist/detectors/pathtraversal.js.map +1 -0
  74. package/dist/detectors/prototype.d.ts +3 -0
  75. package/dist/detectors/prototype.d.ts.map +1 -0
  76. package/dist/detectors/prototype.js +79 -0
  77. package/dist/detectors/prototype.js.map +1 -0
  78. package/dist/detectors/secrets.d.ts +4 -0
  79. package/dist/detectors/secrets.d.ts.map +1 -0
  80. package/dist/detectors/secrets.js +137 -0
  81. package/dist/detectors/secrets.js.map +1 -0
  82. package/dist/detectors/ssrf.d.ts +3 -0
  83. package/dist/detectors/ssrf.d.ts.map +1 -0
  84. package/dist/detectors/ssrf.js +78 -0
  85. package/dist/detectors/ssrf.js.map +1 -0
  86. package/dist/detectors/zeroday.d.ts +9 -0
  87. package/dist/detectors/zeroday.d.ts.map +1 -0
  88. package/dist/detectors/zeroday.js +77 -0
  89. package/dist/detectors/zeroday.js.map +1 -0
  90. package/dist/index.d.ts +10 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +42 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/mcp/server.d.ts +2 -0
  95. package/dist/mcp/server.d.ts.map +1 -0
  96. package/dist/mcp/server.js +358 -0
  97. package/dist/mcp/server.js.map +1 -0
  98. package/dist/utils/config.d.ts +4 -0
  99. package/dist/utils/config.d.ts.map +1 -0
  100. package/dist/utils/config.js +97 -0
  101. package/dist/utils/config.js.map +1 -0
  102. package/dist/utils/fingerprint.d.ts +5 -0
  103. package/dist/utils/fingerprint.d.ts.map +1 -0
  104. package/dist/utils/fingerprint.js +55 -0
  105. package/dist/utils/fingerprint.js.map +1 -0
  106. package/dist/utils/languages.d.ts +8 -0
  107. package/dist/utils/languages.d.ts.map +1 -0
  108. package/dist/utils/languages.js +128 -0
  109. package/dist/utils/languages.js.map +1 -0
  110. package/package.json +53 -0
  111. package/src/ai/anthropic.ts +82 -0
  112. package/src/ai/huggingface.ts +111 -0
  113. package/src/ai/openai.ts +75 -0
  114. package/src/ai/prompts.ts +100 -0
  115. package/src/ai/provider.ts +68 -0
  116. package/src/cli/index.ts +314 -0
  117. package/src/core/reporter.ts +356 -0
  118. package/src/core/rules.ts +1089 -0
  119. package/src/core/scanner.ts +201 -0
  120. package/src/core/severity.ts +140 -0
  121. package/src/detectors/auth.ts +152 -0
  122. package/src/detectors/crypto.ts +128 -0
  123. package/src/detectors/dependency.ts +240 -0
  124. package/src/detectors/deserialize.ts +106 -0
  125. package/src/detectors/injection.ts +172 -0
  126. package/src/detectors/misconfig.ts +152 -0
  127. package/src/detectors/pathtraversal.ts +89 -0
  128. package/src/detectors/prototype.ts +77 -0
  129. package/src/detectors/secrets.ts +138 -0
  130. package/src/detectors/ssrf.ts +77 -0
  131. package/src/detectors/zeroday.ts +93 -0
  132. package/src/index.ts +24 -0
  133. package/src/mcp/server.ts +379 -0
  134. package/src/utils/config.ts +64 -0
  135. package/src/utils/fingerprint.ts +21 -0
  136. package/src/utils/languages.ts +95 -0
  137. package/tsconfig.json +20 -0
  138. package/vitest.config.ts +8 -0
@@ -0,0 +1,366 @@
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.reportTerminal = reportTerminal;
37
+ exports.reportJSON = reportJSON;
38
+ exports.reportSARIF = reportSARIF;
39
+ exports.reportHTML = reportHTML;
40
+ exports.generateReport = generateReport;
41
+ const path = __importStar(require("path"));
42
+ const severity_1 = require("./severity");
43
+ const RESET = '\x1b[0m';
44
+ const BOLD = '\x1b[1m';
45
+ const DIM = '\x1b[2m';
46
+ const WHITE = '\x1b[37m';
47
+ const GREEN = '\x1b[32m';
48
+ const YELLOW = '\x1b[33m';
49
+ const RED = '\x1b[31m';
50
+ const CYAN = '\x1b[36m';
51
+ // ============================================================
52
+ // Terminal Reporter
53
+ // ============================================================
54
+ function reportTerminal(result, quiet = false) {
55
+ const lines = [];
56
+ lines.push('');
57
+ lines.push(`${BOLD}${WHITE} GhostPatch Security Scan Report${RESET}`);
58
+ lines.push(`${DIM} ${'='.repeat(50)}${RESET}`);
59
+ lines.push('');
60
+ // Summary
61
+ lines.push(` ${DIM}Target:${RESET} ${result.target}`);
62
+ lines.push(` ${DIM}Files:${RESET} ${result.filesScanned} scanned, ${result.filesSkipped} skipped`);
63
+ lines.push(` ${DIM}Time:${RESET} ${result.durationMs}ms`);
64
+ lines.push(` ${DIM}AI:${RESET} ${result.aiEnabled ? 'enabled' : 'disabled'}`);
65
+ lines.push('');
66
+ // Severity breakdown
67
+ const { bySeverity } = result.summary;
68
+ const critCount = bySeverity[severity_1.Severity.CRITICAL] || 0;
69
+ const highCount = bySeverity[severity_1.Severity.HIGH] || 0;
70
+ const medCount = bySeverity[severity_1.Severity.MEDIUM] || 0;
71
+ const lowCount = bySeverity[severity_1.Severity.LOW] || 0;
72
+ const infoCount = bySeverity[severity_1.Severity.INFO] || 0;
73
+ lines.push(` ${severity_1.SEVERITY_COLORS[severity_1.Severity.CRITICAL]} CRITICAL ${RESET} ${critCount}`);
74
+ lines.push(` ${severity_1.SEVERITY_COLORS[severity_1.Severity.HIGH]} HIGH ${RESET} ${highCount}`);
75
+ lines.push(` ${severity_1.SEVERITY_COLORS[severity_1.Severity.MEDIUM]} MEDIUM ${RESET} ${medCount}`);
76
+ lines.push(` ${severity_1.SEVERITY_COLORS[severity_1.Severity.LOW]} LOW ${RESET} ${lowCount}`);
77
+ lines.push(` ${DIM} INFO ${RESET} ${infoCount}`);
78
+ lines.push('');
79
+ if (result.summary.total === 0) {
80
+ lines.push(` ${GREEN}${BOLD}No security issues found!${RESET}`);
81
+ lines.push('');
82
+ return lines.join('\n');
83
+ }
84
+ lines.push(` ${DIM}${'─'.repeat(60)}${RESET}`);
85
+ lines.push('');
86
+ if (quiet) {
87
+ for (const finding of result.findings) {
88
+ const icon = severity_1.SEVERITY_ICONS[finding.severity];
89
+ const color = severity_1.SEVERITY_COLORS[finding.severity];
90
+ const relPath = path.relative(result.target, finding.filePath) || finding.filePath;
91
+ lines.push(` ${color}${icon}${RESET} ${finding.title} ${DIM}${relPath}:${finding.line}${RESET}`);
92
+ }
93
+ }
94
+ else {
95
+ for (const finding of result.findings) {
96
+ lines.push(formatFinding(finding, result.target));
97
+ }
98
+ }
99
+ lines.push('');
100
+ lines.push(` ${DIM}${'─'.repeat(60)}${RESET}`);
101
+ lines.push(` ${BOLD}Total: ${result.summary.total} issue(s) found${RESET}`);
102
+ if (critCount > 0) {
103
+ lines.push(` ${RED}${BOLD}${critCount} critical issue(s) require immediate attention!${RESET}`);
104
+ }
105
+ lines.push('');
106
+ return lines.join('\n');
107
+ }
108
+ function formatFinding(finding, basePath) {
109
+ const lines = [];
110
+ const color = severity_1.SEVERITY_COLORS[finding.severity];
111
+ const icon = severity_1.SEVERITY_ICONS[finding.severity];
112
+ const relPath = path.relative(basePath, finding.filePath) || finding.filePath;
113
+ lines.push(` ${color}${BOLD}${icon} ${finding.title}${RESET}`);
114
+ lines.push(` ${DIM}${relPath}:${finding.line}${RESET}${finding.cwe ? ` ${DIM}${finding.cwe}${RESET}` : ''}${finding.aiEnhanced ? ` ${CYAN}[AI]${RESET}` : ''}`);
115
+ lines.push(` ${finding.description}`);
116
+ lines.push('');
117
+ if (finding.codeSnippet) {
118
+ const snippetLines = finding.codeSnippet.split('\n');
119
+ for (const sl of snippetLines) {
120
+ if (sl.startsWith('>')) {
121
+ lines.push(` ${color}${sl}${RESET}`);
122
+ }
123
+ else {
124
+ lines.push(` ${DIM}${sl}${RESET}`);
125
+ }
126
+ }
127
+ lines.push('');
128
+ }
129
+ if (finding.remediation) {
130
+ lines.push(` ${GREEN}Fix: ${finding.remediation}${RESET}`);
131
+ }
132
+ lines.push(` ${DIM}${'─'.repeat(60)}${RESET}`);
133
+ lines.push('');
134
+ return lines.join('\n');
135
+ }
136
+ // ============================================================
137
+ // JSON Reporter
138
+ // ============================================================
139
+ function reportJSON(result) {
140
+ return JSON.stringify({
141
+ ghostpatch: {
142
+ version: '1.0.0',
143
+ scanDate: result.startTime.toISOString(),
144
+ },
145
+ target: result.target,
146
+ duration: result.durationMs,
147
+ filesScanned: result.filesScanned,
148
+ filesSkipped: result.filesSkipped,
149
+ aiEnabled: result.aiEnabled,
150
+ summary: result.summary,
151
+ findings: result.findings.map(f => ({
152
+ id: f.id,
153
+ ruleId: f.ruleId,
154
+ title: f.title,
155
+ description: f.description,
156
+ severity: f.severity,
157
+ confidence: f.confidence,
158
+ location: {
159
+ file: f.filePath,
160
+ line: f.line,
161
+ column: f.column,
162
+ endLine: f.endLine,
163
+ endColumn: f.endColumn,
164
+ },
165
+ cwe: f.cwe,
166
+ owasp: f.owasp,
167
+ codeSnippet: f.codeSnippet,
168
+ remediation: f.remediation,
169
+ aiEnhanced: f.aiEnhanced || false,
170
+ fingerprint: f.fingerprint,
171
+ })),
172
+ }, null, 2);
173
+ }
174
+ // ============================================================
175
+ // SARIF Reporter (Static Analysis Results Interchange Format)
176
+ // ============================================================
177
+ function reportSARIF(result) {
178
+ const sarif = {
179
+ $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',
180
+ version: '2.1.0',
181
+ runs: [{
182
+ tool: {
183
+ driver: {
184
+ name: 'GhostPatch',
185
+ version: '1.0.0',
186
+ informationUri: 'https://github.com/ghostpatch/ghostpatch',
187
+ rules: getUniqueRules(result.findings),
188
+ },
189
+ },
190
+ results: result.findings.map(f => ({
191
+ ruleId: f.ruleId,
192
+ level: sarifLevel(f.severity),
193
+ message: {
194
+ text: f.description,
195
+ },
196
+ locations: [{
197
+ physicalLocation: {
198
+ artifactLocation: {
199
+ uri: f.filePath.replace(/\\/g, '/'),
200
+ },
201
+ region: {
202
+ startLine: f.line,
203
+ startColumn: f.column || 1,
204
+ endLine: f.endLine || f.line,
205
+ endColumn: f.endColumn,
206
+ },
207
+ },
208
+ }],
209
+ fingerprints: {
210
+ 'ghostpatch/v1': f.fingerprint,
211
+ },
212
+ fixes: f.remediation ? [{
213
+ description: { text: f.remediation },
214
+ }] : undefined,
215
+ })),
216
+ }],
217
+ };
218
+ return JSON.stringify(sarif, null, 2);
219
+ }
220
+ function sarifLevel(severity) {
221
+ switch (severity) {
222
+ case severity_1.Severity.CRITICAL:
223
+ case severity_1.Severity.HIGH: return 'error';
224
+ case severity_1.Severity.MEDIUM: return 'warning';
225
+ case severity_1.Severity.LOW:
226
+ case severity_1.Severity.INFO: return 'note';
227
+ }
228
+ }
229
+ function getUniqueRules(findings) {
230
+ const seen = new Set();
231
+ const rules = [];
232
+ for (const f of findings) {
233
+ if (!seen.has(f.ruleId)) {
234
+ seen.add(f.ruleId);
235
+ rules.push({
236
+ id: f.ruleId,
237
+ shortDescription: { text: f.title },
238
+ fullDescription: { text: f.description },
239
+ help: { text: f.remediation || '' },
240
+ properties: {
241
+ cwe: f.cwe,
242
+ owasp: f.owasp,
243
+ },
244
+ });
245
+ }
246
+ }
247
+ return rules;
248
+ }
249
+ // ============================================================
250
+ // HTML Reporter
251
+ // ============================================================
252
+ function reportHTML(result) {
253
+ const { bySeverity } = result.summary;
254
+ return `<!DOCTYPE html>
255
+ <html lang="en">
256
+ <head>
257
+ <meta charset="UTF-8">
258
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
259
+ <title>GhostPatch Security Report</title>
260
+ <style>
261
+ * { margin: 0; padding: 0; box-sizing: border-box; }
262
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #0d1117; color: #c9d1d9; line-height: 1.6; }
263
+ .container { max-width: 1200px; margin: 0 auto; padding: 2rem; }
264
+ h1 { color: #f0f6fc; font-size: 2rem; margin-bottom: 0.5rem; }
265
+ .subtitle { color: #8b949e; margin-bottom: 2rem; }
266
+ .summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; margin-bottom: 2rem; }
267
+ .stat { background: #161b22; border: 1px solid #30363d; border-radius: 8px; padding: 1.5rem; text-align: center; }
268
+ .stat-value { font-size: 2rem; font-weight: bold; }
269
+ .stat-label { color: #8b949e; font-size: 0.85rem; text-transform: uppercase; }
270
+ .critical .stat-value { color: #f85149; }
271
+ .high .stat-value { color: #f0883e; }
272
+ .medium .stat-value { color: #d29922; }
273
+ .low .stat-value { color: #3fb950; }
274
+ .info .stat-value { color: #58a6ff; }
275
+ .finding { background: #161b22; border: 1px solid #30363d; border-radius: 8px; padding: 1.5rem; margin-bottom: 1rem; }
276
+ .finding-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; }
277
+ .finding-title { font-size: 1.1rem; font-weight: 600; color: #f0f6fc; }
278
+ .badge { padding: 0.2rem 0.6rem; border-radius: 12px; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; }
279
+ .badge-critical { background: #f85149; color: #fff; }
280
+ .badge-high { background: #f0883e; color: #fff; }
281
+ .badge-medium { background: #d29922; color: #000; }
282
+ .badge-low { background: #3fb950; color: #000; }
283
+ .badge-info { background: #58a6ff; color: #000; }
284
+ .finding-meta { color: #8b949e; font-size: 0.85rem; margin-bottom: 0.5rem; }
285
+ .finding-desc { margin-bottom: 1rem; }
286
+ pre { background: #0d1117; border: 1px solid #30363d; border-radius: 6px; padding: 1rem; overflow-x: auto; font-size: 0.85rem; }
287
+ .fix { color: #3fb950; background: #0d2818; border: 1px solid #238636; border-radius: 6px; padding: 0.75rem; margin-top: 0.5rem; font-size: 0.9rem; }
288
+ .chart { display: flex; height: 24px; border-radius: 12px; overflow: hidden; margin-bottom: 2rem; }
289
+ .chart-seg { transition: width 0.3s; }
290
+ .chart-critical { background: #f85149; }
291
+ .chart-high { background: #f0883e; }
292
+ .chart-medium { background: #d29922; }
293
+ .chart-low { background: #3fb950; }
294
+ .chart-info { background: #58a6ff; }
295
+ .footer { text-align: center; color: #8b949e; margin-top: 2rem; padding-top: 1rem; border-top: 1px solid #30363d; }
296
+ .ai-badge { background: #a371f7; color: #fff; padding: 0.1rem 0.4rem; border-radius: 8px; font-size: 0.7rem; margin-left: 0.5rem; }
297
+ </style>
298
+ </head>
299
+ <body>
300
+ <div class="container">
301
+ <h1>GhostPatch Security Report</h1>
302
+ <p class="subtitle">Scan completed ${result.startTime.toISOString()} | ${result.filesScanned} files scanned | ${result.durationMs}ms</p>
303
+
304
+ ${result.summary.total > 0 ? `<div class="chart">
305
+ ${chartSegment('critical', bySeverity[severity_1.Severity.CRITICAL], result.summary.total)}
306
+ ${chartSegment('high', bySeverity[severity_1.Severity.HIGH], result.summary.total)}
307
+ ${chartSegment('medium', bySeverity[severity_1.Severity.MEDIUM], result.summary.total)}
308
+ ${chartSegment('low', bySeverity[severity_1.Severity.LOW], result.summary.total)}
309
+ ${chartSegment('info', bySeverity[severity_1.Severity.INFO], result.summary.total)}
310
+ </div>` : ''}
311
+
312
+ <div class="summary">
313
+ <div class="stat critical"><div class="stat-value">${bySeverity[severity_1.Severity.CRITICAL] || 0}</div><div class="stat-label">Critical</div></div>
314
+ <div class="stat high"><div class="stat-value">${bySeverity[severity_1.Severity.HIGH] || 0}</div><div class="stat-label">High</div></div>
315
+ <div class="stat medium"><div class="stat-value">${bySeverity[severity_1.Severity.MEDIUM] || 0}</div><div class="stat-label">Medium</div></div>
316
+ <div class="stat low"><div class="stat-value">${bySeverity[severity_1.Severity.LOW] || 0}</div><div class="stat-label">Low</div></div>
317
+ <div class="stat info"><div class="stat-value">${bySeverity[severity_1.Severity.INFO] || 0}</div><div class="stat-label">Info</div></div>
318
+ </div>
319
+
320
+ ${result.findings.length === 0 ? '<div class="finding"><p style="text-align:center; color:#3fb950; font-size:1.2rem;">No security issues found!</p></div>' : ''}
321
+
322
+ ${result.findings.map(f => `<div class="finding">
323
+ <div class="finding-header">
324
+ <span class="finding-title">${escapeHtml(f.title)}${f.aiEnhanced ? '<span class="ai-badge">AI</span>' : ''}</span>
325
+ <span class="badge badge-${f.severity}">${f.severity}</span>
326
+ </div>
327
+ <div class="finding-meta">${escapeHtml(path.relative(result.target, f.filePath) || f.filePath)}:${f.line}${f.cwe ? ` | ${f.cwe}` : ''}${f.owasp ? ` | OWASP ${f.owasp}` : ''}</div>
328
+ <div class="finding-desc">${escapeHtml(f.description)}</div>
329
+ ${f.codeSnippet ? `<pre><code>${escapeHtml(f.codeSnippet)}</code></pre>` : ''}
330
+ ${f.remediation ? `<div class="fix">Fix: ${escapeHtml(f.remediation)}</div>` : ''}
331
+ </div>`).join('\n')}
332
+
333
+ <div class="footer">
334
+ Generated by GhostPatch v1.0.0 | AI-Powered Security Scanner
335
+ </div>
336
+ </div>
337
+ </body>
338
+ </html>`;
339
+ }
340
+ function chartSegment(severity, count, total) {
341
+ if (!count || total === 0)
342
+ return '';
343
+ const pct = (count / total) * 100;
344
+ return `<div class="chart-seg chart-${severity}" style="width:${pct}%" title="${severity}: ${count}"></div>`;
345
+ }
346
+ function escapeHtml(str) {
347
+ return str
348
+ .replace(/&/g, '&amp;')
349
+ .replace(/</g, '&lt;')
350
+ .replace(/>/g, '&gt;')
351
+ .replace(/"/g, '&quot;')
352
+ .replace(/'/g, '&#039;');
353
+ }
354
+ // ============================================================
355
+ // Report dispatcher
356
+ // ============================================================
357
+ function generateReport(result, format = 'terminal', quiet = false) {
358
+ switch (format) {
359
+ case 'json': return reportJSON(result);
360
+ case 'sarif': return reportSARIF(result);
361
+ case 'html': return reportHTML(result);
362
+ case 'terminal':
363
+ default: return reportTerminal(result, quiet);
364
+ }
365
+ }
366
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/core/reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Rule, Severity } from './severity';
2
+ export declare const ALL_RULES: Rule[];
3
+ export declare function getRulesForLanguage(language: string): Rule[];
4
+ export declare function getRuleById(id: string): Rule | undefined;
5
+ export declare function getRulesByOwasp(category: string): Rule[];
6
+ export declare function getRulesBySeverity(severity: Severity): Rule[];
7
+ export declare function getEnabledRules(disabled?: string[]): Rule[];
8
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA4hC5C,eAAO,MAAM,SAAS,EAAE,IAAI,EAe3B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,CAE5D;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAExD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,CAExD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,CAE7D;AAED,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAM,EAAO,GAAG,IAAI,EAAE,CAG/D"}