@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
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vibecheck labs - Experimental Features
|
|
3
|
+
*
|
|
4
|
+
* Access to experimental, internal, and beta features.
|
|
5
|
+
* These may change or be removed without notice.
|
|
6
|
+
*
|
|
7
|
+
* @module runners/runLabs
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
"use strict";
|
|
11
|
+
|
|
12
|
+
const { c, sym, box, printHeader, table } = require("./lib/ui");
|
|
13
|
+
|
|
14
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
15
|
+
// LABS FEATURE REGISTRY
|
|
16
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
17
|
+
const LABS_FEATURES = {
|
|
18
|
+
// Experimental - Working but API may change
|
|
19
|
+
"ai-test": {
|
|
20
|
+
status: "experimental",
|
|
21
|
+
description: "AI agent for autonomous app testing",
|
|
22
|
+
docs: "https://docs.vibecheckai.dev/labs/ai-test",
|
|
23
|
+
runner: () => require("./runAIAgent").runAIAgent,
|
|
24
|
+
},
|
|
25
|
+
"launch": {
|
|
26
|
+
status: "experimental",
|
|
27
|
+
description: "Pre-launch checklist wizard",
|
|
28
|
+
docs: "https://docs.vibecheckai.dev/labs/launch",
|
|
29
|
+
runner: () => require("./runLaunch").runLaunch,
|
|
30
|
+
},
|
|
31
|
+
"dashboard": {
|
|
32
|
+
status: "stub",
|
|
33
|
+
description: "Real-time monitoring dashboard (coming soon)",
|
|
34
|
+
eta: "Q2 2025",
|
|
35
|
+
},
|
|
36
|
+
"permissions": {
|
|
37
|
+
status: "experimental",
|
|
38
|
+
description: "AuthZ matrix & IDOR vulnerability prover",
|
|
39
|
+
runner: () => require("./runPermissions").runPermissions,
|
|
40
|
+
},
|
|
41
|
+
"replay": {
|
|
42
|
+
status: "experimental",
|
|
43
|
+
description: "Record and replay user sessions for testing",
|
|
44
|
+
runner: () => require("./runReplay").runReplay,
|
|
45
|
+
},
|
|
46
|
+
"graph": {
|
|
47
|
+
status: "experimental",
|
|
48
|
+
description: "Reality proof graph visualization",
|
|
49
|
+
runner: () => require("./runGraph").runGraph,
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
// Beta - Feature complete, gathering feedback
|
|
53
|
+
"ctx-diff": {
|
|
54
|
+
status: "beta",
|
|
55
|
+
description: "Diff truthpack changes across commits",
|
|
56
|
+
runner: () => require("./runCtxDiff").main,
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
// Stubs - Planned but not implemented
|
|
60
|
+
"autopilot": {
|
|
61
|
+
status: "stub",
|
|
62
|
+
description: "Continuous protection mode (auto-fix on commit)",
|
|
63
|
+
eta: "Q2 2025",
|
|
64
|
+
},
|
|
65
|
+
"certify": {
|
|
66
|
+
status: "stub",
|
|
67
|
+
description: "Generate compliance certification badges",
|
|
68
|
+
eta: "Q2 2025",
|
|
69
|
+
},
|
|
70
|
+
"audit": {
|
|
71
|
+
status: "stub",
|
|
72
|
+
description: "Full audit trail for compliance (SOC2, HIPAA)",
|
|
73
|
+
eta: "Q3 2025",
|
|
74
|
+
},
|
|
75
|
+
"natural-language": {
|
|
76
|
+
status: "stub",
|
|
77
|
+
description: "Natural language command parsing",
|
|
78
|
+
eta: "Q2 2025",
|
|
79
|
+
},
|
|
80
|
+
"fix-packs": {
|
|
81
|
+
status: "stub",
|
|
82
|
+
description: "Downloadable fix pack templates",
|
|
83
|
+
eta: "Q2 2025",
|
|
84
|
+
},
|
|
85
|
+
"mdc": {
|
|
86
|
+
status: "stub",
|
|
87
|
+
description: "MDC documentation generator",
|
|
88
|
+
eta: "Q3 2025",
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
// Aliases - Redirect to main commands
|
|
92
|
+
"enhanced-ship": {
|
|
93
|
+
status: "alias",
|
|
94
|
+
target: "ship --strict",
|
|
95
|
+
description: "Enhanced ship mode (use: vibecheck ship --strict)",
|
|
96
|
+
},
|
|
97
|
+
"sniff": {
|
|
98
|
+
status: "alias",
|
|
99
|
+
target: "reality --sniff",
|
|
100
|
+
description: "Reality sniff mode (use: vibecheck reality --sniff)",
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
105
|
+
// STATUS DISPLAY
|
|
106
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
107
|
+
const STATUS_CONFIG = {
|
|
108
|
+
experimental: {
|
|
109
|
+
icon: sym.lightning,
|
|
110
|
+
color: c.yellow,
|
|
111
|
+
label: "EXPERIMENTAL",
|
|
112
|
+
description: "Working but API may change",
|
|
113
|
+
},
|
|
114
|
+
beta: {
|
|
115
|
+
icon: sym.star,
|
|
116
|
+
color: c.cyan,
|
|
117
|
+
label: "BETA",
|
|
118
|
+
description: "Feature complete, gathering feedback",
|
|
119
|
+
},
|
|
120
|
+
stub: {
|
|
121
|
+
icon: sym.pending,
|
|
122
|
+
color: c.dim,
|
|
123
|
+
label: "PLANNED",
|
|
124
|
+
description: "Not yet implemented",
|
|
125
|
+
},
|
|
126
|
+
alias: {
|
|
127
|
+
icon: sym.arrow,
|
|
128
|
+
color: c.dim,
|
|
129
|
+
label: "ALIAS",
|
|
130
|
+
description: "Use the main command instead",
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
function formatStatus(status) {
|
|
135
|
+
const config = STATUS_CONFIG[status];
|
|
136
|
+
if (!config) return status;
|
|
137
|
+
return `${config.color}${config.icon} ${config.label}${c.reset}`;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
141
|
+
// HELP DISPLAY
|
|
142
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
143
|
+
function printHelp() {
|
|
144
|
+
printHeader("LABS", {
|
|
145
|
+
icon: sym.lightning,
|
|
146
|
+
subtitle: "Experimental & Internal Features"
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
console.log(`${c.yellow}${sym.warning} These features are experimental and may change without notice.${c.reset}\n`);
|
|
150
|
+
|
|
151
|
+
// Group by status
|
|
152
|
+
const groups = {
|
|
153
|
+
experimental: [],
|
|
154
|
+
beta: [],
|
|
155
|
+
stub: [],
|
|
156
|
+
alias: [],
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
for (const [name, feature] of Object.entries(LABS_FEATURES)) {
|
|
160
|
+
if (groups[feature.status]) {
|
|
161
|
+
groups[feature.status].push({ name, ...feature });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Experimental
|
|
166
|
+
if (groups.experimental.length > 0) {
|
|
167
|
+
console.log(`${c.yellow}${sym.lightning} EXPERIMENTAL${c.reset} ${c.dim}(working, API may change)${c.reset}\n`);
|
|
168
|
+
|
|
169
|
+
for (const feature of groups.experimental) {
|
|
170
|
+
console.log(` ${c.cyan}vibecheck labs ${feature.name}${c.reset}`);
|
|
171
|
+
console.log(` ${c.dim}${feature.description}${c.reset}`);
|
|
172
|
+
if (feature.docs) {
|
|
173
|
+
console.log(` ${c.dim}Docs: ${feature.docs}${c.reset}`);
|
|
174
|
+
}
|
|
175
|
+
console.log("");
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Beta
|
|
180
|
+
if (groups.beta.length > 0) {
|
|
181
|
+
console.log(`${c.cyan}${sym.star} BETA${c.reset} ${c.dim}(feature complete, gathering feedback)${c.reset}\n`);
|
|
182
|
+
|
|
183
|
+
for (const feature of groups.beta) {
|
|
184
|
+
console.log(` ${c.cyan}vibecheck labs ${feature.name}${c.reset}`);
|
|
185
|
+
console.log(` ${c.dim}${feature.description}${c.reset}`);
|
|
186
|
+
console.log("");
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Stubs
|
|
191
|
+
if (groups.stub.length > 0) {
|
|
192
|
+
console.log(`${c.dim}${sym.pending} PLANNED${c.reset} ${c.dim}(not yet implemented)${c.reset}\n`);
|
|
193
|
+
|
|
194
|
+
const stubData = groups.stub.map(f => [
|
|
195
|
+
`${c.dim}${f.name}${c.reset}`,
|
|
196
|
+
`${c.dim}${f.description}${c.reset}`,
|
|
197
|
+
f.eta ? `${c.dim}ETA: ${f.eta}${c.reset}` : "",
|
|
198
|
+
]);
|
|
199
|
+
|
|
200
|
+
console.log(table(stubData, { indent: 2 }));
|
|
201
|
+
console.log("");
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Aliases
|
|
205
|
+
if (groups.alias.length > 0) {
|
|
206
|
+
console.log(`${c.dim}${sym.arrow} ALIASES${c.reset} ${c.dim}(use the main command instead)${c.reset}\n`);
|
|
207
|
+
|
|
208
|
+
for (const feature of groups.alias) {
|
|
209
|
+
console.log(` ${c.dim}labs ${feature.name}${c.reset} ${sym.arrow} ${c.cyan}vibecheck ${feature.target}${c.reset}`);
|
|
210
|
+
}
|
|
211
|
+
console.log("");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Usage
|
|
215
|
+
console.log(`${c.dim}${"─".repeat(60)}${c.reset}`);
|
|
216
|
+
console.log(`${c.bold}Usage${c.reset}\n`);
|
|
217
|
+
console.log(` vibecheck labs <feature> [options]\n`);
|
|
218
|
+
console.log(`${c.dim}Example:${c.reset}`);
|
|
219
|
+
console.log(` vibecheck labs ai-test --url http://localhost:3000`);
|
|
220
|
+
console.log("");
|
|
221
|
+
|
|
222
|
+
// Feedback
|
|
223
|
+
console.log(`${c.dim}${"─".repeat(60)}${c.reset}`);
|
|
224
|
+
console.log(`${c.bold}Feedback${c.reset}\n`);
|
|
225
|
+
console.log(` ${c.dim}Want a feature prioritized? Let us know:${c.reset}`);
|
|
226
|
+
console.log(` ${c.cyan}https://github.com/vibecheckai/vibecheck/discussions${c.reset}`);
|
|
227
|
+
console.log("");
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function printFeatureStub(name, feature) {
|
|
231
|
+
console.log(box(
|
|
232
|
+
`${c.bold}vibecheck labs ${name}${c.reset}\n\n` +
|
|
233
|
+
`${feature.description}\n\n` +
|
|
234
|
+
`${c.dim}This feature is not yet implemented.${c.reset}\n` +
|
|
235
|
+
(feature.eta ? `${c.dim}Expected: ${feature.eta}${c.reset}\n` : "") +
|
|
236
|
+
`\n${c.dim}Want this feature? Vote for it:${c.reset}\n` +
|
|
237
|
+
`${c.cyan}https://github.com/vibecheckai/vibecheck/discussions${c.reset}`,
|
|
238
|
+
{ title: "PLANNED", borderColor: c.yellow }
|
|
239
|
+
));
|
|
240
|
+
console.log("");
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function printAliasWarning(name, feature) {
|
|
244
|
+
console.log(`${c.yellow}${sym.warning}${c.reset} '${name}' is now available as: ${c.cyan}vibecheck ${feature.target}${c.reset}\n`);
|
|
245
|
+
console.log(`${c.dim}The labs alias will be removed in a future version.${c.reset}\n`);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
249
|
+
// MAIN RUNNER
|
|
250
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
251
|
+
async function runLabs(args = []) {
|
|
252
|
+
const subCmd = args[0];
|
|
253
|
+
const subArgs = args.slice(1);
|
|
254
|
+
|
|
255
|
+
// Show help if no command
|
|
256
|
+
if (!subCmd || subCmd === "--help" || subCmd === "-h") {
|
|
257
|
+
printHelp();
|
|
258
|
+
return 0;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// List all features
|
|
262
|
+
if (subCmd === "--list" || subCmd === "-l") {
|
|
263
|
+
const features = Object.entries(LABS_FEATURES).map(([name, f]) => [
|
|
264
|
+
name,
|
|
265
|
+
formatStatus(f.status),
|
|
266
|
+
f.description.slice(0, 40),
|
|
267
|
+
]);
|
|
268
|
+
|
|
269
|
+
console.log(table(features, {
|
|
270
|
+
headers: ["Feature", "Status", "Description"],
|
|
271
|
+
indent: 2,
|
|
272
|
+
}));
|
|
273
|
+
console.log("");
|
|
274
|
+
return 0;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Find feature
|
|
278
|
+
const feature = LABS_FEATURES[subCmd];
|
|
279
|
+
|
|
280
|
+
if (!feature) {
|
|
281
|
+
console.log(`${c.red}${sym.error}${c.reset} Unknown labs feature: ${c.yellow}${subCmd}${c.reset}\n`);
|
|
282
|
+
console.log(`${c.dim}Available features:${c.reset}`);
|
|
283
|
+
console.log(` ${Object.keys(LABS_FEATURES).filter(k => LABS_FEATURES[k].status !== "stub").join(", ")}`);
|
|
284
|
+
console.log(`\n${c.dim}Run 'vibecheck labs --help' for details.${c.reset}\n`);
|
|
285
|
+
return 1;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Handle stubs
|
|
289
|
+
if (feature.status === "stub") {
|
|
290
|
+
printFeatureStub(subCmd, feature);
|
|
291
|
+
return 0;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Handle aliases
|
|
295
|
+
if (feature.status === "alias") {
|
|
296
|
+
printAliasWarning(subCmd, feature);
|
|
297
|
+
|
|
298
|
+
// Try to run the aliased command
|
|
299
|
+
const [cmd, ...aliasArgs] = feature.target.split(" ");
|
|
300
|
+
try {
|
|
301
|
+
const { runShip } = require("./runShip");
|
|
302
|
+
if (cmd === "ship") {
|
|
303
|
+
return await runShip([...aliasArgs, ...subArgs]);
|
|
304
|
+
}
|
|
305
|
+
const { runReality } = require("./runReality");
|
|
306
|
+
if (cmd === "reality") {
|
|
307
|
+
return await runReality([...aliasArgs, ...subArgs]);
|
|
308
|
+
}
|
|
309
|
+
} catch (e) {
|
|
310
|
+
console.log(`${c.dim}Please run the command directly: vibecheck ${feature.target}${c.reset}\n`);
|
|
311
|
+
}
|
|
312
|
+
return 0;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Run the feature
|
|
316
|
+
try {
|
|
317
|
+
const runner = feature.runner();
|
|
318
|
+
|
|
319
|
+
// Show experimental warning
|
|
320
|
+
if (feature.status === "experimental") {
|
|
321
|
+
console.log(`${c.yellow}${sym.warning} EXPERIMENTAL:${c.reset} ${c.dim}This feature may change without notice.${c.reset}\n`);
|
|
322
|
+
} else if (feature.status === "beta") {
|
|
323
|
+
console.log(`${c.cyan}${sym.star} BETA:${c.reset} ${c.dim}Feedback welcome! Report issues at github.com/vibecheckai/vibecheck${c.reset}\n`);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
return await runner(subArgs);
|
|
327
|
+
} catch (e) {
|
|
328
|
+
if (e.code === "MODULE_NOT_FOUND") {
|
|
329
|
+
console.log(`${c.red}${sym.error}${c.reset} Feature '${subCmd}' is not available in this version.\n`);
|
|
330
|
+
console.log(`${c.dim}Try updating: npm update -g @vibecheckai/cli${c.reset}\n`);
|
|
331
|
+
} else {
|
|
332
|
+
console.error(`${c.red}${sym.error}${c.reset} Error running labs ${subCmd}: ${e.message}`);
|
|
333
|
+
if (process.env.VIBECHECK_DEBUG) {
|
|
334
|
+
console.error(c.dim + e.stack + c.reset);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return 1;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
module.exports = { runLabs, LABS_FEATURES };
|
package/bin/runners/runMcp.js
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
const path = require("path");
|
|
9
|
-
const fs = require("fs");
|
|
10
9
|
const http = require("http");
|
|
11
10
|
const { URL } = require("url");
|
|
12
11
|
|
|
@@ -14,12 +13,7 @@ const { URL } = require("url");
|
|
|
14
13
|
const { buildTruthpack, writeTruthpack } = require("./lib/truth");
|
|
15
14
|
const { shipCore } = require("./runShip");
|
|
16
15
|
const { generateRunId } = require("./lib/cli-output");
|
|
17
|
-
const { enforceLimit, enforceFeature, trackUsage } = require("./lib/entitlements
|
|
18
|
-
const { EXIT } = require("./lib/exit-codes");
|
|
19
|
-
const { parseGlobalFlags, shouldSuppressOutput, isJsonMode } = require("./lib/global-flags");
|
|
20
|
-
|
|
21
|
-
// Unified Output System
|
|
22
|
-
const { output } = require("./lib/output/index.js");
|
|
16
|
+
const { enforceLimit, enforceFeature, trackUsage } = require("./lib/entitlements");
|
|
23
17
|
|
|
24
18
|
// MCP Server class
|
|
25
19
|
class VibecheckMCPServer {
|
|
@@ -36,7 +30,9 @@ class VibecheckMCPServer {
|
|
|
36
30
|
this.rateLimits = new Map();
|
|
37
31
|
this.tiers = {
|
|
38
32
|
free: { rpm: 10, burst: 20, daily: 100 },
|
|
39
|
-
|
|
33
|
+
starter: { rpm: 30, burst: 60, daily: 500 },
|
|
34
|
+
pro: { rpm: 100, burst: 200, daily: 2000 },
|
|
35
|
+
enterprise: { rpm: 500, burst: 1000, daily: Infinity }
|
|
40
36
|
};
|
|
41
37
|
|
|
42
38
|
// Tool definitions
|
|
@@ -111,7 +107,7 @@ class VibecheckMCPServer {
|
|
|
111
107
|
tier: "pro"
|
|
112
108
|
},
|
|
113
109
|
|
|
114
|
-
//
|
|
110
|
+
// Enterprise tier tools
|
|
115
111
|
policy_check: {
|
|
116
112
|
description: "Validate project against custom compliance policies",
|
|
117
113
|
inputSchema: {
|
|
@@ -122,7 +118,7 @@ class VibecheckMCPServer {
|
|
|
122
118
|
reportFormat: { type: "string", enum: ["json", "sarif", "markdown"], default: "json" }
|
|
123
119
|
}
|
|
124
120
|
},
|
|
125
|
-
tier: "
|
|
121
|
+
tier: "enterprise"
|
|
126
122
|
}
|
|
127
123
|
};
|
|
128
124
|
}
|
|
@@ -589,7 +585,7 @@ class VibecheckMCPServer {
|
|
|
589
585
|
}
|
|
590
586
|
|
|
591
587
|
checkTierAccess(requiredTier, userTier) {
|
|
592
|
-
const tierOrder = ["free", "pro"];
|
|
588
|
+
const tierOrder = ["free", "starter", "pro", "enterprise"];
|
|
593
589
|
const requiredIndex = tierOrder.indexOf(requiredTier);
|
|
594
590
|
const userIndex = tierOrder.indexOf(userTier);
|
|
595
591
|
|
|
@@ -646,14 +642,8 @@ class VibecheckMCPServer {
|
|
|
646
642
|
});
|
|
647
643
|
|
|
648
644
|
this.server.on("error", err => {
|
|
649
|
-
console.error("MCP Server failed to start:", err
|
|
650
|
-
|
|
651
|
-
console.error(` Port ${this.port} is already in use. Try a different port with --port`);
|
|
652
|
-
} else if (err.code === "EACCES") {
|
|
653
|
-
console.error(` Permission denied for port ${this.port}. Use a port > 1024`);
|
|
654
|
-
}
|
|
655
|
-
// Emit error event for caller to handle
|
|
656
|
-
this.emit?.("error", err);
|
|
645
|
+
console.error("MCP Server failed to start:", err);
|
|
646
|
+
process.exit(1);
|
|
657
647
|
});
|
|
658
648
|
}
|
|
659
649
|
|
|
@@ -668,77 +658,54 @@ class VibecheckMCPServer {
|
|
|
668
658
|
// CLI handler
|
|
669
659
|
async function runMcp(args) {
|
|
670
660
|
const opts = parseArgs(args);
|
|
671
|
-
const { flags: globalFlags } = parseGlobalFlags(args);
|
|
672
|
-
const quiet = shouldSuppressOutput(globalFlags);
|
|
673
|
-
const json = isJsonMode(globalFlags);
|
|
674
661
|
|
|
675
662
|
// Check if we're in free tier and only showing help/config
|
|
676
663
|
const isFreeTier = process.env.VIBECHECK_TIER === "free" || !process.env.VIBECHECK_API_KEY;
|
|
677
664
|
const isHelpOrConfig = opts.help || opts.printConfig || opts.status || opts.test;
|
|
678
665
|
|
|
679
666
|
if (isFreeTier && !isHelpOrConfig) {
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
}
|
|
687
|
-
return EXIT.TIER_REQUIRED;
|
|
667
|
+
// This will be handled by entitlements system
|
|
668
|
+
// But we can show a helpful message
|
|
669
|
+
console.log("\n🔌 MCP Server requires STARTER plan or higher");
|
|
670
|
+
console.log("Use --help to see available options or");
|
|
671
|
+
console.log("Upgrade: https://vibecheckai.dev/pricing\n");
|
|
672
|
+
return 3; // EXIT_FEATURE_NOT_ALLOWED
|
|
688
673
|
}
|
|
689
674
|
|
|
690
675
|
if (opts.help) {
|
|
691
676
|
printHelp();
|
|
692
|
-
return
|
|
677
|
+
return 0;
|
|
693
678
|
}
|
|
694
679
|
|
|
695
680
|
if (opts.printConfig) {
|
|
696
681
|
printClientConfig(opts);
|
|
697
|
-
return
|
|
682
|
+
return 0;
|
|
698
683
|
}
|
|
699
684
|
|
|
700
685
|
if (opts.status) {
|
|
701
686
|
// Check server status
|
|
702
687
|
try {
|
|
703
|
-
const
|
|
704
|
-
const port = opts.port || 3000;
|
|
705
|
-
const response = await fetch(`http://${host}:${port}/status`);
|
|
688
|
+
const response = await fetch(`http://${opts.host}:${opts.port}/status`);
|
|
706
689
|
const status = await response.json();
|
|
707
690
|
console.log(JSON.stringify(status, null, 2));
|
|
708
|
-
return
|
|
691
|
+
return 0;
|
|
709
692
|
} catch (err) {
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
} else {
|
|
713
|
-
console.error("Server not running or not reachable");
|
|
714
|
-
console.error(" Start the server with: vibecheck mcp");
|
|
715
|
-
}
|
|
716
|
-
return EXIT.NETWORK_ERROR;
|
|
693
|
+
console.error("Server not running or not reachable");
|
|
694
|
+
return 1;
|
|
717
695
|
}
|
|
718
696
|
}
|
|
719
697
|
|
|
720
698
|
if (opts.test) {
|
|
721
699
|
// Test connection
|
|
722
700
|
try {
|
|
723
|
-
const
|
|
724
|
-
const port = opts.port || 3000;
|
|
725
|
-
const response = await fetch(`http://${host}:${port}/tools`);
|
|
701
|
+
const response = await fetch(`http://${opts.host}:${opts.port}/tools`);
|
|
726
702
|
const tools = await response.json();
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
console.log("✅ Connection successful");
|
|
731
|
-
console.log(`📋 Available tools: ${tools.tools?.length || 0}`);
|
|
732
|
-
}
|
|
733
|
-
return EXIT.SUCCESS;
|
|
703
|
+
console.log("✅ Connection successful");
|
|
704
|
+
console.log(`📋 Available tools: ${tools.tools.length}`);
|
|
705
|
+
return 0;
|
|
734
706
|
} catch (err) {
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
} else {
|
|
738
|
-
console.error("❌ Connection failed:", err.message);
|
|
739
|
-
console.error(" Ensure the MCP server is running");
|
|
740
|
-
}
|
|
741
|
-
return EXIT.NETWORK_ERROR;
|
|
707
|
+
console.error("❌ Connection failed:", err.message);
|
|
708
|
+
return 1;
|
|
742
709
|
}
|
|
743
710
|
}
|
|
744
711
|
|
|
@@ -746,88 +713,42 @@ async function runMcp(args) {
|
|
|
746
713
|
let config = {};
|
|
747
714
|
if (opts.config) {
|
|
748
715
|
const configPath = path.resolve(opts.config);
|
|
749
|
-
if (
|
|
750
|
-
|
|
751
|
-
console.log(JSON.stringify({ success: false, error: `Config file not found: ${configPath}` }));
|
|
752
|
-
} else {
|
|
753
|
-
console.error(`Config file not found: ${configPath}`);
|
|
754
|
-
}
|
|
755
|
-
return EXIT.NOT_FOUND;
|
|
756
|
-
}
|
|
757
|
-
try {
|
|
758
|
-
config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
759
|
-
} catch (parseErr) {
|
|
760
|
-
if (json) {
|
|
761
|
-
console.log(JSON.stringify({ success: false, error: `Invalid JSON in config: ${parseErr.message}` }));
|
|
762
|
-
} else {
|
|
763
|
-
console.error(`Invalid JSON in config file: ${parseErr.message}`);
|
|
764
|
-
}
|
|
765
|
-
return EXIT.USER_ERROR;
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
// Validate port
|
|
770
|
-
const port = opts.port || config.server?.port || 3000;
|
|
771
|
-
if (isNaN(port) || port < 1 || port > 65535) {
|
|
772
|
-
if (json) {
|
|
773
|
-
console.log(JSON.stringify({ success: false, error: `Invalid port: ${port}` }));
|
|
716
|
+
if (require("fs").existsSync(configPath)) {
|
|
717
|
+
config = JSON.parse(require("fs").readFileSync(configPath, "utf8"));
|
|
774
718
|
} else {
|
|
775
|
-
console.error(`
|
|
776
|
-
|
|
719
|
+
console.error(`Config file not found: ${configPath}`);
|
|
720
|
+
return 1;
|
|
777
721
|
}
|
|
778
|
-
return EXIT.USER_ERROR;
|
|
779
722
|
}
|
|
780
723
|
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
};
|
|
810
|
-
|
|
811
|
-
process.on("SIGINT", () => {
|
|
812
|
-
cleanup();
|
|
813
|
-
process.exit(EXIT.SUCCESS);
|
|
814
|
-
});
|
|
815
|
-
|
|
816
|
-
process.on("SIGTERM", () => {
|
|
817
|
-
cleanup();
|
|
818
|
-
process.exit(EXIT.SUCCESS);
|
|
819
|
-
});
|
|
820
|
-
|
|
821
|
-
// Keep process alive
|
|
822
|
-
return new Promise(() => {});
|
|
823
|
-
} catch (error) {
|
|
824
|
-
if (json) {
|
|
825
|
-
console.log(JSON.stringify({ success: false, error: error.message }));
|
|
826
|
-
} else {
|
|
827
|
-
console.error(`Failed to start MCP server: ${error.message}`);
|
|
828
|
-
}
|
|
829
|
-
return EXIT.INTERNAL_ERROR;
|
|
830
|
-
}
|
|
724
|
+
// Create and start server
|
|
725
|
+
const server = new VibecheckMCPServer({
|
|
726
|
+
host: opts.host || config.server?.host || "127.0.0.1",
|
|
727
|
+
port: opts.port || config.server?.port || 3000,
|
|
728
|
+
allowRemote: opts.allowRemote || config.server?.allowRemote || false,
|
|
729
|
+
requireApiKey: opts.requireApiKey !== false,
|
|
730
|
+
apiKey: opts.apiKey || config.auth?.apiKey,
|
|
731
|
+
logLevel: opts.logLevel || config.logging?.level || "info",
|
|
732
|
+
auditLog: opts.auditLog || config.logging?.auditFile
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
server.start();
|
|
736
|
+
|
|
737
|
+
// Handle shutdown
|
|
738
|
+
process.on("SIGINT", () => {
|
|
739
|
+
console.log("\nShutting down MCP server...");
|
|
740
|
+
server.stop();
|
|
741
|
+
process.exit(0);
|
|
742
|
+
});
|
|
743
|
+
|
|
744
|
+
process.on("SIGTERM", () => {
|
|
745
|
+
console.log("\nShutting down MCP server...");
|
|
746
|
+
server.stop();
|
|
747
|
+
process.exit(0);
|
|
748
|
+
});
|
|
749
|
+
|
|
750
|
+
// Keep process alive
|
|
751
|
+
return new Promise(() => {});
|
|
831
752
|
}
|
|
832
753
|
|
|
833
754
|
// Argument parsing
|
|
@@ -910,7 +831,9 @@ ${c.bold}MCP TOOLS AVAILABLE${c.reset}
|
|
|
910
831
|
|
|
911
832
|
${c.dim}Pro Tier:${c.reset}
|
|
912
833
|
• run_ship Execute ship check
|
|
913
|
-
|
|
834
|
+
|
|
835
|
+
${c.dim}Enterprise Tier:${c.reset}
|
|
836
|
+
• policy_check Validate against policies
|
|
914
837
|
|
|
915
838
|
${c.bold}CONFIGURATION${c.reset}
|
|
916
839
|
Add to your AI IDE's MCP config:
|