afterburn-cli 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.
- package/LICENSE +21 -0
- package/README.md +281 -0
- package/dist/ai/gemini-client.d.ts +21 -0
- package/dist/ai/gemini-client.js +105 -0
- package/dist/ai/gemini-client.js.map +1 -0
- package/dist/ai/index.d.ts +1 -0
- package/dist/ai/index.js +3 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/analysis/diagnosis-schema.d.ts +106 -0
- package/dist/analysis/diagnosis-schema.js +54 -0
- package/dist/analysis/diagnosis-schema.js.map +1 -0
- package/dist/analysis/error-analyzer.d.ts +9 -0
- package/dist/analysis/error-analyzer.js +573 -0
- package/dist/analysis/error-analyzer.js.map +1 -0
- package/dist/analysis/index.d.ts +4 -0
- package/dist/analysis/index.js +6 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/source-mapper.d.ts +19 -0
- package/dist/analysis/source-mapper.js +329 -0
- package/dist/analysis/source-mapper.js.map +1 -0
- package/dist/analysis/ui-auditor.d.ts +9 -0
- package/dist/analysis/ui-auditor.js +104 -0
- package/dist/analysis/ui-auditor.js.map +1 -0
- package/dist/artifacts/artifact-storage.d.ts +44 -0
- package/dist/artifacts/artifact-storage.js +99 -0
- package/dist/artifacts/artifact-storage.js.map +1 -0
- package/dist/artifacts/index.d.ts +1 -0
- package/dist/artifacts/index.js +3 -0
- package/dist/artifacts/index.js.map +1 -0
- package/dist/browser/browser-manager.d.ts +45 -0
- package/dist/browser/browser-manager.js +88 -0
- package/dist/browser/browser-manager.js.map +1 -0
- package/dist/browser/challenge-detector.d.ts +10 -0
- package/dist/browser/challenge-detector.js +58 -0
- package/dist/browser/challenge-detector.js.map +1 -0
- package/dist/browser/cookie-dismisser.d.ts +18 -0
- package/dist/browser/cookie-dismisser.js +76 -0
- package/dist/browser/cookie-dismisser.js.map +1 -0
- package/dist/browser/index.d.ts +4 -0
- package/dist/browser/index.js +6 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/stealth-browser.d.ts +13 -0
- package/dist/browser/stealth-browser.js +59 -0
- package/dist/browser/stealth-browser.js.map +1 -0
- package/dist/cli/commander-cli.d.ts +2 -0
- package/dist/cli/commander-cli.js +150 -0
- package/dist/cli/commander-cli.js.map +1 -0
- package/dist/cli/doctor.d.ts +34 -0
- package/dist/cli/doctor.js +124 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/first-run.d.ts +6 -0
- package/dist/cli/first-run.js +58 -0
- package/dist/cli/first-run.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/progress.d.ts +11 -0
- package/dist/cli/progress.js +30 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/core/engine.d.ts +33 -0
- package/dist/core/engine.js +269 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/validation.d.ts +52 -0
- package/dist/core/validation.js +228 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/discovery/crawler.d.ts +58 -0
- package/dist/discovery/crawler.js +240 -0
- package/dist/discovery/crawler.js.map +1 -0
- package/dist/discovery/discovery-pipeline.d.ts +22 -0
- package/dist/discovery/discovery-pipeline.js +256 -0
- package/dist/discovery/discovery-pipeline.js.map +1 -0
- package/dist/discovery/element-mapper.d.ts +21 -0
- package/dist/discovery/element-mapper.js +422 -0
- package/dist/discovery/element-mapper.js.map +1 -0
- package/dist/discovery/index.d.ts +8 -0
- package/dist/discovery/index.js +8 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/link-validator.d.ts +15 -0
- package/dist/discovery/link-validator.js +137 -0
- package/dist/discovery/link-validator.js.map +1 -0
- package/dist/discovery/sitemap-builder.d.ts +19 -0
- package/dist/discovery/sitemap-builder.js +166 -0
- package/dist/discovery/sitemap-builder.js.map +1 -0
- package/dist/discovery/spa-detector.d.ts +12 -0
- package/dist/discovery/spa-detector.js +271 -0
- package/dist/discovery/spa-detector.js.map +1 -0
- package/dist/execution/error-detector.d.ts +10 -0
- package/dist/execution/error-detector.js +87 -0
- package/dist/execution/error-detector.js.map +1 -0
- package/dist/execution/evidence-capture.d.ts +8 -0
- package/dist/execution/evidence-capture.js +37 -0
- package/dist/execution/evidence-capture.js.map +1 -0
- package/dist/execution/index.d.ts +5 -0
- package/dist/execution/index.js +7 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/step-handlers.d.ts +48 -0
- package/dist/execution/step-handlers.js +349 -0
- package/dist/execution/step-handlers.js.map +1 -0
- package/dist/execution/test-data.d.ts +50 -0
- package/dist/execution/test-data.js +160 -0
- package/dist/execution/test-data.js.map +1 -0
- package/dist/execution/workflow-executor.d.ts +56 -0
- package/dist/execution/workflow-executor.js +331 -0
- package/dist/execution/workflow-executor.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/entry.d.ts +2 -0
- package/dist/mcp/entry.js +5 -0
- package/dist/mcp/entry.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.js +19 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +2 -0
- package/dist/mcp/tools.js +162 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/planning/heuristic-planner.d.ts +7 -0
- package/dist/planning/heuristic-planner.js +238 -0
- package/dist/planning/heuristic-planner.js.map +1 -0
- package/dist/planning/index.d.ts +3 -0
- package/dist/planning/index.js +5 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/plan-schema.d.ts +74 -0
- package/dist/planning/plan-schema.js +39 -0
- package/dist/planning/plan-schema.js.map +1 -0
- package/dist/planning/workflow-planner.d.ts +39 -0
- package/dist/planning/workflow-planner.js +211 -0
- package/dist/planning/workflow-planner.js.map +1 -0
- package/dist/reports/health-scorer.d.ts +14 -0
- package/dist/reports/health-scorer.js +88 -0
- package/dist/reports/health-scorer.js.map +1 -0
- package/dist/reports/html-generator.d.ts +10 -0
- package/dist/reports/html-generator.js +155 -0
- package/dist/reports/html-generator.js.map +1 -0
- package/dist/reports/index.d.ts +4 -0
- package/dist/reports/index.js +6 -0
- package/dist/reports/index.js.map +1 -0
- package/dist/reports/markdown-generator.d.ts +10 -0
- package/dist/reports/markdown-generator.js +334 -0
- package/dist/reports/markdown-generator.js.map +1 -0
- package/dist/reports/priority-ranker.d.ts +22 -0
- package/dist/reports/priority-ranker.js +608 -0
- package/dist/reports/priority-ranker.js.map +1 -0
- package/dist/screenshots/dual-format.d.ts +14 -0
- package/dist/screenshots/dual-format.js +59 -0
- package/dist/screenshots/dual-format.js.map +1 -0
- package/dist/screenshots/index.d.ts +2 -0
- package/dist/screenshots/index.js +4 -0
- package/dist/screenshots/index.js.map +1 -0
- package/dist/screenshots/screenshot-manager.d.ts +33 -0
- package/dist/screenshots/screenshot-manager.js +86 -0
- package/dist/screenshots/screenshot-manager.js.map +1 -0
- package/dist/testing/accessibility-auditor.d.ts +23 -0
- package/dist/testing/accessibility-auditor.js +44 -0
- package/dist/testing/accessibility-auditor.js.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/meta-auditor.d.ts +16 -0
- package/dist/testing/meta-auditor.js +268 -0
- package/dist/testing/meta-auditor.js.map +1 -0
- package/dist/testing/performance-monitor.d.ts +15 -0
- package/dist/testing/performance-monitor.js +64 -0
- package/dist/testing/performance-monitor.js.map +1 -0
- package/dist/types/artifacts.d.ts +58 -0
- package/dist/types/artifacts.js +3 -0
- package/dist/types/artifacts.js.map +1 -0
- package/dist/types/discovery.d.ts +124 -0
- package/dist/types/discovery.js +3 -0
- package/dist/types/discovery.js.map +1 -0
- package/dist/types/execution.d.ts +154 -0
- package/dist/types/execution.js +3 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/sanitizer.d.ts +25 -0
- package/dist/utils/sanitizer.js +98 -0
- package/dist/utils/sanitizer.js.map +1 -0
- package/package.json +86 -0
- package/templates/report.hbs +202 -0
- package/templates/styles/report.css +607 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-planner.js","sourceRoot":"","sources":["../../src/planning/workflow-planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ExecutionArtifact } from '../types/execution.js';
|
|
2
|
+
export interface HealthScore {
|
|
3
|
+
overall: number;
|
|
4
|
+
label: 'good' | 'needs-work' | 'poor';
|
|
5
|
+
breakdown: {
|
|
6
|
+
workflows: number;
|
|
7
|
+
errors: number;
|
|
8
|
+
accessibility: number;
|
|
9
|
+
performance: number;
|
|
10
|
+
};
|
|
11
|
+
checksPassed: number;
|
|
12
|
+
checksTotal: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function calculateHealthScore(executionArtifact: ExecutionArtifact): HealthScore;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Calculate 0-100 health score from workflow results, errors, accessibility, and performance
|
|
2
|
+
export function calculateHealthScore(executionArtifact) {
|
|
3
|
+
// WORKFLOW SCORE (40% weight)
|
|
4
|
+
const totalWorkflows = executionArtifact.workflowResults.length;
|
|
5
|
+
const passedWorkflows = executionArtifact.workflowResults.filter(w => w.overallStatus === 'passed').length;
|
|
6
|
+
const workflowScore = totalWorkflows > 0 ? (passedWorkflows / totalWorkflows) * 100 : 100;
|
|
7
|
+
// ERROR SCORE (30% weight)
|
|
8
|
+
// totalIssues is computed upstream and already includes broken links
|
|
9
|
+
const totalIssues = executionArtifact.totalIssues;
|
|
10
|
+
const errorScore = Math.max(0, 100 - (totalIssues * 2));
|
|
11
|
+
// ACCESSIBILITY SCORE (20% weight)
|
|
12
|
+
let criticalViolations = 0;
|
|
13
|
+
let seriousViolations = 0;
|
|
14
|
+
for (const audit of executionArtifact.pageAudits) {
|
|
15
|
+
if (audit.accessibility) {
|
|
16
|
+
for (const violation of audit.accessibility.violations) {
|
|
17
|
+
if (violation.impact === 'critical') {
|
|
18
|
+
criticalViolations++;
|
|
19
|
+
}
|
|
20
|
+
else if (violation.impact === 'serious') {
|
|
21
|
+
seriousViolations++;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const accessibilityScore = Math.max(0, 100 - (criticalViolations * 10) - (seriousViolations * 5));
|
|
27
|
+
// PERFORMANCE SCORE (10% weight)
|
|
28
|
+
const perfAudits = executionArtifact.pageAudits.filter(a => a.performance);
|
|
29
|
+
let performanceScore = 100; // Default if no perf data
|
|
30
|
+
if (perfAudits.length > 0) {
|
|
31
|
+
const avgLcp = perfAudits.reduce((sum, a) => sum + (a.performance?.lcp || 0), 0) / perfAudits.length;
|
|
32
|
+
if (avgLcp < 2500) {
|
|
33
|
+
performanceScore = 100;
|
|
34
|
+
}
|
|
35
|
+
else if (avgLcp <= 4000) {
|
|
36
|
+
performanceScore = 75;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
performanceScore = 50;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// WEIGHTED OVERALL SCORE
|
|
43
|
+
let overall = (workflowScore * 0.4) +
|
|
44
|
+
(errorScore * 0.3) +
|
|
45
|
+
(accessibilityScore * 0.2) +
|
|
46
|
+
(performanceScore * 0.1);
|
|
47
|
+
// VETO LOGIC: Cap at 50 if ANY workflow failed
|
|
48
|
+
const hasFailedWorkflow = executionArtifact.workflowResults.some(w => w.overallStatus === 'failed');
|
|
49
|
+
if (hasFailedWorkflow) {
|
|
50
|
+
overall = Math.min(overall, 50);
|
|
51
|
+
}
|
|
52
|
+
// LABEL MAPPING
|
|
53
|
+
let label;
|
|
54
|
+
if (overall >= 80) {
|
|
55
|
+
label = 'good';
|
|
56
|
+
}
|
|
57
|
+
else if (overall >= 50) {
|
|
58
|
+
label = 'needs-work';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
label = 'poor';
|
|
62
|
+
}
|
|
63
|
+
// CHECKS CALCULATION
|
|
64
|
+
// checksTotal = total steps across all workflows + pageAudits.length
|
|
65
|
+
// checksPassed = passed steps + audits with no critical violations
|
|
66
|
+
const totalSteps = executionArtifact.workflowResults.reduce((sum, w) => sum + w.totalSteps, 0);
|
|
67
|
+
const passedSteps = executionArtifact.workflowResults.reduce((sum, w) => sum + w.passedSteps, 0);
|
|
68
|
+
const auditsWithoutCritical = executionArtifact.pageAudits.filter(a => {
|
|
69
|
+
if (!a.accessibility)
|
|
70
|
+
return true;
|
|
71
|
+
return !a.accessibility.violations.some(v => v.impact === 'critical');
|
|
72
|
+
}).length;
|
|
73
|
+
const checksTotal = totalSteps + executionArtifact.pageAudits.length;
|
|
74
|
+
const checksPassed = passedSteps + auditsWithoutCritical;
|
|
75
|
+
return {
|
|
76
|
+
overall: Math.round(overall),
|
|
77
|
+
label,
|
|
78
|
+
breakdown: {
|
|
79
|
+
workflows: Math.round(workflowScore),
|
|
80
|
+
errors: Math.round(errorScore),
|
|
81
|
+
accessibility: Math.round(accessibilityScore),
|
|
82
|
+
performance: Math.round(performanceScore),
|
|
83
|
+
},
|
|
84
|
+
checksPassed,
|
|
85
|
+
checksTotal,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=health-scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-scorer.js","sourceRoot":"","sources":["../../src/reports/health-scorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExecutionArtifact } from '../types/execution.js';
|
|
2
|
+
import type { AnalysisArtifact } from '../analysis/diagnosis-schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Generate self-contained HTML report with inline CSS and base64 screenshots
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateHtmlReport(executionArtifact: ExecutionArtifact, analysisArtifact: AnalysisArtifact): Promise<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Write HTML report to file
|
|
9
|
+
*/
|
|
10
|
+
export declare function writeHtmlReport(html: string, outputPath: string): Promise<void>;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// Generate self-contained HTML report with Handlebars templates, inline CSS, and base64 screenshots
|
|
2
|
+
import Handlebars from 'handlebars';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import sharp from 'sharp';
|
|
5
|
+
import { join, dirname } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { calculateHealthScore } from './health-scorer.js';
|
|
8
|
+
import { prioritizeIssues, deduplicateIssues } from './priority-ranker.js';
|
|
9
|
+
import { redactSensitiveUrl, redactSensitiveData } from '../utils/sanitizer.js';
|
|
10
|
+
/**
|
|
11
|
+
* Redact sensitive data from text before inserting into HTML reports.
|
|
12
|
+
* Strips query params with sensitive keys, truncates stack traces, replaces file paths with basename.
|
|
13
|
+
*/
|
|
14
|
+
function redactSensitive(text) {
|
|
15
|
+
if (!text)
|
|
16
|
+
return text;
|
|
17
|
+
let result = text;
|
|
18
|
+
// Strip sensitive query params from URLs
|
|
19
|
+
result = result.replace(/\b(https?:\/\/[^\s]+\?[^\s]*)/g, (url) => {
|
|
20
|
+
try {
|
|
21
|
+
const parsed = new URL(url);
|
|
22
|
+
const sensitiveKeys = ['key', 'token', 'secret', 'password', 'auth', 'api', 'apikey', 'api_key', 'access_token', 'auth_token', 'session', 'jwt'];
|
|
23
|
+
for (const key of sensitiveKeys) {
|
|
24
|
+
if (parsed.searchParams.has(key)) {
|
|
25
|
+
parsed.searchParams.set(key, '[REDACTED]');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return parsed.toString();
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return url;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
// Truncate stack traces to first 3 lines
|
|
35
|
+
const lines = result.split('\n');
|
|
36
|
+
if (lines.length > 3 && lines.some(line => line.match(/^\s*at\s+/))) {
|
|
37
|
+
const stackStart = lines.findIndex(line => line.match(/^\s*at\s+/));
|
|
38
|
+
if (stackStart >= 0 && lines.length > stackStart + 3) {
|
|
39
|
+
result = lines.slice(0, stackStart + 3).join('\n') + '\n... (stack trace truncated)';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Replace full file paths with basename only (remove directory info)
|
|
43
|
+
result = result.replace(/([A-Z]:[\/\\]|\/[^\/\s]+\/)[^\s:]+([\/\\][^\s:]+)/g, (match) => {
|
|
44
|
+
const lastSep = Math.max(match.lastIndexOf('/'), match.lastIndexOf('\\'));
|
|
45
|
+
return lastSep >= 0 ? match.substring(lastSep + 1) : match;
|
|
46
|
+
});
|
|
47
|
+
// Apply general sensitive data redaction
|
|
48
|
+
result = redactSensitiveData(result);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve template path with fallback for both compiled (dist/) and dev (src/) environments
|
|
53
|
+
*/
|
|
54
|
+
function resolveTemplatePath(relativePath) {
|
|
55
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
56
|
+
const __dirname = dirname(__filename);
|
|
57
|
+
// From dist/reports/ -> ../../templates/ (compiled)
|
|
58
|
+
const distPath = join(__dirname, '../../templates', relativePath);
|
|
59
|
+
if (fs.existsSync(distPath))
|
|
60
|
+
return distPath;
|
|
61
|
+
// From src/reports/ -> ../../templates/ (tsx/dev - should also be ../../ from src/)
|
|
62
|
+
const srcPath = join(__dirname, '../../templates', relativePath);
|
|
63
|
+
if (fs.existsSync(srcPath))
|
|
64
|
+
return srcPath;
|
|
65
|
+
throw new Error(`Template not found: ${relativePath} (tried ${distPath} and ${srcPath})`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Load screenshot and convert to base64 data URI with size optimization
|
|
69
|
+
*/
|
|
70
|
+
async function loadScreenshotAsBase64(screenshotRef) {
|
|
71
|
+
if (!screenshotRef)
|
|
72
|
+
return undefined;
|
|
73
|
+
try {
|
|
74
|
+
// Check if file exists
|
|
75
|
+
if (!fs.existsSync(screenshotRef)) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
// Read and resize image to max 768px width (prevents base64 bloat)
|
|
79
|
+
let buffer = await sharp(screenshotRef)
|
|
80
|
+
.resize(768, undefined, { withoutEnlargement: true })
|
|
81
|
+
.webp({ quality: 80, effort: 4, smartSubsample: true })
|
|
82
|
+
.toBuffer();
|
|
83
|
+
// If still > 100KB, reduce quality to 60
|
|
84
|
+
if (buffer.length > 100 * 1024) {
|
|
85
|
+
buffer = await sharp(screenshotRef)
|
|
86
|
+
.resize(768, undefined, { withoutEnlargement: true })
|
|
87
|
+
.webp({ quality: 60, effort: 4, smartSubsample: true })
|
|
88
|
+
.toBuffer();
|
|
89
|
+
}
|
|
90
|
+
return `data:image/webp;base64,${buffer.toString('base64')}`;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Graceful degradation on error
|
|
94
|
+
console.warn(`Failed to load screenshot ${screenshotRef}:`, error);
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Generate self-contained HTML report with inline CSS and base64 screenshots
|
|
100
|
+
*/
|
|
101
|
+
export async function generateHtmlReport(executionArtifact, analysisArtifact) {
|
|
102
|
+
// Calculate health score
|
|
103
|
+
const healthScore = calculateHealthScore(executionArtifact);
|
|
104
|
+
// Prioritize and deduplicate issues
|
|
105
|
+
const prioritizedIssues = deduplicateIssues(prioritizeIssues(analysisArtifact.diagnosedErrors, analysisArtifact.uiAudits, executionArtifact));
|
|
106
|
+
// Load screenshots for each prioritized issue that has a screenshotRef, and redact sensitive data
|
|
107
|
+
const issuesWithScreenshots = await Promise.all(prioritizedIssues.map(async (issue) => ({
|
|
108
|
+
...issue,
|
|
109
|
+
summary: redactSensitive(issue.summary),
|
|
110
|
+
impact: redactSensitive(issue.impact || ''),
|
|
111
|
+
fixSuggestion: redactSensitive(issue.fixSuggestion || ''),
|
|
112
|
+
location: redactSensitive(issue.location),
|
|
113
|
+
screenshotDataUri: await loadScreenshotAsBase64(issue.screenshotRef),
|
|
114
|
+
})));
|
|
115
|
+
// Load CSS from templates/styles/report.css
|
|
116
|
+
const cssPath = resolveTemplatePath('styles/report.css');
|
|
117
|
+
const cssContent = await fs.readFile(cssPath, 'utf-8');
|
|
118
|
+
// Load template from templates/report.hbs
|
|
119
|
+
const templatePath = resolveTemplatePath('report.hbs');
|
|
120
|
+
const templateSource = await fs.readFile(templatePath, 'utf-8');
|
|
121
|
+
// Register Handlebars helpers
|
|
122
|
+
Handlebars.registerHelper('eq', function (a, b) {
|
|
123
|
+
return a === b;
|
|
124
|
+
});
|
|
125
|
+
Handlebars.registerHelper('lt', function (a, b) {
|
|
126
|
+
return a < b;
|
|
127
|
+
});
|
|
128
|
+
// Compile template
|
|
129
|
+
const template = Handlebars.compile(templateSource);
|
|
130
|
+
// Render with data (use ISO format for timestamp)
|
|
131
|
+
const html = template({
|
|
132
|
+
targetUrl: redactSensitiveUrl(executionArtifact.targetUrl),
|
|
133
|
+
scanDate: new Date(executionArtifact.timestamp).toISOString(),
|
|
134
|
+
healthScore,
|
|
135
|
+
prioritizedIssues: issuesWithScreenshots,
|
|
136
|
+
workflowResults: executionArtifact.workflowResults,
|
|
137
|
+
pageAudits: executionArtifact.pageAudits,
|
|
138
|
+
totalIssues: executionArtifact.totalIssues,
|
|
139
|
+
aiPowered: analysisArtifact.aiPowered,
|
|
140
|
+
sourceAnalysisAvailable: analysisArtifact.sourceAnalysisAvailable,
|
|
141
|
+
inlineCSS: cssContent,
|
|
142
|
+
});
|
|
143
|
+
return html;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Write HTML report to file
|
|
147
|
+
*/
|
|
148
|
+
export async function writeHtmlReport(html, outputPath) {
|
|
149
|
+
// Ensure parent directory exists
|
|
150
|
+
await fs.ensureDir(dirname(outputPath));
|
|
151
|
+
// Write HTML string to file
|
|
152
|
+
await fs.writeFile(outputPath, html, 'utf-8');
|
|
153
|
+
console.log('HTML report saved: ' + outputPath);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=html-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-generator.js","sourceRoot":"","sources":["../../src/reports/html-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reports/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExecutionArtifact } from '../types/execution.js';
|
|
2
|
+
import type { AnalysisArtifact } from '../analysis/diagnosis-schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Generate complete Markdown report with YAML frontmatter
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateMarkdownReport(executionArtifact: ExecutionArtifact, analysisArtifact: AnalysisArtifact): string;
|
|
7
|
+
/**
|
|
8
|
+
* Write Markdown report to file
|
|
9
|
+
*/
|
|
10
|
+
export declare function writeMarkdownReport(markdown: string, outputPath: string): Promise<void>;
|