@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 ADDED
@@ -0,0 +1,97 @@
1
+ # @runhalo/cli
2
+
3
+ **Halo CLI** — scan your codebase for COPPA 2.0 privacy risks.
4
+
5
+ [![npm](https://img.shields.io/npm/v/@runhalo/cli.svg)](https://www.npmjs.com/package/@runhalo/cli)
6
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](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
- export { scan, scanFile, scanDirectory, createEngine, formatSARIF, formatJSON, formatText };
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
- return `${c(colors.bold, '✅ No COPPA issues detected!')}${scannedMsg}\n`;
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, '&amp;')
580
+ .replace(/</g, '&lt;')
581
+ .replace(/>/g, '&gt;')
582
+ .replace(/"/g, '&quot;')
583
+ .replace(/'/g, '&#39;');
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.1.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.1.0",
42
+ "@runhalo/engine": "^0.3.0",
42
43
  "commander": "^11.1.0",
43
44
  "glob": "^10.3.10"
44
45
  },