vibecheck-ai 2.0.1 → 5.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 (456) hide show
  1. package/bin/.generated +25 -0
  2. package/bin/_deprecations.js +463 -0
  3. package/bin/_router.js +46 -0
  4. package/bin/cli-hygiene.js +241 -0
  5. package/bin/dev/run-v2-torture.js +30 -0
  6. package/bin/registry.js +656 -0
  7. package/bin/runners/CLI_REFACTOR_SUMMARY.md +229 -0
  8. package/bin/runners/ENHANCEMENT_GUIDE.md +121 -0
  9. package/bin/runners/REPORT_AUDIT.md +64 -0
  10. package/bin/runners/cli-utils.js +1070 -0
  11. package/bin/runners/context/ai-task-decomposer.js +337 -0
  12. package/bin/runners/context/analyzer.js +513 -0
  13. package/bin/runners/context/api-contracts.js +427 -0
  14. package/bin/runners/context/context-diff.js +342 -0
  15. package/bin/runners/context/context-pruner.js +291 -0
  16. package/bin/runners/context/dependency-graph.js +414 -0
  17. package/bin/runners/context/generators/claude.js +107 -0
  18. package/bin/runners/context/generators/codex.js +108 -0
  19. package/bin/runners/context/generators/copilot.js +119 -0
  20. package/bin/runners/context/generators/cursor-enhanced.js +2525 -0
  21. package/bin/runners/context/generators/cursor.js +514 -0
  22. package/bin/runners/context/generators/mcp.js +169 -0
  23. package/bin/runners/context/generators/windsurf.js +180 -0
  24. package/bin/runners/context/git-context.js +304 -0
  25. package/bin/runners/context/index.js +1110 -0
  26. package/bin/runners/context/insights.js +173 -0
  27. package/bin/runners/context/mcp-server/generate-rules.js +337 -0
  28. package/bin/runners/context/mcp-server/index.js +1176 -0
  29. package/bin/runners/context/mcp-server/package.json +24 -0
  30. package/bin/runners/context/memory.js +200 -0
  31. package/bin/runners/context/monorepo.js +215 -0
  32. package/bin/runners/context/multi-repo-federation.js +404 -0
  33. package/bin/runners/context/patterns.js +253 -0
  34. package/bin/runners/context/proof-context.js +1264 -0
  35. package/bin/runners/context/security-scanner.js +541 -0
  36. package/bin/runners/context/semantic-search.js +350 -0
  37. package/bin/runners/context/shared.js +264 -0
  38. package/bin/runners/context/team-conventions.js +336 -0
  39. package/bin/runners/lib/__tests__/entitlements-v2.test.js +295 -0
  40. package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +474 -0
  41. package/bin/runners/lib/agent-firewall/change-packet/builder.js +488 -0
  42. package/bin/runners/lib/agent-firewall/change-packet/schema.json +228 -0
  43. package/bin/runners/lib/agent-firewall/change-packet/store.js +200 -0
  44. package/bin/runners/lib/agent-firewall/claims/claim-types.js +21 -0
  45. package/bin/runners/lib/agent-firewall/claims/extractor.js +303 -0
  46. package/bin/runners/lib/agent-firewall/claims/patterns.js +24 -0
  47. package/bin/runners/lib/agent-firewall/critic/index.js +151 -0
  48. package/bin/runners/lib/agent-firewall/critic/judge.js +432 -0
  49. package/bin/runners/lib/agent-firewall/critic/prompts.js +305 -0
  50. package/bin/runners/lib/agent-firewall/enforcement/gateway.js +1059 -0
  51. package/bin/runners/lib/agent-firewall/enforcement/index.js +98 -0
  52. package/bin/runners/lib/agent-firewall/enforcement/mode.js +318 -0
  53. package/bin/runners/lib/agent-firewall/enforcement/orchestrator.js +484 -0
  54. package/bin/runners/lib/agent-firewall/enforcement/proof-artifact.js +418 -0
  55. package/bin/runners/lib/agent-firewall/enforcement/schemas/change-event.schema.json +173 -0
  56. package/bin/runners/lib/agent-firewall/enforcement/schemas/intent.schema.json +181 -0
  57. package/bin/runners/lib/agent-firewall/enforcement/schemas/verdict.schema.json +222 -0
  58. package/bin/runners/lib/agent-firewall/enforcement/verdict-v2.js +333 -0
  59. package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +88 -0
  60. package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +75 -0
  61. package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +127 -0
  62. package/bin/runners/lib/agent-firewall/evidence/resolver.js +102 -0
  63. package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +213 -0
  64. package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +145 -0
  65. package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +19 -0
  66. package/bin/runners/lib/agent-firewall/fs-hook/installer.js +87 -0
  67. package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +184 -0
  68. package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +163 -0
  69. package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +107 -0
  70. package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +68 -0
  71. package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +66 -0
  72. package/bin/runners/lib/agent-firewall/index.js +200 -0
  73. package/bin/runners/lib/agent-firewall/integration/index.js +20 -0
  74. package/bin/runners/lib/agent-firewall/integration/ship-gate.js +437 -0
  75. package/bin/runners/lib/agent-firewall/intent/alignment-engine.js +634 -0
  76. package/bin/runners/lib/agent-firewall/intent/auto-detect.js +426 -0
  77. package/bin/runners/lib/agent-firewall/intent/index.js +102 -0
  78. package/bin/runners/lib/agent-firewall/intent/schema.js +352 -0
  79. package/bin/runners/lib/agent-firewall/intent/store.js +283 -0
  80. package/bin/runners/lib/agent-firewall/interception/fs-interceptor.js +502 -0
  81. package/bin/runners/lib/agent-firewall/interception/index.js +23 -0
  82. package/bin/runners/lib/agent-firewall/interceptor/base.js +308 -0
  83. package/bin/runners/lib/agent-firewall/interceptor/cursor.js +35 -0
  84. package/bin/runners/lib/agent-firewall/interceptor/vscode.js +35 -0
  85. package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +34 -0
  86. package/bin/runners/lib/agent-firewall/lawbook/distributor.js +465 -0
  87. package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +604 -0
  88. package/bin/runners/lib/agent-firewall/lawbook/index.js +304 -0
  89. package/bin/runners/lib/agent-firewall/lawbook/registry.js +514 -0
  90. package/bin/runners/lib/agent-firewall/lawbook/schema.js +420 -0
  91. package/bin/runners/lib/agent-firewall/logger.js +141 -0
  92. package/bin/runners/lib/agent-firewall/policy/default-policy.json +90 -0
  93. package/bin/runners/lib/agent-firewall/policy/engine.js +103 -0
  94. package/bin/runners/lib/agent-firewall/policy/loader.js +451 -0
  95. package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +50 -0
  96. package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +50 -0
  97. package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +79 -0
  98. package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +227 -0
  99. package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +191 -0
  100. package/bin/runners/lib/agent-firewall/policy/rules/scope.js +93 -0
  101. package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +57 -0
  102. package/bin/runners/lib/agent-firewall/policy/schema.json +183 -0
  103. package/bin/runners/lib/agent-firewall/policy/verdict.js +54 -0
  104. package/bin/runners/lib/agent-firewall/proposal/extractor.js +394 -0
  105. package/bin/runners/lib/agent-firewall/proposal/index.js +212 -0
  106. package/bin/runners/lib/agent-firewall/proposal/schema.js +251 -0
  107. package/bin/runners/lib/agent-firewall/proposal/validator.js +386 -0
  108. package/bin/runners/lib/agent-firewall/reality/index.js +332 -0
  109. package/bin/runners/lib/agent-firewall/reality/state.js +625 -0
  110. package/bin/runners/lib/agent-firewall/reality/watcher.js +322 -0
  111. package/bin/runners/lib/agent-firewall/risk/index.js +173 -0
  112. package/bin/runners/lib/agent-firewall/risk/scorer.js +328 -0
  113. package/bin/runners/lib/agent-firewall/risk/thresholds.js +322 -0
  114. package/bin/runners/lib/agent-firewall/risk/vectors.js +421 -0
  115. package/bin/runners/lib/agent-firewall/session/collector.js +451 -0
  116. package/bin/runners/lib/agent-firewall/session/index.js +26 -0
  117. package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +472 -0
  118. package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +346 -0
  119. package/bin/runners/lib/agent-firewall/simulator/index.js +181 -0
  120. package/bin/runners/lib/agent-firewall/simulator/route-validator.js +380 -0
  121. package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +661 -0
  122. package/bin/runners/lib/agent-firewall/time-machine/index.js +267 -0
  123. package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +436 -0
  124. package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +490 -0
  125. package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +530 -0
  126. package/bin/runners/lib/agent-firewall/truthpack/index.js +67 -0
  127. package/bin/runners/lib/agent-firewall/truthpack/loader.js +137 -0
  128. package/bin/runners/lib/agent-firewall/unblock/planner.js +337 -0
  129. package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +118 -0
  130. package/bin/runners/lib/ai-bridge.js +416 -0
  131. package/bin/runners/lib/analysis-core.js +309 -0
  132. package/bin/runners/lib/analyzers.js +2500 -0
  133. package/bin/runners/lib/api-client.js +269 -0
  134. package/bin/runners/lib/approve-output.js +235 -0
  135. package/bin/runners/lib/artifact-envelope.js +540 -0
  136. package/bin/runners/lib/assets/vibecheck-logo.png +0 -0
  137. package/bin/runners/lib/audit-bridge.js +391 -0
  138. package/bin/runners/lib/auth-shared.js +977 -0
  139. package/bin/runners/lib/auth-truth.js +193 -0
  140. package/bin/runners/lib/auth.js +215 -0
  141. package/bin/runners/lib/authority-badge.js +425 -0
  142. package/bin/runners/lib/backup.js +62 -0
  143. package/bin/runners/lib/billing.js +107 -0
  144. package/bin/runners/lib/checkpoint.js +941 -0
  145. package/bin/runners/lib/claims.js +118 -0
  146. package/bin/runners/lib/classify-output.js +204 -0
  147. package/bin/runners/lib/cleanup/engine.js +571 -0
  148. package/bin/runners/lib/cleanup/index.js +53 -0
  149. package/bin/runners/lib/cleanup/output.js +375 -0
  150. package/bin/runners/lib/cleanup/rules.js +1060 -0
  151. package/bin/runners/lib/cli-output.js +400 -0
  152. package/bin/runners/lib/cli-ui.js +540 -0
  153. package/bin/runners/lib/compliance-bridge-new.js +0 -0
  154. package/bin/runners/lib/compliance-bridge.js +165 -0
  155. package/bin/runners/lib/contracts/auth-contract.js +202 -0
  156. package/bin/runners/lib/contracts/env-contract.js +181 -0
  157. package/bin/runners/lib/contracts/external-contract.js +206 -0
  158. package/bin/runners/lib/contracts/guard.js +168 -0
  159. package/bin/runners/lib/contracts/index.js +89 -0
  160. package/bin/runners/lib/contracts/plan-validator.js +311 -0
  161. package/bin/runners/lib/contracts/route-contract.js +199 -0
  162. package/bin/runners/lib/contracts.js +804 -0
  163. package/bin/runners/lib/default-config.js +127 -0
  164. package/bin/runners/lib/detect.js +89 -0
  165. package/bin/runners/lib/detectors-v2.js +622 -0
  166. package/bin/runners/lib/doctor/autofix.js +254 -0
  167. package/bin/runners/lib/doctor/diagnosis-receipt.js +454 -0
  168. package/bin/runners/lib/doctor/failure-signatures.js +526 -0
  169. package/bin/runners/lib/doctor/fix-script.js +336 -0
  170. package/bin/runners/lib/doctor/index.js +37 -0
  171. package/bin/runners/lib/doctor/modules/build-tools.js +453 -0
  172. package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
  173. package/bin/runners/lib/doctor/modules/index.js +105 -0
  174. package/bin/runners/lib/doctor/modules/network.js +250 -0
  175. package/bin/runners/lib/doctor/modules/os-quirks.js +706 -0
  176. package/bin/runners/lib/doctor/modules/project.js +312 -0
  177. package/bin/runners/lib/doctor/modules/repo-integrity.js +485 -0
  178. package/bin/runners/lib/doctor/modules/runtime.js +224 -0
  179. package/bin/runners/lib/doctor/modules/security.js +350 -0
  180. package/bin/runners/lib/doctor/modules/system.js +213 -0
  181. package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
  182. package/bin/runners/lib/doctor/reporter.js +262 -0
  183. package/bin/runners/lib/doctor/safe-repair.js +384 -0
  184. package/bin/runners/lib/doctor/service.js +262 -0
  185. package/bin/runners/lib/doctor/types.js +113 -0
  186. package/bin/runners/lib/doctor/ui.js +263 -0
  187. package/bin/runners/lib/doctor-enhanced.js +233 -0
  188. package/bin/runners/lib/doctor-output.js +226 -0
  189. package/bin/runners/lib/doctor-v2.js +608 -0
  190. package/bin/runners/lib/drift.js +425 -0
  191. package/bin/runners/lib/enforcement.js +72 -0
  192. package/bin/runners/lib/engine/ast-cache.js +210 -0
  193. package/bin/runners/lib/engine/auth-extractor.js +211 -0
  194. package/bin/runners/lib/engine/billing-extractor.js +112 -0
  195. package/bin/runners/lib/engine/enforcement-extractor.js +100 -0
  196. package/bin/runners/lib/engine/env-extractor.js +207 -0
  197. package/bin/runners/lib/engine/express-extractor.js +208 -0
  198. package/bin/runners/lib/engine/extractors.js +849 -0
  199. package/bin/runners/lib/engine/index.js +207 -0
  200. package/bin/runners/lib/engine/repo-index.js +514 -0
  201. package/bin/runners/lib/engine/types.js +124 -0
  202. package/bin/runners/lib/engines/accessibility-engine.js +190 -0
  203. package/bin/runners/lib/engines/api-consistency-engine.js +162 -0
  204. package/bin/runners/lib/engines/ast-cache.js +99 -0
  205. package/bin/runners/lib/engines/attack-detector.js +1192 -0
  206. package/bin/runners/lib/engines/code-quality-engine.js +255 -0
  207. package/bin/runners/lib/engines/console-logs-engine.js +115 -0
  208. package/bin/runners/lib/engines/cross-file-analysis-engine.js +268 -0
  209. package/bin/runners/lib/engines/dead-code-engine.js +198 -0
  210. package/bin/runners/lib/engines/deprecated-api-engine.js +226 -0
  211. package/bin/runners/lib/engines/empty-catch-engine.js +150 -0
  212. package/bin/runners/lib/engines/file-filter.js +131 -0
  213. package/bin/runners/lib/engines/hardcoded-secrets-engine.js +251 -0
  214. package/bin/runners/lib/engines/mock-data-engine.js +272 -0
  215. package/bin/runners/lib/engines/parallel-processor.js +71 -0
  216. package/bin/runners/lib/engines/performance-issues-engine.js +265 -0
  217. package/bin/runners/lib/engines/security-vulnerabilities-engine.js +243 -0
  218. package/bin/runners/lib/engines/todo-fixme-engine.js +115 -0
  219. package/bin/runners/lib/engines/type-aware-engine.js +152 -0
  220. package/bin/runners/lib/engines/unsafe-regex-engine.js +225 -0
  221. package/bin/runners/lib/engines/vibecheck-engines/README.md +53 -0
  222. package/bin/runners/lib/engines/vibecheck-engines/index.js +15 -0
  223. package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +164 -0
  224. package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +291 -0
  225. package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +83 -0
  226. package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +198 -0
  227. package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +275 -0
  228. package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +167 -0
  229. package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +217 -0
  230. package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +139 -0
  231. package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +140 -0
  232. package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +164 -0
  233. package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +234 -0
  234. package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +217 -0
  235. package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +78 -0
  236. package/bin/runners/lib/engines/vibecheck-engines/package.json +13 -0
  237. package/bin/runners/lib/enterprise-detect.js +603 -0
  238. package/bin/runners/lib/enterprise-init.js +942 -0
  239. package/bin/runners/lib/entitlements-v2.js +265 -0
  240. package/bin/runners/lib/entitlements.generated.js +0 -0
  241. package/bin/runners/lib/entitlements.js +340 -0
  242. package/bin/runners/lib/env-resolver.js +417 -0
  243. package/bin/runners/lib/env-template.js +66 -0
  244. package/bin/runners/lib/env.js +189 -0
  245. package/bin/runners/lib/error-handler.js +368 -0
  246. package/bin/runners/lib/error-messages.js +289 -0
  247. package/bin/runners/lib/evidence-pack.js +684 -0
  248. package/bin/runners/lib/exit-codes.js +275 -0
  249. package/bin/runners/lib/extractors/client-calls.js +990 -0
  250. package/bin/runners/lib/extractors/fastify-route-dump.js +573 -0
  251. package/bin/runners/lib/extractors/fastify-routes.js +426 -0
  252. package/bin/runners/lib/extractors/index.js +363 -0
  253. package/bin/runners/lib/extractors/next-routes.js +524 -0
  254. package/bin/runners/lib/extractors/proof-graph.js +431 -0
  255. package/bin/runners/lib/extractors/route-matcher.js +451 -0
  256. package/bin/runners/lib/extractors/truthpack-v2.js +377 -0
  257. package/bin/runners/lib/extractors/ui-bindings.js +547 -0
  258. package/bin/runners/lib/finding-id.js +69 -0
  259. package/bin/runners/lib/finding-sorter.js +89 -0
  260. package/bin/runners/lib/findings-schema.js +281 -0
  261. package/bin/runners/lib/fingerprint.js +377 -0
  262. package/bin/runners/lib/firewall-prompt.js +50 -0
  263. package/bin/runners/lib/fix-output.js +228 -0
  264. package/bin/runners/lib/global-flags.js +250 -0
  265. package/bin/runners/lib/graph/graph-builder.js +265 -0
  266. package/bin/runners/lib/graph/html-renderer.js +413 -0
  267. package/bin/runners/lib/graph/index.js +32 -0
  268. package/bin/runners/lib/graph/runtime-collector.js +215 -0
  269. package/bin/runners/lib/graph/static-extractor.js +518 -0
  270. package/bin/runners/lib/help-formatter.js +413 -0
  271. package/bin/runners/lib/html-proof-report.js +913 -0
  272. package/bin/runners/lib/html-report.js +650 -0
  273. package/bin/runners/lib/init-wizard.js +601 -0
  274. package/bin/runners/lib/interactive-menu.js +1496 -0
  275. package/bin/runners/lib/json-output.js +76 -0
  276. package/bin/runners/lib/llm.js +75 -0
  277. package/bin/runners/lib/logger.js +38 -0
  278. package/bin/runners/lib/meter.js +61 -0
  279. package/bin/runners/lib/missions/briefing.js +427 -0
  280. package/bin/runners/lib/missions/checkpoint.js +753 -0
  281. package/bin/runners/lib/missions/evidence.js +126 -0
  282. package/bin/runners/lib/missions/hardening.js +851 -0
  283. package/bin/runners/lib/missions/plan.js +648 -0
  284. package/bin/runners/lib/missions/safety-gates.js +645 -0
  285. package/bin/runners/lib/missions/schema.js +478 -0
  286. package/bin/runners/lib/missions/templates.js +317 -0
  287. package/bin/runners/lib/next-action.js +560 -0
  288. package/bin/runners/lib/packs/bundle.js +675 -0
  289. package/bin/runners/lib/packs/evidence-pack.js +671 -0
  290. package/bin/runners/lib/packs/pack-factory.js +837 -0
  291. package/bin/runners/lib/packs/permissions-pack.js +686 -0
  292. package/bin/runners/lib/packs/proof-graph-pack.js +779 -0
  293. package/bin/runners/lib/patch.js +40 -0
  294. package/bin/runners/lib/permissions/auth-model.js +213 -0
  295. package/bin/runners/lib/permissions/idor-prover.js +205 -0
  296. package/bin/runners/lib/permissions/index.js +45 -0
  297. package/bin/runners/lib/permissions/matrix-builder.js +198 -0
  298. package/bin/runners/lib/pkgjson.js +28 -0
  299. package/bin/runners/lib/policy.js +295 -0
  300. package/bin/runners/lib/polish/accessibility.js +62 -0
  301. package/bin/runners/lib/polish/analyzer.js +93 -0
  302. package/bin/runners/lib/polish/backend.js +87 -0
  303. package/bin/runners/lib/polish/configuration.js +83 -0
  304. package/bin/runners/lib/polish/documentation.js +83 -0
  305. package/bin/runners/lib/polish/frontend.js +817 -0
  306. package/bin/runners/lib/polish/index.js +27 -0
  307. package/bin/runners/lib/polish/infrastructure.js +80 -0
  308. package/bin/runners/lib/polish/internationalization.js +85 -0
  309. package/bin/runners/lib/polish/libraries.js +180 -0
  310. package/bin/runners/lib/polish/observability.js +75 -0
  311. package/bin/runners/lib/polish/performance.js +64 -0
  312. package/bin/runners/lib/polish/privacy.js +110 -0
  313. package/bin/runners/lib/polish/resilience.js +92 -0
  314. package/bin/runners/lib/polish/security.js +78 -0
  315. package/bin/runners/lib/polish/seo.js +71 -0
  316. package/bin/runners/lib/polish/styles.js +62 -0
  317. package/bin/runners/lib/polish/utils.js +104 -0
  318. package/bin/runners/lib/preflight.js +142 -0
  319. package/bin/runners/lib/prerequisites.js +149 -0
  320. package/bin/runners/lib/prove-output.js +220 -0
  321. package/bin/runners/lib/reality/correlation-detectors.js +359 -0
  322. package/bin/runners/lib/reality/index.js +318 -0
  323. package/bin/runners/lib/reality/request-hashing.js +416 -0
  324. package/bin/runners/lib/reality/request-mapper.js +453 -0
  325. package/bin/runners/lib/reality/safety-rails.js +463 -0
  326. package/bin/runners/lib/reality/semantic-snapshot.js +408 -0
  327. package/bin/runners/lib/reality/toast-detector.js +393 -0
  328. package/bin/runners/lib/reality-findings.js +84 -0
  329. package/bin/runners/lib/reality-output.js +231 -0
  330. package/bin/runners/lib/receipts.js +179 -0
  331. package/bin/runners/lib/redact.js +29 -0
  332. package/bin/runners/lib/replay/capsule-manager.js +154 -0
  333. package/bin/runners/lib/replay/index.js +263 -0
  334. package/bin/runners/lib/replay/player.js +348 -0
  335. package/bin/runners/lib/replay/recorder.js +331 -0
  336. package/bin/runners/lib/report-engine.js +626 -0
  337. package/bin/runners/lib/report-html.js +1233 -0
  338. package/bin/runners/lib/report-output.js +366 -0
  339. package/bin/runners/lib/report-templates.js +967 -0
  340. package/bin/runners/lib/report.js +135 -0
  341. package/bin/runners/lib/route-detection.js +1209 -0
  342. package/bin/runners/lib/route-truth.js +1322 -0
  343. package/bin/runners/lib/safelist/index.js +96 -0
  344. package/bin/runners/lib/safelist/integration.js +334 -0
  345. package/bin/runners/lib/safelist/matcher.js +696 -0
  346. package/bin/runners/lib/safelist/schema.js +948 -0
  347. package/bin/runners/lib/safelist/store.js +438 -0
  348. package/bin/runners/lib/sandbox/index.js +59 -0
  349. package/bin/runners/lib/sandbox/proof-chain.js +399 -0
  350. package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
  351. package/bin/runners/lib/sandbox/worktree.js +174 -0
  352. package/bin/runners/lib/scan-cache.js +330 -0
  353. package/bin/runners/lib/scan-output-schema.js +344 -0
  354. package/bin/runners/lib/scan-output.js +631 -0
  355. package/bin/runners/lib/scan-runner.js +135 -0
  356. package/bin/runners/lib/schema-validator.js +350 -0
  357. package/bin/runners/lib/schemas/ajv-validator.js +464 -0
  358. package/bin/runners/lib/schemas/contracts.schema.json +160 -0
  359. package/bin/runners/lib/schemas/error-envelope.schema.json +105 -0
  360. package/bin/runners/lib/schemas/finding-v3.schema.json +151 -0
  361. package/bin/runners/lib/schemas/finding.schema.json +100 -0
  362. package/bin/runners/lib/schemas/mission-pack.schema.json +206 -0
  363. package/bin/runners/lib/schemas/proof-graph.schema.json +176 -0
  364. package/bin/runners/lib/schemas/reality-report.schema.json +162 -0
  365. package/bin/runners/lib/schemas/report-artifact.schema.json +120 -0
  366. package/bin/runners/lib/schemas/run-request.schema.json +108 -0
  367. package/bin/runners/lib/schemas/share-pack.schema.json +180 -0
  368. package/bin/runners/lib/schemas/ship-manifest.schema.json +251 -0
  369. package/bin/runners/lib/schemas/ship-report.schema.json +117 -0
  370. package/bin/runners/lib/schemas/truthpack-v2.schema.json +303 -0
  371. package/bin/runners/lib/schemas/validator.js +465 -0
  372. package/bin/runners/lib/schemas/verdict.schema.json +140 -0
  373. package/bin/runners/lib/score-history.js +282 -0
  374. package/bin/runners/lib/security-bridge.js +249 -0
  375. package/bin/runners/lib/server-usage.js +513 -0
  376. package/bin/runners/lib/share-pack.js +239 -0
  377. package/bin/runners/lib/ship-gate.js +832 -0
  378. package/bin/runners/lib/ship-manifest.js +1153 -0
  379. package/bin/runners/lib/ship-output-enterprise.js +239 -0
  380. package/bin/runners/lib/ship-output.js +1128 -0
  381. package/bin/runners/lib/snippets.js +67 -0
  382. package/bin/runners/lib/status-output.js +340 -0
  383. package/bin/runners/lib/terminal-ui.js +356 -0
  384. package/bin/runners/lib/truth.js +1691 -0
  385. package/bin/runners/lib/ui.js +562 -0
  386. package/bin/runners/lib/unified-cli-output.js +947 -0
  387. package/bin/runners/lib/unified-output.js +197 -0
  388. package/bin/runners/lib/upsell.js +410 -0
  389. package/bin/runners/lib/usage.js +153 -0
  390. package/bin/runners/lib/validate-patch.js +156 -0
  391. package/bin/runners/lib/verdict-engine.js +628 -0
  392. package/bin/runners/lib/verification.js +345 -0
  393. package/bin/runners/lib/why-tree.js +650 -0
  394. package/bin/runners/reality/engine.js +917 -0
  395. package/bin/runners/reality/flows.js +122 -0
  396. package/bin/runners/reality/report.js +378 -0
  397. package/bin/runners/reality/session.js +193 -0
  398. package/bin/runners/runAIAgent.js +229 -0
  399. package/bin/runners/runAgent.d.ts +5 -0
  400. package/bin/runners/runAgent.js +161 -0
  401. package/bin/runners/runAllowlist.js +418 -0
  402. package/bin/runners/runApprove.js +320 -0
  403. package/bin/runners/runAudit.js +692 -0
  404. package/bin/runners/runAuth.js +731 -0
  405. package/bin/runners/runCI.js +353 -0
  406. package/bin/runners/runCheckpoint.js +530 -0
  407. package/bin/runners/runClassify.js +928 -0
  408. package/bin/runners/runCleanup.js +343 -0
  409. package/bin/runners/runContext.d.ts +4 -0
  410. package/bin/runners/runContext.js +175 -0
  411. package/bin/runners/runDoctor.js +877 -0
  412. package/bin/runners/runEvidencePack.js +362 -0
  413. package/bin/runners/runFirewall.d.ts +5 -0
  414. package/bin/runners/runFirewall.js +134 -0
  415. package/bin/runners/runFirewallHook.d.ts +5 -0
  416. package/bin/runners/runFirewallHook.js +56 -0
  417. package/bin/runners/runFix.js +1355 -0
  418. package/bin/runners/runForge.js +451 -0
  419. package/bin/runners/runGuard.js +262 -0
  420. package/bin/runners/runInit.js +1927 -0
  421. package/bin/runners/runIntent.js +906 -0
  422. package/bin/runners/runKickoff.js +878 -0
  423. package/bin/runners/runLabs.js +424 -0
  424. package/bin/runners/runLaunch.js +2000 -0
  425. package/bin/runners/runLink.js +785 -0
  426. package/bin/runners/runMcp.js +1875 -0
  427. package/bin/runners/runPacks.js +2089 -0
  428. package/bin/runners/runPolish.d.ts +4 -0
  429. package/bin/runners/runPolish.js +390 -0
  430. package/bin/runners/runPromptFirewall.js +211 -0
  431. package/bin/runners/runProve.js +1411 -0
  432. package/bin/runners/runQuickstart.js +531 -0
  433. package/bin/runners/runReality.js +2260 -0
  434. package/bin/runners/runReport.js +726 -0
  435. package/bin/runners/runRuntime.js +110 -0
  436. package/bin/runners/runSafelist.js +1190 -0
  437. package/bin/runners/runScan.js +688 -0
  438. package/bin/runners/runShield.js +1282 -0
  439. package/bin/runners/runShip.js +1660 -0
  440. package/bin/runners/runTruth.d.ts +5 -0
  441. package/bin/runners/runTruth.js +101 -0
  442. package/bin/runners/runValidate.js +179 -0
  443. package/bin/runners/runWatch.js +478 -0
  444. package/bin/runners/utils.js +360 -0
  445. package/bin/scan.js +617 -0
  446. package/bin/vibecheck.js +1617 -0
  447. package/dist/guardrail/index.d.ts +2405 -0
  448. package/dist/guardrail/index.js +9747 -0
  449. package/dist/guardrail/index.js.map +1 -0
  450. package/dist/scanner/index.d.ts +282 -0
  451. package/dist/scanner/index.js +3395 -0
  452. package/dist/scanner/index.js.map +1 -0
  453. package/package.json +123 -104
  454. package/README.md +0 -491
  455. package/dist/index.js +0 -99711
  456. package/dist/index.js.map +0 -1
@@ -0,0 +1,474 @@
1
+ /**
2
+ * AI-Powered False Positive Analyzer
3
+ *
4
+ * Uses AI to analyze code context and determine if a violation is a false positive.
5
+ * Helps reduce false positives by understanding code intent and patterns.
6
+ */
7
+
8
+ "use strict";
9
+
10
+ const fs = require("fs");
11
+ const path = require("path");
12
+
13
+ // Cache for AI responses to avoid repeated calls
14
+ const aiCache = new Map();
15
+ const CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours
16
+
17
+ /**
18
+ * Analyze if a violation is likely a false positive using AI
19
+ * @param {object} params
20
+ * @param {object} params.violation - Violation object
21
+ * @param {object} params.claim - Original claim
22
+ * @param {string} params.filePath - File path where violation occurred
23
+ * @param {string} params.projectRoot - Project root directory
24
+ * @param {object} params.policy - Policy configuration
25
+ * @returns {Promise<object>} Analysis result with isFalsePositive boolean and confidence
26
+ */
27
+ async function analyzeFalsePositive({ violation, claim, filePath, projectRoot, policy }) {
28
+ const ruleConfig = policy.rules?.ai_false_positive_detection;
29
+
30
+ // Check if AI analysis is enabled
31
+ if (!ruleConfig || !ruleConfig.enabled) {
32
+ return { isFalsePositive: false, confidence: 0, reason: "AI analysis disabled" };
33
+ }
34
+
35
+ // Check cache first
36
+ const cacheKey = `${violation.rule}|${claim.value}|${filePath}`;
37
+ const cached = aiCache.get(cacheKey);
38
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
39
+ return cached.result;
40
+ }
41
+
42
+ try {
43
+ // Read the file to get context
44
+ const fullPath = path.join(projectRoot, filePath);
45
+ if (!fs.existsSync(fullPath)) {
46
+ return { isFalsePositive: false, confidence: 0, reason: "File not found" };
47
+ }
48
+
49
+ const fileContent = fs.readFileSync(fullPath, "utf8");
50
+ const lines = fileContent.split("\n");
51
+
52
+ // Extract context around the violation (10 lines before and after)
53
+ const pointer = claim.pointer || violation.claim?.pointer;
54
+ let startLine = 1;
55
+ let endLine = lines.length;
56
+
57
+ if (pointer) {
58
+ const match = pointer.match(/:(\d+)-(\d+)/);
59
+ if (match) {
60
+ const lineNum = parseInt(match[1], 10);
61
+ startLine = Math.max(1, lineNum - 10);
62
+ endLine = Math.min(lines.length, lineNum + 10);
63
+ }
64
+ }
65
+
66
+ const context = lines.slice(startLine - 1, endLine).join("\n");
67
+ const lineNumbers = Array.from({ length: endLine - startLine + 1 }, (_, i) => startLine + i);
68
+ const numberedContext = lines.slice(startLine - 1, endLine)
69
+ .map((line, i) => `${lineNumbers[i]}: ${line}`)
70
+ .join("\n");
71
+
72
+ // Build AI prompt
73
+ const prompt = buildAnalysisPrompt({
74
+ violation,
75
+ claim,
76
+ filePath,
77
+ context: numberedContext,
78
+ ruleType: violation.rule
79
+ });
80
+
81
+ // Try LLM first if enabled, otherwise use heuristics
82
+ let analysis = null;
83
+ if (ruleConfig.useLLM) {
84
+ analysis = await analyzeWithLLM(prompt, ruleConfig);
85
+ }
86
+
87
+ // Fall back to heuristics if LLM not available or failed
88
+ if (!analysis) {
89
+ analysis = await analyzeWithHeuristics({
90
+ violation,
91
+ claim,
92
+ filePath,
93
+ context,
94
+ numberedContext
95
+ });
96
+ }
97
+
98
+ // Cache result
99
+ aiCache.set(cacheKey, {
100
+ timestamp: Date.now(),
101
+ result: analysis
102
+ });
103
+
104
+ return analysis;
105
+ } catch (error) {
106
+ // If AI analysis fails, default to not a false positive
107
+ return {
108
+ isFalsePositive: false,
109
+ confidence: 0,
110
+ reason: `AI analysis failed: ${error.message}`
111
+ };
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Build prompt for AI analysis
117
+ */
118
+ function buildAnalysisPrompt({ violation, claim, filePath, context, ruleType }) {
119
+ return `Analyze this code violation to determine if it's a false positive.
120
+
121
+ Rule: ${ruleType}
122
+ Claim Type: ${claim.type}
123
+ Claim Value: ${claim.value}
124
+ File: ${filePath}
125
+
126
+ Code Context:
127
+ \`\`\`
128
+ ${context}
129
+ \`\`\`
130
+
131
+ Question: Is this a false positive? Consider:
132
+ 1. Is this an import path being mistaken for a route? (e.g., "from './api/content'")
133
+ 2. Is this an external API call that shouldn't be validated? (e.g., "/content/blog" going to backend)
134
+ 3. Is this test/fixture code that should be ignored?
135
+ 4. Is this a legitimate pattern that the rule doesn't understand?
136
+
137
+ Respond with JSON:
138
+ {
139
+ "isFalsePositive": boolean,
140
+ "confidence": 0.0-1.0,
141
+ "reason": "explanation",
142
+ "suggestedFix": "what to do if false positive"
143
+ }`;
144
+ }
145
+
146
+ /**
147
+ * Analyze using heuristics (can be replaced with actual LLM call)
148
+ * This provides immediate value while LLM integration can be added later
149
+ */
150
+ async function analyzeWithHeuristics({ violation, claim, filePath, context, numberedContext }) {
151
+ const claimValue = String(claim.value || "").trim();
152
+ const filePathLower = filePath.toLowerCase();
153
+ const contextLower = context.toLowerCase();
154
+
155
+ // Heuristic 1: Import paths
156
+ if (claimValue.includes("./") || claimValue.includes("../")) {
157
+ // Check if it's in an import/require statement
158
+ const importPatterns = [
159
+ /from\s+['"]\./,
160
+ /require\(['"]\./,
161
+ /import\s+.*from\s+['"]\./
162
+ ];
163
+
164
+ for (const pattern of importPatterns) {
165
+ if (pattern.test(context)) {
166
+ return {
167
+ isFalsePositive: true,
168
+ confidence: 0.95,
169
+ reason: "This appears to be an import path, not a route",
170
+ suggestedFix: "Update route detection to exclude import statements"
171
+ };
172
+ }
173
+ }
174
+ }
175
+
176
+ // Heuristic 2: External API calls (not starting with /api/)
177
+ if (violation.rule === "ghost_route" && claimValue.startsWith("/")) {
178
+ if (!claimValue.startsWith("/api/")) {
179
+ return {
180
+ isFalsePositive: true,
181
+ confidence: 0.9,
182
+ reason: "This is an external API call to the backend, not a Next.js route",
183
+ suggestedFix: "Only validate Next.js API routes (starting with /api/)"
184
+ };
185
+ }
186
+ }
187
+
188
+ // Heuristic 3: Test files
189
+ if (filePathLower.includes("test") ||
190
+ filePathLower.includes("spec") ||
191
+ filePathLower.includes("fixture") ||
192
+ filePathLower.includes("mock")) {
193
+ return {
194
+ isFalsePositive: true,
195
+ confidence: 0.85,
196
+ reason: "This is in a test/fixture file",
197
+ suggestedFix: "Add test files to .vibecheckignore"
198
+ };
199
+ }
200
+
201
+ // Heuristic 4: Comments or strings
202
+ if (claimValue.includes("//") ||
203
+ claimValue.includes("/*") ||
204
+ contextLower.includes(`"${claimValue}"`) ||
205
+ contextLower.includes(`'${claimValue}'`)) {
206
+ // Check if it's in a comment
207
+ const lines = numberedContext.split("\n");
208
+ for (const line of lines) {
209
+ if (line.includes(claimValue)) {
210
+ const beforeValue = line.substring(0, line.indexOf(claimValue));
211
+ if (beforeValue.includes("//") || beforeValue.includes("/*")) {
212
+ return {
213
+ isFalsePositive: true,
214
+ confidence: 0.8,
215
+ reason: "This appears to be in a comment",
216
+ suggestedFix: "Skip route detection in comments"
217
+ };
218
+ }
219
+ }
220
+ }
221
+ }
222
+
223
+ // Heuristic 5: Environment variable names (for ghost_env)
224
+ if (violation.rule === "ghost_env") {
225
+ // Check if it's a standard/system env var that doesn't need declaration
226
+ const systemEnvVars = [
227
+ "NODE_ENV", "PATH", "HOME", "USER", "SHELL", "TMPDIR",
228
+ "CI", "GITHUB_ACTIONS", "GITLAB_CI", "CIRCLECI", "BUILDKITE",
229
+ "COLORTERM", "TERM", "LANG", "LC_ALL"
230
+ ];
231
+
232
+ if (systemEnvVars.includes(claimValue)) {
233
+ return {
234
+ isFalsePositive: true,
235
+ confidence: 0.9,
236
+ reason: "This is a standard system environment variable",
237
+ suggestedFix: "Add system env vars to allowlist"
238
+ };
239
+ }
240
+ }
241
+
242
+ // Heuristic 6: Success messages in UI components (for fake_success_ui)
243
+ if (violation.rule === "fake_success_ui") {
244
+ // Check if it's just displaying a version number or static text
245
+ if (claimValue.match(/v?\d+\.\d+\.\d+/) || // Version numbers
246
+ claimValue.length < 10) { // Very short messages
247
+ return {
248
+ isFalsePositive: true,
249
+ confidence: 0.7,
250
+ reason: "This appears to be a version number or static text, not a success message",
251
+ suggestedFix: "Improve success message detection to exclude version numbers"
252
+ };
253
+ }
254
+ }
255
+
256
+ // Default: not a false positive
257
+ return {
258
+ isFalsePositive: false,
259
+ confidence: 0.5,
260
+ reason: "No clear indicators of false positive",
261
+ suggestedFix: null
262
+ };
263
+ }
264
+
265
+ /**
266
+ * Call actual LLM for analysis (when AI is available)
267
+ * Uses OpenAI or Anthropic API directly
268
+ */
269
+ async function analyzeWithLLM(prompt, config = {}) {
270
+ const { useLLM = false, provider = "openai" } = config;
271
+
272
+ if (!useLLM) {
273
+ return null;
274
+ }
275
+
276
+ const hasOpenAI = !!process.env.OPENAI_API_KEY;
277
+ const hasAnthropic = !!process.env.ANTHROPIC_API_KEY;
278
+
279
+ if (!hasOpenAI && !hasAnthropic) {
280
+ return null;
281
+ }
282
+
283
+ try {
284
+ // Try OpenAI first (default)
285
+ if ((provider === "openai" || !hasAnthropic) && hasOpenAI) {
286
+ return await callOpenAI(prompt);
287
+ }
288
+
289
+ // Try Anthropic
290
+ if ((provider === "anthropic" || !hasOpenAI) && hasAnthropic) {
291
+ return await callAnthropic(prompt);
292
+ }
293
+ } catch (error) {
294
+ // If LLM call fails, fall back to heuristics
295
+ console.warn(`[AI] LLM analysis failed: ${error.message}`);
296
+ return null;
297
+ }
298
+
299
+ return null;
300
+ }
301
+
302
+ /**
303
+ * Call OpenAI API
304
+ */
305
+ async function callOpenAI(prompt) {
306
+ const https = require("https");
307
+ const http = require("http");
308
+
309
+ const apiKey = process.env.OPENAI_API_KEY;
310
+ if (!apiKey) return null;
311
+
312
+ const requestBody = JSON.stringify({
313
+ model: "gpt-4o-mini", // Fast and cheap model
314
+ messages: [
315
+ {
316
+ role: "system",
317
+ content: "You are a code analysis assistant. Analyze if a code violation is a false positive. Respond with JSON only."
318
+ },
319
+ {
320
+ role: "user",
321
+ content: prompt
322
+ }
323
+ ],
324
+ response_format: { type: "json_object" },
325
+ temperature: 0.3,
326
+ max_tokens: 500
327
+ });
328
+
329
+ return new Promise((resolve, reject) => {
330
+ const options = {
331
+ hostname: "api.openai.com",
332
+ path: "/v1/chat/completions",
333
+ method: "POST",
334
+ headers: {
335
+ "Content-Type": "application/json",
336
+ "Authorization": `Bearer ${apiKey}`,
337
+ "Content-Length": Buffer.byteLength(requestBody)
338
+ },
339
+ timeout: 5000
340
+ };
341
+
342
+ const req = https.request(options, (res) => {
343
+ let data = "";
344
+
345
+ res.on("data", (chunk) => {
346
+ data += chunk;
347
+ });
348
+
349
+ res.on("end", () => {
350
+ try {
351
+ const response = JSON.parse(data);
352
+ if (response.error) {
353
+ reject(new Error(response.error.message));
354
+ return;
355
+ }
356
+
357
+ const content = response.choices?.[0]?.message?.content;
358
+ if (!content) {
359
+ resolve(null);
360
+ return;
361
+ }
362
+
363
+ const result = JSON.parse(content);
364
+ resolve(result);
365
+ } catch (error) {
366
+ reject(error);
367
+ }
368
+ });
369
+ });
370
+
371
+ req.on("error", reject);
372
+ req.on("timeout", () => {
373
+ req.destroy();
374
+ reject(new Error("Request timeout"));
375
+ });
376
+
377
+ req.write(requestBody);
378
+ req.end();
379
+ });
380
+ }
381
+
382
+ /**
383
+ * Call Anthropic API
384
+ */
385
+ async function callAnthropic(prompt) {
386
+ const https = require("https");
387
+
388
+ const apiKey = process.env.ANTHROPIC_API_KEY;
389
+ if (!apiKey) return null;
390
+
391
+ const requestBody = JSON.stringify({
392
+ model: "claude-3-haiku-20240307", // Fast and cheap model
393
+ max_tokens: 500,
394
+ messages: [
395
+ {
396
+ role: "user",
397
+ content: prompt
398
+ }
399
+ ],
400
+ system: "You are a code analysis assistant. Analyze if a code violation is a false positive. Respond with JSON only."
401
+ });
402
+
403
+ return new Promise((resolve, reject) => {
404
+ const options = {
405
+ hostname: "api.anthropic.com",
406
+ path: "/v1/messages",
407
+ method: "POST",
408
+ headers: {
409
+ "Content-Type": "application/json",
410
+ "x-api-key": apiKey,
411
+ "anthropic-version": "2023-06-01",
412
+ "Content-Length": Buffer.byteLength(requestBody)
413
+ },
414
+ timeout: 5000
415
+ };
416
+
417
+ const req = https.request(options, (res) => {
418
+ let data = "";
419
+
420
+ res.on("data", (chunk) => {
421
+ data += chunk;
422
+ });
423
+
424
+ res.on("end", () => {
425
+ try {
426
+ const response = JSON.parse(data);
427
+ if (response.error) {
428
+ reject(new Error(response.error.message));
429
+ return;
430
+ }
431
+
432
+ const content = response.content?.[0]?.text;
433
+ if (!content) {
434
+ resolve(null);
435
+ return;
436
+ }
437
+
438
+ // Extract JSON from response (might be wrapped in markdown)
439
+ const jsonMatch = content.match(/\{[\s\S]*\}/);
440
+ if (!jsonMatch) {
441
+ resolve(null);
442
+ return;
443
+ }
444
+
445
+ const result = JSON.parse(jsonMatch[0]);
446
+ resolve(result);
447
+ } catch (error) {
448
+ reject(error);
449
+ }
450
+ });
451
+ });
452
+
453
+ req.on("error", reject);
454
+ req.on("timeout", () => {
455
+ req.destroy();
456
+ reject(new Error("Request timeout"));
457
+ });
458
+
459
+ req.write(requestBody);
460
+ req.end();
461
+ });
462
+ }
463
+
464
+ /**
465
+ * Clear AI cache (useful for testing)
466
+ */
467
+ function clearCache() {
468
+ aiCache.clear();
469
+ }
470
+
471
+ module.exports = {
472
+ analyzeFalsePositive,
473
+ clearCache
474
+ };