@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,192 @@
1
+ /**
2
+ * Route Contract Builder
3
+ * Builds routes.json contract from truthpack
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const crypto = require("crypto");
9
+
10
+ function sha256(text) {
11
+ return crypto.createHash("sha256").update(text).digest("hex").slice(0, 16);
12
+ }
13
+
14
+ /**
15
+ * Build routes contract from truthpack
16
+ */
17
+ function buildRouteContract(truthpack) {
18
+ const contract = {
19
+ version: "1.0.0",
20
+ generatedAt: new Date().toISOString(),
21
+ routes: []
22
+ };
23
+
24
+ const serverRoutes = truthpack?.routes?.server || [];
25
+
26
+ for (const route of serverRoutes) {
27
+ const routeSpec = {
28
+ id: `route_${sha256(route.method + "_" + route.path)}`,
29
+ method: route.method,
30
+ path: route.path,
31
+ handler: route.handler || "unknown",
32
+ auth: inferAuthRequirement(route, truthpack),
33
+ roles: inferRoles(route, truthpack),
34
+ confidence: route.confidence || "med",
35
+ evidence: route.evidence || []
36
+ };
37
+
38
+ contract.routes.push(routeSpec);
39
+ }
40
+
41
+ return contract;
42
+ }
43
+
44
+ /**
45
+ * Infer auth requirement from route and truthpack
46
+ */
47
+ function inferAuthRequirement(route, truthpack) {
48
+ const authPatterns = truthpack?.auth?.nextMatcherPatterns || [];
49
+ const path = route.path;
50
+
51
+ // Check if path matches any protected pattern
52
+ for (const pattern of authPatterns) {
53
+ if (matchesPattern(path, pattern)) {
54
+ return "required";
55
+ }
56
+ }
57
+
58
+ // Check for auth hooks in Fastify
59
+ if (route.hooks?.includes("onRequest") || route.hooks?.includes("preHandler")) {
60
+ return "required";
61
+ }
62
+
63
+ // Check for public API patterns
64
+ if (path.includes("/public/") || path.includes("/health") || path.includes("/status")) {
65
+ return "none";
66
+ }
67
+
68
+ return "optional";
69
+ }
70
+
71
+ /**
72
+ * Infer roles from route metadata
73
+ */
74
+ function inferRoles(route, truthpack) {
75
+ const roles = [];
76
+
77
+ // Check for admin patterns in path
78
+ if (route.path.includes("/admin")) {
79
+ roles.push("admin");
80
+ }
81
+
82
+ // Check handler for role patterns
83
+ const handler = route.handler || "";
84
+ if (handler.includes("admin")) {
85
+ roles.push("admin");
86
+ }
87
+
88
+ return roles.length > 0 ? roles : undefined;
89
+ }
90
+
91
+ function matchesPattern(path, pattern) {
92
+ // Simple pattern matching
93
+ const normPattern = pattern.replace(/\*/g, ".*").replace(/\//g, "\\/");
94
+ try {
95
+ const rx = new RegExp(`^${normPattern}`, "i");
96
+ return rx.test(path);
97
+ } catch {
98
+ return false;
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Validate code against route contract
104
+ */
105
+ function validateAgainstRouteContract(contract, clientRefs) {
106
+ const violations = [];
107
+ const contractPaths = new Map(contract.routes.map(r => [`${r.method}_${r.path}`, r]));
108
+
109
+ for (const ref of clientRefs) {
110
+ const key = `${ref.method}_${ref.path}`;
111
+ const wildcardKey = `*_${ref.path}`;
112
+
113
+ if (!contractPaths.has(key) && !contractPaths.has(wildcardKey)) {
114
+ // Check parameterized match
115
+ const match = findParameterizedMatch(contract.routes, ref.method, ref.path);
116
+
117
+ if (!match) {
118
+ violations.push({
119
+ type: "undeclared_route",
120
+ severity: "BLOCK",
121
+ route: { method: ref.method, path: ref.path },
122
+ source: ref.source,
123
+ message: `Route ${ref.method} ${ref.path} used in client but not declared in contract`,
124
+ evidence: ref.evidence || []
125
+ });
126
+ }
127
+ }
128
+ }
129
+
130
+ return violations;
131
+ }
132
+
133
+ function findParameterizedMatch(routes, method, path) {
134
+ for (const r of routes) {
135
+ if (r.method !== "*" && r.method !== method) continue;
136
+ if (matchesParameterized(r.path, path)) return r;
137
+ }
138
+ return null;
139
+ }
140
+
141
+ function matchesParameterized(pattern, actual) {
142
+ const patternParts = pattern.split("/").filter(Boolean);
143
+ const actualParts = actual.split("/").filter(Boolean);
144
+
145
+ if (patternParts.length !== actualParts.length) return false;
146
+
147
+ for (let i = 0; i < patternParts.length; i++) {
148
+ const p = patternParts[i];
149
+ if (p.startsWith(":") || p.startsWith("*")) continue;
150
+ if (p !== actualParts[i]) return false;
151
+ }
152
+ return true;
153
+ }
154
+
155
+ /**
156
+ * Diff two route contracts
157
+ */
158
+ function diffRouteContracts(before, after) {
159
+ const diff = {
160
+ added: [],
161
+ removed: [],
162
+ changed: []
163
+ };
164
+
165
+ const beforeMap = new Map(before.routes.map(r => [r.id, r]));
166
+ const afterMap = new Map(after.routes.map(r => [r.id, r]));
167
+
168
+ for (const [id, route] of afterMap) {
169
+ if (!beforeMap.has(id)) {
170
+ diff.added.push(route);
171
+ } else {
172
+ const prev = beforeMap.get(id);
173
+ if (prev.auth !== route.auth || JSON.stringify(prev.roles) !== JSON.stringify(route.roles)) {
174
+ diff.changed.push({ before: prev, after: route });
175
+ }
176
+ }
177
+ }
178
+
179
+ for (const [id, route] of beforeMap) {
180
+ if (!afterMap.has(id)) {
181
+ diff.removed.push(route);
182
+ }
183
+ }
184
+
185
+ return diff;
186
+ }
187
+
188
+ module.exports = {
189
+ buildRouteContract,
190
+ validateAgainstRouteContract,
191
+ diffRouteContracts
192
+ };
@@ -0,0 +1,89 @@
1
+ // bin/runners/lib/detect.js
2
+ const fs = require("fs");
3
+ const path = require("path");
4
+ const fg = require("fast-glob");
5
+
6
+ function fileExists(root, rel) {
7
+ return fs.existsSync(path.join(root, rel));
8
+ }
9
+
10
+ function detectPackageManager(root) {
11
+ if (fileExists(root, "pnpm-lock.yaml")) return "pnpm";
12
+ if (fileExists(root, "yarn.lock")) return "yarn";
13
+ if (fileExists(root, "package-lock.json")) return "npm";
14
+ return "npm";
15
+ }
16
+
17
+ function detectNext(root, pkg) {
18
+ const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
19
+ const hasDep = !!deps.next;
20
+ const hasConfig = fileExists(root, "next.config.js") || fileExists(root, "next.config.mjs") || fileExists(root, "next.config.ts");
21
+ const hasApp = fileExists(root, "app") || fileExists(root, "src/app");
22
+ const hasPages = fileExists(root, "pages") || fileExists(root, "src/pages");
23
+ return { enabled: hasDep || hasConfig || hasApp || hasPages, hasDep, hasConfig, hasApp, hasPages };
24
+ }
25
+
26
+ function detectFastify(root, pkg) {
27
+ const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
28
+ const hasDep = !!deps.fastify;
29
+ return { enabled: hasDep, hasDep };
30
+ }
31
+
32
+ function scoreFastifyEntry(code, rel) {
33
+ let s = 0;
34
+ if (/\bfastify\s*\(/.test(code)) s += 10;
35
+ if (/from\s+['"]fastify['"]|require\(['"]fastify['"]\)/.test(code)) s += 8;
36
+ if (/\baddHook\s*\(/.test(code)) s += 2;
37
+ if (/\bregister\s*\(/.test(code)) s += 2;
38
+ if (/\.(listen|ready)\s*\(/.test(code)) s += 10;
39
+ if (/createServer|http\.createServer/.test(code)) s += 1;
40
+ if (rel.includes("server")) s += 2;
41
+ if (rel.includes("api")) s += 1;
42
+ if (rel.endsWith(".ts")) s += 1;
43
+ return s;
44
+ }
45
+
46
+ async function detectFastifyEntry(root) {
47
+ const common = [
48
+ "src/server.ts", "src/server.js",
49
+ "server.ts", "server.js",
50
+ "src/index.ts", "src/index.js",
51
+ "index.ts", "index.js",
52
+ "src/app.ts", "src/app.js",
53
+ "app.ts", "app.js"
54
+ ];
55
+
56
+ for (const rel of common) {
57
+ const abs = path.join(root, rel);
58
+ if (!fs.existsSync(abs)) continue;
59
+ const code = fs.readFileSync(abs, "utf8");
60
+ if (/\bfastify\s*\(/.test(code)) return rel;
61
+ }
62
+
63
+ const files = await fg(["**/*.{ts,js}"], {
64
+ cwd: root,
65
+ onlyFiles: true,
66
+ absolute: false,
67
+ ignore: ["**/node_modules/**", "**/.next/**", "**/dist/**", "**/build/**"]
68
+ });
69
+
70
+ let best = null;
71
+ for (const rel of files.slice(0, 800)) {
72
+ const abs = path.join(root, rel);
73
+ let code;
74
+ try { code = fs.readFileSync(abs, "utf8"); } catch { continue; }
75
+ if (!/\bfastify\s*\(/.test(code)) continue;
76
+
77
+ const s = scoreFastifyEntry(code, rel);
78
+ if (!best || s > best.score) best = { rel, score: s };
79
+ }
80
+
81
+ return best?.rel || null;
82
+ }
83
+
84
+ module.exports = {
85
+ detectPackageManager,
86
+ detectNext,
87
+ detectFastify,
88
+ detectFastifyEntry
89
+ };
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Doctor Auto-Fix Engine
3
+ *
4
+ * Executes fixes for diagnostic issues automatically when safe
5
+ */
6
+
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+ const { execSync, spawn } = require('child_process');
10
+ const { FIX_TYPE, SEVERITY } = require('./types');
11
+
12
+ const FIX_RESULT = {
13
+ SUCCESS: 'success',
14
+ FAILED: 'failed',
15
+ SKIPPED: 'skipped',
16
+ REQUIRES_CONFIRMATION: 'requires_confirmation',
17
+ };
18
+
19
+ function canAutoFix(fix) {
20
+ if (!fix) return false;
21
+ if (fix.dangerous) return false;
22
+ if (fix.autoFixable === false) return false;
23
+
24
+ // Only auto-fix commands and file operations
25
+ return [FIX_TYPE.COMMAND, FIX_TYPE.FILE_CREATE, FIX_TYPE.FILE_EDIT].includes(fix.type);
26
+ }
27
+
28
+ async function executeFix(fix, projectPath, options = {}) {
29
+ const { dryRun = false, interactive = false } = options;
30
+
31
+ if (!fix) {
32
+ return { status: FIX_RESULT.SKIPPED, reason: 'No fix provided' };
33
+ }
34
+
35
+ if (fix.dangerous && !options.allowDangerous) {
36
+ return {
37
+ status: FIX_RESULT.REQUIRES_CONFIRMATION,
38
+ reason: 'Fix is marked as dangerous',
39
+ fix,
40
+ };
41
+ }
42
+
43
+ if (dryRun) {
44
+ return {
45
+ status: FIX_RESULT.SKIPPED,
46
+ reason: 'Dry run mode',
47
+ wouldExecute: fix,
48
+ };
49
+ }
50
+
51
+ try {
52
+ switch (fix.type) {
53
+ case FIX_TYPE.COMMAND:
54
+ return await executeCommand(fix, projectPath, options);
55
+
56
+ case FIX_TYPE.FILE_CREATE:
57
+ return await createFile(fix, projectPath);
58
+
59
+ case FIX_TYPE.FILE_EDIT:
60
+ return await editFile(fix, projectPath);
61
+
62
+ case FIX_TYPE.MANUAL:
63
+ return {
64
+ status: FIX_RESULT.SKIPPED,
65
+ reason: 'Manual fix required',
66
+ instructions: fix.description,
67
+ };
68
+
69
+ case FIX_TYPE.LINK:
70
+ return {
71
+ status: FIX_RESULT.SKIPPED,
72
+ reason: 'External documentation',
73
+ url: fix.url,
74
+ };
75
+
76
+ default:
77
+ return {
78
+ status: FIX_RESULT.SKIPPED,
79
+ reason: `Unknown fix type: ${fix.type}`,
80
+ };
81
+ }
82
+ } catch (err) {
83
+ return {
84
+ status: FIX_RESULT.FAILED,
85
+ error: err.message,
86
+ fix,
87
+ };
88
+ }
89
+ }
90
+
91
+ async function executeCommand(fix, projectPath, options = {}) {
92
+ const { timeout = 60000 } = options;
93
+
94
+ if (!fix.command) {
95
+ return { status: FIX_RESULT.SKIPPED, reason: 'No command specified' };
96
+ }
97
+
98
+ try {
99
+ const result = execSync(fix.command, {
100
+ cwd: projectPath,
101
+ encoding: 'utf8',
102
+ timeout,
103
+ stdio: ['pipe', 'pipe', 'pipe'],
104
+ });
105
+
106
+ return {
107
+ status: FIX_RESULT.SUCCESS,
108
+ command: fix.command,
109
+ output: result.trim(),
110
+ };
111
+ } catch (err) {
112
+ return {
113
+ status: FIX_RESULT.FAILED,
114
+ command: fix.command,
115
+ error: err.message,
116
+ stderr: err.stderr,
117
+ };
118
+ }
119
+ }
120
+
121
+ async function createFile(fix, projectPath) {
122
+ if (!fix.path || fix.content === undefined) {
123
+ return { status: FIX_RESULT.SKIPPED, reason: 'No path or content specified' };
124
+ }
125
+
126
+ const fullPath = path.isAbsolute(fix.path) ? fix.path : path.join(projectPath, fix.path);
127
+
128
+ // Don't overwrite existing files
129
+ if (fs.existsSync(fullPath)) {
130
+ return {
131
+ status: FIX_RESULT.SKIPPED,
132
+ reason: 'File already exists',
133
+ path: fullPath,
134
+ };
135
+ }
136
+
137
+ // Ensure directory exists
138
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
139
+
140
+ // Write file
141
+ fs.writeFileSync(fullPath, fix.content);
142
+
143
+ return {
144
+ status: FIX_RESULT.SUCCESS,
145
+ action: 'created',
146
+ path: fullPath,
147
+ };
148
+ }
149
+
150
+ async function editFile(fix, projectPath) {
151
+ if (!fix.path || fix.content === undefined) {
152
+ return { status: FIX_RESULT.SKIPPED, reason: 'No path or content specified' };
153
+ }
154
+
155
+ const fullPath = path.isAbsolute(fix.path) ? fix.path : path.join(projectPath, fix.path);
156
+
157
+ // Backup existing file
158
+ if (fs.existsSync(fullPath)) {
159
+ const backupPath = `${fullPath}.doctor-backup`;
160
+ fs.copyFileSync(fullPath, backupPath);
161
+ }
162
+
163
+ // Write new content
164
+ fs.writeFileSync(fullPath, fix.content);
165
+
166
+ return {
167
+ status: FIX_RESULT.SUCCESS,
168
+ action: 'edited',
169
+ path: fullPath,
170
+ };
171
+ }
172
+
173
+ async function autoFixAll(diagnostics, projectPath, options = {}) {
174
+ const {
175
+ dryRun = false,
176
+ severity = [SEVERITY.CRITICAL, SEVERITY.ERROR],
177
+ maxFixes = 10,
178
+ } = options;
179
+
180
+ const results = [];
181
+ let fixCount = 0;
182
+
183
+ // Sort by severity (critical first)
184
+ const severityOrder = [SEVERITY.CRITICAL, SEVERITY.ERROR, SEVERITY.WARNING];
185
+ const sortedDiagnostics = [...diagnostics].sort((a, b) => {
186
+ return severityOrder.indexOf(a.severity) - severityOrder.indexOf(b.severity);
187
+ });
188
+
189
+ for (const diagnostic of sortedDiagnostics) {
190
+ if (fixCount >= maxFixes) break;
191
+ if (!severity.includes(diagnostic.severity)) continue;
192
+ if (!diagnostic.fixes || diagnostic.fixes.length === 0) continue;
193
+
194
+ // Try the first auto-fixable fix
195
+ const fix = diagnostic.fixes.find(f => canAutoFix(f));
196
+ if (!fix) continue;
197
+
198
+ const result = await executeFix(fix, projectPath, { ...options, dryRun });
199
+ results.push({
200
+ diagnosticId: diagnostic.id,
201
+ diagnosticName: diagnostic.name,
202
+ ...result,
203
+ });
204
+
205
+ if (result.status === FIX_RESULT.SUCCESS) {
206
+ fixCount++;
207
+ }
208
+ }
209
+
210
+ return {
211
+ attempted: results.length,
212
+ succeeded: results.filter(r => r.status === FIX_RESULT.SUCCESS).length,
213
+ failed: results.filter(r => r.status === FIX_RESULT.FAILED).length,
214
+ skipped: results.filter(r => r.status === FIX_RESULT.SKIPPED).length,
215
+ results,
216
+ };
217
+ }
218
+
219
+ function getFixCommands(diagnostics, options = {}) {
220
+ const { severity = [SEVERITY.CRITICAL, SEVERITY.ERROR, SEVERITY.WARNING] } = options;
221
+
222
+ const commands = [];
223
+
224
+ for (const diagnostic of diagnostics) {
225
+ if (!severity.includes(diagnostic.severity)) continue;
226
+ if (!diagnostic.fixes) continue;
227
+
228
+ for (const fix of diagnostic.fixes) {
229
+ if (fix.type === FIX_TYPE.COMMAND && fix.command) {
230
+ commands.push({
231
+ diagnosticId: diagnostic.id,
232
+ diagnosticName: diagnostic.name,
233
+ command: fix.command,
234
+ description: fix.description,
235
+ dangerous: fix.dangerous,
236
+ autoFixable: canAutoFix(fix),
237
+ });
238
+ }
239
+ }
240
+ }
241
+
242
+ return commands;
243
+ }
244
+
245
+ module.exports = {
246
+ FIX_RESULT,
247
+ canAutoFix,
248
+ executeFix,
249
+ executeCommand,
250
+ createFile,
251
+ editFile,
252
+ autoFixAll,
253
+ getFixCommands,
254
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Doctor Service — Enterprise Environment Diagnostics
3
+ *
4
+ * Main entry point for the Doctor service
5
+ */
6
+
7
+ const { DoctorService, diagnose } = require('./service');
8
+ const { SEVERITY, CATEGORY, FIX_TYPE, SEVERITY_WEIGHT, CATEGORY_META } = require('./types');
9
+ const modules = require('./modules');
10
+ const reporter = require('./reporter');
11
+ const autofix = require('./autofix');
12
+ const ui = require('./ui');
13
+
14
+ module.exports = {
15
+ // Main service
16
+ DoctorService,
17
+ diagnose,
18
+
19
+ // Types and constants
20
+ SEVERITY,
21
+ CATEGORY,
22
+ FIX_TYPE,
23
+ SEVERITY_WEIGHT,
24
+ CATEGORY_META,
25
+
26
+ // Modules
27
+ modules,
28
+
29
+ // Reporter
30
+ reporter,
31
+
32
+ // Auto-fix
33
+ autofix,
34
+
35
+ // UI utilities
36
+ ui,
37
+ };