@vibecheckai/cli 3.5.0 → 3.5.1
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 +174 -449
- package/bin/runners/cli-utils.js +33 -2
- package/bin/runners/context/generators/cursor.js +2 -49
- package/bin/runners/context/generators/mcp.js +13 -15
- package/bin/runners/context/proof-context.js +1 -248
- package/bin/runners/lib/analysis-core.js +180 -198
- package/bin/runners/lib/analyzers.js +241 -2212
- package/bin/runners/lib/cli-output.js +210 -242
- package/bin/runners/lib/detectors-v2.js +785 -547
- package/bin/runners/lib/entitlements-v2.js +431 -161
- package/bin/runners/lib/error-handler.js +9 -16
- package/bin/runners/lib/global-flags.js +0 -37
- 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/route-truth.js +322 -1167
- package/bin/runners/lib/scan-output.js +467 -493
- package/bin/runners/lib/ship-output.js +27 -280
- package/bin/runners/lib/terminal-ui.js +700 -310
- package/bin/runners/lib/truth.js +321 -1004
- package/bin/runners/lib/unified-output.js +158 -162
- package/bin/runners/lib/upsell.js +204 -104
- package/bin/runners/runAIAgent.js +10 -5
- package/bin/runners/runAllowlist.js +324 -0
- package/bin/runners/runAuth.js +94 -344
- package/bin/runners/runCheckpoint.js +45 -43
- package/bin/runners/runContext.js +24 -139
- package/bin/runners/runDoctor.js +101 -136
- package/bin/runners/runEvidencePack.js +219 -0
- package/bin/runners/runFix.js +71 -82
- package/bin/runners/runGuard.js +119 -606
- package/bin/runners/runInit.js +60 -22
- package/bin/runners/runInstall.js +281 -0
- package/bin/runners/runLabs.js +341 -0
- package/bin/runners/runMcp.js +62 -139
- package/bin/runners/runPolish.js +83 -282
- package/bin/runners/runPromptFirewall.js +12 -5
- package/bin/runners/runProve.js +58 -33
- package/bin/runners/runReality.js +58 -81
- package/bin/runners/runReport.js +7 -34
- package/bin/runners/runRuntime.js +8 -5
- package/bin/runners/runScan.js +844 -219
- package/bin/runners/runShip.js +59 -721
- package/bin/runners/runValidate.js +11 -24
- package/bin/runners/runWatch.js +76 -131
- package/bin/vibecheck.js +69 -295
- package/mcp-server/ARCHITECTURE.md +339 -0
- package/mcp-server/__tests__/cache.test.ts +313 -0
- package/mcp-server/__tests__/executor.test.ts +239 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/.cache/webpack/cache.pack +1 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/.next/server/chunk.js +3 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/.turbo/cache.json +3 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/.venv/lib/env.py +3 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/dist/bundle.js +3 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/package.json +5 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/src/app.ts +5 -0
- package/mcp-server/__tests__/fixtures/exclusion-test/venv/lib/config.py +4 -0
- package/mcp-server/__tests__/ids.test.ts +345 -0
- package/mcp-server/__tests__/integration/tools.test.ts +410 -0
- package/mcp-server/__tests__/registry.test.ts +365 -0
- package/mcp-server/__tests__/sandbox.test.ts +323 -0
- package/mcp-server/__tests__/schemas.test.ts +372 -0
- package/mcp-server/benchmarks/run-benchmarks.ts +304 -0
- package/mcp-server/examples/doctor.request.json +14 -0
- package/mcp-server/examples/doctor.response.json +53 -0
- package/mcp-server/examples/error.response.json +15 -0
- package/mcp-server/examples/scan.request.json +14 -0
- package/mcp-server/examples/scan.response.json +108 -0
- package/mcp-server/handlers/tool-handler.ts +671 -0
- package/mcp-server/index-v1.js +698 -0
- package/mcp-server/index-v3.ts +293 -0
- package/mcp-server/index.js +1080 -1757
- package/mcp-server/index.old.js +4137 -0
- package/mcp-server/lib/cache.ts +341 -0
- package/mcp-server/lib/errors.ts +346 -0
- package/mcp-server/lib/executor.ts +792 -0
- package/mcp-server/lib/ids.ts +238 -0
- package/mcp-server/lib/logger.ts +368 -0
- package/mcp-server/lib/metrics.ts +365 -0
- package/mcp-server/lib/sandbox.ts +337 -0
- package/mcp-server/lib/validator.ts +229 -0
- package/mcp-server/package-lock.json +165 -0
- package/mcp-server/package.json +32 -7
- package/mcp-server/premium-tools.js +2 -2
- package/mcp-server/registry/tools.json +476 -0
- package/mcp-server/schemas/error-envelope.schema.json +125 -0
- package/mcp-server/schemas/finding.schema.json +167 -0
- package/mcp-server/schemas/report-artifact.schema.json +88 -0
- package/mcp-server/schemas/run-request.schema.json +75 -0
- package/mcp-server/schemas/verdict.schema.json +168 -0
- package/mcp-server/tier-auth.d.ts +71 -0
- package/mcp-server/tier-auth.js +371 -183
- package/mcp-server/truth-context.js +90 -131
- package/mcp-server/truth-firewall-tools.js +1000 -1611
- package/mcp-server/tsconfig.json +34 -0
- package/mcp-server/vibecheck-tools.js +2 -2
- package/mcp-server/vitest.config.ts +16 -0
- package/package.json +3 -4
- package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +0 -474
- package/bin/runners/lib/agent-firewall/change-packet/builder.js +0 -488
- package/bin/runners/lib/agent-firewall/change-packet/schema.json +0 -228
- package/bin/runners/lib/agent-firewall/change-packet/store.js +0 -200
- package/bin/runners/lib/agent-firewall/claims/claim-types.js +0 -21
- package/bin/runners/lib/agent-firewall/claims/extractor.js +0 -303
- package/bin/runners/lib/agent-firewall/claims/patterns.js +0 -24
- package/bin/runners/lib/agent-firewall/critic/index.js +0 -151
- package/bin/runners/lib/agent-firewall/critic/judge.js +0 -432
- package/bin/runners/lib/agent-firewall/critic/prompts.js +0 -305
- package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +0 -88
- package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +0 -75
- package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +0 -127
- package/bin/runners/lib/agent-firewall/evidence/resolver.js +0 -102
- package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +0 -213
- package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +0 -145
- package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +0 -19
- package/bin/runners/lib/agent-firewall/fs-hook/installer.js +0 -87
- package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +0 -184
- package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +0 -163
- package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +0 -107
- package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +0 -68
- package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +0 -66
- package/bin/runners/lib/agent-firewall/interceptor/base.js +0 -304
- package/bin/runners/lib/agent-firewall/interceptor/cursor.js +0 -35
- package/bin/runners/lib/agent-firewall/interceptor/vscode.js +0 -35
- package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +0 -34
- package/bin/runners/lib/agent-firewall/lawbook/distributor.js +0 -465
- package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +0 -604
- package/bin/runners/lib/agent-firewall/lawbook/index.js +0 -304
- package/bin/runners/lib/agent-firewall/lawbook/registry.js +0 -514
- package/bin/runners/lib/agent-firewall/lawbook/schema.js +0 -420
- package/bin/runners/lib/agent-firewall/learning/learning-engine.js +0 -849
- package/bin/runners/lib/agent-firewall/logger.js +0 -141
- package/bin/runners/lib/agent-firewall/policy/default-policy.json +0 -90
- package/bin/runners/lib/agent-firewall/policy/engine.js +0 -103
- package/bin/runners/lib/agent-firewall/policy/loader.js +0 -451
- package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +0 -50
- package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +0 -50
- package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +0 -86
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +0 -162
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +0 -189
- package/bin/runners/lib/agent-firewall/policy/rules/scope.js +0 -93
- package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +0 -57
- package/bin/runners/lib/agent-firewall/policy/schema.json +0 -183
- package/bin/runners/lib/agent-firewall/policy/verdict.js +0 -54
- package/bin/runners/lib/agent-firewall/proposal/extractor.js +0 -394
- package/bin/runners/lib/agent-firewall/proposal/index.js +0 -212
- package/bin/runners/lib/agent-firewall/proposal/schema.js +0 -251
- package/bin/runners/lib/agent-firewall/proposal/validator.js +0 -386
- package/bin/runners/lib/agent-firewall/reality/index.js +0 -332
- package/bin/runners/lib/agent-firewall/reality/state.js +0 -625
- package/bin/runners/lib/agent-firewall/reality/watcher.js +0 -322
- package/bin/runners/lib/agent-firewall/risk/index.js +0 -173
- package/bin/runners/lib/agent-firewall/risk/scorer.js +0 -328
- package/bin/runners/lib/agent-firewall/risk/thresholds.js +0 -321
- package/bin/runners/lib/agent-firewall/risk/vectors.js +0 -421
- package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +0 -472
- package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +0 -346
- package/bin/runners/lib/agent-firewall/simulator/index.js +0 -181
- package/bin/runners/lib/agent-firewall/simulator/route-validator.js +0 -380
- package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +0 -661
- package/bin/runners/lib/agent-firewall/time-machine/index.js +0 -267
- package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +0 -436
- package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +0 -490
- package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +0 -530
- package/bin/runners/lib/agent-firewall/truthpack/index.js +0 -67
- package/bin/runners/lib/agent-firewall/truthpack/loader.js +0 -137
- package/bin/runners/lib/agent-firewall/unblock/planner.js +0 -337
- package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +0 -118
- package/bin/runners/lib/api-client.js +0 -269
- 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/authority-badge.js +0 -425
- 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/accessibility-engine.js +0 -390
- package/bin/runners/lib/engines/api-consistency-engine.js +0 -467
- package/bin/runners/lib/engines/ast-cache.js +0 -99
- 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/code-quality-engine.js +0 -255
- package/bin/runners/lib/engines/confidence-scoring.js +0 -276
- package/bin/runners/lib/engines/console-logs-engine.js +0 -115
- package/bin/runners/lib/engines/context-detection.js +0 -264
- package/bin/runners/lib/engines/cross-file-analysis-engine.js +0 -533
- package/bin/runners/lib/engines/database-patterns-engine.js +0 -429
- package/bin/runners/lib/engines/dead-code-engine.js +0 -198
- package/bin/runners/lib/engines/deprecated-api-engine.js +0 -226
- package/bin/runners/lib/engines/duplicate-code-engine.js +0 -354
- package/bin/runners/lib/engines/empty-catch-engine.js +0 -260
- 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/file-filter.js +0 -131
- 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/hardcoded-secrets-engine.js +0 -251
- package/bin/runners/lib/engines/import-order-engine.js +0 -429
- package/bin/runners/lib/engines/mock-data-engine.js +0 -315
- 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/parallel-processor.js +0 -71
- package/bin/runners/lib/engines/performance-issues-engine.js +0 -405
- package/bin/runners/lib/engines/react-patterns-engine.js +0 -457
- package/bin/runners/lib/engines/security-vulnerabilities-engine.js +0 -571
- package/bin/runners/lib/engines/todo-fixme-engine.js +0 -115
- package/bin/runners/lib/engines/type-aware-engine.js +0 -376
- package/bin/runners/lib/engines/unsafe-regex-engine.js +0 -225
- package/bin/runners/lib/engines/vibecheck-engines/README.md +0 -53
- package/bin/runners/lib/engines/vibecheck-engines/index.js +0 -124
- package/bin/runners/lib/engines/vibecheck-engines/lib/ai-hallucination-engine.js +0 -806
- package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +0 -439
- 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/package.json +0 -13
- 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/exit-codes.js +0 -275
- package/bin/runners/lib/fingerprint.js +0 -377
- 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/help-formatter.js +0 -413
- package/bin/runners/lib/intelligence/cross-repo-intelligence.js +0 -817
- package/bin/runners/lib/logger.js +0 -38
- 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/ship-output-enterprise.js +0 -239
- package/bin/runners/lib/unified-cli-output.js +0 -777
- 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/runAgent.d.ts +0 -5
- package/bin/runners/runAgent.js +0 -164
- package/bin/runners/runApprove.js +0 -1233
- package/bin/runners/runAuthority.js +0 -528
- package/bin/runners/runClassify.js +0 -862
- package/bin/runners/runConductor.js +0 -772
- package/bin/runners/runContainer.js +0 -366
- package/bin/runners/runContext.d.ts +0 -4
- package/bin/runners/runEasy.js +0 -410
- package/bin/runners/runFirewall.d.ts +0 -5
- package/bin/runners/runFirewall.js +0 -137
- package/bin/runners/runFirewallHook.d.ts +0 -5
- package/bin/runners/runFirewallHook.js +0 -59
- package/bin/runners/runIaC.js +0 -372
- package/bin/runners/runPolish.d.ts +0 -4
- package/bin/runners/runProof.zip +0 -0
- package/bin/runners/runTruth.d.ts +0 -5
- package/bin/runners/runTruth.js +0 -104
- package/bin/runners/runVibe.js +0 -791
- package/mcp-server/HARDENING_SUMMARY.md +0 -299
- package/mcp-server/agent-firewall-interceptor.js +0 -500
- package/mcp-server/authority-tools.js +0 -569
- package/mcp-server/conductor/conflict-resolver.js +0 -588
- package/mcp-server/conductor/execution-planner.js +0 -544
- package/mcp-server/conductor/index.js +0 -377
- package/mcp-server/conductor/lock-manager.js +0 -615
- package/mcp-server/conductor/request-queue.js +0 -550
- package/mcp-server/conductor/session-manager.js +0 -500
- package/mcp-server/conductor/tools.js +0 -510
- package/mcp-server/lib/api-client.cjs +0 -13
- package/mcp-server/lib/logger.cjs +0 -30
- package/mcp-server/logger.js +0 -173
- package/mcp-server/tools-v3.js +0 -1039
- package/mcp-server/tools.js +0 -495
- package/mcp-server/vibecheck-mcp-server-3.2.0.tgz +0 -0
package/bin/vibecheck.js
CHANGED
|
@@ -795,7 +795,7 @@ ${c.bold}Installation:${c.reset}
|
|
|
795
795
|
}
|
|
796
796
|
|
|
797
797
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
798
|
-
// HELP SYSTEM
|
|
798
|
+
// HELP SYSTEM
|
|
799
799
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
800
800
|
function printBanner() {
|
|
801
801
|
const VERSION = getVersion();
|
|
@@ -807,69 +807,6 @@ ${c.dim}${sym.boxBottomLeft}${sym.boxHorizontal.repeat(60)}${sym.boxBottomRight}
|
|
|
807
807
|
`);
|
|
808
808
|
}
|
|
809
809
|
|
|
810
|
-
/**
|
|
811
|
-
* Print command-specific help with rich examples
|
|
812
|
-
*/
|
|
813
|
-
function printCommandHelp(cmd) {
|
|
814
|
-
const registry = getRegistry();
|
|
815
|
-
const def = registry.COMMANDS[cmd];
|
|
816
|
-
if (!def) return false;
|
|
817
|
-
|
|
818
|
-
// Build reverse alias map
|
|
819
|
-
const reverseAliases = {};
|
|
820
|
-
for (const [alias, target] of Object.entries(registry.ALIAS_MAP)) {
|
|
821
|
-
if (!reverseAliases[target]) reverseAliases[target] = [];
|
|
822
|
-
reverseAliases[target].push(alias);
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
const aliases = reverseAliases[cmd] || [];
|
|
826
|
-
|
|
827
|
-
// Tier badge (2-tier: FREE / PRO)
|
|
828
|
-
const tierBadge = def.tier === "free" ? `${c.green}[FREE]${c.reset}` :
|
|
829
|
-
def.tier === "pro" ? `${c.magenta}[PRO]${c.reset}` : "";
|
|
830
|
-
|
|
831
|
-
console.log(`
|
|
832
|
-
${c.bold}${sym.arrowRight} vibecheck ${cmd}${c.reset} ${tierBadge}
|
|
833
|
-
${aliases.length > 0 ? `${c.dim}Aliases: ${aliases.join(", ")}${c.reset}` : ""}
|
|
834
|
-
|
|
835
|
-
${def.longDescription || def.description}
|
|
836
|
-
`);
|
|
837
|
-
|
|
838
|
-
// Examples
|
|
839
|
-
if (def.examples && def.examples.length > 0) {
|
|
840
|
-
console.log(` ${c.bold}${sym.star} EXAMPLES${c.reset}\n`);
|
|
841
|
-
for (const ex of def.examples) {
|
|
842
|
-
const exTier = ex.tier === "pro" ? `${c.magenta}[PRO]${c.reset} ` : "";
|
|
843
|
-
console.log(` ${c.dim}#${c.reset} ${ex.description} ${exTier}`);
|
|
844
|
-
console.log(` ${c.cyan}${ex.command}${c.reset}`);
|
|
845
|
-
console.log();
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
|
|
849
|
-
// Related commands
|
|
850
|
-
if (def.related && def.related.length > 0) {
|
|
851
|
-
console.log(` ${c.bold}${sym.arrowRight} RELATED COMMANDS${c.reset}\n`);
|
|
852
|
-
for (const relCmd of def.related) {
|
|
853
|
-
const relDef = registry.COMMANDS[relCmd];
|
|
854
|
-
if (relDef) {
|
|
855
|
-
const relTier = relDef.tier === "pro" ? `${c.magenta}[PRO]${c.reset} ` : "";
|
|
856
|
-
console.log(` ${c.cyan}vibecheck ${relCmd}${c.reset} ${relTier}${c.dim}${relDef.description}${c.reset}`);
|
|
857
|
-
}
|
|
858
|
-
}
|
|
859
|
-
console.log();
|
|
860
|
-
}
|
|
861
|
-
|
|
862
|
-
// Documentation link
|
|
863
|
-
if (def.docsUrl) {
|
|
864
|
-
console.log(` ${c.dim}${sym.boxHorizontal.repeat(56)}${c.reset}`);
|
|
865
|
-
console.log(` ${c.dim}Documentation: ${c.underline}${def.docsUrl}${c.reset}`);
|
|
866
|
-
}
|
|
867
|
-
|
|
868
|
-
console.log(` ${c.dim}Run 'vibecheck --help' for all commands.${c.reset}\n`);
|
|
869
|
-
|
|
870
|
-
return true;
|
|
871
|
-
}
|
|
872
|
-
|
|
873
810
|
function printHelp(showBanner = true) {
|
|
874
811
|
if (showBanner) printBanner();
|
|
875
812
|
|
|
@@ -883,74 +820,19 @@ function printHelp(showBanner = true) {
|
|
|
883
820
|
reverseAliases[target].push(alias);
|
|
884
821
|
}
|
|
885
822
|
|
|
886
|
-
//
|
|
887
|
-
console.log(`
|
|
888
|
-
${c.yellow}${sym.star} NEW TO VIBECHECK?${c.reset}
|
|
889
|
-
|
|
890
|
-
Run ${c.cyan}${c.bold}vibecheck${c.reset} with no arguments to open the ${c.bold}interactive menu${c.reset}.
|
|
891
|
-
Or follow the Quick Start guide below.
|
|
892
|
-
|
|
893
|
-
${c.dim}${sym.boxHorizontal.repeat(68)}${c.reset}
|
|
894
|
-
`);
|
|
895
|
-
|
|
896
|
-
// Quick Start section (most important for beginners)
|
|
897
|
-
console.log(`${c.green}${sym.rocket} QUICK START${c.reset} ${c.dim}(Get running in 60 seconds)${c.reset}
|
|
898
|
-
|
|
899
|
-
${c.bold}${c.white}Step 1:${c.reset} ${c.cyan}vibecheck init${c.reset}
|
|
900
|
-
${c.dim}Set up vibecheck for your project${c.reset}
|
|
901
|
-
|
|
902
|
-
${c.bold}${c.white}Step 2:${c.reset} ${c.cyan}vibecheck scan${c.reset}
|
|
903
|
-
${c.dim}Analyze your codebase for issues${c.reset}
|
|
904
|
-
|
|
905
|
-
${c.bold}${c.white}Step 3:${c.reset} ${c.cyan}vibecheck ship${c.reset} ${c.magenta}[PRO]${c.reset}
|
|
906
|
-
${c.dim}Get final SHIP/WARN/BLOCK verdict${c.reset}
|
|
907
|
-
`);
|
|
908
|
-
|
|
909
|
-
// Pricing tiers (simple 2-tier)
|
|
910
|
-
console.log(`${c.dim}${sym.boxHorizontal.repeat(68)}${c.reset}
|
|
911
|
-
|
|
912
|
-
${c.bold}PRICING${c.reset}
|
|
913
|
-
|
|
914
|
-
${c.green}${c.bold}FREE${c.reset} ${c.dim}$0${c.reset} Scan, Report, Context, Doctor
|
|
915
|
-
${c.magenta}${c.bold}PRO${c.reset} ${c.dim}$69/mo${c.reset} Ship verdicts, Auto-fix, Runtime proof, CI gates
|
|
916
|
-
${c.dim}→ ${c.cyan}https://vibecheckai.dev/pricing${c.reset}
|
|
917
|
-
`);
|
|
918
|
-
|
|
919
|
-
// Most-used commands
|
|
920
|
-
console.log(`${c.dim}${sym.boxHorizontal.repeat(68)}${c.reset}
|
|
921
|
-
|
|
922
|
-
${c.bold}MOST USED COMMANDS${c.reset}
|
|
923
|
-
`);
|
|
924
|
-
|
|
925
|
-
const popularCommands = [
|
|
926
|
-
{ cmd: "scan", badge: "FREE", desc: "Analyze codebase for issues (routes, env, auth, mocks)" },
|
|
927
|
-
{ cmd: "ship", badge: "PRO", desc: "Get SHIP/WARN/BLOCK verdict with evidence" },
|
|
928
|
-
{ cmd: "fix", badge: "PRO", desc: "AI-powered auto-fix for detected issues" },
|
|
929
|
-
{ cmd: "doctor", badge: "FREE", desc: "Check environment and config health" },
|
|
930
|
-
{ cmd: "report", badge: "FREE", desc: "Generate HTML/JSON/SARIF reports" },
|
|
931
|
-
{ cmd: "prove", badge: "PRO", desc: "Runtime verification with Playwright" },
|
|
932
|
-
];
|
|
933
|
-
|
|
934
|
-
for (const { cmd, badge, desc } of popularCommands) {
|
|
935
|
-
const badgeStr = badge === "FREE"
|
|
936
|
-
? `${c.green}[FREE]${c.reset}`
|
|
937
|
-
: `${c.magenta}[PRO]${c.reset}`;
|
|
938
|
-
console.log(` ${c.cyan}${cmd.padEnd(10)}${c.reset} ${badgeStr} ${c.dim}${desc}${c.reset}`);
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
// Categories with all commands
|
|
823
|
+
// Categories ordered as specified
|
|
942
824
|
const categoryOrder = ["setup", "analysis", "proof", "quality", "truth", "output", "ci", "automation", "account", "extras"];
|
|
943
825
|
const categories = {
|
|
944
|
-
setup: { name: "SETUP
|
|
826
|
+
setup: { name: "SETUP", color: c.yellow, icon: sym.gear },
|
|
945
827
|
analysis: { name: "ANALYSIS", color: c.cyan, icon: sym.chart },
|
|
946
|
-
proof: { name: "PROOF
|
|
828
|
+
proof: { name: "PROOF LOOP", color: c.green, icon: sym.shield },
|
|
947
829
|
quality: { name: "QUALITY", color: c.brightGreen, icon: sym.star },
|
|
948
|
-
truth: { name: "AI
|
|
949
|
-
output: { name: "OUTPUT
|
|
950
|
-
ci: { name: "CI
|
|
830
|
+
truth: { name: "AI TRUTH", color: c.magenta, icon: sym.lightning },
|
|
831
|
+
output: { name: "OUTPUT", color: c.blue, icon: sym.file },
|
|
832
|
+
ci: { name: "CI & COLLABORATION", color: c.cyan, icon: sym.rocket },
|
|
951
833
|
automation: { name: "AUTOMATION", color: c.brightBlue, icon: sym.fire },
|
|
952
|
-
account: { name: "ACCOUNT", color: c.
|
|
953
|
-
extras: { name: "EXTRAS", color: c.
|
|
834
|
+
account: { name: "ACCOUNT", color: c.dim, icon: sym.key },
|
|
835
|
+
extras: { name: "EXTRAS", color: c.dim, icon: sym.starEmpty },
|
|
954
836
|
};
|
|
955
837
|
|
|
956
838
|
// Group commands
|
|
@@ -961,73 +843,67 @@ ${c.bold}MOST USED COMMANDS${c.reset}
|
|
|
961
843
|
grouped[cat].push({ cmd, ...def });
|
|
962
844
|
}
|
|
963
845
|
|
|
964
|
-
console.log(`
|
|
965
|
-
${c.dim}${sym.boxHorizontal.repeat(68)}${c.reset}
|
|
966
|
-
|
|
967
|
-
${c.bold}ALL COMMANDS${c.reset}
|
|
968
|
-
`);
|
|
969
|
-
|
|
970
846
|
// Print in order
|
|
971
847
|
for (const catKey of categoryOrder) {
|
|
972
848
|
const commands = grouped[catKey];
|
|
973
849
|
if (!commands || commands.length === 0) continue;
|
|
974
850
|
|
|
975
851
|
const cat = categories[catKey];
|
|
976
|
-
console.log(
|
|
852
|
+
console.log(`\n${cat.color}${cat.icon} ${cat.name}${c.reset}\n`);
|
|
977
853
|
|
|
978
|
-
for (const { cmd, description, tier } of commands) {
|
|
979
|
-
// Tier badge
|
|
854
|
+
for (const { cmd, description, tier, caps } of commands) {
|
|
855
|
+
// Tier badge
|
|
980
856
|
let tierBadge = "";
|
|
981
|
-
if (tier === "free") tierBadge = `${c.green}[FREE]${c.reset}`;
|
|
982
|
-
else if (tier === "
|
|
857
|
+
if (tier === "free") tierBadge = `${c.green}[FREE]${c.reset} `;
|
|
858
|
+
else if (tier === "starter") tierBadge = `${c.cyan}[STARTER]${c.reset} `;
|
|
859
|
+
else if (tier === "pro") tierBadge = `${c.magenta}[PRO]${c.reset} `;
|
|
983
860
|
|
|
984
|
-
// Aliases
|
|
861
|
+
// Aliases (from reverseAliases map built earlier)
|
|
985
862
|
const aliasList = reverseAliases[cmd] || [];
|
|
986
863
|
const aliasStr = aliasList.length > 0
|
|
987
|
-
? `${c.dim}(${aliasList.slice(0,
|
|
864
|
+
? `${c.dim}(${aliasList.slice(0, 3).join(", ")})${c.reset} `
|
|
988
865
|
: "";
|
|
989
866
|
|
|
990
|
-
|
|
867
|
+
// Caps info
|
|
868
|
+
const capsStr = caps ? `${c.dim}(${caps})${c.reset}` : "";
|
|
869
|
+
|
|
870
|
+
console.log(` ${c.cyan}${cmd.padEnd(12)}${c.reset} ${aliasStr}${tierBadge}${description} ${capsStr}`);
|
|
991
871
|
}
|
|
992
|
-
console.log();
|
|
993
872
|
}
|
|
994
873
|
|
|
995
|
-
|
|
996
|
-
|
|
874
|
+
console.log(`
|
|
875
|
+
${c.dim}${sym.boxHorizontal.repeat(64)}${c.reset}
|
|
997
876
|
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
${c.
|
|
1001
|
-
${c.cyan}
|
|
1002
|
-
${c.
|
|
1003
|
-
${c.cyan}--path, -p <dir>${c.reset} Run in specified directory
|
|
1004
|
-
`);
|
|
877
|
+
${c.green}TIERS${c.reset}
|
|
878
|
+
|
|
879
|
+
${c.green}FREE${c.reset} $0 init --local, scan, ship (static), report (HTML/MD), doctor, polish
|
|
880
|
+
${c.cyan}STARTER${c.reset} $39/mo + init --connect, scan --autofix, report (SARIF/CSV), mcp, PR comments
|
|
881
|
+
${c.magenta}PRO${c.reset} $99/mo + prove, fix --apply, checkpoint (hallucination), reality (advanced)
|
|
1005
882
|
|
|
1006
|
-
|
|
1007
|
-
console.log(`${c.bold}COMMON WORKFLOWS${c.reset}
|
|
883
|
+
${c.green}QUICK START - The 5-Step Journey${c.reset}
|
|
1008
884
|
|
|
1009
|
-
${c.
|
|
1010
|
-
${c.cyan}vibecheck
|
|
885
|
+
1. ${c.bold}Setup${c.reset} ${c.cyan}vibecheck init --local${c.reset}
|
|
886
|
+
2. ${c.bold}Scan${c.reset} ${c.cyan}vibecheck scan${c.reset}
|
|
887
|
+
3. ${c.bold}Fix${c.reset} ${c.cyan}vibecheck scan --autofix${c.reset} ${c.cyan}[STARTER]${c.reset}
|
|
888
|
+
4. ${c.bold}Prove${c.reset} ${c.cyan}vibecheck prove${c.reset} ${c.magenta}[PRO]${c.reset}
|
|
889
|
+
5. ${c.bold}Ship${c.reset} ${c.cyan}vibecheck ship${c.reset}
|
|
1011
890
|
|
|
1012
|
-
|
|
1013
|
-
${c.cyan}vibecheck scan${c.reset}
|
|
891
|
+
${c.bold}GLOBAL OPTIONS${c.reset}
|
|
1014
892
|
|
|
1015
|
-
${c.
|
|
1016
|
-
${c.cyan}
|
|
893
|
+
${c.cyan}--offline, --local${c.reset} Run in offline mode (no API, unlimited local scans)
|
|
894
|
+
${c.cyan}--json${c.reset} Output as JSON
|
|
895
|
+
${c.cyan}--quiet, -q${c.reset} Suppress output
|
|
896
|
+
${c.cyan}--verbose${c.reset} Show detailed output
|
|
897
|
+
${c.cyan}--path, -p <dir>${c.reset} Run in specified directory
|
|
1017
898
|
|
|
1018
|
-
|
|
1019
|
-
${c.cyan}vibecheck fix --apply${c.reset}
|
|
899
|
+
${c.bold}SHELL COMPLETIONS${c.reset}
|
|
1020
900
|
|
|
1021
|
-
${c.dim}#
|
|
1022
|
-
${c.cyan}vibecheck
|
|
1023
|
-
|
|
901
|
+
${c.cyan}vibecheck completion bash${c.reset} ${c.dim}# Add to ~/.bashrc${c.reset}
|
|
902
|
+
${c.cyan}vibecheck completion zsh${c.reset} ${c.dim}# Add to ~/.zshrc${c.reset}
|
|
903
|
+
${c.cyan}vibecheck completion fish${c.reset} ${c.dim}# Save to completions dir${c.reset}
|
|
1024
904
|
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
${c.dim}Run ${c.cyan}vibecheck <command> --help${c.reset}${c.dim} for detailed command help.${c.reset}
|
|
1028
|
-
${c.dim}Interactive menu: ${c.cyan}vibecheck menu${c.reset}${c.dim} or just ${c.cyan}vibecheck${c.reset}
|
|
1029
|
-
${c.dim}Documentation: ${c.underline}https://docs.vibecheckai.dev${c.reset}
|
|
1030
|
-
${c.dim}Upgrade to Pro: ${c.underline}https://vibecheckai.dev/pricing${c.reset}
|
|
905
|
+
${c.dim}Run 'vibecheck <command> --help' for command-specific help.${c.reset}
|
|
906
|
+
${c.dim}Pricing: https://vibecheckai.dev/pricing${c.reset}
|
|
1031
907
|
`);
|
|
1032
908
|
}
|
|
1033
909
|
|
|
@@ -1170,57 +1046,10 @@ async function main() {
|
|
|
1170
1046
|
config.noBanner = true;
|
|
1171
1047
|
}
|
|
1172
1048
|
|
|
1173
|
-
//
|
|
1174
|
-
// EASY MODE - Super simple commands for non-technical users
|
|
1175
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
1176
|
-
const easyModeCommands = ['test', 'protect', 'status'];
|
|
1177
|
-
const firstArg = cleanArgs[0]?.toLowerCase();
|
|
1178
|
-
|
|
1179
|
-
// Check if this is an easy mode command or URL
|
|
1180
|
-
const isEasyCommand = easyModeCommands.includes(firstArg);
|
|
1181
|
-
const isDirectUrl = firstArg && (firstArg.startsWith('http') || firstArg.includes('localhost'));
|
|
1182
|
-
|
|
1183
|
-
if (isEasyCommand || isDirectUrl) {
|
|
1184
|
-
try {
|
|
1185
|
-
const { main: runEasy } = require("./runners/runEasy");
|
|
1186
|
-
await runEasy();
|
|
1187
|
-
return;
|
|
1188
|
-
} catch (err) {
|
|
1189
|
-
if (config.debug) console.error(`Easy mode error: ${err.message}`);
|
|
1190
|
-
// Fall through to normal handling
|
|
1191
|
-
}
|
|
1192
|
-
}
|
|
1193
|
-
|
|
1194
|
-
// Handle no command - show EASY wizard for beginners (much friendlier)
|
|
1049
|
+
// Handle no command
|
|
1195
1050
|
if (!cleanArgs[0]) {
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
try {
|
|
1199
|
-
// Try easy wizard first (friendlier for new users)
|
|
1200
|
-
const { Wizard } = require("./runners/lib/easy/interactive-wizard");
|
|
1201
|
-
const wizard = new Wizard();
|
|
1202
|
-
await wizard.start();
|
|
1203
|
-
return;
|
|
1204
|
-
} catch {
|
|
1205
|
-
// Fall back to original interactive menu
|
|
1206
|
-
try {
|
|
1207
|
-
const { runInteractiveMenu } = require("./runners/lib/cli-interactive-menu");
|
|
1208
|
-
runInteractiveMenu().then(() => process.exit(0)).catch(() => {
|
|
1209
|
-
printHelp(!config.noBanner);
|
|
1210
|
-
process.exit(0);
|
|
1211
|
-
});
|
|
1212
|
-
return; // Let async menu run
|
|
1213
|
-
} catch {
|
|
1214
|
-
// Fall back to help if menu module not available
|
|
1215
|
-
printHelp(!config.noBanner);
|
|
1216
|
-
process.exit(0);
|
|
1217
|
-
}
|
|
1218
|
-
}
|
|
1219
|
-
} else {
|
|
1220
|
-
// Non-TTY or quiet mode: show help
|
|
1221
|
-
printHelp(!config.noBanner);
|
|
1222
|
-
process.exit(0);
|
|
1223
|
-
}
|
|
1051
|
+
printHelp(!config.noBanner);
|
|
1052
|
+
process.exit(0);
|
|
1224
1053
|
}
|
|
1225
1054
|
|
|
1226
1055
|
// Handle global help
|
|
@@ -1228,28 +1057,6 @@ async function main() {
|
|
|
1228
1057
|
printHelp(!config.noBanner);
|
|
1229
1058
|
process.exit(0);
|
|
1230
1059
|
}
|
|
1231
|
-
|
|
1232
|
-
// Handle explicit menu command
|
|
1233
|
-
if (cleanArgs[0] === "menu") {
|
|
1234
|
-
if (process.stdout.isTTY) {
|
|
1235
|
-
try {
|
|
1236
|
-
const { runInteractiveMenu } = require("./runners/lib/cli-interactive-menu");
|
|
1237
|
-
runInteractiveMenu().then(() => process.exit(0)).catch((err) => {
|
|
1238
|
-
console.error(`Menu error: ${err.message}`);
|
|
1239
|
-
process.exit(1);
|
|
1240
|
-
});
|
|
1241
|
-
return;
|
|
1242
|
-
} catch (err) {
|
|
1243
|
-
console.error(`${c.red}Error:${c.reset} Interactive menu not available: ${err.message}`);
|
|
1244
|
-
console.log(`${c.dim}Use 'vibecheck --help' to see available commands.${c.reset}`);
|
|
1245
|
-
process.exit(1);
|
|
1246
|
-
}
|
|
1247
|
-
} else {
|
|
1248
|
-
console.error(`${c.yellow}Warning:${c.reset} Interactive menu requires a terminal.`);
|
|
1249
|
-
console.log(`${c.dim}Use 'vibecheck --help' to see available commands.${c.reset}`);
|
|
1250
|
-
process.exit(1);
|
|
1251
|
-
}
|
|
1252
|
-
}
|
|
1253
1060
|
|
|
1254
1061
|
// Handle completion command (special - doesn't need registry loaded normally)
|
|
1255
1062
|
if (cleanArgs[0] === "completion") {
|
|
@@ -1267,14 +1074,6 @@ async function main() {
|
|
|
1267
1074
|
}
|
|
1268
1075
|
let cmdArgs = cleanArgs.slice(1);
|
|
1269
1076
|
|
|
1270
|
-
// Handle command-specific help (vibecheck <cmd> --help)
|
|
1271
|
-
if (globalFlags.help && cmd && COMMANDS[cmd]) {
|
|
1272
|
-
// Try our rich help first, then fall back to runner's --help
|
|
1273
|
-
if (printCommandHelp(cmd)) {
|
|
1274
|
-
process.exit(0);
|
|
1275
|
-
}
|
|
1276
|
-
}
|
|
1277
|
-
|
|
1278
1077
|
// Pass --help to runner if specified with command
|
|
1279
1078
|
if (globalFlags.help) cmdArgs = ["--help", ...cmdArgs];
|
|
1280
1079
|
|
|
@@ -1324,60 +1123,35 @@ async function main() {
|
|
|
1324
1123
|
process.env.VIBECHECK_LOCAL === '1';
|
|
1325
1124
|
|
|
1326
1125
|
// Auth check (unless skipAuth or offline mode)
|
|
1327
|
-
|
|
1328
|
-
const authExemptCommands = ['login', 'logout', 'whoami', 'help', '--help', '-h', 'version', '--version'];
|
|
1329
|
-
const needsAuth = !authExemptCommands.includes(cmd) && !cmdDef.skipAuth && !isOffline;
|
|
1330
|
-
|
|
1331
|
-
if (needsAuth) {
|
|
1126
|
+
if (!cmdDef.skipAuth && !isOffline) {
|
|
1332
1127
|
const auth = getAuthModule();
|
|
1333
1128
|
const { key } = auth.getApiKey();
|
|
1334
1129
|
authInfo.key = key;
|
|
1335
1130
|
|
|
1336
|
-
// If no API key, prompt for login
|
|
1337
|
-
if (!key) {
|
|
1338
|
-
console.log(`\n ${c.red}❌ Authentication Required${c.reset}`);
|
|
1339
|
-
console.log(` Please log in to use vibecheck.\n`);
|
|
1340
|
-
console.log(` ${c.cyan}Options:${c.reset}`);
|
|
1341
|
-
console.log(` 1. Press ${c.yellow}Enter${c.reset} to open browser and sign up`);
|
|
1342
|
-
console.log(` 2. Visit ${c.underline}https://vibecheckai.dev${c.reset} directly`);
|
|
1343
|
-
console.log(` 3. Run ${c.cyan}vibecheck login${c.reset} after getting your API key\n`);
|
|
1344
|
-
|
|
1345
|
-
// Wait for Enter key
|
|
1346
|
-
const readline = getReadline();
|
|
1347
|
-
readline.createInterface({
|
|
1348
|
-
input: process.stdin,
|
|
1349
|
-
output: process.stdout
|
|
1350
|
-
}).question('', async () => {
|
|
1351
|
-
try {
|
|
1352
|
-
const https = getHttps();
|
|
1353
|
-
const url = 'https://vibecheckai.dev';
|
|
1354
|
-
console.log(`\n Opening ${c.underline}${url}${c.reset} in your browser...\n`);
|
|
1355
|
-
|
|
1356
|
-
// Try to open browser
|
|
1357
|
-
const start = process.platform === 'darwin' ? 'open' :
|
|
1358
|
-
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
1359
|
-
require('child_process').exec(`${start} ${url}`);
|
|
1360
|
-
} catch (e) {
|
|
1361
|
-
console.log(` Could not open browser. Please visit: ${c.underline}https://vibecheckai.dev${c.reset}`);
|
|
1362
|
-
}
|
|
1363
|
-
process.exit(0);
|
|
1364
|
-
});
|
|
1365
|
-
|
|
1366
|
-
// Keep process alive
|
|
1367
|
-
return new Promise(() => {});
|
|
1368
|
-
}
|
|
1369
|
-
|
|
1370
1131
|
const access = await checkCommandAccess(cmd, cmdArgs, authInfo);
|
|
1371
1132
|
|
|
1372
1133
|
if (!access.allowed) {
|
|
1373
1134
|
console.log(access.reason);
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1135
|
+
process.exit(access.exitCode || 3);
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
// Downgrade notice
|
|
1139
|
+
if (access.downgrade && !config.quiet) {
|
|
1140
|
+
const upsell = getUpsell();
|
|
1141
|
+
console.log(upsell.formatDowngrade(cmd, {
|
|
1142
|
+
currentTier: access.tier,
|
|
1143
|
+
effectiveMode: access.downgrade,
|
|
1144
|
+
caps: access.caps,
|
|
1145
|
+
}));
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
// Tier badge
|
|
1149
|
+
if (!config.quiet && !config.noBanner) {
|
|
1150
|
+
if (access.tier === "pro") {
|
|
1151
|
+
console.log(`${c.magenta}${sym.arrowRight} PRO${c.reset} ${c.dim}feature${c.reset}`);
|
|
1152
|
+
} else if (access.tier === "complete") {
|
|
1153
|
+
console.log(`${c.yellow}${sym.arrowRight} COMPLETE${c.reset} ${c.dim}feature${c.reset}`);
|
|
1378
1154
|
}
|
|
1379
|
-
|
|
1380
|
-
return 1;
|
|
1381
1155
|
}
|
|
1382
1156
|
|
|
1383
1157
|
authInfo.access = access;
|