@vibecheckai/cli 2.8.2 → 3.0.0

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 (454) hide show
  1. package/README.md +8 -8
  2. package/bin/_deprecations.js +35 -0
  3. package/bin/_router.js +46 -0
  4. package/bin/cli-hygiene.js +241 -0
  5. package/bin/guardrail.js +834 -0
  6. package/bin/runners/cli-utils.js +1070 -0
  7. package/bin/runners/context/ai-task-decomposer.js +337 -0
  8. package/bin/runners/context/analyzer.js +462 -0
  9. package/bin/runners/context/api-contracts.js +427 -0
  10. package/bin/runners/context/context-diff.js +342 -0
  11. package/bin/runners/context/context-pruner.js +291 -0
  12. package/bin/runners/context/dependency-graph.js +414 -0
  13. package/bin/runners/context/generators/claude.js +107 -0
  14. package/bin/runners/context/generators/codex.js +108 -0
  15. package/bin/runners/context/generators/copilot.js +119 -0
  16. package/bin/runners/context/generators/cursor.js +514 -0
  17. package/bin/runners/context/generators/mcp.js +151 -0
  18. package/bin/runners/context/generators/windsurf.js +180 -0
  19. package/bin/runners/context/git-context.js +302 -0
  20. package/bin/runners/context/index.js +1042 -0
  21. package/bin/runners/context/insights.js +173 -0
  22. package/bin/runners/context/mcp-server/generate-rules.js +337 -0
  23. package/bin/runners/context/mcp-server/index.js +1176 -0
  24. package/bin/runners/context/mcp-server/package.json +24 -0
  25. package/bin/runners/context/memory.js +200 -0
  26. package/bin/runners/context/monorepo.js +215 -0
  27. package/bin/runners/context/multi-repo-federation.js +404 -0
  28. package/bin/runners/context/patterns.js +253 -0
  29. package/bin/runners/context/proof-context.js +972 -0
  30. package/bin/runners/context/security-scanner.js +303 -0
  31. package/bin/runners/context/semantic-search.js +350 -0
  32. package/bin/runners/context/shared.js +264 -0
  33. package/bin/runners/context/team-conventions.js +310 -0
  34. package/bin/runners/lib/ai-bridge.js +416 -0
  35. package/bin/runners/lib/analysis-core.js +271 -0
  36. package/bin/runners/lib/analyzers.js +541 -0
  37. package/bin/runners/lib/audit-bridge.js +391 -0
  38. package/bin/runners/lib/auth-truth.js +193 -0
  39. package/bin/runners/lib/auth.js +215 -0
  40. package/bin/runners/lib/backup.js +62 -0
  41. package/bin/runners/lib/billing.js +107 -0
  42. package/bin/runners/lib/claims.js +118 -0
  43. package/bin/runners/lib/cli-ui.js +540 -0
  44. package/bin/runners/lib/compliance-bridge-new.js +0 -0
  45. package/bin/runners/lib/compliance-bridge.js +165 -0
  46. package/bin/runners/lib/contracts/auth-contract.js +194 -0
  47. package/bin/runners/lib/contracts/env-contract.js +178 -0
  48. package/bin/runners/lib/contracts/external-contract.js +198 -0
  49. package/bin/runners/lib/contracts/guard.js +168 -0
  50. package/bin/runners/lib/contracts/index.js +89 -0
  51. package/bin/runners/lib/contracts/plan-validator.js +311 -0
  52. package/bin/runners/lib/contracts/route-contract.js +192 -0
  53. package/bin/runners/lib/detect.js +89 -0
  54. package/bin/runners/lib/doctor/autofix.js +254 -0
  55. package/bin/runners/lib/doctor/index.js +37 -0
  56. package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
  57. package/bin/runners/lib/doctor/modules/index.js +46 -0
  58. package/bin/runners/lib/doctor/modules/network.js +250 -0
  59. package/bin/runners/lib/doctor/modules/project.js +312 -0
  60. package/bin/runners/lib/doctor/modules/runtime.js +224 -0
  61. package/bin/runners/lib/doctor/modules/security.js +348 -0
  62. package/bin/runners/lib/doctor/modules/system.js +213 -0
  63. package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
  64. package/bin/runners/lib/doctor/reporter.js +262 -0
  65. package/bin/runners/lib/doctor/service.js +262 -0
  66. package/bin/runners/lib/doctor/types.js +113 -0
  67. package/bin/runners/lib/doctor/ui.js +263 -0
  68. package/bin/runners/lib/doctor-enhanced.js +233 -0
  69. package/bin/runners/lib/doctor-v2.js +608 -0
  70. package/bin/runners/lib/enforcement.js +72 -0
  71. package/bin/runners/lib/enterprise-detect.js +603 -0
  72. package/bin/runners/lib/enterprise-init.js +942 -0
  73. package/bin/runners/lib/entitlements-v2.js +381 -0
  74. package/bin/runners/lib/entitlements.generated.js +0 -0
  75. package/bin/runners/lib/entitlements.js +332 -0
  76. package/bin/runners/lib/env-template.js +66 -0
  77. package/bin/runners/lib/env.js +189 -0
  78. package/bin/runners/lib/error-handler.js +320 -0
  79. package/bin/runners/lib/firewall-prompt.js +50 -0
  80. package/bin/runners/lib/graph/graph-builder.js +265 -0
  81. package/bin/runners/lib/graph/html-renderer.js +413 -0
  82. package/bin/runners/lib/graph/index.js +32 -0
  83. package/bin/runners/lib/graph/runtime-collector.js +215 -0
  84. package/bin/runners/lib/graph/static-extractor.js +518 -0
  85. package/bin/runners/lib/init-wizard.js +308 -0
  86. package/bin/runners/lib/json-output.js +76 -0
  87. package/bin/runners/lib/llm.js +75 -0
  88. package/bin/runners/lib/meter.js +61 -0
  89. package/bin/runners/lib/missions/evidence.js +126 -0
  90. package/bin/runners/lib/missions/plan.js +69 -0
  91. package/bin/runners/lib/missions/templates.js +147 -0
  92. package/bin/runners/lib/patch.js +40 -0
  93. package/bin/runners/lib/permissions/auth-model.js +213 -0
  94. package/bin/runners/lib/permissions/idor-prover.js +205 -0
  95. package/bin/runners/lib/permissions/index.js +45 -0
  96. package/bin/runners/lib/permissions/matrix-builder.js +198 -0
  97. package/bin/runners/lib/pkgjson.js +28 -0
  98. package/bin/runners/lib/preflight.js +142 -0
  99. package/bin/runners/lib/reality-findings.js +84 -0
  100. package/bin/runners/lib/redact.js +29 -0
  101. package/bin/runners/lib/replay/capsule-manager.js +154 -0
  102. package/bin/runners/lib/replay/index.js +263 -0
  103. package/bin/runners/lib/replay/player.js +348 -0
  104. package/bin/runners/lib/replay/recorder.js +331 -0
  105. package/bin/runners/lib/report-engine.js +447 -0
  106. package/bin/runners/lib/report-html.js +1117 -0
  107. package/bin/runners/lib/report-templates.js +964 -0
  108. package/bin/runners/lib/route-detection.js +1140 -0
  109. package/bin/runners/lib/route-truth.js +477 -0
  110. package/bin/runners/lib/sandbox/index.js +59 -0
  111. package/bin/runners/lib/sandbox/proof-chain.js +399 -0
  112. package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
  113. package/bin/runners/lib/sandbox/worktree.js +174 -0
  114. package/bin/runners/lib/scan-cache.js +330 -0
  115. package/bin/runners/lib/scan-output-schema.js +344 -0
  116. package/bin/runners/lib/score-history.js +282 -0
  117. package/bin/runners/lib/security-bridge.js +249 -0
  118. package/bin/runners/lib/server-usage.js +513 -0
  119. package/bin/runners/lib/share-pack.js +239 -0
  120. package/bin/runners/lib/snippets.js +67 -0
  121. package/bin/runners/lib/truth.js +667 -0
  122. package/bin/runners/lib/unified-output.js +189 -0
  123. package/bin/runners/lib/validate-patch.js +156 -0
  124. package/bin/runners/lib/verification.js +345 -0
  125. package/bin/runners/reality/engine.js +917 -0
  126. package/bin/runners/reality/flows.js +122 -0
  127. package/bin/runners/reality/report.js +378 -0
  128. package/bin/runners/reality/session.js +193 -0
  129. package/bin/runners/runAIAgent.js +2 -0
  130. package/bin/runners/runAudit.js +2 -0
  131. package/bin/runners/runAuth.js +106 -0
  132. package/bin/runners/runAutopilot.js +2 -0
  133. package/bin/runners/runBadge.js +2 -0
  134. package/bin/runners/runCertify.js +2 -0
  135. package/bin/runners/runClaimVerifier.js +483 -0
  136. package/bin/runners/runContext.js +56 -0
  137. package/bin/runners/runContextCompiler.js +385 -0
  138. package/bin/runners/runCtx.js +187 -0
  139. package/bin/runners/runCtxGuard.js +176 -0
  140. package/bin/runners/runCtxSync.js +116 -0
  141. package/bin/runners/runDashboard.js +10 -0
  142. package/bin/runners/runDoctor.js +245 -0
  143. package/bin/runners/runEnhancedShip.js +2 -0
  144. package/bin/runners/runFix.js +735 -0
  145. package/bin/runners/runFixPacks.js +2 -0
  146. package/bin/runners/runGate.js +17 -0
  147. package/bin/runners/runGraph.js +283 -0
  148. package/bin/runners/runInit.js +260 -0
  149. package/bin/runners/runInitGha.js +101 -0
  150. package/bin/runners/runInstall.js +76 -0
  151. package/bin/runners/runInteractive.js +388 -0
  152. package/bin/runners/runLaunch.js +2 -0
  153. package/bin/runners/runMcp.js +19 -0
  154. package/bin/runners/runMdc.js +2 -0
  155. package/bin/runners/runMissionGenerator.js +282 -0
  156. package/bin/runners/runNaturalLanguage.js +3 -0
  157. package/bin/runners/runPR.js +96 -0
  158. package/bin/runners/runPermissions.js +290 -0
  159. package/bin/runners/runPromptFirewall.js +211 -0
  160. package/bin/runners/runProof.js +2 -0
  161. package/bin/runners/runProve.js +392 -0
  162. package/bin/runners/runReality.js +489 -0
  163. package/bin/runners/runRealitySniff.js +2 -0
  164. package/bin/runners/runReplay.js +469 -0
  165. package/bin/runners/runReport.js +478 -0
  166. package/bin/runners/runScan.js +835 -0
  167. package/bin/runners/runShare.js +34 -0
  168. package/bin/runners/runShip.js +1062 -0
  169. package/bin/runners/runStatus.js +136 -0
  170. package/bin/runners/runTruthpack.js +634 -0
  171. package/bin/runners/runUpgrade.js +2 -0
  172. package/bin/runners/runValidate.js +2 -0
  173. package/bin/runners/runVerifyAgentOutput.js +2 -0
  174. package/bin/runners/runWatch.js +230 -0
  175. package/bin/runners/utils.js +360 -0
  176. package/bin/scan.js +612 -0
  177. package/bin/vibecheck.js +834 -0
  178. package/package.json +11 -11
  179. package/dist/autopatch/verified-autopatch.d.ts +0 -111
  180. package/dist/autopatch/verified-autopatch.d.ts.map +0 -1
  181. package/dist/autopatch/verified-autopatch.js +0 -503
  182. package/dist/autopatch/verified-autopatch.js.map +0 -1
  183. package/dist/bundles/index.js +0 -8
  184. package/dist/bundles/vibecheck-core.js +0 -25799
  185. package/dist/bundles/vibecheck-security.js +0 -208693
  186. package/dist/bundles/vibecheck-ship.js +0 -2318
  187. package/dist/commands/baseline.d.ts +0 -7
  188. package/dist/commands/baseline.d.ts.map +0 -1
  189. package/dist/commands/baseline.js +0 -79
  190. package/dist/commands/baseline.js.map +0 -1
  191. package/dist/commands/cache.d.ts +0 -13
  192. package/dist/commands/cache.d.ts.map +0 -1
  193. package/dist/commands/cache.js +0 -165
  194. package/dist/commands/cache.js.map +0 -1
  195. package/dist/commands/checkpoint.d.ts +0 -8
  196. package/dist/commands/checkpoint.d.ts.map +0 -1
  197. package/dist/commands/checkpoint.js +0 -35
  198. package/dist/commands/checkpoint.js.map +0 -1
  199. package/dist/commands/doctor.d.ts +0 -17
  200. package/dist/commands/doctor.d.ts.map +0 -1
  201. package/dist/commands/doctor.js +0 -226
  202. package/dist/commands/doctor.js.map +0 -1
  203. package/dist/commands/evidence.d.ts +0 -45
  204. package/dist/commands/evidence.d.ts.map +0 -1
  205. package/dist/commands/evidence.js +0 -197
  206. package/dist/commands/evidence.js.map +0 -1
  207. package/dist/commands/explain.d.ts +0 -8
  208. package/dist/commands/explain.d.ts.map +0 -1
  209. package/dist/commands/explain.js +0 -52
  210. package/dist/commands/explain.js.map +0 -1
  211. package/dist/commands/fix-consolidated.d.ts +0 -19
  212. package/dist/commands/fix-consolidated.d.ts.map +0 -1
  213. package/dist/commands/fix-consolidated.js +0 -165
  214. package/dist/commands/fix-consolidated.js.map +0 -1
  215. package/dist/commands/index.d.ts +0 -8
  216. package/dist/commands/index.d.ts.map +0 -1
  217. package/dist/commands/index.js +0 -15
  218. package/dist/commands/index.js.map +0 -1
  219. package/dist/commands/init.d.ts +0 -8
  220. package/dist/commands/init.d.ts.map +0 -1
  221. package/dist/commands/init.js +0 -125
  222. package/dist/commands/init.js.map +0 -1
  223. package/dist/commands/launcher.d.ts +0 -10
  224. package/dist/commands/launcher.d.ts.map +0 -1
  225. package/dist/commands/launcher.js +0 -174
  226. package/dist/commands/launcher.js.map +0 -1
  227. package/dist/commands/on.d.ts +0 -8
  228. package/dist/commands/on.d.ts.map +0 -1
  229. package/dist/commands/on.js +0 -123
  230. package/dist/commands/on.js.map +0 -1
  231. package/dist/commands/replay.d.ts +0 -8
  232. package/dist/commands/replay.d.ts.map +0 -1
  233. package/dist/commands/replay.js +0 -52
  234. package/dist/commands/replay.js.map +0 -1
  235. package/dist/commands/scan-consolidated.d.ts +0 -61
  236. package/dist/commands/scan-consolidated.d.ts.map +0 -1
  237. package/dist/commands/scan-consolidated.js +0 -243
  238. package/dist/commands/scan-consolidated.js.map +0 -1
  239. package/dist/commands/scan-secrets.d.ts +0 -47
  240. package/dist/commands/scan-secrets.d.ts.map +0 -1
  241. package/dist/commands/scan-secrets.js +0 -225
  242. package/dist/commands/scan-secrets.js.map +0 -1
  243. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +0 -41
  244. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +0 -1
  245. package/dist/commands/scan-vulnerabilities-enhanced.js +0 -368
  246. package/dist/commands/scan-vulnerabilities-enhanced.js.map +0 -1
  247. package/dist/commands/scan-vulnerabilities-osv.d.ts +0 -58
  248. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +0 -1
  249. package/dist/commands/scan-vulnerabilities-osv.js +0 -722
  250. package/dist/commands/scan-vulnerabilities-osv.js.map +0 -1
  251. package/dist/commands/scan-vulnerabilities.d.ts +0 -32
  252. package/dist/commands/scan-vulnerabilities.d.ts.map +0 -1
  253. package/dist/commands/scan-vulnerabilities.js +0 -283
  254. package/dist/commands/scan-vulnerabilities.js.map +0 -1
  255. package/dist/commands/secrets-allowlist.d.ts +0 -7
  256. package/dist/commands/secrets-allowlist.d.ts.map +0 -1
  257. package/dist/commands/secrets-allowlist.js +0 -85
  258. package/dist/commands/secrets-allowlist.js.map +0 -1
  259. package/dist/commands/ship-consolidated.d.ts +0 -58
  260. package/dist/commands/ship-consolidated.d.ts.map +0 -1
  261. package/dist/commands/ship-consolidated.js +0 -515
  262. package/dist/commands/ship-consolidated.js.map +0 -1
  263. package/dist/commands/stats.d.ts +0 -8
  264. package/dist/commands/stats.d.ts.map +0 -1
  265. package/dist/commands/stats.js +0 -134
  266. package/dist/commands/stats.js.map +0 -1
  267. package/dist/commands/upgrade.d.ts +0 -8
  268. package/dist/commands/upgrade.d.ts.map +0 -1
  269. package/dist/commands/upgrade.js +0 -30
  270. package/dist/commands/upgrade.js.map +0 -1
  271. package/dist/fix/applicator.d.ts +0 -44
  272. package/dist/fix/applicator.d.ts.map +0 -1
  273. package/dist/fix/applicator.js +0 -144
  274. package/dist/fix/applicator.js.map +0 -1
  275. package/dist/fix/backup.d.ts +0 -38
  276. package/dist/fix/backup.d.ts.map +0 -1
  277. package/dist/fix/backup.js +0 -154
  278. package/dist/fix/backup.js.map +0 -1
  279. package/dist/fix/engine.d.ts +0 -55
  280. package/dist/fix/engine.d.ts.map +0 -1
  281. package/dist/fix/engine.js +0 -285
  282. package/dist/fix/engine.js.map +0 -1
  283. package/dist/fix/index.d.ts +0 -5
  284. package/dist/fix/index.d.ts.map +0 -1
  285. package/dist/fix/index.js +0 -12
  286. package/dist/fix/index.js.map +0 -1
  287. package/dist/fix/interactive.d.ts +0 -22
  288. package/dist/fix/interactive.d.ts.map +0 -1
  289. package/dist/fix/interactive.js +0 -172
  290. package/dist/fix/interactive.js.map +0 -1
  291. package/dist/formatters/index.d.ts +0 -6
  292. package/dist/formatters/index.d.ts.map +0 -1
  293. package/dist/formatters/index.js +0 -11
  294. package/dist/formatters/index.js.map +0 -1
  295. package/dist/formatters/sarif-enhanced.d.ts +0 -78
  296. package/dist/formatters/sarif-enhanced.d.ts.map +0 -1
  297. package/dist/formatters/sarif-enhanced.js +0 -144
  298. package/dist/formatters/sarif-enhanced.js.map +0 -1
  299. package/dist/formatters/sarif-v2.d.ts +0 -121
  300. package/dist/formatters/sarif-v2.d.ts.map +0 -1
  301. package/dist/formatters/sarif-v2.js +0 -356
  302. package/dist/formatters/sarif-v2.js.map +0 -1
  303. package/dist/formatters/sarif.d.ts +0 -72
  304. package/dist/formatters/sarif.d.ts.map +0 -1
  305. package/dist/formatters/sarif.js +0 -146
  306. package/dist/formatters/sarif.js.map +0 -1
  307. package/dist/index.d.ts +0 -61
  308. package/dist/index.d.ts.map +0 -1
  309. package/dist/index.js +0 -4388
  310. package/dist/index.js.map +0 -1
  311. package/dist/init/ci-generator.d.ts +0 -18
  312. package/dist/init/ci-generator.d.ts.map +0 -1
  313. package/dist/init/ci-generator.js +0 -317
  314. package/dist/init/ci-generator.js.map +0 -1
  315. package/dist/init/detect-framework.d.ts +0 -15
  316. package/dist/init/detect-framework.d.ts.map +0 -1
  317. package/dist/init/detect-framework.js +0 -301
  318. package/dist/init/detect-framework.js.map +0 -1
  319. package/dist/init/hooks-installer.d.ts +0 -22
  320. package/dist/init/hooks-installer.d.ts.map +0 -1
  321. package/dist/init/hooks-installer.js +0 -310
  322. package/dist/init/hooks-installer.js.map +0 -1
  323. package/dist/init/index.d.ts +0 -8
  324. package/dist/init/index.d.ts.map +0 -1
  325. package/dist/init/index.js +0 -22
  326. package/dist/init/index.js.map +0 -1
  327. package/dist/init/templates.d.ts +0 -402
  328. package/dist/init/templates.d.ts.map +0 -1
  329. package/dist/init/templates.js +0 -240
  330. package/dist/init/templates.js.map +0 -1
  331. package/dist/mcp/server.d.ts +0 -12
  332. package/dist/mcp/server.d.ts.map +0 -1
  333. package/dist/mcp/server.js +0 -42
  334. package/dist/mcp/server.js.map +0 -1
  335. package/dist/mcp/telemetry.d.ts +0 -40
  336. package/dist/mcp/telemetry.d.ts.map +0 -1
  337. package/dist/mcp/telemetry.js +0 -98
  338. package/dist/mcp/telemetry.js.map +0 -1
  339. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +0 -32
  340. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +0 -1
  341. package/dist/reality/no-dead-buttons/button-sweep-generator.js +0 -236
  342. package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +0 -1
  343. package/dist/reality/no-dead-buttons/index.d.ts +0 -11
  344. package/dist/reality/no-dead-buttons/index.d.ts.map +0 -1
  345. package/dist/reality/no-dead-buttons/index.js +0 -18
  346. package/dist/reality/no-dead-buttons/index.js.map +0 -1
  347. package/dist/reality/no-dead-buttons/static-scanner.d.ts +0 -34
  348. package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +0 -1
  349. package/dist/reality/no-dead-buttons/static-scanner.js +0 -230
  350. package/dist/reality/no-dead-buttons/static-scanner.js.map +0 -1
  351. package/dist/reality/reality-graph.d.ts +0 -192
  352. package/dist/reality/reality-graph.d.ts.map +0 -1
  353. package/dist/reality/reality-graph.js +0 -600
  354. package/dist/reality/reality-graph.js.map +0 -1
  355. package/dist/reality/reality-runner.d.ts +0 -89
  356. package/dist/reality/reality-runner.d.ts.map +0 -1
  357. package/dist/reality/reality-runner.js +0 -540
  358. package/dist/reality/reality-runner.js.map +0 -1
  359. package/dist/reality/receipt-generator.d.ts +0 -152
  360. package/dist/reality/receipt-generator.d.ts.map +0 -1
  361. package/dist/reality/receipt-generator.js +0 -495
  362. package/dist/reality/receipt-generator.js.map +0 -1
  363. package/dist/reality/runtime-tracer.d.ts +0 -75
  364. package/dist/reality/runtime-tracer.d.ts.map +0 -1
  365. package/dist/reality/runtime-tracer.js +0 -109
  366. package/dist/reality/runtime-tracer.js.map +0 -1
  367. package/dist/runtime/auth-utils.d.ts +0 -43
  368. package/dist/runtime/auth-utils.d.ts.map +0 -1
  369. package/dist/runtime/auth-utils.js +0 -130
  370. package/dist/runtime/auth-utils.js.map +0 -1
  371. package/dist/runtime/client.d.ts +0 -74
  372. package/dist/runtime/client.d.ts.map +0 -1
  373. package/dist/runtime/client.js +0 -222
  374. package/dist/runtime/client.js.map +0 -1
  375. package/dist/runtime/creds.d.ts +0 -48
  376. package/dist/runtime/creds.d.ts.map +0 -1
  377. package/dist/runtime/creds.js +0 -245
  378. package/dist/runtime/creds.js.map +0 -1
  379. package/dist/runtime/exit-codes.d.ts +0 -49
  380. package/dist/runtime/exit-codes.d.ts.map +0 -1
  381. package/dist/runtime/exit-codes.js +0 -93
  382. package/dist/runtime/exit-codes.js.map +0 -1
  383. package/dist/runtime/index.d.ts +0 -9
  384. package/dist/runtime/index.d.ts.map +0 -1
  385. package/dist/runtime/index.js +0 -25
  386. package/dist/runtime/index.js.map +0 -1
  387. package/dist/runtime/json-output.d.ts +0 -42
  388. package/dist/runtime/json-output.d.ts.map +0 -1
  389. package/dist/runtime/json-output.js +0 -59
  390. package/dist/runtime/json-output.js.map +0 -1
  391. package/dist/runtime/semver.d.ts +0 -37
  392. package/dist/runtime/semver.d.ts.map +0 -1
  393. package/dist/runtime/semver.js +0 -110
  394. package/dist/runtime/semver.js.map +0 -1
  395. package/dist/scan/dead-ui-detector.d.ts +0 -48
  396. package/dist/scan/dead-ui-detector.d.ts.map +0 -1
  397. package/dist/scan/dead-ui-detector.js +0 -170
  398. package/dist/scan/dead-ui-detector.js.map +0 -1
  399. package/dist/scan/playwright-sweep.d.ts +0 -40
  400. package/dist/scan/playwright-sweep.d.ts.map +0 -1
  401. package/dist/scan/playwright-sweep.js +0 -216
  402. package/dist/scan/playwright-sweep.js.map +0 -1
  403. package/dist/scan/proof-bundle.d.ts +0 -25
  404. package/dist/scan/proof-bundle.d.ts.map +0 -1
  405. package/dist/scan/proof-bundle.js +0 -203
  406. package/dist/scan/proof-bundle.js.map +0 -1
  407. package/dist/scan/proof-graph.d.ts +0 -59
  408. package/dist/scan/proof-graph.d.ts.map +0 -1
  409. package/dist/scan/proof-graph.js +0 -64
  410. package/dist/scan/proof-graph.js.map +0 -1
  411. package/dist/scan/reality-sniff.d.ts +0 -56
  412. package/dist/scan/reality-sniff.d.ts.map +0 -1
  413. package/dist/scan/reality-sniff.js +0 -200
  414. package/dist/scan/reality-sniff.js.map +0 -1
  415. package/dist/scan/structural-verifier.d.ts +0 -20
  416. package/dist/scan/structural-verifier.d.ts.map +0 -1
  417. package/dist/scan/structural-verifier.js +0 -112
  418. package/dist/scan/structural-verifier.js.map +0 -1
  419. package/dist/scan/verification-engine.d.ts +0 -47
  420. package/dist/scan/verification-engine.d.ts.map +0 -1
  421. package/dist/scan/verification-engine.js +0 -141
  422. package/dist/scan/verification-engine.js.map +0 -1
  423. package/dist/scanner/baseline.d.ts +0 -52
  424. package/dist/scanner/baseline.d.ts.map +0 -1
  425. package/dist/scanner/baseline.js +0 -85
  426. package/dist/scanner/baseline.js.map +0 -1
  427. package/dist/scanner/incremental.d.ts +0 -30
  428. package/dist/scanner/incremental.d.ts.map +0 -1
  429. package/dist/scanner/incremental.js +0 -82
  430. package/dist/scanner/incremental.js.map +0 -1
  431. package/dist/scanner/parallel.d.ts +0 -43
  432. package/dist/scanner/parallel.d.ts.map +0 -1
  433. package/dist/scanner/parallel.js +0 -99
  434. package/dist/scanner/parallel.js.map +0 -1
  435. package/dist/standalone.d.ts +0 -1
  436. package/dist/standalone.d.ts.map +0 -1
  437. package/dist/standalone.js +0 -1
  438. package/dist/standalone.js.map +0 -1
  439. package/dist/truth-pack/index.d.ts +0 -102
  440. package/dist/truth-pack/index.d.ts.map +0 -1
  441. package/dist/truth-pack/index.js +0 -694
  442. package/dist/truth-pack/index.js.map +0 -1
  443. package/dist/ui/frame.d.ts +0 -68
  444. package/dist/ui/frame.d.ts.map +0 -1
  445. package/dist/ui/frame.js +0 -165
  446. package/dist/ui/frame.js.map +0 -1
  447. package/dist/ui/index.d.ts +0 -5
  448. package/dist/ui/index.d.ts.map +0 -1
  449. package/dist/ui/index.js +0 -16
  450. package/dist/ui/index.js.map +0 -1
  451. package/dist/ui.d.ts +0 -36
  452. package/dist/ui.d.ts.map +0 -1
  453. package/dist/ui.js +0 -45
  454. package/dist/ui.js.map +0 -1
@@ -0,0 +1,834 @@
1
+ #!/usr/bin/env node
2
+ // bin/vibecheck.js
3
+ const readline = require("readline");
4
+ const path = require("path");
5
+ const fs = require("fs");
6
+ const { routeArgv } = require("./_router");
7
+ const { warnDeprecationOnce } = require("./_deprecations");
8
+ const {
9
+ getApiKey,
10
+ checkEntitlement,
11
+ getEntitlements,
12
+ } = require("./runners/lib/auth");
13
+
14
+ // Read version from package.json
15
+ function getVersion() {
16
+ try {
17
+ const pkgPath = path.join(__dirname, "..", "package.json");
18
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
19
+ return pkg.version || "0.0.0";
20
+ } catch {
21
+ return "0.0.0";
22
+ }
23
+ }
24
+
25
+ // Runners
26
+ const { runScan } = require("./runners/runScan");
27
+ const { runGate } = require("./runners/runGate");
28
+ const { runContext } = require("./runners/runContext");
29
+ const { runDashboard, runDemo } = require("./runners/runDashboard");
30
+ const { runFix } = require("./runners/runFix");
31
+ const { runShip } = require("./runners/runShip");
32
+ const { runLaunch } = require("./runners/runLaunch");
33
+ const { runAutopilot } = require("./runners/runAutopilot");
34
+ const { runProof } = require("./runners/runProof");
35
+
36
+ // Graceful loading for modules that may have syntax issues
37
+ let runReality, runRealitySniff;
38
+ try {
39
+ runReality = require("./runners/runReality").runReality;
40
+ } catch (e) {
41
+ runReality = async () => { console.error("Reality runner unavailable:", e.message); return 1; };
42
+ }
43
+ try {
44
+ runRealitySniff = require("./runners/runRealitySniff").runRealitySniff;
45
+ } catch (e) {
46
+ runRealitySniff = async () => { console.error("RealitySniff runner unavailable:", e.message); return 1; };
47
+ }
48
+ const { runValidate } = require("./runners/runValidate");
49
+ const { runDoctor } = require("./runners/runDoctor");
50
+ const { runInit } = require("./runners/runInit");
51
+ const { runMcp } = require("./runners/runMcp");
52
+ const { runLogin, runLogout, runWhoami } = require("./runners/runAuth");
53
+ const {
54
+ runNaturalLanguage,
55
+ isNaturalLanguageCommand,
56
+ } = require("./runners/runNaturalLanguage");
57
+ const { runAIAgent } = require("./runners/runAIAgent");
58
+ const { runBadge } = require("./runners/runBadge");
59
+ const { runUpgrade } = require("./runners/runUpgrade");
60
+ const { runCertify } = require("./runners/runCertify");
61
+ const { runVerifyAgentOutput } = require("./runners/runVerifyAgentOutput");
62
+ const { runFixPacks } = require("./runners/runFixPacks");
63
+ const { runAudit } = require("./runners/runAudit");
64
+ const { runMdc } = require("./runners/runMdc");
65
+ const { runEnhancedShip } = require("./runners/runEnhancedShip");
66
+ const { runPromptFirewall } = require("./runners/runPromptFirewall");
67
+
68
+ // Route Truth v1 - ctx command
69
+ const { runCtx } = require("./runners/runCtx");
70
+ // Share command
71
+ const { runShare } = require("./runners/runShare");
72
+ // PR command
73
+ const { runPR } = require("./runners/runPR");
74
+ // Init GHA command
75
+ const { runInitGha } = require("./runners/runInitGha");
76
+ // Install command
77
+ const { runInstall } = require("./runners/runInstall");
78
+ // Prove command
79
+ const { runProve } = require("./runners/runProve");
80
+ // Watch command
81
+ const { runWatch } = require("./runners/runWatch");
82
+ // Status command
83
+ const { runStatus } = require("./runners/runStatus");
84
+ // Graph command - Reality Proof Graph
85
+ const { runGraph } = require("./runners/runGraph");
86
+ // Permissions command - AuthZ Matrix & IDOR
87
+ const { runPermissions } = require("./runners/runPermissions");
88
+ // Replay command - Record and replay user sessions
89
+ const { runReplay } = require("./runners/runReplay");
90
+ // Context Contracts commands
91
+ const { runCtxSync } = require("./runners/runCtxSync");
92
+ const { runCtxGuard } = require("./runners/runCtxGuard");
93
+
94
+ // Truth Pack v1 - Core truth system
95
+ let runTruthpack;
96
+ try {
97
+ runTruthpack = require("./runners/runTruthpack").runTruthpack;
98
+ } catch (e) {
99
+ runTruthpack = async () => { console.error("Truthpack runner unavailable:", e.message); return 1; };
100
+ }
101
+
102
+ const VERSION = getVersion();
103
+
104
+ // ANSI colors
105
+ const c = {
106
+ reset: "\x1b[0m",
107
+ dim: "\x1b[2m",
108
+ cyan: "\x1b[36m",
109
+ green: "\x1b[32m",
110
+ yellow: "\x1b[33m",
111
+ red: "\x1b[31m",
112
+ blue: "\x1b[34m",
113
+ magenta: "\x1b[35m",
114
+ };
115
+
116
+ // Detect CI/CD environment (non-interactive)
117
+ function isCI() {
118
+ return !!(
119
+ process.env.CI ||
120
+ process.env.CONTINUOUS_INTEGRATION ||
121
+ process.env.RAILWAY_ENVIRONMENT ||
122
+ process.env.VERCEL ||
123
+ process.env.NETLIFY ||
124
+ process.env.GITHUB_ACTIONS ||
125
+ process.env.GITLAB_CI ||
126
+ process.env.CIRCLECI ||
127
+ process.env.TRAVIS ||
128
+ process.env.BUILDKITE ||
129
+ process.env.RENDER ||
130
+ process.env.HEROKU ||
131
+ !process.stdin.isTTY
132
+ );
133
+ }
134
+
135
+ // ============================================================================
136
+ // TIER-BASED COMMAND ACCESS
137
+ // ============================================================================
138
+ // FREE ($0) - No API key needed
139
+ const FREE_COMMANDS = [
140
+ "help",
141
+ "version",
142
+ "doctor",
143
+ "init",
144
+ "login",
145
+ "logout",
146
+ "whoami",
147
+ "scan", // Route integrity + security analysis
148
+ "validate", // AI code validation
149
+ "badge", // Generate badges
150
+ "certify", // Certification badges (SEO fuel)
151
+ "context", // AI rules generator
152
+ "dashboard", // Real-time monitoring
153
+ "demo", // Interactive demo
154
+ "upgrade", // Subscription management
155
+ "verify-agent-output", // Verify AI agent output
156
+ "mdc", // MDC documentation generator
157
+ "prompt-firewall", // Prompt firewall (free tier with limited features)
158
+ "firewall", // Alias for prompt-firewall
159
+ "ctx", // Truth Pack generator
160
+ "truthpack", // Alias for ctx
161
+ "replay", // Record and replay user sessions
162
+ "graph", // Reality Proof Graph
163
+ "status", // Quick project status
164
+ "watch", // Continuous dev mode
165
+ "prove", // One command reality proof
166
+ "install", // Zero-friction onboarding
167
+ "pr", // PR comment generator
168
+ "share", // Share bundle generator
169
+ "reality", // Runtime UI verification
170
+ ];
171
+
172
+ // STARTER ($19/mo) - Requires API key with starter+ plan
173
+ const STARTER_COMMANDS = {
174
+ ship: "ship:audit", // Plain English audit
175
+ "enhanced-ship": "enhanced-ship:full", // Enhanced ship decision with all features
176
+ gate: "gate:ci", // CI/CD gate
177
+ reality: "reality:basic", // Browser testing
178
+ launch: "launch:checklist", // Pre-launch wizard
179
+ };
180
+
181
+ // PRO ($49/mo) - Requires API key with pro+ plan
182
+ const PRO_COMMANDS = {
183
+ "ai-test": "ai:agent", // AI Agent testing
184
+ ai: "ai:agent",
185
+ agent: "ai:agent",
186
+ // fix: removed - handled specially to allow --plan-only on FREE tier
187
+ autopilot: "autopilot:enable", // Continuous protection
188
+ };
189
+
190
+ // Commands with FREE tier read-only modes
191
+ const TIERED_COMMANDS = {
192
+ fix: {
193
+ freeArgs: ["--plan-only", "--help", "-h"], // Allow these args on FREE
194
+ requiredScope: "fix:apply",
195
+ tier: "pro",
196
+ },
197
+ };
198
+
199
+ // Special: proof command has sub-modes with different tiers
200
+ const PROOF_COMMANDS = {
201
+ mocks: "proof:mocks", // Starter+
202
+ reality: "proof:reality", // Pro+
203
+ };
204
+
205
+ // Commands that always work (utilities)
206
+ const UTILITY_COMMANDS = ["mcp", "rules", "api", "deps", "sbom", "fixpacks"];
207
+
208
+ // Compliance tier commands
209
+ const COMPLIANCE_COMMANDS = {
210
+ audit: "audit:full", // Full audit trail
211
+ };
212
+
213
+ async function prompt(question) {
214
+ const rl = readline.createInterface({
215
+ input: process.stdin,
216
+ output: process.stdout,
217
+ });
218
+ return new Promise((resolve) => {
219
+ rl.question(question, (answer) => {
220
+ rl.close();
221
+ resolve(answer.trim());
222
+ });
223
+ });
224
+ }
225
+
226
+ async function showWelcomeAndPromptLogin() {
227
+ console.log(`
228
+ ${c.cyan}╔════════════════════════════════════════════════════════════╗
229
+ ║ ${c.reset}🛡️ VIBECHECK${c.cyan} ║
230
+ ╚════════════════════════════════════════════════════════════╝${c.reset}
231
+
232
+ ${c.dim}Ship with confidence. Catch fake features before your users do.${c.reset}
233
+
234
+ `);
235
+
236
+ const { key, source } = getApiKey();
237
+
238
+ if (!key) {
239
+ // In CI/CD environments, skip interactive prompts
240
+ if (isCI()) {
241
+ console.log(`${c.yellow}⚠ No API key found${c.reset}`);
242
+ console.log(
243
+ `${c.dim}Running in CI mode with FREE tier features.${c.reset}`,
244
+ );
245
+ console.log(
246
+ `${c.dim}Set VIBECHECK_API_KEY env var to unlock more features.${c.reset}\n`,
247
+ );
248
+ return { key: null, entitlements: null };
249
+ }
250
+
251
+ console.log(`${c.yellow}⚠ No API key found${c.reset}`);
252
+ console.log(`
253
+ ${c.dim}To unlock all features, you need a vibecheck API key.${c.reset}
254
+
255
+ ${c.green}FREE${c.reset} scan, validate, badge, doctor, init
256
+ ${c.cyan}STARTER${c.reset} ship, gate, reality, launch, proof mocks ${c.dim}($29/mo)${c.reset}
257
+ ${c.magenta}PRO${c.reset} ai-test, fix, autopilot, proof reality ${c.dim}($99/mo)${c.reset}
258
+
259
+ ${c.dim}Get your API key at: ${c.cyan}https://vibecheckai.dev/settings/keys${c.reset}
260
+ `);
261
+
262
+ const answer = await prompt(
263
+ `${c.cyan}?${c.reset} Do you have an API key? (y/N) `,
264
+ );
265
+
266
+ if (answer.toLowerCase() === "y") {
267
+ const apiKey = await prompt(`${c.cyan}?${c.reset} Paste your API key: `);
268
+ if (apiKey) {
269
+ const { saveApiKey } = require("./runners/lib/auth");
270
+ console.log(`\n${c.dim}Verifying...${c.reset}`);
271
+
272
+ const entitlements = await getEntitlements(apiKey);
273
+ if (entitlements) {
274
+ saveApiKey(apiKey);
275
+ console.log(
276
+ `\n${c.green}✓${c.reset} Logged in as ${entitlements.user?.name || "User"}`,
277
+ );
278
+ console.log(
279
+ `${c.dim}Plan: ${entitlements.plan?.toUpperCase() || "FREE"}${c.reset}\n`,
280
+ );
281
+ return { key: apiKey, entitlements };
282
+ } else {
283
+ console.log(`\n${c.red}✗${c.reset} Invalid API key\n`);
284
+ }
285
+ }
286
+ }
287
+
288
+ console.log(`
289
+ ${c.dim}Continuing in FREE mode. Some features will be limited.${c.reset}
290
+ ${c.dim}Run ${c.cyan}vibecheck login${c.dim} anytime to upgrade.${c.reset}
291
+ `);
292
+ return { key: null, entitlements: null };
293
+ }
294
+
295
+ // User has API key, get entitlements
296
+ const entitlements = await getEntitlements(key);
297
+ return { key, entitlements };
298
+ }
299
+
300
+ async function checkCommandAccess(cmd, entitlements, args = []) {
301
+ // Free commands always work (no API key needed)
302
+ if (FREE_COMMANDS.includes(cmd)) {
303
+ return { allowed: true, tier: "free" };
304
+ }
305
+
306
+ // Utility commands always work
307
+ if (UTILITY_COMMANDS.includes(cmd)) {
308
+ return { allowed: true, tier: "utility" };
309
+ }
310
+
311
+ // Tiered commands with FREE read-only modes
312
+ if (TIERED_COMMANDS[cmd]) {
313
+ const config = TIERED_COMMANDS[cmd];
314
+ // Check if using a FREE tier argument
315
+ const hasFreeArg = args.some(arg => config.freeArgs.includes(arg));
316
+ // Also allow if no fix pack specified (shows help)
317
+ const hasNoFixPack = cmd === "fix" && !args.some(arg => !arg.startsWith("-"));
318
+
319
+ if (hasFreeArg || hasNoFixPack) {
320
+ return { allowed: true, tier: "free" };
321
+ }
322
+
323
+ // Requires paid tier
324
+ if (!entitlements) {
325
+ return {
326
+ allowed: false,
327
+ reason: `${c.yellow}${cmd}${c.reset} requires a ${c.magenta}PRO${c.reset} plan.\n\n Run ${c.cyan}vibecheck login${c.reset} to authenticate.\n Get your API key at: ${c.cyan}https://vibecheckai.dev/settings/keys${c.reset}`,
328
+ };
329
+ }
330
+
331
+ if (
332
+ entitlements.scopes?.includes(config.requiredScope) ||
333
+ entitlements.scopes?.includes("*")
334
+ ) {
335
+ return { allowed: true, tier: config.tier };
336
+ }
337
+
338
+ return {
339
+ allowed: false,
340
+ reason: `Your ${c.yellow}${entitlements.plan?.toUpperCase()}${c.reset} plan doesn't include this feature.\n\n Required: ${config.requiredScope}\n Upgrade to ${c.magenta}PRO${c.reset} at: ${c.cyan}https://vibecheckai.dev/pricing${c.reset}`,
341
+ };
342
+ }
343
+
344
+ // Special handling for proof command (has sub-modes with different tiers)
345
+ if (cmd === "proof") {
346
+ const subMode = args[0]; // mocks or reality
347
+ if (subMode === "mocks") {
348
+ // Starter+ required
349
+ if (!entitlements) {
350
+ return {
351
+ allowed: false,
352
+ reason: `${c.yellow}proof mocks${c.reset} requires a ${c.cyan}STARTER${c.reset} plan or higher.\n\n Run ${c.cyan}vibecheck login${c.reset} to authenticate.\n Get your API key at: ${c.cyan}https://vibecheckai.dev/settings/keys${c.reset}`,
353
+ };
354
+ }
355
+ if (
356
+ entitlements.scopes?.includes("proof:mocks") ||
357
+ entitlements.scopes?.includes("*")
358
+ ) {
359
+ return { allowed: true, tier: "starter" };
360
+ }
361
+ return {
362
+ allowed: false,
363
+ reason: `Your ${c.yellow}${entitlements.plan?.toUpperCase()}${c.reset} plan doesn't include mock detection.\n\n Upgrade to ${c.cyan}STARTER${c.reset} at: ${c.cyan}https://vibecheckai.dev/pricing${c.reset}`,
364
+ };
365
+ } else if (subMode === "reality") {
366
+ // Pro+ required
367
+ if (!entitlements) {
368
+ return {
369
+ allowed: false,
370
+ reason: `${c.yellow}proof reality${c.reset} requires a ${c.magenta}PRO${c.reset} plan.\n\n Run ${c.cyan}vibecheck login${c.reset} to authenticate.\n Get your API key at: ${c.cyan}https://vibecheckai.dev/settings/keys${c.reset}`,
371
+ };
372
+ }
373
+ if (
374
+ entitlements.scopes?.includes("proof:reality") ||
375
+ entitlements.scopes?.includes("*")
376
+ ) {
377
+ return { allowed: true, tier: "pro" };
378
+ }
379
+ return {
380
+ allowed: false,
381
+ reason: `Your ${c.yellow}${entitlements.plan?.toUpperCase()}${c.reset} plan doesn't include runtime verification.\n\n Upgrade to ${c.magenta}PRO${c.reset} at: ${c.cyan}https://vibecheckai.dev/pricing${c.reset}`,
382
+ };
383
+ }
384
+ // No submode - show help
385
+ return { allowed: true };
386
+ }
387
+
388
+ // STARTER tier commands
389
+ if (STARTER_COMMANDS[cmd]) {
390
+ const requiredScope = STARTER_COMMANDS[cmd];
391
+
392
+ if (!entitlements) {
393
+ return {
394
+ allowed: false,
395
+ reason: `${c.yellow}${cmd}${c.reset} requires a ${c.cyan}STARTER${c.reset} plan or higher.\n\n Run ${c.cyan}vibecheck login${c.reset} to authenticate.\n Get your API key at: ${c.cyan}https://vibecheckai.dev/settings/keys${c.reset}`,
396
+ };
397
+ }
398
+
399
+ if (
400
+ entitlements.scopes?.includes(requiredScope) ||
401
+ entitlements.scopes?.includes("*")
402
+ ) {
403
+ return { allowed: true, tier: "starter" };
404
+ }
405
+
406
+ return {
407
+ allowed: false,
408
+ reason: `Your ${c.yellow}${entitlements.plan?.toUpperCase()}${c.reset} plan doesn't include this feature.\n\n Required: ${requiredScope}\n Upgrade to ${c.cyan}STARTER${c.reset} at: ${c.cyan}https://vibecheckai.dev/pricing${c.reset}`,
409
+ };
410
+ }
411
+
412
+ // PRO tier commands
413
+ if (PRO_COMMANDS[cmd]) {
414
+ const requiredScope = PRO_COMMANDS[cmd];
415
+
416
+ if (!entitlements) {
417
+ return {
418
+ allowed: false,
419
+ reason: `${c.yellow}${cmd}${c.reset} requires a ${c.magenta}PRO${c.reset} plan.\n\n Run ${c.cyan}vibecheck login${c.reset} to authenticate.\n Get your API key at: ${c.cyan}https://vibecheckai.dev/settings/keys${c.reset}`,
420
+ };
421
+ }
422
+
423
+ if (
424
+ entitlements.scopes?.includes(requiredScope) ||
425
+ entitlements.scopes?.includes("*")
426
+ ) {
427
+ return { allowed: true, tier: "pro" };
428
+ }
429
+
430
+ return {
431
+ allowed: false,
432
+ reason: `Your ${c.yellow}${entitlements.plan?.toUpperCase()}${c.reset} plan doesn't include this feature.\n\n Required: ${requiredScope}\n Upgrade to ${c.magenta}PRO${c.reset} at: ${c.cyan}https://vibecheckai.dev/pricing${c.reset}`,
433
+ };
434
+ }
435
+
436
+ return { allowed: true };
437
+ }
438
+
439
+ function printHelp() {
440
+ console.log(
441
+ `
442
+ ${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
443
+ ${c.cyan} VIBECHECK${c.reset} - Ship with confidence
444
+ ${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
445
+
446
+ ${c.green}🚀 QUICK START${c.reset}
447
+
448
+ ${c.cyan}ship${c.reset} "Is my app ready?" - Plain English, traffic light score
449
+ ${c.cyan}ship --fix${c.reset} Same + auto-fix problems
450
+
451
+ ${c.yellow}🧪 TESTING${c.reset} (each does something different!)
452
+
453
+ ${c.cyan}scan${c.reset} ${c.dim}Route Integrity${c.reset} - dead links, orphans, coverage, security 🗺️
454
+ ${c.cyan}scan --truth${c.reset} ${c.dim}+ Build manifest${c.reset} verification (CI/ship ready)
455
+ ${c.cyan}scan --reality${c.reset} ${c.dim}+ Playwright${c.reset} runtime proof (best-in-class)
456
+ ${c.cyan}reality${c.reset} ${c.dim}Browser testing${c.reset} - clicks buttons, fills forms, finds broken UI
457
+ ${c.cyan}ai-test${c.reset} ${c.dim}AI Agent${c.reset} - autonomous testing + generates fix prompts 🤖
458
+
459
+ ${c.magenta}🚦 CI/CD & GATES${c.reset}
460
+
461
+ ${c.cyan}gate${c.reset} Block bad deploys - pass/fail for CI pipelines
462
+ ${c.cyan}proof mocks${c.reset} Block mock/demo code from reaching production
463
+ ${c.cyan}proof reality${c.reset} Runtime GO/NO-GO verification with Playwright
464
+
465
+ ${c.blue}🔧 FIX & AUTOMATE${c.reset}
466
+
467
+ ${c.cyan}fix${c.reset} Auto-fix detected issues (--plan first, then --apply)
468
+ ${c.cyan}autopilot${c.reset} Continuous protection - weekly reports, auto-PRs
469
+ ${c.cyan}badge${c.reset} Generate Ship Badge for your README/PR
470
+ ${c.cyan}certify${c.reset} Generate vibecheck Certified badge with verification link
471
+
472
+ ${c.dim}📦 TRUTH SYSTEM${c.reset}
473
+
474
+ ${c.cyan}ctx${c.reset} Generate Truth Pack - ground truth for AI agents
475
+ ${c.cyan}ctx --snapshot${c.reset} Save snapshot to .vibecheck/truth/snapshots/
476
+ ${c.cyan}graph${c.reset} Build Reality Proof Graph - end-to-end causal chains
477
+
478
+ ${c.dim}📦 EXTRAS${c.reset}
479
+
480
+ ${c.cyan}audit${c.reset} View/export audit trail (Compliance+ tier)
481
+ ${c.cyan}context${c.reset} Generate AI rules files (.cursorrules, .windsurf/rules, etc.)
482
+ ${c.cyan}dashboard${c.reset} Real-time monitoring dashboard with live metrics
483
+ ${c.cyan}demo${c.reset} Interactive terminal features showcase
484
+ ${c.cyan}launch${c.reset} Pre-launch checklist wizard
485
+ ${c.cyan}validate${c.reset} Check AI-generated code for hallucinations
486
+ ${c.cyan}init${c.reset} Set up vibecheck in your project
487
+ ${c.cyan}doctor${c.reset} Debug environment issues
488
+ ${c.cyan}mcp${c.reset} Start MCP server for AI editors
489
+
490
+ ${c.dim}🔑 ACCOUNT${c.reset}
491
+
492
+ ${c.cyan}login${c.reset} Sign in with API key
493
+ ${c.cyan}logout${c.reset} Sign out
494
+ ${c.cyan}whoami${c.reset} Show current user & plan
495
+ ${c.cyan}upgrade${c.reset} Manage subscription & view usage
496
+
497
+ ${c.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
498
+
499
+ ${c.green}Examples:${c.reset}
500
+
501
+ vibecheck ship ${c.dim}# Quick health check${c.reset}
502
+ vibecheck scan ${c.dim}# Route integrity + security analysis${c.reset}
503
+ vibecheck scan --truth ${c.dim}# + Build manifest verification${c.reset}
504
+ vibecheck scan --reality --url http://localhost:3000 ${c.dim}# Full proof${c.reset}
505
+ vibecheck reality --url https://... ${c.dim}# Test live app${c.reset}
506
+ vibecheck ai-test --url https://... ${c.dim}# AI explores your app${c.reset}
507
+ vibecheck gate ${c.dim}# Block bad deploy in CI${c.reset}
508
+ vibecheck badge ${c.dim}# Generate ship badge${c.reset}
509
+
510
+ ${c.dim}Run 'vibecheck <command> --help' for details.${c.reset}
511
+ `.trim(),
512
+ );
513
+ }
514
+
515
+ (async function main() {
516
+ const rawArgs = process.argv.slice(2);
517
+
518
+ // Check if the first argument looks like a natural language command
519
+ // Natural language commands are typically quoted strings or multi-word phrases
520
+ const firstArg = rawArgs[0];
521
+ if (firstArg && isNaturalLanguageCommand(firstArg)) {
522
+ // Join all args as the natural language input
523
+ const nlInput = rawArgs.join(" ");
524
+ const exitCode = await runNaturalLanguage(nlInput);
525
+ process.exit(exitCode);
526
+ }
527
+
528
+ const { legacyFrom, routed } = routeArgv(process.argv);
529
+
530
+ const cmd = routed[0];
531
+ const args = routed.slice(1);
532
+
533
+ // Commands that skip auth check entirely
534
+ const skipAuthCommands = [
535
+ "help",
536
+ "-h",
537
+ "--help",
538
+ "version",
539
+ "login",
540
+ "logout",
541
+ "whoami",
542
+ "doctor",
543
+ ];
544
+
545
+ if (!cmd || cmd === "-h" || cmd === "--help" || cmd === "help") {
546
+ printHelp();
547
+ process.exit(0);
548
+ }
549
+
550
+ // Check for first run (no API key) - only for non-skip commands
551
+ let authInfo = { key: null, entitlements: null };
552
+
553
+ if (!skipAuthCommands.includes(cmd)) {
554
+ // Check if this is a free command or utility - if so, skip entitlement checks
555
+ const isFreeCommand = FREE_COMMANDS.includes(cmd) || UTILITY_COMMANDS.includes(cmd);
556
+ const isKnownCommand = isFreeCommand ||
557
+ STARTER_COMMANDS[cmd] ||
558
+ PRO_COMMANDS[cmd] ||
559
+ TIERED_COMMANDS[cmd] ||
560
+ PROOF_COMMANDS[cmd] ||
561
+ COMPLIANCE_COMMANDS[cmd];
562
+
563
+ // For unknown commands, skip auth and let them fail with "Unknown command" message
564
+ if (!isKnownCommand) {
565
+ // Skip authentication for unknown commands - they'll show help/error message
566
+ authInfo = { key: null, entitlements: null };
567
+ } else {
568
+ const { key } = getApiKey();
569
+
570
+ // First run without API key - show welcome and prompt
571
+ if (!key && !process.env.VIBECHECK_SKIP_AUTH) {
572
+ authInfo = await showWelcomeAndPromptLogin();
573
+ } else if (key && !isFreeCommand) {
574
+ // Has API key and command requires auth - get entitlements silently
575
+ // For free commands, we don't need to check entitlements
576
+ try {
577
+ const entitlements = await getEntitlements(key);
578
+ authInfo = { key, entitlements };
579
+ } catch (error) {
580
+ // If API is unavailable, allow free commands to proceed
581
+ // Paid commands will be blocked in checkCommandAccess
582
+ if (isFreeCommand) {
583
+ authInfo = { key, entitlements: null };
584
+ } else {
585
+ throw error;
586
+ }
587
+ }
588
+ } else if (key && isFreeCommand) {
589
+ // Free command with key - no need to fetch entitlements
590
+ authInfo = { key, entitlements: null };
591
+ }
592
+ }
593
+
594
+ // Check if user has access to this command (only for known commands)
595
+ if (isKnownCommand) {
596
+ const access = await checkCommandAccess(cmd, authInfo.entitlements, args);
597
+
598
+ if (!access.allowed) {
599
+ console.log(`\n${c.red}✗ Access Denied${c.reset}\n`);
600
+ console.log(access.reason);
601
+ console.log("");
602
+ process.exit(1);
603
+ }
604
+
605
+ // Show tier info for paid features
606
+ if (access.tier === "starter") {
607
+ console.log(`${c.cyan}▸ STARTER${c.reset} ${c.dim}feature${c.reset}\n`);
608
+ } else if (access.tier === "pro") {
609
+ console.log(`${c.magenta}▸ PRO${c.reset} ${c.dim}feature${c.reset}\n`);
610
+ }
611
+ }
612
+ }
613
+
614
+ // Deprecation suggestions
615
+ if (legacyFrom) {
616
+ const suggestion = routed.slice(0, 2).join(" ");
617
+ warnDeprecationOnce(legacyFrom, suggestion, VERSION);
618
+ }
619
+
620
+ try {
621
+ let exitCode = 0;
622
+ switch (cmd) {
623
+ case "scan":
624
+ exitCode = await runScan(args);
625
+ break;
626
+ case "gate":
627
+ exitCode = await runGate(args);
628
+ break;
629
+ case "ship":
630
+ exitCode = await runShip(args);
631
+ break;
632
+ case "enhanced-ship":
633
+ exitCode = await runEnhancedShip(args);
634
+ break;
635
+ case "prompt-firewall":
636
+ case "firewall":
637
+ exitCode = await runPromptFirewall(args);
638
+ break;
639
+ case "launch":
640
+ exitCode = await runLaunch(args);
641
+ break;
642
+ case "autopilot":
643
+ exitCode = await runAutopilot(args);
644
+ break;
645
+ case "fix":
646
+ exitCode = await runFix(args);
647
+ break;
648
+ case "share":
649
+ exitCode = await runShare({
650
+ repoRoot: process.cwd(),
651
+ missionDir: args.find((a, i) => args[i-1] === '--mission-dir'),
652
+ outputDir: args.find((a, i) => args[i-1] === '--output-dir'),
653
+ prComment: args.includes('--pr-comment')
654
+ });
655
+ break;
656
+ case "pr":
657
+ exitCode = await runPR({
658
+ repoRoot: process.cwd(),
659
+ fastifyEntry: args.find((a, i) => args[i-1] === '--fastify-entry'),
660
+ out: args.find((a, i) => args[i-1] === '--out'),
661
+ failOnWarn: args.includes('--fail-on-warn'),
662
+ maxFindings: Number(args.find((a, i) => args[i-1] === '--max-findings')) || 12
663
+ });
664
+ break;
665
+ case "install":
666
+ exitCode = await runInstall({ repoRoot: process.cwd() });
667
+ break;
668
+ case "prove":
669
+ exitCode = await runProve({
670
+ repoRoot: process.cwd(),
671
+ url: args.find((a, i) => args[i-1] === '--url' || args[i-1] === '-u'),
672
+ auth: args.find((a, i) => args[i-1] === '--auth'),
673
+ storageState: args.find((a, i) => args[i-1] === '--storage-state'),
674
+ fastifyEntry: args.find((a, i) => args[i-1] === '--fastify-entry'),
675
+ maxFixRounds: Number(args.find((a, i) => args[i-1] === '--max-fix-rounds')) || 3,
676
+ maxMissions: Number(args.find((a, i) => args[i-1] === '--max-missions')) || 8,
677
+ maxSteps: Number(args.find((a, i) => args[i-1] === '--max-steps')) || 10,
678
+ skipReality: args.includes('--skip-reality'),
679
+ skipFix: args.includes('--skip-fix'),
680
+ headed: args.includes('--headed'),
681
+ danger: args.includes('--danger'),
682
+ maxPages: Number(args.find((a, i) => args[i-1] === '--max-pages')) || 18,
683
+ maxDepth: Number(args.find((a, i) => args[i-1] === '--max-depth')) || 2,
684
+ timeoutMs: Number(args.find((a, i) => args[i-1] === '--timeout-ms')) || 15000
685
+ });
686
+ break;
687
+ case "watch":
688
+ exitCode = await runWatch({
689
+ repoRoot: process.cwd(),
690
+ fastifyEntry: args.find((a, i) => args[i-1] === '--fastify-entry'),
691
+ debounceMs: Number(args.find((a, i) => args[i-1] === '--debounce')) || 500,
692
+ clearScreen: !args.includes('--no-clear')
693
+ });
694
+ break;
695
+ case "status":
696
+ exitCode = await runStatus({
697
+ repoRoot: process.cwd(),
698
+ json: args.includes('--json')
699
+ });
700
+ break;
701
+ case "proof":
702
+ exitCode = await runProof(args);
703
+ break;
704
+ case "reality":
705
+ exitCode = await runReality({
706
+ repoRoot: process.cwd(),
707
+ url: args.find((a, i) => args[i-1] === '--url' || args[i-1] === '-u'),
708
+ auth: args.find((a, i) => args[i-1] === '--auth'),
709
+ storageState: args.find((a, i) => args[i-1] === '--storage-state'),
710
+ saveStorageState: args.find((a, i) => args[i-1] === '--save-storage-state'),
711
+ truthpack: args.find((a, i) => args[i-1] === '--truthpack'),
712
+ verifyAuth: args.includes('--verify-auth'),
713
+ headed: args.includes('--headed'),
714
+ maxPages: Number(args.find((a, i) => args[i-1] === '--max-pages')) || 18,
715
+ maxDepth: Number(args.find((a, i) => args[i-1] === '--max-depth')) || 2,
716
+ danger: args.includes('--danger'),
717
+ timeoutMs: Number(args.find((a, i) => args[i-1] === '--timeout-ms')) || 15000
718
+ });
719
+ break;
720
+ case "reality-sniff":
721
+ case "sniff":
722
+ exitCode = await runRealitySniff(args);
723
+ break;
724
+ case "ai-test":
725
+ case "ai":
726
+ case "agent":
727
+ exitCode = await runAIAgent(args);
728
+ break;
729
+ case "validate":
730
+ exitCode = await runValidate(args);
731
+ break;
732
+ case "doctor":
733
+ exitCode = runDoctor(args);
734
+ break;
735
+ case "init":
736
+ // Enterprise init handles all flags including --gha, --gitlab, --compliance, etc.
737
+ exitCode = await runInit(args);
738
+ break;
739
+ case "mcp":
740
+ exitCode = runMcp(args);
741
+ break;
742
+ case "login":
743
+ exitCode = await runLogin(args);
744
+ break;
745
+ case "logout":
746
+ exitCode = await runLogout(args);
747
+ break;
748
+ case "whoami":
749
+ exitCode = await runWhoami(args);
750
+ break;
751
+ case "badge":
752
+ exitCode = await runBadge(args);
753
+ break;
754
+ case "context":
755
+ case "rules":
756
+ exitCode = await runContext(args);
757
+ break;
758
+ case "dashboard":
759
+ exitCode = await runDashboard(args);
760
+ break;
761
+ case "demo":
762
+ exitCode = await runDemo(args);
763
+ break;
764
+ case "upgrade":
765
+ exitCode = await runUpgrade(args);
766
+ break;
767
+ case "certify":
768
+ exitCode = await runCertify(args, process.cwd());
769
+ break;
770
+ case "verify-agent-output":
771
+ exitCode = await runVerifyAgentOutput(args);
772
+ break;
773
+ case "fixpacks":
774
+ exitCode = await runFixPacks(args);
775
+ break;
776
+ case "audit":
777
+ exitCode = await runAudit(args);
778
+ break;
779
+ case "mdc":
780
+ exitCode = await runMdc(args);
781
+ break;
782
+ case "graph":
783
+ exitCode = await runGraph(args);
784
+ break;
785
+ case "permissions":
786
+ case "authz":
787
+ exitCode = await runPermissions(args);
788
+ break;
789
+ case "ctx":
790
+ case "truthpack":
791
+ // Check for subcommands
792
+ if (args[0] === "sync") {
793
+ exitCode = await runCtxSync({
794
+ repoRoot: process.cwd(),
795
+ fastifyEntry: args.find((a, i) => args[i-1] === '--fastify-entry')
796
+ });
797
+ break;
798
+ }
799
+ if (args[0] === "guard") {
800
+ exitCode = await runCtxGuard.main(args.slice(1));
801
+ break;
802
+ }
803
+ // Parse args for ctx command - use Route Truth v1
804
+ const fastifyEntryIdx = args.indexOf('--fastify-entry');
805
+ const fastifyEntry = fastifyEntryIdx !== -1 ? args[fastifyEntryIdx + 1] : undefined;
806
+ await runCtx({
807
+ repoRoot: process.cwd(),
808
+ fastifyEntry,
809
+ print: args.includes('--print'),
810
+ });
811
+ exitCode = 0;
812
+ break;
813
+ case "version":
814
+ console.log(`vibecheck v${VERSION}`);
815
+ break;
816
+ default:
817
+ // Try natural language parsing as fallback for unknown commands
818
+ const nlInput = [cmd, ...args].join(" ");
819
+ if (isNaturalLanguageCommand(nlInput)) {
820
+ exitCode = await runNaturalLanguage(nlInput);
821
+ } else {
822
+ process.stderr.write(`Unknown command: ${cmd}\n\n`);
823
+ printHelp();
824
+ exitCode = 1;
825
+ }
826
+ }
827
+ process.exit(exitCode);
828
+ } catch (err) {
829
+ process.stderr.write(
830
+ err && err.stack ? err.stack + "\n" : String(err) + "\n",
831
+ );
832
+ process.exit(1);
833
+ }
834
+ })();