@vibecheckai/cli 2.8.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +8 -8
  2. package/bin/_deprecations.js +35 -0
  3. package/bin/_router.js +46 -0
  4. package/bin/cli-hygiene.js +241 -0
  5. package/bin/guardrail.js +834 -0
  6. package/bin/runners/cli-utils.js +1070 -0
  7. package/bin/runners/context/ai-task-decomposer.js +337 -0
  8. package/bin/runners/context/analyzer.js +462 -0
  9. package/bin/runners/context/api-contracts.js +427 -0
  10. package/bin/runners/context/context-diff.js +342 -0
  11. package/bin/runners/context/context-pruner.js +291 -0
  12. package/bin/runners/context/dependency-graph.js +414 -0
  13. package/bin/runners/context/generators/claude.js +107 -0
  14. package/bin/runners/context/generators/codex.js +108 -0
  15. package/bin/runners/context/generators/copilot.js +119 -0
  16. package/bin/runners/context/generators/cursor.js +514 -0
  17. package/bin/runners/context/generators/mcp.js +151 -0
  18. package/bin/runners/context/generators/windsurf.js +180 -0
  19. package/bin/runners/context/git-context.js +302 -0
  20. package/bin/runners/context/index.js +1042 -0
  21. package/bin/runners/context/insights.js +173 -0
  22. package/bin/runners/context/mcp-server/generate-rules.js +337 -0
  23. package/bin/runners/context/mcp-server/index.js +1176 -0
  24. package/bin/runners/context/mcp-server/package.json +24 -0
  25. package/bin/runners/context/memory.js +200 -0
  26. package/bin/runners/context/monorepo.js +215 -0
  27. package/bin/runners/context/multi-repo-federation.js +404 -0
  28. package/bin/runners/context/patterns.js +253 -0
  29. package/bin/runners/context/proof-context.js +972 -0
  30. package/bin/runners/context/security-scanner.js +303 -0
  31. package/bin/runners/context/semantic-search.js +350 -0
  32. package/bin/runners/context/shared.js +264 -0
  33. package/bin/runners/context/team-conventions.js +310 -0
  34. package/bin/runners/lib/ai-bridge.js +416 -0
  35. package/bin/runners/lib/analysis-core.js +271 -0
  36. package/bin/runners/lib/analyzers.js +541 -0
  37. package/bin/runners/lib/audit-bridge.js +391 -0
  38. package/bin/runners/lib/auth-truth.js +193 -0
  39. package/bin/runners/lib/auth.js +215 -0
  40. package/bin/runners/lib/backup.js +62 -0
  41. package/bin/runners/lib/billing.js +107 -0
  42. package/bin/runners/lib/claims.js +118 -0
  43. package/bin/runners/lib/cli-ui.js +540 -0
  44. package/bin/runners/lib/compliance-bridge-new.js +0 -0
  45. package/bin/runners/lib/compliance-bridge.js +165 -0
  46. package/bin/runners/lib/contracts/auth-contract.js +194 -0
  47. package/bin/runners/lib/contracts/env-contract.js +178 -0
  48. package/bin/runners/lib/contracts/external-contract.js +198 -0
  49. package/bin/runners/lib/contracts/guard.js +168 -0
  50. package/bin/runners/lib/contracts/index.js +89 -0
  51. package/bin/runners/lib/contracts/plan-validator.js +311 -0
  52. package/bin/runners/lib/contracts/route-contract.js +192 -0
  53. package/bin/runners/lib/detect.js +89 -0
  54. package/bin/runners/lib/doctor/autofix.js +254 -0
  55. package/bin/runners/lib/doctor/index.js +37 -0
  56. package/bin/runners/lib/doctor/modules/dependencies.js +325 -0
  57. package/bin/runners/lib/doctor/modules/index.js +46 -0
  58. package/bin/runners/lib/doctor/modules/network.js +250 -0
  59. package/bin/runners/lib/doctor/modules/project.js +312 -0
  60. package/bin/runners/lib/doctor/modules/runtime.js +224 -0
  61. package/bin/runners/lib/doctor/modules/security.js +348 -0
  62. package/bin/runners/lib/doctor/modules/system.js +213 -0
  63. package/bin/runners/lib/doctor/modules/vibecheck.js +394 -0
  64. package/bin/runners/lib/doctor/reporter.js +262 -0
  65. package/bin/runners/lib/doctor/service.js +262 -0
  66. package/bin/runners/lib/doctor/types.js +113 -0
  67. package/bin/runners/lib/doctor/ui.js +263 -0
  68. package/bin/runners/lib/doctor-enhanced.js +233 -0
  69. package/bin/runners/lib/doctor-v2.js +608 -0
  70. package/bin/runners/lib/enforcement.js +72 -0
  71. package/bin/runners/lib/enterprise-detect.js +603 -0
  72. package/bin/runners/lib/enterprise-init.js +942 -0
  73. package/bin/runners/lib/entitlements-v2.js +381 -0
  74. package/bin/runners/lib/entitlements.generated.js +0 -0
  75. package/bin/runners/lib/entitlements.js +332 -0
  76. package/bin/runners/lib/env-template.js +66 -0
  77. package/bin/runners/lib/env.js +189 -0
  78. package/bin/runners/lib/error-handler.js +320 -0
  79. package/bin/runners/lib/firewall-prompt.js +50 -0
  80. package/bin/runners/lib/graph/graph-builder.js +265 -0
  81. package/bin/runners/lib/graph/html-renderer.js +413 -0
  82. package/bin/runners/lib/graph/index.js +32 -0
  83. package/bin/runners/lib/graph/runtime-collector.js +215 -0
  84. package/bin/runners/lib/graph/static-extractor.js +518 -0
  85. package/bin/runners/lib/init-wizard.js +308 -0
  86. package/bin/runners/lib/json-output.js +76 -0
  87. package/bin/runners/lib/llm.js +75 -0
  88. package/bin/runners/lib/meter.js +61 -0
  89. package/bin/runners/lib/missions/evidence.js +126 -0
  90. package/bin/runners/lib/missions/plan.js +69 -0
  91. package/bin/runners/lib/missions/templates.js +147 -0
  92. package/bin/runners/lib/patch.js +40 -0
  93. package/bin/runners/lib/permissions/auth-model.js +213 -0
  94. package/bin/runners/lib/permissions/idor-prover.js +205 -0
  95. package/bin/runners/lib/permissions/index.js +45 -0
  96. package/bin/runners/lib/permissions/matrix-builder.js +198 -0
  97. package/bin/runners/lib/pkgjson.js +28 -0
  98. package/bin/runners/lib/preflight.js +142 -0
  99. package/bin/runners/lib/reality-findings.js +84 -0
  100. package/bin/runners/lib/redact.js +29 -0
  101. package/bin/runners/lib/replay/capsule-manager.js +154 -0
  102. package/bin/runners/lib/replay/index.js +263 -0
  103. package/bin/runners/lib/replay/player.js +348 -0
  104. package/bin/runners/lib/replay/recorder.js +331 -0
  105. package/bin/runners/lib/report-engine.js +447 -0
  106. package/bin/runners/lib/report-html.js +1117 -0
  107. package/bin/runners/lib/report-templates.js +964 -0
  108. package/bin/runners/lib/route-detection.js +1140 -0
  109. package/bin/runners/lib/route-truth.js +477 -0
  110. package/bin/runners/lib/sandbox/index.js +59 -0
  111. package/bin/runners/lib/sandbox/proof-chain.js +399 -0
  112. package/bin/runners/lib/sandbox/sandbox-runner.js +205 -0
  113. package/bin/runners/lib/sandbox/worktree.js +174 -0
  114. package/bin/runners/lib/scan-cache.js +330 -0
  115. package/bin/runners/lib/scan-output-schema.js +344 -0
  116. package/bin/runners/lib/score-history.js +282 -0
  117. package/bin/runners/lib/security-bridge.js +249 -0
  118. package/bin/runners/lib/server-usage.js +513 -0
  119. package/bin/runners/lib/share-pack.js +239 -0
  120. package/bin/runners/lib/snippets.js +67 -0
  121. package/bin/runners/lib/truth.js +667 -0
  122. package/bin/runners/lib/unified-output.js +189 -0
  123. package/bin/runners/lib/validate-patch.js +156 -0
  124. package/bin/runners/lib/verification.js +345 -0
  125. package/bin/runners/reality/engine.js +917 -0
  126. package/bin/runners/reality/flows.js +122 -0
  127. package/bin/runners/reality/report.js +378 -0
  128. package/bin/runners/reality/session.js +193 -0
  129. package/bin/runners/runAIAgent.js +2 -0
  130. package/bin/runners/runAudit.js +2 -0
  131. package/bin/runners/runAuth.js +106 -0
  132. package/bin/runners/runAutopilot.js +2 -0
  133. package/bin/runners/runBadge.js +2 -0
  134. package/bin/runners/runCertify.js +2 -0
  135. package/bin/runners/runClaimVerifier.js +483 -0
  136. package/bin/runners/runContext.js +56 -0
  137. package/bin/runners/runContextCompiler.js +385 -0
  138. package/bin/runners/runCtx.js +187 -0
  139. package/bin/runners/runCtxGuard.js +176 -0
  140. package/bin/runners/runCtxSync.js +116 -0
  141. package/bin/runners/runDashboard.js +10 -0
  142. package/bin/runners/runDoctor.js +245 -0
  143. package/bin/runners/runEnhancedShip.js +2 -0
  144. package/bin/runners/runFix.js +735 -0
  145. package/bin/runners/runFixPacks.js +2 -0
  146. package/bin/runners/runGate.js +17 -0
  147. package/bin/runners/runGraph.js +283 -0
  148. package/bin/runners/runInit.js +260 -0
  149. package/bin/runners/runInitGha.js +101 -0
  150. package/bin/runners/runInstall.js +76 -0
  151. package/bin/runners/runInteractive.js +388 -0
  152. package/bin/runners/runLaunch.js +2 -0
  153. package/bin/runners/runMcp.js +19 -0
  154. package/bin/runners/runMdc.js +2 -0
  155. package/bin/runners/runMissionGenerator.js +282 -0
  156. package/bin/runners/runNaturalLanguage.js +3 -0
  157. package/bin/runners/runPR.js +96 -0
  158. package/bin/runners/runPermissions.js +290 -0
  159. package/bin/runners/runPromptFirewall.js +211 -0
  160. package/bin/runners/runProof.js +2 -0
  161. package/bin/runners/runProve.js +392 -0
  162. package/bin/runners/runReality.js +489 -0
  163. package/bin/runners/runRealitySniff.js +2 -0
  164. package/bin/runners/runReplay.js +469 -0
  165. package/bin/runners/runReport.js +478 -0
  166. package/bin/runners/runScan.js +835 -0
  167. package/bin/runners/runShare.js +34 -0
  168. package/bin/runners/runShip.js +1062 -0
  169. package/bin/runners/runStatus.js +136 -0
  170. package/bin/runners/runTruthpack.js +634 -0
  171. package/bin/runners/runUpgrade.js +2 -0
  172. package/bin/runners/runValidate.js +2 -0
  173. package/bin/runners/runVerifyAgentOutput.js +2 -0
  174. package/bin/runners/runWatch.js +230 -0
  175. package/bin/runners/utils.js +360 -0
  176. package/bin/scan.js +612 -0
  177. package/bin/vibecheck.js +834 -0
  178. package/package.json +11 -11
  179. package/dist/autopatch/verified-autopatch.d.ts +0 -111
  180. package/dist/autopatch/verified-autopatch.d.ts.map +0 -1
  181. package/dist/autopatch/verified-autopatch.js +0 -503
  182. package/dist/autopatch/verified-autopatch.js.map +0 -1
  183. package/dist/bundles/index.js +0 -8
  184. package/dist/bundles/vibecheck-core.js +0 -25799
  185. package/dist/bundles/vibecheck-security.js +0 -208693
  186. package/dist/bundles/vibecheck-ship.js +0 -2318
  187. package/dist/commands/baseline.d.ts +0 -7
  188. package/dist/commands/baseline.d.ts.map +0 -1
  189. package/dist/commands/baseline.js +0 -79
  190. package/dist/commands/baseline.js.map +0 -1
  191. package/dist/commands/cache.d.ts +0 -13
  192. package/dist/commands/cache.d.ts.map +0 -1
  193. package/dist/commands/cache.js +0 -165
  194. package/dist/commands/cache.js.map +0 -1
  195. package/dist/commands/checkpoint.d.ts +0 -8
  196. package/dist/commands/checkpoint.d.ts.map +0 -1
  197. package/dist/commands/checkpoint.js +0 -35
  198. package/dist/commands/checkpoint.js.map +0 -1
  199. package/dist/commands/doctor.d.ts +0 -17
  200. package/dist/commands/doctor.d.ts.map +0 -1
  201. package/dist/commands/doctor.js +0 -226
  202. package/dist/commands/doctor.js.map +0 -1
  203. package/dist/commands/evidence.d.ts +0 -45
  204. package/dist/commands/evidence.d.ts.map +0 -1
  205. package/dist/commands/evidence.js +0 -197
  206. package/dist/commands/evidence.js.map +0 -1
  207. package/dist/commands/explain.d.ts +0 -8
  208. package/dist/commands/explain.d.ts.map +0 -1
  209. package/dist/commands/explain.js +0 -52
  210. package/dist/commands/explain.js.map +0 -1
  211. package/dist/commands/fix-consolidated.d.ts +0 -19
  212. package/dist/commands/fix-consolidated.d.ts.map +0 -1
  213. package/dist/commands/fix-consolidated.js +0 -165
  214. package/dist/commands/fix-consolidated.js.map +0 -1
  215. package/dist/commands/index.d.ts +0 -8
  216. package/dist/commands/index.d.ts.map +0 -1
  217. package/dist/commands/index.js +0 -15
  218. package/dist/commands/index.js.map +0 -1
  219. package/dist/commands/init.d.ts +0 -8
  220. package/dist/commands/init.d.ts.map +0 -1
  221. package/dist/commands/init.js +0 -125
  222. package/dist/commands/init.js.map +0 -1
  223. package/dist/commands/launcher.d.ts +0 -10
  224. package/dist/commands/launcher.d.ts.map +0 -1
  225. package/dist/commands/launcher.js +0 -174
  226. package/dist/commands/launcher.js.map +0 -1
  227. package/dist/commands/on.d.ts +0 -8
  228. package/dist/commands/on.d.ts.map +0 -1
  229. package/dist/commands/on.js +0 -123
  230. package/dist/commands/on.js.map +0 -1
  231. package/dist/commands/replay.d.ts +0 -8
  232. package/dist/commands/replay.d.ts.map +0 -1
  233. package/dist/commands/replay.js +0 -52
  234. package/dist/commands/replay.js.map +0 -1
  235. package/dist/commands/scan-consolidated.d.ts +0 -61
  236. package/dist/commands/scan-consolidated.d.ts.map +0 -1
  237. package/dist/commands/scan-consolidated.js +0 -243
  238. package/dist/commands/scan-consolidated.js.map +0 -1
  239. package/dist/commands/scan-secrets.d.ts +0 -47
  240. package/dist/commands/scan-secrets.d.ts.map +0 -1
  241. package/dist/commands/scan-secrets.js +0 -225
  242. package/dist/commands/scan-secrets.js.map +0 -1
  243. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +0 -41
  244. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +0 -1
  245. package/dist/commands/scan-vulnerabilities-enhanced.js +0 -368
  246. package/dist/commands/scan-vulnerabilities-enhanced.js.map +0 -1
  247. package/dist/commands/scan-vulnerabilities-osv.d.ts +0 -58
  248. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +0 -1
  249. package/dist/commands/scan-vulnerabilities-osv.js +0 -722
  250. package/dist/commands/scan-vulnerabilities-osv.js.map +0 -1
  251. package/dist/commands/scan-vulnerabilities.d.ts +0 -32
  252. package/dist/commands/scan-vulnerabilities.d.ts.map +0 -1
  253. package/dist/commands/scan-vulnerabilities.js +0 -283
  254. package/dist/commands/scan-vulnerabilities.js.map +0 -1
  255. package/dist/commands/secrets-allowlist.d.ts +0 -7
  256. package/dist/commands/secrets-allowlist.d.ts.map +0 -1
  257. package/dist/commands/secrets-allowlist.js +0 -85
  258. package/dist/commands/secrets-allowlist.js.map +0 -1
  259. package/dist/commands/ship-consolidated.d.ts +0 -58
  260. package/dist/commands/ship-consolidated.d.ts.map +0 -1
  261. package/dist/commands/ship-consolidated.js +0 -515
  262. package/dist/commands/ship-consolidated.js.map +0 -1
  263. package/dist/commands/stats.d.ts +0 -8
  264. package/dist/commands/stats.d.ts.map +0 -1
  265. package/dist/commands/stats.js +0 -134
  266. package/dist/commands/stats.js.map +0 -1
  267. package/dist/commands/upgrade.d.ts +0 -8
  268. package/dist/commands/upgrade.d.ts.map +0 -1
  269. package/dist/commands/upgrade.js +0 -30
  270. package/dist/commands/upgrade.js.map +0 -1
  271. package/dist/fix/applicator.d.ts +0 -44
  272. package/dist/fix/applicator.d.ts.map +0 -1
  273. package/dist/fix/applicator.js +0 -144
  274. package/dist/fix/applicator.js.map +0 -1
  275. package/dist/fix/backup.d.ts +0 -38
  276. package/dist/fix/backup.d.ts.map +0 -1
  277. package/dist/fix/backup.js +0 -154
  278. package/dist/fix/backup.js.map +0 -1
  279. package/dist/fix/engine.d.ts +0 -55
  280. package/dist/fix/engine.d.ts.map +0 -1
  281. package/dist/fix/engine.js +0 -285
  282. package/dist/fix/engine.js.map +0 -1
  283. package/dist/fix/index.d.ts +0 -5
  284. package/dist/fix/index.d.ts.map +0 -1
  285. package/dist/fix/index.js +0 -12
  286. package/dist/fix/index.js.map +0 -1
  287. package/dist/fix/interactive.d.ts +0 -22
  288. package/dist/fix/interactive.d.ts.map +0 -1
  289. package/dist/fix/interactive.js +0 -172
  290. package/dist/fix/interactive.js.map +0 -1
  291. package/dist/formatters/index.d.ts +0 -6
  292. package/dist/formatters/index.d.ts.map +0 -1
  293. package/dist/formatters/index.js +0 -11
  294. package/dist/formatters/index.js.map +0 -1
  295. package/dist/formatters/sarif-enhanced.d.ts +0 -78
  296. package/dist/formatters/sarif-enhanced.d.ts.map +0 -1
  297. package/dist/formatters/sarif-enhanced.js +0 -144
  298. package/dist/formatters/sarif-enhanced.js.map +0 -1
  299. package/dist/formatters/sarif-v2.d.ts +0 -121
  300. package/dist/formatters/sarif-v2.d.ts.map +0 -1
  301. package/dist/formatters/sarif-v2.js +0 -356
  302. package/dist/formatters/sarif-v2.js.map +0 -1
  303. package/dist/formatters/sarif.d.ts +0 -72
  304. package/dist/formatters/sarif.d.ts.map +0 -1
  305. package/dist/formatters/sarif.js +0 -146
  306. package/dist/formatters/sarif.js.map +0 -1
  307. package/dist/index.d.ts +0 -61
  308. package/dist/index.d.ts.map +0 -1
  309. package/dist/index.js +0 -4388
  310. package/dist/index.js.map +0 -1
  311. package/dist/init/ci-generator.d.ts +0 -18
  312. package/dist/init/ci-generator.d.ts.map +0 -1
  313. package/dist/init/ci-generator.js +0 -317
  314. package/dist/init/ci-generator.js.map +0 -1
  315. package/dist/init/detect-framework.d.ts +0 -15
  316. package/dist/init/detect-framework.d.ts.map +0 -1
  317. package/dist/init/detect-framework.js +0 -301
  318. package/dist/init/detect-framework.js.map +0 -1
  319. package/dist/init/hooks-installer.d.ts +0 -22
  320. package/dist/init/hooks-installer.d.ts.map +0 -1
  321. package/dist/init/hooks-installer.js +0 -310
  322. package/dist/init/hooks-installer.js.map +0 -1
  323. package/dist/init/index.d.ts +0 -8
  324. package/dist/init/index.d.ts.map +0 -1
  325. package/dist/init/index.js +0 -22
  326. package/dist/init/index.js.map +0 -1
  327. package/dist/init/templates.d.ts +0 -402
  328. package/dist/init/templates.d.ts.map +0 -1
  329. package/dist/init/templates.js +0 -240
  330. package/dist/init/templates.js.map +0 -1
  331. package/dist/mcp/server.d.ts +0 -12
  332. package/dist/mcp/server.d.ts.map +0 -1
  333. package/dist/mcp/server.js +0 -42
  334. package/dist/mcp/server.js.map +0 -1
  335. package/dist/mcp/telemetry.d.ts +0 -40
  336. package/dist/mcp/telemetry.d.ts.map +0 -1
  337. package/dist/mcp/telemetry.js +0 -98
  338. package/dist/mcp/telemetry.js.map +0 -1
  339. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +0 -32
  340. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +0 -1
  341. package/dist/reality/no-dead-buttons/button-sweep-generator.js +0 -236
  342. package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +0 -1
  343. package/dist/reality/no-dead-buttons/index.d.ts +0 -11
  344. package/dist/reality/no-dead-buttons/index.d.ts.map +0 -1
  345. package/dist/reality/no-dead-buttons/index.js +0 -18
  346. package/dist/reality/no-dead-buttons/index.js.map +0 -1
  347. package/dist/reality/no-dead-buttons/static-scanner.d.ts +0 -34
  348. package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +0 -1
  349. package/dist/reality/no-dead-buttons/static-scanner.js +0 -230
  350. package/dist/reality/no-dead-buttons/static-scanner.js.map +0 -1
  351. package/dist/reality/reality-graph.d.ts +0 -192
  352. package/dist/reality/reality-graph.d.ts.map +0 -1
  353. package/dist/reality/reality-graph.js +0 -600
  354. package/dist/reality/reality-graph.js.map +0 -1
  355. package/dist/reality/reality-runner.d.ts +0 -89
  356. package/dist/reality/reality-runner.d.ts.map +0 -1
  357. package/dist/reality/reality-runner.js +0 -540
  358. package/dist/reality/reality-runner.js.map +0 -1
  359. package/dist/reality/receipt-generator.d.ts +0 -152
  360. package/dist/reality/receipt-generator.d.ts.map +0 -1
  361. package/dist/reality/receipt-generator.js +0 -495
  362. package/dist/reality/receipt-generator.js.map +0 -1
  363. package/dist/reality/runtime-tracer.d.ts +0 -75
  364. package/dist/reality/runtime-tracer.d.ts.map +0 -1
  365. package/dist/reality/runtime-tracer.js +0 -109
  366. package/dist/reality/runtime-tracer.js.map +0 -1
  367. package/dist/runtime/auth-utils.d.ts +0 -43
  368. package/dist/runtime/auth-utils.d.ts.map +0 -1
  369. package/dist/runtime/auth-utils.js +0 -130
  370. package/dist/runtime/auth-utils.js.map +0 -1
  371. package/dist/runtime/client.d.ts +0 -74
  372. package/dist/runtime/client.d.ts.map +0 -1
  373. package/dist/runtime/client.js +0 -222
  374. package/dist/runtime/client.js.map +0 -1
  375. package/dist/runtime/creds.d.ts +0 -48
  376. package/dist/runtime/creds.d.ts.map +0 -1
  377. package/dist/runtime/creds.js +0 -245
  378. package/dist/runtime/creds.js.map +0 -1
  379. package/dist/runtime/exit-codes.d.ts +0 -49
  380. package/dist/runtime/exit-codes.d.ts.map +0 -1
  381. package/dist/runtime/exit-codes.js +0 -93
  382. package/dist/runtime/exit-codes.js.map +0 -1
  383. package/dist/runtime/index.d.ts +0 -9
  384. package/dist/runtime/index.d.ts.map +0 -1
  385. package/dist/runtime/index.js +0 -25
  386. package/dist/runtime/index.js.map +0 -1
  387. package/dist/runtime/json-output.d.ts +0 -42
  388. package/dist/runtime/json-output.d.ts.map +0 -1
  389. package/dist/runtime/json-output.js +0 -59
  390. package/dist/runtime/json-output.js.map +0 -1
  391. package/dist/runtime/semver.d.ts +0 -37
  392. package/dist/runtime/semver.d.ts.map +0 -1
  393. package/dist/runtime/semver.js +0 -110
  394. package/dist/runtime/semver.js.map +0 -1
  395. package/dist/scan/dead-ui-detector.d.ts +0 -48
  396. package/dist/scan/dead-ui-detector.d.ts.map +0 -1
  397. package/dist/scan/dead-ui-detector.js +0 -170
  398. package/dist/scan/dead-ui-detector.js.map +0 -1
  399. package/dist/scan/playwright-sweep.d.ts +0 -40
  400. package/dist/scan/playwright-sweep.d.ts.map +0 -1
  401. package/dist/scan/playwright-sweep.js +0 -216
  402. package/dist/scan/playwright-sweep.js.map +0 -1
  403. package/dist/scan/proof-bundle.d.ts +0 -25
  404. package/dist/scan/proof-bundle.d.ts.map +0 -1
  405. package/dist/scan/proof-bundle.js +0 -203
  406. package/dist/scan/proof-bundle.js.map +0 -1
  407. package/dist/scan/proof-graph.d.ts +0 -59
  408. package/dist/scan/proof-graph.d.ts.map +0 -1
  409. package/dist/scan/proof-graph.js +0 -64
  410. package/dist/scan/proof-graph.js.map +0 -1
  411. package/dist/scan/reality-sniff.d.ts +0 -56
  412. package/dist/scan/reality-sniff.d.ts.map +0 -1
  413. package/dist/scan/reality-sniff.js +0 -200
  414. package/dist/scan/reality-sniff.js.map +0 -1
  415. package/dist/scan/structural-verifier.d.ts +0 -20
  416. package/dist/scan/structural-verifier.d.ts.map +0 -1
  417. package/dist/scan/structural-verifier.js +0 -112
  418. package/dist/scan/structural-verifier.js.map +0 -1
  419. package/dist/scan/verification-engine.d.ts +0 -47
  420. package/dist/scan/verification-engine.d.ts.map +0 -1
  421. package/dist/scan/verification-engine.js +0 -141
  422. package/dist/scan/verification-engine.js.map +0 -1
  423. package/dist/scanner/baseline.d.ts +0 -52
  424. package/dist/scanner/baseline.d.ts.map +0 -1
  425. package/dist/scanner/baseline.js +0 -85
  426. package/dist/scanner/baseline.js.map +0 -1
  427. package/dist/scanner/incremental.d.ts +0 -30
  428. package/dist/scanner/incremental.d.ts.map +0 -1
  429. package/dist/scanner/incremental.js +0 -82
  430. package/dist/scanner/incremental.js.map +0 -1
  431. package/dist/scanner/parallel.d.ts +0 -43
  432. package/dist/scanner/parallel.d.ts.map +0 -1
  433. package/dist/scanner/parallel.js +0 -99
  434. package/dist/scanner/parallel.js.map +0 -1
  435. package/dist/standalone.d.ts +0 -1
  436. package/dist/standalone.d.ts.map +0 -1
  437. package/dist/standalone.js +0 -1
  438. package/dist/standalone.js.map +0 -1
  439. package/dist/truth-pack/index.d.ts +0 -102
  440. package/dist/truth-pack/index.d.ts.map +0 -1
  441. package/dist/truth-pack/index.js +0 -694
  442. package/dist/truth-pack/index.js.map +0 -1
  443. package/dist/ui/frame.d.ts +0 -68
  444. package/dist/ui/frame.d.ts.map +0 -1
  445. package/dist/ui/frame.js +0 -165
  446. package/dist/ui/frame.js.map +0 -1
  447. package/dist/ui/index.d.ts +0 -5
  448. package/dist/ui/index.d.ts.map +0 -1
  449. package/dist/ui/index.js +0 -16
  450. package/dist/ui/index.js.map +0 -1
  451. package/dist/ui.d.ts +0 -36
  452. package/dist/ui.d.ts.map +0 -1
  453. package/dist/ui.js +0 -45
  454. package/dist/ui.js.map +0 -1
@@ -0,0 +1,518 @@
1
+ /**
2
+ * Static Edge Extractor
3
+ * Extracts causal edges from AST analysis:
4
+ * - UI actions → client functions
5
+ * - Client functions → network calls
6
+ * - Network calls → server routes
7
+ * - Server routes → handlers
8
+ * - Handlers → DB/external calls
9
+ */
10
+
11
+ "use strict";
12
+
13
+ const fg = require("fast-glob");
14
+ const fs = require("fs");
15
+ const path = require("path");
16
+ const crypto = require("crypto");
17
+ const parser = require("@babel/parser");
18
+ const traverse = require("@babel/traverse").default;
19
+ const t = require("@babel/types");
20
+
21
+ function sha256(text) {
22
+ return crypto.createHash("sha256").update(text).digest("hex").slice(0, 16);
23
+ }
24
+
25
+ function nodeId(type, file, line) {
26
+ return `${type}_${sha256(file + ":" + line)}`;
27
+ }
28
+
29
+ function parseFile(code) {
30
+ return parser.parse(code, {
31
+ sourceType: "unambiguous",
32
+ plugins: ["typescript", "jsx", "decorators-legacy"]
33
+ });
34
+ }
35
+
36
+ function safeRead(fileAbs) {
37
+ return fs.readFileSync(fileAbs, "utf8");
38
+ }
39
+
40
+ function getSnippet(code, loc) {
41
+ if (!loc) return "";
42
+ const lines = code.split(/\r?\n/);
43
+ const start = Math.max(0, (loc.start?.line || 1) - 1);
44
+ const end = Math.min(lines.length, (loc.end?.line || start + 1));
45
+ return lines.slice(start, end).join("\n").slice(0, 200);
46
+ }
47
+
48
+ /**
49
+ * Extract UI action nodes (onClick, onSubmit, etc.)
50
+ */
51
+ async function extractUIActions(repoRoot) {
52
+ const files = await fg(["**/*.{tsx,jsx}"], {
53
+ cwd: repoRoot,
54
+ absolute: true,
55
+ ignore: ["**/node_modules/**", "**/.next/**", "**/dist/**", "**/build/**"]
56
+ });
57
+
58
+ const nodes = [];
59
+ const edges = [];
60
+
61
+ for (const fileAbs of files) {
62
+ const fileRel = path.relative(repoRoot, fileAbs).replace(/\\/g, "/");
63
+ const code = safeRead(fileAbs);
64
+
65
+ let ast;
66
+ try { ast = parseFile(code); } catch { continue; }
67
+
68
+ traverse(ast, {
69
+ JSXAttribute(p) {
70
+ const name = p.node.name?.name;
71
+ if (!name || !["onClick", "onSubmit", "onPress", "onChange"].includes(name)) return;
72
+
73
+ const line = p.node.loc?.start?.line || 0;
74
+ const snippet = getSnippet(code, p.node.loc);
75
+ const id = nodeId("ui_action", fileRel, line);
76
+
77
+ nodes.push({
78
+ id,
79
+ type: "ui_action",
80
+ file: fileRel,
81
+ line,
82
+ snippet,
83
+ snippetHash: sha256(snippet),
84
+ actionType: name
85
+ });
86
+
87
+ // Try to find what function this calls
88
+ const value = p.node.value;
89
+ if (t.isJSXExpressionContainer(value)) {
90
+ const expr = value.expression;
91
+
92
+ // Direct function reference: onClick={handleClick}
93
+ if (t.isIdentifier(expr)) {
94
+ edges.push({
95
+ id: `edge_${sha256(id + "_" + expr.name)}`,
96
+ from: id,
97
+ toRef: expr.name,
98
+ type: "calls",
99
+ confidence: "high",
100
+ file: fileRel
101
+ });
102
+ }
103
+
104
+ // Arrow function with call: onClick={() => handleClick()}
105
+ if (t.isArrowFunctionExpression(expr) || t.isFunctionExpression(expr)) {
106
+ traverse(expr.body, {
107
+ CallExpression(cp) {
108
+ if (t.isIdentifier(cp.node.callee)) {
109
+ edges.push({
110
+ id: `edge_${sha256(id + "_" + cp.node.callee.name)}`,
111
+ from: id,
112
+ toRef: cp.node.callee.name,
113
+ type: "calls",
114
+ confidence: "med",
115
+ file: fileRel
116
+ });
117
+ }
118
+ }
119
+ }, p.scope, p);
120
+ }
121
+ }
122
+ }
123
+ });
124
+ }
125
+
126
+ return { nodes, edges };
127
+ }
128
+
129
+ /**
130
+ * Extract client function nodes that make network calls
131
+ */
132
+ async function extractClientFunctions(repoRoot) {
133
+ const files = await fg(["**/*.{ts,tsx,js,jsx}"], {
134
+ cwd: repoRoot,
135
+ absolute: true,
136
+ ignore: ["**/node_modules/**", "**/.next/**", "**/dist/**", "**/build/**", "**/server/**", "**/api/**"]
137
+ });
138
+
139
+ const nodes = [];
140
+ const edges = [];
141
+
142
+ for (const fileAbs of files) {
143
+ const fileRel = path.relative(repoRoot, fileAbs).replace(/\\/g, "/");
144
+ const code = safeRead(fileAbs);
145
+
146
+ let ast;
147
+ try { ast = parseFile(code); } catch { continue; }
148
+
149
+ // Track function declarations that contain fetch/axios
150
+ const funcMap = new Map();
151
+
152
+ traverse(ast, {
153
+ "FunctionDeclaration|ArrowFunctionExpression|FunctionExpression"(p) {
154
+ const funcName = p.node.id?.name ||
155
+ (t.isVariableDeclarator(p.parent) && t.isIdentifier(p.parent.id) ? p.parent.id.name : null);
156
+
157
+ if (!funcName) return;
158
+
159
+ const line = p.node.loc?.start?.line || 0;
160
+ const snippet = getSnippet(code, p.node.loc);
161
+ const id = nodeId("client_function", fileRel, line);
162
+
163
+ funcMap.set(funcName, { id, line, snippet });
164
+ }
165
+ });
166
+
167
+ traverse(ast, {
168
+ CallExpression(p) {
169
+ const callee = p.node.callee;
170
+ let fetchUrl = null;
171
+ let method = "*";
172
+ let callType = null;
173
+
174
+ // fetch("/api/x")
175
+ if (t.isIdentifier(callee) && callee.name === "fetch") {
176
+ const arg0 = p.node.arguments[0];
177
+ if (t.isStringLiteral(arg0)) {
178
+ fetchUrl = arg0.value;
179
+ callType = "fetch";
180
+ }
181
+ // Check method in options
182
+ const arg1 = p.node.arguments[1];
183
+ if (t.isObjectExpression(arg1)) {
184
+ for (const prop of arg1.properties) {
185
+ if (t.isObjectProperty(prop) &&
186
+ ((t.isIdentifier(prop.key) && prop.key.name === "method") ||
187
+ (t.isStringLiteral(prop.key) && prop.key.value === "method")) &&
188
+ t.isStringLiteral(prop.value)) {
189
+ method = prop.value.value.toUpperCase();
190
+ }
191
+ }
192
+ }
193
+ }
194
+
195
+ // axios.get("/api/x")
196
+ if (t.isMemberExpression(callee) &&
197
+ t.isIdentifier(callee.object) && callee.object.name === "axios" &&
198
+ t.isIdentifier(callee.property)) {
199
+ const verb = callee.property.name;
200
+ if (["get", "post", "put", "patch", "delete"].includes(verb)) {
201
+ const arg0 = p.node.arguments[0];
202
+ if (t.isStringLiteral(arg0)) {
203
+ fetchUrl = arg0.value;
204
+ method = verb.toUpperCase();
205
+ callType = "axios";
206
+ }
207
+ }
208
+ }
209
+
210
+ if (fetchUrl && fetchUrl.startsWith("/")) {
211
+ const line = p.node.loc?.start?.line || 0;
212
+ const snippet = getSnippet(code, p.node.loc);
213
+ const networkId = nodeId("network_call", fileRel, line);
214
+
215
+ nodes.push({
216
+ id: networkId,
217
+ type: "network_call",
218
+ file: fileRel,
219
+ line,
220
+ snippet,
221
+ snippetHash: sha256(snippet),
222
+ url: fetchUrl,
223
+ method,
224
+ callType
225
+ });
226
+
227
+ // Find enclosing function
228
+ let funcScope = p.scope;
229
+ while (funcScope) {
230
+ const funcNode = funcScope.block;
231
+ if (t.isFunction(funcNode)) {
232
+ const funcName = funcNode.id?.name ||
233
+ (t.isVariableDeclarator(funcScope.parentBlock) ? funcScope.parentBlock.id?.name : null);
234
+
235
+ if (funcName && funcMap.has(funcName)) {
236
+ const funcData = funcMap.get(funcName);
237
+
238
+ // Add function node if not already added
239
+ if (!nodes.find(n => n.id === funcData.id)) {
240
+ nodes.push({
241
+ id: funcData.id,
242
+ type: "client_function",
243
+ file: fileRel,
244
+ line: funcData.line,
245
+ snippet: funcData.snippet,
246
+ snippetHash: sha256(funcData.snippet),
247
+ name: funcName
248
+ });
249
+ }
250
+
251
+ edges.push({
252
+ id: `edge_${sha256(funcData.id + "_" + networkId)}`,
253
+ from: funcData.id,
254
+ to: networkId,
255
+ type: "fetches",
256
+ confidence: "high"
257
+ });
258
+ }
259
+ break;
260
+ }
261
+ funcScope = funcScope.parent;
262
+ }
263
+
264
+ // Create edge to server route (to be resolved later)
265
+ edges.push({
266
+ id: `edge_${sha256(networkId + "_route_" + fetchUrl)}`,
267
+ from: networkId,
268
+ toRoute: { method, path: fetchUrl },
269
+ type: "calls_route",
270
+ confidence: "high"
271
+ });
272
+ }
273
+ }
274
+ });
275
+ }
276
+
277
+ return { nodes, edges };
278
+ }
279
+
280
+ /**
281
+ * Extract server route nodes from truthpack
282
+ */
283
+ function extractServerRoutes(truthpack) {
284
+ const nodes = [];
285
+ const serverRoutes = truthpack?.routes?.server || [];
286
+
287
+ for (const route of serverRoutes) {
288
+ const id = nodeId("server_route", route.handler || "unknown", route.path.length);
289
+
290
+ nodes.push({
291
+ id,
292
+ type: "server_route",
293
+ file: route.handler || "unknown",
294
+ line: 0,
295
+ snippet: `${route.method} ${route.path}`,
296
+ snippetHash: sha256(`${route.method} ${route.path}`),
297
+ method: route.method,
298
+ path: route.path,
299
+ confidence: route.confidence
300
+ });
301
+ }
302
+
303
+ return { nodes, edges: [] };
304
+ }
305
+
306
+ /**
307
+ * Extract handler → DB/external call edges
308
+ */
309
+ async function extractHandlerCalls(repoRoot) {
310
+ const files = await fg(["**/api/**/*.{ts,js}", "**/routes/**/*.{ts,js}", "**/server/**/*.{ts,js}"], {
311
+ cwd: repoRoot,
312
+ absolute: true,
313
+ ignore: ["**/node_modules/**", "**/.next/**", "**/dist/**", "**/build/**"]
314
+ });
315
+
316
+ const nodes = [];
317
+ const edges = [];
318
+
319
+ for (const fileAbs of files) {
320
+ const fileRel = path.relative(repoRoot, fileAbs).replace(/\\/g, "/");
321
+ const code = safeRead(fileAbs);
322
+
323
+ let ast;
324
+ try { ast = parseFile(code); } catch { continue; }
325
+
326
+ traverse(ast, {
327
+ CallExpression(p) {
328
+ const callee = p.node.callee;
329
+ let callType = null;
330
+ let target = null;
331
+
332
+ // Prisma: prisma.user.findMany(), prisma.$transaction()
333
+ if (t.isMemberExpression(callee)) {
334
+ const obj = callee.object;
335
+ if (t.isIdentifier(obj) && obj.name === "prisma") {
336
+ callType = "db_call";
337
+ target = "prisma";
338
+ } else if (t.isMemberExpression(obj) &&
339
+ t.isIdentifier(obj.object) && obj.object.name === "prisma") {
340
+ callType = "db_call";
341
+ target = `prisma.${obj.property?.name || "unknown"}`;
342
+ }
343
+ }
344
+
345
+ // External: stripe.customers.create()
346
+ if (t.isMemberExpression(callee)) {
347
+ const rootObj = getRootObject(callee);
348
+ if (rootObj && ["stripe", "github", "sendgrid", "twilio", "aws"].includes(rootObj.toLowerCase())) {
349
+ callType = "external_call";
350
+ target = rootObj;
351
+ }
352
+ }
353
+
354
+ if (callType) {
355
+ const line = p.node.loc?.start?.line || 0;
356
+ const snippet = getSnippet(code, p.node.loc);
357
+ const id = nodeId(callType, fileRel, line);
358
+
359
+ nodes.push({
360
+ id,
361
+ type: callType,
362
+ file: fileRel,
363
+ line,
364
+ snippet,
365
+ snippetHash: sha256(snippet),
366
+ target
367
+ });
368
+ }
369
+ }
370
+ });
371
+ }
372
+
373
+ return { nodes, edges };
374
+ }
375
+
376
+ function getRootObject(node) {
377
+ if (t.isIdentifier(node)) return node.name;
378
+ if (t.isMemberExpression(node)) return getRootObject(node.object);
379
+ return null;
380
+ }
381
+
382
+ /**
383
+ * Build complete static graph
384
+ */
385
+ async function extractStaticGraph(repoRoot, truthpack) {
386
+ const uiActions = await extractUIActions(repoRoot);
387
+ const clientFuncs = await extractClientFunctions(repoRoot);
388
+ const serverRoutes = extractServerRoutes(truthpack);
389
+ const handlerCalls = await extractHandlerCalls(repoRoot);
390
+
391
+ const allNodes = [
392
+ ...uiActions.nodes,
393
+ ...clientFuncs.nodes,
394
+ ...serverRoutes.nodes,
395
+ ...handlerCalls.nodes
396
+ ];
397
+
398
+ const allEdges = [
399
+ ...uiActions.edges,
400
+ ...clientFuncs.edges,
401
+ ...serverRoutes.edges,
402
+ ...handlerCalls.edges
403
+ ];
404
+
405
+ // Resolve function reference edges
406
+ const resolvedEdges = resolveEdges(allNodes, allEdges, truthpack);
407
+
408
+ return {
409
+ nodes: dedupeNodes(allNodes),
410
+ edges: resolvedEdges
411
+ };
412
+ }
413
+
414
+ function dedupeNodes(nodes) {
415
+ const seen = new Map();
416
+ for (const n of nodes) {
417
+ if (!seen.has(n.id)) seen.set(n.id, n);
418
+ }
419
+ return Array.from(seen.values());
420
+ }
421
+
422
+ function resolveEdges(nodes, edges, truthpack) {
423
+ const resolved = [];
424
+ const nodeById = new Map(nodes.map(n => [n.id, n]));
425
+ const funcByName = new Map();
426
+ const routeNodes = nodes.filter(n => n.type === "server_route");
427
+
428
+ // Build function name → node map
429
+ for (const n of nodes) {
430
+ if (n.type === "client_function" && n.name) {
431
+ funcByName.set(n.name, n);
432
+ }
433
+ }
434
+
435
+ for (const edge of edges) {
436
+ // Resolve toRef (function name) → actual node
437
+ if (edge.toRef) {
438
+ const target = funcByName.get(edge.toRef);
439
+ if (target) {
440
+ resolved.push({
441
+ ...edge,
442
+ to: target.id,
443
+ toRef: undefined
444
+ });
445
+ } else {
446
+ // Unresolved function call - might be external
447
+ resolved.push({
448
+ ...edge,
449
+ to: `unresolved_${edge.toRef}`,
450
+ confidence: "low"
451
+ });
452
+ }
453
+ continue;
454
+ }
455
+
456
+ // Resolve toRoute → server route node
457
+ if (edge.toRoute) {
458
+ const route = findMatchingRoute(routeNodes, edge.toRoute.method, edge.toRoute.path);
459
+ if (route) {
460
+ resolved.push({
461
+ ...edge,
462
+ to: route.id,
463
+ toRoute: undefined
464
+ });
465
+ } else {
466
+ // No matching route - this is a broken edge
467
+ resolved.push({
468
+ ...edge,
469
+ to: `missing_route_${edge.toRoute.method}_${edge.toRoute.path}`,
470
+ toRoute: edge.toRoute,
471
+ broken: true,
472
+ brokenReason: `Route ${edge.toRoute.method} ${edge.toRoute.path} not found on server`
473
+ });
474
+ }
475
+ continue;
476
+ }
477
+
478
+ resolved.push(edge);
479
+ }
480
+
481
+ return resolved;
482
+ }
483
+
484
+ function findMatchingRoute(routeNodes, method, path) {
485
+ // Normalize path
486
+ const normPath = path.replace(/\/$/, "") || "/";
487
+
488
+ for (const r of routeNodes) {
489
+ if (r.method === "*" || r.method === method || method === "*") {
490
+ if (r.path === normPath) return r;
491
+ // Check parameterized match
492
+ if (matchesParameterized(r.path, normPath)) return r;
493
+ }
494
+ }
495
+ return null;
496
+ }
497
+
498
+ function matchesParameterized(pattern, actual) {
499
+ const patternParts = pattern.split("/").filter(Boolean);
500
+ const actualParts = actual.split("/").filter(Boolean);
501
+
502
+ if (patternParts.length !== actualParts.length) return false;
503
+
504
+ for (let i = 0; i < patternParts.length; i++) {
505
+ const p = patternParts[i];
506
+ if (p.startsWith(":") || p.startsWith("*")) continue;
507
+ if (p !== actualParts[i]) return false;
508
+ }
509
+ return true;
510
+ }
511
+
512
+ module.exports = {
513
+ extractStaticGraph,
514
+ extractUIActions,
515
+ extractClientFunctions,
516
+ extractServerRoutes,
517
+ extractHandlerCalls
518
+ };