@vibecheckai/cli 3.5.1 → 3.5.3
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 +406 -154
- package/bin/runners/context/analyzer.js +52 -1
- package/bin/runners/context/generators/mcp.js +15 -13
- package/bin/runners/context/git-context.js +3 -1
- package/bin/runners/context/proof-context.js +248 -1
- package/bin/runners/context/team-conventions.js +33 -7
- package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +474 -0
- package/bin/runners/lib/agent-firewall/change-packet/builder.js +488 -0
- package/bin/runners/lib/agent-firewall/change-packet/schema.json +228 -0
- package/bin/runners/lib/agent-firewall/change-packet/store.js +200 -0
- package/bin/runners/lib/agent-firewall/claims/claim-types.js +21 -0
- package/bin/runners/lib/agent-firewall/claims/extractor.js +303 -0
- package/bin/runners/lib/agent-firewall/claims/patterns.js +24 -0
- package/bin/runners/lib/agent-firewall/critic/index.js +151 -0
- package/bin/runners/lib/agent-firewall/critic/judge.js +432 -0
- package/bin/runners/lib/agent-firewall/critic/prompts.js +305 -0
- package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +88 -0
- package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +75 -0
- package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +127 -0
- package/bin/runners/lib/agent-firewall/evidence/resolver.js +102 -0
- package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +213 -0
- package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +145 -0
- package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +19 -0
- package/bin/runners/lib/agent-firewall/fs-hook/installer.js +87 -0
- package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +184 -0
- package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +163 -0
- package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +107 -0
- package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +68 -0
- package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +66 -0
- package/bin/runners/lib/agent-firewall/interceptor/base.js +304 -0
- package/bin/runners/lib/agent-firewall/interceptor/cursor.js +35 -0
- package/bin/runners/lib/agent-firewall/interceptor/vscode.js +35 -0
- package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +34 -0
- package/bin/runners/lib/agent-firewall/lawbook/distributor.js +465 -0
- package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +604 -0
- package/bin/runners/lib/agent-firewall/lawbook/index.js +304 -0
- package/bin/runners/lib/agent-firewall/lawbook/registry.js +514 -0
- package/bin/runners/lib/agent-firewall/lawbook/schema.js +420 -0
- package/bin/runners/lib/agent-firewall/logger.js +141 -0
- package/bin/runners/lib/agent-firewall/policy/default-policy.json +90 -0
- package/bin/runners/lib/agent-firewall/policy/engine.js +103 -0
- package/bin/runners/lib/agent-firewall/policy/loader.js +451 -0
- package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +50 -0
- package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +50 -0
- package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +86 -0
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +162 -0
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +189 -0
- package/bin/runners/lib/agent-firewall/policy/rules/scope.js +93 -0
- package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +57 -0
- package/bin/runners/lib/agent-firewall/policy/schema.json +183 -0
- package/bin/runners/lib/agent-firewall/policy/verdict.js +54 -0
- package/bin/runners/lib/agent-firewall/proposal/extractor.js +394 -0
- package/bin/runners/lib/agent-firewall/proposal/index.js +212 -0
- package/bin/runners/lib/agent-firewall/proposal/schema.js +251 -0
- package/bin/runners/lib/agent-firewall/proposal/validator.js +386 -0
- package/bin/runners/lib/agent-firewall/reality/index.js +332 -0
- package/bin/runners/lib/agent-firewall/reality/state.js +625 -0
- package/bin/runners/lib/agent-firewall/reality/watcher.js +322 -0
- package/bin/runners/lib/agent-firewall/risk/index.js +173 -0
- package/bin/runners/lib/agent-firewall/risk/scorer.js +328 -0
- package/bin/runners/lib/agent-firewall/risk/thresholds.js +321 -0
- package/bin/runners/lib/agent-firewall/risk/vectors.js +421 -0
- package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +472 -0
- package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +346 -0
- package/bin/runners/lib/agent-firewall/simulator/index.js +181 -0
- package/bin/runners/lib/agent-firewall/simulator/route-validator.js +380 -0
- package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +661 -0
- package/bin/runners/lib/agent-firewall/time-machine/index.js +267 -0
- package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +436 -0
- package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +490 -0
- package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +530 -0
- package/bin/runners/lib/agent-firewall/truthpack/index.js +67 -0
- package/bin/runners/lib/agent-firewall/truthpack/loader.js +137 -0
- package/bin/runners/lib/agent-firewall/unblock/planner.js +337 -0
- package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +118 -0
- package/bin/runners/lib/analysis-core.js +220 -182
- package/bin/runners/lib/analyzers.js +2145 -224
- package/bin/runners/lib/api-client.js +269 -0
- package/bin/runners/lib/authority-badge.js +425 -0
- package/bin/runners/lib/cli-output.js +242 -210
- package/bin/runners/lib/default-config.js +127 -0
- package/bin/runners/lib/detectors-v2.js +547 -785
- 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 +190 -0
- package/bin/runners/lib/engines/api-consistency-engine.js +162 -0
- package/bin/runners/lib/engines/ast-cache.js +99 -0
- package/bin/runners/lib/engines/code-quality-engine.js +255 -0
- package/bin/runners/lib/engines/console-logs-engine.js +115 -0
- package/bin/runners/lib/engines/cross-file-analysis-engine.js +268 -0
- package/bin/runners/lib/engines/dead-code-engine.js +198 -0
- package/bin/runners/lib/engines/deprecated-api-engine.js +226 -0
- package/bin/runners/lib/engines/empty-catch-engine.js +150 -0
- package/bin/runners/lib/engines/file-filter.js +131 -0
- package/bin/runners/lib/engines/hardcoded-secrets-engine.js +251 -0
- package/bin/runners/lib/engines/mock-data-engine.js +272 -0
- package/bin/runners/lib/engines/parallel-processor.js +71 -0
- package/bin/runners/lib/engines/performance-issues-engine.js +265 -0
- package/bin/runners/lib/engines/security-vulnerabilities-engine.js +243 -0
- package/bin/runners/lib/engines/todo-fixme-engine.js +115 -0
- package/bin/runners/lib/engines/type-aware-engine.js +152 -0
- package/bin/runners/lib/engines/unsafe-regex-engine.js +225 -0
- package/bin/runners/lib/engines/vibecheck-engines/README.md +53 -0
- package/bin/runners/lib/engines/vibecheck-engines/index.js +15 -0
- 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 +139 -0
- 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/engines/vibecheck-engines/package.json +13 -0
- package/bin/runners/lib/entitlements-v2.js +152 -446
- package/bin/runners/lib/error-handler.js +60 -12
- package/bin/runners/lib/error-messages.js +289 -0
- package/bin/runners/lib/evidence-pack.js +7 -1
- package/bin/runners/lib/exit-codes.js +275 -0
- package/bin/runners/lib/finding-id.js +69 -0
- package/bin/runners/lib/finding-sorter.js +89 -0
- package/bin/runners/lib/fingerprint.js +377 -0
- package/bin/runners/lib/global-flags.js +37 -0
- package/bin/runners/lib/help-formatter.js +413 -0
- package/bin/runners/lib/logger.js +38 -0
- 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/route-truth.js +1167 -322
- package/bin/runners/lib/scan-output.js +504 -463
- 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 +239 -0
- package/bin/runners/lib/ship-output.js +328 -31
- package/bin/runners/lib/terminal-ui.js +234 -731
- package/bin/runners/lib/truth.js +1332 -308
- package/bin/runners/lib/unified-cli-output.js +604 -0
- package/bin/runners/lib/unified-output.js +163 -155
- package/bin/runners/lib/upsell.js +104 -204
- package/bin/runners/runAgent.d.ts +5 -0
- package/bin/runners/runAgent.js +161 -0
- package/bin/runners/runAllowlist.js +166 -101
- package/bin/runners/runApprove.js +1200 -0
- package/bin/runners/runAuth.js +373 -95
- package/bin/runners/runCheckpoint.js +59 -21
- package/bin/runners/runClassify.js +926 -0
- package/bin/runners/runContext.d.ts +4 -0
- package/bin/runners/runContext.js +136 -24
- package/bin/runners/runDoctor.js +115 -67
- package/bin/runners/runEvidencePack.js +239 -96
- package/bin/runners/runFirewall.d.ts +5 -0
- package/bin/runners/runFirewall.js +134 -0
- package/bin/runners/runFirewallHook.d.ts +5 -0
- package/bin/runners/runFirewallHook.js +56 -0
- package/bin/runners/runFix.js +6 -5
- package/bin/runners/runGuard.js +212 -118
- package/bin/runners/runInit.js +66 -21
- package/bin/runners/runLabs.js +204 -121
- package/bin/runners/runMcp.js +131 -60
- package/bin/runners/runPolish.d.ts +4 -0
- package/bin/runners/runPolish.js +43 -20
- package/bin/runners/runProof.zip +0 -0
- package/bin/runners/runProve.js +15 -5
- package/bin/runners/runQuickstart.js +531 -0
- package/bin/runners/runReality.js +14 -0
- package/bin/runners/runReport.js +36 -4
- package/bin/runners/runScan.js +689 -91
- package/bin/runners/runShip.js +96 -40
- package/bin/runners/runTruth.d.ts +5 -0
- package/bin/runners/runTruth.js +101 -0
- package/bin/runners/runValidate.js +21 -4
- package/bin/runners/runWatch.js +118 -54
- package/bin/scan.js +6 -1
- package/bin/vibecheck.js +297 -52
- package/mcp-server/HARDENING_SUMMARY.md +299 -0
- package/mcp-server/agent-firewall-interceptor.js +500 -0
- package/mcp-server/authority-tools.js +569 -0
- package/mcp-server/conductor/conflict-resolver.js +588 -0
- package/mcp-server/conductor/execution-planner.js +544 -0
- package/mcp-server/conductor/index.js +377 -0
- package/mcp-server/conductor/lock-manager.js +615 -0
- package/mcp-server/conductor/request-queue.js +550 -0
- package/mcp-server/conductor/session-manager.js +500 -0
- package/mcp-server/conductor/tools.js +510 -0
- package/mcp-server/deprecation-middleware.js +282 -0
- package/mcp-server/handlers/index.ts +15 -0
- package/mcp-server/handlers/tool-handler.ts +474 -591
- package/mcp-server/index.js +1748 -1099
- package/mcp-server/lib/api-client.cjs +13 -0
- package/mcp-server/lib/cache-wrapper.cjs +383 -0
- package/mcp-server/lib/error-envelope.js +138 -0
- package/mcp-server/lib/executor.ts +428 -721
- package/mcp-server/lib/index.ts +19 -0
- package/mcp-server/lib/logger.cjs +30 -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 +342 -284
- package/mcp-server/lib/types.ts +267 -0
- package/mcp-server/logger.js +173 -0
- package/mcp-server/package.json +11 -27
- package/mcp-server/premium-tools.js +2 -2
- package/mcp-server/registry/tool-registry.js +794 -0
- package/mcp-server/registry/tools.json +507 -378
- package/mcp-server/registry.test.ts +334 -0
- package/mcp-server/tests/tier-gating.test.js +297 -0
- package/mcp-server/tier-auth.js +492 -347
- package/mcp-server/tools-v3.js +950 -0
- package/mcp-server/truth-context.js +131 -90
- package/mcp-server/truth-firewall-tools.js +1612 -1001
- package/mcp-server/tsconfig.json +8 -5
- package/mcp-server/vibecheck-2.0-tools.js +14 -1
- package/mcp-server/vibecheck-mcp-server-3.2.0.tgz +0 -0
- package/mcp-server/vibecheck-tools.js +2 -2
- package/package.json +4 -3
- package/bin/runners/runInstall.js +0 -281
- package/mcp-server/ARCHITECTURE.md +0 -339
- package/mcp-server/__tests__/cache.test.ts +0 -313
- package/mcp-server/__tests__/executor.test.ts +0 -239
- package/mcp-server/__tests__/fixtures/exclusion-test/.cache/webpack/cache.pack +0 -1
- package/mcp-server/__tests__/fixtures/exclusion-test/.next/server/chunk.js +0 -3
- package/mcp-server/__tests__/fixtures/exclusion-test/.turbo/cache.json +0 -3
- package/mcp-server/__tests__/fixtures/exclusion-test/.venv/lib/env.py +0 -3
- package/mcp-server/__tests__/fixtures/exclusion-test/dist/bundle.js +0 -3
- package/mcp-server/__tests__/fixtures/exclusion-test/package.json +0 -5
- package/mcp-server/__tests__/fixtures/exclusion-test/src/app.ts +0 -5
- package/mcp-server/__tests__/fixtures/exclusion-test/venv/lib/config.py +0 -4
- package/mcp-server/__tests__/ids.test.ts +0 -345
- package/mcp-server/__tests__/integration/tools.test.ts +0 -410
- package/mcp-server/__tests__/registry.test.ts +0 -365
- package/mcp-server/__tests__/sandbox.test.ts +0 -323
- package/mcp-server/__tests__/schemas.test.ts +0 -372
- package/mcp-server/benchmarks/run-benchmarks.ts +0 -304
- package/mcp-server/examples/doctor.request.json +0 -14
- package/mcp-server/examples/doctor.response.json +0 -53
- package/mcp-server/examples/error.response.json +0 -15
- package/mcp-server/examples/scan.request.json +0 -14
- package/mcp-server/examples/scan.response.json +0 -108
- package/mcp-server/index-v3.ts +0 -293
- package/mcp-server/index.old.js +0 -4137
- package/mcp-server/lib/cache.ts +0 -341
- package/mcp-server/lib/errors.ts +0 -346
- package/mcp-server/lib/ids.ts +0 -238
- package/mcp-server/lib/logger.ts +0 -368
- package/mcp-server/lib/metrics.ts +0 -365
- package/mcp-server/lib/validator.ts +0 -229
- package/mcp-server/package-lock.json +0 -165
- package/mcp-server/schemas/error-envelope.schema.json +0 -125
- package/mcp-server/schemas/finding.schema.json +0 -167
- package/mcp-server/schemas/report-artifact.schema.json +0 -88
- package/mcp-server/schemas/run-request.schema.json +0 -75
- package/mcp-server/schemas/verdict.schema.json +0 -168
- package/mcp-server/tier-auth.d.ts +0 -71
- package/mcp-server/vitest.config.ts +0 -16
package/bin/runners/runLabs.js
CHANGED
|
@@ -9,95 +9,136 @@
|
|
|
9
9
|
|
|
10
10
|
"use strict";
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
// Colors
|
|
13
|
+
const c = {
|
|
14
|
+
reset: '\x1b[0m',
|
|
15
|
+
bold: '\x1b[1m',
|
|
16
|
+
dim: '\x1b[2m',
|
|
17
|
+
green: '\x1b[32m',
|
|
18
|
+
yellow: '\x1b[33m',
|
|
19
|
+
cyan: '\x1b[36m',
|
|
20
|
+
red: '\x1b[31m',
|
|
21
|
+
magenta: '\x1b[35m',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const rgb = (r, g, b) => `\x1b[38;2;${r};${g};${b}m`;
|
|
25
|
+
|
|
26
|
+
const colors = {
|
|
27
|
+
accent: rgb(0, 212, 255),
|
|
28
|
+
success: rgb(16, 185, 129),
|
|
29
|
+
warning: rgb(245, 158, 11),
|
|
30
|
+
error: rgb(239, 68, 68),
|
|
31
|
+
purple: rgb(168, 85, 247),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const sym = {
|
|
35
|
+
check: '✓',
|
|
36
|
+
cross: '✗',
|
|
37
|
+
warning: '⚠',
|
|
38
|
+
info: 'ℹ',
|
|
39
|
+
pending: '○',
|
|
40
|
+
lightning: '⚡',
|
|
41
|
+
star: '★',
|
|
42
|
+
arrow: '→',
|
|
43
|
+
};
|
|
13
44
|
|
|
14
45
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
15
46
|
// LABS FEATURE REGISTRY
|
|
16
47
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
17
48
|
const LABS_FEATURES = {
|
|
18
49
|
// Experimental - Working but API may change
|
|
19
|
-
"ai-
|
|
50
|
+
"ai-agent": {
|
|
20
51
|
status: "experimental",
|
|
21
|
-
description: "AI
|
|
22
|
-
docs: "https://docs.vibecheckai.dev/labs/ai-
|
|
52
|
+
description: "AI autonomous testing agent",
|
|
53
|
+
docs: "https://docs.vibecheckai.dev/labs/ai-agent",
|
|
23
54
|
runner: () => require("./runAIAgent").runAIAgent,
|
|
24
55
|
},
|
|
25
|
-
"
|
|
56
|
+
"deep-scan": {
|
|
26
57
|
status: "experimental",
|
|
27
|
-
description: "
|
|
28
|
-
|
|
29
|
-
|
|
58
|
+
description: "Extended static analysis with ML patterns",
|
|
59
|
+
runner: async (args, ctx) => {
|
|
60
|
+
const { runScan } = require("./runScan");
|
|
61
|
+
return runScan(["--profile", "deep", ...args], ctx);
|
|
62
|
+
},
|
|
30
63
|
},
|
|
31
|
-
"
|
|
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": {
|
|
64
|
+
"hallucination-check": {
|
|
42
65
|
status: "experimental",
|
|
43
|
-
description: "
|
|
44
|
-
runner: () =>
|
|
66
|
+
description: "Detect AI-generated code hallucinations",
|
|
67
|
+
runner: async (args, ctx) => {
|
|
68
|
+
const { runCheckpoint } = require("./runCheckpoint");
|
|
69
|
+
return runCheckpoint(["--hallucination", ...args], ctx);
|
|
70
|
+
},
|
|
45
71
|
},
|
|
46
|
-
"
|
|
72
|
+
"truth-diff": {
|
|
47
73
|
status: "experimental",
|
|
48
|
-
description: "
|
|
49
|
-
runner: () =>
|
|
74
|
+
description: "Diff truthpack changes across commits",
|
|
75
|
+
runner: async (args) => {
|
|
76
|
+
console.log(`\n ${c.yellow}${sym.warning} truth-diff${c.reset} is coming soon.\n`);
|
|
77
|
+
console.log(` ${c.dim}This feature will compare truthpack snapshots across git commits.${c.reset}\n`);
|
|
78
|
+
return 0;
|
|
79
|
+
},
|
|
50
80
|
},
|
|
51
|
-
|
|
81
|
+
|
|
52
82
|
// Beta - Feature complete, gathering feedback
|
|
53
|
-
"
|
|
83
|
+
"smart-fix": {
|
|
54
84
|
status: "beta",
|
|
55
|
-
description: "
|
|
56
|
-
runner: () =>
|
|
85
|
+
description: "AI-powered intelligent fix suggestions",
|
|
86
|
+
runner: async (args, ctx) => {
|
|
87
|
+
const { runFix } = require("./runFix");
|
|
88
|
+
return runFix(["--smart", ...args], ctx);
|
|
89
|
+
},
|
|
57
90
|
},
|
|
58
|
-
|
|
91
|
+
"security-audit": {
|
|
92
|
+
status: "beta",
|
|
93
|
+
description: "Comprehensive security audit mode",
|
|
94
|
+
runner: async (args, ctx) => {
|
|
95
|
+
const { runScan } = require("./runScan");
|
|
96
|
+
return runScan(["--profile", "security", ...args], ctx);
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
|
|
59
100
|
// Stubs - Planned but not implemented
|
|
60
101
|
"autopilot": {
|
|
61
102
|
status: "stub",
|
|
62
103
|
description: "Continuous protection mode (auto-fix on commit)",
|
|
63
|
-
eta: "Q2
|
|
104
|
+
eta: "Q2 2026",
|
|
64
105
|
},
|
|
65
106
|
"certify": {
|
|
66
107
|
status: "stub",
|
|
67
108
|
description: "Generate compliance certification badges",
|
|
68
|
-
eta: "Q2
|
|
109
|
+
eta: "Q2 2026",
|
|
69
110
|
},
|
|
70
|
-
"audit": {
|
|
111
|
+
"audit-trail": {
|
|
71
112
|
status: "stub",
|
|
72
113
|
description: "Full audit trail for compliance (SOC2, HIPAA)",
|
|
73
|
-
eta: "Q3
|
|
114
|
+
eta: "Q3 2026",
|
|
74
115
|
},
|
|
75
116
|
"natural-language": {
|
|
76
117
|
status: "stub",
|
|
77
|
-
description: "Natural language command
|
|
78
|
-
eta: "Q2
|
|
118
|
+
description: "Natural language command interface",
|
|
119
|
+
eta: "Q2 2026",
|
|
79
120
|
},
|
|
80
121
|
"fix-packs": {
|
|
81
122
|
status: "stub",
|
|
82
123
|
description: "Downloadable fix pack templates",
|
|
83
|
-
eta: "Q2
|
|
124
|
+
eta: "Q2 2026",
|
|
84
125
|
},
|
|
85
|
-
"
|
|
126
|
+
"dashboard-live": {
|
|
86
127
|
status: "stub",
|
|
87
|
-
description: "
|
|
88
|
-
eta: "Q3
|
|
128
|
+
description: "Real-time live monitoring dashboard",
|
|
129
|
+
eta: "Q3 2026",
|
|
89
130
|
},
|
|
90
|
-
|
|
131
|
+
|
|
91
132
|
// Aliases - Redirect to main commands
|
|
92
|
-
"
|
|
133
|
+
"ship-strict": {
|
|
93
134
|
status: "alias",
|
|
94
135
|
target: "ship --strict",
|
|
95
136
|
description: "Enhanced ship mode (use: vibecheck ship --strict)",
|
|
96
137
|
},
|
|
97
|
-
"
|
|
138
|
+
"reality-agent": {
|
|
98
139
|
status: "alias",
|
|
99
|
-
target: "reality --
|
|
100
|
-
description: "Reality
|
|
140
|
+
target: "reality --agent",
|
|
141
|
+
description: "Reality with AI agent (use: vibecheck reality --agent)",
|
|
101
142
|
},
|
|
102
143
|
};
|
|
103
144
|
|
|
@@ -141,13 +182,12 @@ function formatStatus(status) {
|
|
|
141
182
|
// HELP DISPLAY
|
|
142
183
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
143
184
|
function printHelp() {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
185
|
+
console.log(`
|
|
186
|
+
${colors.accent}${c.bold}vibecheck labs${c.reset} - Experimental & Internal Features
|
|
187
|
+
|
|
188
|
+
${c.yellow}${sym.warning} These features are experimental and may change without notice.${c.reset}
|
|
189
|
+
`);
|
|
190
|
+
|
|
151
191
|
// Group by status
|
|
152
192
|
const groups = {
|
|
153
193
|
experimental: [],
|
|
@@ -164,13 +204,13 @@ function printHelp() {
|
|
|
164
204
|
|
|
165
205
|
// Experimental
|
|
166
206
|
if (groups.experimental.length > 0) {
|
|
167
|
-
console.log(
|
|
207
|
+
console.log(` ${c.yellow}${sym.lightning} EXPERIMENTAL${c.reset} ${c.dim}(working, API may change)${c.reset}\n`);
|
|
168
208
|
|
|
169
209
|
for (const feature of groups.experimental) {
|
|
170
|
-
console.log(`
|
|
171
|
-
console.log(`
|
|
210
|
+
console.log(` ${c.cyan}vibecheck labs ${feature.name}${c.reset}`);
|
|
211
|
+
console.log(` ${c.dim}${feature.description}${c.reset}`);
|
|
172
212
|
if (feature.docs) {
|
|
173
|
-
console.log(`
|
|
213
|
+
console.log(` ${c.dim}Docs: ${feature.docs}${c.reset}`);
|
|
174
214
|
}
|
|
175
215
|
console.log("");
|
|
176
216
|
}
|
|
@@ -178,79 +218,122 @@ function printHelp() {
|
|
|
178
218
|
|
|
179
219
|
// Beta
|
|
180
220
|
if (groups.beta.length > 0) {
|
|
181
|
-
console.log(
|
|
221
|
+
console.log(` ${c.cyan}${sym.star} BETA${c.reset} ${c.dim}(feature complete, gathering feedback)${c.reset}\n`);
|
|
182
222
|
|
|
183
223
|
for (const feature of groups.beta) {
|
|
184
|
-
console.log(`
|
|
185
|
-
console.log(`
|
|
224
|
+
console.log(` ${c.cyan}vibecheck labs ${feature.name}${c.reset}`);
|
|
225
|
+
console.log(` ${c.dim}${feature.description}${c.reset}`);
|
|
186
226
|
console.log("");
|
|
187
227
|
}
|
|
188
228
|
}
|
|
189
229
|
|
|
190
230
|
// Stubs
|
|
191
231
|
if (groups.stub.length > 0) {
|
|
192
|
-
console.log(
|
|
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
|
-
]);
|
|
232
|
+
console.log(` ${c.dim}${sym.pending} PLANNED${c.reset} ${c.dim}(not yet implemented)${c.reset}\n`);
|
|
199
233
|
|
|
200
|
-
|
|
234
|
+
for (const feature of groups.stub) {
|
|
235
|
+
const eta = feature.eta ? `${c.dim}(ETA: ${feature.eta})${c.reset}` : '';
|
|
236
|
+
console.log(` ${c.dim}${feature.name}${c.reset} ${feature.description} ${eta}`);
|
|
237
|
+
}
|
|
201
238
|
console.log("");
|
|
202
239
|
}
|
|
203
240
|
|
|
204
241
|
// Aliases
|
|
205
242
|
if (groups.alias.length > 0) {
|
|
206
|
-
console.log(
|
|
243
|
+
console.log(` ${c.dim}${sym.arrow} ALIASES${c.reset} ${c.dim}(use the main command instead)${c.reset}\n`);
|
|
207
244
|
|
|
208
245
|
for (const feature of groups.alias) {
|
|
209
|
-
console.log(`
|
|
246
|
+
console.log(` ${c.dim}labs ${feature.name}${c.reset} ${sym.arrow} ${c.cyan}vibecheck ${feature.target}${c.reset}`);
|
|
210
247
|
}
|
|
211
248
|
console.log("");
|
|
212
249
|
}
|
|
213
250
|
|
|
214
251
|
// Usage
|
|
215
|
-
console.log(
|
|
216
|
-
console.log(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
252
|
+
console.log(` ${c.dim}${"─".repeat(60)}${c.reset}`);
|
|
253
|
+
console.log(`
|
|
254
|
+
${c.bold}Usage${c.reset}
|
|
255
|
+
|
|
256
|
+
vibecheck labs <feature> [options]
|
|
257
|
+
|
|
258
|
+
${c.bold}Examples${c.reset}
|
|
259
|
+
|
|
260
|
+
${c.dim}# Run AI agent testing${c.reset}
|
|
261
|
+
vibecheck labs ai-agent --url http://localhost:3000
|
|
262
|
+
|
|
263
|
+
${c.dim}# Deep security scan${c.reset}
|
|
264
|
+
vibecheck labs security-audit
|
|
265
|
+
|
|
266
|
+
${c.dim}# Smart AI fixes${c.reset}
|
|
267
|
+
vibecheck labs smart-fix
|
|
268
|
+
|
|
269
|
+
${c.dim}${"─".repeat(60)}${c.reset}
|
|
270
|
+
|
|
271
|
+
${c.bold}Feedback${c.reset}
|
|
272
|
+
|
|
273
|
+
Want a feature prioritized? Let us know:
|
|
274
|
+
${c.cyan}https://github.com/vibecheckai/vibecheck/discussions${c.reset}
|
|
275
|
+
`);
|
|
228
276
|
}
|
|
229
277
|
|
|
230
278
|
function printFeatureStub(name, feature) {
|
|
231
|
-
console.log(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
279
|
+
console.log(`
|
|
280
|
+
${c.yellow}╭${"─".repeat(58)}╮${c.reset}
|
|
281
|
+
${c.yellow}│${c.reset} ${c.bold}vibecheck labs ${name}${c.reset}${" ".repeat(58 - 18 - name.length)}${c.yellow}│${c.reset}
|
|
282
|
+
${c.yellow}╰${"─".repeat(58)}╯${c.reset}
|
|
283
|
+
|
|
284
|
+
${feature.description}
|
|
285
|
+
|
|
286
|
+
${c.dim}This feature is not yet implemented.${c.reset}
|
|
287
|
+
${feature.eta ? `${c.dim}Expected: ${feature.eta}${c.reset}` : ""}
|
|
288
|
+
|
|
289
|
+
${c.dim}Want this feature? Vote for it:${c.reset}
|
|
290
|
+
${c.cyan}https://github.com/vibecheckai/vibecheck/discussions${c.reset}
|
|
291
|
+
`);
|
|
241
292
|
}
|
|
242
293
|
|
|
243
294
|
function printAliasWarning(name, feature) {
|
|
244
|
-
console.log(
|
|
245
|
-
console.log(
|
|
295
|
+
console.log(`\n ${c.yellow}${sym.warning}${c.reset} '${name}' is now available as: ${c.cyan}vibecheck ${feature.target}${c.reset}\n`);
|
|
296
|
+
console.log(` ${c.dim}The labs alias will be removed in a future version.${c.reset}\n`);
|
|
246
297
|
}
|
|
247
298
|
|
|
248
299
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
249
300
|
// MAIN RUNNER
|
|
250
301
|
// ═══════════════════════════════════════════════════════════════════════════════
|
|
251
|
-
async function runLabs(args = []) {
|
|
252
|
-
|
|
253
|
-
const
|
|
302
|
+
async function runLabs(args = [], context = {}) {
|
|
303
|
+
// Filter out global flags that are passed through from main CLI
|
|
304
|
+
const GLOBAL_FLAGS = new Set([
|
|
305
|
+
'--offline', '--local', '--json', '--ci', '--quiet', '-q',
|
|
306
|
+
'--verbose', '--debug', '--strict', '--no-banner',
|
|
307
|
+
]);
|
|
308
|
+
|
|
309
|
+
// Find first non-flag argument as subcommand
|
|
310
|
+
let subCmd = null;
|
|
311
|
+
const subArgs = [];
|
|
312
|
+
let skipNext = false;
|
|
313
|
+
|
|
314
|
+
for (let i = 0; i < args.length; i++) {
|
|
315
|
+
const arg = args[i];
|
|
316
|
+
|
|
317
|
+
if (skipNext) {
|
|
318
|
+
skipNext = false;
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// Skip global flags (and their values for --path, --output)
|
|
323
|
+
if (GLOBAL_FLAGS.has(arg)) continue;
|
|
324
|
+
if (arg === '--path' || arg === '-p' || arg === '--output' || arg === '-o') {
|
|
325
|
+
skipNext = true;
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
if (arg.startsWith('--path=') || arg.startsWith('--output=')) continue;
|
|
329
|
+
|
|
330
|
+
// First non-flag arg is the subcommand
|
|
331
|
+
if (!subCmd && !arg.startsWith('-')) {
|
|
332
|
+
subCmd = arg;
|
|
333
|
+
} else {
|
|
334
|
+
subArgs.push(arg);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
254
337
|
|
|
255
338
|
// Show help if no command
|
|
256
339
|
if (!subCmd || subCmd === "--help" || subCmd === "-h") {
|
|
@@ -260,16 +343,13 @@ async function runLabs(args = []) {
|
|
|
260
343
|
|
|
261
344
|
// List all features
|
|
262
345
|
if (subCmd === "--list" || subCmd === "-l") {
|
|
263
|
-
|
|
264
|
-
name,
|
|
265
|
-
formatStatus(f.status),
|
|
266
|
-
f.description.slice(0, 40),
|
|
267
|
-
]);
|
|
346
|
+
console.log(`\n ${c.bold}Labs Features${c.reset}\n`);
|
|
268
347
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
348
|
+
for (const [name, f] of Object.entries(LABS_FEATURES)) {
|
|
349
|
+
if (f.status !== 'stub' && f.status !== 'alias') {
|
|
350
|
+
console.log(` ${formatStatus(f.status).padEnd(30)} ${c.cyan}${name.padEnd(20)}${c.reset} ${c.dim}${f.description}${c.reset}`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
273
353
|
console.log("");
|
|
274
354
|
return 0;
|
|
275
355
|
}
|
|
@@ -278,10 +358,13 @@ async function runLabs(args = []) {
|
|
|
278
358
|
const feature = LABS_FEATURES[subCmd];
|
|
279
359
|
|
|
280
360
|
if (!feature) {
|
|
281
|
-
console.log(
|
|
282
|
-
console.log(
|
|
283
|
-
console.log(`
|
|
284
|
-
|
|
361
|
+
console.log(`\n ${c.red}${sym.cross}${c.reset} Unknown labs feature: ${c.yellow}${subCmd}${c.reset}\n`);
|
|
362
|
+
console.log(` ${c.dim}Available features:${c.reset}`);
|
|
363
|
+
console.log(` ${Object.keys(LABS_FEATURES).filter(k =>
|
|
364
|
+
LABS_FEATURES[k].status !== "stub" &&
|
|
365
|
+
LABS_FEATURES[k].status !== "alias"
|
|
366
|
+
).join(", ")}`);
|
|
367
|
+
console.log(`\n ${c.dim}Run 'vibecheck labs --help' for details.${c.reset}\n`);
|
|
285
368
|
return 1;
|
|
286
369
|
}
|
|
287
370
|
|
|
@@ -298,16 +381,16 @@ async function runLabs(args = []) {
|
|
|
298
381
|
// Try to run the aliased command
|
|
299
382
|
const [cmd, ...aliasArgs] = feature.target.split(" ");
|
|
300
383
|
try {
|
|
301
|
-
const { runShip } = require("./runShip");
|
|
302
384
|
if (cmd === "ship") {
|
|
303
|
-
|
|
385
|
+
const { runShip } = require("./runShip");
|
|
386
|
+
return await runShip([...aliasArgs, ...subArgs], context);
|
|
304
387
|
}
|
|
305
|
-
const { runReality } = require("./runReality");
|
|
306
388
|
if (cmd === "reality") {
|
|
307
|
-
|
|
389
|
+
const { runReality } = require("./runReality");
|
|
390
|
+
return await runReality([...aliasArgs, ...subArgs], context);
|
|
308
391
|
}
|
|
309
392
|
} catch (e) {
|
|
310
|
-
console.log(
|
|
393
|
+
console.log(` ${c.dim}Please run the command directly: vibecheck ${feature.target}${c.reset}\n`);
|
|
311
394
|
}
|
|
312
395
|
return 0;
|
|
313
396
|
}
|
|
@@ -318,18 +401,18 @@ async function runLabs(args = []) {
|
|
|
318
401
|
|
|
319
402
|
// Show experimental warning
|
|
320
403
|
if (feature.status === "experimental") {
|
|
321
|
-
console.log(
|
|
404
|
+
console.log(`\n ${c.yellow}${sym.warning} EXPERIMENTAL:${c.reset} ${c.dim}This feature may change without notice.${c.reset}\n`);
|
|
322
405
|
} else if (feature.status === "beta") {
|
|
323
|
-
console.log(
|
|
406
|
+
console.log(`\n ${c.cyan}${sym.star} BETA:${c.reset} ${c.dim}Feedback welcome! github.com/vibecheckai/vibecheck${c.reset}\n`);
|
|
324
407
|
}
|
|
325
408
|
|
|
326
|
-
return await runner(subArgs);
|
|
409
|
+
return await runner(subArgs, context);
|
|
327
410
|
} catch (e) {
|
|
328
411
|
if (e.code === "MODULE_NOT_FOUND") {
|
|
329
|
-
console.log(
|
|
330
|
-
console.log(
|
|
412
|
+
console.log(`\n ${c.red}${sym.cross}${c.reset} Feature '${subCmd}' is not available in this version.\n`);
|
|
413
|
+
console.log(` ${c.dim}Try updating: npm update -g @vibecheckai/cli${c.reset}\n`);
|
|
331
414
|
} else {
|
|
332
|
-
console.error(
|
|
415
|
+
console.error(`\n ${c.red}${sym.cross}${c.reset} Error running labs ${subCmd}: ${e.message}`);
|
|
333
416
|
if (process.env.VIBECHECK_DEBUG) {
|
|
334
417
|
console.error(c.dim + e.stack + c.reset);
|
|
335
418
|
}
|
|
@@ -338,4 +421,4 @@ async function runLabs(args = []) {
|
|
|
338
421
|
}
|
|
339
422
|
}
|
|
340
423
|
|
|
341
|
-
module.exports = { runLabs, LABS_FEATURES };
|
|
424
|
+
module.exports = { runLabs, LABS_FEATURES };
|