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,514 @@
1
+ /**
2
+ * Cursor Rules Generator
3
+ * Generates .cursorrules and .cursor/rules/*.mdc files
4
+ */
5
+
6
+ /**
7
+ * Get directory purpose description
8
+ */
9
+ function getDirectoryPurpose(dir) {
10
+ const purposes = {
11
+ "src": "Source code root",
12
+ "app": "Next.js App Router pages",
13
+ "pages": "Next.js Pages Router",
14
+ "components": "Reusable UI components",
15
+ "lib": "Utility functions and shared logic",
16
+ "utils": "Helper functions",
17
+ "hooks": "Custom React hooks",
18
+ "services": "API and external service integrations",
19
+ "api": "API route handlers",
20
+ "server": "Server-side code",
21
+ "prisma": "Database schema and migrations",
22
+ "public": "Static assets",
23
+ "styles": "CSS and styling",
24
+ "types": "TypeScript type definitions",
25
+ "config": "Configuration files",
26
+ "test": "Test files",
27
+ "__tests__": "Test files",
28
+ };
29
+ return purposes[dir] || "Project files";
30
+ }
31
+
32
+ /**
33
+ * Generate main .cursorrules file
34
+ */
35
+ function generateCursorRules(analysis) {
36
+ const p = analysis.patterns || {};
37
+ const t = analysis.types || {};
38
+ const s = analysis.stats || {};
39
+ const env = analysis.envVars || {};
40
+ const m = analysis.monorepo || {};
41
+
42
+ return `# vibecheck AI - Project Context for Cursor
43
+
44
+ > Auto-generated by \`vibecheck context\`. Regenerate when your codebase changes.
45
+
46
+ ## Project Overview
47
+
48
+ - **Name**: ${analysis.name}
49
+ - **Framework**: ${analysis.framework || "Unknown"}
50
+ - **Language**: ${analysis.language || "JavaScript"}
51
+ - **Architecture**: ${analysis.architecture}
52
+ ${s.totalFiles ? `- **Size**: ${s.totalFiles} files, ~${Math.round(s.totalLines / 1000)}k lines` : ""}
53
+ ${m.isMonorepo ? `- **Monorepo**: ${m.type} with ${m.workspaces?.length || 0} workspaces` : ""}
54
+
55
+ ## Tech Stack
56
+
57
+ ${analysis.hasNextjs ? "- Next.js (App Router)" : ""}
58
+ ${analysis.hasReact ? "- React" : ""}
59
+ ${analysis.hasTypescript ? "- TypeScript" : ""}
60
+ ${analysis.hasPrisma ? "- Prisma ORM" : ""}
61
+ ${analysis.hasTailwind ? "- Tailwind CSS" : ""}
62
+ ${p.stateManagement ? `- State: ${p.stateManagement}` : ""}
63
+ ${p.validation ? `- Validation: ${p.validation}` : ""}
64
+ ${p.authentication ? `- Auth: ${p.authentication}` : ""}
65
+ ${p.dataFetching?.length ? `- Data Fetching: ${p.dataFetching.join(", ")}` : ""}
66
+
67
+ ## Project Structure
68
+
69
+ \`\`\`
70
+ ${analysis.directories.map(d => `${d}/`).join("\n")}
71
+ \`\`\`
72
+
73
+ ${m.isMonorepo && m.workspaces?.length > 0 ? `## Workspaces
74
+
75
+ ${m.workspaces.slice(0, 10).map(w => `- \`${w.path}\` - ${w.name}`).join("\n")}
76
+ ` : ""}
77
+
78
+ ${p.hooks?.length > 0 ? `## Custom Hooks (Use These!)
79
+
80
+ ${p.hooks.slice(0, 15).map(h => `- \`${h}\``).join("\n")}
81
+
82
+ ${p.codeExamples?.hooks ? `### Example: ${p.codeExamples.hooks.name}
83
+ \`\`\`typescript
84
+ // From: ${p.codeExamples.hooks.file}
85
+ ${p.codeExamples.hooks.code}
86
+ \`\`\`
87
+ ` : ""}
88
+ ` : ""}
89
+
90
+ ${analysis.apiRoutes.length > 0 ? `## API Routes
91
+
92
+ ${analysis.apiRoutes.slice(0, 20).map(r => `- \`${r}\``).join("\n")}
93
+ ${analysis.apiRoutes.length > 20 ? `\n... and ${analysis.apiRoutes.length - 20} more` : ""}
94
+ ` : ""}
95
+
96
+ ${analysis.components.length > 0 ? `## Components (Check Before Creating New)
97
+
98
+ ${analysis.components.slice(0, 30).map(c => `- \`${c}\``).join("\n")}
99
+ ${analysis.components.length > 30 ? `\n... and ${analysis.components.length - 30} more` : ""}
100
+ ` : ""}
101
+
102
+ ${analysis.models.length > 0 ? `## Data Models (Prisma)
103
+
104
+ ${analysis.models.map(m => `- \`${m}\``).join("\n")}
105
+ ` : ""}
106
+
107
+ ${t.interfaces?.length > 0 || t.types?.length > 0 ? `## Key Types & Interfaces
108
+
109
+ ${t.interfaces?.slice(0, 15).map(i => `- \`interface ${i}\``).join("\n") || ""}
110
+ ${t.types?.slice(0, 10).map(ty => `- \`type ${ty}\``).join("\n") || ""}
111
+ ${t.enums?.length > 0 ? `\nEnums: ${t.enums.slice(0, 5).map(e => `\`${e}\``).join(", ")}` : ""}
112
+ ` : ""}
113
+
114
+ ${env.variables?.length > 0 ? `## Environment Variables
115
+
116
+ Required env vars:
117
+ ${env.variables.slice(0, 20).map(v => `- \`${v}\``).join("\n")}
118
+ ${env.files?.length ? `\nEnv files: ${env.files.join(", ")}` : ""}
119
+ ` : ""}
120
+
121
+ ${analysis.scripts?.length > 0 ? `## NPM Scripts
122
+
123
+ ${analysis.scripts.slice(0, 10).map(s => `- \`npm run ${s.name}\` - ${s.command}`).join("\n")}
124
+ ` : ""}
125
+
126
+ ## Coding Conventions
127
+
128
+ ### File Naming
129
+ - Components: ${analysis.conventions.naming.components || "PascalCase"} (e.g., \`Button.tsx\`, \`UserCard.tsx\`)
130
+ - Utilities: camelCase (e.g., \`formatDate.ts\`, \`apiClient.ts\`)
131
+ - Types: PascalCase with \`.d.ts\` or \`.types.ts\` suffix
132
+
133
+ ### Import Order
134
+ 1. React/Next.js imports
135
+ 2. Third-party libraries
136
+ 3. Internal components (\`@/components/\`)
137
+ 4. Internal utilities (\`@/lib/\`, \`@/utils/\`)
138
+ 5. Types
139
+ 6. Styles
140
+
141
+ ### Code Style
142
+ - Use ${analysis.hasTypescript ? "TypeScript with strict mode" : "JavaScript with JSDoc comments"}
143
+ - Prefer functional components with hooks
144
+ - Use path aliases (\`@/\`) for imports
145
+ ${analysis.hasTailwind ? "- Use Tailwind CSS for styling (no inline styles)" : ""}
146
+ ${analysis.hasPrisma ? "- Use Prisma client for database operations" : ""}
147
+ ${p.stateManagement ? `- Use ${p.stateManagement} for state management` : ""}
148
+ ${p.validation ? `- Use ${p.validation} for input validation` : ""}
149
+
150
+ ## Critical Rules
151
+
152
+ 1. **Never hardcode secrets** - Use environment variables
153
+ 2. **No mock data in production** - Check for \`demo\`, \`fake\`, \`mock\` patterns
154
+ 3. **Type everything** - No \`any\` types${analysis.hasTypescript ? "" : " (use JSDoc)"}
155
+ 4. **Follow existing patterns** - Match the codebase style
156
+ 5. **Use existing components** - Don't recreate what exists
157
+ 6. **API routes must validate input** - Never trust client data
158
+ ${p.hooks?.length ? `7. **Use existing hooks** - Check custom hooks list above` : ""}
159
+
160
+ ${p.antiPatterns?.length > 0 ? `## ⚠️ Avoid These Patterns
161
+
162
+ ${p.antiPatterns.map(ap => `- **${ap.message}** - ${ap.suggestion}`).join("\n")}
163
+ ` : ""}
164
+
165
+ ## When Creating New Files
166
+
167
+ 1. Check if similar file exists first
168
+ 2. Place in correct directory based on type
169
+ 3. Follow naming conventions
170
+ 4. Import from correct paths
171
+ 5. Add proper types/interfaces
172
+ ${p.hooks?.length ? `6. Check if there's an existing hook you can use` : ""}
173
+
174
+ ---
175
+
176
+ *Context Enhanced by vibecheck AI*
177
+ `;
178
+ }
179
+
180
+ /**
181
+ * Generate modular Cursor rules (.cursor/rules/*.mdc)
182
+ */
183
+ function generateCursorModularRules(analysis) {
184
+ const rules = {};
185
+ const p = analysis.patterns || {};
186
+ const t = analysis.types || {};
187
+ const env = analysis.envVars || {};
188
+ const m = analysis.monorepo || {};
189
+
190
+ // Architecture rules
191
+ rules["architecture"] = `---
192
+ description: Project architecture and structure guidelines
193
+ globs: ["**/*.{ts,tsx,js,jsx}"]
194
+ alwaysApply: true
195
+ ---
196
+
197
+ # Architecture Guidelines
198
+
199
+ ## Project Type: ${analysis.architecture}
200
+
201
+ ${analysis.hasNextjs ? `### Next.js App Router Structure
202
+ - Pages go in \`app/\` directory
203
+ - API routes in \`app/api/\`
204
+ - Layouts use \`layout.tsx\`
205
+ - Loading states use \`loading.tsx\`
206
+ - Error boundaries use \`error.tsx\`
207
+ ` : ""}
208
+
209
+ ${m.isMonorepo ? `### Monorepo Structure (${m.type})
210
+
211
+ Workspaces:
212
+ ${m.workspaces?.slice(0, 8).map(w => `- \`${w.path}\` - ${w.name}`).join("\n") || "None detected"}
213
+
214
+ ${m.sharedPackages?.length > 0 ? `Shared Packages:
215
+ ${m.sharedPackages.slice(0, 5).map(p => `- ${p.name} (used in ${p.usedIn} workspaces)`).join("\n")}` : ""}
216
+ ` : ""}
217
+
218
+ ### Directory Purpose
219
+ ${analysis.directories.map(d => `- \`${d}/\` - ${getDirectoryPurpose(d)}`).join("\n")}
220
+
221
+ ### Import Aliases
222
+ - Use \`@/\` for src directory imports
223
+ - Never use relative imports deeper than \`../\`
224
+ `;
225
+
226
+ // Data flow rules
227
+ if (analysis.hasPrisma || analysis.apiRoutes.length > 0 || p.dataFetching?.length) {
228
+ rules["data-flow"] = `---
229
+ description: Data fetching and API interaction patterns
230
+ globs: ["**/api/**", "**/lib/**", "**/services/**", "**/hooks/**"]
231
+ alwaysApply: false
232
+ ---
233
+
234
+ # Data Flow Guidelines
235
+
236
+ ${p.dataFetching?.length ? `## Data Fetching: ${p.dataFetching.join(", ")}
237
+
238
+ ${p.dataFetching.includes("TanStack Query") ? `### TanStack Query Pattern
239
+ - Use \`useQuery\` for GET requests
240
+ - Use \`useMutation\` for POST/PUT/DELETE
241
+ - Define query keys consistently
242
+ - Invalidate queries after mutations
243
+ ` : ""}
244
+ ${p.dataFetching.includes("SWR") ? `### SWR Pattern
245
+ - Use \`useSWR\` for data fetching
246
+ - Define fetcher functions
247
+ - Handle loading and error states
248
+ ` : ""}
249
+ ${p.dataFetching.includes("tRPC") ? `### tRPC Pattern
250
+ - Use tRPC procedures for type-safe API calls
251
+ - Define routers in \`server/api/routers\`
252
+ - Use \`api.*.useQuery()\` pattern
253
+ ` : ""}
254
+ ` : ""}
255
+
256
+ ${analysis.hasPrisma ? `## Database (Prisma)
257
+
258
+ Models: ${analysis.models.join(", ")}
259
+
260
+ Rules:
261
+ - Use Prisma client from \`@/lib/prisma\` or \`@/server/db\`
262
+ - Use transactions for multi-step operations
263
+ - Handle errors with try/catch
264
+ - Never expose raw database errors
265
+ ` : ""}
266
+
267
+ ${analysis.apiRoutes.length > 0 ? `## API Routes
268
+
269
+ ${analysis.apiRoutes.slice(0, 15).map(r => `- ${r}`).join("\n")}
270
+
271
+ Rules:
272
+ ${p.validation ? `- Validate all input with ${p.validation}` : "- Validate all input"}
273
+ - Return consistent response shapes
274
+ - Use proper HTTP status codes
275
+ ` : ""}
276
+ `;
277
+ }
278
+
279
+ // Component rules
280
+ if (analysis.components.length > 0) {
281
+ rules["components"] = `---
282
+ description: Component creation and styling guidelines
283
+ globs: ["**/components/**/*.{tsx,jsx}"]
284
+ alwaysApply: false
285
+ ---
286
+
287
+ # Component Guidelines
288
+
289
+ ## Existing Components (${analysis.components.length})
290
+ ${analysis.components.slice(0, 20).map(c => `- \`${c}\``).join("\n")}
291
+
292
+ ## Before Creating New Components
293
+
294
+ 1. **Check if it exists above**
295
+ 2. Place in \`components/\` or feature folder
296
+ 3. Use ${analysis.conventions.naming.components || "PascalCase"} naming
297
+ 4. Export as named export
298
+ ${analysis.hasTailwind ? "5. Use Tailwind CSS for styling" : ""}
299
+ ${p.styling?.length ? `6. Styling: ${p.styling.join(", ")}` : ""}
300
+
301
+ ## Component Template
302
+
303
+ \`\`\`tsx
304
+ interface Props {
305
+ // Define props with types
306
+ }
307
+
308
+ export function ComponentName({ ...props }: Props) {
309
+ return (
310
+ // JSX
311
+ );
312
+ }
313
+ \`\`\`
314
+ `;
315
+ }
316
+
317
+ // Hooks rules
318
+ if (p.hooks?.length > 0) {
319
+ rules["hooks"] = `---
320
+ description: Custom hooks patterns and usage
321
+ globs: ["**/hooks/**/*.{ts,tsx}", "**/use*.{ts,tsx}"]
322
+ alwaysApply: false
323
+ ---
324
+
325
+ # Custom Hooks
326
+
327
+ ## Available Hooks (${p.hooks.length})
328
+
329
+ ${p.hooks.map(h => `- \`${h}\``).join("\n")}
330
+
331
+ ## Before Creating a New Hook
332
+
333
+ 1. **Check the list above first**
334
+ 2. Name it \`use[Feature]\`
335
+ 3. Place in \`hooks/\` or \`lib/hooks/\`
336
+ 4. Return a consistent shape
337
+
338
+ ${p.codeExamples?.hooks ? `## Example
339
+
340
+ \`\`\`typescript
341
+ // ${p.codeExamples.hooks.file}
342
+ ${p.codeExamples.hooks.code}
343
+ \`\`\`
344
+ ` : ""}
345
+ `;
346
+ }
347
+
348
+ // State management rules
349
+ if (p.stateManagement) {
350
+ rules["state"] = `---
351
+ description: State management patterns
352
+ globs: ["**/store/**", "**/state/**", "**/context/**"]
353
+ alwaysApply: false
354
+ ---
355
+
356
+ # State Management: ${p.stateManagement}
357
+
358
+ ${p.stateManagement === "Zustand" ? `## Zustand Pattern
359
+
360
+ \`\`\`typescript
361
+ import { create } from 'zustand'
362
+
363
+ interface Store {
364
+ count: number
365
+ increment: () => void
366
+ }
367
+
368
+ export const useStore = create<Store>((set) => ({
369
+ count: 0,
370
+ increment: () => set((state) => ({ count: state.count + 1 })),
371
+ }))
372
+ \`\`\`
373
+
374
+ - Create stores in \`store/\` directory
375
+ - Use typed store interfaces
376
+ - Keep stores focused and small
377
+ ` : ""}
378
+ ${p.stateManagement === "Redux Toolkit" ? `## Redux Toolkit Pattern
379
+
380
+ \`\`\`typescript
381
+ import { createSlice } from '@reduxjs/toolkit'
382
+
383
+ const slice = createSlice({
384
+ name: 'feature',
385
+ initialState: {},
386
+ reducers: {}
387
+ })
388
+ \`\`\`
389
+
390
+ - Use createSlice for reducers
391
+ - Use createAsyncThunk for async
392
+ ` : ""}
393
+ ${p.stateManagement === "React Context" ? `## Context Pattern
394
+
395
+ \`\`\`typescript
396
+ const Context = createContext<Type | null>(null)
397
+
398
+ export function useFeature() {
399
+ const context = useContext(Context)
400
+ if (!context) throw new Error('Must be used within Provider')
401
+ return context
402
+ }
403
+ \`\`\`
404
+ ` : ""}
405
+ `;
406
+ }
407
+
408
+ // Types rules
409
+ if (t.interfaces?.length > 0 || t.types?.length > 0) {
410
+ rules["types"] = `---
411
+ description: Type definitions and interfaces
412
+ globs: ["**/*.d.ts", "**/types/**", "**/*.types.ts"]
413
+ alwaysApply: false
414
+ ---
415
+
416
+ # Type Definitions
417
+
418
+ ## Interfaces (${t.interfaces?.length || 0})
419
+ ${t.interfaces?.slice(0, 20).map(i => `- \`${i}\``).join("\n") || "None"}
420
+
421
+ ## Types (${t.types?.length || 0})
422
+ ${t.types?.slice(0, 15).map(ty => `- \`${ty}\``).join("\n") || "None"}
423
+
424
+ ${t.enums?.length > 0 ? `## Enums
425
+ ${t.enums.map(e => `- \`${e}\``).join("\n")}` : ""}
426
+
427
+ ## Conventions
428
+ - Interfaces for object shapes
429
+ - Type aliases for unions
430
+ - No \`any\` - use \`unknown\`
431
+ `;
432
+ }
433
+
434
+ // Environment rules
435
+ if (env.variables?.length > 0) {
436
+ rules["environment"] = `---
437
+ description: Environment variables
438
+ globs: ["**/*.env*", "**/config/**"]
439
+ alwaysApply: false
440
+ ---
441
+
442
+ # Environment Variables (${env.variables?.length || 0})
443
+
444
+ ${env.variables?.slice(0, 25).map(v => `- \`${v}\``).join("\n")}
445
+
446
+ ## Rules
447
+ - Never commit \`.env\` files
448
+ - Access via \`process.env.VAR_NAME\`
449
+ - Prefix client-side vars with \`NEXT_PUBLIC_\`
450
+ `;
451
+ }
452
+
453
+ // Anti-patterns rules
454
+ if (p.antiPatterns?.length > 0) {
455
+ rules["avoid"] = `---
456
+ description: Patterns to avoid
457
+ globs: ["**/*.{ts,tsx,js,jsx}"]
458
+ alwaysApply: true
459
+ ---
460
+
461
+ # ⚠️ Patterns to Avoid
462
+
463
+ ${p.antiPatterns.map(ap => `## ${ap.severity === 'error' ? '🔴' : '🟡'} ${ap.message}
464
+ **Fix:** ${ap.suggestion}
465
+ `).join("\n")}
466
+
467
+ ## General
468
+ - ❌ No \`any\` type
469
+ - ❌ No hardcoded secrets
470
+ - ❌ No console.log in production
471
+ - ❌ No mock data in production
472
+ `;
473
+ }
474
+
475
+ // Testing rules
476
+ if (p.testing?.length > 0) {
477
+ rules["testing"] = `---
478
+ description: Testing patterns
479
+ globs: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"]
480
+ alwaysApply: false
481
+ ---
482
+
483
+ # Testing: ${p.testing.join(", ")}
484
+
485
+ ${p.testing.includes("Jest") || p.testing.includes("Vitest") ? `## Unit Tests
486
+
487
+ \`\`\`typescript
488
+ describe('Feature', () => {
489
+ it('should work', () => {
490
+ expect(result).toBe('expected')
491
+ })
492
+ })
493
+ \`\`\`
494
+ ` : ""}
495
+ ${p.testing.includes("Playwright") ? `## E2E Tests
496
+
497
+ \`\`\`typescript
498
+ test('user flow', async ({ page }) => {
499
+ await page.goto('/')
500
+ await page.click('button')
501
+ })
502
+ \`\`\`
503
+ ` : ""}
504
+ `;
505
+ }
506
+
507
+ return rules;
508
+ }
509
+
510
+ module.exports = {
511
+ generateCursorRules,
512
+ generateCursorModularRules,
513
+ getDirectoryPurpose,
514
+ };
@@ -0,0 +1,169 @@
1
+ /**
2
+ * MCP Context JSON Generator
3
+ * Generates .vibecheck/context.json for MCP servers
4
+ *
5
+ * Uses the unified EVIDENCE_SCHEMA and TRUTH_CONTRACT from proof-context.js
6
+ */
7
+
8
+ const { EVIDENCE_SCHEMA, TRUTH_CONTRACT } = require("../proof-context.js");
9
+
10
+ // Context attribution message shown when AI uses vibecheck data
11
+ const CONTEXT_ATTRIBUTION = "🧠 Context enhanced by vibecheck";
12
+
13
+ /**
14
+ * Generate universal context JSON for MCP
15
+ */
16
+ function generateContextJson(analysis, projectPath) {
17
+ const p = analysis.patterns || {};
18
+ const m = analysis.monorepo || {};
19
+
20
+ return JSON.stringify({
21
+ version: "3.0.0",
22
+ generatedAt: new Date().toISOString(),
23
+ generator: "vibecheck-context",
24
+ // Reference the unified schema from proof-context.js
25
+ evidenceSchema: EVIDENCE_SCHEMA,
26
+ truthContract: TRUTH_CONTRACT,
27
+
28
+ project: {
29
+ name: analysis.name,
30
+ path: projectPath,
31
+ framework: analysis.framework,
32
+ language: analysis.language,
33
+ architecture: analysis.architecture,
34
+ },
35
+
36
+ techStack: {
37
+ nextjs: analysis.hasNextjs,
38
+ react: analysis.hasReact,
39
+ typescript: analysis.hasTypescript,
40
+ prisma: analysis.hasPrisma,
41
+ tailwind: analysis.hasTailwind,
42
+ stateManagement: p.stateManagement,
43
+ validation: p.validation,
44
+ authentication: p.authentication,
45
+ dataFetching: p.dataFetching || [],
46
+ testing: p.testing || [],
47
+ styling: p.styling || [],
48
+ },
49
+
50
+ structure: {
51
+ directories: analysis.directories,
52
+ components: analysis.components,
53
+ apiRoutes: analysis.apiRoutes,
54
+ models: analysis.models,
55
+ },
56
+
57
+ patterns: {
58
+ hooks: p.hooks || [],
59
+ stateManagement: p.stateManagement,
60
+ validation: p.validation,
61
+ authentication: p.authentication,
62
+ dataFetching: p.dataFetching || [],
63
+ styling: p.styling || [],
64
+ testing: p.testing || [],
65
+ codeExamples: p.codeExamples || {},
66
+ },
67
+
68
+ antiPatterns: p.antiPatterns || [],
69
+
70
+ types: {
71
+ interfaces: analysis.types?.interfaces || [],
72
+ types: analysis.types?.types || [],
73
+ enums: analysis.types?.enums || [],
74
+ },
75
+
76
+ environment: {
77
+ files: analysis.envVars?.files || [],
78
+ variables: analysis.envVars?.variables || [],
79
+ },
80
+
81
+ scripts: analysis.scripts || [],
82
+
83
+ conventions: {
84
+ naming: analysis.conventions?.naming || {},
85
+ imports: analysis.imports?.importPatterns || [],
86
+ },
87
+
88
+ monorepo: m.isMonorepo ? {
89
+ type: m.type,
90
+ tools: m.tools || [],
91
+ workspaces: m.workspaces?.map(w => ({
92
+ name: w.name,
93
+ path: w.path,
94
+ description: w.description,
95
+ })) || [],
96
+ sharedPackages: m.sharedPackages || [],
97
+ } : null,
98
+
99
+ stats: {
100
+ totalFiles: analysis.stats?.totalFiles || 0,
101
+ totalLines: analysis.stats?.totalLines || 0,
102
+ byExtension: analysis.stats?.byExtension || {},
103
+ largestFiles: analysis.stats?.largestFiles || [],
104
+ },
105
+ contextValidation: analysis.contextValidation || null,
106
+ contextDrift: analysis.contextDrift || null,
107
+ contextSummary: analysis.contextSummary || null,
108
+
109
+ rules: {
110
+ critical: [
111
+ "Never hardcode secrets - use environment variables",
112
+ "No mock data in production code",
113
+ `No 'any' types - use proper TypeScript types`,
114
+ "Follow existing patterns in the codebase",
115
+ "Use existing components before creating new ones",
116
+ "API routes must validate all input",
117
+ ],
118
+ style: [
119
+ `File naming: ${analysis.conventions?.naming?.components || "PascalCase"} for components`,
120
+ "Use path aliases (@/) for imports",
121
+ analysis.hasTailwind ? "Use Tailwind CSS for styling" : null,
122
+ p.stateManagement ? `Use ${p.stateManagement} for state management` : null,
123
+ p.validation ? `Use ${p.validation} for validation` : null,
124
+ ].filter(Boolean),
125
+ },
126
+
127
+ mcp: {
128
+ resources: [
129
+ {
130
+ uri: `file://${projectPath}/.vibecheck/context.json`,
131
+ name: "Project Context",
132
+ description: "Full project analysis and context",
133
+ mimeType: "application/json",
134
+ },
135
+ {
136
+ uri: `file://${projectPath}/.vibecheck/project-map.json`,
137
+ name: "Project Map",
138
+ description: "Complete project structure map",
139
+ mimeType: "application/json",
140
+ },
141
+ {
142
+ uri: `file://${projectPath}/.vibecheck/memory.json`,
143
+ name: "AI Memory",
144
+ description: "AI learning memory for this project",
145
+ mimeType: "application/json",
146
+ },
147
+ ],
148
+ tools: [
149
+ {
150
+ name: "vibecheck.context",
151
+ description: "Regenerate project context",
152
+ },
153
+ {
154
+ name: "vibecheck.analyze",
155
+ description: "Analyze specific file or directory",
156
+ },
157
+ ],
158
+ },
159
+
160
+ // Attribution message for AI responses
161
+ _attribution: CONTEXT_ATTRIBUTION,
162
+ _attributionNote: "Include this attribution when referencing vibecheck context in responses",
163
+ }, null, 2);
164
+ }
165
+
166
+ module.exports = {
167
+ generateContextJson,
168
+ CONTEXT_ATTRIBUTION,
169
+ };