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