@runhalo/cli 0.1.0 → 0.3.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/README.md +97 -0
- package/dist/index.d.ts +67 -3
- package/dist/index.js +726 -6
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/README.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# @runhalo/cli
|
|
2
|
+
|
|
3
|
+
**Halo CLI** — scan your codebase for COPPA 2.0 privacy risks.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@runhalo/cli)
|
|
6
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
7
|
+
|
|
8
|
+
## What it does
|
|
9
|
+
|
|
10
|
+
One command scans your entire codebase for potential COPPA 2.0 violations and ethical design issues in children's apps. Powered by tree-sitter AST analysis with **20 COPPA rules** and **5 ethical design rules**.
|
|
11
|
+
|
|
12
|
+
## Quickstart
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Scan current directory
|
|
16
|
+
npx @runhalo/cli scan .
|
|
17
|
+
|
|
18
|
+
# Scan a specific directory
|
|
19
|
+
npx @runhalo/cli scan ./src
|
|
20
|
+
|
|
21
|
+
# JSON output for CI pipelines
|
|
22
|
+
npx @runhalo/cli scan . --format json
|
|
23
|
+
|
|
24
|
+
# SARIF output for GitHub Security tab
|
|
25
|
+
npx @runhalo/cli scan . --format sarif --output results.sarif
|
|
26
|
+
|
|
27
|
+
# Filter by severity
|
|
28
|
+
npx @runhalo/cli scan . --severity critical,high
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Example Output
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Halo COPPA Risk Scanner v0.1.1
|
|
35
|
+
|
|
36
|
+
Scanning... 142 files analyzed
|
|
37
|
+
|
|
38
|
+
src/auth/social-login.ts:24
|
|
39
|
+
coppa-auth-001 Unverified social login detected CRITICAL
|
|
40
|
+
|
|
41
|
+
src/services/analytics.ts:89
|
|
42
|
+
coppa-tracking-003 Third-party ad tracker found HIGH
|
|
43
|
+
|
|
44
|
+
src/components/Chat.tsx:15
|
|
45
|
+
coppa-ext-011 Unmoderated third-party chat HIGH
|
|
46
|
+
|
|
47
|
+
3 potential issues found | 142 files scanned | 97 checks passing
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Output Formats
|
|
51
|
+
|
|
52
|
+
| Format | Flag | Use Case |
|
|
53
|
+
|:-------|:-----|:---------|
|
|
54
|
+
| Text | `--format text` (default) | Terminal output |
|
|
55
|
+
| JSON | `--format json` | CI pipelines, tooling |
|
|
56
|
+
| SARIF | `--format sarif` | GitHub Security tab |
|
|
57
|
+
|
|
58
|
+
## GitHub Action
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
name: Halo COPPA Audit
|
|
62
|
+
on:
|
|
63
|
+
pull_request:
|
|
64
|
+
paths: ['**.ts', '**.js', '**.tsx', '**.jsx', '**.py']
|
|
65
|
+
|
|
66
|
+
jobs:
|
|
67
|
+
scan:
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
steps:
|
|
70
|
+
- uses: actions/checkout@v4
|
|
71
|
+
- uses: actions/setup-node@v4
|
|
72
|
+
with:
|
|
73
|
+
node-version: '20'
|
|
74
|
+
- run: npx @runhalo/cli scan . --format sarif --output results.sarif
|
|
75
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
76
|
+
with:
|
|
77
|
+
sarif_file: results.sarif
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Suppression
|
|
81
|
+
|
|
82
|
+
Suppress individual findings with inline comments:
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// halo-ignore coppa-auth-001
|
|
86
|
+
const auth = signInWithPopup(provider);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Or use a `.haloignore` file at your project root.
|
|
90
|
+
|
|
91
|
+
## Full Documentation
|
|
92
|
+
|
|
93
|
+
See the [Halo monorepo](https://github.com/runhalo/halo) for the complete rule reference, VS Code extension, MCP server, and more.
|
|
94
|
+
|
|
95
|
+
## License
|
|
96
|
+
|
|
97
|
+
Apache 2.0 — [Mindful Media](https://mindfulmedia.org)
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ interface CLIOptions {
|
|
|
14
14
|
output: string;
|
|
15
15
|
verbose: boolean;
|
|
16
16
|
ethicalPreview: boolean;
|
|
17
|
+
report: string | boolean;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* Format violations as SARIF output
|
|
@@ -22,11 +23,25 @@ declare function formatSARIF(results: ScanResult[], rules: any[]): string;
|
|
|
22
23
|
/**
|
|
23
24
|
* Format violations as JSON output
|
|
24
25
|
*/
|
|
25
|
-
declare function formatJSON(results: ScanResult[]): string;
|
|
26
|
+
declare function formatJSON(results: ScanResult[], scoreResult?: any): string;
|
|
26
27
|
/**
|
|
27
28
|
* Format violations as human-readable text
|
|
28
29
|
*/
|
|
29
|
-
declare function formatText(results: ScanResult[], verbose?: boolean, fileCount?: number): string;
|
|
30
|
+
declare function formatText(results: ScanResult[], verbose?: boolean, fileCount?: number, scoreResult?: any): string;
|
|
31
|
+
/**
|
|
32
|
+
* Format trend line comparing current score to last scan for the same project.
|
|
33
|
+
* Returns empty string if no prior history exists.
|
|
34
|
+
*/
|
|
35
|
+
declare function formatTrend(currentScore: number, projectPath: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Generate a self-contained HTML compliance report.
|
|
38
|
+
* Light theme for email-ability. All CSS inline. No external dependencies.
|
|
39
|
+
*/
|
|
40
|
+
declare function generateHtmlReport(results: ScanResult[], scoreResult: any, fileCount: number, projectPath: string, history?: ScanHistoryEntry[]): string;
|
|
41
|
+
/**
|
|
42
|
+
* Escape HTML special characters
|
|
43
|
+
*/
|
|
44
|
+
declare function escapeHtml(text: string): string;
|
|
30
45
|
/**
|
|
31
46
|
* Create a Halo engine instance
|
|
32
47
|
*/
|
|
@@ -39,8 +54,57 @@ declare function scanFile(filePath: string, content?: string): Violation[];
|
|
|
39
54
|
* Scan a directory
|
|
40
55
|
*/
|
|
41
56
|
declare function scanDirectory(dirPath: string, config?: EngineConfig): Promise<ScanResult[]>;
|
|
57
|
+
declare const HALO_CONFIG_DIR: string;
|
|
58
|
+
declare const HALO_CONFIG_PATH: string;
|
|
59
|
+
declare const HALO_HISTORY_PATH: string;
|
|
60
|
+
declare const MAX_HISTORY_ENTRIES = 100;
|
|
61
|
+
interface HaloConfig {
|
|
62
|
+
email?: string;
|
|
63
|
+
prompted: boolean;
|
|
64
|
+
promptedAt: string;
|
|
65
|
+
consent: boolean;
|
|
66
|
+
}
|
|
67
|
+
interface ScanHistoryEntry {
|
|
68
|
+
scannedAt: string;
|
|
69
|
+
score: number;
|
|
70
|
+
grade: string;
|
|
71
|
+
totalViolations: number;
|
|
72
|
+
bySeverity: {
|
|
73
|
+
critical: number;
|
|
74
|
+
high: number;
|
|
75
|
+
medium: number;
|
|
76
|
+
low: number;
|
|
77
|
+
};
|
|
78
|
+
filesScanned: number;
|
|
79
|
+
projectPath: string;
|
|
80
|
+
rulesTriggered: string[];
|
|
81
|
+
}
|
|
82
|
+
declare function loadConfig(): HaloConfig | null;
|
|
83
|
+
declare function saveConfig(config: HaloConfig): void;
|
|
84
|
+
declare function loadHistory(): ScanHistoryEntry[];
|
|
85
|
+
declare function saveHistory(entry: ScanHistoryEntry): void;
|
|
86
|
+
/**
|
|
87
|
+
* First-run email prompt — one-time, optional, non-blocking.
|
|
88
|
+
* Auto-skips when: config exists, --no-prompt, !isTTY, CI env.
|
|
89
|
+
*/
|
|
90
|
+
declare function firstRunPrompt(noPrompt: boolean): Promise<void>;
|
|
42
91
|
/**
|
|
43
92
|
* Main scan function
|
|
44
93
|
*/
|
|
45
94
|
declare function scan(paths: string[], options: CLIOptions): Promise<number>;
|
|
46
|
-
|
|
95
|
+
interface FixCLIOptions {
|
|
96
|
+
dryRun: boolean;
|
|
97
|
+
rules: string[];
|
|
98
|
+
verbose: boolean;
|
|
99
|
+
include: string[];
|
|
100
|
+
exclude: string[];
|
|
101
|
+
guided: boolean;
|
|
102
|
+
framework?: string;
|
|
103
|
+
scaffoldDir?: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Main fix function
|
|
107
|
+
* Flow: discover files → scan → filter auto-fixable → apply fixes → re-scan → write (or dry-run)
|
|
108
|
+
*/
|
|
109
|
+
declare function fix(paths: string[], options: FixCLIOptions): Promise<number>;
|
|
110
|
+
export { scan, fix, scanFile, scanDirectory, createEngine, formatSARIF, formatJSON, formatText, loadConfig, saveConfig, firstRunPrompt, loadHistory, saveHistory, formatTrend, generateHtmlReport, escapeHtml, HALO_CONFIG_DIR, HALO_CONFIG_PATH, HALO_HISTORY_PATH, MAX_HISTORY_ENTRIES };
|
package/dist/index.js
CHANGED
|
@@ -38,17 +38,29 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
38
38
|
};
|
|
39
39
|
})();
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.MAX_HISTORY_ENTRIES = exports.HALO_HISTORY_PATH = exports.HALO_CONFIG_PATH = exports.HALO_CONFIG_DIR = void 0;
|
|
41
42
|
exports.scan = scan;
|
|
43
|
+
exports.fix = fix;
|
|
42
44
|
exports.scanFile = scanFile;
|
|
43
45
|
exports.scanDirectory = scanDirectory;
|
|
44
46
|
exports.createEngine = createEngine;
|
|
45
47
|
exports.formatSARIF = formatSARIF;
|
|
46
48
|
exports.formatJSON = formatJSON;
|
|
47
49
|
exports.formatText = formatText;
|
|
50
|
+
exports.loadConfig = loadConfig;
|
|
51
|
+
exports.saveConfig = saveConfig;
|
|
52
|
+
exports.firstRunPrompt = firstRunPrompt;
|
|
53
|
+
exports.loadHistory = loadHistory;
|
|
54
|
+
exports.saveHistory = saveHistory;
|
|
55
|
+
exports.formatTrend = formatTrend;
|
|
56
|
+
exports.generateHtmlReport = generateHtmlReport;
|
|
57
|
+
exports.escapeHtml = escapeHtml;
|
|
48
58
|
const commander_1 = require("commander");
|
|
49
59
|
const glob_1 = require("glob");
|
|
50
60
|
const fs = __importStar(require("fs"));
|
|
51
61
|
const path = __importStar(require("path"));
|
|
62
|
+
const os = __importStar(require("os"));
|
|
63
|
+
const readline = __importStar(require("readline"));
|
|
52
64
|
const engine_1 = require("@runhalo/engine");
|
|
53
65
|
// CLI configuration
|
|
54
66
|
const program = new commander_1.Command();
|
|
@@ -175,7 +187,7 @@ function formatSARIF(results, rules) {
|
|
|
175
187
|
/**
|
|
176
188
|
* Format violations as JSON output
|
|
177
189
|
*/
|
|
178
|
-
function formatJSON(results) {
|
|
190
|
+
function formatJSON(results, scoreResult) {
|
|
179
191
|
const output = {
|
|
180
192
|
version: '1.0.0',
|
|
181
193
|
scannedAt: new Date().toISOString(),
|
|
@@ -183,6 +195,15 @@ function formatJSON(results) {
|
|
|
183
195
|
totalViolations: results.reduce((sum, r) => sum + r.violations.length, 0),
|
|
184
196
|
results: results
|
|
185
197
|
};
|
|
198
|
+
if (scoreResult) {
|
|
199
|
+
output.complianceScore = {
|
|
200
|
+
score: scoreResult.score,
|
|
201
|
+
grade: scoreResult.grade,
|
|
202
|
+
pointsDeducted: scoreResult.pointsDeducted,
|
|
203
|
+
bySeverity: scoreResult.bySeverity,
|
|
204
|
+
rulesTriggered: scoreResult.rulesTriggered,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
186
207
|
return JSON.stringify(output, null, 2);
|
|
187
208
|
}
|
|
188
209
|
// ANSI color codes for terminal output
|
|
@@ -208,7 +229,7 @@ function c(color, text) {
|
|
|
208
229
|
/**
|
|
209
230
|
* Format violations as human-readable text
|
|
210
231
|
*/
|
|
211
|
-
function formatText(results, verbose = false, fileCount = 0) {
|
|
232
|
+
function formatText(results, verbose = false, fileCount = 0, scoreResult) {
|
|
212
233
|
let output = '';
|
|
213
234
|
let totalViolations = 0;
|
|
214
235
|
let criticalCount = 0;
|
|
@@ -270,7 +291,12 @@ function formatText(results, verbose = false, fileCount = 0) {
|
|
|
270
291
|
}
|
|
271
292
|
if (totalViolations === 0) {
|
|
272
293
|
const scannedMsg = fileCount > 0 ? ` (${fileCount} files scanned)` : '';
|
|
273
|
-
|
|
294
|
+
let cleanOutput = `${c(colors.bold, '✅ No COPPA issues detected!')}${scannedMsg}\n`;
|
|
295
|
+
// Show perfect score for clean repos
|
|
296
|
+
if (scoreResult) {
|
|
297
|
+
cleanOutput += `\n${formatScoreLine(scoreResult)}\n`;
|
|
298
|
+
}
|
|
299
|
+
return cleanOutput;
|
|
274
300
|
}
|
|
275
301
|
// Summary header
|
|
276
302
|
let header = `\n${c(colors.bold, `⚠ Found ${totalViolations} issue(s)`)}`;
|
|
@@ -290,8 +316,272 @@ function formatText(results, verbose = false, fileCount = 0) {
|
|
|
290
316
|
if (lowCount > 0)
|
|
291
317
|
parts.push(c(colors.dim, `${lowCount} low`));
|
|
292
318
|
header += ` ${parts.join(c(colors.dim, ' · '))}\n`;
|
|
319
|
+
// Compliance score line
|
|
320
|
+
if (scoreResult) {
|
|
321
|
+
header += `\n${formatScoreLine(scoreResult)}\n`;
|
|
322
|
+
}
|
|
293
323
|
return header + output;
|
|
294
324
|
}
|
|
325
|
+
/**
|
|
326
|
+
* Format the compliance score line with grade coloring
|
|
327
|
+
*/
|
|
328
|
+
function formatScoreLine(scoreResult) {
|
|
329
|
+
const { score, grade } = scoreResult;
|
|
330
|
+
// Color the grade based on value
|
|
331
|
+
let gradeColor;
|
|
332
|
+
switch (grade) {
|
|
333
|
+
case 'A':
|
|
334
|
+
gradeColor = '\x1b[32m'; // green
|
|
335
|
+
break;
|
|
336
|
+
case 'B':
|
|
337
|
+
gradeColor = '\x1b[36m'; // cyan
|
|
338
|
+
break;
|
|
339
|
+
case 'C':
|
|
340
|
+
gradeColor = '\x1b[33m'; // yellow
|
|
341
|
+
break;
|
|
342
|
+
case 'D':
|
|
343
|
+
gradeColor = '\x1b[33m'; // yellow
|
|
344
|
+
break;
|
|
345
|
+
default:
|
|
346
|
+
gradeColor = '\x1b[31m'; // red for F
|
|
347
|
+
}
|
|
348
|
+
const gradeStr = c(gradeColor + colors.bold, grade);
|
|
349
|
+
const scoreStr = c(colors.bold, `${score}/100`);
|
|
350
|
+
return `${c(colors.bold, '📊 COPPA Compliance Score:')} ${scoreStr} (${gradeStr})`;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Format trend line comparing current score to last scan for the same project.
|
|
354
|
+
* Returns empty string if no prior history exists.
|
|
355
|
+
*/
|
|
356
|
+
function formatTrend(currentScore, projectPath) {
|
|
357
|
+
const history = loadHistory();
|
|
358
|
+
const projectHistory = history.filter(h => h.projectPath === projectPath);
|
|
359
|
+
if (projectHistory.length === 0)
|
|
360
|
+
return '';
|
|
361
|
+
const last = projectHistory[projectHistory.length - 1];
|
|
362
|
+
const diff = currentScore - last.score;
|
|
363
|
+
if (diff > 0) {
|
|
364
|
+
return ` ${c('\x1b[32m', `↑ ${last.score}% → ${currentScore}% (+${diff} since last scan)`)}`;
|
|
365
|
+
}
|
|
366
|
+
else if (diff < 0) {
|
|
367
|
+
return ` ${c(colors.red, `↓ ${last.score}% → ${currentScore}% (${diff} since last scan)`)}`;
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
return ` ${c(colors.dim, `→ ${currentScore}% (no change since last scan)`)}`;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// ==================== HTML Report Generator ====================
|
|
374
|
+
/**
|
|
375
|
+
* Generate a self-contained HTML compliance report.
|
|
376
|
+
* Light theme for email-ability. All CSS inline. No external dependencies.
|
|
377
|
+
*/
|
|
378
|
+
function generateHtmlReport(results, scoreResult, fileCount, projectPath, history) {
|
|
379
|
+
const scanDate = new Date().toLocaleDateString('en-US', {
|
|
380
|
+
weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
|
|
381
|
+
});
|
|
382
|
+
const scanTime = new Date().toLocaleTimeString('en-US', {
|
|
383
|
+
hour: '2-digit', minute: '2-digit'
|
|
384
|
+
});
|
|
385
|
+
const totalViolations = results.reduce((sum, r) => sum + r.violations.length, 0);
|
|
386
|
+
const allViolations = results.flatMap(r => r.violations);
|
|
387
|
+
// Grade color
|
|
388
|
+
const gradeColorMap = {
|
|
389
|
+
A: '#22c55e', B: '#3b82f6', C: '#eab308', D: '#f97316', F: '#ef4444'
|
|
390
|
+
};
|
|
391
|
+
const gradeColor = gradeColorMap[scoreResult.grade] || '#6b7280';
|
|
392
|
+
// Trend HTML
|
|
393
|
+
let trendHtml = '';
|
|
394
|
+
if (history && history.length > 0) {
|
|
395
|
+
const projectHistory = history.filter(h => h.projectPath === projectPath);
|
|
396
|
+
if (projectHistory.length > 0) {
|
|
397
|
+
const last = projectHistory[projectHistory.length - 1];
|
|
398
|
+
const diff = scoreResult.score - last.score;
|
|
399
|
+
if (diff > 0) {
|
|
400
|
+
trendHtml = `<div style="margin-top:8px;color:#22c55e;font-size:14px;">↑ ${last.score}% → ${scoreResult.score}% (+${diff} since last scan)</div>`;
|
|
401
|
+
}
|
|
402
|
+
else if (diff < 0) {
|
|
403
|
+
trendHtml = `<div style="margin-top:8px;color:#ef4444;font-size:14px;">↓ ${last.score}% → ${scoreResult.score}% (${diff} since last scan)</div>`;
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
trendHtml = `<div style="margin-top:8px;color:#6b7280;font-size:14px;">→ ${scoreResult.score}% (no change since last scan)</div>`;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Severity bar segments
|
|
411
|
+
const { critical = 0, high = 0, medium = 0, low = 0 } = scoreResult.bySeverity || {};
|
|
412
|
+
const severityTotal = critical + high + medium + low;
|
|
413
|
+
const severityBar = severityTotal > 0 ? `
|
|
414
|
+
<div style="display:flex;height:8px;border-radius:4px;overflow:hidden;margin:12px 0;">
|
|
415
|
+
${critical > 0 ? `<div style="width:${(critical / severityTotal * 100).toFixed(1)}%;background:#ef4444;"></div>` : ''}
|
|
416
|
+
${high > 0 ? `<div style="width:${(high / severityTotal * 100).toFixed(1)}%;background:#f97316;"></div>` : ''}
|
|
417
|
+
${medium > 0 ? `<div style="width:${(medium / severityTotal * 100).toFixed(1)}%;background:#eab308;"></div>` : ''}
|
|
418
|
+
${low > 0 ? `<div style="width:${(low / severityTotal * 100).toFixed(1)}%;background:#3b82f6;"></div>` : ''}
|
|
419
|
+
</div>` : '';
|
|
420
|
+
// Violations by file
|
|
421
|
+
const violationsHtml = results.map(result => {
|
|
422
|
+
if (result.violations.length === 0)
|
|
423
|
+
return '';
|
|
424
|
+
const relPath = path.relative(projectPath, result.filePath) || result.filePath;
|
|
425
|
+
const fileViolations = result.violations.map(v => {
|
|
426
|
+
const sevColors = {
|
|
427
|
+
critical: '#ef4444', high: '#f97316', medium: '#eab308', low: '#3b82f6'
|
|
428
|
+
};
|
|
429
|
+
const sevColor = sevColors[v.severity] || '#6b7280';
|
|
430
|
+
const sevBg = {
|
|
431
|
+
critical: '#fef2f2', high: '#fff7ed', medium: '#fefce8', low: '#eff6ff'
|
|
432
|
+
};
|
|
433
|
+
const bg = sevBg[v.severity] || '#f9fafb';
|
|
434
|
+
const snippet = v.codeSnippet
|
|
435
|
+
? `<pre style="background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:8px;font-size:12px;overflow-x:auto;margin:4px 0 0 0;">${escapeHtml(v.codeSnippet)}</pre>`
|
|
436
|
+
: '';
|
|
437
|
+
return `
|
|
438
|
+
<div style="padding:12px;margin:8px 0;background:${bg};border-left:3px solid ${sevColor};border-radius:4px;">
|
|
439
|
+
<div style="display:flex;align-items:center;gap:8px;margin-bottom:4px;">
|
|
440
|
+
<span style="display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600;color:white;background:${sevColor};text-transform:uppercase;">${v.severity}</span>
|
|
441
|
+
<code style="font-size:12px;color:#6366f1;">${v.ruleId}</code>
|
|
442
|
+
<span style="font-size:12px;color:#6b7280;">Line ${v.line}</span>
|
|
443
|
+
</div>
|
|
444
|
+
<div style="font-size:13px;color:#1e293b;margin-bottom:4px;">${escapeHtml(v.message)}</div>
|
|
445
|
+
${snippet}
|
|
446
|
+
${v.fixSuggestion ? `<div style="font-size:12px;color:#059669;margin-top:6px;">💡 ${escapeHtml(v.fixSuggestion)}</div>` : ''}
|
|
447
|
+
${v.penalty ? `<div style="font-size:11px;color:#dc2626;margin-top:4px;">⚠ Penalty: ${escapeHtml(v.penalty)}</div>` : ''}
|
|
448
|
+
</div>`;
|
|
449
|
+
}).join('');
|
|
450
|
+
return `
|
|
451
|
+
<details style="margin:8px 0;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;">
|
|
452
|
+
<summary style="padding:12px 16px;background:#f8fafc;cursor:pointer;font-weight:500;font-size:14px;display:flex;justify-content:space-between;align-items:center;">
|
|
453
|
+
<span style="font-family:monospace;color:#1e293b;">${escapeHtml(relPath)}</span>
|
|
454
|
+
<span style="background:#fee2e2;color:#dc2626;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:600;">${result.violations.length} issue${result.violations.length !== 1 ? 's' : ''}</span>
|
|
455
|
+
</summary>
|
|
456
|
+
<div style="padding:8px 16px 16px 16px;">
|
|
457
|
+
${fileViolations}
|
|
458
|
+
</div>
|
|
459
|
+
</details>`;
|
|
460
|
+
}).filter(Boolean).join('');
|
|
461
|
+
// Auto-fixable section
|
|
462
|
+
const autoFixable = allViolations.filter(v => ['coppa-sec-006', 'coppa-sec-010', 'coppa-sec-015', 'coppa-default-020'].includes(v.ruleId));
|
|
463
|
+
const autoFixHtml = autoFixable.length > 0 ? `
|
|
464
|
+
<div style="margin:24px 0;padding:16px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;">
|
|
465
|
+
<h3 style="margin:0 0 8px 0;color:#166534;font-size:16px;">🔧 Auto-Fixable Issues (${autoFixable.length})</h3>
|
|
466
|
+
<p style="margin:0 0 12px 0;color:#15803d;font-size:13px;">These violations can be automatically fixed. Run:</p>
|
|
467
|
+
<code style="display:block;background:#166534;color:#bbf7d0;padding:10px 14px;border-radius:6px;font-size:13px;">npx runhalo fix .</code>
|
|
468
|
+
</div>` : '';
|
|
469
|
+
// Recommendations
|
|
470
|
+
const recommendations = [];
|
|
471
|
+
if (critical > 0)
|
|
472
|
+
recommendations.push(`<li style="color:#dc2626;"><strong>Fix ${critical} critical issue${critical !== 1 ? 's' : ''} immediately</strong> — these represent the highest compliance risk and largest potential penalties.</li>`);
|
|
473
|
+
if (high > 0)
|
|
474
|
+
recommendations.push(`<li style="color:#ea580c;"><strong>Address ${high} high-severity issue${high !== 1 ? 's' : ''}</strong> — these are significant compliance gaps that should be resolved before release.</li>`);
|
|
475
|
+
if (autoFixable.length > 0)
|
|
476
|
+
recommendations.push(`<li style="color:#059669;"><strong>Run <code>npx runhalo fix .</code></strong> to automatically resolve ${autoFixable.length} issue${autoFixable.length !== 1 ? 's' : ''} (HTTP→HTTPS, default privacy settings, input sanitization).</li>`);
|
|
477
|
+
if (medium > 0)
|
|
478
|
+
recommendations.push(`<li style="color:#ca8a04;">Review ${medium} medium-severity issue${medium !== 1 ? 's' : ''} — these may require design changes or policy updates.</li>`);
|
|
479
|
+
if (totalViolations === 0)
|
|
480
|
+
recommendations.push(`<li style="color:#22c55e;"><strong>No issues detected!</strong> Your codebase passes all current COPPA compliance checks.</li>`);
|
|
481
|
+
return `<!DOCTYPE html>
|
|
482
|
+
<html lang="en">
|
|
483
|
+
<head>
|
|
484
|
+
<meta charset="UTF-8">
|
|
485
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
486
|
+
<title>Halo COPPA Compliance Report — ${scanDate}</title>
|
|
487
|
+
<style>
|
|
488
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
489
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; color: #1e293b; background: #ffffff; line-height: 1.6; }
|
|
490
|
+
.container { max-width: 800px; margin: 0 auto; padding: 32px 24px; }
|
|
491
|
+
h1 { font-size: 24px; font-weight: 700; margin-bottom: 4px; }
|
|
492
|
+
h2 { font-size: 18px; font-weight: 600; margin: 32px 0 16px 0; color: #0f172a; border-bottom: 2px solid #e2e8f0; padding-bottom: 8px; }
|
|
493
|
+
.header { border-bottom: 3px solid #6366f1; padding-bottom: 24px; margin-bottom: 32px; }
|
|
494
|
+
.score-section { display: flex; align-items: center; gap: 32px; margin: 24px 0; }
|
|
495
|
+
.score-circle { width: 120px; height: 120px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
|
|
496
|
+
.score-inner { width: 96px; height: 96px; border-radius: 50%; background: white; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
|
497
|
+
.score-value { font-size: 28px; font-weight: 700; }
|
|
498
|
+
.score-label { font-size: 11px; color: #6b7280; text-transform: uppercase; letter-spacing: 0.05em; }
|
|
499
|
+
.grade-badge { display: inline-block; font-size: 36px; font-weight: 800; padding: 4px 16px; border-radius: 8px; }
|
|
500
|
+
.severity-table { width: 100%; border-collapse: collapse; margin: 12px 0; }
|
|
501
|
+
.severity-table td, .severity-table th { padding: 8px 12px; text-align: left; border-bottom: 1px solid #f1f5f9; font-size: 13px; }
|
|
502
|
+
.severity-table th { color: #6b7280; font-weight: 500; font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; }
|
|
503
|
+
.severity-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 6px; }
|
|
504
|
+
.recommendations { margin: 16px 0; }
|
|
505
|
+
.recommendations li { margin: 8px 0; font-size: 14px; line-height: 1.5; }
|
|
506
|
+
.footer { margin-top: 48px; padding-top: 24px; border-top: 1px solid #e2e8f0; color: #94a3b8; font-size: 12px; }
|
|
507
|
+
details summary::-webkit-details-marker { display: none; }
|
|
508
|
+
details summary::before { content: '▶ '; font-size: 10px; color: #94a3b8; }
|
|
509
|
+
details[open] summary::before { content: '▼ '; }
|
|
510
|
+
@media (max-width: 600px) { .score-section { flex-direction: column; align-items: flex-start; } }
|
|
511
|
+
@media print { details { open: true; } details[open] summary { display: none; } }
|
|
512
|
+
</style>
|
|
513
|
+
</head>
|
|
514
|
+
<body>
|
|
515
|
+
<div class="container">
|
|
516
|
+
<div class="header">
|
|
517
|
+
<div style="display:flex;align-items:center;gap:12px;margin-bottom:16px;">
|
|
518
|
+
<div style="width:32px;height:32px;border-radius:8px;background:linear-gradient(135deg,#6366f1,#a855f7);display:flex;align-items:center;justify-content:center;">
|
|
519
|
+
<span style="color:white;font-weight:700;font-size:14px;">H</span>
|
|
520
|
+
</div>
|
|
521
|
+
<h1>COPPA Compliance Report</h1>
|
|
522
|
+
</div>
|
|
523
|
+
<div style="font-size:13px;color:#6b7280;">
|
|
524
|
+
<span>${scanDate} at ${scanTime}</span>
|
|
525
|
+
<span style="margin:0 8px;">·</span>
|
|
526
|
+
<span>${fileCount} files scanned</span>
|
|
527
|
+
<span style="margin:0 8px;">·</span>
|
|
528
|
+
<span style="font-family:monospace;">${escapeHtml(projectPath)}</span>
|
|
529
|
+
</div>
|
|
530
|
+
</div>
|
|
531
|
+
|
|
532
|
+
<div class="score-section">
|
|
533
|
+
<div class="score-circle" style="background:conic-gradient(${gradeColor} ${scoreResult.score * 3.6}deg, #e2e8f0 0);">
|
|
534
|
+
<div class="score-inner">
|
|
535
|
+
<div class="score-value">${scoreResult.score}</div>
|
|
536
|
+
<div class="score-label">out of 100</div>
|
|
537
|
+
</div>
|
|
538
|
+
</div>
|
|
539
|
+
<div>
|
|
540
|
+
<div class="grade-badge" style="color:${gradeColor};background:${gradeColor}15;">Grade ${scoreResult.grade}</div>
|
|
541
|
+
<div style="margin-top:8px;font-size:14px;color:#475569;">${totalViolations} violation${totalViolations !== 1 ? 's' : ''} found across ${results.filter(r => r.violations.length > 0).length} file${results.filter(r => r.violations.length > 0).length !== 1 ? 's' : ''}</div>
|
|
542
|
+
${trendHtml}
|
|
543
|
+
</div>
|
|
544
|
+
</div>
|
|
545
|
+
|
|
546
|
+
<h2>Severity Breakdown</h2>
|
|
547
|
+
${severityBar}
|
|
548
|
+
<table class="severity-table">
|
|
549
|
+
<tr><th>Severity</th><th>Count</th><th>Points Deducted</th></tr>
|
|
550
|
+
<tr><td><span class="severity-dot" style="background:#ef4444;"></span>Critical</td><td><strong>${critical}</strong></td><td>${critical > 0 ? '-' + (critical * 10) : '—'}</td></tr>
|
|
551
|
+
<tr><td><span class="severity-dot" style="background:#f97316;"></span>High</td><td><strong>${high}</strong></td><td>${high > 0 ? '-' + (high * 5) : '—'}</td></tr>
|
|
552
|
+
<tr><td><span class="severity-dot" style="background:#eab308;"></span>Medium</td><td><strong>${medium}</strong></td><td>${medium > 0 ? '-' + (medium * 2) : '—'}</td></tr>
|
|
553
|
+
<tr><td><span class="severity-dot" style="background:#3b82f6;"></span>Low</td><td><strong>${low}</strong></td><td>${low > 0 ? '-' + low : '—'}</td></tr>
|
|
554
|
+
</table>
|
|
555
|
+
|
|
556
|
+
${autoFixHtml}
|
|
557
|
+
|
|
558
|
+
${totalViolations > 0 ? `<h2>Violations by File</h2>${violationsHtml}` : ''}
|
|
559
|
+
|
|
560
|
+
${recommendations.length > 0 ? `
|
|
561
|
+
<h2>Recommendations</h2>
|
|
562
|
+
<ol class="recommendations">
|
|
563
|
+
${recommendations.join('\n ')}
|
|
564
|
+
</ol>` : ''}
|
|
565
|
+
|
|
566
|
+
<div class="footer">
|
|
567
|
+
<p><strong>Disclaimer:</strong> Halo is a developer tool designed to assist with code analysis and identifying potential privacy issues. It is not legal advice and does not guarantee compliance with COPPA, GDPR, or any other regulation. Always consult with qualified legal counsel regarding your specific compliance obligations.</p>
|
|
568
|
+
<p style="margin-top:8px;">Generated by <strong>Halo</strong> v${CLI_VERSION} · <a href="https://runhalo.dev" style="color:#6366f1;">runhalo.dev</a></p>
|
|
569
|
+
</div>
|
|
570
|
+
</div>
|
|
571
|
+
</body>
|
|
572
|
+
</html>`;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Escape HTML special characters
|
|
576
|
+
*/
|
|
577
|
+
function escapeHtml(text) {
|
|
578
|
+
return text
|
|
579
|
+
.replace(/&/g, '&')
|
|
580
|
+
.replace(/</g, '<')
|
|
581
|
+
.replace(/>/g, '>')
|
|
582
|
+
.replace(/"/g, '"')
|
|
583
|
+
.replace(/'/g, ''');
|
|
584
|
+
}
|
|
295
585
|
/**
|
|
296
586
|
* Load .haloignore from a directory (walks up to find it)
|
|
297
587
|
*/
|
|
@@ -377,6 +667,148 @@ async function scanDirectory(dirPath, config) {
|
|
|
377
667
|
}
|
|
378
668
|
return results;
|
|
379
669
|
}
|
|
670
|
+
// ==================== First-Run Email Prompt ====================
|
|
671
|
+
const HALO_CONFIG_DIR = path.join(os.homedir(), '.halo');
|
|
672
|
+
exports.HALO_CONFIG_DIR = HALO_CONFIG_DIR;
|
|
673
|
+
const HALO_CONFIG_PATH = path.join(HALO_CONFIG_DIR, 'config.json');
|
|
674
|
+
exports.HALO_CONFIG_PATH = HALO_CONFIG_PATH;
|
|
675
|
+
const HALO_HISTORY_PATH = path.join(HALO_CONFIG_DIR, 'history.json');
|
|
676
|
+
exports.HALO_HISTORY_PATH = HALO_HISTORY_PATH;
|
|
677
|
+
const MAX_HISTORY_ENTRIES = 100;
|
|
678
|
+
exports.MAX_HISTORY_ENTRIES = MAX_HISTORY_ENTRIES;
|
|
679
|
+
const CLI_VERSION = '0.2.1';
|
|
680
|
+
const SUPABASE_URL = 'https://wrfwcmyxxbafcdvxlmug.supabase.co';
|
|
681
|
+
const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6IndyZndjbXl4eGJhZmNkdnhsbXVnIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzIzNDc5MzIsImV4cCI6MjA4NzkyMzkzMn0.6Wj58QDuojPAY_ArVbZvjhcFVuX5VvzqjaEg0FkoYJI';
|
|
682
|
+
function loadConfig() {
|
|
683
|
+
try {
|
|
684
|
+
if (fs.existsSync(HALO_CONFIG_PATH)) {
|
|
685
|
+
return JSON.parse(fs.readFileSync(HALO_CONFIG_PATH, 'utf-8'));
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
catch {
|
|
689
|
+
// Ignore corrupt config
|
|
690
|
+
}
|
|
691
|
+
return null;
|
|
692
|
+
}
|
|
693
|
+
function saveConfig(config) {
|
|
694
|
+
try {
|
|
695
|
+
if (!fs.existsSync(HALO_CONFIG_DIR)) {
|
|
696
|
+
fs.mkdirSync(HALO_CONFIG_DIR, { recursive: true });
|
|
697
|
+
}
|
|
698
|
+
fs.writeFileSync(HALO_CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
|
|
699
|
+
}
|
|
700
|
+
catch {
|
|
701
|
+
// Silent failure — never block scan
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
// ==================== Scan History ====================
|
|
705
|
+
function loadHistory() {
|
|
706
|
+
try {
|
|
707
|
+
if (fs.existsSync(HALO_HISTORY_PATH)) {
|
|
708
|
+
const data = JSON.parse(fs.readFileSync(HALO_HISTORY_PATH, 'utf-8'));
|
|
709
|
+
return Array.isArray(data) ? data : [];
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
catch {
|
|
713
|
+
// Silent failure — never block scan
|
|
714
|
+
}
|
|
715
|
+
return [];
|
|
716
|
+
}
|
|
717
|
+
function saveHistory(entry) {
|
|
718
|
+
try {
|
|
719
|
+
if (!fs.existsSync(HALO_CONFIG_DIR)) {
|
|
720
|
+
fs.mkdirSync(HALO_CONFIG_DIR, { recursive: true });
|
|
721
|
+
}
|
|
722
|
+
const history = loadHistory();
|
|
723
|
+
history.push(entry);
|
|
724
|
+
// FIFO: keep last MAX_HISTORY_ENTRIES
|
|
725
|
+
const trimmed = history.slice(-MAX_HISTORY_ENTRIES);
|
|
726
|
+
fs.writeFileSync(HALO_HISTORY_PATH, JSON.stringify(trimmed, null, 2), 'utf-8');
|
|
727
|
+
}
|
|
728
|
+
catch {
|
|
729
|
+
// Silent failure — never block scan
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
async function submitCliLead(email) {
|
|
733
|
+
try {
|
|
734
|
+
const res = await fetch(`${SUPABASE_URL}/rest/v1/halo_leads`, {
|
|
735
|
+
method: 'POST',
|
|
736
|
+
headers: {
|
|
737
|
+
'apikey': SUPABASE_ANON_KEY,
|
|
738
|
+
'Authorization': `Bearer ${SUPABASE_ANON_KEY}`,
|
|
739
|
+
'Content-Type': 'application/json',
|
|
740
|
+
'Prefer': 'return=minimal',
|
|
741
|
+
},
|
|
742
|
+
body: JSON.stringify({
|
|
743
|
+
email,
|
|
744
|
+
source: 'cli',
|
|
745
|
+
cli_version: CLI_VERSION,
|
|
746
|
+
node_version: process.version,
|
|
747
|
+
os: os.platform(),
|
|
748
|
+
consent_given: true,
|
|
749
|
+
consent_text: 'Opted in via Halo CLI first-run prompt',
|
|
750
|
+
}),
|
|
751
|
+
});
|
|
752
|
+
// Silent — don't care about response
|
|
753
|
+
}
|
|
754
|
+
catch {
|
|
755
|
+
// Silent failure — never block scan
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* First-run email prompt — one-time, optional, non-blocking.
|
|
760
|
+
* Auto-skips when: config exists, --no-prompt, !isTTY, CI env.
|
|
761
|
+
*/
|
|
762
|
+
async function firstRunPrompt(noPrompt) {
|
|
763
|
+
// Skip conditions
|
|
764
|
+
if (noPrompt)
|
|
765
|
+
return;
|
|
766
|
+
if (!process.stdin.isTTY)
|
|
767
|
+
return;
|
|
768
|
+
if (process.env.CI)
|
|
769
|
+
return;
|
|
770
|
+
const existing = loadConfig();
|
|
771
|
+
if (existing?.prompted)
|
|
772
|
+
return;
|
|
773
|
+
// Show prompt on stderr (never pollute stdout JSON/SARIF)
|
|
774
|
+
process.stderr.write('\n');
|
|
775
|
+
process.stderr.write(' Welcome to Halo! 👋\n');
|
|
776
|
+
process.stderr.write(' Stay updated on COPPA scanning, new rules, and Pro features.\n');
|
|
777
|
+
process.stderr.write(' We\'ll send occasional product updates. No spam. Unsubscribe anytime.\n');
|
|
778
|
+
process.stderr.write('\n');
|
|
779
|
+
const rl = readline.createInterface({
|
|
780
|
+
input: process.stdin,
|
|
781
|
+
output: process.stderr,
|
|
782
|
+
});
|
|
783
|
+
return new Promise((resolve) => {
|
|
784
|
+
rl.question(' Email (Enter to skip): ', (answer) => {
|
|
785
|
+
rl.close();
|
|
786
|
+
const email = answer.trim();
|
|
787
|
+
if (email && email.includes('@')) {
|
|
788
|
+
// Save config with email
|
|
789
|
+
saveConfig({
|
|
790
|
+
email,
|
|
791
|
+
prompted: true,
|
|
792
|
+
promptedAt: new Date().toISOString(),
|
|
793
|
+
consent: true,
|
|
794
|
+
});
|
|
795
|
+
// Submit to Supabase (fire-and-forget)
|
|
796
|
+
submitCliLead(email).catch(() => { });
|
|
797
|
+
process.stderr.write(` ${c('\x1b[32m', '✓')} Thanks! We'll keep you posted.\n\n`);
|
|
798
|
+
}
|
|
799
|
+
else {
|
|
800
|
+
// Skipped — save that we prompted (never ask again)
|
|
801
|
+
saveConfig({
|
|
802
|
+
prompted: true,
|
|
803
|
+
promptedAt: new Date().toISOString(),
|
|
804
|
+
consent: false,
|
|
805
|
+
});
|
|
806
|
+
process.stderr.write('\n');
|
|
807
|
+
}
|
|
808
|
+
resolve();
|
|
809
|
+
});
|
|
810
|
+
});
|
|
811
|
+
}
|
|
380
812
|
/**
|
|
381
813
|
* Main scan function
|
|
382
814
|
*/
|
|
@@ -559,6 +991,24 @@ async function scan(paths, options) {
|
|
|
559
991
|
}
|
|
560
992
|
}
|
|
561
993
|
}
|
|
994
|
+
// Calculate compliance score
|
|
995
|
+
const allViolations = results.flatMap(r => r.violations);
|
|
996
|
+
const scorer = new engine_1.ComplianceScoreEngine();
|
|
997
|
+
const scoreResult = scorer.calculate(allViolations, fileCount);
|
|
998
|
+
// Scan history: compute trend BEFORE saving (so we compare to previous, not current)
|
|
999
|
+
const projectPath = path.resolve(paths[0] || '.');
|
|
1000
|
+
const trendLine = formatTrend(scoreResult.score, projectPath);
|
|
1001
|
+
// Save to history (silent, never blocks)
|
|
1002
|
+
saveHistory({
|
|
1003
|
+
scannedAt: new Date().toISOString(),
|
|
1004
|
+
score: scoreResult.score,
|
|
1005
|
+
grade: scoreResult.grade,
|
|
1006
|
+
totalViolations: scoreResult.totalViolations,
|
|
1007
|
+
bySeverity: scoreResult.bySeverity,
|
|
1008
|
+
filesScanned: fileCount,
|
|
1009
|
+
projectPath,
|
|
1010
|
+
rulesTriggered: scoreResult.rulesTriggered,
|
|
1011
|
+
});
|
|
562
1012
|
// Format output
|
|
563
1013
|
let output;
|
|
564
1014
|
switch (options.format) {
|
|
@@ -566,10 +1016,26 @@ async function scan(paths, options) {
|
|
|
566
1016
|
output = formatSARIF(results, engine.getRules());
|
|
567
1017
|
break;
|
|
568
1018
|
case 'json':
|
|
569
|
-
output = formatJSON(results);
|
|
1019
|
+
output = formatJSON(results, scoreResult);
|
|
570
1020
|
break;
|
|
571
1021
|
default:
|
|
572
|
-
output = formatText(results, options.verbose, fileCount);
|
|
1022
|
+
output = formatText(results, options.verbose, fileCount, scoreResult);
|
|
1023
|
+
// Append trend line for text output
|
|
1024
|
+
if (trendLine) {
|
|
1025
|
+
output += trendLine + '\n';
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
// Generate HTML report if requested (in addition to normal output)
|
|
1029
|
+
if (options.report) {
|
|
1030
|
+
const reportFilename = typeof options.report === 'string'
|
|
1031
|
+
? options.report
|
|
1032
|
+
: 'halo-report.html';
|
|
1033
|
+
const projectHistory = loadHistory().filter(h => h.projectPath === projectPath);
|
|
1034
|
+
// Exclude the entry we just saved (last one) so trend is accurate
|
|
1035
|
+
const historyForReport = projectHistory.slice(0, -1);
|
|
1036
|
+
const html = generateHtmlReport(results, scoreResult, fileCount, projectPath, historyForReport);
|
|
1037
|
+
fs.writeFileSync(reportFilename, html, 'utf-8');
|
|
1038
|
+
console.error(`📄 HTML report written to ${reportFilename}`);
|
|
573
1039
|
}
|
|
574
1040
|
// Write output (only one path — no duplication)
|
|
575
1041
|
if (options.output) {
|
|
@@ -589,6 +1055,223 @@ async function scan(paths, options) {
|
|
|
589
1055
|
}
|
|
590
1056
|
return 0; // No violations
|
|
591
1057
|
}
|
|
1058
|
+
/**
|
|
1059
|
+
* Main fix function
|
|
1060
|
+
* Flow: discover files → scan → filter auto-fixable → apply fixes → re-scan → write (or dry-run)
|
|
1061
|
+
*/
|
|
1062
|
+
async function fix(paths, options) {
|
|
1063
|
+
const scanRoot = paths[0] || '.';
|
|
1064
|
+
if (!fs.existsSync(scanRoot)) {
|
|
1065
|
+
console.error(`❌ Path not found: ${scanRoot}`);
|
|
1066
|
+
return 3;
|
|
1067
|
+
}
|
|
1068
|
+
const engine = new engine_1.HaloEngine({});
|
|
1069
|
+
const fixer = new engine_1.FixEngine();
|
|
1070
|
+
// Collect files (reuse scan discovery logic)
|
|
1071
|
+
const allFiles = [];
|
|
1072
|
+
for (const scanPath of paths) {
|
|
1073
|
+
let stats;
|
|
1074
|
+
try {
|
|
1075
|
+
stats = fs.statSync(scanPath);
|
|
1076
|
+
}
|
|
1077
|
+
catch {
|
|
1078
|
+
console.error(`❌ Path not found: ${scanPath}`);
|
|
1079
|
+
return 3;
|
|
1080
|
+
}
|
|
1081
|
+
if (stats.isDirectory()) {
|
|
1082
|
+
const patterns = options.include.length > 0
|
|
1083
|
+
? options.include
|
|
1084
|
+
: getDefaultPatterns();
|
|
1085
|
+
const excludes = options.exclude.length > 0
|
|
1086
|
+
? options.exclude
|
|
1087
|
+
: getDefaultExcludePatterns();
|
|
1088
|
+
for (const pattern of patterns) {
|
|
1089
|
+
const fullPattern = path.join(scanPath, pattern);
|
|
1090
|
+
const files = await (0, glob_1.glob)(fullPattern, {
|
|
1091
|
+
ignore: excludes,
|
|
1092
|
+
absolute: true
|
|
1093
|
+
});
|
|
1094
|
+
allFiles.push(...files);
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
else if (stats.isFile()) {
|
|
1098
|
+
allFiles.push(path.resolve(scanPath));
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
const uniqueFiles = [...new Set(allFiles)];
|
|
1102
|
+
if (options.verbose) {
|
|
1103
|
+
console.error(`🔍 Scanning ${uniqueFiles.length} files for auto-fixable violations...`);
|
|
1104
|
+
}
|
|
1105
|
+
const MAX_FILE_SIZE = 1024 * 1024;
|
|
1106
|
+
let totalApplied = 0;
|
|
1107
|
+
let totalSkipped = 0;
|
|
1108
|
+
let totalFiles = 0;
|
|
1109
|
+
let filesFixed = 0;
|
|
1110
|
+
const fixedRuleIds = new Set();
|
|
1111
|
+
// Track all violations for Pro tease summary
|
|
1112
|
+
let totalAutoViolations = 0;
|
|
1113
|
+
let totalGuidedViolations = 0;
|
|
1114
|
+
let totalFlagOnlyViolations = 0;
|
|
1115
|
+
for (const filePath of uniqueFiles) {
|
|
1116
|
+
try {
|
|
1117
|
+
const stat = fs.statSync(filePath);
|
|
1118
|
+
if (stat.size > MAX_FILE_SIZE)
|
|
1119
|
+
continue;
|
|
1120
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
1121
|
+
if (content.substring(0, 512).includes('\0'))
|
|
1122
|
+
continue;
|
|
1123
|
+
const violations = engine.scanFile(filePath, content);
|
|
1124
|
+
if (violations.length === 0) {
|
|
1125
|
+
totalFiles++;
|
|
1126
|
+
continue;
|
|
1127
|
+
}
|
|
1128
|
+
// Count violations by tier for Pro tease
|
|
1129
|
+
for (const v of violations) {
|
|
1130
|
+
const spec = engine_1.REMEDIATION_MAP[v.ruleId];
|
|
1131
|
+
if (!spec)
|
|
1132
|
+
continue;
|
|
1133
|
+
switch (spec.fixability) {
|
|
1134
|
+
case 'auto':
|
|
1135
|
+
totalAutoViolations++;
|
|
1136
|
+
break;
|
|
1137
|
+
case 'guided':
|
|
1138
|
+
totalGuidedViolations++;
|
|
1139
|
+
break;
|
|
1140
|
+
case 'flag-only':
|
|
1141
|
+
totalFlagOnlyViolations++;
|
|
1142
|
+
break;
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
// Apply auto-fixes
|
|
1146
|
+
const result = fixer.applyFixes(content, violations, {
|
|
1147
|
+
rules: options.rules.length > 0 ? options.rules : undefined,
|
|
1148
|
+
});
|
|
1149
|
+
const applied = result.fixes.filter(f => f.status === 'applied');
|
|
1150
|
+
const skipped = result.fixes.filter(f => f.status === 'skipped');
|
|
1151
|
+
if (applied.length > 0) {
|
|
1152
|
+
filesFixed++;
|
|
1153
|
+
totalApplied += applied.length;
|
|
1154
|
+
applied.forEach(f => fixedRuleIds.add(f.ruleId));
|
|
1155
|
+
if (options.dryRun) {
|
|
1156
|
+
// Show diff
|
|
1157
|
+
const diff = fixer.generateDiff(filePath, content, result.fixedContent);
|
|
1158
|
+
console.log(diff);
|
|
1159
|
+
console.log('');
|
|
1160
|
+
}
|
|
1161
|
+
else {
|
|
1162
|
+
// Write fixed content
|
|
1163
|
+
fs.writeFileSync(filePath, result.fixedContent, 'utf-8');
|
|
1164
|
+
}
|
|
1165
|
+
// Show warnings for behavior-changing fixes
|
|
1166
|
+
for (const f of applied) {
|
|
1167
|
+
if (f.warning) {
|
|
1168
|
+
const relPath = path.relative(process.cwd(), filePath);
|
|
1169
|
+
console.error(` ${c(colors.yellow, '⚠')} ${c(colors.dim, relPath + ':' + f.line)} ${c(colors.yellow, f.warning)}`);
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
if (options.verbose) {
|
|
1173
|
+
const relPath = path.relative(process.cwd(), filePath);
|
|
1174
|
+
console.error(` ${c(colors.cyan, '✓')} ${relPath}: ${applied.length} fix(es) applied`);
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
totalSkipped += skipped.length;
|
|
1178
|
+
totalFiles++;
|
|
1179
|
+
}
|
|
1180
|
+
catch (err) {
|
|
1181
|
+
if (options.verbose) {
|
|
1182
|
+
console.error(`⚠️ Error processing ${filePath}:`, err);
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1186
|
+
// Summary
|
|
1187
|
+
console.error('');
|
|
1188
|
+
if (totalApplied > 0) {
|
|
1189
|
+
const action = options.dryRun ? 'Would auto-fix' : 'Auto-fixed';
|
|
1190
|
+
console.error(`${c(colors.bold + colors.cyan, `✓ ${action} ${totalApplied} issue(s)`)} across ${filesFixed} file(s) (${fixedRuleIds.size} rule(s))`);
|
|
1191
|
+
}
|
|
1192
|
+
else {
|
|
1193
|
+
console.error(`${c(colors.dim, 'No auto-fixable issues found.')}`);
|
|
1194
|
+
}
|
|
1195
|
+
// Pro tease: show unfixed counts by tier
|
|
1196
|
+
const remainingGuided = totalGuidedViolations;
|
|
1197
|
+
const remainingFlagOnly = totalFlagOnlyViolations;
|
|
1198
|
+
if (remainingGuided > 0 && !options.guided) {
|
|
1199
|
+
console.error(`${c(colors.yellow, `⚠ ${remainingGuided} issue(s) need guided fixes`)} ${c(colors.dim, '(run with --guided to generate scaffolds)')}`);
|
|
1200
|
+
}
|
|
1201
|
+
if (remainingFlagOnly > 0) {
|
|
1202
|
+
console.error(`${c(colors.blue, `ℹ ${remainingFlagOnly} issue(s) flagged for design review`)} ${c(colors.dim, '(requires manual assessment)')}`);
|
|
1203
|
+
}
|
|
1204
|
+
// Guided fixes: generate scaffold files for Tier 2 violations
|
|
1205
|
+
if (options.guided && totalGuidedViolations > 0) {
|
|
1206
|
+
const { ScaffoldEngine } = require('@runhalo/engine');
|
|
1207
|
+
const scaffoldEngine = new ScaffoldEngine();
|
|
1208
|
+
// Collect all violations with guided fixability
|
|
1209
|
+
const guidedViolations = [];
|
|
1210
|
+
for (const filePath of uniqueFiles) {
|
|
1211
|
+
try {
|
|
1212
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
1213
|
+
const violations = engine.scanFile(filePath, content);
|
|
1214
|
+
for (const v of violations) {
|
|
1215
|
+
const spec = engine_1.REMEDIATION_MAP[v.ruleId];
|
|
1216
|
+
if (spec?.fixability === 'guided') {
|
|
1217
|
+
guidedViolations.push(v);
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
catch { }
|
|
1222
|
+
}
|
|
1223
|
+
const projectPath = path.resolve(scanRoot);
|
|
1224
|
+
const frameworkOverride = options.framework;
|
|
1225
|
+
const summary = scaffoldEngine.getSummary(guidedViolations, projectPath, frameworkOverride);
|
|
1226
|
+
if (summary.totalScaffolds > 0) {
|
|
1227
|
+
console.error('');
|
|
1228
|
+
console.error(`${c(colors.bold + colors.cyan, '🔧 Guided Fixes')} (${summary.framework}${summary.typescript ? ' + TypeScript' : ''}):`);
|
|
1229
|
+
if (options.dryRun) {
|
|
1230
|
+
// Dry run: just show what would be generated
|
|
1231
|
+
const results = scaffoldEngine.generateScaffolds(guidedViolations, projectPath, frameworkOverride);
|
|
1232
|
+
for (const result of results) {
|
|
1233
|
+
console.error(` ${c(colors.cyan, '●')} ${c(colors.bold, result.scaffoldId)} → ${result.ruleId}`);
|
|
1234
|
+
for (const file of result.files) {
|
|
1235
|
+
console.error(` ${c(colors.dim, '→')} ${file.relativePath} — ${file.description}`);
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
console.error('');
|
|
1239
|
+
console.error(` ${c(colors.dim, 'Run without --dry-run to write scaffold files.')}`);
|
|
1240
|
+
}
|
|
1241
|
+
else {
|
|
1242
|
+
// Write scaffold files
|
|
1243
|
+
const outputDir = options.scaffoldDir || path.join(process.cwd(), 'halo-scaffolds');
|
|
1244
|
+
const results = scaffoldEngine.generateScaffolds(guidedViolations, projectPath, frameworkOverride);
|
|
1245
|
+
let filesWritten = 0;
|
|
1246
|
+
for (const result of results) {
|
|
1247
|
+
for (const file of result.files) {
|
|
1248
|
+
const fullPath = path.join(outputDir, file.relativePath);
|
|
1249
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
1250
|
+
fs.writeFileSync(fullPath, file.content, 'utf-8');
|
|
1251
|
+
filesWritten++;
|
|
1252
|
+
if (options.verbose) {
|
|
1253
|
+
console.error(` ${c(colors.cyan, '✓')} ${path.relative(process.cwd(), fullPath)}`);
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
console.error(`${c(colors.bold + colors.cyan, `✓ Generated ${filesWritten} scaffold file(s)`)} in ${path.relative(process.cwd(), outputDir) || outputDir}`);
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
// Show unavailable scaffolds (link to docs)
|
|
1261
|
+
if (summary.unavailableIds.length > 0) {
|
|
1262
|
+
console.error('');
|
|
1263
|
+
for (const id of summary.unavailableIds) {
|
|
1264
|
+
console.error(` ${c(colors.dim, '📖')} ${id} — docs: ${c(colors.blue, `https://runhalo.dev/rules/${id}`)}`);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
console.error('');
|
|
1269
|
+
// Exit codes: 0 = all good, 1 = partial (some violations remain), 3 = fatal
|
|
1270
|
+
if (totalApplied > 0 && (remainingGuided > 0 || remainingFlagOnly > 0)) {
|
|
1271
|
+
return 1; // Partial — some issues remain
|
|
1272
|
+
}
|
|
1273
|
+
return 0;
|
|
1274
|
+
}
|
|
592
1275
|
// CLI setup
|
|
593
1276
|
program
|
|
594
1277
|
.name('runhalo')
|
|
@@ -605,9 +1288,12 @@ program
|
|
|
605
1288
|
.option('-s, --severity <levels...>', 'Filter by severity: critical, high, medium, low')
|
|
606
1289
|
.option('-o, --output <file>', 'Output file path')
|
|
607
1290
|
.option('--ethical-preview', 'Enable experimental ethical design rules (Sprint 5 preview)')
|
|
1291
|
+
.option('--report [filename]', 'Generate HTML compliance report (default: halo-report.html)')
|
|
1292
|
+
.option('--no-prompt', 'Skip first-run email prompt')
|
|
608
1293
|
.option('-v, --verbose', 'Verbose output')
|
|
609
1294
|
.action(async (paths, options) => {
|
|
610
1295
|
try {
|
|
1296
|
+
await firstRunPrompt(options.prompt === false);
|
|
611
1297
|
const exitCode = await scan(paths, {
|
|
612
1298
|
format: options.format || 'text',
|
|
613
1299
|
include: options.include || [],
|
|
@@ -616,7 +1302,8 @@ program
|
|
|
616
1302
|
severity: options.severity || [],
|
|
617
1303
|
output: options.output || '',
|
|
618
1304
|
verbose: options.verbose || false,
|
|
619
|
-
ethicalPreview: options.ethicalPreview || false
|
|
1305
|
+
ethicalPreview: options.ethicalPreview || false,
|
|
1306
|
+
report: options.report || false
|
|
620
1307
|
});
|
|
621
1308
|
process.exit(exitCode);
|
|
622
1309
|
}
|
|
@@ -625,6 +1312,39 @@ program
|
|
|
625
1312
|
process.exit(3); // Fatal error
|
|
626
1313
|
}
|
|
627
1314
|
});
|
|
1315
|
+
program
|
|
1316
|
+
.command('fix')
|
|
1317
|
+
.description('Auto-fix COPPA violations (Tier 1 deterministic transforms + Tier 2 scaffolds)')
|
|
1318
|
+
.argument('[paths...]', 'Paths to fix (default: current directory)', ['.'])
|
|
1319
|
+
.option('--dry-run', 'Show diffs without writing changes', false)
|
|
1320
|
+
.option('-r, --rules <ruleIds...>', 'Fix specific rules only')
|
|
1321
|
+
.option('-i, --include <patterns...>', 'File patterns to include')
|
|
1322
|
+
.option('-e, --exclude <patterns...>', 'File patterns to exclude')
|
|
1323
|
+
.option('--guided', 'Generate scaffold files for Tier 2 guided fixes', false)
|
|
1324
|
+
.option('--framework <framework>', 'Override framework detection: react, nextjs, vue, svelte, plain-js')
|
|
1325
|
+
.option('--scaffold-dir <dir>', 'Output directory for scaffold files (default: ./halo-scaffolds)')
|
|
1326
|
+
.option('--no-prompt', 'Skip first-run email prompt')
|
|
1327
|
+
.option('-v, --verbose', 'Detailed output', false)
|
|
1328
|
+
.action(async (paths, options) => {
|
|
1329
|
+
try {
|
|
1330
|
+
await firstRunPrompt(options.prompt === false);
|
|
1331
|
+
const exitCode = await fix(paths, {
|
|
1332
|
+
dryRun: options.dryRun || false,
|
|
1333
|
+
rules: options.rules || [],
|
|
1334
|
+
include: options.include || [],
|
|
1335
|
+
exclude: options.exclude || [],
|
|
1336
|
+
verbose: options.verbose || false,
|
|
1337
|
+
guided: options.guided || false,
|
|
1338
|
+
framework: options.framework,
|
|
1339
|
+
scaffoldDir: options.scaffoldDir,
|
|
1340
|
+
});
|
|
1341
|
+
process.exit(exitCode);
|
|
1342
|
+
}
|
|
1343
|
+
catch (error) {
|
|
1344
|
+
console.error('❌ Error:', error instanceof Error ? error.message : error);
|
|
1345
|
+
process.exit(3);
|
|
1346
|
+
}
|
|
1347
|
+
});
|
|
628
1348
|
// Run CLI
|
|
629
1349
|
if (require.main === module) {
|
|
630
1350
|
program.parse();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runhalo/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Halo CLI — scan your codebase for COPPA 2.0 privacy risks",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/index.js",
|
|
12
12
|
"dist/index.js.map",
|
|
13
|
-
"dist/index.d.ts"
|
|
13
|
+
"dist/index.d.ts",
|
|
14
|
+
"README.md"
|
|
14
15
|
],
|
|
15
16
|
"scripts": {
|
|
16
17
|
"prebuild": "cd ../engine && npm run build",
|
|
@@ -38,7 +39,7 @@
|
|
|
38
39
|
"author": "Mindful Media <hello@mindfulmedia.org> (https://mindfulmedia.org)",
|
|
39
40
|
"license": "Apache-2.0",
|
|
40
41
|
"dependencies": {
|
|
41
|
-
"@runhalo/engine": "^0.
|
|
42
|
+
"@runhalo/engine": "^0.3.0",
|
|
42
43
|
"commander": "^11.1.0",
|
|
43
44
|
"glob": "^10.3.10"
|
|
44
45
|
},
|