@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,174 @@
1
+ /**
2
+ * Git Worktree Sandbox
3
+ * Provides isolated workspace for applying and testing patches
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { execSync, exec } = require("child_process");
9
+ const fs = require("fs");
10
+ const path = require("path");
11
+ const crypto = require("crypto");
12
+
13
+ function sandboxId() {
14
+ return crypto.randomBytes(4).toString("hex");
15
+ }
16
+
17
+ /**
18
+ * Check if git is available and repo is valid
19
+ */
20
+ function isGitRepo(repoRoot) {
21
+ try {
22
+ execSync("git rev-parse --git-dir", { cwd: repoRoot, stdio: "pipe" });
23
+ return true;
24
+ } catch {
25
+ return false;
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Check if git working directory is clean
31
+ */
32
+ function isGitClean(repoRoot) {
33
+ try {
34
+ const status = execSync("git status --porcelain", { cwd: repoRoot, encoding: "utf8" });
35
+ return status.trim() === "";
36
+ } catch {
37
+ return false;
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Get current HEAD commit
43
+ */
44
+ function getCurrentCommit(repoRoot) {
45
+ try {
46
+ return execSync("git rev-parse HEAD", { cwd: repoRoot, encoding: "utf8" }).trim();
47
+ } catch {
48
+ return null;
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Create a git worktree for sandbox testing
54
+ */
55
+ function createWorktree(repoRoot, sandboxPath) {
56
+ const id = sandboxId();
57
+ const worktreePath = sandboxPath || path.join(repoRoot, ".vibecheck", "sandbox", id);
58
+
59
+ // Ensure parent exists
60
+ fs.mkdirSync(path.dirname(worktreePath), { recursive: true });
61
+
62
+ try {
63
+ // Create detached worktree at HEAD
64
+ execSync(`git worktree add --detach "${worktreePath}" HEAD`, {
65
+ cwd: repoRoot,
66
+ stdio: "pipe"
67
+ });
68
+
69
+ return {
70
+ ok: true,
71
+ path: worktreePath,
72
+ id,
73
+ commit: getCurrentCommit(repoRoot)
74
+ };
75
+ } catch (e) {
76
+ return {
77
+ ok: false,
78
+ error: e.message,
79
+ path: worktreePath
80
+ };
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Remove a git worktree
86
+ */
87
+ function removeWorktree(repoRoot, worktreePath) {
88
+ try {
89
+ execSync(`git worktree remove "${worktreePath}" --force`, {
90
+ cwd: repoRoot,
91
+ stdio: "pipe"
92
+ });
93
+ return { ok: true };
94
+ } catch (e) {
95
+ // Try manual cleanup
96
+ try {
97
+ fs.rmSync(worktreePath, { recursive: true, force: true });
98
+ execSync("git worktree prune", { cwd: repoRoot, stdio: "pipe" });
99
+ return { ok: true };
100
+ } catch (e2) {
101
+ return { ok: false, error: e2.message };
102
+ }
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Copy changes from sandbox back to main worktree
108
+ */
109
+ function copyChangesBack(sandboxPath, repoRoot, changedFiles) {
110
+ const copied = [];
111
+ const failed = [];
112
+
113
+ for (const file of changedFiles) {
114
+ const src = path.join(sandboxPath, file);
115
+ const dest = path.join(repoRoot, file);
116
+
117
+ try {
118
+ if (fs.existsSync(src)) {
119
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
120
+ fs.copyFileSync(src, dest);
121
+ copied.push(file);
122
+ }
123
+ } catch (e) {
124
+ failed.push({ file, error: e.message });
125
+ }
126
+ }
127
+
128
+ return { copied, failed };
129
+ }
130
+
131
+ /**
132
+ * Run command in sandbox
133
+ */
134
+ function runInSandbox(sandboxPath, command, options = {}) {
135
+ try {
136
+ const result = execSync(command, {
137
+ cwd: sandboxPath,
138
+ encoding: "utf8",
139
+ timeout: options.timeout || 60000,
140
+ stdio: "pipe",
141
+ env: { ...process.env, ...options.env }
142
+ });
143
+ return { ok: true, output: result };
144
+ } catch (e) {
145
+ return { ok: false, error: e.message, output: e.stdout || "" };
146
+ }
147
+ }
148
+
149
+ /**
150
+ * List changed files in sandbox compared to HEAD
151
+ */
152
+ function getChangedFiles(sandboxPath) {
153
+ try {
154
+ const output = execSync("git diff --name-only HEAD", {
155
+ cwd: sandboxPath,
156
+ encoding: "utf8"
157
+ });
158
+ return output.trim().split("\n").filter(Boolean);
159
+ } catch {
160
+ return [];
161
+ }
162
+ }
163
+
164
+ module.exports = {
165
+ isGitRepo,
166
+ isGitClean,
167
+ getCurrentCommit,
168
+ createWorktree,
169
+ removeWorktree,
170
+ copyChangesBack,
171
+ runInSandbox,
172
+ getChangedFiles,
173
+ sandboxId
174
+ };
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Scan Cache - File-level caching for incremental scans
3
+ *
4
+ * Caches scan results by file hash to avoid re-scanning unchanged files.
5
+ * Dramatically improves performance for large codebases.
6
+ */
7
+
8
+ const fs = require("fs");
9
+ const path = require("path");
10
+ const crypto = require("crypto");
11
+ const os = require("os");
12
+
13
+ // Cache configuration
14
+ const CACHE_VERSION = "1";
15
+ const CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours
16
+ const CACHE_MAX_ENTRIES = 10000;
17
+
18
+ /**
19
+ * Get the cache directory path
20
+ */
21
+ function getCacheDir() {
22
+ const home = os.homedir();
23
+ if (process.platform === "win32") {
24
+ return path.join(
25
+ process.env.APPDATA || path.join(home, "AppData", "Roaming"),
26
+ "vibecheck",
27
+ "cache"
28
+ );
29
+ }
30
+ return path.join(home, ".cache", "vibecheck", "scans");
31
+ }
32
+
33
+ /**
34
+ * Get cache file path for a project
35
+ */
36
+ function getCacheFilePath(projectPath) {
37
+ const cacheDir = getCacheDir();
38
+ const projectHash = crypto
39
+ .createHash("sha256")
40
+ .update(path.resolve(projectPath))
41
+ .digest("hex")
42
+ .slice(0, 16);
43
+ return path.join(cacheDir, `scan-cache-${projectHash}.json`);
44
+ }
45
+
46
+ /**
47
+ * Ensure cache directory exists
48
+ */
49
+ function ensureCacheDir() {
50
+ const cacheDir = getCacheDir();
51
+ if (!fs.existsSync(cacheDir)) {
52
+ fs.mkdirSync(cacheDir, { recursive: true });
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Compute file hash for cache key
58
+ */
59
+ function computeFileHash(filePath) {
60
+ try {
61
+ const content = fs.readFileSync(filePath);
62
+ return crypto.createHash("sha256").update(content).digest("hex").slice(0, 16);
63
+ } catch {
64
+ return null;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Load cache from disk
70
+ */
71
+ function loadCache(projectPath) {
72
+ try {
73
+ const cachePath = getCacheFilePath(projectPath);
74
+ if (!fs.existsSync(cachePath)) {
75
+ return { version: CACHE_VERSION, entries: {} };
76
+ }
77
+
78
+ const data = JSON.parse(fs.readFileSync(cachePath, "utf8"));
79
+
80
+ // Check version
81
+ if (data.version !== CACHE_VERSION) {
82
+ return { version: CACHE_VERSION, entries: {} };
83
+ }
84
+
85
+ // Prune old entries
86
+ const now = Date.now();
87
+ const entries = {};
88
+ for (const [key, entry] of Object.entries(data.entries)) {
89
+ if (now - entry.timestamp < CACHE_MAX_AGE_MS) {
90
+ entries[key] = entry;
91
+ }
92
+ }
93
+
94
+ return { version: CACHE_VERSION, entries };
95
+ } catch {
96
+ return { version: CACHE_VERSION, entries: {} };
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Save cache to disk with file locking to prevent race conditions
102
+ * Uses atomic write pattern: write to temp file, then rename
103
+ */
104
+ function saveCache(projectPath, cache) {
105
+ try {
106
+ ensureCacheDir();
107
+ const cachePath = getCacheFilePath(projectPath);
108
+ const tempPath = `${cachePath}.tmp.${Date.now()}`;
109
+
110
+ // Limit cache size
111
+ const entries = Object.entries(cache.entries);
112
+ if (entries.length > CACHE_MAX_ENTRIES) {
113
+ // Keep most recent entries
114
+ entries.sort((a, b) => b[1].timestamp - a[1].timestamp);
115
+ cache.entries = Object.fromEntries(entries.slice(0, CACHE_MAX_ENTRIES));
116
+ }
117
+
118
+ // Atomic write: write to temp file first, then rename
119
+ // This prevents race conditions from concurrent cache writes
120
+ fs.writeFileSync(tempPath, JSON.stringify(cache, null, 2), { mode: 0o600 });
121
+ fs.renameSync(tempPath, cachePath);
122
+
123
+ // Clean up any stale temp files older than 5 minutes
124
+ try {
125
+ const dir = path.dirname(cachePath);
126
+ const files = fs.readdirSync(dir);
127
+ const now = Date.now();
128
+ for (const file of files) {
129
+ if (file.startsWith(path.basename(cachePath) + '.tmp.')) {
130
+ const filePath = path.join(dir, file);
131
+ const stats = fs.statSync(filePath);
132
+ if (now - stats.mtimeMs > 5 * 60 * 1000) {
133
+ fs.unlinkSync(filePath);
134
+ }
135
+ }
136
+ }
137
+ } catch {
138
+ // Cleanup failure is not critical
139
+ }
140
+ } catch (err) {
141
+ // Cache write failure is not critical - log but don't throw
142
+ if (process.env.DEBUG || process.env.VIBECHECK_DEBUG) {
143
+ console.warn(`Cache save failed: ${err.message}`);
144
+ }
145
+ }
146
+ }
147
+
148
+ /**
149
+ * ScanCache class for managing file-level scan caching
150
+ */
151
+ class ScanCache {
152
+ constructor(projectPath, options = {}) {
153
+ this.projectPath = path.resolve(projectPath);
154
+ this.enabled = options.useCache !== false;
155
+ this.cache = this.enabled ? loadCache(this.projectPath) : { version: CACHE_VERSION, entries: {} };
156
+ this.hits = 0;
157
+ this.misses = 0;
158
+ }
159
+
160
+ /**
161
+ * Get cached result for a file
162
+ * @param {string} filePath - Absolute path to file
163
+ * @returns {object|null} Cached findings or null if not cached
164
+ */
165
+ get(filePath) {
166
+ if (!this.enabled) return null;
167
+
168
+ const relativePath = path.relative(this.projectPath, filePath);
169
+ const fileHash = computeFileHash(filePath);
170
+ if (!fileHash) return null;
171
+
172
+ const cacheKey = `${relativePath}:${fileHash}`;
173
+ const entry = this.cache.entries[cacheKey];
174
+
175
+ if (entry) {
176
+ this.hits++;
177
+ return entry.findings;
178
+ }
179
+
180
+ this.misses++;
181
+ return null;
182
+ }
183
+
184
+ /**
185
+ * Store findings for a file
186
+ * @param {string} filePath - Absolute path to file
187
+ * @param {Array} findings - Findings for this file
188
+ */
189
+ set(filePath, findings) {
190
+ if (!this.enabled) return;
191
+
192
+ const relativePath = path.relative(this.projectPath, filePath);
193
+ const fileHash = computeFileHash(filePath);
194
+ if (!fileHash) return;
195
+
196
+ const cacheKey = `${relativePath}:${fileHash}`;
197
+ this.cache.entries[cacheKey] = {
198
+ findings,
199
+ timestamp: Date.now(),
200
+ };
201
+ }
202
+
203
+ /**
204
+ * Save cache to disk
205
+ */
206
+ save() {
207
+ if (this.enabled) {
208
+ saveCache(this.projectPath, this.cache);
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Get cache statistics
214
+ */
215
+ getStats() {
216
+ const total = this.hits + this.misses;
217
+ return {
218
+ hits: this.hits,
219
+ misses: this.misses,
220
+ total,
221
+ hitRate: total > 0 ? (this.hits / total * 100).toFixed(1) + "%" : "N/A",
222
+ entries: Object.keys(this.cache.entries).length,
223
+ };
224
+ }
225
+
226
+ /**
227
+ * Clear all cached entries
228
+ */
229
+ clear() {
230
+ this.cache.entries = {};
231
+ this.save();
232
+ }
233
+
234
+ /**
235
+ * Invalidate cache for specific files
236
+ * @param {string[]} filePaths - Files to invalidate
237
+ */
238
+ invalidate(filePaths) {
239
+ for (const filePath of filePaths) {
240
+ const relativePath = path.relative(this.projectPath, filePath);
241
+ // Remove all entries for this file (any hash)
242
+ for (const key of Object.keys(this.cache.entries)) {
243
+ if (key.startsWith(relativePath + ":")) {
244
+ delete this.cache.entries[key];
245
+ }
246
+ }
247
+ }
248
+ this.save();
249
+ }
250
+ }
251
+
252
+ /**
253
+ * Clear all scan caches
254
+ */
255
+ function clearAllCaches() {
256
+ try {
257
+ const cacheDir = getCacheDir();
258
+ if (fs.existsSync(cacheDir)) {
259
+ const files = fs.readdirSync(cacheDir);
260
+ for (const file of files) {
261
+ if (file.startsWith("scan-cache-") && file.endsWith(".json")) {
262
+ fs.unlinkSync(path.join(cacheDir, file));
263
+ }
264
+ }
265
+ }
266
+ return { success: true, message: "All scan caches cleared" };
267
+ } catch (err) {
268
+ return { success: false, message: `Failed to clear caches: ${err.message}` };
269
+ }
270
+ }
271
+
272
+ /**
273
+ * Get cache info for all projects
274
+ */
275
+ function getCacheInfo() {
276
+ try {
277
+ const cacheDir = getCacheDir();
278
+ if (!fs.existsSync(cacheDir)) {
279
+ return { projects: [], totalSize: 0 };
280
+ }
281
+
282
+ const projects = [];
283
+ let totalSize = 0;
284
+
285
+ const files = fs.readdirSync(cacheDir);
286
+ for (const file of files) {
287
+ if (file.startsWith("scan-cache-") && file.endsWith(".json")) {
288
+ const filePath = path.join(cacheDir, file);
289
+ const stats = fs.statSync(filePath);
290
+ totalSize += stats.size;
291
+
292
+ try {
293
+ const data = JSON.parse(fs.readFileSync(filePath, "utf8"));
294
+ projects.push({
295
+ file,
296
+ entries: Object.keys(data.entries || {}).length,
297
+ size: stats.size,
298
+ modified: stats.mtime,
299
+ });
300
+ } catch {
301
+ // Ignore corrupted cache files
302
+ }
303
+ }
304
+ }
305
+
306
+ return {
307
+ projects,
308
+ totalSize,
309
+ totalSizeFormatted: formatBytes(totalSize),
310
+ };
311
+ } catch {
312
+ return { projects: [], totalSize: 0 };
313
+ }
314
+ }
315
+
316
+ function formatBytes(bytes) {
317
+ if (bytes === 0) return "0 B";
318
+ const k = 1024;
319
+ const sizes = ["B", "KB", "MB", "GB"];
320
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
321
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + " " + sizes[i];
322
+ }
323
+
324
+ module.exports = {
325
+ ScanCache,
326
+ clearAllCaches,
327
+ getCacheInfo,
328
+ getCacheDir,
329
+ computeFileHash,
330
+ };