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,4 @@
1
+ /**
2
+ * Type declarations for runPolish.js
3
+ */
4
+ export function runPolish(args: string[]): Promise<number>;
@@ -0,0 +1,390 @@
1
+ /**
2
+ * vibecheck polish - Production Polish Analyzer
3
+ *
4
+ * ═══════════════════════════════════════════════════════════════════════════════
5
+ * Finds all the small detailed things you forgot - the polish that makes
6
+ * projects production-ready.
7
+ *
8
+ * 13 engines: frontend, backend, security, performance, accessibility, seo,
9
+ * configuration, documentation, infrastructure, observability, resilience,
10
+ * internationalization, privacy
11
+ * ═══════════════════════════════════════════════════════════════════════════════
12
+ */
13
+
14
+ const fs = require("fs");
15
+ const path = require("path");
16
+ const { EXIT } = require("./lib/exit-codes");
17
+ const { parseGlobalFlags, shouldSuppressOutput, isJsonMode } = require("./lib/global-flags");
18
+
19
+ // ═══════════════════════════════════════════════════════════════════════════════
20
+ // MODULAR POLISH ENGINE (13 category engines from lib/polish/)
21
+ // ═══════════════════════════════════════════════════════════════════════════════
22
+
23
+ const { analyzeProject } = require("./lib/polish/analyzer");
24
+
25
+ // ═══════════════════════════════════════════════════════════════════════════════
26
+ // TERMINAL STYLING
27
+ // ═══════════════════════════════════════════════════════════════════════════════
28
+
29
+ const c = {
30
+ reset: '\x1b[0m',
31
+ bold: '\x1b[1m',
32
+ dim: '\x1b[2m',
33
+ italic: '\x1b[3m',
34
+ underline: '\x1b[4m',
35
+ red: '\x1b[31m',
36
+ green: '\x1b[32m',
37
+ yellow: '\x1b[33m',
38
+ blue: '\x1b[34m',
39
+ magenta: '\x1b[35m',
40
+ cyan: '\x1b[36m',
41
+ white: '\x1b[37m',
42
+ bgRed: '\x1b[41m',
43
+ bgGreen: '\x1b[42m',
44
+ bgYellow: '\x1b[43m',
45
+ bgBlue: '\x1b[44m',
46
+ };
47
+
48
+ const icons = {
49
+ critical: '🔴',
50
+ high: '🟠',
51
+ medium: '🟡',
52
+ low: '🔵',
53
+ check: '✓',
54
+ cross: '✗',
55
+ arrow: '→',
56
+ star: '★',
57
+ sparkle: '✨',
58
+ wrench: '🔧',
59
+ rocket: '🚀',
60
+ shield: '🛡️',
61
+ lightning: '⚡',
62
+ eye: '👁️',
63
+ search: '🔍',
64
+ book: '📖',
65
+ gear: '⚙️',
66
+ server: '🖥️',
67
+ lock: '🔒',
68
+ };
69
+
70
+ // ═══════════════════════════════════════════════════════════════════════════════
71
+ // UTILITY
72
+ // ═══════════════════════════════════════════════════════════════════════════════
73
+
74
+ async function pathExists(filePath) {
75
+ try { await fs.promises.access(filePath); return true; } catch { return false; }
76
+ }
77
+
78
+ // ═══════════════════════════════════════════════════════════════════════════════
79
+ // CLI INTERFACE
80
+ // ═══════════════════════════════════════════════════════════════════════════════
81
+
82
+ function parseArgs(args) {
83
+ const opts = {
84
+ help: false, fix: false, json: false, prompts: false, verbose: false,
85
+ category: null, path: process.cwd(),
86
+ cleanup: false, apply: false, aggressive: false, yesIAmSure: false, rollback: null,
87
+ };
88
+ for (let i = 0; i < args.length; i++) {
89
+ const arg = args[i];
90
+ if (arg === '--help' || arg === '-h') opts.help = true;
91
+ else if (arg === '--fix' || arg === '-f') opts.fix = true;
92
+ else if (arg === '--json') opts.json = true;
93
+ else if (arg === '--prompts' || arg === '--ai') opts.prompts = true;
94
+ else if (arg === '--verbose' || arg === '-v') opts.verbose = true;
95
+ else if (arg === '--category' || arg === '-c') opts.category = args[++i];
96
+ else if (arg === '--path' || arg === '-p') opts.path = args[++i];
97
+ else if (arg === '--cleanup') opts.cleanup = true;
98
+ else if (arg === '--apply' || arg === '-a') opts.apply = true;
99
+ else if (arg === '--aggressive') opts.aggressive = true;
100
+ else if (arg === '--yes-i-am-sure') opts.yesIAmSure = true;
101
+ else if (arg === '--rollback' || arg === '-r') opts.rollback = args[++i];
102
+ else if (!arg.startsWith('-')) opts.path = arg;
103
+ }
104
+ return opts;
105
+ }
106
+
107
+ function printHelp() {
108
+ console.log(`
109
+ ${c.bold}${icons.sparkle} vibecheck polish${c.reset} - Production Polish Analyzer
110
+
111
+ ${c.dim}Finds all the small detailed things you forgot - the polish that makes
112
+ projects production-ready.${c.reset}
113
+
114
+ ${c.bold}USAGE${c.reset}
115
+ vibecheck polish [options] [path]
116
+
117
+ ${c.bold}OPTIONS${c.reset}
118
+ -h, --help Show this help message
119
+ -f, --fix Auto-fix issues where possible
120
+ --prompts, --ai Show AI prompts for each issue (copy to AI assistant)
121
+ -v, --verbose Show detailed output including AI prompts inline
122
+ -c, --category <name> Check only specific category
123
+ -p, --path <path> Project path (defaults to current directory)
124
+ --json Output as JSON (includes AI prompts)
125
+
126
+ ${c.bold}${icons.wrench} CLEANUP MODE${c.reset} ${c.dim}(production-grade code cleanup)${c.reset}
127
+ --cleanup Enter cleanup mode (remove footguns)
128
+ --apply Apply safe fixes (creates backup first)
129
+ --aggressive Include risky transformations
130
+ --yes-i-am-sure Confirm aggressive fixes
131
+ --rollback <backup> Rollback changes using backup
132
+
133
+ ${c.bold}CATEGORIES${c.reset}
134
+ frontend Error boundaries, skeletons, ARIA, haptics, animations, caching
135
+ backend Health endpoints, validation, rate limiting, error handling
136
+ security .env files, security headers, CORS, secrets management
137
+ performance Image optimization, caching, bundle analysis
138
+ accessibility A11y testing, skip links, focus management
139
+ seo Meta tags, sitemap, robots.txt, Open Graph
140
+ configuration TypeScript, ESLint, Prettier, EditorConfig
141
+ documentation README, CHANGELOG, CONTRIBUTING, LICENSE
142
+ infrastructure Docker, CI/CD, deployment config, env validation
143
+ observability OpenTelemetry, structured logging, metrics, tracing
144
+ resilience Circuit breakers, retry logic, timeouts, graceful shutdown
145
+ internationalization i18n setup, RTL support, locale detection, translations
146
+ privacy GDPR, cookie consent, data export, account deletion
147
+
148
+ ${c.bold}EXAMPLES${c.reset}
149
+ vibecheck polish # Analyze current project
150
+ vibecheck polish --prompts # Show AI prompts for all issues
151
+ vibecheck polish -c frontend --ai # Frontend issues with AI prompts
152
+ vibecheck polish --fix # Auto-fix issues
153
+ vibecheck polish --json # Output JSON for CI
154
+ `);
155
+ }
156
+
157
+ function formatScore(score) {
158
+ if (score >= 90) return `${c.green}${c.bold}${score}/100${c.reset} ${c.green}(Excellent)${c.reset}`;
159
+ if (score >= 70) return `${c.yellow}${c.bold}${score}/100${c.reset} ${c.yellow}(Good)${c.reset}`;
160
+ if (score >= 50) return `${c.yellow}${c.bold}${score}/100${c.reset} ${c.yellow}(Needs Work)${c.reset}`;
161
+ return `${c.red}${c.bold}${score}/100${c.reset} ${c.red}(Critical Issues)${c.reset}`;
162
+ }
163
+
164
+ function formatSeverity(severity) {
165
+ const styles = {
166
+ critical: `${icons.critical} ${c.red}${c.bold}CRITICAL${c.reset}`,
167
+ high: `${icons.high} ${c.yellow}${c.bold}HIGH${c.reset}`,
168
+ medium: `${icons.medium} ${c.yellow}MEDIUM${c.reset}`,
169
+ low: `${icons.low} ${c.blue}LOW${c.reset}`,
170
+ };
171
+ return styles[severity] || severity;
172
+ }
173
+
174
+ function getCategoryIcon(category) {
175
+ const categoryIcons = {
176
+ Frontend: icons.sparkle, Backend: icons.server, Security: icons.lock,
177
+ Performance: icons.lightning, Accessibility: icons.eye, SEO: icons.search,
178
+ Configuration: icons.gear, Documentation: icons.book, Infrastructure: icons.rocket,
179
+ Observability: '📊', Resilience: '🛡️', Internationalization: '🌍', Privacy: '🔐',
180
+ };
181
+ return categoryIcons[category] || icons.star;
182
+ }
183
+
184
+ // ═══════════════════════════════════════════════════════════════════════════════
185
+ // MAIN RUNNER
186
+ // ═══════════════════════════════════════════════════════════════════════════════
187
+
188
+ async function runPolish(args) {
189
+ const opts = parseArgs(args);
190
+ const { flags: globalFlags } = parseGlobalFlags(args);
191
+ const quiet = shouldSuppressOutput(globalFlags);
192
+ const json = isJsonMode(globalFlags) || opts.json;
193
+
194
+ // Cleanup mode delegates to runCleanup
195
+ if (opts.cleanup || opts.rollback) {
196
+ try {
197
+ const { runCleanup } = require("./runCleanup");
198
+ return runCleanup(args);
199
+ } catch {
200
+ console.error(`${c.red}${icons.cross} Cleanup module not available${c.reset}`);
201
+ return EXIT.INTERNAL_ERROR;
202
+ }
203
+ }
204
+
205
+ if (opts.help) {
206
+ printHelp();
207
+ return EXIT.SUCCESS;
208
+ }
209
+
210
+ const projectPath = path.resolve(opts.path);
211
+
212
+ // Verify project exists
213
+ if (!await pathExists(projectPath)) {
214
+ if (json) {
215
+ console.log(JSON.stringify({ success: false, error: `Project path does not exist: ${projectPath}` }));
216
+ } else {
217
+ console.error(`${c.red}${icons.cross} Project path does not exist: ${projectPath}${c.reset}`);
218
+ }
219
+ return EXIT.NOT_FOUND;
220
+ }
221
+
222
+ try {
223
+ // JSON mode
224
+ if (json) {
225
+ const report = await analyzeProject(projectPath, opts);
226
+ console.log(JSON.stringify(report, null, 2));
227
+ return report.critical > 0 ? EXIT.BLOCKING : EXIT.SUCCESS;
228
+ }
229
+
230
+ // Interactive mode
231
+ console.log(`
232
+ ${c.bold}╔══════════════════════════════════════════════════════════════════════════════╗
233
+ ║ ║
234
+ ║ ${icons.sparkle} ${c.cyan}VIBECHECK POLISH${c.reset}${c.bold} - Production Readiness Analyzer ║
235
+ ║ ║
236
+ ║ ${c.dim}Finds all the small detailed things you forgot - the polish that${c.reset}${c.bold} ║
237
+ ║ ${c.dim}makes projects production-ready.${c.reset}${c.bold} ║
238
+ ║ ║
239
+ ╚══════════════════════════════════════════════════════════════════════════════╝${c.reset}
240
+ `);
241
+
242
+ console.log(`${c.dim}Project:${c.reset} ${projectPath}\n`);
243
+
244
+ // Show spinner
245
+ const isTTY = process.stdout.isTTY;
246
+ if (isTTY) {
247
+ process.stdout.write(`${icons.search} Scanning project for polish issues...`);
248
+ } else {
249
+ console.log(`${icons.search} Scanning project for polish issues...`);
250
+ }
251
+
252
+ const report = await analyzeProject(projectPath, opts);
253
+
254
+ // Clear spinner line
255
+ if (isTTY && process.stdout.clearLine) {
256
+ process.stdout.clearLine(0);
257
+ process.stdout.cursorTo(0);
258
+ }
259
+
260
+ // Summary
261
+ console.log(`${c.bold}${icons.star} POLISH REPORT SUMMARY${c.reset}\n`);
262
+ console.log(` ${c.bold}Score:${c.reset} ${formatScore(report.score)}`);
263
+ console.log(` ${c.bold}Issues:${c.reset} ${report.totalIssues} total`);
264
+ console.log(` ${icons.critical} ${report.critical} critical ${icons.high} ${report.high} high ${icons.medium} ${report.medium} medium ${icons.low} ${report.low} low\n`);
265
+
266
+ if (report.issues.length === 0) {
267
+ if (!quiet) {
268
+ console.log(`\n${c.green}${c.bold}${icons.check} Perfect!${c.reset} No polish issues found. Your project is production-ready! ${icons.rocket}\n`);
269
+ }
270
+ return EXIT.SUCCESS;
271
+ }
272
+
273
+ // Group by category
274
+ const byCategory = {};
275
+ for (const issue of report.issues) {
276
+ if (!byCategory[issue.category]) byCategory[issue.category] = [];
277
+ byCategory[issue.category].push(issue);
278
+ }
279
+
280
+ // Show issues by category
281
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}`);
282
+ console.log(`${c.bold}${icons.wrench} ISSUES BY CATEGORY${c.reset}`);
283
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}\n`);
284
+
285
+ const issuesWithPrompts = [];
286
+
287
+ for (const [category, issues] of Object.entries(byCategory)) {
288
+ console.log(`${c.bold}${getCategoryIcon(category)} ${category}${c.reset} ${c.dim}(${issues.length} issues)${c.reset}`);
289
+ console.log(`${'─'.repeat(60)}`);
290
+
291
+ for (const issue of issues) {
292
+ console.log(`\n ${formatSeverity(issue.severity)}`);
293
+ console.log(` ${c.bold}${issue.title}${c.reset}`);
294
+ console.log(` ${c.dim}${issue.description}${c.reset}`);
295
+ if (issue.file) {
296
+ console.log(` ${c.dim}File: ${path.relative(projectPath, issue.file)}${c.reset}`);
297
+ }
298
+ console.log(` ${c.cyan}${icons.arrow} ${issue.suggestion}${c.reset}`);
299
+ if (issue.autoFixable) {
300
+ console.log(` ${c.green}${icons.check} Auto-fixable${c.reset}`);
301
+ }
302
+ if (issue.aiPrompt) {
303
+ issuesWithPrompts.push(issue);
304
+ if (opts.verbose) {
305
+ console.log(`\n ${c.magenta}${c.bold}🤖 AI PROMPT:${c.reset}`);
306
+ console.log(` ${c.dim}${'─'.repeat(50)}${c.reset}`);
307
+ for (const line of issue.aiPrompt.split('\n')) {
308
+ console.log(` ${c.dim}${line}${c.reset}`);
309
+ }
310
+ console.log(` ${c.dim}${'─'.repeat(50)}${c.reset}`);
311
+ } else {
312
+ console.log(` ${c.magenta}🤖 Has AI prompt${c.reset} ${c.dim}(use --prompts to see)${c.reset}`);
313
+ }
314
+ }
315
+ }
316
+ console.log();
317
+ }
318
+
319
+ // Recommendations
320
+ if (report.recommendations.length > 0) {
321
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}`);
322
+ console.log(`${c.bold}💡 RECOMMENDATIONS${c.reset}`);
323
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}\n`);
324
+ report.recommendations.forEach((rec, i) => {
325
+ console.log(` ${i + 1}. ${rec}`);
326
+ });
327
+ console.log();
328
+ }
329
+
330
+ // Auto-fix prompt
331
+ const autoFixable = report.issues.filter(i => i.autoFixable);
332
+ if (autoFixable.length > 0 && opts.fix) {
333
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}`);
334
+ console.log(`${c.bold}${icons.wrench} AUTO-FIX${c.reset}`);
335
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}\n`);
336
+ console.log(` ${c.yellow}Auto-fix for ${autoFixable.length} issue(s) is coming soon!${c.reset}`);
337
+ console.log(` ${c.dim}For now, please follow the suggestions above to fix issues manually.${c.reset}\n`);
338
+ } else if (autoFixable.length > 0) {
339
+ console.log(`${c.dim}Tip: Run 'vibecheck polish --fix' to auto-fix ${autoFixable.length} issue(s)${c.reset}\n`);
340
+ }
341
+
342
+ // AI Prompts section
343
+ if (opts.prompts && issuesWithPrompts.length > 0) {
344
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}`);
345
+ console.log(`${c.bold}🤖 AI PROMPTS - Copy to your AI assistant${c.reset}`);
346
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}\n`);
347
+ console.log(`${c.dim}Copy these prompts to Cursor, Copilot, Claude, or your preferred AI assistant.${c.reset}\n`);
348
+
349
+ for (let i = 0; i < issuesWithPrompts.length; i++) {
350
+ const issue = issuesWithPrompts[i];
351
+ console.log(`${c.bold}╭───────────────────────────────────────────────────────────────────────────────╮${c.reset}`);
352
+ console.log(`${c.bold}│${c.reset} ${c.cyan}[${i + 1}/${issuesWithPrompts.length}]${c.reset} ${c.bold}${issue.title}${c.reset}`);
353
+ console.log(`${c.bold}│${c.reset} ${c.dim}Severity: ${issue.severity} | Category: ${issue.category}${c.reset}`);
354
+ console.log(`${c.bold}╰───────────────────────────────────────────────────────────────────────────────╯${c.reset}`);
355
+ console.log();
356
+ console.log(`${c.magenta}${issue.aiPrompt}${c.reset}`);
357
+ console.log();
358
+ console.log(`${c.dim}${'─'.repeat(79)}${c.reset}\n`);
359
+ }
360
+
361
+ console.log(`${c.green}${c.bold}💡 Tip:${c.reset} Copy one prompt at a time and paste into your AI coding assistant.`);
362
+ console.log(`${c.dim}The prompts are designed to give AI complete context to generate the right code.${c.reset}\n`);
363
+ } else if (issuesWithPrompts.length > 0 && !opts.verbose) {
364
+ console.log(`${c.dim}${icons.star} ${issuesWithPrompts.length} issue(s) have AI prompts. Run with ${c.cyan}--prompts${c.reset}${c.dim} to see them.${c.reset}\n`);
365
+ }
366
+
367
+ // Next steps
368
+ if (!quiet) {
369
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}`);
370
+ console.log(`${c.bold}${icons.rocket} NEXT STEPS${c.reset}`);
371
+ console.log(`${c.bold}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}\n`);
372
+ console.log(` 1. Fix ${c.red}critical${c.reset} and ${c.yellow}high${c.reset} severity issues first`);
373
+ console.log(` 2. Use ${c.cyan}vibecheck polish --prompts${c.reset} to get AI-ready fixes`);
374
+ console.log(` 3. Copy prompts to your AI assistant (Cursor, Copilot, Claude)`);
375
+ console.log(` 4. Re-run ${c.cyan}vibecheck polish${c.reset} to verify fixes`);
376
+ console.log(` 5. Run ${c.cyan}vibecheck ship${c.reset} when score is 80+\n`);
377
+ }
378
+
379
+ return report.critical > 0 ? EXIT.BLOCKING : EXIT.SUCCESS;
380
+ } catch (error) {
381
+ if (json) {
382
+ console.log(JSON.stringify({ success: false, error: error.message }));
383
+ } else {
384
+ console.error(`${c.red}${icons.cross} Polish analysis failed: ${error.message}${c.reset}`);
385
+ }
386
+ return EXIT.INTERNAL_ERROR;
387
+ }
388
+ }
389
+
390
+ module.exports = { runPolish };
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Prompt Firewall Runner
3
+ *
4
+ * Processes prompts through the advanced firewall with:
5
+ * - Task breakdown
6
+ * - Verification
7
+ * - Version control integration
8
+ * - Immediate fixes
9
+ * - Future planning
10
+ */
11
+
12
+ const path = require("path");
13
+ const readline = require("readline");
14
+ const { withErrorHandling } = require("./lib/error-handler");
15
+
16
+ // ANSI colors
17
+ const c = {
18
+ reset: "\x1b[0m",
19
+ bold: "\x1b[1m",
20
+ dim: "\x1b[2m",
21
+ red: "\x1b[31m",
22
+ green: "\x1b[32m",
23
+ yellow: "\x1b[33m",
24
+ blue: "\x1b[34m",
25
+ magenta: "\x1b[35m",
26
+ cyan: "\x1b[36m",
27
+ };
28
+
29
+ async function runPromptFirewall(args) {
30
+ return withErrorHandling(async () => {
31
+ const projectPath = args.path || process.cwd();
32
+ const json = args.json || false;
33
+ const prompt = args.prompt || args._[0];
34
+ const autoFix = args["auto-fix"] === true;
35
+ const includeVersionControl = args["version-control"] !== false;
36
+ const generatePlan = args.plan !== false;
37
+
38
+ if (!prompt) {
39
+ console.error(`${c.red}Error: Prompt is required${c.reset}`);
40
+ console.error(`Usage: vibecheck prompt-firewall "your prompt here"`);
41
+ console.error(` or: vibecheck prompt-firewall --prompt "your prompt here"`);
42
+ const { EXIT_CODES } = require('./lib/error-handler');
43
+ process.exit(EXIT_CODES.INVALID_INPUT);
44
+ }
45
+
46
+ // Try to load prompt firewall
47
+ let createPromptFirewall;
48
+ try {
49
+ const modulePath = path.resolve(__dirname, "../../packages/ai-vibechecks/dist/firewall/advanced-prompt-firewall.js");
50
+ createPromptFirewall = require(modulePath).createPromptFirewall;
51
+ } catch {
52
+ try {
53
+ const tsModulePath = path.resolve(__dirname, "../../packages/ai-vibechecks/src/firewall/advanced-prompt-firewall.ts");
54
+ require("ts-node/register");
55
+ createPromptFirewall = require(tsModulePath).createPromptFirewall;
56
+ } catch {
57
+ console.error(`${c.red}Error: Prompt firewall not available.${c.reset}`);
58
+ console.error(`Please run: pnpm build in packages/ai-vibechecks`);
59
+ const { EXIT_CODES } = require('./lib/error-handler');
60
+ process.exit(EXIT_CODES.INTERNAL_ERROR);
61
+ }
62
+ }
63
+
64
+ if (!json) {
65
+ console.log(`${c.cyan}${c.bold}━━━ Prompt Firewall Analysis ━━━${c.reset}\n`);
66
+ console.log(`Prompt: ${c.dim}${prompt}${c.reset}\n`);
67
+ console.log(`Project: ${path.relative(process.cwd(), projectPath)}\n`);
68
+ }
69
+
70
+ // Create firewall instance
71
+ const firewall = createPromptFirewall(projectPath);
72
+
73
+ // Process prompt
74
+ const result = await firewall.process(prompt, {
75
+ autoBreakdown: true,
76
+ autoVerify: true,
77
+ autoFix: autoFix,
78
+ includeVersionControl: includeVersionControl,
79
+ generatePlan: generatePlan,
80
+ });
81
+
82
+ // Output results
83
+ if (json) {
84
+ console.log(JSON.stringify(result, null, 2));
85
+ return result.verification.passed ? 0 : 1;
86
+ }
87
+
88
+ // Print formatted report
89
+ printFirewallReport(result);
90
+
91
+ // Ask to apply fixes if available
92
+ if (result.immediateFixes.length > 0 && !autoFix) {
93
+ const shouldApply = await askToApplyFixes(result.immediateFixes.length);
94
+ if (shouldApply) {
95
+ console.log(`\n${c.cyan}Applying fixes...${c.reset}\n`);
96
+ for (const fix of result.immediateFixes) {
97
+ const applyResult = await firewall.applyFix(fix);
98
+ if (applyResult.success) {
99
+ console.log(`${c.green}✅${c.reset} ${applyResult.message}`);
100
+ } else {
101
+ console.log(`${c.red}❌${c.reset} ${applyResult.message}`);
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ return result.verification.passed ? 0 : 1;
108
+ });
109
+ }
110
+
111
+ function printFirewallReport(result) {
112
+ // Verification status
113
+ const statusColor = result.verification.passed ? c.green : c.red;
114
+ const statusIcon = result.verification.passed ? "✅" : "❌";
115
+
116
+ console.log(`${statusColor}${c.bold}${statusIcon} VERIFICATION: ${result.verification.passed ? "PASSED" : "FAILED"}${c.reset}`);
117
+ console.log(` Score: ${result.verification.score}/100`);
118
+ console.log();
119
+
120
+ // Verification checks
121
+ console.log(`${c.cyan}${c.bold}🔍 VERIFICATION CHECKS:${c.reset}`);
122
+ for (const check of result.verification.checks) {
123
+ const icon = check.status === "pass" ? "✅" :
124
+ check.status === "fail" ? "❌" : "⚠️";
125
+ const checkColor = check.status === "pass" ? c.green :
126
+ check.status === "fail" ? c.red : c.yellow;
127
+ console.log(` ${icon} ${check.name}: ${checkColor}${check.status.toUpperCase()}${c.reset}`);
128
+ console.log(` ${c.dim}${check.message}${c.reset}`);
129
+ if (check.evidence) {
130
+ console.log(` Evidence: ${c.dim}${check.evidence}${c.reset}`);
131
+ }
132
+ }
133
+ console.log();
134
+
135
+ // Task breakdown
136
+ if (result.taskBreakdown.length > 0) {
137
+ console.log(`${c.cyan}${c.bold}📋 TASK BREAKDOWN:${c.reset}`);
138
+ for (const task of result.taskBreakdown) {
139
+ const priorityColor = task.priority === "critical" ? c.red :
140
+ task.priority === "high" ? c.yellow :
141
+ task.priority === "medium" ? c.blue : c.dim;
142
+ console.log(` ${priorityColor}[${task.priority.toUpperCase()}]${c.reset} ${task.title}`);
143
+ console.log(` ${c.dim}${task.description}${c.reset}`);
144
+ console.log(` Estimated time: ${task.estimatedTime.toFixed(0)} minutes`);
145
+ if (task.dependencies.length > 0) {
146
+ console.log(` Depends on: ${task.dependencies.join(", ")}`);
147
+ }
148
+ }
149
+ console.log();
150
+ }
151
+
152
+ // Version control info
153
+ if (result.versionControl && result.versionControl.branch !== "unknown") {
154
+ console.log(`${c.cyan}${c.bold}🔀 VERSION CONTROL:${c.reset}`);
155
+ console.log(` Branch: ${result.versionControl.branch}`);
156
+ console.log(` Commit: ${result.versionControl.commit.substring(0, 8)}`);
157
+ console.log(` Changes: ${result.versionControl.changes.length} file(s)`);
158
+ if (result.versionControl.conflicts.length > 0) {
159
+ console.log(` ${c.red}Conflicts: ${result.versionControl.conflicts.length}${c.reset}`);
160
+ }
161
+ console.log();
162
+ }
163
+
164
+ // Immediate fixes
165
+ if (result.immediateFixes.length > 0) {
166
+ console.log(`${c.yellow}${c.bold}🔧 IMMEDIATE FIXES AVAILABLE:${c.reset}`);
167
+ for (const fix of result.immediateFixes) {
168
+ console.log(` • ${fix.description}`);
169
+ console.log(` File: ${fix.file}`);
170
+ console.log(` Confidence: ${(fix.confidence * 100).toFixed(0)}%`);
171
+ }
172
+ console.log();
173
+ }
174
+
175
+ // Future plan
176
+ if (result.futurePlan && result.futurePlan.tasks.length > 0) {
177
+ console.log(`${c.cyan}${c.bold}📅 FUTURE PLAN:${c.reset}`);
178
+ console.log(` Phase: ${result.futurePlan.phase}`);
179
+ console.log(` Tasks: ${result.futurePlan.tasks.length}`);
180
+ console.log(` Milestones: ${result.futurePlan.milestones.length}`);
181
+ if (result.futurePlan.risks.length > 0) {
182
+ console.log(` ${c.yellow}Risks: ${result.futurePlan.risks.length}${c.reset}`);
183
+ }
184
+ console.log();
185
+ }
186
+
187
+ // Recommendations
188
+ if (result.recommendations.length > 0) {
189
+ console.log(`${c.cyan}${c.bold}💡 RECOMMENDATIONS:${c.reset}`);
190
+ for (const rec of result.recommendations) {
191
+ console.log(` • ${rec}`);
192
+ }
193
+ console.log();
194
+ }
195
+ }
196
+
197
+ function askToApplyFixes(fixCount) {
198
+ return new Promise((resolve) => {
199
+ const rl = readline.createInterface({
200
+ input: process.stdin,
201
+ output: process.stdout,
202
+ });
203
+
204
+ rl.question(`${c.yellow}Apply ${fixCount} immediate fix(es)? (y/n): ${c.reset}`, (answer) => {
205
+ rl.close();
206
+ resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
207
+ });
208
+ });
209
+ }
210
+
211
+ module.exports = { runPromptFirewall };