@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
@@ -1,37 +0,0 @@
1
- /**
2
- * Lightweight Semver Utilities
3
- * Proper version comparison for vulnerability checking
4
- * (Avoids incorrect lexicographic comparison like "10.0.0" < "2.0.0")
5
- */
6
- export interface SemverParts {
7
- major: number;
8
- minor: number;
9
- patch: number;
10
- prerelease?: string;
11
- }
12
- /**
13
- * Parse a semver string into components
14
- * Handles formats: 1.2.3, 1.2.3-beta.1, ^1.2.3, ~1.2.3
15
- */
16
- export declare function parseSemver(version: string): SemverParts | null;
17
- /**
18
- * Compare two semver versions
19
- * Returns: -1 if a < b, 0 if a == b, 1 if a > b
20
- */
21
- export declare function compareSemver(a: string, b: string): number;
22
- /**
23
- * Check if version is less than target
24
- * Enterprise-grade: "10.0.0" is NOT less than "2.0.0"
25
- */
26
- export declare function isVersionLessThan(version: string, target: string): boolean;
27
- /**
28
- * Check if version satisfies a range expression
29
- * Supports: <1.2.3, <=1.2.3, >1.2.3, >=1.2.3, 1.2.3 (exact)
30
- */
31
- export declare function satisfiesRange(version: string, range: string): boolean;
32
- /**
33
- * Check if version is affected by vulnerability
34
- * affectedVersions format: "<4.17.21" or ">=1.0.0 <2.0.0"
35
- */
36
- export declare function isAffected(version: string, affectedVersions: string): boolean;
37
- //# sourceMappingURL=semver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../../src/runtime/semver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAyB/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAkBtE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAM7E"}
@@ -1,110 +0,0 @@
1
- "use strict";
2
- /**
3
- * Lightweight Semver Utilities
4
- * Proper version comparison for vulnerability checking
5
- * (Avoids incorrect lexicographic comparison like "10.0.0" < "2.0.0")
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.parseSemver = parseSemver;
9
- exports.compareSemver = compareSemver;
10
- exports.isVersionLessThan = isVersionLessThan;
11
- exports.satisfiesRange = satisfiesRange;
12
- exports.isAffected = isAffected;
13
- /**
14
- * Parse a semver string into components
15
- * Handles formats: 1.2.3, 1.2.3-beta.1, ^1.2.3, ~1.2.3
16
- */
17
- function parseSemver(version) {
18
- // Strip range prefixes
19
- const cleaned = version.replace(/^[\^~>=<]+/, '').trim();
20
- // Match semver pattern
21
- const match = cleaned.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
22
- if (!match) {
23
- // Try partial versions (1.2, 1)
24
- const partial = cleaned.match(/^(\d+)(?:\.(\d+))?$/);
25
- if (partial) {
26
- return {
27
- major: parseInt(partial[1], 10),
28
- minor: partial[2] ? parseInt(partial[2], 10) : 0,
29
- patch: 0,
30
- };
31
- }
32
- return null;
33
- }
34
- return {
35
- major: parseInt(match[1], 10),
36
- minor: parseInt(match[2], 10),
37
- patch: parseInt(match[3], 10),
38
- prerelease: match[4],
39
- };
40
- }
41
- /**
42
- * Compare two semver versions
43
- * Returns: -1 if a < b, 0 if a == b, 1 if a > b
44
- */
45
- function compareSemver(a, b) {
46
- const parsedA = parseSemver(a);
47
- const parsedB = parseSemver(b);
48
- if (!parsedA || !parsedB) {
49
- // Fallback to string comparison if parsing fails
50
- return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
51
- }
52
- // Compare major.minor.patch
53
- if (parsedA.major !== parsedB.major) {
54
- return parsedA.major < parsedB.major ? -1 : 1;
55
- }
56
- if (parsedA.minor !== parsedB.minor) {
57
- return parsedA.minor < parsedB.minor ? -1 : 1;
58
- }
59
- if (parsedA.patch !== parsedB.patch) {
60
- return parsedA.patch < parsedB.patch ? -1 : 1;
61
- }
62
- // Handle prerelease (1.0.0-alpha < 1.0.0)
63
- if (parsedA.prerelease && !parsedB.prerelease)
64
- return -1;
65
- if (!parsedA.prerelease && parsedB.prerelease)
66
- return 1;
67
- if (parsedA.prerelease && parsedB.prerelease) {
68
- return parsedA.prerelease.localeCompare(parsedB.prerelease);
69
- }
70
- return 0;
71
- }
72
- /**
73
- * Check if version is less than target
74
- * Enterprise-grade: "10.0.0" is NOT less than "2.0.0"
75
- */
76
- function isVersionLessThan(version, target) {
77
- return compareSemver(version, target) < 0;
78
- }
79
- /**
80
- * Check if version satisfies a range expression
81
- * Supports: <1.2.3, <=1.2.3, >1.2.3, >=1.2.3, 1.2.3 (exact)
82
- */
83
- function satisfiesRange(version, range) {
84
- const trimmed = range.trim();
85
- if (trimmed.startsWith('<=')) {
86
- return compareSemver(version, trimmed.slice(2)) <= 0;
87
- }
88
- if (trimmed.startsWith('<')) {
89
- return compareSemver(version, trimmed.slice(1)) < 0;
90
- }
91
- if (trimmed.startsWith('>=')) {
92
- return compareSemver(version, trimmed.slice(2)) >= 0;
93
- }
94
- if (trimmed.startsWith('>')) {
95
- return compareSemver(version, trimmed.slice(1)) > 0;
96
- }
97
- // Exact match
98
- return compareSemver(version, trimmed) === 0;
99
- }
100
- /**
101
- * Check if version is affected by vulnerability
102
- * affectedVersions format: "<4.17.21" or ">=1.0.0 <2.0.0"
103
- */
104
- function isAffected(version, affectedVersions) {
105
- // Split on spaces for compound ranges
106
- const parts = affectedVersions.split(/\s+/).filter(Boolean);
107
- // All conditions must be satisfied
108
- return parts.every(part => satisfiesRange(version, part));
109
- }
110
- //# sourceMappingURL=semver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semver.js","sourceRoot":"","sources":["../../src/runtime/semver.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- /**
2
- * No Dead UI Static Gate
3
- *
4
- * Fast pre-test gate that blocks obvious deadness:
5
- * - href="#"
6
- * - noop onClick={() => {}}
7
- * - "coming soon" UI in prod surfaces
8
- * - disabled buttons without reason text
9
- * - raw fetch("/api/...") in components
10
- */
11
- export interface DeadUIFinding {
12
- id: string;
13
- type: 'dead_link' | 'noop_handler' | 'coming_soon' | 'disabled_no_reason' | 'raw_fetch';
14
- file: string;
15
- line: number;
16
- column?: number;
17
- severity: 'critical' | 'high' | 'medium' | 'low';
18
- issue: string;
19
- suggestion: string;
20
- }
21
- export interface DeadUIScanResult {
22
- findings: DeadUIFinding[];
23
- summary: {
24
- total: number;
25
- critical: number;
26
- high: number;
27
- medium: number;
28
- low: number;
29
- };
30
- }
31
- export declare class DeadUIDetector {
32
- private findings;
33
- private findingCounter;
34
- /**
35
- * Scan for dead UI issues
36
- */
37
- scan(projectPath: string, options?: {
38
- exclude?: string[];
39
- includeTests?: boolean;
40
- }): Promise<DeadUIScanResult>;
41
- private scanDirectory;
42
- private scanFile;
43
- private checkPatterns;
44
- private hasReasonText;
45
- private addFinding;
46
- private getSuggestion;
47
- }
48
- //# sourceMappingURL=dead-ui-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dead-ui-detector.d.ts","sourceRoot":"","sources":["../../src/scan/dead-ui-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,oBAAoB,GAAG,WAAW,CAAC;IACxF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAyCD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,cAAc,CAAK;IAE3B;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAyBpB,aAAa;YAyBb,QAAQ;IAyEtB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;CAUtB"}
@@ -1,170 +0,0 @@
1
- "use strict";
2
- /**
3
- * No Dead UI Static Gate
4
- *
5
- * Fast pre-test gate that blocks obvious deadness:
6
- * - href="#"
7
- * - noop onClick={() => {}}
8
- * - "coming soon" UI in prod surfaces
9
- * - disabled buttons without reason text
10
- * - raw fetch("/api/...") in components
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.DeadUIDetector = void 0;
14
- const fs_1 = require("fs");
15
- const path_1 = require("path");
16
- // Dead link patterns
17
- const DEAD_LINK_PATTERNS = [
18
- /href=["']#["']/g,
19
- /href=["']javascript:void\(0\)["']/g,
20
- /href=["']#!["']/g,
21
- /href=["']\/#["']/g,
22
- ];
23
- // Noop handler patterns
24
- const NOOP_HANDLER_PATTERNS = [
25
- /onClick\s*=\s*{\s*\(\)\s*=>\s*\{\s*\}\s*\}/g,
26
- /onClick\s*=\s*{\s*\(\)\s*=>\s*\{\s*return\s*;?\s*\}\s*\}/g,
27
- /onClick\s*=\s*{\s*\(\)\s*=>\s*undefined\s*}/g,
28
- /onClick\s*=\s*{\s*\(\)\s*=>\s*null\s*}/g,
29
- /onClick\s*=\s*{\s*\(\)\s*=>\s*void\s*0\s*}/g,
30
- ];
31
- // Coming soon patterns
32
- const COMING_SOON_PATTERNS = [
33
- /coming\s+soon/gi,
34
- /coming\s+later/gi,
35
- /not\s+available/gi,
36
- /under\s+construction/gi,
37
- /work\s+in\s+progress/gi,
38
- /wip/gi,
39
- ];
40
- // Disabled button without reason
41
- const DISABLED_NO_REASON_PATTERNS = [
42
- /disabled\s*(?!.*(?:reason|tooltip|title|aria-label|aria-describedby))/gi,
43
- ];
44
- // Raw fetch in components
45
- const RAW_FETCH_PATTERNS = [
46
- /fetch\s*\(\s*["']\/api\//g,
47
- /fetch\s*\(\s*`\/api\//g,
48
- /axios\s*\.\s*(get|post|put|delete)\s*\(\s*["']\/api\//g,
49
- ];
50
- class DeadUIDetector {
51
- constructor() {
52
- this.findings = [];
53
- this.findingCounter = 1;
54
- }
55
- /**
56
- * Scan for dead UI issues
57
- */
58
- async scan(projectPath, options = {}) {
59
- this.findings = [];
60
- this.findingCounter = 1;
61
- const exclude = options.exclude || ['node_modules', '.git', 'dist', 'build', '.next'];
62
- const includeTests = options.includeTests || false;
63
- // Scan UI files
64
- await this.scanDirectory(projectPath, exclude, includeTests);
65
- // Calculate summary
66
- const summary = {
67
- total: this.findings.length,
68
- critical: this.findings.filter(f => f.severity === 'critical').length,
69
- high: this.findings.filter(f => f.severity === 'high').length,
70
- medium: this.findings.filter(f => f.severity === 'medium').length,
71
- low: this.findings.filter(f => f.severity === 'low').length,
72
- };
73
- return {
74
- findings: this.findings,
75
- summary,
76
- };
77
- }
78
- async scanDirectory(dir, exclude, includeTests) {
79
- const entries = (0, fs_1.readdirSync)(dir);
80
- for (const entry of entries) {
81
- const fullPath = (0, path_1.join)(dir, entry);
82
- const stat = (0, fs_1.statSync)(fullPath);
83
- // Skip excluded directories
84
- if (stat.isDirectory()) {
85
- if (exclude.some(e => entry.includes(e)))
86
- continue;
87
- if (!includeTests && (entry.includes('test') || entry.includes('spec')))
88
- continue;
89
- await this.scanDirectory(fullPath, exclude, includeTests);
90
- continue;
91
- }
92
- // Only scan UI files
93
- const ext = (0, path_1.extname)(entry);
94
- if (!['.tsx', '.jsx', '.ts', '.js', '.vue', '.svelte'].includes(ext)) {
95
- continue;
96
- }
97
- await this.scanFile(fullPath);
98
- }
99
- }
100
- async scanFile(filePath) {
101
- try {
102
- const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
103
- const lines = content.split('\n');
104
- // Check each line for patterns
105
- lines.forEach((line, index) => {
106
- const lineNum = index + 1;
107
- // Dead link detection
108
- this.checkPatterns(line, lineNum, filePath, DEAD_LINK_PATTERNS, 'dead_link', 'high', 'Dead link detected (href="#")');
109
- // Noop handler detection
110
- this.checkPatterns(line, lineNum, filePath, NOOP_HANDLER_PATTERNS, 'noop_handler', 'high', 'No-op click handler detected');
111
- // Coming soon detection (only in non-test files)
112
- if (!filePath.includes('test') && !filePath.includes('spec')) {
113
- this.checkPatterns(line, lineNum, filePath, COMING_SOON_PATTERNS, 'coming_soon', 'medium', 'Coming soon UI in production code');
114
- }
115
- // Disabled button without reason
116
- if (line.includes('disabled') && !this.hasReasonText(line)) {
117
- this.addFinding({
118
- id: `GR-UI-${String(this.findingCounter++).padStart(3, '0')}`,
119
- type: 'disabled_no_reason',
120
- file: filePath,
121
- line: lineNum,
122
- severity: 'medium',
123
- issue: 'Disabled button without reason text',
124
- suggestion: 'Add tooltip, aria-label, or reason text explaining why button is disabled',
125
- });
126
- }
127
- // Raw fetch detection
128
- this.checkPatterns(line, lineNum, filePath, RAW_FETCH_PATTERNS, 'raw_fetch', 'low', 'Raw API fetch in component (consider using action registry)');
129
- });
130
- }
131
- catch (error) {
132
- // Ignore files we can't read
133
- }
134
- }
135
- checkPatterns(line, lineNum, filePath, patterns, type, severity, issue) {
136
- for (const pattern of patterns) {
137
- const matches = line.matchAll(new RegExp(pattern.source, pattern.flags));
138
- for (const match of matches) {
139
- this.addFinding({
140
- id: `GR-UI-${String(this.findingCounter++).padStart(3, '0')}`,
141
- type,
142
- file: filePath,
143
- line: lineNum,
144
- severity,
145
- issue,
146
- suggestion: this.getSuggestion(type),
147
- });
148
- }
149
- }
150
- }
151
- hasReasonText(line) {
152
- // Check if line has reason text (tooltip, aria-label, etc.)
153
- return /(tooltip|aria-label|aria-describedby|title|reason|why|disabled.*because)/i.test(line);
154
- }
155
- addFinding(finding) {
156
- this.findings.push(finding);
157
- }
158
- getSuggestion(type) {
159
- const suggestions = {
160
- dead_link: 'Replace with actual route or remove if not needed',
161
- noop_handler: 'Implement actual handler or remove onClick',
162
- coming_soon: 'Remove or implement the feature',
163
- disabled_no_reason: 'Add tooltip, aria-label, or reason text',
164
- raw_fetch: 'Use action registry or typed API client',
165
- };
166
- return suggestions[type] || 'Review and fix';
167
- }
168
- }
169
- exports.DeadUIDetector = DeadUIDetector;
170
- //# sourceMappingURL=dead-ui-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dead-ui-detector.js","sourceRoot":"","sources":["../../src/scan/dead-ui-detector.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Playwright Button Sweep
3
- *
4
- * The cheat code:
5
- * - Click every data-action-id on key pages
6
- * - Fail on console errors/unhandled rejections
7
- * - Fail on unexpected 4xx/5xx
8
- * - Save traces/screenshots on failure
9
- */
10
- export interface PlaywrightSweepResult {
11
- ran: boolean;
12
- passed: boolean;
13
- failures: Array<{
14
- test: string;
15
- error: string;
16
- trace?: string;
17
- screenshot?: string;
18
- }>;
19
- traces: string[];
20
- summary: {
21
- totalActions: number;
22
- passed: number;
23
- failed: number;
24
- errors: number;
25
- };
26
- }
27
- export interface PlaywrightConfig {
28
- baseUrl: string;
29
- pages: string[];
30
- actionSelectors: string[];
31
- timeout?: number;
32
- }
33
- export declare class PlaywrightSweep {
34
- /**
35
- * Run button sweep on application
36
- */
37
- sweep(config: PlaywrightConfig, artifactsDir: string): Promise<PlaywrightSweepResult>;
38
- private isPlaywrightAvailable;
39
- }
40
- //# sourceMappingURL=playwright-sweep.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright-sweep.d.ts","sourceRoot":"","sources":["../../src/scan/playwright-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC;IA2KjC,OAAO,CAAC,qBAAqB;CAQ9B"}
@@ -1,216 +0,0 @@
1
- "use strict";
2
- /**
3
- * Playwright Button Sweep
4
- *
5
- * The cheat code:
6
- * - Click every data-action-id on key pages
7
- * - Fail on console errors/unhandled rejections
8
- * - Fail on unexpected 4xx/5xx
9
- * - Save traces/screenshots on failure
10
- */
11
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
- if (k2 === undefined) k2 = k;
13
- var desc = Object.getOwnPropertyDescriptor(m, k);
14
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
- desc = { enumerable: true, get: function() { return m[k]; } };
16
- }
17
- Object.defineProperty(o, k2, desc);
18
- }) : (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- o[k2] = m[k];
21
- }));
22
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
- Object.defineProperty(o, "default", { enumerable: true, value: v });
24
- }) : function(o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = (this && this.__importStar) || (function () {
28
- var ownKeys = function(o) {
29
- ownKeys = Object.getOwnPropertyNames || function (o) {
30
- var ar = [];
31
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
- return ar;
33
- };
34
- return ownKeys(o);
35
- };
36
- return function (mod) {
37
- if (mod && mod.__esModule) return mod;
38
- var result = {};
39
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
- __setModuleDefault(result, mod);
41
- return result;
42
- };
43
- })();
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.PlaywrightSweep = void 0;
46
- const fs_1 = require("fs");
47
- const path_1 = require("path");
48
- class PlaywrightSweep {
49
- /**
50
- * Run button sweep on application
51
- */
52
- async sweep(config, artifactsDir) {
53
- // Check if Playwright is available
54
- if (!this.isPlaywrightAvailable()) {
55
- return {
56
- ran: false,
57
- passed: true,
58
- failures: [],
59
- traces: [],
60
- summary: {
61
- totalActions: 0,
62
- passed: 0,
63
- failed: 0,
64
- errors: 0,
65
- },
66
- };
67
- }
68
- // Ensure artifacts directory exists
69
- if (!(0, fs_1.existsSync)(artifactsDir)) {
70
- (0, fs_1.mkdirSync)(artifactsDir, { recursive: true });
71
- }
72
- const failures = [];
73
- const traces = [];
74
- let totalActions = 0;
75
- let passed = 0;
76
- let failed = 0;
77
- let errors = 0;
78
- try {
79
- // Import Playwright dynamically
80
- const { chromium } = await Promise.resolve().then(() => __importStar(require('playwright')));
81
- const browser = await chromium.launch({ headless: true });
82
- const context = await browser.newContext();
83
- // Enable console and network monitoring
84
- const consoleErrors = [];
85
- const networkErrors = [];
86
- context.on('console', (msg) => {
87
- if (msg.type() === 'error') {
88
- consoleErrors.push(msg.text());
89
- }
90
- });
91
- context.on('response', (response) => {
92
- const status = response.status();
93
- if (status >= 400) {
94
- networkErrors.push({
95
- url: response.url(),
96
- status,
97
- });
98
- }
99
- });
100
- // Test each page
101
- for (const pagePath of config.pages) {
102
- const page = await context.newPage();
103
- const fullUrl = `${config.baseUrl}${pagePath}`;
104
- try {
105
- await page.goto(fullUrl, { waitUntil: 'networkidle', timeout: config.timeout || 30000 });
106
- // Find all action elements
107
- const actionElements = await page.$$(config.actionSelectors.join(', '));
108
- for (const element of actionElements) {
109
- totalActions++;
110
- try {
111
- // Get action ID for identification
112
- const actionId = await element.getAttribute('data-action-id') ||
113
- await element.getAttribute('id') ||
114
- await element.textContent() ||
115
- 'unknown';
116
- // Click the element
117
- await element.click({ timeout: 5000 });
118
- // Wait a bit for any async operations
119
- await page.waitForTimeout(1000);
120
- // Check for console errors
121
- if (consoleErrors.length > 0) {
122
- failed++;
123
- const error = consoleErrors.join('; ');
124
- failures.push({
125
- test: `Click action: ${actionId} on ${pagePath}`,
126
- error: `Console errors: ${error}`,
127
- });
128
- consoleErrors.length = 0; // Clear after reporting
129
- }
130
- // Check for network errors
131
- if (networkErrors.length > 0) {
132
- failed++;
133
- const error = networkErrors.map(e => `${e.url}: ${e.status}`).join('; ');
134
- failures.push({
135
- test: `Click action: ${actionId} on ${pagePath}`,
136
- error: `Network errors: ${error}`,
137
- });
138
- networkErrors.length = 0; // Clear after reporting
139
- }
140
- if (consoleErrors.length === 0 && networkErrors.length === 0) {
141
- passed++;
142
- }
143
- }
144
- catch (error) {
145
- failed++;
146
- const tracePath = (0, path_1.join)(artifactsDir, `trace-${Date.now()}.zip`);
147
- const screenshotPath = (0, path_1.join)(artifactsDir, `screenshot-${Date.now()}.png`);
148
- // Save trace and screenshot
149
- await context.tracing.stop({ path: tracePath });
150
- await page.screenshot({ path: screenshotPath, fullPage: true });
151
- traces.push(tracePath);
152
- failures.push({
153
- test: `Click action on ${pagePath}`,
154
- error: error.message || String(error),
155
- trace: tracePath,
156
- screenshot: screenshotPath,
157
- });
158
- }
159
- }
160
- }
161
- catch (error) {
162
- errors++;
163
- failures.push({
164
- test: `Navigate to ${pagePath}`,
165
- error: error.message || String(error),
166
- });
167
- }
168
- finally {
169
- await page.close();
170
- }
171
- }
172
- await browser.close();
173
- }
174
- catch (error) {
175
- // Playwright not available or other error
176
- return {
177
- ran: false,
178
- passed: true,
179
- failures: [{
180
- test: 'Playwright setup',
181
- error: error.message || 'Playwright not available',
182
- }],
183
- traces: [],
184
- summary: {
185
- totalActions: 0,
186
- passed: 0,
187
- failed: 0,
188
- errors: 1,
189
- },
190
- };
191
- }
192
- return {
193
- ran: true,
194
- passed: failures.length === 0,
195
- failures,
196
- traces,
197
- summary: {
198
- totalActions,
199
- passed,
200
- failed,
201
- errors,
202
- },
203
- };
204
- }
205
- isPlaywrightAvailable() {
206
- try {
207
- require.resolve('playwright');
208
- return true;
209
- }
210
- catch {
211
- return false;
212
- }
213
- }
214
- }
215
- exports.PlaywrightSweep = PlaywrightSweep;
216
- //# sourceMappingURL=playwright-sweep.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright-sweep.js","sourceRoot":"","sources":["../../src/scan/playwright-sweep.ts"],"names":[],"mappings":"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"}