@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
package/bin/runners/runEasy.js
DELETED
|
@@ -1,410 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Easy Mode Entry Point
|
|
4
|
-
*
|
|
5
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
-
* THE SIMPLEST WAY TO USE VIBECHECK
|
|
7
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
8
|
-
*
|
|
9
|
-
* Commands:
|
|
10
|
-
* npx vibecheck → Interactive wizard (FREE)
|
|
11
|
-
* npx vibecheck test → Test your app (PRO - Reality Mode)
|
|
12
|
-
* npx vibecheck test http://... → Test specific URL (PRO)
|
|
13
|
-
* npx vibecheck protect → Enable firewall (PRO)
|
|
14
|
-
* npx vibecheck protect --off → Disable firewall (PRO)
|
|
15
|
-
* npx vibecheck status → Check what's enabled (FREE)
|
|
16
|
-
* npx vibecheck help → Show help (FREE)
|
|
17
|
-
*
|
|
18
|
-
* That's it. No config files needed. No learning curve.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
"use strict";
|
|
22
|
-
|
|
23
|
-
const { Wizard } = require("./lib/easy/interactive-wizard");
|
|
24
|
-
const { ZeroConfigReality } = require("./lib/easy/zero-config-reality");
|
|
25
|
-
const { OneClickFirewall, quickCheck } = require("./lib/easy/one-click-firewall");
|
|
26
|
-
|
|
27
|
-
// Unified Output System
|
|
28
|
-
const { output } = require("./lib/output/index.js");
|
|
29
|
-
|
|
30
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
31
|
-
// TIER REQUIREMENTS FOR EASY COMMANDS
|
|
32
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
33
|
-
const EASY_COMMAND_TIERS = {
|
|
34
|
-
test: "pro", // Reality Mode is PRO
|
|
35
|
-
protect: "pro", // Firewall/Guard is PRO
|
|
36
|
-
status: "free", // Just checking status is FREE
|
|
37
|
-
help: "free", // Help is always FREE
|
|
38
|
-
check: "pro" // Quick check (git hooks) is part of firewall = PRO
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
42
|
-
// AUTHENTICATION CHECK
|
|
43
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
44
|
-
function getAuthModule() {
|
|
45
|
-
try {
|
|
46
|
-
return require("./lib/auth");
|
|
47
|
-
} catch {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function getEntitlements() {
|
|
53
|
-
try {
|
|
54
|
-
return require("./lib/entitlements-v2");
|
|
55
|
-
} catch {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async function getAuthStatus(command) {
|
|
61
|
-
const requiredTier = EASY_COMMAND_TIERS[command];
|
|
62
|
-
|
|
63
|
-
// FREE commands don't need authentication
|
|
64
|
-
if (requiredTier === "free") {
|
|
65
|
-
return { allowed: true, tier: "free" };
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// PRO commands need authentication
|
|
69
|
-
const auth = getAuthModule();
|
|
70
|
-
if (!auth) {
|
|
71
|
-
return {
|
|
72
|
-
allowed: false,
|
|
73
|
-
reason: "auth_module_missing",
|
|
74
|
-
message: "Authentication module not available"
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const { key } = auth.getApiKey();
|
|
79
|
-
|
|
80
|
-
if (!key) {
|
|
81
|
-
return {
|
|
82
|
-
allowed: false,
|
|
83
|
-
reason: "no_api_key",
|
|
84
|
-
tier: null,
|
|
85
|
-
message: "This feature requires a Vibecheck Pro subscription."
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Check entitlements
|
|
90
|
-
const entitlements = getEntitlements();
|
|
91
|
-
if (entitlements) {
|
|
92
|
-
// Map easy commands to their underlying registry commands
|
|
93
|
-
const commandMap = {
|
|
94
|
-
test: "reality",
|
|
95
|
-
protect: "guard",
|
|
96
|
-
check: "guard"
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const registryCommand = commandMap[command] || command;
|
|
100
|
-
|
|
101
|
-
const result = await entitlements.enforce(registryCommand, {
|
|
102
|
-
apiKey: key,
|
|
103
|
-
projectPath: process.cwd(),
|
|
104
|
-
silent: true
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
if (!result.allowed) {
|
|
108
|
-
return {
|
|
109
|
-
allowed: false,
|
|
110
|
-
reason: "tier_insufficient",
|
|
111
|
-
tier: result.tier,
|
|
112
|
-
requiredTier: result.requiredTier,
|
|
113
|
-
message: `This feature requires Pro. You're on the ${result.tier || 'free'} tier.`
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return { allowed: true, tier: result.tier, key };
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// If no entitlements module, just check for key presence
|
|
121
|
-
return { allowed: true, tier: "unknown", key };
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function showAuthRequired(command) {
|
|
125
|
-
console.log("");
|
|
126
|
-
console.log(` ${c.red}${icon.shield} Pro Feature Required${c.reset}`);
|
|
127
|
-
console.log("");
|
|
128
|
-
console.log(` ${c.dim}The '${command}' command is part of Vibecheck Pro.${c.reset}`);
|
|
129
|
-
console.log("");
|
|
130
|
-
console.log(` ${c.cyan}To get started:${c.reset}`);
|
|
131
|
-
console.log(` 1. Sign up at ${c.cyan}https://vibecheckai.dev${c.reset}`);
|
|
132
|
-
console.log(` 2. Run ${c.cyan}vibecheck login${c.reset} with your API key`);
|
|
133
|
-
console.log(` 3. Try this command again`);
|
|
134
|
-
console.log("");
|
|
135
|
-
console.log(` ${c.dim}Pro includes: Reality Mode, Firewall, Auto-fix, CI Gates${c.reset}`);
|
|
136
|
-
console.log(` ${c.dim}Just $69/month - cancel anytime${c.reset}`);
|
|
137
|
-
console.log("");
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function showTierInsufficient(authResult) {
|
|
141
|
-
console.log("");
|
|
142
|
-
console.log(` ${c.yellow}${icon.shield} Upgrade Required${c.reset}`);
|
|
143
|
-
console.log("");
|
|
144
|
-
console.log(` ${c.dim}${authResult.message}${c.reset}`);
|
|
145
|
-
console.log("");
|
|
146
|
-
console.log(` ${c.cyan}Upgrade at:${c.reset} https://vibecheckai.dev/pricing`);
|
|
147
|
-
console.log("");
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
151
|
-
// BEAUTIFUL OUTPUT HELPERS
|
|
152
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
153
|
-
|
|
154
|
-
const c = {
|
|
155
|
-
reset: "\x1b[0m",
|
|
156
|
-
bright: "\x1b[1m",
|
|
157
|
-
dim: "\x1b[2m",
|
|
158
|
-
red: "\x1b[31m",
|
|
159
|
-
green: "\x1b[32m",
|
|
160
|
-
yellow: "\x1b[33m",
|
|
161
|
-
blue: "\x1b[34m",
|
|
162
|
-
magenta: "\x1b[35m",
|
|
163
|
-
cyan: "\x1b[36m"
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
const icon = {
|
|
167
|
-
check: "✓",
|
|
168
|
-
cross: "✗",
|
|
169
|
-
arrow: "→",
|
|
170
|
-
star: "★",
|
|
171
|
-
rocket: "🚀",
|
|
172
|
-
shield: "🛡️",
|
|
173
|
-
eye: "👁️",
|
|
174
|
-
sparkle: "✨",
|
|
175
|
-
question: "❓",
|
|
176
|
-
heart: "♥"
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
function showSimpleHelp() {
|
|
180
|
-
console.clear();
|
|
181
|
-
console.log("");
|
|
182
|
-
console.log(` ${c.cyan}${c.bright}${icon.sparkle} Vibecheck - Keep Your App Healthy${c.reset}`);
|
|
183
|
-
console.log("");
|
|
184
|
-
console.log(` ${c.dim}Usage:${c.reset}`);
|
|
185
|
-
console.log("");
|
|
186
|
-
console.log(` ${c.cyan}npx vibecheck${c.reset} ${c.dim}Start interactive wizard${c.reset}`);
|
|
187
|
-
console.log("");
|
|
188
|
-
console.log(` ${c.cyan}npx vibecheck test${c.reset} ${c.dim}Test your app automatically${c.reset}`);
|
|
189
|
-
console.log(` ${c.cyan}npx vibecheck test${c.reset} ${c.yellow}<url>${c.reset} ${c.dim}Test a specific URL${c.reset}`);
|
|
190
|
-
console.log("");
|
|
191
|
-
console.log(` ${c.cyan}npx vibecheck protect${c.reset} ${c.dim}Enable code protection${c.reset}`);
|
|
192
|
-
console.log(` ${c.cyan}npx vibecheck protect --off${c.reset} ${c.dim}Disable protection${c.reset}`);
|
|
193
|
-
console.log("");
|
|
194
|
-
console.log(` ${c.cyan}npx vibecheck status${c.reset} ${c.dim}Check what's enabled${c.reset}`);
|
|
195
|
-
console.log(` ${c.cyan}npx vibecheck help${c.reset} ${c.dim}Show this help${c.reset}`);
|
|
196
|
-
console.log("");
|
|
197
|
-
console.log(` ${c.dim}Examples:${c.reset}`);
|
|
198
|
-
console.log("");
|
|
199
|
-
console.log(` ${c.dim}# Test your local development server${c.reset}`);
|
|
200
|
-
console.log(` ${c.cyan}npx vibecheck test http://localhost:3000${c.reset}`);
|
|
201
|
-
console.log("");
|
|
202
|
-
console.log(` ${c.dim}# Enable strict protection mode${c.reset}`);
|
|
203
|
-
console.log(` ${c.cyan}npx vibecheck protect --strict${c.reset}`);
|
|
204
|
-
console.log("");
|
|
205
|
-
console.log(` ${c.dim}Need more? Visit:${c.reset} ${c.cyan}https://vibecheck.dev/docs${c.reset}`);
|
|
206
|
-
console.log("");
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function showQuickStart() {
|
|
210
|
-
console.log("");
|
|
211
|
-
console.log(` ${c.cyan}${c.bright}${icon.rocket} Quick Start${c.reset}`);
|
|
212
|
-
console.log("");
|
|
213
|
-
console.log(` ${c.dim}1. Test your app:${c.reset}`);
|
|
214
|
-
console.log(` ${c.cyan}npx vibecheck test${c.reset}`);
|
|
215
|
-
console.log("");
|
|
216
|
-
console.log(` ${c.dim}2. Enable protection:${c.reset}`);
|
|
217
|
-
console.log(` ${c.cyan}npx vibecheck protect${c.reset}`);
|
|
218
|
-
console.log("");
|
|
219
|
-
console.log(` ${c.dim}That's it! You're all set.${c.reset}`);
|
|
220
|
-
console.log("");
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
224
|
-
// COMMAND HANDLERS
|
|
225
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
226
|
-
|
|
227
|
-
async function handleWizard() {
|
|
228
|
-
const wizard = new Wizard();
|
|
229
|
-
await wizard.start();
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
async function handleTest(args) {
|
|
233
|
-
// Check authentication first - test is PRO
|
|
234
|
-
const authResult = await getAuthStatus("test");
|
|
235
|
-
|
|
236
|
-
if (!authResult.allowed) {
|
|
237
|
-
if (authResult.reason === "no_api_key") {
|
|
238
|
-
showAuthRequired("test");
|
|
239
|
-
} else {
|
|
240
|
-
showTierInsufficient(authResult);
|
|
241
|
-
}
|
|
242
|
-
process.exit(1);
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// Extract URL if provided
|
|
247
|
-
const urlArg = args.find(a => a.startsWith("http") || a.includes("localhost"));
|
|
248
|
-
|
|
249
|
-
const options = {
|
|
250
|
-
url: urlArg,
|
|
251
|
-
thorough: args.includes("--thorough") || args.includes("-t"),
|
|
252
|
-
quiet: args.includes("--quiet") || args.includes("-q")
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
const reality = new ZeroConfigReality(options);
|
|
256
|
-
const result = await reality.run();
|
|
257
|
-
|
|
258
|
-
process.exit(result.success ? 0 : 1);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
async function handleProtect(args) {
|
|
262
|
-
// Disabling firewall is always allowed (cleanup)
|
|
263
|
-
const isDisabling = args.includes("--off") || args.includes("--disable");
|
|
264
|
-
|
|
265
|
-
// Check authentication for enabling - protect is PRO
|
|
266
|
-
if (!isDisabling) {
|
|
267
|
-
const authResult = await checkAuth("protect");
|
|
268
|
-
|
|
269
|
-
if (!authResult.allowed) {
|
|
270
|
-
if (authResult.reason === "no_api_key") {
|
|
271
|
-
showAuthRequired("protect");
|
|
272
|
-
} else {
|
|
273
|
-
showTierInsufficient(authResult);
|
|
274
|
-
}
|
|
275
|
-
process.exit(1);
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
const firewall = new OneClickFirewall({
|
|
281
|
-
mode: args.includes("--strict") ? "strict" :
|
|
282
|
-
args.includes("--monitor") ? "monitor" : "protect",
|
|
283
|
-
skipGitHooks: args.includes("--no-hooks"),
|
|
284
|
-
skipVscode: args.includes("--no-vscode"),
|
|
285
|
-
quiet: args.includes("--quiet") || args.includes("-q")
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
if (isDisabling) {
|
|
289
|
-
await firewall.disable();
|
|
290
|
-
} else if (args.includes("--status")) {
|
|
291
|
-
await firewall.status();
|
|
292
|
-
} else {
|
|
293
|
-
await firewall.enable();
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
async function handleStatus() {
|
|
298
|
-
// Status is FREE - no auth check needed
|
|
299
|
-
console.log("");
|
|
300
|
-
console.log(` ${c.cyan}${c.bright}${icon.sparkle} Vibecheck Status${c.reset}`);
|
|
301
|
-
console.log(` ${c.dim}${"─".repeat(40)}${c.reset}`);
|
|
302
|
-
|
|
303
|
-
// Check firewall
|
|
304
|
-
const firewall = new OneClickFirewall({ quiet: true });
|
|
305
|
-
await firewall.status();
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
async function handleCheck(args) {
|
|
309
|
-
// Check is PRO (part of firewall)
|
|
310
|
-
const authResult = await getAuthStatus("check");
|
|
311
|
-
|
|
312
|
-
if (!authResult.allowed) {
|
|
313
|
-
// For git hooks, fail silently to not block commits when not authenticated
|
|
314
|
-
// Just exit with success if not Pro
|
|
315
|
-
process.exit(0);
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Quick check for git hooks
|
|
320
|
-
const result = await quickCheck({
|
|
321
|
-
staged: args.includes("--staged")
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
process.exit(result.passed ? 0 : 1);
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
328
|
-
// MAIN
|
|
329
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
330
|
-
|
|
331
|
-
async function main() {
|
|
332
|
-
const args = process.argv.slice(2);
|
|
333
|
-
const command = args[0]?.toLowerCase();
|
|
334
|
-
|
|
335
|
-
try {
|
|
336
|
-
// No args = wizard
|
|
337
|
-
if (!command) {
|
|
338
|
-
await handleWizard();
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// Handle commands
|
|
343
|
-
switch (command) {
|
|
344
|
-
case "test":
|
|
345
|
-
case "reality":
|
|
346
|
-
case "check-app":
|
|
347
|
-
await handleTest(args.slice(1));
|
|
348
|
-
break;
|
|
349
|
-
|
|
350
|
-
case "protect":
|
|
351
|
-
case "firewall":
|
|
352
|
-
case "guard":
|
|
353
|
-
await handleProtect(args.slice(1));
|
|
354
|
-
break;
|
|
355
|
-
|
|
356
|
-
case "status":
|
|
357
|
-
await handleStatus();
|
|
358
|
-
break;
|
|
359
|
-
|
|
360
|
-
case "check":
|
|
361
|
-
await handleCheck(args.slice(1));
|
|
362
|
-
break;
|
|
363
|
-
|
|
364
|
-
case "help":
|
|
365
|
-
case "--help":
|
|
366
|
-
case "-h":
|
|
367
|
-
showSimpleHelp();
|
|
368
|
-
break;
|
|
369
|
-
|
|
370
|
-
case "start":
|
|
371
|
-
case "quick":
|
|
372
|
-
showQuickStart();
|
|
373
|
-
break;
|
|
374
|
-
|
|
375
|
-
// If they pass a URL directly, assume they want to test
|
|
376
|
-
default:
|
|
377
|
-
if (command.startsWith("http") || command.includes("localhost")) {
|
|
378
|
-
await handleTest(args);
|
|
379
|
-
} else {
|
|
380
|
-
console.log("");
|
|
381
|
-
console.log(` ${c.yellow}${icon.question} Unknown command: ${command}${c.reset}`);
|
|
382
|
-
showSimpleHelp();
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
} catch (error) {
|
|
387
|
-
console.error("");
|
|
388
|
-
console.error(` ${c.magenta}${icon.cross} Error: ${error.message}${c.reset}`);
|
|
389
|
-
console.error("");
|
|
390
|
-
process.exit(1);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// Run if called directly
|
|
395
|
-
if (require.main === module) {
|
|
396
|
-
main();
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
400
|
-
// EXPORTS
|
|
401
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
402
|
-
|
|
403
|
-
module.exports = {
|
|
404
|
-
main,
|
|
405
|
-
handleWizard,
|
|
406
|
-
handleTest,
|
|
407
|
-
handleProtect,
|
|
408
|
-
handleStatus,
|
|
409
|
-
handleCheck
|
|
410
|
-
};
|