@vibecheckai/cli 2.5.1 → 2.5.3
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 +88 -88
- package/dist/autopatch/verified-autopatch.js +10 -10
- package/dist/bundles/index.js +3 -3
- package/dist/bundles/vibecheck-core.js +25799 -0
- package/dist/bundles/vibecheck-security.js +208687 -0
- package/dist/bundles/vibecheck-ship.js +2318 -0
- package/dist/commands/baseline.js +1 -1
- package/dist/commands/cache.js +4 -4
- package/dist/commands/checkpoint.d.ts +1 -1
- package/dist/commands/checkpoint.js +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.js +12 -12
- package/dist/commands/evidence.js +4 -4
- package/dist/commands/evidence.js.map +1 -1
- package/dist/commands/explain.d.ts +1 -1
- package/dist/commands/explain.js +4 -4
- package/dist/commands/fix-consolidated.d.ts +1 -1
- package/dist/commands/fix-consolidated.js +3 -3
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.js +7 -7
- package/dist/commands/launcher.d.ts +1 -1
- package/dist/commands/launcher.js +9 -9
- package/dist/commands/on.d.ts +1 -1
- package/dist/commands/on.js +2 -2
- package/dist/commands/replay.d.ts +1 -1
- package/dist/commands/replay.js +5 -5
- package/dist/commands/scan-consolidated.d.ts +1 -1
- package/dist/commands/scan-consolidated.js +10 -10
- package/dist/commands/scan-secrets.js +5 -5
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts +1 -1
- package/dist/commands/scan-vulnerabilities-enhanced.js +1 -1
- package/dist/commands/scan-vulnerabilities-osv.d.ts +1 -1
- package/dist/commands/scan-vulnerabilities-osv.js +6 -6
- package/dist/commands/scan-vulnerabilities-osv.js.map +1 -1
- package/dist/commands/secrets-allowlist.js +5 -5
- package/dist/commands/secrets-allowlist.js.map +1 -1
- package/dist/commands/ship-consolidated.d.ts +1 -1
- package/dist/commands/ship-consolidated.js +198 -198
- package/dist/commands/stats.d.ts +1 -1
- package/dist/commands/stats.js +5 -5
- package/dist/commands/upgrade.d.ts +1 -1
- package/dist/commands/upgrade.js +2 -2
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/fix/backup.js +1 -1
- package/dist/formatters/sarif-enhanced.js +3 -3
- package/dist/formatters/sarif-enhanced.js.map +1 -1
- package/dist/formatters/sarif-v2.js +17 -17
- package/dist/formatters/sarif-v2.js.map +1 -1
- package/dist/formatters/sarif.js +8 -8
- package/dist/formatters/sarif.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +102 -150
- package/dist/index.js.map +1 -1
- package/dist/init/ci-generator.js +29 -29
- package/dist/init/hooks-installer.js +19 -19
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/telemetry.js +2 -2
- package/dist/reality/reality-runner.d.ts +1 -1
- package/dist/reality/reality-runner.js +3 -3
- package/dist/reality/receipt-generator.js +4 -4
- package/dist/runtime/client.js +5 -5
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/creds.js +4 -4
- package/dist/runtime/creds.js.map +1 -1
- package/dist/runtime/json-output.js +1 -1
- package/dist/scan/reality-sniff.js +1 -1
- package/dist/truth-pack/index.js +1 -1
- package/dist/ui/frame.js +1 -1
- package/dist/ui.js +1 -1
- package/package.json +9 -11
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* vibecheck ship
|
|
4
4
|
*
|
|
5
5
|
* "Ready to deploy?" gate. Enterprise mode.
|
|
6
6
|
* Runs scan + No Dead UI + Playwright + runtime proof
|
|
@@ -63,8 +63,8 @@ function registerShipCommand(program) {
|
|
|
63
63
|
(0, ui_1.printLogo)();
|
|
64
64
|
}
|
|
65
65
|
const projectPath = (0, path_1.resolve)(options.path);
|
|
66
|
-
const outputPath = options.output || (0, path_1.join)(projectPath, '.
|
|
67
|
-
const artifactsDir = (0, path_1.join)(projectPath, '.
|
|
66
|
+
const outputPath = options.output || (0, path_1.join)(projectPath, '.vibecheck', 'ship.json');
|
|
67
|
+
const artifactsDir = (0, path_1.join)(projectPath, '.vibecheck', 'artifacts', Date.now().toString());
|
|
68
68
|
// Ensure directories exist
|
|
69
69
|
if (!(0, fs_1.existsSync)(artifactsDir)) {
|
|
70
70
|
(0, fs_1.mkdirSync)(artifactsDir, { recursive: true });
|
|
@@ -256,13 +256,13 @@ function getShipNextActions(verdict, scan, deadUI, playwright) {
|
|
|
256
256
|
const actions = [];
|
|
257
257
|
if (verdict === 'NO-GO') {
|
|
258
258
|
if (scan.verdict === 'FAIL') {
|
|
259
|
-
actions.push('
|
|
259
|
+
actions.push('vibecheck fix --id <finding-id>');
|
|
260
260
|
}
|
|
261
261
|
if (deadUI.findings.length > 0) {
|
|
262
262
|
actions.push('Fix dead UI issues');
|
|
263
263
|
}
|
|
264
264
|
if (!playwright.passed) {
|
|
265
|
-
actions.push('
|
|
265
|
+
actions.push('vibecheck replay <scan-id> (to review failures)');
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
else if (verdict === 'WARN') {
|
|
@@ -317,199 +317,199 @@ function getShipVerdictColor(verdict) {
|
|
|
317
317
|
function generateShipHTMLReport(result) {
|
|
318
318
|
const verdictColor = result.verdict === 'GO' ? '#10b981' : result.verdict === 'NO-GO' ? '#ef4444' : '#f59e0b';
|
|
319
319
|
const verdictIcon = result.verdict === 'GO' ? '✓' : result.verdict === 'NO-GO' ? '✗' : '⚠';
|
|
320
|
-
return `<!DOCTYPE html>
|
|
321
|
-
<html lang="en">
|
|
322
|
-
<head>
|
|
323
|
-
<meta charset="UTF-8">
|
|
324
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
325
|
-
<title>
|
|
326
|
-
<style>
|
|
327
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
328
|
-
body {
|
|
329
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
330
|
-
background: #0f172a;
|
|
331
|
-
color: #e2e8f0;
|
|
332
|
-
line-height: 1.6;
|
|
333
|
-
padding: 2rem;
|
|
334
|
-
}
|
|
335
|
-
.container { max-width: 1200px; margin: 0 auto; }
|
|
336
|
-
.header {
|
|
337
|
-
background: #1e293b;
|
|
338
|
-
border-radius: 12px;
|
|
339
|
-
padding: 2rem;
|
|
340
|
-
margin-bottom: 2rem;
|
|
341
|
-
border-left: 4px solid ${verdictColor};
|
|
342
|
-
}
|
|
343
|
-
.verdict {
|
|
344
|
-
font-size: 2rem;
|
|
345
|
-
font-weight: bold;
|
|
346
|
-
color: ${verdictColor};
|
|
347
|
-
margin-bottom: 0.5rem;
|
|
348
|
-
}
|
|
349
|
-
.timestamp { color: #94a3b8; font-size: 0.9rem; }
|
|
350
|
-
.section {
|
|
351
|
-
background: #1e293b;
|
|
352
|
-
border-radius: 12px;
|
|
353
|
-
padding: 1.5rem;
|
|
354
|
-
margin-bottom: 1.5rem;
|
|
355
|
-
}
|
|
356
|
-
.section-title {
|
|
357
|
-
font-size: 1.25rem;
|
|
358
|
-
font-weight: bold;
|
|
359
|
-
margin-bottom: 1rem;
|
|
360
|
-
color: #f1f5f9;
|
|
361
|
-
}
|
|
362
|
-
.metric {
|
|
363
|
-
display: inline-block;
|
|
364
|
-
background: #334155;
|
|
365
|
-
padding: 0.5rem 1rem;
|
|
366
|
-
border-radius: 6px;
|
|
367
|
-
margin-right: 1rem;
|
|
368
|
-
margin-bottom: 0.5rem;
|
|
369
|
-
}
|
|
370
|
-
.metric-value {
|
|
371
|
-
font-size: 1.5rem;
|
|
372
|
-
font-weight: bold;
|
|
373
|
-
color: #60a5fa;
|
|
374
|
-
}
|
|
375
|
-
.metric-label {
|
|
376
|
-
font-size: 0.875rem;
|
|
377
|
-
color: #94a3b8;
|
|
378
|
-
}
|
|
379
|
-
.finding {
|
|
380
|
-
background: #0f172a;
|
|
381
|
-
border-left: 3px solid #ef4444;
|
|
382
|
-
padding: 1rem;
|
|
383
|
-
margin-bottom: 0.75rem;
|
|
384
|
-
border-radius: 6px;
|
|
385
|
-
}
|
|
386
|
-
.finding-id {
|
|
387
|
-
font-family: 'Monaco', 'Courier New', monospace;
|
|
388
|
-
color: #60a5fa;
|
|
389
|
-
font-weight: bold;
|
|
390
|
-
}
|
|
391
|
-
.finding-file {
|
|
392
|
-
color: #94a3b8;
|
|
393
|
-
font-size: 0.875rem;
|
|
394
|
-
margin-top: 0.25rem;
|
|
395
|
-
}
|
|
396
|
-
.next-actions {
|
|
397
|
-
background: #1e293b;
|
|
398
|
-
border-radius: 12px;
|
|
399
|
-
padding: 1.5rem;
|
|
400
|
-
margin-top: 2rem;
|
|
401
|
-
}
|
|
402
|
-
.action {
|
|
403
|
-
background: #334155;
|
|
404
|
-
padding: 0.75rem 1rem;
|
|
405
|
-
border-radius: 6px;
|
|
406
|
-
margin-bottom: 0.5rem;
|
|
407
|
-
font-family: 'Monaco', 'Courier New', monospace;
|
|
408
|
-
color: #60a5fa;
|
|
409
|
-
}
|
|
410
|
-
.badge {
|
|
411
|
-
display: inline-block;
|
|
412
|
-
padding: 0.25rem 0.75rem;
|
|
413
|
-
border-radius: 4px;
|
|
414
|
-
font-size: 0.75rem;
|
|
415
|
-
font-weight: bold;
|
|
416
|
-
margin-left: 0.5rem;
|
|
417
|
-
}
|
|
418
|
-
.badge-critical { background: #ef4444; color: white; }
|
|
419
|
-
.badge-high { background: #f59e0b; color: white; }
|
|
420
|
-
.badge-medium { background: #3b82f6; color: white; }
|
|
421
|
-
.badge-low { background: #6b7280; color: white; }
|
|
422
|
-
</style>
|
|
423
|
-
</head>
|
|
424
|
-
<body>
|
|
425
|
-
<div class="container">
|
|
426
|
-
<div class="header">
|
|
427
|
-
<div class="verdict">${verdictIcon} ${result.verdict}</div>
|
|
428
|
-
<div class="timestamp">Generated: ${new Date(result.timestamp).toLocaleString()}</div>
|
|
429
|
-
<div class="timestamp">Project: ${result.projectPath}</div>
|
|
430
|
-
</div>
|
|
431
|
-
|
|
432
|
-
<div class="section">
|
|
433
|
-
<div class="section-title">Summary</div>
|
|
434
|
-
<div class="metric">
|
|
435
|
-
<div class="metric-value">${result.scan.summary.totalFindings}</div>
|
|
436
|
-
<div class="metric-label">Scan Findings</div>
|
|
437
|
-
</div>
|
|
438
|
-
<div class="metric">
|
|
439
|
-
<div class="metric-value">${result.deadUI.summary.total}</div>
|
|
440
|
-
<div class="metric-label">Dead UI Issues</div>
|
|
441
|
-
</div>
|
|
442
|
-
${result.playwright.ran ? `
|
|
443
|
-
<div class="metric">
|
|
444
|
-
<div class="metric-value">${result.playwright.summary.passed}/${result.playwright.summary.totalActions}</div>
|
|
445
|
-
<div class="metric-label">Playwright Actions</div>
|
|
446
|
-
</div>
|
|
447
|
-
` : ''}
|
|
448
|
-
</div>
|
|
449
|
-
|
|
450
|
-
${result.scan.topBlockers.length > 0 ? `
|
|
451
|
-
<div class="section">
|
|
452
|
-
<div class="section-title">Top Blockers</div>
|
|
453
|
-
${result.scan.topBlockers.slice(0, 10).map(blocker => `
|
|
454
|
-
<div class="finding">
|
|
455
|
-
<div class="finding-id">${blocker.id}</div>
|
|
456
|
-
<div>${blocker.type} - ${blocker.severity}</div>
|
|
457
|
-
<div class="finding-file">${blocker.file}:${blocker.line}</div>
|
|
458
|
-
</div>
|
|
459
|
-
`).join('')}
|
|
460
|
-
</div>
|
|
461
|
-
` : ''}
|
|
462
|
-
|
|
463
|
-
${result.deadUI.findings.length > 0 ? `
|
|
464
|
-
<div class="section">
|
|
465
|
-
<div class="section-title">Dead UI Issues</div>
|
|
466
|
-
${result.deadUI.findings.slice(0, 10).map(finding => `
|
|
467
|
-
<div class="finding">
|
|
468
|
-
<div class="finding-id">${finding.id}</div>
|
|
469
|
-
<div>${finding.issue}</div>
|
|
470
|
-
<div class="finding-file">${finding.file}:${finding.line}</div>
|
|
471
|
-
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
472
|
-
Suggestion: ${finding.suggestion}
|
|
473
|
-
</div>
|
|
474
|
-
</div>
|
|
475
|
-
`).join('')}
|
|
476
|
-
</div>
|
|
477
|
-
` : ''}
|
|
478
|
-
|
|
479
|
-
${result.playwright.failures.length > 0 ? `
|
|
480
|
-
<div class="section">
|
|
481
|
-
<div class="section-title">Playwright Failures</div>
|
|
482
|
-
${result.playwright.failures.map((failure, i) => `
|
|
483
|
-
<div class="finding">
|
|
484
|
-
<div class="finding-id">Test ${i + 1}</div>
|
|
485
|
-
<div>${failure.test}</div>
|
|
486
|
-
<div style="color: #ef4444; margin-top: 0.5rem;">${failure.error}</div>
|
|
487
|
-
${failure.trace ? `<div style="margin-top: 0.5rem; color: #60a5fa;">Trace: ${failure.trace}</div>` : ''}
|
|
488
|
-
</div>
|
|
489
|
-
`).join('')}
|
|
490
|
-
</div>
|
|
491
|
-
` : ''}
|
|
492
|
-
|
|
493
|
-
${result.proofBundle ? `
|
|
494
|
-
<div class="section">
|
|
495
|
-
<div class="section-title">Proof Bundle</div>
|
|
496
|
-
<div style="color: #94a3b8;">
|
|
497
|
-
Proof bundle available at: ${result.proofBundle.path}
|
|
498
|
-
</div>
|
|
499
|
-
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
500
|
-
Includes: ${result.proofBundle.includes.join(', ')}
|
|
501
|
-
</div>
|
|
502
|
-
</div>
|
|
503
|
-
` : ''}
|
|
504
|
-
|
|
505
|
-
<div class="next-actions">
|
|
506
|
-
<div class="section-title">Next Actions</div>
|
|
507
|
-
${result.nextActions.map(action => `
|
|
508
|
-
<div class="action">${action}</div>
|
|
509
|
-
`).join('')}
|
|
510
|
-
</div>
|
|
511
|
-
</div>
|
|
512
|
-
</body>
|
|
320
|
+
return `<!DOCTYPE html>
|
|
321
|
+
<html lang="en">
|
|
322
|
+
<head>
|
|
323
|
+
<meta charset="UTF-8">
|
|
324
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
325
|
+
<title>vibecheck Ship Report - ${result.verdict}</title>
|
|
326
|
+
<style>
|
|
327
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
328
|
+
body {
|
|
329
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
330
|
+
background: #0f172a;
|
|
331
|
+
color: #e2e8f0;
|
|
332
|
+
line-height: 1.6;
|
|
333
|
+
padding: 2rem;
|
|
334
|
+
}
|
|
335
|
+
.container { max-width: 1200px; margin: 0 auto; }
|
|
336
|
+
.header {
|
|
337
|
+
background: #1e293b;
|
|
338
|
+
border-radius: 12px;
|
|
339
|
+
padding: 2rem;
|
|
340
|
+
margin-bottom: 2rem;
|
|
341
|
+
border-left: 4px solid ${verdictColor};
|
|
342
|
+
}
|
|
343
|
+
.verdict {
|
|
344
|
+
font-size: 2rem;
|
|
345
|
+
font-weight: bold;
|
|
346
|
+
color: ${verdictColor};
|
|
347
|
+
margin-bottom: 0.5rem;
|
|
348
|
+
}
|
|
349
|
+
.timestamp { color: #94a3b8; font-size: 0.9rem; }
|
|
350
|
+
.section {
|
|
351
|
+
background: #1e293b;
|
|
352
|
+
border-radius: 12px;
|
|
353
|
+
padding: 1.5rem;
|
|
354
|
+
margin-bottom: 1.5rem;
|
|
355
|
+
}
|
|
356
|
+
.section-title {
|
|
357
|
+
font-size: 1.25rem;
|
|
358
|
+
font-weight: bold;
|
|
359
|
+
margin-bottom: 1rem;
|
|
360
|
+
color: #f1f5f9;
|
|
361
|
+
}
|
|
362
|
+
.metric {
|
|
363
|
+
display: inline-block;
|
|
364
|
+
background: #334155;
|
|
365
|
+
padding: 0.5rem 1rem;
|
|
366
|
+
border-radius: 6px;
|
|
367
|
+
margin-right: 1rem;
|
|
368
|
+
margin-bottom: 0.5rem;
|
|
369
|
+
}
|
|
370
|
+
.metric-value {
|
|
371
|
+
font-size: 1.5rem;
|
|
372
|
+
font-weight: bold;
|
|
373
|
+
color: #60a5fa;
|
|
374
|
+
}
|
|
375
|
+
.metric-label {
|
|
376
|
+
font-size: 0.875rem;
|
|
377
|
+
color: #94a3b8;
|
|
378
|
+
}
|
|
379
|
+
.finding {
|
|
380
|
+
background: #0f172a;
|
|
381
|
+
border-left: 3px solid #ef4444;
|
|
382
|
+
padding: 1rem;
|
|
383
|
+
margin-bottom: 0.75rem;
|
|
384
|
+
border-radius: 6px;
|
|
385
|
+
}
|
|
386
|
+
.finding-id {
|
|
387
|
+
font-family: 'Monaco', 'Courier New', monospace;
|
|
388
|
+
color: #60a5fa;
|
|
389
|
+
font-weight: bold;
|
|
390
|
+
}
|
|
391
|
+
.finding-file {
|
|
392
|
+
color: #94a3b8;
|
|
393
|
+
font-size: 0.875rem;
|
|
394
|
+
margin-top: 0.25rem;
|
|
395
|
+
}
|
|
396
|
+
.next-actions {
|
|
397
|
+
background: #1e293b;
|
|
398
|
+
border-radius: 12px;
|
|
399
|
+
padding: 1.5rem;
|
|
400
|
+
margin-top: 2rem;
|
|
401
|
+
}
|
|
402
|
+
.action {
|
|
403
|
+
background: #334155;
|
|
404
|
+
padding: 0.75rem 1rem;
|
|
405
|
+
border-radius: 6px;
|
|
406
|
+
margin-bottom: 0.5rem;
|
|
407
|
+
font-family: 'Monaco', 'Courier New', monospace;
|
|
408
|
+
color: #60a5fa;
|
|
409
|
+
}
|
|
410
|
+
.badge {
|
|
411
|
+
display: inline-block;
|
|
412
|
+
padding: 0.25rem 0.75rem;
|
|
413
|
+
border-radius: 4px;
|
|
414
|
+
font-size: 0.75rem;
|
|
415
|
+
font-weight: bold;
|
|
416
|
+
margin-left: 0.5rem;
|
|
417
|
+
}
|
|
418
|
+
.badge-critical { background: #ef4444; color: white; }
|
|
419
|
+
.badge-high { background: #f59e0b; color: white; }
|
|
420
|
+
.badge-medium { background: #3b82f6; color: white; }
|
|
421
|
+
.badge-low { background: #6b7280; color: white; }
|
|
422
|
+
</style>
|
|
423
|
+
</head>
|
|
424
|
+
<body>
|
|
425
|
+
<div class="container">
|
|
426
|
+
<div class="header">
|
|
427
|
+
<div class="verdict">${verdictIcon} ${result.verdict}</div>
|
|
428
|
+
<div class="timestamp">Generated: ${new Date(result.timestamp).toLocaleString()}</div>
|
|
429
|
+
<div class="timestamp">Project: ${result.projectPath}</div>
|
|
430
|
+
</div>
|
|
431
|
+
|
|
432
|
+
<div class="section">
|
|
433
|
+
<div class="section-title">Summary</div>
|
|
434
|
+
<div class="metric">
|
|
435
|
+
<div class="metric-value">${result.scan.summary.totalFindings}</div>
|
|
436
|
+
<div class="metric-label">Scan Findings</div>
|
|
437
|
+
</div>
|
|
438
|
+
<div class="metric">
|
|
439
|
+
<div class="metric-value">${result.deadUI.summary.total}</div>
|
|
440
|
+
<div class="metric-label">Dead UI Issues</div>
|
|
441
|
+
</div>
|
|
442
|
+
${result.playwright.ran ? `
|
|
443
|
+
<div class="metric">
|
|
444
|
+
<div class="metric-value">${result.playwright.summary.passed}/${result.playwright.summary.totalActions}</div>
|
|
445
|
+
<div class="metric-label">Playwright Actions</div>
|
|
446
|
+
</div>
|
|
447
|
+
` : ''}
|
|
448
|
+
</div>
|
|
449
|
+
|
|
450
|
+
${result.scan.topBlockers.length > 0 ? `
|
|
451
|
+
<div class="section">
|
|
452
|
+
<div class="section-title">Top Blockers</div>
|
|
453
|
+
${result.scan.topBlockers.slice(0, 10).map(blocker => `
|
|
454
|
+
<div class="finding">
|
|
455
|
+
<div class="finding-id">${blocker.id}</div>
|
|
456
|
+
<div>${blocker.type} - ${blocker.severity}</div>
|
|
457
|
+
<div class="finding-file">${blocker.file}:${blocker.line}</div>
|
|
458
|
+
</div>
|
|
459
|
+
`).join('')}
|
|
460
|
+
</div>
|
|
461
|
+
` : ''}
|
|
462
|
+
|
|
463
|
+
${result.deadUI.findings.length > 0 ? `
|
|
464
|
+
<div class="section">
|
|
465
|
+
<div class="section-title">Dead UI Issues</div>
|
|
466
|
+
${result.deadUI.findings.slice(0, 10).map(finding => `
|
|
467
|
+
<div class="finding">
|
|
468
|
+
<div class="finding-id">${finding.id}</div>
|
|
469
|
+
<div>${finding.issue}</div>
|
|
470
|
+
<div class="finding-file">${finding.file}:${finding.line}</div>
|
|
471
|
+
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
472
|
+
Suggestion: ${finding.suggestion}
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
`).join('')}
|
|
476
|
+
</div>
|
|
477
|
+
` : ''}
|
|
478
|
+
|
|
479
|
+
${result.playwright.failures.length > 0 ? `
|
|
480
|
+
<div class="section">
|
|
481
|
+
<div class="section-title">Playwright Failures</div>
|
|
482
|
+
${result.playwright.failures.map((failure, i) => `
|
|
483
|
+
<div class="finding">
|
|
484
|
+
<div class="finding-id">Test ${i + 1}</div>
|
|
485
|
+
<div>${failure.test}</div>
|
|
486
|
+
<div style="color: #ef4444; margin-top: 0.5rem;">${failure.error}</div>
|
|
487
|
+
${failure.trace ? `<div style="margin-top: 0.5rem; color: #60a5fa;">Trace: ${failure.trace}</div>` : ''}
|
|
488
|
+
</div>
|
|
489
|
+
`).join('')}
|
|
490
|
+
</div>
|
|
491
|
+
` : ''}
|
|
492
|
+
|
|
493
|
+
${result.proofBundle ? `
|
|
494
|
+
<div class="section">
|
|
495
|
+
<div class="section-title">Proof Bundle</div>
|
|
496
|
+
<div style="color: #94a3b8;">
|
|
497
|
+
Proof bundle available at: ${result.proofBundle.path}
|
|
498
|
+
</div>
|
|
499
|
+
<div style="margin-top: 0.5rem; color: #94a3b8; font-size: 0.875rem;">
|
|
500
|
+
Includes: ${result.proofBundle.includes.join(', ')}
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
` : ''}
|
|
504
|
+
|
|
505
|
+
<div class="next-actions">
|
|
506
|
+
<div class="section-title">Next Actions</div>
|
|
507
|
+
${result.nextActions.map(action => `
|
|
508
|
+
<div class="action">${action}</div>
|
|
509
|
+
`).join('')}
|
|
510
|
+
</div>
|
|
511
|
+
</div>
|
|
512
|
+
</body>
|
|
513
513
|
</html>`;
|
|
514
514
|
}
|
|
515
515
|
//# sourceMappingURL=ship-consolidated.js.map
|
package/dist/commands/stats.d.ts
CHANGED
package/dist/commands/stats.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* vibecheck stats
|
|
4
4
|
*
|
|
5
5
|
* Makes value visible: "hallucinations blocked" + "saved moments" + latency + trends.
|
|
6
6
|
*/
|
|
@@ -20,8 +20,8 @@ function registerStatsCommand(program) {
|
|
|
20
20
|
.action(async (options) => {
|
|
21
21
|
(0, ui_1.printLogo)();
|
|
22
22
|
const projectPath = (0, path_1.resolve)(options.path);
|
|
23
|
-
const statsFile = (0, path_2.join)(projectPath, '.
|
|
24
|
-
const telemetryFile = (0, path_2.join)(projectPath, '.
|
|
23
|
+
const statsFile = (0, path_2.join)(projectPath, '.vibecheck', 'stats.json');
|
|
24
|
+
const telemetryFile = (0, path_2.join)(projectPath, '.vibecheck', 'telemetry.json');
|
|
25
25
|
let stats;
|
|
26
26
|
// Load stats if exists, otherwise create default
|
|
27
27
|
if ((0, fs_1.existsSync)(statsFile)) {
|
|
@@ -71,7 +71,7 @@ function registerStatsCommand(program) {
|
|
|
71
71
|
console.log(JSON.stringify(stats, null, 2));
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
|
-
console.log(`\n${ui_2.styles.brightCyan}${ui_2.styles.bold}${ui_2.icons.info}
|
|
74
|
+
console.log(`\n${ui_2.styles.brightCyan}${ui_2.styles.bold}${ui_2.icons.info} vibecheck STATS${ui_2.styles.reset}\n`);
|
|
75
75
|
// Relationship Meter
|
|
76
76
|
console.log(` ${ui_2.styles.bold}${ui_2.styles.brightCyan}Relationship Meter${ui_2.styles.reset}`);
|
|
77
77
|
console.log(` ${ui_2.styles.dim}${'─'.repeat(50)}${ui_2.styles.reset}`);
|
|
@@ -104,7 +104,7 @@ function registerStatsCommand(program) {
|
|
|
104
104
|
console.log(` P99: ${ui_2.styles.bold}${stats.latency.p99}ms${ui_2.styles.reset}`);
|
|
105
105
|
console.log('');
|
|
106
106
|
// Next best action
|
|
107
|
-
console.log(` ${ui_2.styles.bold}Next best action:${ui_2.styles.reset} ${ui_2.styles.brightCyan}
|
|
107
|
+
console.log(` ${ui_2.styles.bold}Next best action:${ui_2.styles.reset} ${ui_2.styles.brightCyan}vibecheck ship${ui_2.styles.reset} to run ship check\n`);
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
110
|
function getDefaultStats() {
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* vibecheck upgrade
|
|
4
4
|
*
|
|
5
5
|
* Clean upsell to Pro tier.
|
|
6
6
|
*/
|
|
@@ -24,7 +24,7 @@ function registerUpgradeCommand(program) {
|
|
|
24
24
|
console.log('');
|
|
25
25
|
console.log(` ${ui_2.styles.bold}Price:${ui_2.styles.reset} $29/month`);
|
|
26
26
|
console.log('');
|
|
27
|
-
console.log(` ${ui_2.styles.brightCyan}Upgrade now:${ui_2.styles.reset} ${ui_2.styles.bold}https://
|
|
27
|
+
console.log(` ${ui_2.styles.brightCyan}Upgrade now:${ui_2.styles.reset} ${ui_2.styles.bold}https://vibecheckai.dev/upgrade${ui_2.styles.reset}\n`);
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
//# sourceMappingURL=upgrade.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,wDAsBC;AAzBD,8BAAkC;AAClC,8BAAsC;AAEtC,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAA,cAAS,GAAE,CAAC;QAEZ,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,UAAU,GAAG,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,IAAI,kBAAkB,WAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAEjG,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,qBAAqB,WAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,wBAAwB,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,2CAA2C,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,uBAAuB,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,kBAAkB,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,mBAAmB,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,SAAS,WAAM,CAAC,KAAK,YAAY,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,UAAU,eAAe,WAAM,CAAC,KAAK,IAAI,WAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,wDAsBC;AAzBD,8BAAkC;AAClC,8BAAsC;AAEtC,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAA,cAAS,GAAE,CAAC;QAEZ,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,UAAU,GAAG,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,IAAI,kBAAkB,WAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAEjG,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,qBAAqB,WAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,wBAAwB,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,2CAA2C,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,uBAAuB,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,kBAAkB,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,GAAG,UAAK,CAAC,MAAM,GAAG,WAAM,CAAC,KAAK,mBAAmB,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,IAAI,SAAS,WAAM,CAAC,KAAK,YAAY,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAM,CAAC,UAAU,eAAe,WAAM,CAAC,KAAK,IAAI,WAAM,CAAC,IAAI,kCAAkC,WAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAClI,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/fix/backup.js
CHANGED
|
@@ -6,7 +6,7 @@ const path_1 = require("path");
|
|
|
6
6
|
class BackupManager {
|
|
7
7
|
constructor(projectPath) {
|
|
8
8
|
this.projectPath = projectPath;
|
|
9
|
-
this.backupRoot = (0, path_1.join)(projectPath, '.
|
|
9
|
+
this.backupRoot = (0, path_1.join)(projectPath, '.vibecheck', 'backups');
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Create a backup before applying fixes
|
|
@@ -81,7 +81,7 @@ function toSarifVulnerabilitiesEnhanced(results) {
|
|
|
81
81
|
},
|
|
82
82
|
}],
|
|
83
83
|
fingerprints: {
|
|
84
|
-
'
|
|
84
|
+
'vibecheck/v1': `${vuln.id}:${finding.package}:${finding.version}`,
|
|
85
85
|
'osv/id': vuln.id,
|
|
86
86
|
},
|
|
87
87
|
properties: {
|
|
@@ -112,9 +112,9 @@ function toSarifVulnerabilitiesEnhanced(results) {
|
|
|
112
112
|
runs: [{
|
|
113
113
|
tool: {
|
|
114
114
|
driver: {
|
|
115
|
-
name: '
|
|
115
|
+
name: 'vibecheck-cli-tool',
|
|
116
116
|
version,
|
|
117
|
-
informationUri: 'https://
|
|
117
|
+
informationUri: 'https://vibecheckai.dev',
|
|
118
118
|
rules: Array.from(ruleMap.values()),
|
|
119
119
|
},
|
|
120
120
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sarif-enhanced.js","sourceRoot":"","sources":["../../src/formatters/sarif-enhanced.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sarif-enhanced.js","sourceRoot":"","sources":["../../src/formatters/sarif-enhanced.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,9 +69,9 @@ function secretsToSarif(results) {
|
|
|
69
69
|
},
|
|
70
70
|
help: {
|
|
71
71
|
text: finding.recommendation?.remediation || 'Move secrets to environment variables or secure vault',
|
|
72
|
-
markdown: `## Remediation\n\n${finding.recommendation?.remediation || 'Move secrets to environment variables or secure vault'}\n\n[Learn more](https://
|
|
72
|
+
markdown: `## Remediation\n\n${finding.recommendation?.remediation || 'Move secrets to environment variables or secure vault'}\n\n[Learn more](https://vibecheckai.dev/docs/secrets)`,
|
|
73
73
|
},
|
|
74
|
-
helpUri: 'https://
|
|
74
|
+
helpUri: 'https://vibecheckai.dev/docs/secrets',
|
|
75
75
|
defaultConfiguration: {
|
|
76
76
|
level: severityToLevel(finding.risk || 'high'),
|
|
77
77
|
enabled: true,
|
|
@@ -108,10 +108,10 @@ function secretsToSarif(results) {
|
|
|
108
108
|
},
|
|
109
109
|
}],
|
|
110
110
|
partialFingerprints: {
|
|
111
|
-
'
|
|
111
|
+
'vibecheck/v1': generateFingerprint(f),
|
|
112
112
|
},
|
|
113
113
|
fingerprints: {
|
|
114
|
-
'
|
|
114
|
+
'vibecheck/v1': `${f.type}:${f.file}:${f.line}`,
|
|
115
115
|
},
|
|
116
116
|
properties: {
|
|
117
117
|
confidence: f.confidence,
|
|
@@ -147,11 +147,11 @@ function secretsToSarif(results) {
|
|
|
147
147
|
runs: [{
|
|
148
148
|
tool: {
|
|
149
149
|
driver: {
|
|
150
|
-
name: '
|
|
150
|
+
name: 'vibecheck',
|
|
151
151
|
version,
|
|
152
152
|
semanticVersion: version,
|
|
153
|
-
informationUri: 'https://
|
|
154
|
-
organization: '
|
|
153
|
+
informationUri: 'https://vibecheckai.dev',
|
|
154
|
+
organization: 'vibecheck Security',
|
|
155
155
|
rules: Array.from(ruleMap.values()),
|
|
156
156
|
},
|
|
157
157
|
},
|
|
@@ -189,9 +189,9 @@ function vulnerabilitiesToSarif(results) {
|
|
|
189
189
|
},
|
|
190
190
|
help: {
|
|
191
191
|
text: 'Update vulnerable dependencies to their fixed versions',
|
|
192
|
-
markdown: '## Remediation\n\nUpdate the vulnerable dependency to the version specified in the fix recommendation.\n\n[Learn more](https://
|
|
192
|
+
markdown: '## Remediation\n\nUpdate the vulnerable dependency to the version specified in the fix recommendation.\n\n[Learn more](https://vibecheckai.dev/docs/vulnerabilities)',
|
|
193
193
|
},
|
|
194
|
-
helpUri: 'https://
|
|
194
|
+
helpUri: 'https://vibecheckai.dev/docs/vulnerabilities',
|
|
195
195
|
defaultConfiguration: {
|
|
196
196
|
level: 'error',
|
|
197
197
|
enabled: true,
|
|
@@ -221,10 +221,10 @@ function vulnerabilitiesToSarif(results) {
|
|
|
221
221
|
},
|
|
222
222
|
}],
|
|
223
223
|
partialFingerprints: {
|
|
224
|
-
'
|
|
224
|
+
'vibecheck/v1': generateFingerprint(f),
|
|
225
225
|
},
|
|
226
226
|
fingerprints: {
|
|
227
|
-
'
|
|
227
|
+
'vibecheck/v1': `${f.cve}:${f.package}:${f.version}`,
|
|
228
228
|
},
|
|
229
229
|
properties: {
|
|
230
230
|
cve: f.cve,
|
|
@@ -259,11 +259,11 @@ function vulnerabilitiesToSarif(results) {
|
|
|
259
259
|
runs: [{
|
|
260
260
|
tool: {
|
|
261
261
|
driver: {
|
|
262
|
-
name: '
|
|
262
|
+
name: 'vibecheck',
|
|
263
263
|
version,
|
|
264
264
|
semanticVersion: version,
|
|
265
|
-
informationUri: 'https://
|
|
266
|
-
organization: '
|
|
265
|
+
informationUri: 'https://vibecheckai.dev',
|
|
266
|
+
organization: 'vibecheck Security',
|
|
267
267
|
rules,
|
|
268
268
|
},
|
|
269
269
|
},
|
|
@@ -331,11 +331,11 @@ function combinedToSarif(results) {
|
|
|
331
331
|
runs: [{
|
|
332
332
|
tool: {
|
|
333
333
|
driver: {
|
|
334
|
-
name: '
|
|
334
|
+
name: 'vibecheck',
|
|
335
335
|
version,
|
|
336
336
|
semanticVersion: version,
|
|
337
|
-
informationUri: 'https://
|
|
338
|
-
organization: '
|
|
337
|
+
informationUri: 'https://vibecheckai.dev',
|
|
338
|
+
organization: 'vibecheck Security',
|
|
339
339
|
rules: allRules,
|
|
340
340
|
},
|
|
341
341
|
},
|