@vibecheckai/cli 3.4.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.
Files changed (228) hide show
  1. package/bin/registry.js +154 -338
  2. package/bin/runners/context/generators/mcp.js +13 -15
  3. package/bin/runners/context/proof-context.js +1 -248
  4. package/bin/runners/lib/analysis-core.js +180 -198
  5. package/bin/runners/lib/analyzers.js +223 -1669
  6. package/bin/runners/lib/cli-output.js +210 -242
  7. package/bin/runners/lib/detectors-v2.js +785 -547
  8. package/bin/runners/lib/entitlements-v2.js +458 -96
  9. package/bin/runners/lib/error-handler.js +9 -16
  10. package/bin/runners/lib/global-flags.js +0 -37
  11. package/bin/runners/lib/route-truth.js +322 -1167
  12. package/bin/runners/lib/scan-output.js +469 -448
  13. package/bin/runners/lib/ship-output.js +27 -280
  14. package/bin/runners/lib/terminal-ui.js +733 -231
  15. package/bin/runners/lib/truth.js +321 -1004
  16. package/bin/runners/lib/unified-output.js +158 -162
  17. package/bin/runners/lib/upsell.js +204 -104
  18. package/bin/runners/runAllowlist.js +324 -0
  19. package/bin/runners/runAuth.js +95 -324
  20. package/bin/runners/runCheckpoint.js +21 -39
  21. package/bin/runners/runContext.js +24 -136
  22. package/bin/runners/runDoctor.js +67 -115
  23. package/bin/runners/runEvidencePack.js +219 -0
  24. package/bin/runners/runFix.js +5 -6
  25. package/bin/runners/runGuard.js +118 -212
  26. package/bin/runners/runInit.js +2 -14
  27. package/bin/runners/runInstall.js +281 -0
  28. package/bin/runners/runLabs.js +341 -0
  29. package/bin/runners/runMcp.js +52 -130
  30. package/bin/runners/runPolish.js +20 -43
  31. package/bin/runners/runProve.js +3 -13
  32. package/bin/runners/runReality.js +0 -14
  33. package/bin/runners/runReport.js +2 -3
  34. package/bin/runners/runScan.js +44 -511
  35. package/bin/runners/runShip.js +14 -28
  36. package/bin/runners/runValidate.js +2 -19
  37. package/bin/runners/runWatch.js +54 -118
  38. package/bin/vibecheck.js +41 -148
  39. package/mcp-server/ARCHITECTURE.md +339 -0
  40. package/mcp-server/__tests__/cache.test.ts +313 -0
  41. package/mcp-server/__tests__/executor.test.ts +239 -0
  42. package/mcp-server/__tests__/fixtures/exclusion-test/.cache/webpack/cache.pack +1 -0
  43. package/mcp-server/__tests__/fixtures/exclusion-test/.next/server/chunk.js +3 -0
  44. package/mcp-server/__tests__/fixtures/exclusion-test/.turbo/cache.json +3 -0
  45. package/mcp-server/__tests__/fixtures/exclusion-test/.venv/lib/env.py +3 -0
  46. package/mcp-server/__tests__/fixtures/exclusion-test/dist/bundle.js +3 -0
  47. package/mcp-server/__tests__/fixtures/exclusion-test/package.json +5 -0
  48. package/mcp-server/__tests__/fixtures/exclusion-test/src/app.ts +5 -0
  49. package/mcp-server/__tests__/fixtures/exclusion-test/venv/lib/config.py +4 -0
  50. package/mcp-server/__tests__/ids.test.ts +345 -0
  51. package/mcp-server/__tests__/integration/tools.test.ts +410 -0
  52. package/mcp-server/__tests__/registry.test.ts +365 -0
  53. package/mcp-server/__tests__/sandbox.test.ts +323 -0
  54. package/mcp-server/__tests__/schemas.test.ts +372 -0
  55. package/mcp-server/benchmarks/run-benchmarks.ts +304 -0
  56. package/mcp-server/examples/doctor.request.json +14 -0
  57. package/mcp-server/examples/doctor.response.json +53 -0
  58. package/mcp-server/examples/error.response.json +15 -0
  59. package/mcp-server/examples/scan.request.json +14 -0
  60. package/mcp-server/examples/scan.response.json +108 -0
  61. package/mcp-server/handlers/tool-handler.ts +671 -0
  62. package/mcp-server/index-v3.ts +293 -0
  63. package/mcp-server/index.js +1072 -1573
  64. package/mcp-server/index.old.js +4137 -0
  65. package/mcp-server/lib/cache.ts +341 -0
  66. package/mcp-server/lib/errors.ts +346 -0
  67. package/mcp-server/lib/executor.ts +792 -0
  68. package/mcp-server/lib/ids.ts +238 -0
  69. package/mcp-server/lib/logger.ts +368 -0
  70. package/mcp-server/lib/metrics.ts +365 -0
  71. package/mcp-server/lib/sandbox.ts +337 -0
  72. package/mcp-server/lib/validator.ts +229 -0
  73. package/mcp-server/package-lock.json +165 -0
  74. package/mcp-server/package.json +32 -7
  75. package/mcp-server/premium-tools.js +2 -2
  76. package/mcp-server/registry/tools.json +476 -0
  77. package/mcp-server/schemas/error-envelope.schema.json +125 -0
  78. package/mcp-server/schemas/finding.schema.json +167 -0
  79. package/mcp-server/schemas/report-artifact.schema.json +88 -0
  80. package/mcp-server/schemas/run-request.schema.json +75 -0
  81. package/mcp-server/schemas/verdict.schema.json +168 -0
  82. package/mcp-server/tier-auth.d.ts +71 -0
  83. package/mcp-server/tier-auth.js +371 -183
  84. package/mcp-server/truth-context.js +90 -131
  85. package/mcp-server/truth-firewall-tools.js +1000 -1611
  86. package/mcp-server/tsconfig.json +34 -0
  87. package/mcp-server/vibecheck-tools.js +2 -2
  88. package/mcp-server/vitest.config.ts +16 -0
  89. package/package.json +3 -4
  90. package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +0 -474
  91. package/bin/runners/lib/agent-firewall/change-packet/builder.js +0 -488
  92. package/bin/runners/lib/agent-firewall/change-packet/schema.json +0 -228
  93. package/bin/runners/lib/agent-firewall/change-packet/store.js +0 -200
  94. package/bin/runners/lib/agent-firewall/claims/claim-types.js +0 -21
  95. package/bin/runners/lib/agent-firewall/claims/extractor.js +0 -303
  96. package/bin/runners/lib/agent-firewall/claims/patterns.js +0 -24
  97. package/bin/runners/lib/agent-firewall/critic/index.js +0 -151
  98. package/bin/runners/lib/agent-firewall/critic/judge.js +0 -432
  99. package/bin/runners/lib/agent-firewall/critic/prompts.js +0 -305
  100. package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +0 -88
  101. package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +0 -75
  102. package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +0 -127
  103. package/bin/runners/lib/agent-firewall/evidence/resolver.js +0 -102
  104. package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +0 -213
  105. package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +0 -145
  106. package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +0 -19
  107. package/bin/runners/lib/agent-firewall/fs-hook/installer.js +0 -87
  108. package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +0 -184
  109. package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +0 -163
  110. package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +0 -107
  111. package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +0 -68
  112. package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +0 -66
  113. package/bin/runners/lib/agent-firewall/interceptor/base.js +0 -304
  114. package/bin/runners/lib/agent-firewall/interceptor/cursor.js +0 -35
  115. package/bin/runners/lib/agent-firewall/interceptor/vscode.js +0 -35
  116. package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +0 -34
  117. package/bin/runners/lib/agent-firewall/lawbook/distributor.js +0 -465
  118. package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +0 -604
  119. package/bin/runners/lib/agent-firewall/lawbook/index.js +0 -304
  120. package/bin/runners/lib/agent-firewall/lawbook/registry.js +0 -514
  121. package/bin/runners/lib/agent-firewall/lawbook/schema.js +0 -420
  122. package/bin/runners/lib/agent-firewall/logger.js +0 -141
  123. package/bin/runners/lib/agent-firewall/policy/default-policy.json +0 -90
  124. package/bin/runners/lib/agent-firewall/policy/engine.js +0 -103
  125. package/bin/runners/lib/agent-firewall/policy/loader.js +0 -451
  126. package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +0 -50
  127. package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +0 -50
  128. package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +0 -86
  129. package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +0 -162
  130. package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +0 -189
  131. package/bin/runners/lib/agent-firewall/policy/rules/scope.js +0 -93
  132. package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +0 -57
  133. package/bin/runners/lib/agent-firewall/policy/schema.json +0 -183
  134. package/bin/runners/lib/agent-firewall/policy/verdict.js +0 -54
  135. package/bin/runners/lib/agent-firewall/proposal/extractor.js +0 -394
  136. package/bin/runners/lib/agent-firewall/proposal/index.js +0 -212
  137. package/bin/runners/lib/agent-firewall/proposal/schema.js +0 -251
  138. package/bin/runners/lib/agent-firewall/proposal/validator.js +0 -386
  139. package/bin/runners/lib/agent-firewall/reality/index.js +0 -332
  140. package/bin/runners/lib/agent-firewall/reality/state.js +0 -625
  141. package/bin/runners/lib/agent-firewall/reality/watcher.js +0 -322
  142. package/bin/runners/lib/agent-firewall/risk/index.js +0 -173
  143. package/bin/runners/lib/agent-firewall/risk/scorer.js +0 -328
  144. package/bin/runners/lib/agent-firewall/risk/thresholds.js +0 -321
  145. package/bin/runners/lib/agent-firewall/risk/vectors.js +0 -421
  146. package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +0 -472
  147. package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +0 -346
  148. package/bin/runners/lib/agent-firewall/simulator/index.js +0 -181
  149. package/bin/runners/lib/agent-firewall/simulator/route-validator.js +0 -380
  150. package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +0 -661
  151. package/bin/runners/lib/agent-firewall/time-machine/index.js +0 -267
  152. package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +0 -436
  153. package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +0 -490
  154. package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +0 -530
  155. package/bin/runners/lib/agent-firewall/truthpack/index.js +0 -67
  156. package/bin/runners/lib/agent-firewall/truthpack/loader.js +0 -137
  157. package/bin/runners/lib/agent-firewall/unblock/planner.js +0 -337
  158. package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +0 -118
  159. package/bin/runners/lib/api-client.js +0 -269
  160. package/bin/runners/lib/authority-badge.js +0 -425
  161. package/bin/runners/lib/engines/accessibility-engine.js +0 -190
  162. package/bin/runners/lib/engines/api-consistency-engine.js +0 -162
  163. package/bin/runners/lib/engines/ast-cache.js +0 -99
  164. package/bin/runners/lib/engines/code-quality-engine.js +0 -255
  165. package/bin/runners/lib/engines/console-logs-engine.js +0 -115
  166. package/bin/runners/lib/engines/cross-file-analysis-engine.js +0 -268
  167. package/bin/runners/lib/engines/dead-code-engine.js +0 -198
  168. package/bin/runners/lib/engines/deprecated-api-engine.js +0 -226
  169. package/bin/runners/lib/engines/empty-catch-engine.js +0 -150
  170. package/bin/runners/lib/engines/file-filter.js +0 -131
  171. package/bin/runners/lib/engines/hardcoded-secrets-engine.js +0 -251
  172. package/bin/runners/lib/engines/mock-data-engine.js +0 -272
  173. package/bin/runners/lib/engines/parallel-processor.js +0 -71
  174. package/bin/runners/lib/engines/performance-issues-engine.js +0 -265
  175. package/bin/runners/lib/engines/security-vulnerabilities-engine.js +0 -243
  176. package/bin/runners/lib/engines/todo-fixme-engine.js +0 -115
  177. package/bin/runners/lib/engines/type-aware-engine.js +0 -152
  178. package/bin/runners/lib/engines/unsafe-regex-engine.js +0 -225
  179. package/bin/runners/lib/engines/vibecheck-engines/README.md +0 -53
  180. package/bin/runners/lib/engines/vibecheck-engines/index.js +0 -15
  181. package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +0 -164
  182. package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +0 -291
  183. package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +0 -83
  184. package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +0 -198
  185. package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +0 -275
  186. package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +0 -167
  187. package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +0 -217
  188. package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +0 -139
  189. package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +0 -140
  190. package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +0 -164
  191. package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +0 -234
  192. package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +0 -217
  193. package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +0 -78
  194. package/bin/runners/lib/engines/vibecheck-engines/package.json +0 -13
  195. package/bin/runners/lib/exit-codes.js +0 -275
  196. package/bin/runners/lib/fingerprint.js +0 -377
  197. package/bin/runners/lib/help-formatter.js +0 -413
  198. package/bin/runners/lib/logger.js +0 -38
  199. package/bin/runners/lib/ship-output-enterprise.js +0 -239
  200. package/bin/runners/lib/unified-cli-output.js +0 -604
  201. package/bin/runners/runAgent.d.ts +0 -5
  202. package/bin/runners/runAgent.js +0 -161
  203. package/bin/runners/runApprove.js +0 -1200
  204. package/bin/runners/runClassify.js +0 -859
  205. package/bin/runners/runContext.d.ts +0 -4
  206. package/bin/runners/runFirewall.d.ts +0 -5
  207. package/bin/runners/runFirewall.js +0 -134
  208. package/bin/runners/runFirewallHook.d.ts +0 -5
  209. package/bin/runners/runFirewallHook.js +0 -56
  210. package/bin/runners/runPolish.d.ts +0 -4
  211. package/bin/runners/runProof.zip +0 -0
  212. package/bin/runners/runTruth.d.ts +0 -5
  213. package/bin/runners/runTruth.js +0 -101
  214. package/mcp-server/HARDENING_SUMMARY.md +0 -299
  215. package/mcp-server/agent-firewall-interceptor.js +0 -500
  216. package/mcp-server/authority-tools.js +0 -569
  217. package/mcp-server/conductor/conflict-resolver.js +0 -588
  218. package/mcp-server/conductor/execution-planner.js +0 -544
  219. package/mcp-server/conductor/index.js +0 -377
  220. package/mcp-server/conductor/lock-manager.js +0 -615
  221. package/mcp-server/conductor/request-queue.js +0 -550
  222. package/mcp-server/conductor/session-manager.js +0 -500
  223. package/mcp-server/conductor/tools.js +0 -510
  224. package/mcp-server/lib/api-client.cjs +0 -13
  225. package/mcp-server/lib/logger.cjs +0 -30
  226. package/mcp-server/logger.js +0 -173
  227. package/mcp-server/tools-v3.js +0 -706
  228. package/mcp-server/vibecheck-mcp-server-3.2.0.tgz +0 -0
package/bin/registry.js CHANGED
@@ -1,43 +1,42 @@
1
1
  /**
2
- * Vibecheck CLI Command Registry
2
+ * Vibecheck CLI Command Registry (LOCKED)
3
3
  *
4
4
  * Single source of truth for the public CLI surface.
5
5
  * If it isn't here, it does not exist.
6
- *
7
- * Simple 2-tier model:
8
- * - FREE ($0): Inspect & Observe
9
- * - PRO ($69/mo): Fix, Prove & Enforce
10
6
  */
11
7
 
12
8
  "use strict";
13
9
 
14
10
  // ─────────────────────────────────────────────────────────────
15
- // CLI COMMANDS (2-tier: FREE / PRO)
11
+ // CORE 13 + APPROVED EXTRAS (locked surface area)
16
12
  // ─────────────────────────────────────────────────────────────
17
13
  const ALLOWED_COMMANDS = new Set([
18
- // FREE (10) - Inspect & Observe
19
- "init", // one-time setup
20
- "doctor", // health check
21
- "watch", // continuous mode
22
- "scan", // static analysis
23
- "report", // generate reports
24
- "context", // generate IDE rules
25
- "classify", // Authority: inventory (read-only)
26
- "login", // authenticate
27
- "logout", // remove credentials
28
- "whoami", // show current user
29
-
30
- // PRO (9) - Fix, Prove & Enforce
31
- "ship", // verdict engine (GO/NO-GO)
32
- "fix", // AI-powered fixes
33
- "prove", // runtime proof
34
- "reality", // browser verification
35
- "gate", // CI/CD enforcement
36
- "guard", // AI guardrails
37
- "mcp", // MCP server
38
- "checkpoint", // baseline comparison
39
- "approve", // Authority: verdicts
40
- "polish", // production polish
14
+ // Core 13
15
+ "init",
16
+ "doctor",
17
+ "scan",
18
+ "report",
19
+ "fix",
20
+ "watch",
21
+ "checkpoint",
22
+ "polish",
23
+ "ship",
24
+ "prove", // replaces ctx
25
+ "reality", // runtime crawl
26
+ "context",
27
+ "guard",
28
+
29
+ // Proof artifacts (new)
30
+ "evidence-pack",
31
+ "allowlist",
32
+
33
+ // Approved extras
34
+ "mcp",
35
+ "login",
36
+ "logout",
37
+ "whoami",
38
+ "ai-test",
39
+ "labs",
41
40
  ]);
42
41
 
43
42
  function assertAllowedOnly(obj) {
@@ -48,424 +47,241 @@ function assertAllowedOnly(obj) {
48
47
  }
49
48
 
50
49
  // ─────────────────────────────────────────────────────────────
51
- // COMMANDS - 2-Tier: FREE and PRO ($69/mo)
50
+ // COMMANDS (ALLOWED ONLY)
52
51
  // ─────────────────────────────────────────────────────────────
53
52
  const COMMANDS = {
54
- // ══════════════════════════════════════════════════════════════
55
- // FREE TIER - Inspect & Observe
56
- // ══════════════════════════════════════════════════════════════
57
-
53
+ // ── SETUP ───────────────────────────────────────────────────
58
54
  init: {
59
55
  description: "One-time setup (config + contracts + scripts)",
60
- longDescription: "Initialize vibecheck in your project. Creates configuration files, sets up IDE rules, and optionally connects to the dashboard.",
61
56
  tier: "free",
62
57
  category: "setup",
63
58
  aliases: ["setup", "configure"],
64
59
  runner: () => require("./runners/runInit").runInit,
65
- examples: [
66
- { command: "vibecheck init", description: "Interactive setup wizard" },
67
- { command: "vibecheck init --local", description: "Quick local-only setup" },
68
- { command: "vibecheck init --quick", description: "Non-interactive defaults" },
69
- ],
70
- related: ["doctor", "scan"],
71
60
  },
72
61
 
73
62
  doctor: {
74
63
  description: "Environment + dependency + config health check",
75
- longDescription: "Comprehensive diagnostics for your development environment.",
76
64
  tier: "free",
77
65
  category: "setup",
78
66
  aliases: ["health", "diag"],
79
67
  runner: () => require("./runners/runDoctor").runDoctor,
80
- examples: [
81
- { command: "vibecheck doctor", description: "Run all health checks" },
82
- { command: "vibecheck doctor --fix", description: "Auto-fix detected issues" },
83
- { command: "vibecheck doctor --json", description: "Output as JSON" },
84
- ],
85
- related: ["init", "scan"],
86
68
  },
87
69
 
88
70
  watch: {
89
71
  description: "Continuous mode - re-runs on changes",
90
- longDescription: "File watcher that automatically re-runs scans when your code changes.",
91
72
  tier: "free",
92
73
  category: "setup",
93
74
  aliases: ["w", "dev"],
94
75
  runner: () => require("./runners/runWatch").runWatch,
95
- examples: [
96
- { command: "vibecheck watch", description: "Start watching" },
97
- { command: "vibecheck watch --path ./src", description: "Watch specific directory" },
98
- ],
99
- related: ["scan"],
100
76
  },
101
77
 
78
+ // ── ANALYSIS ────────────────────────────────────────────────
79
+ checkpoint: {
80
+ description: "Compare baseline vs current, hallucination scoring",
81
+ tier: "free",
82
+ category: "analysis",
83
+ aliases: ["cp", "compare", "diff"],
84
+ caps: "basic on FREE, hallucination scoring on PRO",
85
+ runner: () => require("./runners/runCheckpoint").runCheckpoint,
86
+ },
87
+
88
+ // ── PROOF LOOP ──────────────────────────────────────────────
102
89
  scan: {
103
- description: "Static code analysis; use --allowlist for false positives",
104
- longDescription: "Scan your codebase for route integrity issues, security vulnerabilities, and code quality problems.",
90
+ description: "Route integrity & code analysis scanner",
105
91
  tier: "free",
106
92
  category: "proof",
107
93
  aliases: ["s", "check"],
108
94
  runner: () => require("./runners/runScan").runScan,
109
- examples: [
110
- { command: "vibecheck scan", description: "Quick scan" },
111
- { command: "vibecheck scan --profile full", description: "Full scan" },
112
- { command: "vibecheck scan --allowlist list", description: "View suppressed findings" },
113
- ],
114
- related: ["ship", "fix", "report"],
115
95
  },
116
96
 
117
97
  report: {
118
98
  description: "Generate HTML/MD/SARIF reports",
119
- longDescription: "Create shareable reports from scan results.",
120
99
  tier: "free",
121
100
  category: "output",
101
+ caps: "HTML/MD only on FREE",
122
102
  aliases: ["html", "artifact"],
123
103
  runner: () => require("./runners/runReport").runReport,
124
- examples: [
125
- { command: "vibecheck report", description: "Generate HTML report" },
126
- { command: "vibecheck report --format md", description: "Markdown report" },
127
- { command: "vibecheck report --format sarif", description: "SARIF for GitHub" },
128
- ],
129
- related: ["scan"],
130
- },
131
-
132
- context: {
133
- description: "Generate IDE rules (.cursorrules, MDC, Copilot)",
134
- longDescription: "Generate project-aware AI coding rules for your IDE.",
135
- tier: "free",
136
- category: "truth",
137
- aliases: ["rules", "ai-rules", "mdc", "ctx"],
138
- runner: () => require("./runners/runContext").runContext,
139
- examples: [
140
- { command: "vibecheck context", description: "Generate all IDE rules" },
141
- { command: "vibecheck context --format cursor", description: ".cursorrules only" },
142
- ],
143
- related: ["scan", "guard"],
144
- },
145
-
146
- classify: {
147
- description: "Inventory authority - duplication & legacy code maps",
148
- longDescription: "Read-only inventory of your codebase including duplication maps and legacy code detection.",
149
- tier: "free",
150
- category: "authority",
151
- aliases: ["inventory", "audit"],
152
- runner: () => require("./runners/runClassify").runClassify,
153
- examples: [
154
- { command: "vibecheck classify", description: "Quick inventory" },
155
- { command: "vibecheck classify --json", description: "JSON output" },
156
- ],
157
- related: ["approve", "scan"],
158
104
  },
159
105
 
160
- login: {
161
- description: "Authenticate with API key",
162
- longDescription: "Connect your CLI to the vibecheck API.",
163
- tier: "free",
164
- category: "account",
165
- aliases: ["auth", "signin"],
166
- runner: () => require("./runners/runAuth").runLogin,
167
- skipAuth: true,
168
- examples: [
169
- { command: "vibecheck login", description: "Interactive login" },
170
- { command: "vibecheck login --key YOUR_API_KEY", description: "Login with key" },
171
- ],
172
- related: ["logout", "whoami"],
173
- },
174
-
175
- logout: {
176
- description: "Remove stored credentials",
106
+ fix: {
107
+ description: "AI-powered auto-fix",
177
108
  tier: "free",
178
- category: "account",
179
- aliases: ["signout"],
180
- runner: () => require("./runners/runAuth").runLogout,
181
- skipAuth: true,
182
- examples: [
183
- { command: "vibecheck logout", description: "Clear credentials" },
184
- ],
185
- related: ["login", "whoami"],
109
+ category: "proof",
110
+ caps: "--plan-only on FREE",
111
+ aliases: ["f", "repair"],
112
+ runner: () => require("./runners/runFix").runFix,
186
113
  },
187
114
 
188
- whoami: {
189
- description: "Show current user and plan",
115
+ reality: {
116
+ description: "Runtime proof (browser crawl)",
190
117
  tier: "free",
191
- category: "account",
192
- aliases: ["me", "user"],
193
- runner: () => require("./runners/runAuth").runWhoami,
194
- skipAuth: true,
195
- examples: [
196
- { command: "vibecheck whoami", description: "Show user info" },
197
- ],
198
- related: ["login", "logout"],
118
+ category: "proof",
119
+ caps: "preview mode on FREE (5 pages, no auth)",
120
+ aliases: ["r", "test", "e2e"],
121
+ runner: () => async (args, ctx) => {
122
+ const { runRuntime } = require("./runners/runRuntime");
123
+ return await runRuntime(["crawl", ...args], ctx);
124
+ },
199
125
  },
200
126
 
201
- // ══════════════════════════════════════════════════════════════
202
- // PRO TIER ($69/mo) - Fix, Prove & Enforce
203
- // ══════════════════════════════════════════════════════════════
204
-
205
127
  ship: {
206
128
  description: "Verdict engine - SHIP / WARN / BLOCK",
207
- longDescription: "The final word on whether your code is ready to ship. Combines all scan results and generates a clear verdict.",
208
- tier: "pro",
129
+ tier: "free",
209
130
  category: "proof",
210
131
  aliases: ["verdict", "go"],
132
+ caps: "static-only on FREE",
211
133
  runner: () => require("./runners/runShip").runShip,
212
- examples: [
213
- { command: "vibecheck ship", description: "Get shipping verdict" },
214
- { command: "vibecheck ship --strict", description: "Fail on warnings" },
215
- { command: "vibecheck ship --badge", description: "Generate status badge" },
216
- ],
217
- related: ["scan", "prove", "fix"],
218
134
  },
219
135
 
220
- fix: {
221
- description: "AI-powered auto-fix for findings",
222
- longDescription: "Generate AI prompts to fix detected issues. Use --apply to let AI make changes directly.",
136
+ prove: {
137
+ description: "One command reality proof - video + network evidence that your app works",
223
138
  tier: "pro",
224
139
  category: "proof",
225
- aliases: ["f", "repair"],
226
- runner: () => require("./runners/runFix").runFix,
227
- examples: [
228
- { command: "vibecheck fix", description: "Generate fix missions" },
229
- { command: "vibecheck fix --apply", description: "Apply AI fixes" },
230
- { command: "vibecheck fix --loop", description: "Fix loop until clean" },
231
- ],
232
- related: ["scan", "ship"],
140
+ aliases: ["p", "full", "all"],
141
+ caps: "video, trace, HAR recording enabled by default; CI-ready output",
142
+ runner: () => require("./runners/runProve").runProve,
233
143
  },
234
144
 
235
- prove: {
236
- description: "Full proof loop with runtime verification",
237
- longDescription: "Complete verification cycle with runtime testing and evidence generation.",
238
- tier: "pro",
145
+ // ── PROOF ARTIFACTS ─────────────────────────────────────────
146
+ "evidence-pack": {
147
+ description: "Bundle proof artifacts (videos, traces, screenshots) into shareable pack",
148
+ tier: "free",
239
149
  category: "proof",
240
- aliases: ["p", "verify"],
241
- runner: () => require("./runners/runProve").runProve,
242
- examples: [
243
- { command: "vibecheck prove", description: "Run full proof loop" },
244
- { command: "vibecheck prove --url http://localhost:3000", description: "With runtime testing" },
245
- { command: "vibecheck prove --bundle", description: "Generate evidence pack" },
246
- ],
247
- related: ["ship", "reality"],
150
+ aliases: ["pack", "bundle", "evidence"],
151
+ runner: () => require("./runners/runEvidencePack").runEvidencePack,
248
152
  },
249
153
 
250
- reality: {
251
- description: "Browser-based runtime verification",
252
- longDescription: "Verify your app's runtime behavior with Playwright-powered browser testing.",
253
- tier: "pro",
154
+ allowlist: {
155
+ description: "Manage finding allowlist (suppress false positives)",
156
+ tier: "free",
254
157
  category: "proof",
255
- aliases: ["browser", "e2e"],
256
- runner: () => require("./runners/runReality").runReality,
257
- examples: [
258
- { command: "vibecheck reality --url http://localhost:3000", description: "Test localhost" },
259
- { command: "vibecheck reality --auth email:pass", description: "With authentication" },
260
- { command: "vibecheck reality --agent", description: "AI agent testing" },
261
- ],
262
- related: ["prove", "ship"],
158
+ aliases: ["allow", "ignore", "whitelist"],
159
+ runner: () => require("./runners/runAllowlist").runAllowlist,
263
160
  },
264
161
 
265
- gate: {
266
- description: "CI/CD enforcement - fail builds on issues",
267
- longDescription: "Enforce quality gates in your CI/CD pipeline.",
268
- tier: "pro",
269
- category: "automation",
270
- aliases: ["ci", "enforce"],
271
- runner: () => require("./runners/runGuard").runGate,
272
- examples: [
273
- { command: "vibecheck gate", description: "Run CI gate check" },
274
- { command: "vibecheck gate --strict", description: "Strict mode" },
275
- ],
276
- related: ["ship", "scan"],
162
+ // ── QUALITY ────────────────────────────────────────────────
163
+ polish: {
164
+ description: "Production polish analyzer - finds missing essentials",
165
+ tier: "free",
166
+ category: "quality",
167
+ aliases: ["quality", "finalize", "ready"],
168
+ runner: () => require("./runners/runPolish").runPolish,
169
+ },
170
+
171
+ // ── AI TRUTH ───────────────────────────────────────────────
172
+ context: {
173
+ description: "Generate IDE rules (.cursorrules, MDC, Windsurf, Copilot)",
174
+ tier: "free",
175
+ category: "truth",
176
+ aliases: ["rules", "ai-rules", "mdc"],
177
+ runner: () => require("./runners/runContext").runContext,
277
178
  },
278
179
 
279
180
  guard: {
280
181
  description: "AI guardrails - prompt firewall & hallucination checking",
281
- longDescription: "Validate AI-generated code and prompts. Detects prompt injection and verifies claims.",
282
- tier: "pro",
182
+ tier: "free",
283
183
  category: "truth",
284
184
  aliases: ["ai-guard", "firewall", "validate"],
285
185
  runner: () => require("./runners/runGuard").runGuard,
286
- examples: [
287
- { command: "vibecheck guard", description: "Run all guardrail checks" },
288
- { command: "vibecheck guard --claims", description: "Verify AI claims" },
289
- ],
290
- related: ["context", "fix"],
291
186
  },
292
187
 
188
+ // ── AUTOMATION ─────────────────────────────────────────────
293
189
  mcp: {
294
190
  description: "Start MCP server for AI IDEs",
295
- longDescription: "Launch an MCP server for AI IDE integration.",
296
- tier: "pro",
191
+ tier: "starter",
297
192
  category: "automation",
298
193
  aliases: [],
299
194
  runner: () => require("./runners/runMcp").runMcp,
300
- examples: [
301
- { command: "vibecheck mcp", description: "Start MCP server" },
302
- { command: "vibecheck mcp --port 3099", description: "Custom port" },
303
- ],
304
- related: ["context"],
305
195
  },
306
196
 
307
- checkpoint: {
308
- description: "Compare baseline vs current, hallucination scoring",
309
- longDescription: "Track changes between scan runs. Detects new issues, resolved issues, and regressions.",
197
+ "ai-test": {
198
+ description: "AI autonomous test (alias: runtime agent)",
310
199
  tier: "pro",
311
- category: "analysis",
312
- aliases: ["cp", "compare", "diff"],
313
- runner: () => require("./runners/runCheckpoint").runCheckpoint,
314
- examples: [
315
- { command: "vibecheck checkpoint", description: "Compare against baseline" },
316
- { command: "vibecheck checkpoint --set", description: "Save new baseline" },
317
- ],
318
- related: ["scan", "fix"],
200
+ category: "automation",
201
+ aliases: ["ai", "agent"],
202
+ runner: () => async (args, ctx) => {
203
+ const { runRuntime } = require("./runners/runRuntime");
204
+ return await runRuntime(["agent", ...args], ctx);
205
+ },
319
206
  },
320
207
 
321
- approve: {
322
- description: "Authority verdicts - PROCEED/STOP/DEFER with proofs",
323
- longDescription: "Execute authorities to get structured verdicts with proofs.",
324
- tier: "pro",
325
- category: "authority",
326
- aliases: ["auth-verdict", "authority"],
327
- runner: () => require("./runners/runApprove").runApprove,
328
- examples: [
329
- { command: "vibecheck approve safe-consolidation", description: "Run authority" },
330
- { command: "vibecheck approve --list", description: "List authorities" },
331
- ],
332
- related: ["classify", "ship"],
208
+ // ── ACCOUNT (skipAuth) ────────────────────────────────────
209
+ login: {
210
+ description: "Authenticate with API key",
211
+ tier: "free",
212
+ category: "account",
213
+ aliases: ["auth", "signin"],
214
+ runner: () => require("./runners/runAuth").runLogin,
215
+ skipAuth: true,
333
216
  },
334
217
 
335
- polish: {
336
- description: "Production polish - final cleanup before deploy",
337
- longDescription: "Final production readiness checks and cleanup.",
338
- tier: "pro",
339
- category: "proof",
340
- aliases: ["prod", "final"],
341
- runner: () => require("./runners/runPolish").runPolish,
342
- examples: [
343
- { command: "vibecheck polish", description: "Run polish checks" },
344
- ],
345
- related: ["ship", "prove"],
218
+ logout: {
219
+ description: "Remove stored credentials",
220
+ tier: "free",
221
+ category: "account",
222
+ aliases: ["signout"],
223
+ runner: () => require("./runners/runAuth").runLogout,
224
+ skipAuth: true,
346
225
  },
347
- };
348
226
 
349
- // Validate that only allowed commands are defined
350
- assertAllowedOnly(COMMANDS);
351
-
352
- // ─────────────────────────────────────────────────────────────
353
- // TIER HELPERS
354
- // ─────────────────────────────────────────────────────────────
355
- function isPro(tier) {
356
- return tier === "pro";
357
- }
358
-
359
- function requiresPro(commandName) {
360
- const cmd = COMMANDS[commandName];
361
- return cmd && cmd.tier === "pro";
362
- }
227
+ whoami: {
228
+ description: "Show current user and plan",
229
+ tier: "free",
230
+ category: "account",
231
+ aliases: ["me", "user"],
232
+ runner: () => require("./runners/runAuth").runWhoami,
233
+ skipAuth: true,
234
+ },
363
235
 
364
- function getFreeCommands() {
365
- return Object.entries(COMMANDS)
366
- .filter(([, cmd]) => cmd.tier === "free")
367
- .map(([name]) => name);
368
- }
236
+ // ── EXTRAS ────────────────────────────────────────────────
237
+ labs: {
238
+ description: "Experimental features",
239
+ tier: "free",
240
+ category: "extras",
241
+ aliases: ["experimental", "beta"],
242
+ runner: () => require("./runners/runLabs").runLabs,
243
+ },
244
+ };
369
245
 
370
- function getProCommands() {
371
- return Object.entries(COMMANDS)
372
- .filter(([, cmd]) => cmd.tier === "pro")
373
- .map(([name]) => name);
374
- }
246
+ assertAllowedOnly(COMMANDS);
375
247
 
376
248
  // ─────────────────────────────────────────────────────────────
377
- // BUILD DERIVED DATA STRUCTURES
249
+ // DERIVED MAPS
378
250
  // ─────────────────────────────────────────────────────────────
379
-
380
- // Build alias map: { alias -> command }
381
251
  const ALIAS_MAP = {};
382
- for (const [cmdName, cmd] of Object.entries(COMMANDS)) {
383
- if (cmd.aliases) {
384
- for (const alias of cmd.aliases) {
385
- ALIAS_MAP[alias] = cmdName;
386
- }
387
- }
252
+ for (const [cmd, def] of Object.entries(COMMANDS)) {
253
+ for (const alias of def.aliases || []) ALIAS_MAP[alias] = cmd;
388
254
  }
389
255
 
390
- // All command names including aliases
391
- const ALL_COMMANDS = new Set([
256
+ const ALL_COMMANDS = [
392
257
  ...Object.keys(COMMANDS),
393
- ...Object.keys(ALIAS_MAP),
394
- ]);
258
+ ...Object.values(COMMANDS).flatMap((c) => c.aliases || []),
259
+ ];
395
260
 
396
261
  // ─────────────────────────────────────────────────────────────
397
- // GETTERS
262
+ // RUNNER LOADER
398
263
  // ─────────────────────────────────────────────────────────────
264
+ function getRunner(cmd, styles = {}) {
265
+ const def = COMMANDS[cmd];
266
+ if (!def) return null;
267
+
268
+ const red = styles.red || "";
269
+ const reset = styles.reset || "";
270
+ const errorSym = styles.errorSymbol || "✗";
399
271
 
400
- function getRunner(cmd, opts = {}) {
401
- // Resolve alias to canonical command
402
- const canonicalCmd = ALIAS_MAP[cmd] || cmd;
403
- const def = COMMANDS[canonicalCmd];
404
-
405
- if (!def) {
406
- return null;
407
- }
408
-
409
- if (!def.runner) {
410
- return null;
411
- }
412
-
413
272
  try {
414
273
  return def.runner();
415
274
  } catch (e) {
416
- if (opts.red && opts.reset) {
417
- console.error(`${opts.red}${opts.errorSymbol || '×'} Failed to load runner for ${cmd}: ${e.message}${opts.reset}`);
418
- }
419
- return null;
420
- }
421
- }
422
-
423
- function getCommand(name) {
424
- // Check direct name
425
- if (COMMANDS[name]) return COMMANDS[name];
426
-
427
- // Check alias map
428
- const canonical = ALIAS_MAP[name];
429
- if (canonical && COMMANDS[canonical]) {
430
- return { ...COMMANDS[canonical], _resolvedFrom: name, _canonicalName: canonical };
275
+ return async () => {
276
+ console.error(`${red}${errorSym}${reset} Failed to load ${cmd}: ${e.message}`);
277
+ return 1;
278
+ };
431
279
  }
432
-
433
- return null;
434
280
  }
435
281
 
436
- function resolveCommand(name) {
437
- return ALIAS_MAP[name] || name;
438
- }
439
-
440
- // ─────────────────────────────────────────────────────────────
441
- // EXPORTS
442
- // ─────────────────────────────────────────────────────────────
443
282
  module.exports = {
444
- // Core data
445
283
  COMMANDS,
446
- ALLOWED_COMMANDS,
447
284
  ALIAS_MAP,
448
285
  ALL_COMMANDS,
449
-
450
- // Tier helpers
451
- isPro,
452
- requiresPro,
453
- getFreeCommands,
454
- getProCommands,
455
-
456
- // Getters
457
286
  getRunner,
458
- getCommand,
459
- resolveCommand,
460
- listCommands: () => Object.keys(COMMANDS),
461
-
462
- getCommandsByTier: (tier) =>
463
- Object.entries(COMMANDS)
464
- .filter(([, cmd]) => cmd.tier === tier)
465
- .map(([name, cmd]) => ({ name, ...cmd })),
466
-
467
- getCommandsByCategory: (category) =>
468
- Object.entries(COMMANDS)
469
- .filter(([, cmd]) => cmd.category === category)
470
- .map(([name, cmd]) => ({ name, ...cmd })),
471
287
  };