@vibecheckai/cli 3.3.0 → 3.4.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/bin/registry.js +255 -226
- package/bin/runners/lib/analyzers.js +55 -123
- package/bin/runners/lib/entitlements-v2.js +96 -505
- package/bin/runners/lib/scan-output.js +18 -19
- package/bin/runners/lib/ship-output.js +18 -25
- package/bin/runners/lib/upsell.js +90 -338
- package/bin/runners/runScan.js +14 -1
- package/bin/vibecheck.js +6 -11
- package/mcp-server/index.js +13 -623
- package/mcp-server/lib/api-client.cjs +7 -299
- package/mcp-server/package.json +1 -1
- package/mcp-server/tier-auth.js +175 -574
- package/mcp-server/tools-v3.js +495 -533
- package/package.json +1 -1
|
@@ -245,39 +245,38 @@ function formatScanOutput(result, options = {}) {
|
|
|
245
245
|
});
|
|
246
246
|
|
|
247
247
|
const categoryLabels = {
|
|
248
|
-
'EnvContract': '🔐 Env
|
|
248
|
+
'EnvContract': '🔐 Env',
|
|
249
249
|
'MissingRoute': '🔗 Routes',
|
|
250
|
-
'GhostAuth': '🛡️
|
|
251
|
-
'FakeSuccess': '⚠️
|
|
252
|
-
'MockData': '🎭
|
|
250
|
+
'GhostAuth': '🛡️ Auth',
|
|
251
|
+
'FakeSuccess': '⚠️ Fake',
|
|
252
|
+
'MockData': '🎭 Mocks',
|
|
253
253
|
'Secrets': '🔑 Secrets',
|
|
254
|
-
'ConsoleLog': '📝
|
|
254
|
+
'ConsoleLog': '📝 Logs',
|
|
255
255
|
'TodoFixme': '📋 TODOs',
|
|
256
|
+
'CodeQuality': '✨ Quality',
|
|
257
|
+
'Security': '⚡ Security',
|
|
258
|
+
'Performance': '⚡ Perf',
|
|
256
259
|
};
|
|
257
260
|
|
|
258
261
|
const summaryItems = Object.entries(categoryCounts)
|
|
259
262
|
.sort((a, b) => b[1] - a[1])
|
|
260
263
|
.slice(0, 6)
|
|
261
264
|
.map(([cat, count]) => {
|
|
262
|
-
const label = categoryLabels[cat] ||
|
|
265
|
+
const label = categoryLabels[cat] || cat;
|
|
263
266
|
return `${label}: ${chalk.bold}${count}${chalk.reset}`;
|
|
264
267
|
});
|
|
265
268
|
|
|
266
269
|
if (summaryItems.length > 0) {
|
|
267
|
-
//
|
|
268
|
-
const
|
|
269
|
-
const prefix = `${chalk.dim}Findings by Category:${chalk.reset} `;
|
|
270
|
-
const maxLineLength = WIDTH - 10; // Leave some margin
|
|
270
|
+
// Simple left-aligned format with consistent spacing
|
|
271
|
+
const indent = ' ';
|
|
271
272
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
lines.push(`${chalk.gray}${BOX.vertical}${chalk.reset}${
|
|
279
|
-
} else {
|
|
280
|
-
lines.push(`${chalk.gray}${BOX.vertical}${chalk.reset}${padCenter(`${prefix}${categoryText}`, WIDTH - 2)}${chalk.gray}${BOX.vertical}${chalk.reset}`);
|
|
273
|
+
// Always split into 2 rows of 3 for clean alignment
|
|
274
|
+
const row1 = summaryItems.slice(0, 3).join(' ');
|
|
275
|
+
const row2 = summaryItems.slice(3, 6).join(' ');
|
|
276
|
+
|
|
277
|
+
lines.push(`${chalk.gray}${BOX.vertical}${chalk.reset}${indent}${chalk.dim}FINDINGS:${chalk.reset} ${row1}${' '.repeat(Math.max(0, WIDTH - row1.length - 14))}${chalk.gray}${BOX.vertical}${chalk.reset}`);
|
|
278
|
+
if (row2) {
|
|
279
|
+
lines.push(`${chalk.gray}${BOX.vertical}${chalk.reset}${indent}${' '.repeat(10)}${row2}${' '.repeat(Math.max(0, WIDTH - row2.length - 14))}${chalk.gray}${BOX.vertical}${chalk.reset}`);
|
|
281
280
|
}
|
|
282
281
|
lines.push(`${chalk.gray}${BOX.vertical}${chalk.reset}${' '.repeat(WIDTH - 2)}${chalk.gray}${BOX.vertical}${chalk.reset}`);
|
|
283
282
|
}
|
|
@@ -322,8 +322,8 @@ function renderBlockerDetails(findings, maxShow = 8, options = {}) {
|
|
|
322
322
|
|
|
323
323
|
if (blockers.length === 0) return '';
|
|
324
324
|
|
|
325
|
-
// Fix hints are
|
|
326
|
-
const canShowFixHints = tier === '
|
|
325
|
+
// Fix hints are PRO only (2-tier model)
|
|
326
|
+
const canShowFixHints = tier === 'pro' || tier === 'compliance' || tier === 'starter'; // starter=legacy compatibility
|
|
327
327
|
|
|
328
328
|
const lines = [];
|
|
329
329
|
lines.push(renderSection(`BLOCKERS (${blockers.length})`, '🚨'));
|
|
@@ -373,7 +373,7 @@ function renderBlockerDetails(findings, maxShow = 8, options = {}) {
|
|
|
373
373
|
}
|
|
374
374
|
} else {
|
|
375
375
|
// Show locked fix hint for FREE tier
|
|
376
|
-
lines.push(` ${ansi.dim}🔒 Fix
|
|
376
|
+
lines.push(` ${ansi.dim}🔒 Fix hints available with PRO ($69/mo)${ansi.reset}`);
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
lines.push('');
|
|
@@ -388,9 +388,9 @@ function renderBlockerDetails(findings, maxShow = 8, options = {}) {
|
|
|
388
388
|
if (!canShowFixHints && blockers.length > 0) {
|
|
389
389
|
lines.push(` ${ansi.dim}─────────────────────────────────────────${ansi.reset}`);
|
|
390
390
|
lines.push(` ${colors.accent}💡${ansi.reset} ${ansi.bold}Unlock AI fix suggestions${ansi.reset}`);
|
|
391
|
-
lines.push(` ${ansi.dim}
|
|
391
|
+
lines.push(` ${ansi.dim}PRO users get specific fix hints and${ansi.reset}`);
|
|
392
392
|
lines.push(` ${ansi.dim}AI mission prompts for every issue.${ansi.reset}`);
|
|
393
|
-
lines.push(` ${colors.accent}
|
|
393
|
+
lines.push(` ${colors.accent}Upgrade to PRO ($69/mo)${ansi.reset} ${ansi.dim}→ vibecheckai.dev/pricing${ansi.reset}`);
|
|
394
394
|
lines.push('');
|
|
395
395
|
}
|
|
396
396
|
|
|
@@ -702,22 +702,15 @@ function renderUpgradePrompts(findings, verdict) {
|
|
|
702
702
|
lines.push(` ${colors.accent}⚡${ansi.reset} ${ansi.bold}Want to fix these automatically?${ansi.reset}`);
|
|
703
703
|
lines.push('');
|
|
704
704
|
|
|
705
|
-
//
|
|
706
|
-
lines.push(` ${colors.accent}
|
|
705
|
+
// PRO tier benefits (2-tier: FREE / PRO)
|
|
706
|
+
lines.push(` ${colors.accent}PRO${ansi.reset} ${ansi.dim}($69/mo)${ansi.reset}`);
|
|
707
707
|
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck fix${ansi.reset} - AI auto-fix for ${fixableCount} issues`);
|
|
708
|
-
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck
|
|
709
|
-
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck
|
|
708
|
+
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck ship${ansi.reset} - GO/NO-GO verdicts with proof`);
|
|
709
|
+
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck prove${ansi.reset} - Video proof your app actually works`);
|
|
710
|
+
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck reality --agent${ansi.reset} - AI tests your app autonomously`);
|
|
710
711
|
lines.push('');
|
|
711
712
|
|
|
712
|
-
|
|
713
|
-
if (blockers.length > 0 || verdict === 'BLOCK') {
|
|
714
|
-
lines.push(` ${colors.accent}PRO${ansi.reset} ${ansi.dim}($99/mo)${ansi.reset}`);
|
|
715
|
-
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck prove${ansi.reset} - Video proof your app actually works`);
|
|
716
|
-
lines.push(` ${colors.success}→${ansi.reset} ${ansi.bold}vibecheck reality --agent${ansi.reset} - AI tests your app autonomously`);
|
|
717
|
-
lines.push('');
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
lines.push(` ${ansi.dim}Try STARTER free for 14 days: ${colors.accent}vibecheck login${ansi.reset}`);
|
|
713
|
+
lines.push(` ${ansi.dim}Upgrade: ${colors.accent}vibecheckai.dev/pricing${ansi.reset}`);
|
|
721
714
|
lines.push('');
|
|
722
715
|
|
|
723
716
|
return lines.join('\n');
|
|
@@ -751,8 +744,8 @@ function formatShipOutput(result, options = {}) {
|
|
|
751
744
|
cached = false,
|
|
752
745
|
} = result;
|
|
753
746
|
|
|
754
|
-
const isPro = tier === 'pro' || tier === 'compliance';
|
|
755
|
-
const
|
|
747
|
+
const isPro = tier === 'pro' || tier === 'compliance' || tier === 'starter'; // starter=legacy compat
|
|
748
|
+
const isProTier = isPro; // 2-tier model: isPro covers all paid tiers
|
|
756
749
|
const canShip = verdict === 'SHIP';
|
|
757
750
|
|
|
758
751
|
const lines = [];
|
|
@@ -777,7 +770,7 @@ function formatShipOutput(result, options = {}) {
|
|
|
777
770
|
lines.push(renderBlockerDetails(findings, 8, { tier }));
|
|
778
771
|
|
|
779
772
|
// Upgrade prompts for FREE tier users (if there are fixable issues)
|
|
780
|
-
if (findings.length > 0 && !
|
|
773
|
+
if (findings.length > 0 && !isProTier) {
|
|
781
774
|
lines.push(renderUpgradePrompts(findings, verdict));
|
|
782
775
|
}
|
|
783
776
|
|
|
@@ -799,16 +792,16 @@ function formatShipOutput(result, options = {}) {
|
|
|
799
792
|
}
|
|
800
793
|
|
|
801
794
|
// Badge (if requested and tier allows)
|
|
802
|
-
if (showBadge &&
|
|
795
|
+
if (showBadge && isProTier) {
|
|
803
796
|
const badgeResult = renderBadgeOutput(projectPath, verdict, score, { tier, isVerified });
|
|
804
797
|
lines.push(badgeResult.output);
|
|
805
|
-
} else if (showBadge && !
|
|
798
|
+
} else if (showBadge && !isProTier) {
|
|
806
799
|
// Show badge upsell for FREE users
|
|
807
800
|
lines.push('');
|
|
808
801
|
lines.push(renderSection('BADGE', '📛'));
|
|
809
802
|
lines.push('');
|
|
810
|
-
lines.push(` ${ansi.dim}🔒 Ship badges require
|
|
811
|
-
lines.push(` ${colors.accent}
|
|
803
|
+
lines.push(` ${ansi.dim}🔒 Ship badges require PRO ($69/mo)${ansi.reset}`);
|
|
804
|
+
lines.push(` ${colors.accent}vibecheckai.dev/pricing${ansi.reset} ${ansi.dim}to upgrade${ansi.reset}`);
|
|
812
805
|
lines.push('');
|
|
813
806
|
}
|
|
814
807
|
|