@vibecheckai/cli 3.5.0 → 3.5.2
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/bin/registry.js +214 -237
- package/bin/runners/cli-utils.js +33 -2
- package/bin/runners/context/analyzer.js +52 -1
- package/bin/runners/context/generators/cursor.js +2 -49
- package/bin/runners/context/git-context.js +3 -1
- package/bin/runners/context/team-conventions.js +33 -7
- package/bin/runners/lib/analysis-core.js +25 -5
- package/bin/runners/lib/analyzers.js +431 -481
- package/bin/runners/lib/default-config.js +127 -0
- package/bin/runners/lib/doctor/modules/security.js +3 -1
- package/bin/runners/lib/engine/ast-cache.js +210 -0
- package/bin/runners/lib/engine/auth-extractor.js +211 -0
- package/bin/runners/lib/engine/billing-extractor.js +112 -0
- package/bin/runners/lib/engine/enforcement-extractor.js +100 -0
- package/bin/runners/lib/engine/env-extractor.js +207 -0
- package/bin/runners/lib/engine/express-extractor.js +208 -0
- package/bin/runners/lib/engine/extractors.js +849 -0
- package/bin/runners/lib/engine/index.js +207 -0
- package/bin/runners/lib/engine/repo-index.js +514 -0
- package/bin/runners/lib/engine/types.js +124 -0
- package/bin/runners/lib/engines/accessibility-engine.js +18 -218
- package/bin/runners/lib/engines/api-consistency-engine.js +30 -335
- package/bin/runners/lib/engines/cross-file-analysis-engine.js +27 -292
- package/bin/runners/lib/engines/empty-catch-engine.js +17 -127
- package/bin/runners/lib/engines/mock-data-engine.js +10 -53
- package/bin/runners/lib/engines/performance-issues-engine.js +36 -176
- package/bin/runners/lib/engines/security-vulnerabilities-engine.js +54 -382
- package/bin/runners/lib/engines/type-aware-engine.js +39 -263
- package/bin/runners/lib/engines/vibecheck-engines/index.js +13 -122
- package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +291 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +83 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +198 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +275 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +167 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +73 -373
- package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +140 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +164 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +234 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +217 -0
- package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +78 -0
- package/bin/runners/lib/entitlements-v2.js +73 -97
- package/bin/runners/lib/error-handler.js +44 -3
- package/bin/runners/lib/error-messages.js +289 -0
- package/bin/runners/lib/evidence-pack.js +7 -1
- package/bin/runners/lib/finding-id.js +69 -0
- package/bin/runners/lib/finding-sorter.js +89 -0
- package/bin/runners/lib/html-proof-report.js +700 -350
- package/bin/runners/lib/missions/plan.js +6 -46
- package/bin/runners/lib/missions/templates.js +0 -232
- package/bin/runners/lib/next-action.js +560 -0
- package/bin/runners/lib/prerequisites.js +149 -0
- package/bin/runners/lib/route-detection.js +137 -68
- package/bin/runners/lib/scan-output.js +91 -76
- package/bin/runners/lib/scan-runner.js +135 -0
- package/bin/runners/lib/schemas/ajv-validator.js +464 -0
- package/bin/runners/lib/schemas/error-envelope.schema.json +105 -0
- package/bin/runners/lib/schemas/finding-v3.schema.json +151 -0
- package/bin/runners/lib/schemas/report-artifact.schema.json +120 -0
- package/bin/runners/lib/schemas/run-request.schema.json +108 -0
- package/bin/runners/lib/schemas/validator.js +27 -0
- package/bin/runners/lib/schemas/verdict.schema.json +140 -0
- package/bin/runners/lib/ship-output-enterprise.js +23 -23
- package/bin/runners/lib/ship-output.js +75 -31
- package/bin/runners/lib/terminal-ui.js +6 -113
- package/bin/runners/lib/truth.js +351 -10
- package/bin/runners/lib/unified-cli-output.js +430 -603
- package/bin/runners/lib/unified-output.js +13 -9
- package/bin/runners/runAIAgent.js +10 -5
- package/bin/runners/runAgent.js +0 -3
- package/bin/runners/runAllowlist.js +389 -0
- package/bin/runners/runApprove.js +0 -33
- package/bin/runners/runAuth.js +73 -45
- package/bin/runners/runCheckpoint.js +51 -11
- package/bin/runners/runClassify.js +85 -21
- package/bin/runners/runContext.js +0 -3
- package/bin/runners/runDoctor.js +41 -28
- package/bin/runners/runEvidencePack.js +362 -0
- package/bin/runners/runFirewall.js +0 -3
- package/bin/runners/runFirewallHook.js +0 -3
- package/bin/runners/runFix.js +66 -76
- package/bin/runners/runGuard.js +18 -411
- package/bin/runners/runInit.js +113 -30
- package/bin/runners/runLabs.js +424 -0
- package/bin/runners/runMcp.js +19 -25
- package/bin/runners/runPolish.js +64 -240
- package/bin/runners/runPromptFirewall.js +12 -5
- package/bin/runners/runProve.js +57 -22
- package/bin/runners/runQuickstart.js +531 -0
- package/bin/runners/runReality.js +59 -68
- package/bin/runners/runReport.js +38 -33
- package/bin/runners/runRuntime.js +8 -5
- package/bin/runners/runScan.js +1413 -190
- package/bin/runners/runShip.js +113 -719
- package/bin/runners/runTruth.js +0 -3
- package/bin/runners/runValidate.js +13 -9
- package/bin/runners/runWatch.js +23 -14
- package/bin/scan.js +6 -1
- package/bin/vibecheck.js +204 -185
- package/mcp-server/deprecation-middleware.js +282 -0
- package/mcp-server/handlers/index.ts +15 -0
- package/mcp-server/handlers/tool-handler.ts +554 -0
- package/mcp-server/index-v1.js +698 -0
- package/mcp-server/index.js +210 -238
- package/mcp-server/lib/cache-wrapper.cjs +383 -0
- package/mcp-server/lib/error-envelope.js +138 -0
- package/mcp-server/lib/executor.ts +499 -0
- package/mcp-server/lib/index.ts +19 -0
- package/mcp-server/lib/rate-limiter.js +166 -0
- package/mcp-server/lib/sandbox.test.ts +519 -0
- package/mcp-server/lib/sandbox.ts +395 -0
- package/mcp-server/lib/types.ts +267 -0
- package/mcp-server/package.json +12 -3
- package/mcp-server/registry/tool-registry.js +794 -0
- package/mcp-server/registry/tools.json +605 -0
- package/mcp-server/registry.test.ts +334 -0
- package/mcp-server/tests/tier-gating.test.js +297 -0
- package/mcp-server/tier-auth.js +378 -45
- package/mcp-server/tools-v3.js +353 -442
- package/mcp-server/tsconfig.json +37 -0
- package/mcp-server/vibecheck-2.0-tools.js +14 -1
- package/package.json +1 -1
- package/bin/runners/lib/agent-firewall/learning/learning-engine.js +0 -849
- package/bin/runners/lib/audit-logger.js +0 -532
- package/bin/runners/lib/authority/authorities/architecture.js +0 -364
- package/bin/runners/lib/authority/authorities/compliance.js +0 -341
- package/bin/runners/lib/authority/authorities/human.js +0 -343
- package/bin/runners/lib/authority/authorities/quality.js +0 -420
- package/bin/runners/lib/authority/authorities/security.js +0 -228
- package/bin/runners/lib/authority/index.js +0 -293
- package/bin/runners/lib/bundle/bundle-intelligence.js +0 -846
- package/bin/runners/lib/cli-charts.js +0 -368
- package/bin/runners/lib/cli-config-display.js +0 -405
- package/bin/runners/lib/cli-demo.js +0 -275
- package/bin/runners/lib/cli-errors.js +0 -438
- package/bin/runners/lib/cli-help-formatter.js +0 -439
- package/bin/runners/lib/cli-interactive-menu.js +0 -509
- package/bin/runners/lib/cli-prompts.js +0 -441
- package/bin/runners/lib/cli-scan-cards.js +0 -362
- package/bin/runners/lib/compliance-reporter.js +0 -710
- package/bin/runners/lib/conductor/index.js +0 -671
- package/bin/runners/lib/easy/README.md +0 -123
- package/bin/runners/lib/easy/index.js +0 -140
- package/bin/runners/lib/easy/interactive-wizard.js +0 -788
- package/bin/runners/lib/easy/one-click-firewall.js +0 -564
- package/bin/runners/lib/easy/zero-config-reality.js +0 -714
- package/bin/runners/lib/engines/async-patterns-engine.js +0 -444
- package/bin/runners/lib/engines/bundle-size-engine.js +0 -433
- package/bin/runners/lib/engines/confidence-scoring.js +0 -276
- package/bin/runners/lib/engines/context-detection.js +0 -264
- package/bin/runners/lib/engines/database-patterns-engine.js +0 -429
- package/bin/runners/lib/engines/duplicate-code-engine.js +0 -354
- package/bin/runners/lib/engines/env-variables-engine.js +0 -458
- package/bin/runners/lib/engines/error-handling-engine.js +0 -437
- package/bin/runners/lib/engines/false-positive-prevention.js +0 -630
- package/bin/runners/lib/engines/framework-adapters/index.js +0 -607
- package/bin/runners/lib/engines/framework-detection.js +0 -508
- package/bin/runners/lib/engines/import-order-engine.js +0 -429
- package/bin/runners/lib/engines/naming-conventions-engine.js +0 -544
- package/bin/runners/lib/engines/noise-reduction-engine.js +0 -452
- package/bin/runners/lib/engines/orchestrator.js +0 -334
- package/bin/runners/lib/engines/react-patterns-engine.js +0 -457
- package/bin/runners/lib/engines/vibecheck-engines/lib/ai-hallucination-engine.js +0 -806
- package/bin/runners/lib/engines/vibecheck-engines/lib/smart-fix-engine.js +0 -577
- package/bin/runners/lib/engines/vibecheck-engines/lib/vibe-score-engine.js +0 -543
- package/bin/runners/lib/engines/vibecheck-engines.js +0 -514
- package/bin/runners/lib/enhanced-features/index.js +0 -305
- package/bin/runners/lib/enhanced-output.js +0 -631
- package/bin/runners/lib/enterprise.js +0 -300
- package/bin/runners/lib/firewall/command-validator.js +0 -351
- package/bin/runners/lib/firewall/config.js +0 -341
- package/bin/runners/lib/firewall/content-validator.js +0 -519
- package/bin/runners/lib/firewall/index.js +0 -101
- package/bin/runners/lib/firewall/path-validator.js +0 -256
- package/bin/runners/lib/intelligence/cross-repo-intelligence.js +0 -817
- package/bin/runners/lib/mcp-utils.js +0 -425
- package/bin/runners/lib/output/index.js +0 -1022
- package/bin/runners/lib/policy-engine.js +0 -652
- package/bin/runners/lib/polish/autofix/accessibility-fixes.js +0 -333
- package/bin/runners/lib/polish/autofix/async-handlers.js +0 -273
- package/bin/runners/lib/polish/autofix/dead-code.js +0 -280
- package/bin/runners/lib/polish/autofix/imports-optimizer.js +0 -344
- package/bin/runners/lib/polish/autofix/index.js +0 -200
- package/bin/runners/lib/polish/autofix/remove-consoles.js +0 -209
- package/bin/runners/lib/polish/autofix/strengthen-types.js +0 -245
- package/bin/runners/lib/polish/backend-checks.js +0 -148
- package/bin/runners/lib/polish/documentation-checks.js +0 -111
- package/bin/runners/lib/polish/frontend-checks.js +0 -168
- package/bin/runners/lib/polish/index.js +0 -71
- package/bin/runners/lib/polish/infrastructure-checks.js +0 -131
- package/bin/runners/lib/polish/library-detection.js +0 -175
- package/bin/runners/lib/polish/performance-checks.js +0 -100
- package/bin/runners/lib/polish/security-checks.js +0 -148
- package/bin/runners/lib/polish/utils.js +0 -203
- package/bin/runners/lib/prompt-builder.js +0 -540
- package/bin/runners/lib/proof-certificate.js +0 -634
- package/bin/runners/lib/reality/accessibility-audit.js +0 -946
- package/bin/runners/lib/reality/api-contract-validator.js +0 -1012
- package/bin/runners/lib/reality/chaos-engineering.js +0 -1084
- package/bin/runners/lib/reality/performance-tracker.js +0 -1077
- package/bin/runners/lib/reality/scenario-generator.js +0 -1404
- package/bin/runners/lib/reality/visual-regression.js +0 -852
- package/bin/runners/lib/reality-profiler.js +0 -717
- package/bin/runners/lib/replay/flight-recorder-viewer.js +0 -1160
- package/bin/runners/lib/review/ai-code-review.js +0 -832
- package/bin/runners/lib/rules/custom-rule-engine.js +0 -985
- package/bin/runners/lib/sbom-generator.js +0 -641
- package/bin/runners/lib/scan-output-enhanced.js +0 -512
- package/bin/runners/lib/security/owasp-scanner.js +0 -939
- package/bin/runners/lib/validators/contract-validator.js +0 -283
- package/bin/runners/lib/validators/dead-export-detector.js +0 -279
- package/bin/runners/lib/validators/dep-audit.js +0 -245
- package/bin/runners/lib/validators/env-validator.js +0 -319
- package/bin/runners/lib/validators/index.js +0 -120
- package/bin/runners/lib/validators/license-checker.js +0 -252
- package/bin/runners/lib/validators/route-validator.js +0 -290
- package/bin/runners/runAuthority.js +0 -528
- package/bin/runners/runConductor.js +0 -772
- package/bin/runners/runContainer.js +0 -366
- package/bin/runners/runEasy.js +0 -410
- package/bin/runners/runIaC.js +0 -372
- package/bin/runners/runVibe.js +0 -791
- package/mcp-server/tools.js +0 -495
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* TIER ENFORCEMENT:
|
|
9
9
|
* - FREE: Preview mode (5 pages, 20 clicks, no auth boundary)
|
|
10
|
-
* -
|
|
10
|
+
* - STARTER: Full budgets + basic auth verification
|
|
11
|
+
* - PRO: Advanced auth boundary (multi-role, 2-pass) + fake data detection
|
|
11
12
|
*
|
|
12
13
|
* Pass A (anon): crawl + click, record which routes look protected
|
|
13
14
|
* Pass B (auth): crawl same routes using storageState, verify protected routes accessible
|
|
@@ -33,14 +34,6 @@ const { parseGlobalFlags, shouldShowBanner } = require("./lib/global-flags");
|
|
|
33
34
|
const entitlements = require("./lib/entitlements-v2");
|
|
34
35
|
const upsell = require("./lib/upsell");
|
|
35
36
|
|
|
36
|
-
// V7: World-class performance profiler and coverage map
|
|
37
|
-
let realityProfiler;
|
|
38
|
-
try {
|
|
39
|
-
realityProfiler = require("./lib/reality-profiler");
|
|
40
|
-
} catch (e) {
|
|
41
|
-
realityProfiler = null;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
37
|
let chromium;
|
|
45
38
|
let playwrightError = null;
|
|
46
39
|
try {
|
|
@@ -51,13 +44,62 @@ try {
|
|
|
51
44
|
}
|
|
52
45
|
|
|
53
46
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
54
|
-
// TERMINAL
|
|
47
|
+
// ADVANCED TERMINAL - ANSI CODES & UTILITIES
|
|
55
48
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
56
49
|
|
|
57
|
-
const
|
|
50
|
+
const c = {
|
|
51
|
+
reset: '\x1b[0m',
|
|
52
|
+
bold: '\x1b[1m',
|
|
53
|
+
dim: '\x1b[2m',
|
|
54
|
+
italic: '\x1b[3m',
|
|
55
|
+
underline: '\x1b[4m',
|
|
56
|
+
blink: '\x1b[5m',
|
|
57
|
+
inverse: '\x1b[7m',
|
|
58
|
+
hidden: '\x1b[8m',
|
|
59
|
+
strike: '\x1b[9m',
|
|
60
|
+
// Colors
|
|
61
|
+
black: '\x1b[30m',
|
|
62
|
+
red: '\x1b[31m',
|
|
63
|
+
green: '\x1b[32m',
|
|
64
|
+
yellow: '\x1b[33m',
|
|
65
|
+
blue: '\x1b[34m',
|
|
66
|
+
magenta: '\x1b[35m',
|
|
67
|
+
cyan: '\x1b[36m',
|
|
68
|
+
white: '\x1b[37m',
|
|
69
|
+
// Bright colors
|
|
70
|
+
gray: '\x1b[90m',
|
|
71
|
+
brightRed: '\x1b[91m',
|
|
72
|
+
brightGreen: '\x1b[92m',
|
|
73
|
+
brightYellow: '\x1b[93m',
|
|
74
|
+
brightBlue: '\x1b[94m',
|
|
75
|
+
brightMagenta: '\x1b[95m',
|
|
76
|
+
brightCyan: '\x1b[96m',
|
|
77
|
+
brightWhite: '\x1b[97m',
|
|
78
|
+
// Background
|
|
79
|
+
bgBlack: '\x1b[40m',
|
|
80
|
+
bgRed: '\x1b[41m',
|
|
81
|
+
bgGreen: '\x1b[42m',
|
|
82
|
+
bgYellow: '\x1b[43m',
|
|
83
|
+
bgBlue: '\x1b[44m',
|
|
84
|
+
bgMagenta: '\x1b[45m',
|
|
85
|
+
bgCyan: '\x1b[46m',
|
|
86
|
+
bgWhite: '\x1b[47m',
|
|
87
|
+
// Cursor control
|
|
88
|
+
cursorUp: (n = 1) => `\x1b[${n}A`,
|
|
89
|
+
cursorDown: (n = 1) => `\x1b[${n}B`,
|
|
90
|
+
cursorRight: (n = 1) => `\x1b[${n}C`,
|
|
91
|
+
cursorLeft: (n = 1) => `\x1b[${n}D`,
|
|
92
|
+
clearLine: '\x1b[2K',
|
|
93
|
+
clearScreen: '\x1b[2J',
|
|
94
|
+
saveCursor: '\x1b[s',
|
|
95
|
+
restoreCursor: '\x1b[u',
|
|
96
|
+
hideCursor: '\x1b[?25l',
|
|
97
|
+
showCursor: '\x1b[?25h',
|
|
98
|
+
};
|
|
58
99
|
|
|
59
|
-
//
|
|
60
|
-
const
|
|
100
|
+
// True color support
|
|
101
|
+
const rgb = (r, g, b) => `\x1b[38;2;${r};${g};${b}m`;
|
|
102
|
+
const bgRgb = (r, g, b) => `\x1b[48;2;${r};${g};${b}m`;
|
|
61
103
|
|
|
62
104
|
// Premium color palette (orange/coral theme for "reality" - testing/verification)
|
|
63
105
|
const colors = {
|
|
@@ -739,7 +781,7 @@ function printTierWarning(tier, limits, originalMaxPages, appliedMaxPages, verif
|
|
|
739
781
|
}
|
|
740
782
|
|
|
741
783
|
if (verifyAuthRequested && !verifyAuthApplied) {
|
|
742
|
-
console.log(` ${c.dim}Auth boundary:${c.reset} ${colors.error}disabled${c.reset} ${c.dim}(requires
|
|
784
|
+
console.log(` ${c.dim}Auth boundary:${c.reset} ${colors.error}disabled${c.reset} ${c.dim}(requires STARTER+)${c.reset}`);
|
|
743
785
|
}
|
|
744
786
|
|
|
745
787
|
console.log(` ${colors.accent}Upgrade:${c.reset} ${c.dim}https://vibecheckai.dev/pricing${c.reset}`);
|
|
@@ -795,7 +837,8 @@ function printHelp(opts = {}) {
|
|
|
795
837
|
|
|
796
838
|
${c.bold}Tier Limits:${c.reset}
|
|
797
839
|
${c.dim}FREE${c.reset} 5 pages, no auth boundary
|
|
798
|
-
${c.dim}
|
|
840
|
+
${c.dim}STARTER${c.reset} Full budgets + basic auth
|
|
841
|
+
${c.dim}PRO${c.reset} Advanced auth (multi-role)
|
|
799
842
|
|
|
800
843
|
${c.bold}Exit Codes:${c.reset}
|
|
801
844
|
${colors.success}0${c.reset} CLEAN — No issues found
|
|
@@ -1534,14 +1577,6 @@ async function runReality(argsOrOpts = {}) {
|
|
|
1534
1577
|
if (Array.isArray(argsOrOpts)) {
|
|
1535
1578
|
const { flags } = parseGlobalFlags(argsOrOpts);
|
|
1536
1579
|
globalOpts = { ...globalOpts, ...flags };
|
|
1537
|
-
|
|
1538
|
-
// Configure unified output mode
|
|
1539
|
-
output.setMode({
|
|
1540
|
-
json: globalOpts.json,
|
|
1541
|
-
quiet: globalOpts.quiet,
|
|
1542
|
-
ci: globalOpts.ci
|
|
1543
|
-
});
|
|
1544
|
-
|
|
1545
1580
|
if (globalOpts.help) {
|
|
1546
1581
|
printHelp(globalOpts);
|
|
1547
1582
|
return 0;
|
|
@@ -2007,50 +2042,6 @@ async function runReality(argsOrOpts = {}) {
|
|
|
2007
2042
|
|
|
2008
2043
|
const duration = Date.now() - startTime;
|
|
2009
2044
|
|
|
2010
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
2011
|
-
// V7: WORLD-CLASS PERFORMANCE PROFILE & COVERAGE MAP
|
|
2012
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
2013
|
-
|
|
2014
|
-
if (realityProfiler && !globalOpts.json && !globalOpts.quiet) {
|
|
2015
|
-
// Generate enhanced coverage map
|
|
2016
|
-
const visitedRoutes = allVisited.map(u => {
|
|
2017
|
-
try { return new URL(u).pathname; } catch { return u; }
|
|
2018
|
-
});
|
|
2019
|
-
const expectedRoutes = tp?.routes?.map(r => r.path) || [];
|
|
2020
|
-
const coverageMap = realityProfiler.generateCoverageMap(visitedRoutes, expectedRoutes, tp);
|
|
2021
|
-
|
|
2022
|
-
console.log();
|
|
2023
|
-
console.log(realityProfiler.renderCoverageMap(coverageMap));
|
|
2024
|
-
|
|
2025
|
-
// Generate evidence pack
|
|
2026
|
-
try {
|
|
2027
|
-
const evidencePack = await realityProfiler.generateEvidencePack({
|
|
2028
|
-
projectPath: root,
|
|
2029
|
-
outputDir: outBase,
|
|
2030
|
-
findings,
|
|
2031
|
-
coverage: coverageMap,
|
|
2032
|
-
performance: {}, // Would need to track this during crawling
|
|
2033
|
-
screenshots: fs.existsSync(shotsDir) ? fs.readdirSync(shotsDir).map(f => path.join(shotsDir, f)) : [],
|
|
2034
|
-
videos: recordVideo ? [anonVideoPath, authVideoPath].filter(Boolean) : [],
|
|
2035
|
-
traces: recordTrace ? [anonTracePath, authTracePath].filter(Boolean) : [],
|
|
2036
|
-
});
|
|
2037
|
-
|
|
2038
|
-
console.log();
|
|
2039
|
-
console.log(` ${c.dim}╭${'─'.repeat(58)}╮${c.reset}`);
|
|
2040
|
-
console.log(` ${c.dim}│${c.reset} ${colors.accent}📦 EVIDENCE PACK GENERATED${c.reset} ${c.dim}│${c.reset}`);
|
|
2041
|
-
console.log(` ${c.dim}├${'─'.repeat(58)}┤${c.reset}`);
|
|
2042
|
-
console.log(` ${c.dim}│${c.reset} ID: ${c.cyan}${evidencePack.packId}${c.reset}`.padEnd(68) + `${c.dim}│${c.reset}`);
|
|
2043
|
-
console.log(` ${c.dim}│${c.reset} Contents: ${evidencePack.manifest.contents.findings} findings, ${evidencePack.manifest.contents.screenshots} screenshots ${c.dim}│${c.reset}`);
|
|
2044
|
-
console.log(` ${c.dim}│${c.reset} Report: ${c.cyan}${path.relative(root, evidencePack.reportPath)}${c.reset}`.padEnd(68) + `${c.dim}│${c.reset}`);
|
|
2045
|
-
console.log(` ${c.dim}╰${'─'.repeat(58)}╯${c.reset}`);
|
|
2046
|
-
} catch (packError) {
|
|
2047
|
-
// Evidence pack generation failed - continue without it
|
|
2048
|
-
if (globalOpts.verbose) {
|
|
2049
|
-
console.log(` ${c.dim}Evidence pack generation skipped: ${packError.message}${c.reset}`);
|
|
2050
|
-
}
|
|
2051
|
-
}
|
|
2052
|
-
}
|
|
2053
|
-
|
|
2054
2045
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
2055
2046
|
// OUTPUT
|
|
2056
2047
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -2093,7 +2084,7 @@ async function runReality(argsOrOpts = {}) {
|
|
|
2093
2084
|
cmd: "reality",
|
|
2094
2085
|
why: "cap_hit",
|
|
2095
2086
|
topIssues: findings.slice(0, 5),
|
|
2096
|
-
upgradeTier: "
|
|
2087
|
+
upgradeTier: "starter",
|
|
2097
2088
|
}));
|
|
2098
2089
|
console.log(upsell.formatNextSteps("reality", blocks > 0 ? "BLOCK" : warns > 0 ? "WARN" : "SHIP", currentTier));
|
|
2099
2090
|
console.log();
|
package/bin/runners/runReport.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* vibecheck report - World-Class Reports
|
|
2
|
+
* vibecheck report - World-Class Enterprise Reports
|
|
3
3
|
*
|
|
4
4
|
* TIER ENFORCEMENT:
|
|
5
5
|
* - FREE: HTML, MD formats only
|
|
6
|
-
* -
|
|
6
|
+
* - STARTER: + SARIF, CSV formats
|
|
7
|
+
* - PRO: + compliance packs, PDF export, redaction templates
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
+
* Enterprise-grade report generation with:
|
|
9
10
|
* - Beautiful interactive HTML with modern design
|
|
10
11
|
* - Multiple export formats (HTML, MD, JSON, SARIF, CSV, PDF)
|
|
11
12
|
* - Executive, Technical, Compliance report types
|
|
@@ -18,7 +19,7 @@ const path = require("path");
|
|
|
18
19
|
const fs = require("fs");
|
|
19
20
|
const { parseGlobalFlags, shouldShowBanner } = require("./lib/global-flags");
|
|
20
21
|
const { EXIT } = require("./lib/exit-codes");
|
|
21
|
-
const {
|
|
22
|
+
const { ensureScanResults } = require("./lib/prerequisites");
|
|
22
23
|
|
|
23
24
|
// Entitlements enforcement
|
|
24
25
|
let entitlements;
|
|
@@ -73,9 +74,6 @@ const {
|
|
|
73
74
|
renderError,
|
|
74
75
|
} = require("./lib/report-output");
|
|
75
76
|
|
|
76
|
-
// Unified Output System
|
|
77
|
-
const { output } = require("./lib/output/index.js");
|
|
78
|
-
|
|
79
77
|
function parseArgs(args) {
|
|
80
78
|
// Parse global flags first
|
|
81
79
|
const { flags: globalFlags, cleanArgs } = parseGlobalFlags(args);
|
|
@@ -138,13 +136,6 @@ function printHelp(showBanner = true) {
|
|
|
138
136
|
async function runReport(args) {
|
|
139
137
|
const opts = parseArgs(args);
|
|
140
138
|
|
|
141
|
-
// Configure unified output mode
|
|
142
|
-
output.setMode({
|
|
143
|
-
json: opts.json,
|
|
144
|
-
quiet: opts.quiet,
|
|
145
|
-
ci: opts.ci
|
|
146
|
-
});
|
|
147
|
-
|
|
148
139
|
if (opts.help) {
|
|
149
140
|
printHelp(shouldShowBanner(opts));
|
|
150
141
|
return 0;
|
|
@@ -169,7 +160,7 @@ async function runReport(args) {
|
|
|
169
160
|
});
|
|
170
161
|
if (!access.allowed) {
|
|
171
162
|
console.log(`\n ${colors.warning}${icons.warning}${ansi.reset} ${ansi.dim}HTML and MD formats are available on FREE tier${ansi.reset}`);
|
|
172
|
-
console.log(` ${ansi.dim}Upgrade to
|
|
163
|
+
console.log(` ${ansi.dim}Upgrade to STARTER for SARIF/CSV export${ansi.reset}\n`);
|
|
173
164
|
return entitlements.EXIT_FEATURE_NOT_ALLOWED;
|
|
174
165
|
}
|
|
175
166
|
}
|
|
@@ -212,13 +203,43 @@ async function runReport(args) {
|
|
|
212
203
|
const spinner = new Spinner({ color: colors.accent });
|
|
213
204
|
spinner.start(`Generating ${opts.type} report`);
|
|
214
205
|
|
|
215
|
-
//
|
|
206
|
+
// Auto-run scan if results are missing (unless in CI or explicitly disabled)
|
|
207
|
+
const scanPrereq = await ensureScanResults(projectPath, {
|
|
208
|
+
quiet: opts.quiet,
|
|
209
|
+
json: opts.json,
|
|
210
|
+
ci: opts.ci,
|
|
211
|
+
colors,
|
|
212
|
+
icons,
|
|
213
|
+
ansi,
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
if (scanPrereq.ran && !scanPrereq.success && !opts.quiet) {
|
|
217
|
+
spinner.warn("Auto-run scan failed - continuing with available data");
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Load ship results (prefer ship results, fall back to scan results)
|
|
216
221
|
let shipResults = loadShipResults(projectPath, outputDir);
|
|
222
|
+
|
|
223
|
+
// If no ship results, try to load scan results
|
|
224
|
+
if (!shipResults) {
|
|
225
|
+
const scanResultsPath = path.join(projectPath, ".vibecheck", "results", "latest.json");
|
|
226
|
+
if (fs.existsSync(scanResultsPath)) {
|
|
227
|
+
try {
|
|
228
|
+
const scanData = JSON.parse(fs.readFileSync(scanResultsPath, "utf8"));
|
|
229
|
+
shipResults = {
|
|
230
|
+
score: scanData.result?.score || scanData.score || 0,
|
|
231
|
+
verdict: scanData.result?.verdict || scanData.verdict || "UNKNOWN",
|
|
232
|
+
findings: scanData.result?.findings || scanData.findings || [],
|
|
233
|
+
truthpack: scanData.truthpack || null,
|
|
234
|
+
};
|
|
235
|
+
} catch {}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
217
238
|
|
|
218
239
|
if (!shipResults) {
|
|
219
240
|
spinner.warn("No scan results found - using demo data");
|
|
220
241
|
if (!opts.quiet) {
|
|
221
|
-
console.log(` ${ansi.dim}Tip: Run 'vibecheck
|
|
242
|
+
console.log(` ${ansi.dim}Tip: Run 'vibecheck scan' first for real results.${ansi.reset}\n`);
|
|
222
243
|
}
|
|
223
244
|
shipResults = getDemoData();
|
|
224
245
|
}
|
|
@@ -315,22 +336,6 @@ async function runReport(args) {
|
|
|
315
336
|
// Print success message using design system
|
|
316
337
|
console.log(renderSuccess(outputFileName, opts.format));
|
|
317
338
|
|
|
318
|
-
// Pro upsell for free users
|
|
319
|
-
const { key } = getApiKey();
|
|
320
|
-
const currentTier = key ? "pro" : "free";
|
|
321
|
-
|
|
322
|
-
if (currentTier === 'free' && !opts.quiet && !opts.ci) {
|
|
323
|
-
console.log();
|
|
324
|
-
console.log(` ${ansi.gray}╭${'─'.repeat(60)}╮${ansi.reset}`);
|
|
325
|
-
console.log(` ${ansi.gray}│${ansi.reset} ${ansi.magenta}★ PRO${ansi.reset} Unlock advanced report formats: ${ansi.gray}│${ansi.reset}`);
|
|
326
|
-
console.log(` ${ansi.gray}│${ansi.reset} • SARIF for GitHub code scanning ${ansi.gray}│${ansi.reset}`);
|
|
327
|
-
console.log(` ${ansi.gray}│${ansi.reset} • CSV exports for spreadsheets ${ansi.gray}│${ansi.reset}`);
|
|
328
|
-
console.log(` ${ansi.gray}│${ansi.reset} • Compliance packs (SOC2, HIPAA, GDPR) ${ansi.gray}│${ansi.reset}`);
|
|
329
|
-
console.log(` ${ansi.gray}│${ansi.reset} ${ansi.dim}https://vibecheckai.dev/pricing${ansi.reset} ${ansi.gray}│${ansi.reset}`);
|
|
330
|
-
console.log(` ${ansi.gray}╰${'─'.repeat(60)}╯${ansi.reset}`);
|
|
331
|
-
console.log();
|
|
332
|
-
}
|
|
333
|
-
|
|
334
339
|
// Open in browser if requested
|
|
335
340
|
if (opts.open && format === "html") {
|
|
336
341
|
openInBrowser(outputFileName);
|
|
@@ -12,11 +12,14 @@
|
|
|
12
12
|
|
|
13
13
|
"use strict";
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
const c = {
|
|
16
|
+
reset: '\x1b[0m',
|
|
17
|
+
bold: '\x1b[1m',
|
|
18
|
+
dim: '\x1b[2m',
|
|
19
|
+
cyan: '\x1b[36m',
|
|
20
|
+
yellow: '\x1b[33m',
|
|
21
|
+
red: '\x1b[31m',
|
|
22
|
+
};
|
|
20
23
|
|
|
21
24
|
function printHelp() {
|
|
22
25
|
console.log(`
|