@vibecheckai/cli 2.8.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +8 -8
  2. package/bin/_deprecations.js +35 -0
  3. package/bin/_router.js +46 -0
  4. package/bin/cli-hygiene.js +241 -0
  5. package/bin/guardrail.js +834 -0
  6. package/bin/runners/cli-utils.js +1070 -0
  7. package/bin/runners/context/ai-task-decomposer.js +337 -0
  8. package/bin/runners/context/analyzer.js +462 -0
  9. package/bin/runners/context/api-contracts.js +427 -0
  10. package/bin/runners/context/context-diff.js +342 -0
  11. package/bin/runners/context/context-pruner.js +291 -0
  12. package/bin/runners/context/dependency-graph.js +414 -0
  13. package/bin/runners/context/generators/claude.js +107 -0
  14. package/bin/runners/context/generators/codex.js +108 -0
  15. package/bin/runners/context/generators/copilot.js +119 -0
  16. package/bin/runners/context/generators/cursor.js +514 -0
  17. package/bin/runners/context/generators/mcp.js +151 -0
  18. package/bin/runners/context/generators/windsurf.js +180 -0
  19. package/bin/runners/context/git-context.js +302 -0
  20. package/bin/runners/context/index.js +1042 -0
  21. package/bin/runners/context/insights.js +173 -0
  22. package/bin/runners/context/mcp-server/generate-rules.js +337 -0
  23. package/bin/runners/context/mcp-server/index.js +1176 -0
  24. package/bin/runners/context/mcp-server/package.json +24 -0
  25. package/bin/runners/context/memory.js +200 -0
  26. package/bin/runners/context/monorepo.js +215 -0
  27. package/bin/runners/context/multi-repo-federation.js +404 -0
  28. package/bin/runners/context/patterns.js +253 -0
  29. package/bin/runners/context/proof-context.js +972 -0
  30. package/bin/runners/context/security-scanner.js +303 -0
  31. package/bin/runners/context/semantic-search.js +350 -0
  32. package/bin/runners/context/shared.js +264 -0
  33. package/bin/runners/context/team-conventions.js +310 -0
  34. package/bin/runners/lib/ai-bridge.js +416 -0
  35. package/bin/runners/lib/analysis-core.js +271 -0
  36. package/bin/runners/lib/analyzers.js +541 -0
  37. package/bin/runners/lib/audit-bridge.js +391 -0
  38. package/bin/runners/lib/auth-truth.js +193 -0
  39. package/bin/runners/lib/auth.js +215 -0
  40. package/bin/runners/lib/backup.js +62 -0
  41. package/bin/runners/lib/billing.js +107 -0
  42. package/bin/runners/lib/claims.js +118 -0
  43. package/bin/runners/lib/cli-ui.js +540 -0
  44. package/bin/runners/lib/compliance-bridge-new.js +0 -0
  45. package/bin/runners/lib/compliance-bridge.js +165 -0
  46. package/bin/runners/lib/contracts/auth-contract.js +194 -0
  47. package/bin/runners/lib/contracts/env-contract.js +178 -0
  48. package/bin/runners/lib/contracts/external-contract.js +198 -0
  49. package/bin/runners/lib/contracts/guard.js +168 -0
  50. package/bin/runners/lib/contracts/index.js +89 -0
  51. package/bin/runners/lib/contracts/plan-validator.js +311 -0
  52. package/bin/runners/lib/contracts/route-contract.js +192 -0
  53. package/bin/runners/lib/detect.js +89 -0
  54. package/bin/runners/lib/doctor/autofix.js +254 -0
  55. package/bin/runners/lib/doctor/index.js +37 -0
  56. package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
  57. package/bin/runners/lib/doctor/modules/index.js +46 -0
  58. package/bin/runners/lib/doctor/modules/network.js +250 -0
  59. package/bin/runners/lib/doctor/modules/project.js +312 -0
  60. package/bin/runners/lib/doctor/modules/runtime.js +224 -0
  61. package/bin/runners/lib/doctor/modules/security.js +348 -0
  62. package/bin/runners/lib/doctor/modules/system.js +213 -0
  63. package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
  64. package/bin/runners/lib/doctor/reporter.js +262 -0
  65. package/bin/runners/lib/doctor/service.js +262 -0
  66. package/bin/runners/lib/doctor/types.js +113 -0
  67. package/bin/runners/lib/doctor/ui.js +263 -0
  68. package/bin/runners/lib/doctor-enhanced.js +233 -0
  69. package/bin/runners/lib/doctor-v2.js +608 -0
  70. package/bin/runners/lib/enforcement.js +72 -0
  71. package/bin/runners/lib/enterprise-detect.js +603 -0
  72. package/bin/runners/lib/enterprise-init.js +942 -0
  73. package/bin/runners/lib/entitlements-v2.js +381 -0
  74. package/bin/runners/lib/entitlements.generated.js +0 -0
  75. package/bin/runners/lib/entitlements.js +332 -0
  76. package/bin/runners/lib/env-template.js +66 -0
  77. package/bin/runners/lib/env.js +189 -0
  78. package/bin/runners/lib/error-handler.js +320 -0
  79. package/bin/runners/lib/firewall-prompt.js +50 -0
  80. package/bin/runners/lib/graph/graph-builder.js +265 -0
  81. package/bin/runners/lib/graph/html-renderer.js +413 -0
  82. package/bin/runners/lib/graph/index.js +32 -0
  83. package/bin/runners/lib/graph/runtime-collector.js +215 -0
  84. package/bin/runners/lib/graph/static-extractor.js +518 -0
  85. package/bin/runners/lib/init-wizard.js +308 -0
  86. package/bin/runners/lib/json-output.js +76 -0
  87. package/bin/runners/lib/llm.js +75 -0
  88. package/bin/runners/lib/meter.js +61 -0
  89. package/bin/runners/lib/missions/evidence.js +126 -0
  90. package/bin/runners/lib/missions/plan.js +69 -0
  91. package/bin/runners/lib/missions/templates.js +147 -0
  92. package/bin/runners/lib/patch.js +40 -0
  93. package/bin/runners/lib/permissions/auth-model.js +213 -0
  94. package/bin/runners/lib/permissions/idor-prover.js +205 -0
  95. package/bin/runners/lib/permissions/index.js +45 -0
  96. package/bin/runners/lib/permissions/matrix-builder.js +198 -0
  97. package/bin/runners/lib/pkgjson.js +28 -0
  98. package/bin/runners/lib/preflight.js +142 -0
  99. package/bin/runners/lib/reality-findings.js +84 -0
  100. package/bin/runners/lib/redact.js +29 -0
  101. package/bin/runners/lib/replay/capsule-manager.js +154 -0
  102. package/bin/runners/lib/replay/index.js +263 -0
  103. package/bin/runners/lib/replay/player.js +348 -0
  104. package/bin/runners/lib/replay/recorder.js +331 -0
  105. package/bin/runners/lib/report-engine.js +447 -0
  106. package/bin/runners/lib/report-html.js +1117 -0
  107. package/bin/runners/lib/report-templates.js +964 -0
  108. package/bin/runners/lib/route-detection.js +1140 -0
  109. package/bin/runners/lib/route-truth.js +477 -0
  110. package/bin/runners/lib/sandbox/index.js +59 -0
  111. package/bin/runners/lib/sandbox/proof-chain.js +399 -0
  112. package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
  113. package/bin/runners/lib/sandbox/worktree.js +174 -0
  114. package/bin/runners/lib/scan-cache.js +330 -0
  115. package/bin/runners/lib/scan-output-schema.js +344 -0
  116. package/bin/runners/lib/score-history.js +282 -0
  117. package/bin/runners/lib/security-bridge.js +249 -0
  118. package/bin/runners/lib/server-usage.js +513 -0
  119. package/bin/runners/lib/share-pack.js +239 -0
  120. package/bin/runners/lib/snippets.js +67 -0
  121. package/bin/runners/lib/truth.js +667 -0
  122. package/bin/runners/lib/unified-output.js +189 -0
  123. package/bin/runners/lib/validate-patch.js +156 -0
  124. package/bin/runners/lib/verification.js +345 -0
  125. package/bin/runners/reality/engine.js +917 -0
  126. package/bin/runners/reality/flows.js +122 -0
  127. package/bin/runners/reality/report.js +378 -0
  128. package/bin/runners/reality/session.js +193 -0
  129. package/bin/runners/runAIAgent.js +2 -0
  130. package/bin/runners/runAudit.js +2 -0
  131. package/bin/runners/runAuth.js +106 -0
  132. package/bin/runners/runAutopilot.js +2 -0
  133. package/bin/runners/runBadge.js +2 -0
  134. package/bin/runners/runCertify.js +2 -0
  135. package/bin/runners/runClaimVerifier.js +483 -0
  136. package/bin/runners/runContext.js +56 -0
  137. package/bin/runners/runContextCompiler.js +385 -0
  138. package/bin/runners/runCtx.js +187 -0
  139. package/bin/runners/runCtxGuard.js +176 -0
  140. package/bin/runners/runCtxSync.js +116 -0
  141. package/bin/runners/runDashboard.js +10 -0
  142. package/bin/runners/runDoctor.js +245 -0
  143. package/bin/runners/runEnhancedShip.js +2 -0
  144. package/bin/runners/runFix.js +735 -0
  145. package/bin/runners/runFixPacks.js +2 -0
  146. package/bin/runners/runGate.js +17 -0
  147. package/bin/runners/runGraph.js +283 -0
  148. package/bin/runners/runInit.js +260 -0
  149. package/bin/runners/runInitGha.js +101 -0
  150. package/bin/runners/runInstall.js +76 -0
  151. package/bin/runners/runInteractive.js +388 -0
  152. package/bin/runners/runLaunch.js +2 -0
  153. package/bin/runners/runMcp.js +19 -0
  154. package/bin/runners/runMdc.js +2 -0
  155. package/bin/runners/runMissionGenerator.js +282 -0
  156. package/bin/runners/runNaturalLanguage.js +3 -0
  157. package/bin/runners/runPR.js +96 -0
  158. package/bin/runners/runPermissions.js +290 -0
  159. package/bin/runners/runPromptFirewall.js +211 -0
  160. package/bin/runners/runProof.js +2 -0
  161. package/bin/runners/runProve.js +392 -0
  162. package/bin/runners/runReality.js +489 -0
  163. package/bin/runners/runRealitySniff.js +2 -0
  164. package/bin/runners/runReplay.js +469 -0
  165. package/bin/runners/runReport.js +478 -0
  166. package/bin/runners/runScan.js +835 -0
  167. package/bin/runners/runShare.js +34 -0
  168. package/bin/runners/runShip.js +1062 -0
  169. package/bin/runners/runStatus.js +136 -0
  170. package/bin/runners/runTruthpack.js +634 -0
  171. package/bin/runners/runUpgrade.js +2 -0
  172. package/bin/runners/runValidate.js +2 -0
  173. package/bin/runners/runVerifyAgentOutput.js +2 -0
  174. package/bin/runners/runWatch.js +230 -0
  175. package/bin/runners/utils.js +360 -0
  176. package/bin/scan.js +612 -0
  177. package/bin/vibecheck.js +834 -0
  178. package/package.json +11 -11
  179. package/dist/autopatch/verified-autopatch.d.ts +0 -111
  180. package/dist/autopatch/verified-autopatch.d.ts.map +0 -1
  181. package/dist/autopatch/verified-autopatch.js +0 -503
  182. package/dist/autopatch/verified-autopatch.js.map +0 -1
  183. package/dist/bundles/index.js +0 -8
  184. package/dist/bundles/vibecheck-core.js +0 -25799
  185. package/dist/bundles/vibecheck-security.js +0 -208693
  186. package/dist/bundles/vibecheck-ship.js +0 -2318
  187. package/dist/commands/baseline.d.ts +0 -7
  188. package/dist/commands/baseline.d.ts.map +0 -1
  189. package/dist/commands/baseline.js +0 -79
  190. package/dist/commands/baseline.js.map +0 -1
  191. package/dist/commands/cache.d.ts +0 -13
  192. package/dist/commands/cache.d.ts.map +0 -1
  193. package/dist/commands/cache.js +0 -165
  194. package/dist/commands/cache.js.map +0 -1
  195. package/dist/commands/checkpoint.d.ts +0 -8
  196. package/dist/commands/checkpoint.d.ts.map +0 -1
  197. package/dist/commands/checkpoint.js +0 -35
  198. package/dist/commands/checkpoint.js.map +0 -1
  199. package/dist/commands/doctor.d.ts +0 -17
  200. package/dist/commands/doctor.d.ts.map +0 -1
  201. package/dist/commands/doctor.js +0 -226
  202. package/dist/commands/doctor.js.map +0 -1
  203. package/dist/commands/evidence.d.ts +0 -45
  204. package/dist/commands/evidence.d.ts.map +0 -1
  205. package/dist/commands/evidence.js +0 -197
  206. package/dist/commands/evidence.js.map +0 -1
  207. package/dist/commands/explain.d.ts +0 -8
  208. package/dist/commands/explain.d.ts.map +0 -1
  209. package/dist/commands/explain.js +0 -52
  210. package/dist/commands/explain.js.map +0 -1
  211. package/dist/commands/fix-consolidated.d.ts +0 -19
  212. package/dist/commands/fix-consolidated.d.ts.map +0 -1
  213. package/dist/commands/fix-consolidated.js +0 -165
  214. package/dist/commands/fix-consolidated.js.map +0 -1
  215. package/dist/commands/index.d.ts +0 -8
  216. package/dist/commands/index.d.ts.map +0 -1
  217. package/dist/commands/index.js +0 -15
  218. package/dist/commands/index.js.map +0 -1
  219. package/dist/commands/init.d.ts +0 -8
  220. package/dist/commands/init.d.ts.map +0 -1
  221. package/dist/commands/init.js +0 -125
  222. package/dist/commands/init.js.map +0 -1
  223. package/dist/commands/launcher.d.ts +0 -10
  224. package/dist/commands/launcher.d.ts.map +0 -1
  225. package/dist/commands/launcher.js +0 -174
  226. package/dist/commands/launcher.js.map +0 -1
  227. package/dist/commands/on.d.ts +0 -8
  228. package/dist/commands/on.d.ts.map +0 -1
  229. package/dist/commands/on.js +0 -123
  230. package/dist/commands/on.js.map +0 -1
  231. package/dist/commands/replay.d.ts +0 -8
  232. package/dist/commands/replay.d.ts.map +0 -1
  233. package/dist/commands/replay.js +0 -52
  234. package/dist/commands/replay.js.map +0 -1
  235. package/dist/commands/scan-consolidated.d.ts +0 -61
  236. package/dist/commands/scan-consolidated.d.ts.map +0 -1
  237. package/dist/commands/scan-consolidated.js +0 -243
  238. package/dist/commands/scan-consolidated.js.map +0 -1
  239. package/dist/commands/scan-secrets.d.ts +0 -47
  240. package/dist/commands/scan-secrets.d.ts.map +0 -1
  241. package/dist/commands/scan-secrets.js +0 -225
  242. package/dist/commands/scan-secrets.js.map +0 -1
  243. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +0 -41
  244. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +0 -1
  245. package/dist/commands/scan-vulnerabilities-enhanced.js +0 -368
  246. package/dist/commands/scan-vulnerabilities-enhanced.js.map +0 -1
  247. package/dist/commands/scan-vulnerabilities-osv.d.ts +0 -58
  248. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +0 -1
  249. package/dist/commands/scan-vulnerabilities-osv.js +0 -722
  250. package/dist/commands/scan-vulnerabilities-osv.js.map +0 -1
  251. package/dist/commands/scan-vulnerabilities.d.ts +0 -32
  252. package/dist/commands/scan-vulnerabilities.d.ts.map +0 -1
  253. package/dist/commands/scan-vulnerabilities.js +0 -283
  254. package/dist/commands/scan-vulnerabilities.js.map +0 -1
  255. package/dist/commands/secrets-allowlist.d.ts +0 -7
  256. package/dist/commands/secrets-allowlist.d.ts.map +0 -1
  257. package/dist/commands/secrets-allowlist.js +0 -85
  258. package/dist/commands/secrets-allowlist.js.map +0 -1
  259. package/dist/commands/ship-consolidated.d.ts +0 -58
  260. package/dist/commands/ship-consolidated.d.ts.map +0 -1
  261. package/dist/commands/ship-consolidated.js +0 -515
  262. package/dist/commands/ship-consolidated.js.map +0 -1
  263. package/dist/commands/stats.d.ts +0 -8
  264. package/dist/commands/stats.d.ts.map +0 -1
  265. package/dist/commands/stats.js +0 -134
  266. package/dist/commands/stats.js.map +0 -1
  267. package/dist/commands/upgrade.d.ts +0 -8
  268. package/dist/commands/upgrade.d.ts.map +0 -1
  269. package/dist/commands/upgrade.js +0 -30
  270. package/dist/commands/upgrade.js.map +0 -1
  271. package/dist/fix/applicator.d.ts +0 -44
  272. package/dist/fix/applicator.d.ts.map +0 -1
  273. package/dist/fix/applicator.js +0 -144
  274. package/dist/fix/applicator.js.map +0 -1
  275. package/dist/fix/backup.d.ts +0 -38
  276. package/dist/fix/backup.d.ts.map +0 -1
  277. package/dist/fix/backup.js +0 -154
  278. package/dist/fix/backup.js.map +0 -1
  279. package/dist/fix/engine.d.ts +0 -55
  280. package/dist/fix/engine.d.ts.map +0 -1
  281. package/dist/fix/engine.js +0 -285
  282. package/dist/fix/engine.js.map +0 -1
  283. package/dist/fix/index.d.ts +0 -5
  284. package/dist/fix/index.d.ts.map +0 -1
  285. package/dist/fix/index.js +0 -12
  286. package/dist/fix/index.js.map +0 -1
  287. package/dist/fix/interactive.d.ts +0 -22
  288. package/dist/fix/interactive.d.ts.map +0 -1
  289. package/dist/fix/interactive.js +0 -172
  290. package/dist/fix/interactive.js.map +0 -1
  291. package/dist/formatters/index.d.ts +0 -6
  292. package/dist/formatters/index.d.ts.map +0 -1
  293. package/dist/formatters/index.js +0 -11
  294. package/dist/formatters/index.js.map +0 -1
  295. package/dist/formatters/sarif-enhanced.d.ts +0 -78
  296. package/dist/formatters/sarif-enhanced.d.ts.map +0 -1
  297. package/dist/formatters/sarif-enhanced.js +0 -144
  298. package/dist/formatters/sarif-enhanced.js.map +0 -1
  299. package/dist/formatters/sarif-v2.d.ts +0 -121
  300. package/dist/formatters/sarif-v2.d.ts.map +0 -1
  301. package/dist/formatters/sarif-v2.js +0 -356
  302. package/dist/formatters/sarif-v2.js.map +0 -1
  303. package/dist/formatters/sarif.d.ts +0 -72
  304. package/dist/formatters/sarif.d.ts.map +0 -1
  305. package/dist/formatters/sarif.js +0 -146
  306. package/dist/formatters/sarif.js.map +0 -1
  307. package/dist/index.d.ts +0 -61
  308. package/dist/index.d.ts.map +0 -1
  309. package/dist/index.js +0 -4388
  310. package/dist/index.js.map +0 -1
  311. package/dist/init/ci-generator.d.ts +0 -18
  312. package/dist/init/ci-generator.d.ts.map +0 -1
  313. package/dist/init/ci-generator.js +0 -317
  314. package/dist/init/ci-generator.js.map +0 -1
  315. package/dist/init/detect-framework.d.ts +0 -15
  316. package/dist/init/detect-framework.d.ts.map +0 -1
  317. package/dist/init/detect-framework.js +0 -301
  318. package/dist/init/detect-framework.js.map +0 -1
  319. package/dist/init/hooks-installer.d.ts +0 -22
  320. package/dist/init/hooks-installer.d.ts.map +0 -1
  321. package/dist/init/hooks-installer.js +0 -310
  322. package/dist/init/hooks-installer.js.map +0 -1
  323. package/dist/init/index.d.ts +0 -8
  324. package/dist/init/index.d.ts.map +0 -1
  325. package/dist/init/index.js +0 -22
  326. package/dist/init/index.js.map +0 -1
  327. package/dist/init/templates.d.ts +0 -402
  328. package/dist/init/templates.d.ts.map +0 -1
  329. package/dist/init/templates.js +0 -240
  330. package/dist/init/templates.js.map +0 -1
  331. package/dist/mcp/server.d.ts +0 -12
  332. package/dist/mcp/server.d.ts.map +0 -1
  333. package/dist/mcp/server.js +0 -42
  334. package/dist/mcp/server.js.map +0 -1
  335. package/dist/mcp/telemetry.d.ts +0 -40
  336. package/dist/mcp/telemetry.d.ts.map +0 -1
  337. package/dist/mcp/telemetry.js +0 -98
  338. package/dist/mcp/telemetry.js.map +0 -1
  339. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +0 -32
  340. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +0 -1
  341. package/dist/reality/no-dead-buttons/button-sweep-generator.js +0 -236
  342. package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +0 -1
  343. package/dist/reality/no-dead-buttons/index.d.ts +0 -11
  344. package/dist/reality/no-dead-buttons/index.d.ts.map +0 -1
  345. package/dist/reality/no-dead-buttons/index.js +0 -18
  346. package/dist/reality/no-dead-buttons/index.js.map +0 -1
  347. package/dist/reality/no-dead-buttons/static-scanner.d.ts +0 -34
  348. package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +0 -1
  349. package/dist/reality/no-dead-buttons/static-scanner.js +0 -230
  350. package/dist/reality/no-dead-buttons/static-scanner.js.map +0 -1
  351. package/dist/reality/reality-graph.d.ts +0 -192
  352. package/dist/reality/reality-graph.d.ts.map +0 -1
  353. package/dist/reality/reality-graph.js +0 -600
  354. package/dist/reality/reality-graph.js.map +0 -1
  355. package/dist/reality/reality-runner.d.ts +0 -89
  356. package/dist/reality/reality-runner.d.ts.map +0 -1
  357. package/dist/reality/reality-runner.js +0 -540
  358. package/dist/reality/reality-runner.js.map +0 -1
  359. package/dist/reality/receipt-generator.d.ts +0 -152
  360. package/dist/reality/receipt-generator.d.ts.map +0 -1
  361. package/dist/reality/receipt-generator.js +0 -495
  362. package/dist/reality/receipt-generator.js.map +0 -1
  363. package/dist/reality/runtime-tracer.d.ts +0 -75
  364. package/dist/reality/runtime-tracer.d.ts.map +0 -1
  365. package/dist/reality/runtime-tracer.js +0 -109
  366. package/dist/reality/runtime-tracer.js.map +0 -1
  367. package/dist/runtime/auth-utils.d.ts +0 -43
  368. package/dist/runtime/auth-utils.d.ts.map +0 -1
  369. package/dist/runtime/auth-utils.js +0 -130
  370. package/dist/runtime/auth-utils.js.map +0 -1
  371. package/dist/runtime/client.d.ts +0 -74
  372. package/dist/runtime/client.d.ts.map +0 -1
  373. package/dist/runtime/client.js +0 -222
  374. package/dist/runtime/client.js.map +0 -1
  375. package/dist/runtime/creds.d.ts +0 -48
  376. package/dist/runtime/creds.d.ts.map +0 -1
  377. package/dist/runtime/creds.js +0 -245
  378. package/dist/runtime/creds.js.map +0 -1
  379. package/dist/runtime/exit-codes.d.ts +0 -49
  380. package/dist/runtime/exit-codes.d.ts.map +0 -1
  381. package/dist/runtime/exit-codes.js +0 -93
  382. package/dist/runtime/exit-codes.js.map +0 -1
  383. package/dist/runtime/index.d.ts +0 -9
  384. package/dist/runtime/index.d.ts.map +0 -1
  385. package/dist/runtime/index.js +0 -25
  386. package/dist/runtime/index.js.map +0 -1
  387. package/dist/runtime/json-output.d.ts +0 -42
  388. package/dist/runtime/json-output.d.ts.map +0 -1
  389. package/dist/runtime/json-output.js +0 -59
  390. package/dist/runtime/json-output.js.map +0 -1
  391. package/dist/runtime/semver.d.ts +0 -37
  392. package/dist/runtime/semver.d.ts.map +0 -1
  393. package/dist/runtime/semver.js +0 -110
  394. package/dist/runtime/semver.js.map +0 -1
  395. package/dist/scan/dead-ui-detector.d.ts +0 -48
  396. package/dist/scan/dead-ui-detector.d.ts.map +0 -1
  397. package/dist/scan/dead-ui-detector.js +0 -170
  398. package/dist/scan/dead-ui-detector.js.map +0 -1
  399. package/dist/scan/playwright-sweep.d.ts +0 -40
  400. package/dist/scan/playwright-sweep.d.ts.map +0 -1
  401. package/dist/scan/playwright-sweep.js +0 -216
  402. package/dist/scan/playwright-sweep.js.map +0 -1
  403. package/dist/scan/proof-bundle.d.ts +0 -25
  404. package/dist/scan/proof-bundle.d.ts.map +0 -1
  405. package/dist/scan/proof-bundle.js +0 -203
  406. package/dist/scan/proof-bundle.js.map +0 -1
  407. package/dist/scan/proof-graph.d.ts +0 -59
  408. package/dist/scan/proof-graph.d.ts.map +0 -1
  409. package/dist/scan/proof-graph.js +0 -64
  410. package/dist/scan/proof-graph.js.map +0 -1
  411. package/dist/scan/reality-sniff.d.ts +0 -56
  412. package/dist/scan/reality-sniff.d.ts.map +0 -1
  413. package/dist/scan/reality-sniff.js +0 -200
  414. package/dist/scan/reality-sniff.js.map +0 -1
  415. package/dist/scan/structural-verifier.d.ts +0 -20
  416. package/dist/scan/structural-verifier.d.ts.map +0 -1
  417. package/dist/scan/structural-verifier.js +0 -112
  418. package/dist/scan/structural-verifier.js.map +0 -1
  419. package/dist/scan/verification-engine.d.ts +0 -47
  420. package/dist/scan/verification-engine.d.ts.map +0 -1
  421. package/dist/scan/verification-engine.js +0 -141
  422. package/dist/scan/verification-engine.js.map +0 -1
  423. package/dist/scanner/baseline.d.ts +0 -52
  424. package/dist/scanner/baseline.d.ts.map +0 -1
  425. package/dist/scanner/baseline.js +0 -85
  426. package/dist/scanner/baseline.js.map +0 -1
  427. package/dist/scanner/incremental.d.ts +0 -30
  428. package/dist/scanner/incremental.d.ts.map +0 -1
  429. package/dist/scanner/incremental.js +0 -82
  430. package/dist/scanner/incremental.js.map +0 -1
  431. package/dist/scanner/parallel.d.ts +0 -43
  432. package/dist/scanner/parallel.d.ts.map +0 -1
  433. package/dist/scanner/parallel.js +0 -99
  434. package/dist/scanner/parallel.js.map +0 -1
  435. package/dist/standalone.d.ts +0 -1
  436. package/dist/standalone.d.ts.map +0 -1
  437. package/dist/standalone.js +0 -1
  438. package/dist/standalone.js.map +0 -1
  439. package/dist/truth-pack/index.d.ts +0 -102
  440. package/dist/truth-pack/index.d.ts.map +0 -1
  441. package/dist/truth-pack/index.js +0 -694
  442. package/dist/truth-pack/index.js.map +0 -1
  443. package/dist/ui/frame.d.ts +0 -68
  444. package/dist/ui/frame.d.ts.map +0 -1
  445. package/dist/ui/frame.js +0 -165
  446. package/dist/ui/frame.js.map +0 -1
  447. package/dist/ui/index.d.ts +0 -5
  448. package/dist/ui/index.d.ts.map +0 -1
  449. package/dist/ui/index.js +0 -16
  450. package/dist/ui/index.js.map +0 -1
  451. package/dist/ui.d.ts +0 -36
  452. package/dist/ui.d.ts.map +0 -1
  453. package/dist/ui.js +0 -45
  454. package/dist/ui.js.map +0 -1
@@ -0,0 +1,414 @@
1
+ /**
2
+ * Dependency Graph Visualization Module
3
+ * Generates visual maps of component/module relationships
4
+ */
5
+
6
+ const fs = require("fs");
7
+ const path = require("path");
8
+
9
+ /**
10
+ * Find files recursively (local helper)
11
+ */
12
+ function findFiles(dir, extensions, maxDepth = 5, currentDepth = 0) {
13
+ if (currentDepth >= maxDepth || !fs.existsSync(dir)) return [];
14
+
15
+ const files = [];
16
+ try {
17
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
18
+ for (const entry of entries) {
19
+ const fullPath = path.join(dir, entry.name);
20
+ if (entry.isDirectory() && !entry.name.startsWith(".") && entry.name !== "node_modules") {
21
+ files.push(...findFiles(fullPath, extensions, maxDepth, currentDepth + 1));
22
+ } else if (entry.isFile() && extensions.some(ext => entry.name.endsWith(ext))) {
23
+ files.push(fullPath);
24
+ }
25
+ }
26
+ } catch {}
27
+ return files;
28
+ }
29
+
30
+ /**
31
+ * Extract imports from a file
32
+ */
33
+ function extractImports(filePath) {
34
+ const imports = [];
35
+ try {
36
+ const content = fs.readFileSync(filePath, "utf-8");
37
+ const relativePath = path.relative(process.cwd(), filePath).replace(/\\/g, "/");
38
+
39
+ // Match import statements
40
+ const importMatches = content.match(/import\s+.*?\s+from\s+['"]([^'"]+)['"]/g) || [];
41
+
42
+ for (const match of importMatches) {
43
+ const source = match.match(/from\s+['"]([^'"]+)['"]/)?.[1];
44
+ if (source) {
45
+ imports.push({
46
+ from: relativePath,
47
+ to: source,
48
+ type: source.startsWith(".") ? "internal" : "external",
49
+ });
50
+ }
51
+ }
52
+ } catch {}
53
+ return imports;
54
+ }
55
+
56
+ /**
57
+ * Build dependency graph
58
+ */
59
+ function buildDependencyGraph(projectPath) {
60
+ const graph = {
61
+ nodes: new Map(),
62
+ edges: [],
63
+ stats: {
64
+ totalFiles: 0,
65
+ internalImports: 0,
66
+ externalImports: 0,
67
+ circularDeps: 0,
68
+ },
69
+ };
70
+
71
+ const srcFiles = findFiles(projectPath, [".ts", ".tsx", ".js", ".jsx"], 5);
72
+ graph.stats.totalFiles = srcFiles.length;
73
+
74
+ // Extract all imports
75
+ const allImports = [];
76
+ for (const file of srcFiles) {
77
+ const imports = extractImports(file);
78
+ allImports.push(...imports);
79
+ }
80
+
81
+ // Build nodes
82
+ for (const file of srcFiles) {
83
+ const relativePath = path.relative(projectPath, file).replace(/\\/g, "/");
84
+ const ext = path.extname(relativePath);
85
+ const baseName = path.basename(relativePath, ext);
86
+ const dir = path.dirname(relativePath);
87
+
88
+ // Determine node type
89
+ let type = "file";
90
+ if (relativePath.includes("/components/") && /^[A-Z]/.test(baseName)) {
91
+ type = "component";
92
+ } else if (relativePath.includes("/hooks/") || baseName.startsWith("use")) {
93
+ type = "hook";
94
+ } else if (relativePath.includes("/api/") || relativePath.includes("/routes/")) {
95
+ type = "api";
96
+ } else if (relativePath.includes("/lib/") || relativePath.includes("/utils/")) {
97
+ type = "utility";
98
+ } else if (ext === ".json") {
99
+ type = "config";
100
+ }
101
+
102
+ graph.nodes.set(relativePath, {
103
+ id: relativePath,
104
+ label: baseName,
105
+ path: relativePath,
106
+ type,
107
+ imports: [],
108
+ importedBy: [],
109
+ });
110
+ }
111
+
112
+ // Build edges
113
+ for (const imp of allImports) {
114
+ if (imp.type === "internal") {
115
+ // Resolve relative import
116
+ const fromDir = path.dirname(imp.from);
117
+ const toPath = path.resolve(fromDir, imp.to);
118
+ const relativeToPath = path.relative(projectPath, toPath).replace(/\\/g, "/");
119
+
120
+ // Try different file extensions
121
+ let resolvedPath = relativeToPath;
122
+ if (!graph.nodes.has(relativeToPath)) {
123
+ for (const ext of [".ts", ".tsx", ".js", ".jsx", "/index.ts", "/index.js"]) {
124
+ const withExt = relativeToPath + (relativeToPath.endsWith("/") ? ext.slice(1) : ext);
125
+ if (graph.nodes.has(withExt)) {
126
+ resolvedPath = withExt;
127
+ break;
128
+ }
129
+ }
130
+ }
131
+
132
+ if (graph.nodes.has(resolvedPath)) {
133
+ graph.edges.push({
134
+ from: imp.from,
135
+ to: resolvedPath,
136
+ type: "internal",
137
+ });
138
+
139
+ // Update node references
140
+ const fromNode = graph.nodes.get(imp.from);
141
+ const toNode = graph.nodes.get(resolvedPath);
142
+ if (fromNode) fromNode.imports.push(resolvedPath);
143
+ if (toNode) toNode.importedBy.push(imp.from);
144
+
145
+ graph.stats.internalImports++;
146
+ }
147
+ } else {
148
+ graph.stats.externalImports++;
149
+ }
150
+ }
151
+
152
+ // Detect circular dependencies
153
+ const visited = new Set();
154
+ const recursionStack = new Set();
155
+
156
+ function detectCycle(node, path = []) {
157
+ if (recursionStack.has(node)) {
158
+ const cycleStart = path.indexOf(node);
159
+ if (cycleStart > -1) {
160
+ graph.stats.circularDeps++;
161
+ return path.slice(cycleStart);
162
+ }
163
+ }
164
+
165
+ if (visited.has(node)) return null;
166
+
167
+ visited.add(node);
168
+ recursionStack.add(node);
169
+
170
+ const nodeData = graph.nodes.get(node);
171
+ if (nodeData) {
172
+ for (const importPath of nodeData.imports) {
173
+ const cycle = detectCycle(importPath, [...path, node]);
174
+ if (cycle) return cycle;
175
+ }
176
+ }
177
+
178
+ recursionStack.delete(node);
179
+ return null;
180
+ }
181
+
182
+ for (const nodeId of graph.nodes.keys()) {
183
+ if (!visited.has(nodeId)) {
184
+ detectCycle(nodeId);
185
+ }
186
+ }
187
+
188
+ return graph;
189
+ }
190
+
191
+ /**
192
+ * Generate Mermaid diagram from graph
193
+ */
194
+ function generateMermaidDiagram(graph, options = {}) {
195
+ const { maxNodes = 50, includeExternal = false } = options;
196
+
197
+ let diagram = "graph TD\n";
198
+ diagram += " %% Generated by vibecheck Context v3.0\n\n";
199
+
200
+ // Add nodes with styling
201
+ const nodes = Array.from(graph.nodes.values()).slice(0, maxNodes);
202
+ const nodeStyles = {
203
+ component: "fill:#e1f5fe",
204
+ hook: "fill:#f3e5f5",
205
+ api: "fill:#ffebee",
206
+ utility: "fill:#e8f5e9",
207
+ config: "fill:#fff3e0",
208
+ file: "fill:#f5f5f5",
209
+ };
210
+
211
+ for (const node of nodes) {
212
+ const style = nodeStyles[node.type] || nodeStyles.file;
213
+ diagram += ` ${node.id.replace(/[\/\.:]/g, "_")}["${node.label}"]:::${node.type}\n`;
214
+ }
215
+
216
+ // Add styles
217
+ diagram += "\n classDef component fill:#e1f5fe,stroke:#0288d1\n";
218
+ diagram += " classDef hook fill:#f3e5f5,stroke:#7b1fa2\n";
219
+ diagram += " classDef api fill:#ffebee,stroke:#d32f2f\n";
220
+ diagram += " classDef utility fill:#e8f5e9,stroke:#388e3c\n";
221
+ diagram += " classDef config fill:#fff3e0,stroke:#f57c00\n";
222
+ diagram += " classDef file fill:#f5f5f5,stroke:#616161\n\n";
223
+
224
+ // Add edges
225
+ const internalEdges = graph.edges.filter(e => e.type === "internal");
226
+ const edgeCount = Math.min(internalEdges.length, 100);
227
+
228
+ for (let i = 0; i < edgeCount; i++) {
229
+ const edge = internalEdges[i];
230
+ const fromId = edge.from.replace(/[\/\.:]/g, "_");
231
+ const toId = edge.to.replace(/[\/\.:]/g, "_");
232
+ diagram += ` ${fromId} --> ${toId}\n`;
233
+ }
234
+
235
+ // Add node classes
236
+ for (const node of nodes) {
237
+ diagram += ` class ${node.id.replace(/[\/\.:]/g, "_")} ${node.type}\n`;
238
+ }
239
+
240
+ return diagram;
241
+ }
242
+
243
+ /**
244
+ * Generate DOT graph for Graphviz
245
+ */
246
+ function generateDotGraph(graph, options = {}) {
247
+ const { maxNodes = 50 } = options;
248
+
249
+ let dot = "digraph DependencyGraph {\n";
250
+ dot += " // Generated by vibecheck Context v3.0\n";
251
+ dot += " rankdir=LR;\n";
252
+ dot += " node [shape=box, style=filled];\n\n";
253
+
254
+ const nodes = Array.from(graph.nodes.values()).slice(0, maxNodes);
255
+ const colors = {
256
+ component: "#e1f5fe",
257
+ hook: "#f3e5f5",
258
+ api: "#ffebee",
259
+ utility: "#e8f5e9",
260
+ config: "#fff3e0",
261
+ file: "#f5f5f5",
262
+ };
263
+
264
+ // Add nodes
265
+ for (const node of nodes) {
266
+ const color = colors[node.type] || colors.file;
267
+ dot += ` "${node.id}" [label="${node.label}", fillcolor="${color}"];\n`;
268
+ }
269
+
270
+ // Add edges
271
+ const internalEdges = graph.edges.filter(e => e.type === "internal");
272
+ const edgeCount = Math.min(internalEdges.length, 100);
273
+
274
+ for (let i = 0; i < edgeCount; i++) {
275
+ const edge = internalEdges[i];
276
+ dot += ` "${edge.from}" -> "${edge.to}";\n`;
277
+ }
278
+
279
+ dot += "}\n";
280
+ return dot;
281
+ }
282
+
283
+ /**
284
+ * Generate HTML visualization with D3.js
285
+ */
286
+ function generateHtmlVisualization(graph, options = {}) {
287
+ const { maxNodes = 100 } = options;
288
+
289
+ const nodes = Array.from(graph.nodes.values()).slice(0, maxNodes);
290
+ const edges = graph.edges.filter(e => e.type === "internal").slice(0, 200);
291
+
292
+ const html = `<!DOCTYPE html>
293
+ <html>
294
+ <head>
295
+ <title>Dependency Graph - ${path.basename(process.cwd())}</title>
296
+ <script src="https://d3js.org/d3.v7.min.js"></script>
297
+ <style>
298
+ body { font-family: Arial, sans-serif; margin: 20px; }
299
+ .node { cursor: pointer; }
300
+ .node circle { stroke: #333; stroke-width: 2px; }
301
+ .node text { font-size: 12px; pointer-events: none; }
302
+ .link { stroke: #999; stroke-opacity: 0.6; }
303
+ .component { fill: #e1f5fe; }
304
+ .hook { fill: #f3e5f5; }
305
+ .api { fill: #ffebee; }
306
+ .utility { fill: #e8f5e9; }
307
+ .config { fill: #fff3e0; }
308
+ .file { fill: #f5f5f5; }
309
+ .stats { background: #f5f5f5; padding: 15px; border-radius: 5px; margin-bottom: 20px; }
310
+ </style>
311
+ </head>
312
+ <body>
313
+ <h1>Dependency Graph Visualization</h1>
314
+ <div class="stats">
315
+ <strong>Stats:</strong>
316
+ Files: ${graph.stats.totalFiles} |
317
+ Internal Imports: ${graph.stats.internalImports} |
318
+ External Imports: ${graph.stats.externalImports} |
319
+ Circular Dependencies: ${graph.stats.circularDeps}
320
+ </div>
321
+ <svg width="1200" height="800"></svg>
322
+
323
+ <script>
324
+ const data = {
325
+ nodes: ${JSON.stringify(nodes.map(n => ({
326
+ id: n.id,
327
+ label: n.label,
328
+ type: n.type,
329
+ imports: n.imports.length,
330
+ importedBy: n.importedBy.length
331
+ })))},
332
+ links: ${JSON.stringify(edges.map(e => ({
333
+ source: e.from,
334
+ target: e.to
335
+ })))}
336
+ };
337
+
338
+ const svg = d3.select("svg");
339
+ const width = +svg.attr("width");
340
+ const height = +svg.attr("height");
341
+
342
+ const simulation = d3.forceSimulation(data.nodes)
343
+ .force("link", d3.forceLink(data.links).id(d => d.id).distance(100))
344
+ .force("charge", d3.forceManyBody().strength(-300))
345
+ .force("center", d3.forceCenter(width / 2, height / 2));
346
+
347
+ const link = svg.append("g")
348
+ .selectAll("line")
349
+ .data(data.links)
350
+ .enter().append("line")
351
+ .attr("class", "link");
352
+
353
+ const node = svg.append("g")
354
+ .selectAll("g")
355
+ .data(data.nodes)
356
+ .enter().append("g")
357
+ .attr("class", "node")
358
+ .call(d3.drag()
359
+ .on("start", dragstarted)
360
+ .on("drag", dragged)
361
+ .on("end", dragended));
362
+
363
+ node.append("circle")
364
+ .attr("r", d => Math.max(10, Math.min(30, d.imports + d.importedBy)))
365
+ .attr("class", d => d.type);
366
+
367
+ node.append("text")
368
+ .text(d => d.label)
369
+ .attr("x", 0)
370
+ .attr("y", 0);
371
+
372
+ node.on("click", function(event, d) {
373
+ alert(\`File: \${d.id}\\nType: \${d.type}\\nImports: \${d.imports}\\nImported by: \${d.importedBy}\`);
374
+ });
375
+
376
+ simulation.on("tick", () => {
377
+ link
378
+ .attr("x1", d => d.source.x)
379
+ .attr("y1", d => d.source.y)
380
+ .attr("x2", d => d.target.x)
381
+ .attr("y2", d => d.target.y);
382
+
383
+ node.attr("transform", d => \`translate(\${d.x},\${d.y})\`);
384
+ });
385
+
386
+ function dragstarted(event, d) {
387
+ if (!event.active) simulation.alphaTarget(0.3).restart();
388
+ d.fx = d.x;
389
+ d.fy = d.y;
390
+ }
391
+
392
+ function dragged(event, d) {
393
+ d.fx = event.x;
394
+ d.fy = event.y;
395
+ }
396
+
397
+ function dragended(event, d) {
398
+ if (!event.active) simulation.alphaTarget(0);
399
+ d.fx = null;
400
+ d.fy = null;
401
+ }
402
+ </script>
403
+ </body>
404
+ </html>`;
405
+
406
+ return html;
407
+ }
408
+
409
+ module.exports = {
410
+ buildDependencyGraph,
411
+ generateMermaidDiagram,
412
+ generateDotGraph,
413
+ generateHtmlVisualization,
414
+ };
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Claude Desktop Config Generator
3
+ * Generates .claude/mcp-config.json and .claude/project-context.md
4
+ */
5
+
6
+ /**
7
+ * Generate Claude Desktop MCP config and instructions
8
+ */
9
+ function generateClaudeConfig(analysis, projectPath) {
10
+ const p = analysis.patterns || {};
11
+ const m = analysis.monorepo || {};
12
+
13
+ const config = {
14
+ mcpServers: {
15
+ vibecheck: {
16
+ command: "npx",
17
+ args: ["-y", "@vibecheck/mcp-server"],
18
+ env: {
19
+ VIBECHECK_PROJECT_PATH: projectPath,
20
+ },
21
+ },
22
+ },
23
+ };
24
+
25
+ const instructions = `# Claude Desktop - Project Context
26
+
27
+ ## Project: ${analysis.name}
28
+
29
+ ### Quick Reference
30
+
31
+ | Property | Value |
32
+ |----------|-------|
33
+ | Framework | ${analysis.framework || "Unknown"} |
34
+ | Language | ${analysis.language || "JavaScript"} |
35
+ | Architecture | ${analysis.architecture} |
36
+ ${m.isMonorepo ? `| Monorepo | ${m.type} (${m.workspaces?.length || 0} workspaces) |` : ""}
37
+
38
+ ### Tech Stack
39
+
40
+ ${analysis.hasNextjs ? "- **Next.js** - React framework" : ""}
41
+ ${analysis.hasReact ? "- **React** - UI library" : ""}
42
+ ${analysis.hasTypescript ? "- **TypeScript** - Type safety" : ""}
43
+ ${analysis.hasPrisma ? "- **Prisma** - Database ORM" : ""}
44
+ ${analysis.hasTailwind ? "- **Tailwind CSS** - Styling" : ""}
45
+ ${p.stateManagement ? `- **${p.stateManagement}** - State management` : ""}
46
+ ${p.validation ? `- **${p.validation}** - Validation` : ""}
47
+ ${p.authentication ? `- **${p.authentication}** - Authentication` : ""}
48
+
49
+ ### Key Directories
50
+
51
+ ${analysis.directories.map(d => `- \`${d}/\``).join("\n")}
52
+
53
+ ${m.isMonorepo && m.workspaces?.length > 0 ? `### Workspaces
54
+
55
+ ${m.workspaces.slice(0, 10).map(w => `- \`${w.path}\` → ${w.name}`).join("\n")}
56
+ ` : ""}
57
+
58
+ ### Available Commands
59
+
60
+ ${analysis.scripts?.slice(0, 10).map(s => `- \`npm run ${s.name}\``).join("\n") || "See package.json"}
61
+
62
+ ### Data Models
63
+
64
+ ${analysis.models?.slice(0, 15).map(m => `- ${m}`).join("\n") || "None detected"}
65
+
66
+ ### Custom Hooks
67
+
68
+ ${p.hooks?.slice(0, 10).map(h => `- \`${h}\``).join("\n") || "None detected"}
69
+
70
+ ### Components
71
+
72
+ ${analysis.components?.slice(0, 20).map(c => `- ${c}`).join("\n") || "None detected"}
73
+
74
+ ### Environment Variables
75
+
76
+ ${analysis.envVars?.variables?.slice(0, 15).map(v => `- \`${v}\``).join("\n") || "Check .env.example"}
77
+
78
+ ### API Routes
79
+
80
+ ${analysis.apiRoutes?.slice(0, 15).map(r => `- ${r}`).join("\n") || "None detected"}
81
+
82
+ ### Rules for AI
83
+
84
+ 1. **Follow existing patterns** - Match the codebase style
85
+ 2. **Use TypeScript strictly** - No \`any\` types
86
+ 3. **Use existing components** - Check list above first
87
+ 4. **Use existing hooks** - Don't recreate what exists
88
+ 5. **Validate inputs** - Use ${p.validation || "zod"} for validation
89
+ 6. **No hardcoded secrets** - Use environment variables
90
+ 7. **No mock data** - Use real API endpoints
91
+
92
+ ${p.antiPatterns?.length > 0 ? `### ⚠️ Avoid These Patterns
93
+
94
+ ${p.antiPatterns.map(ap => `- ${ap.message}`).join("\n")}
95
+ ` : ""}
96
+
97
+ ---
98
+
99
+ *Context Enhanced by vibecheck AI*
100
+ `;
101
+
102
+ return { config, instructions };
103
+ }
104
+
105
+ module.exports = {
106
+ generateClaudeConfig,
107
+ };
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Codex / ChatGPT Instructions Generator
3
+ * Generates .codex-instructions.md for OpenAI tools
4
+ */
5
+
6
+ /**
7
+ * Generate OpenAI Codex / ChatGPT instructions
8
+ */
9
+ function generateCodexConfig(analysis, projectPath) {
10
+ const p = analysis.patterns || {};
11
+ const m = analysis.monorepo || {};
12
+
13
+ return `# OpenAI Codex / ChatGPT Project Instructions
14
+
15
+ ## Project: ${analysis.name}
16
+
17
+ ### Overview
18
+
19
+ - **Framework:** ${analysis.framework || "Unknown"}
20
+ - **Language:** ${analysis.language || "JavaScript"}
21
+ - **Architecture:** ${analysis.architecture}
22
+ ${m.isMonorepo ? `- **Monorepo:** ${m.type} with ${m.workspaces?.length || 0} workspaces` : ""}
23
+
24
+ ### Tech Stack
25
+
26
+ ${analysis.hasNextjs ? "- Next.js" : ""}
27
+ ${analysis.hasReact ? "- React" : ""}
28
+ ${analysis.hasTypescript ? "- TypeScript (strict mode)" : ""}
29
+ ${analysis.hasPrisma ? "- Prisma ORM" : ""}
30
+ ${analysis.hasTailwind ? "- Tailwind CSS" : ""}
31
+ ${p.stateManagement ? `- State: ${p.stateManagement}` : ""}
32
+ ${p.validation ? `- Validation: ${p.validation}` : ""}
33
+ ${p.authentication ? `- Auth: ${p.authentication}` : ""}
34
+ ${p.dataFetching?.length ? `- Data Fetching: ${p.dataFetching.join(", ")}` : ""}
35
+ ${p.testing?.length ? `- Testing: ${p.testing.join(", ")}` : ""}
36
+
37
+ ### Key Directories
38
+
39
+ ${analysis.directories.map(d => `- \`${d}/\``).join("\n")}
40
+
41
+ ${m.isMonorepo && m.workspaces?.length > 0 ? `### Workspaces
42
+
43
+ ${m.workspaces.slice(0, 10).map(w => `- \`${w.path}\` - ${w.name}`).join("\n")}
44
+ ` : ""}
45
+
46
+ ### Components (${analysis.components?.length || 0})
47
+
48
+ ${analysis.components?.slice(0, 20).map(c => `- ${c}`).join("\n") || "None detected"}
49
+
50
+ ### Data Models (${analysis.models?.length || 0})
51
+
52
+ ${analysis.models?.slice(0, 15).map(m => `- ${m}`).join("\n") || "None detected"}
53
+
54
+ ### Custom Hooks
55
+
56
+ ${p.hooks?.slice(0, 10).map(h => `- ${h}`).join("\n") || "None detected"}
57
+
58
+ ### API Routes
59
+
60
+ ${analysis.apiRoutes?.slice(0, 15).map(r => `- ${r}`).join("\n") || "None detected"}
61
+
62
+ ### Environment Variables
63
+
64
+ ${analysis.envVars?.variables?.slice(0, 15).map(v => `- ${v}`).join("\n") || "Check .env.example"}
65
+
66
+ ### NPM Scripts
67
+
68
+ ${analysis.scripts?.slice(0, 8).map(s => `- \`npm run ${s.name}\` - ${s.command}`).join("\n") || "See package.json"}
69
+
70
+ ### Coding Rules
71
+
72
+ 1. Follow existing patterns in the codebase
73
+ 2. Use TypeScript with strict types - no \`any\`
74
+ 3. Use existing components before creating new ones
75
+ 4. Use existing hooks before creating new ones
76
+ 5. Validate all API inputs with ${p.validation || "zod"}
77
+ 6. Use path aliases (@/) for imports
78
+ 7. Follow the established file naming conventions
79
+ ${analysis.hasTailwind ? "8. Use Tailwind CSS for styling" : ""}
80
+
81
+ ### Anti-Patterns to Avoid
82
+
83
+ ${p.antiPatterns?.map(ap => `- ❌ ${ap.message}`).join("\n") || "- No console.log in production\n- No hardcoded secrets\n- No mock data in production"}
84
+
85
+ ### File Naming Conventions
86
+
87
+ - Components: ${analysis.conventions?.naming?.components || "PascalCase"} (e.g., \`Button.tsx\`)
88
+ - Utilities: camelCase (e.g., \`formatDate.ts\`)
89
+ - Types: \`.types.ts\` or \`.d.ts\`
90
+
91
+ ### Import Order
92
+
93
+ 1. React/framework imports
94
+ 2. Third-party libraries
95
+ 3. Internal components (\`@/components/\`)
96
+ 4. Internal utilities (\`@/lib/\`)
97
+ 5. Types
98
+ 6. Styles
99
+
100
+ ---
101
+
102
+ *Generated by vibecheck AI - https://vibecheckai.dev*
103
+ `;
104
+ }
105
+
106
+ module.exports = {
107
+ generateCodexConfig,
108
+ };