@vibecheckai/cli 2.5.1

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 (415) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +532 -0
  3. package/dist/autopatch/verified-autopatch.d.ts +111 -0
  4. package/dist/autopatch/verified-autopatch.d.ts.map +1 -0
  5. package/dist/autopatch/verified-autopatch.js +503 -0
  6. package/dist/autopatch/verified-autopatch.js.map +1 -0
  7. package/dist/bundles/guardrail-core.js +25799 -0
  8. package/dist/bundles/guardrail-security.js +208687 -0
  9. package/dist/bundles/guardrail-ship.js +2318 -0
  10. package/dist/bundles/index.js +8 -0
  11. package/dist/commands/autopilot-decision.d.ts +24 -0
  12. package/dist/commands/autopilot-decision.d.ts.map +1 -0
  13. package/dist/commands/autopilot-decision.js +304 -0
  14. package/dist/commands/autopilot-decision.js.map +1 -0
  15. package/dist/commands/autopilot.d.ts +33 -0
  16. package/dist/commands/autopilot.d.ts.map +1 -0
  17. package/dist/commands/autopilot.js +1539 -0
  18. package/dist/commands/autopilot.js.map +1 -0
  19. package/dist/commands/baseline.d.ts +7 -0
  20. package/dist/commands/baseline.d.ts.map +1 -0
  21. package/dist/commands/baseline.js +79 -0
  22. package/dist/commands/baseline.js.map +1 -0
  23. package/dist/commands/cache.d.ts +13 -0
  24. package/dist/commands/cache.d.ts.map +1 -0
  25. package/dist/commands/cache.js +165 -0
  26. package/dist/commands/cache.js.map +1 -0
  27. package/dist/commands/checkpoint.d.ts +8 -0
  28. package/dist/commands/checkpoint.d.ts.map +1 -0
  29. package/dist/commands/checkpoint.js +35 -0
  30. package/dist/commands/checkpoint.js.map +1 -0
  31. package/dist/commands/context.d.ts +8 -0
  32. package/dist/commands/context.d.ts.map +1 -0
  33. package/dist/commands/context.js +340 -0
  34. package/dist/commands/context.js.map +1 -0
  35. package/dist/commands/debug.d.ts +78 -0
  36. package/dist/commands/debug.d.ts.map +1 -0
  37. package/dist/commands/debug.js +381 -0
  38. package/dist/commands/debug.js.map +1 -0
  39. package/dist/commands/doctor.d.ts +17 -0
  40. package/dist/commands/doctor.d.ts.map +1 -0
  41. package/dist/commands/doctor.js +226 -0
  42. package/dist/commands/doctor.js.map +1 -0
  43. package/dist/commands/evidence.d.ts +45 -0
  44. package/dist/commands/evidence.d.ts.map +1 -0
  45. package/dist/commands/evidence.js +197 -0
  46. package/dist/commands/evidence.js.map +1 -0
  47. package/dist/commands/explain.d.ts +8 -0
  48. package/dist/commands/explain.d.ts.map +1 -0
  49. package/dist/commands/explain.js +52 -0
  50. package/dist/commands/explain.js.map +1 -0
  51. package/dist/commands/fix-consolidated.d.ts +19 -0
  52. package/dist/commands/fix-consolidated.d.ts.map +1 -0
  53. package/dist/commands/fix-consolidated.js +165 -0
  54. package/dist/commands/fix-consolidated.js.map +1 -0
  55. package/dist/commands/index.d.ts +8 -0
  56. package/dist/commands/index.d.ts.map +1 -0
  57. package/dist/commands/index.js +15 -0
  58. package/dist/commands/index.js.map +1 -0
  59. package/dist/commands/init.d.ts +8 -0
  60. package/dist/commands/init.d.ts.map +1 -0
  61. package/dist/commands/init.js +125 -0
  62. package/dist/commands/init.js.map +1 -0
  63. package/dist/commands/launcher.d.ts +10 -0
  64. package/dist/commands/launcher.d.ts.map +1 -0
  65. package/dist/commands/launcher.js +174 -0
  66. package/dist/commands/launcher.js.map +1 -0
  67. package/dist/commands/on.d.ts +8 -0
  68. package/dist/commands/on.d.ts.map +1 -0
  69. package/dist/commands/on.js +123 -0
  70. package/dist/commands/on.js.map +1 -0
  71. package/dist/commands/preview.d.ts +54 -0
  72. package/dist/commands/preview.d.ts.map +1 -0
  73. package/dist/commands/preview.js +352 -0
  74. package/dist/commands/preview.js.map +1 -0
  75. package/dist/commands/quality/check.d.ts +31 -0
  76. package/dist/commands/quality/check.d.ts.map +1 -0
  77. package/dist/commands/quality/check.js +242 -0
  78. package/dist/commands/quality/check.js.map +1 -0
  79. package/dist/commands/quality/index.d.ts +8 -0
  80. package/dist/commands/quality/index.d.ts.map +1 -0
  81. package/dist/commands/quality/index.js +14 -0
  82. package/dist/commands/quality/index.js.map +1 -0
  83. package/dist/commands/quality/setup-quality.d.ts +23 -0
  84. package/dist/commands/quality/setup-quality.d.ts.map +1 -0
  85. package/dist/commands/quality/setup-quality.js +452 -0
  86. package/dist/commands/quality/setup-quality.js.map +1 -0
  87. package/dist/commands/quality/tidy.d.ts +41 -0
  88. package/dist/commands/quality/tidy.d.ts.map +1 -0
  89. package/dist/commands/quality/tidy.js +466 -0
  90. package/dist/commands/quality/tidy.js.map +1 -0
  91. package/dist/commands/quality/utils.d.ts +73 -0
  92. package/dist/commands/quality/utils.d.ts.map +1 -0
  93. package/dist/commands/quality/utils.js +158 -0
  94. package/dist/commands/quality/utils.js.map +1 -0
  95. package/dist/commands/replay.d.ts +8 -0
  96. package/dist/commands/replay.d.ts.map +1 -0
  97. package/dist/commands/replay.js +52 -0
  98. package/dist/commands/replay.js.map +1 -0
  99. package/dist/commands/scan-consolidated.d.ts +61 -0
  100. package/dist/commands/scan-consolidated.d.ts.map +1 -0
  101. package/dist/commands/scan-consolidated.js +243 -0
  102. package/dist/commands/scan-consolidated.js.map +1 -0
  103. package/dist/commands/scan-secrets.d.ts +47 -0
  104. package/dist/commands/scan-secrets.d.ts.map +1 -0
  105. package/dist/commands/scan-secrets.js +225 -0
  106. package/dist/commands/scan-secrets.js.map +1 -0
  107. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
  108. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
  109. package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
  110. package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
  111. package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
  112. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
  113. package/dist/commands/scan-vulnerabilities-osv.js +716 -0
  114. package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
  115. package/dist/commands/scan-vulnerabilities.d.ts +32 -0
  116. package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
  117. package/dist/commands/scan-vulnerabilities.js +283 -0
  118. package/dist/commands/scan-vulnerabilities.js.map +1 -0
  119. package/dist/commands/secrets-allowlist.d.ts +7 -0
  120. package/dist/commands/secrets-allowlist.d.ts.map +1 -0
  121. package/dist/commands/secrets-allowlist.js +85 -0
  122. package/dist/commands/secrets-allowlist.js.map +1 -0
  123. package/dist/commands/ship-consolidated.d.ts +58 -0
  124. package/dist/commands/ship-consolidated.d.ts.map +1 -0
  125. package/dist/commands/ship-consolidated.js +515 -0
  126. package/dist/commands/ship-consolidated.js.map +1 -0
  127. package/dist/commands/stats.d.ts +8 -0
  128. package/dist/commands/stats.d.ts.map +1 -0
  129. package/dist/commands/stats.js +134 -0
  130. package/dist/commands/stats.js.map +1 -0
  131. package/dist/commands/upgrade.d.ts +8 -0
  132. package/dist/commands/upgrade.d.ts.map +1 -0
  133. package/dist/commands/upgrade.js +30 -0
  134. package/dist/commands/upgrade.js.map +1 -0
  135. package/dist/fix/analytics.d.ts +121 -0
  136. package/dist/fix/analytics.d.ts.map +1 -0
  137. package/dist/fix/analytics.js +289 -0
  138. package/dist/fix/analytics.js.map +1 -0
  139. package/dist/fix/applicator.d.ts +44 -0
  140. package/dist/fix/applicator.d.ts.map +1 -0
  141. package/dist/fix/applicator.js +144 -0
  142. package/dist/fix/applicator.js.map +1 -0
  143. package/dist/fix/audit.d.ts +61 -0
  144. package/dist/fix/audit.d.ts.map +1 -0
  145. package/dist/fix/audit.js +149 -0
  146. package/dist/fix/audit.js.map +1 -0
  147. package/dist/fix/backup.d.ts +38 -0
  148. package/dist/fix/backup.d.ts.map +1 -0
  149. package/dist/fix/backup.js +154 -0
  150. package/dist/fix/backup.js.map +1 -0
  151. package/dist/fix/config.d.ts +78 -0
  152. package/dist/fix/config.d.ts.map +1 -0
  153. package/dist/fix/config.js +200 -0
  154. package/dist/fix/config.js.map +1 -0
  155. package/dist/fix/engine.d.ts +55 -0
  156. package/dist/fix/engine.d.ts.map +1 -0
  157. package/dist/fix/engine.js +285 -0
  158. package/dist/fix/engine.js.map +1 -0
  159. package/dist/fix/impact.d.ts +74 -0
  160. package/dist/fix/impact.d.ts.map +1 -0
  161. package/dist/fix/impact.js +281 -0
  162. package/dist/fix/impact.js.map +1 -0
  163. package/dist/fix/index.d.ts +5 -0
  164. package/dist/fix/index.d.ts.map +1 -0
  165. package/dist/fix/index.js +12 -0
  166. package/dist/fix/index.js.map +1 -0
  167. package/dist/fix/interactive.d.ts +22 -0
  168. package/dist/fix/interactive.d.ts.map +1 -0
  169. package/dist/fix/interactive.js +172 -0
  170. package/dist/fix/interactive.js.map +1 -0
  171. package/dist/fix/learning.d.ts +109 -0
  172. package/dist/fix/learning.d.ts.map +1 -0
  173. package/dist/fix/learning.js +296 -0
  174. package/dist/fix/learning.js.map +1 -0
  175. package/dist/fix/metrics.d.ts +106 -0
  176. package/dist/fix/metrics.d.ts.map +1 -0
  177. package/dist/fix/metrics.js +138 -0
  178. package/dist/fix/metrics.js.map +1 -0
  179. package/dist/fix/parallel.d.ts +69 -0
  180. package/dist/fix/parallel.d.ts.map +1 -0
  181. package/dist/fix/parallel.js +203 -0
  182. package/dist/fix/parallel.js.map +1 -0
  183. package/dist/fix/report.d.ts +40 -0
  184. package/dist/fix/report.d.ts.map +1 -0
  185. package/dist/fix/report.js +212 -0
  186. package/dist/fix/report.js.map +1 -0
  187. package/dist/fix/strategy.d.ts +53 -0
  188. package/dist/fix/strategy.d.ts.map +1 -0
  189. package/dist/fix/strategy.js +143 -0
  190. package/dist/fix/strategy.js.map +1 -0
  191. package/dist/fix/templates.d.ts +58 -0
  192. package/dist/fix/templates.d.ts.map +1 -0
  193. package/dist/fix/templates.js +259 -0
  194. package/dist/fix/templates.js.map +1 -0
  195. package/dist/fix/testing.d.ts +68 -0
  196. package/dist/fix/testing.d.ts.map +1 -0
  197. package/dist/fix/testing.js +245 -0
  198. package/dist/fix/testing.js.map +1 -0
  199. package/dist/fix/validation.d.ts +71 -0
  200. package/dist/fix/validation.d.ts.map +1 -0
  201. package/dist/fix/validation.js +267 -0
  202. package/dist/fix/validation.js.map +1 -0
  203. package/dist/fix/visualization.d.ts +73 -0
  204. package/dist/fix/visualization.d.ts.map +1 -0
  205. package/dist/fix/visualization.js +243 -0
  206. package/dist/fix/visualization.js.map +1 -0
  207. package/dist/formatters/index.d.ts +6 -0
  208. package/dist/formatters/index.d.ts.map +1 -0
  209. package/dist/formatters/index.js +11 -0
  210. package/dist/formatters/index.js.map +1 -0
  211. package/dist/formatters/sarif-enhanced.d.ts +78 -0
  212. package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
  213. package/dist/formatters/sarif-enhanced.js +144 -0
  214. package/dist/formatters/sarif-enhanced.js.map +1 -0
  215. package/dist/formatters/sarif-v2.d.ts +121 -0
  216. package/dist/formatters/sarif-v2.d.ts.map +1 -0
  217. package/dist/formatters/sarif-v2.js +356 -0
  218. package/dist/formatters/sarif-v2.js.map +1 -0
  219. package/dist/formatters/sarif.d.ts +72 -0
  220. package/dist/formatters/sarif.d.ts.map +1 -0
  221. package/dist/formatters/sarif.js +146 -0
  222. package/dist/formatters/sarif.js.map +1 -0
  223. package/dist/index.d.ts +61 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +4455 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/init/ci-generator.d.ts +18 -0
  228. package/dist/init/ci-generator.d.ts.map +1 -0
  229. package/dist/init/ci-generator.js +317 -0
  230. package/dist/init/ci-generator.js.map +1 -0
  231. package/dist/init/detect-framework.d.ts +15 -0
  232. package/dist/init/detect-framework.d.ts.map +1 -0
  233. package/dist/init/detect-framework.js +301 -0
  234. package/dist/init/detect-framework.js.map +1 -0
  235. package/dist/init/hooks-installer.d.ts +22 -0
  236. package/dist/init/hooks-installer.d.ts.map +1 -0
  237. package/dist/init/hooks-installer.js +310 -0
  238. package/dist/init/hooks-installer.js.map +1 -0
  239. package/dist/init/index.d.ts +8 -0
  240. package/dist/init/index.d.ts.map +1 -0
  241. package/dist/init/index.js +22 -0
  242. package/dist/init/index.js.map +1 -0
  243. package/dist/init/templates.d.ts +401 -0
  244. package/dist/init/templates.d.ts.map +1 -0
  245. package/dist/init/templates.js +240 -0
  246. package/dist/init/templates.js.map +1 -0
  247. package/dist/mcp/server.d.ts +12 -0
  248. package/dist/mcp/server.d.ts.map +1 -0
  249. package/dist/mcp/server.js +42 -0
  250. package/dist/mcp/server.js.map +1 -0
  251. package/dist/mcp/telemetry.d.ts +40 -0
  252. package/dist/mcp/telemetry.d.ts.map +1 -0
  253. package/dist/mcp/telemetry.js +98 -0
  254. package/dist/mcp/telemetry.js.map +1 -0
  255. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +32 -0
  256. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +1 -0
  257. package/dist/reality/no-dead-buttons/button-sweep-generator.js +236 -0
  258. package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +1 -0
  259. package/dist/reality/no-dead-buttons/index.d.ts +11 -0
  260. package/dist/reality/no-dead-buttons/index.d.ts.map +1 -0
  261. package/dist/reality/no-dead-buttons/index.js +18 -0
  262. package/dist/reality/no-dead-buttons/index.js.map +1 -0
  263. package/dist/reality/no-dead-buttons/static-scanner.d.ts +34 -0
  264. package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +1 -0
  265. package/dist/reality/no-dead-buttons/static-scanner.js +230 -0
  266. package/dist/reality/no-dead-buttons/static-scanner.js.map +1 -0
  267. package/dist/reality/reality-graph.d.ts +192 -0
  268. package/dist/reality/reality-graph.d.ts.map +1 -0
  269. package/dist/reality/reality-graph.js +600 -0
  270. package/dist/reality/reality-graph.js.map +1 -0
  271. package/dist/reality/reality-runner.d.ts +89 -0
  272. package/dist/reality/reality-runner.d.ts.map +1 -0
  273. package/dist/reality/reality-runner.js +540 -0
  274. package/dist/reality/reality-runner.js.map +1 -0
  275. package/dist/reality/receipt-generator.d.ts +152 -0
  276. package/dist/reality/receipt-generator.d.ts.map +1 -0
  277. package/dist/reality/receipt-generator.js +495 -0
  278. package/dist/reality/receipt-generator.js.map +1 -0
  279. package/dist/reality/runtime-tracer.d.ts +75 -0
  280. package/dist/reality/runtime-tracer.d.ts.map +1 -0
  281. package/dist/reality/runtime-tracer.js +109 -0
  282. package/dist/reality/runtime-tracer.js.map +1 -0
  283. package/dist/runtime/auth-utils.d.ts +43 -0
  284. package/dist/runtime/auth-utils.d.ts.map +1 -0
  285. package/dist/runtime/auth-utils.js +130 -0
  286. package/dist/runtime/auth-utils.js.map +1 -0
  287. package/dist/runtime/cli-errors.d.ts +38 -0
  288. package/dist/runtime/cli-errors.d.ts.map +1 -0
  289. package/dist/runtime/cli-errors.js +354 -0
  290. package/dist/runtime/cli-errors.js.map +1 -0
  291. package/dist/runtime/client.d.ts +74 -0
  292. package/dist/runtime/client.d.ts.map +1 -0
  293. package/dist/runtime/client.js +222 -0
  294. package/dist/runtime/client.js.map +1 -0
  295. package/dist/runtime/creds.d.ts +48 -0
  296. package/dist/runtime/creds.d.ts.map +1 -0
  297. package/dist/runtime/creds.js +245 -0
  298. package/dist/runtime/creds.js.map +1 -0
  299. package/dist/runtime/exit-codes.d.ts +49 -0
  300. package/dist/runtime/exit-codes.d.ts.map +1 -0
  301. package/dist/runtime/exit-codes.js +93 -0
  302. package/dist/runtime/exit-codes.js.map +1 -0
  303. package/dist/runtime/index.d.ts +9 -0
  304. package/dist/runtime/index.d.ts.map +1 -0
  305. package/dist/runtime/index.js +25 -0
  306. package/dist/runtime/index.js.map +1 -0
  307. package/dist/runtime/json-output.d.ts +42 -0
  308. package/dist/runtime/json-output.d.ts.map +1 -0
  309. package/dist/runtime/json-output.js +59 -0
  310. package/dist/runtime/json-output.js.map +1 -0
  311. package/dist/runtime/owner-mode.d.ts +48 -0
  312. package/dist/runtime/owner-mode.d.ts.map +1 -0
  313. package/dist/runtime/owner-mode.js +284 -0
  314. package/dist/runtime/owner-mode.js.map +1 -0
  315. package/dist/runtime/semver.d.ts +37 -0
  316. package/dist/runtime/semver.d.ts.map +1 -0
  317. package/dist/runtime/semver.js +110 -0
  318. package/dist/runtime/semver.js.map +1 -0
  319. package/dist/scan/dead-ui-detector.d.ts +48 -0
  320. package/dist/scan/dead-ui-detector.d.ts.map +1 -0
  321. package/dist/scan/dead-ui-detector.js +170 -0
  322. package/dist/scan/dead-ui-detector.js.map +1 -0
  323. package/dist/scan/playwright-sweep.d.ts +40 -0
  324. package/dist/scan/playwright-sweep.d.ts.map +1 -0
  325. package/dist/scan/playwright-sweep.js +216 -0
  326. package/dist/scan/playwright-sweep.js.map +1 -0
  327. package/dist/scan/proof-bundle.d.ts +25 -0
  328. package/dist/scan/proof-bundle.d.ts.map +1 -0
  329. package/dist/scan/proof-bundle.js +203 -0
  330. package/dist/scan/proof-bundle.js.map +1 -0
  331. package/dist/scan/proof-graph.d.ts +59 -0
  332. package/dist/scan/proof-graph.d.ts.map +1 -0
  333. package/dist/scan/proof-graph.js +64 -0
  334. package/dist/scan/proof-graph.js.map +1 -0
  335. package/dist/scan/reality-sniff.d.ts +56 -0
  336. package/dist/scan/reality-sniff.d.ts.map +1 -0
  337. package/dist/scan/reality-sniff.js +200 -0
  338. package/dist/scan/reality-sniff.js.map +1 -0
  339. package/dist/scan/structural-verifier.d.ts +20 -0
  340. package/dist/scan/structural-verifier.d.ts.map +1 -0
  341. package/dist/scan/structural-verifier.js +112 -0
  342. package/dist/scan/structural-verifier.js.map +1 -0
  343. package/dist/scan/verification-engine.d.ts +47 -0
  344. package/dist/scan/verification-engine.d.ts.map +1 -0
  345. package/dist/scan/verification-engine.js +141 -0
  346. package/dist/scan/verification-engine.js.map +1 -0
  347. package/dist/scanner/baseline.d.ts +52 -0
  348. package/dist/scanner/baseline.d.ts.map +1 -0
  349. package/dist/scanner/baseline.js +85 -0
  350. package/dist/scanner/baseline.js.map +1 -0
  351. package/dist/scanner/incremental.d.ts +30 -0
  352. package/dist/scanner/incremental.d.ts.map +1 -0
  353. package/dist/scanner/incremental.js +82 -0
  354. package/dist/scanner/incremental.js.map +1 -0
  355. package/dist/scanner/index.d.ts +8 -0
  356. package/dist/scanner/index.d.ts.map +1 -0
  357. package/dist/scanner/index.js +15 -0
  358. package/dist/scanner/index.js.map +1 -0
  359. package/dist/scanner/parallel.d.ts +43 -0
  360. package/dist/scanner/parallel.d.ts.map +1 -0
  361. package/dist/scanner/parallel.js +99 -0
  362. package/dist/scanner/parallel.js.map +1 -0
  363. package/dist/scanner/placeholder-detector.d.ts +56 -0
  364. package/dist/scanner/placeholder-detector.d.ts.map +1 -0
  365. package/dist/scanner/placeholder-detector.js +220 -0
  366. package/dist/scanner/placeholder-detector.js.map +1 -0
  367. package/dist/scanner/route-detector.d.ts +100 -0
  368. package/dist/scanner/route-detector.d.ts.map +1 -0
  369. package/dist/scanner/route-detector.js +455 -0
  370. package/dist/scanner/route-detector.js.map +1 -0
  371. package/dist/scanner/scoring.d.ts +67 -0
  372. package/dist/scanner/scoring.d.ts.map +1 -0
  373. package/dist/scanner/scoring.js +284 -0
  374. package/dist/scanner/scoring.js.map +1 -0
  375. package/dist/ship-baseline.d.ts +56 -0
  376. package/dist/ship-baseline.d.ts.map +1 -0
  377. package/dist/ship-baseline.js +194 -0
  378. package/dist/ship-baseline.js.map +1 -0
  379. package/dist/ship-config.d.ts +91 -0
  380. package/dist/ship-config.d.ts.map +1 -0
  381. package/dist/ship-config.js +133 -0
  382. package/dist/ship-config.js.map +1 -0
  383. package/dist/ship-data-loader.d.ts +70 -0
  384. package/dist/ship-data-loader.d.ts.map +1 -0
  385. package/dist/ship-data-loader.js +301 -0
  386. package/dist/ship-data-loader.js.map +1 -0
  387. package/dist/standalone.d.ts +1 -0
  388. package/dist/standalone.d.ts.map +1 -0
  389. package/dist/standalone.js +1 -0
  390. package/dist/standalone.js.map +1 -0
  391. package/dist/truth-pack/index.d.ts +102 -0
  392. package/dist/truth-pack/index.d.ts.map +1 -0
  393. package/dist/truth-pack/index.js +694 -0
  394. package/dist/truth-pack/index.js.map +1 -0
  395. package/dist/ui/frame.d.ts +68 -0
  396. package/dist/ui/frame.d.ts.map +1 -0
  397. package/dist/ui/frame.js +165 -0
  398. package/dist/ui/frame.js.map +1 -0
  399. package/dist/ui/index.d.ts +5 -0
  400. package/dist/ui/index.d.ts.map +1 -0
  401. package/dist/ui/index.js +16 -0
  402. package/dist/ui/index.js.map +1 -0
  403. package/dist/ui.d.ts +36 -0
  404. package/dist/ui.d.ts.map +1 -0
  405. package/dist/ui.js +45 -0
  406. package/dist/ui.js.map +1 -0
  407. package/dist/utils/ai-helpers.d.ts +72 -0
  408. package/dist/utils/ai-helpers.d.ts.map +1 -0
  409. package/dist/utils/ai-helpers.js +339 -0
  410. package/dist/utils/ai-helpers.js.map +1 -0
  411. package/dist/utils/validation.d.ts +34 -0
  412. package/dist/utils/validation.d.ts.map +1 -0
  413. package/dist/utils/validation.js +160 -0
  414. package/dist/utils/validation.js.map +1 -0
  415. package/package.json +66 -0
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ /**
3
+ * CI Workflow Generator
4
+ * Generates working GitHub Actions workflows with SARIF upload support
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.generateCIWorkflow = generateCIWorkflow;
8
+ exports.getCIProviderFromProject = getCIProviderFromProject;
9
+ const fs_1 = require("fs");
10
+ const path_1 = require("path");
11
+ function generateGitHubActionsWorkflow(config) {
12
+ const useSarif = config.output.format === 'sarif' || config.output.sarifUpload;
13
+ const runCompliance = config.scans.compliance.enabled;
14
+ const runSbom = config.scans.sbom?.enabled;
15
+ const workflow = `name: Guardrail Security Scan
16
+
17
+ on:
18
+ push:
19
+ branches: [main, master, develop]
20
+ pull_request:
21
+ branches: [main, master, develop]
22
+ workflow_dispatch:
23
+
24
+ permissions:
25
+ contents: read
26
+ security-events: write
27
+ actions: read
28
+
29
+ jobs:
30
+ guardrail-scan:
31
+ name: Security Scan
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - name: Checkout code
35
+ uses: actions/checkout@v4
36
+ with:
37
+ fetch-depth: 0
38
+
39
+ - name: Setup Node.js
40
+ uses: actions/setup-node@v4
41
+ with:
42
+ node-version: '20'
43
+ cache: 'npm'
44
+
45
+ - name: Install dependencies
46
+ run: npm ci --ignore-scripts
47
+ timeout-minutes: 10
48
+ retry-on-error: true
49
+
50
+ - name: Install Guardrail CLI
51
+ run: npm install -g guardrail-cli
52
+ timeout-minutes: 5
53
+ retry-on-error: true
54
+
55
+ - name: Run Secrets Scan
56
+ id: secrets
57
+ run: |
58
+ set -e
59
+ MAX_RETRIES=3
60
+ RETRY_COUNT=0
61
+ while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
62
+ if guardrail scan:secrets \\
63
+ --path . \\
64
+ --format ${useSarif ? 'sarif' : 'json'} \\
65
+ ${useSarif ? '--output secrets-results.sarif' : '--output secrets-results.json'} \\
66
+ --exit-code; then
67
+ exit 0
68
+ fi
69
+ RETRY_COUNT=$((RETRY_COUNT + 1))
70
+ if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
71
+ echo "Scan failed, retrying in 5 seconds... (attempt $RETRY_COUNT/$MAX_RETRIES)"
72
+ sleep 5
73
+ fi
74
+ done
75
+ echo "Secrets scan failed after $MAX_RETRIES attempts"
76
+ exit 1
77
+ env:
78
+ GUARDRAIL_API_KEY: \${{ secrets.GUARDRAIL_API_KEY }}
79
+ timeout-minutes: 10
80
+ # Note: Removed continue-on-error - failures should be visible
81
+
82
+ - name: Run Vulnerability Scan
83
+ id: vulns
84
+ run: |
85
+ set -e
86
+ MAX_RETRIES=3
87
+ RETRY_COUNT=0
88
+ while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
89
+ if guardrail scan:vulnerabilities \\
90
+ --path . \\
91
+ --format ${useSarif ? 'sarif' : 'json'} \\
92
+ ${useSarif ? '--output vuln-results.sarif' : '--output vuln-results.json'} \\
93
+ --exit-code; then
94
+ exit 0
95
+ fi
96
+ RETRY_COUNT=$((RETRY_COUNT + 1))
97
+ if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
98
+ echo "Scan failed, retrying in 5 seconds... (attempt $RETRY_COUNT/$MAX_RETRIES)"
99
+ sleep 5
100
+ fi
101
+ done
102
+ echo "Vulnerability scan failed after $MAX_RETRIES attempts"
103
+ exit 1
104
+ env:
105
+ GUARDRAIL_API_KEY: \${{ secrets.GUARDRAIL_API_KEY }}
106
+ timeout-minutes: 15
107
+ # Note: Removed continue-on-error - failures should be visible
108
+ ${runCompliance ? `
109
+ - name: Run Compliance Scan
110
+ id: compliance
111
+ run: |
112
+ guardrail scan:compliance\\
113
+ --path . \\
114
+ --framework ${config.scans.compliance.frameworks?.[0] || 'soc2'} \\
115
+ --format json \\
116
+ --output compliance-results.json \\
117
+ --exit-code
118
+ env:
119
+ GUARDRAIL_API_KEY: \${{ secrets.GUARDRAIL_API_KEY }}
120
+ continue-on-error: true
121
+ ` : ''}${runSbom ? `
122
+ - name: Generate SBOM
123
+ id: sbom
124
+ run: |
125
+ guardrail sbom:generate \\
126
+ --path . \\
127
+ --format cyclonedx \\
128
+ --output sbom.json
129
+ env:
130
+ GUARDRAIL_API_KEY: \${{ secrets.GUARDRAIL_API_KEY }}
131
+ # Note: Optional scan - continue-on-error acceptable
132
+ continue-on-error: true
133
+ ` : ''}${runSbom ? `
134
+ - name: Generate SBOM
135
+ id: sbom
136
+ run: |
137
+ guardrail sbom:generate \\
138
+ --path . \\
139
+ --format cyclonedx \\
140
+ --output sbom.json
141
+ env:
142
+ GUARDRAIL_API_KEY: \${{ secrets.GUARDRAIL_API_KEY }}
143
+ # Note: Optional scan - continue-on-error acceptable
144
+ continue-on-error: true
145
+ ` : ''}
146
+ - name: Run Ship Check
147
+ id: ship
148
+ run: |
149
+ set -e
150
+ MAX_RETRIES=2
151
+ RETRY_COUNT=0
152
+ while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
153
+ if guardrail ship \\
154
+ --path . \\
155
+ --format json \\
156
+ --output ship-results.json; then
157
+ exit 0
158
+ fi
159
+ RETRY_COUNT=$((RETRY_COUNT + 1))
160
+ if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
161
+ echo "Ship check failed, retrying in 5 seconds... (attempt $RETRY_COUNT/$MAX_RETRIES)"
162
+ sleep 5
163
+ fi
164
+ done
165
+ echo "Ship check failed after $MAX_RETRIES attempts"
166
+ exit 1
167
+ env:
168
+ GUARDRAIL_API_KEY: \${{ secrets.GUARDRAIL_API_KEY }}
169
+ timeout-minutes: 20
170
+ # Note: Removed continue-on-error - ship check failures should be visible
171
+ ${useSarif ? `
172
+ - name: Upload Secrets SARIF to GitHub Security
173
+ uses: github/codeql-action/upload-sarif@v3
174
+ if: always() && hashFiles('secrets-results.sarif') != ''
175
+ with:
176
+ sarif_file: secrets-results.sarif
177
+ category: guardrail-secrets
178
+ continue-on-error: true
179
+ timeout-minutes: 5
180
+
181
+ - name: Upload Vulnerability SARIF to GitHub Security
182
+ uses: github/codeql-action/upload-sarif@v3
183
+ if: always() && hashFiles('vuln-results.sarif') != ''
184
+ with:
185
+ sarif_file: vuln-results.sarif
186
+ category: guardrail-vulnerabilities
187
+ continue-on-error: true
188
+ timeout-minutes: 5
189
+ ` : ''}
190
+ - name: Upload Scan Artifacts
191
+ uses: actions/upload-artifact@v4
192
+ if: always()
193
+ with:
194
+ name: guardrail-results
195
+ path: |
196
+ *-results.json
197
+ *-results.sarif
198
+ sbom.json
199
+ retention-days: 30
200
+
201
+ - name: Check Scan Results
202
+ run: |
203
+ echo "=== Guardrail Security Scan Summary ==="
204
+
205
+ if [ -f ship-results.json ]; then
206
+ VERDICT=$(cat ship-results.json | jq -r '.verdict // "unknown"')
207
+ SCORE=$(cat ship-results.json | jq -r '.score // "N/A"')
208
+ echo "Ship Status: $VERDICT (Score: $SCORE)"
209
+ fi
210
+
211
+ # Fail the workflow if critical issues were found
212
+ FAILED=false
213
+
214
+ if [ "\${{ steps.secrets.outcome }}" == "failure" ]; then
215
+ echo "❌ Secrets scan found issues"
216
+ FAILED=true
217
+ else
218
+ echo "✅ Secrets scan passed"
219
+ fi
220
+
221
+ if [ "\${{ steps.vulns.outcome }}" == "failure" ]; then
222
+ echo "❌ Vulnerability scan found issues"
223
+ FAILED=true
224
+ else
225
+ echo "✅ Vulnerability scan passed"
226
+ fi
227
+
228
+ if [ "$FAILED" == "true" ]; then
229
+ echo ""
230
+ echo "Security issues detected. Please review the scan results."
231
+ exit 1
232
+ fi
233
+
234
+ echo ""
235
+ echo "All security checks passed! ✅"
236
+ `;
237
+ return workflow;
238
+ }
239
+ function generateGitLabCI(config) {
240
+ const runCompliance = config.scans.compliance.enabled;
241
+ return `stages:
242
+ - security
243
+
244
+ guardrail-scan:
245
+ stage: security
246
+ image: node:20-alpine
247
+ before_script:
248
+ - npm ci --ignore-scripts
249
+ - npm install -g guardrail-cli
250
+ script:
251
+ - guardrail scan:secrets --path . --format json --output secrets-results.json --exit-code || true
252
+ - guardrail scan:vulnerabilities --path . --format json --output vuln-results.json --exit-code || true
253
+ ${runCompliance ? ` - guardrail scan:compliance --path . --framework ${config.scans.compliance.frameworks?.[0] || 'soc2'} --format json --output compliance-results.json || true` : ''}
254
+ - guardrail ship --path . --format json --output ship-results.json
255
+ artifacts:
256
+ paths:
257
+ - "*-results.json"
258
+ reports:
259
+ sast: secrets-results.json
260
+ expire_in: 30 days
261
+ variables:
262
+ GUARDRAIL_API_KEY: $GUARDRAIL_API_KEY
263
+ rules:
264
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
265
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
266
+ `;
267
+ }
268
+ function generateCIWorkflow(options) {
269
+ const { projectPath, config, provider = 'github' } = options;
270
+ let workflowContent;
271
+ let workflowPath;
272
+ switch (provider) {
273
+ case 'github': {
274
+ workflowContent = generateGitHubActionsWorkflow(config);
275
+ const workflowDir = (0, path_1.join)(projectPath, '.github', 'workflows');
276
+ if (!(0, fs_1.existsSync)(workflowDir)) {
277
+ (0, fs_1.mkdirSync)(workflowDir, { recursive: true });
278
+ }
279
+ workflowPath = (0, path_1.join)(workflowDir, 'guardrail.yml');
280
+ break;
281
+ }
282
+ case 'gitlab': {
283
+ workflowContent = generateGitLabCI(config);
284
+ workflowPath = (0, path_1.join)(projectPath, '.gitlab-ci.yml');
285
+ break;
286
+ }
287
+ default:
288
+ workflowContent = generateGitHubActionsWorkflow(config);
289
+ const defaultDir = (0, path_1.join)(projectPath, '.github', 'workflows');
290
+ if (!(0, fs_1.existsSync)(defaultDir)) {
291
+ (0, fs_1.mkdirSync)(defaultDir, { recursive: true });
292
+ }
293
+ workflowPath = (0, path_1.join)(defaultDir, 'guardrail.yml');
294
+ }
295
+ (0, fs_1.writeFileSync)(workflowPath, workflowContent, 'utf-8');
296
+ return {
297
+ success: true,
298
+ workflowPath,
299
+ provider,
300
+ };
301
+ }
302
+ function getCIProviderFromProject(projectPath) {
303
+ if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, '.github'))) {
304
+ return 'github';
305
+ }
306
+ if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, '.gitlab-ci.yml'))) {
307
+ return 'gitlab';
308
+ }
309
+ if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, 'azure-pipelines.yml'))) {
310
+ return 'azure';
311
+ }
312
+ if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, 'bitbucket-pipelines.yml'))) {
313
+ return 'bitbucket';
314
+ }
315
+ return null;
316
+ }
317
+ //# sourceMappingURL=ci-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-generator.js","sourceRoot":"","sources":["../../src/init/ci-generator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAyRH,gDAqCC;AAED,4DAcC;AA5UD,2BAA0D;AAC1D,+BAA4B;AAgB5B,SAAS,6BAA6B,CAAC,MAAuB;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;IAC/E,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IAE3C,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAiDM,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACpC,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;yBA0BpE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACpC,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,4BAA4B;;;;;;;;;;;;;;;;EAgBrF,aAAa,CAAC,CAAC,CAAC;;;;;;0BAMQ,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM;;;;;;;CAO1E,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;CAYlB,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;CAYlB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BJ,QAAQ,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;CAkBZ,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CL,CAAC;IAEA,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuB;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;IAEtD,OAAO;;;;;;;;;;;;EAYP,aAAa,CAAC,CAAC,CAAC,wDAAwD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,yDAAyD,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;CAaxL,CAAC;AACF,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAA2B;IAC5D,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7D,IAAI,eAAuB,CAAC;IAC5B,IAAI,YAAoB,CAAC;IAEzB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,eAAe,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,IAAA,cAAS,EAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,YAAY,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAClD,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC3C,YAAY,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;YACnD,MAAM;QACR,CAAC;QACD;YACE,eAAe,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,IAAA,cAAS,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,YAAY,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IACrD,CAAC;IAED,IAAA,kBAAa,EAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAEtD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CAAC,WAAmB;IAC1D,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Framework Detection Module
3
+ * Detects project type by inspecting package.json and file structure
4
+ */
5
+ export type DetectedFramework = 'nextjs' | 'express' | 'nestjs' | 'fastify' | 'remix' | 'vite-react' | 'unknown';
6
+ export interface FrameworkDetectionResult {
7
+ framework: DetectedFramework;
8
+ confidence: 'high' | 'medium' | 'low';
9
+ signals: string[];
10
+ recommendedScans: string[];
11
+ scanDescription: string;
12
+ }
13
+ export declare function detectFramework(projectPath: string): FrameworkDetectionResult;
14
+ export declare function formatFrameworkName(framework: DetectedFramework): string;
15
+ //# sourceMappingURL=detect-framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-framework.d.ts","sourceRoot":"","sources":["../../src/init/detect-framework.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAiRD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,CAsC7E;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAWxE"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ /**
3
+ * Framework Detection Module
4
+ * Detects project type by inspecting package.json and file structure
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.detectFramework = detectFramework;
8
+ exports.formatFrameworkName = formatFrameworkName;
9
+ const fs_1 = require("fs");
10
+ const path_1 = require("path");
11
+ function loadPackageJson(projectPath) {
12
+ const packageJsonPath = (0, path_1.join)(projectPath, 'package.json');
13
+ if (!(0, fs_1.existsSync)(packageJsonPath)) {
14
+ return null;
15
+ }
16
+ try {
17
+ return JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ function hasDependency(pkg, depName) {
24
+ if (!pkg)
25
+ return false;
26
+ return Boolean(pkg.dependencies?.[depName] || pkg.devDependencies?.[depName]);
27
+ }
28
+ function hasFile(projectPath, ...patterns) {
29
+ for (const pattern of patterns) {
30
+ if (pattern.includes('*')) {
31
+ const dir = (0, path_1.join)(projectPath, pattern.split('/')[0] || '.');
32
+ const filePattern = pattern.split('/').pop()?.replace('*', '') || '';
33
+ try {
34
+ const files = (0, fs_1.readdirSync)(dir);
35
+ if (files.some(f => f.includes(filePattern.replace('*', '')))) {
36
+ return true;
37
+ }
38
+ }
39
+ catch {
40
+ continue;
41
+ }
42
+ }
43
+ else {
44
+ if ((0, fs_1.existsSync)((0, path_1.join)(projectPath, pattern))) {
45
+ return true;
46
+ }
47
+ }
48
+ }
49
+ return false;
50
+ }
51
+ function hasDirectory(projectPath, dirName) {
52
+ const dirPath = (0, path_1.join)(projectPath, dirName);
53
+ try {
54
+ return (0, fs_1.existsSync)(dirPath) && (0, fs_1.statSync)(dirPath).isDirectory();
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ function hasFilePattern(projectPath, dir, pattern) {
61
+ const dirPath = (0, path_1.join)(projectPath, dir);
62
+ if (!(0, fs_1.existsSync)(dirPath))
63
+ return false;
64
+ try {
65
+ const files = (0, fs_1.readdirSync)(dirPath);
66
+ return files.some(f => pattern.test(f));
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ }
72
+ function detectNextJS(projectPath, pkg) {
73
+ const signals = [];
74
+ let confidence = 'low';
75
+ if (hasDependency(pkg, 'next')) {
76
+ signals.push('next dependency found in package.json');
77
+ confidence = 'high';
78
+ }
79
+ if (hasFile(projectPath, 'next.config.js', 'next.config.mjs', 'next.config.ts')) {
80
+ signals.push('next.config.* file found');
81
+ confidence = 'high';
82
+ }
83
+ if (hasDirectory(projectPath, 'app') && hasFile(projectPath, 'app/layout.tsx', 'app/layout.js', 'app/page.tsx', 'app/page.js')) {
84
+ signals.push('Next.js app directory structure detected');
85
+ if (confidence !== 'high')
86
+ confidence = 'medium';
87
+ }
88
+ if (hasDirectory(projectPath, 'pages')) {
89
+ const pagesPath = (0, path_1.join)(projectPath, 'pages');
90
+ try {
91
+ const files = (0, fs_1.readdirSync)(pagesPath);
92
+ if (files.some(f => f.endsWith('.tsx') || f.endsWith('.jsx') || f === '_app.js' || f === '_app.tsx')) {
93
+ signals.push('Next.js pages directory structure detected');
94
+ if (confidence !== 'high')
95
+ confidence = 'medium';
96
+ }
97
+ }
98
+ catch (error) {
99
+ // Failed to detect framework - continue with default setup
100
+ }
101
+ }
102
+ if (signals.length === 0)
103
+ return null;
104
+ return {
105
+ framework: 'nextjs',
106
+ confidence,
107
+ signals,
108
+ recommendedScans: ['secrets', 'vuln', 'ship', 'reality'],
109
+ scanDescription: 'Full-stack scanning: secrets detection, dependency vulnerabilities, ship readiness, and reality mode for auth/dashboard flows',
110
+ };
111
+ }
112
+ function detectExpress(projectPath, pkg) {
113
+ const signals = [];
114
+ let confidence = 'low';
115
+ if (hasDependency(pkg, 'express')) {
116
+ signals.push('express dependency found in package.json');
117
+ confidence = 'high';
118
+ }
119
+ if (hasFilePattern(projectPath, 'src', /^(server|app|index)\.(ts|js)$/)) {
120
+ signals.push('src/server.* or src/app.* pattern detected');
121
+ if (confidence !== 'high')
122
+ confidence = 'medium';
123
+ }
124
+ if (hasFilePattern(projectPath, '.', /^(server|app)\.(ts|js)$/)) {
125
+ signals.push('Root server.* or app.* file detected');
126
+ if (confidence !== 'high')
127
+ confidence = 'medium';
128
+ }
129
+ if (hasDirectory(projectPath, 'routes') || hasDirectory(projectPath, 'src/routes')) {
130
+ signals.push('routes directory detected');
131
+ if (confidence !== 'high')
132
+ confidence = 'low';
133
+ }
134
+ if (signals.length === 0)
135
+ return null;
136
+ return {
137
+ framework: 'express',
138
+ confidence,
139
+ signals,
140
+ recommendedScans: ['secrets', 'vuln', 'ship', 'compliance'],
141
+ scanDescription: 'API-focused scanning: secrets detection, dependency vulnerabilities, ship readiness, and compliance checks for logging/rate limits',
142
+ };
143
+ }
144
+ function detectNestJS(projectPath, pkg) {
145
+ const signals = [];
146
+ let confidence = 'low';
147
+ if (hasDependency(pkg, '@nestjs/core')) {
148
+ signals.push('@nestjs/core dependency found');
149
+ confidence = 'high';
150
+ }
151
+ if (hasDependency(pkg, '@nestjs/common')) {
152
+ signals.push('@nestjs/common dependency found');
153
+ if (confidence !== 'high')
154
+ confidence = 'medium';
155
+ }
156
+ if (hasFile(projectPath, 'nest-cli.json')) {
157
+ signals.push('nest-cli.json configuration found');
158
+ confidence = 'high';
159
+ }
160
+ if (hasFilePattern(projectPath, 'src', /\.module\.ts$/)) {
161
+ signals.push('NestJS module files detected');
162
+ if (confidence !== 'high')
163
+ confidence = 'medium';
164
+ }
165
+ if (signals.length === 0)
166
+ return null;
167
+ return {
168
+ framework: 'nestjs',
169
+ confidence,
170
+ signals,
171
+ recommendedScans: ['secrets', 'vuln', 'ship', 'compliance'],
172
+ scanDescription: 'Enterprise API scanning: secrets detection, dependency vulnerabilities, ship readiness, and compliance checks for decorators/guards',
173
+ };
174
+ }
175
+ function detectFastify(projectPath, pkg) {
176
+ const signals = [];
177
+ let confidence = 'low';
178
+ if (hasDependency(pkg, 'fastify')) {
179
+ signals.push('fastify dependency found in package.json');
180
+ confidence = 'high';
181
+ }
182
+ if (hasDependency(pkg, '@fastify/autoload') || hasDependency(pkg, 'fastify-plugin')) {
183
+ signals.push('Fastify ecosystem packages detected');
184
+ if (confidence !== 'high')
185
+ confidence = 'medium';
186
+ }
187
+ if (signals.length === 0)
188
+ return null;
189
+ return {
190
+ framework: 'fastify',
191
+ confidence,
192
+ signals,
193
+ recommendedScans: ['secrets', 'vuln', 'ship', 'compliance'],
194
+ scanDescription: 'High-performance API scanning: secrets detection, dependency vulnerabilities, ship readiness, and compliance checks',
195
+ };
196
+ }
197
+ function detectRemix(projectPath, pkg) {
198
+ const signals = [];
199
+ let confidence = 'low';
200
+ if (hasDependency(pkg, '@remix-run/node') || hasDependency(pkg, '@remix-run/react')) {
201
+ signals.push('@remix-run packages found in package.json');
202
+ confidence = 'high';
203
+ }
204
+ if (hasFile(projectPath, 'remix.config.js', 'remix.config.ts')) {
205
+ signals.push('remix.config.* file found');
206
+ confidence = 'high';
207
+ }
208
+ if (hasDirectory(projectPath, 'app/routes')) {
209
+ signals.push('Remix app/routes directory structure detected');
210
+ if (confidence !== 'high')
211
+ confidence = 'medium';
212
+ }
213
+ if (signals.length === 0)
214
+ return null;
215
+ return {
216
+ framework: 'remix',
217
+ confidence,
218
+ signals,
219
+ recommendedScans: ['secrets', 'vuln', 'ship', 'reality'],
220
+ scanDescription: 'Full-stack scanning: secrets detection, dependency vulnerabilities, ship readiness, and reality mode for form/loader flows',
221
+ };
222
+ }
223
+ function detectViteReact(projectPath, pkg) {
224
+ const signals = [];
225
+ let confidence = 'low';
226
+ const hasVite = hasDependency(pkg, 'vite');
227
+ const hasReact = hasDependency(pkg, 'react') || hasDependency(pkg, 'react-dom');
228
+ if (hasVite && hasReact) {
229
+ signals.push('vite + react dependencies found');
230
+ confidence = 'high';
231
+ }
232
+ if (hasFile(projectPath, 'vite.config.ts', 'vite.config.js', 'vite.config.mjs')) {
233
+ signals.push('vite.config.* file found');
234
+ if (hasReact) {
235
+ confidence = 'high';
236
+ }
237
+ else if (confidence !== 'high') {
238
+ confidence = 'medium';
239
+ }
240
+ }
241
+ if (hasDependency(pkg, '@vitejs/plugin-react') || hasDependency(pkg, '@vitejs/plugin-react-swc')) {
242
+ signals.push('Vite React plugin detected');
243
+ confidence = 'high';
244
+ }
245
+ if (signals.length === 0)
246
+ return null;
247
+ return {
248
+ framework: 'vite-react',
249
+ confidence,
250
+ signals,
251
+ recommendedScans: ['secrets', 'vuln', 'ship'],
252
+ scanDescription: 'Frontend scanning: secrets detection in client code, dependency vulnerabilities, and ship readiness checks',
253
+ };
254
+ }
255
+ function detectFramework(projectPath) {
256
+ const pkg = loadPackageJson(projectPath);
257
+ const detectors = [
258
+ detectNextJS,
259
+ detectNestJS,
260
+ detectRemix,
261
+ detectFastify,
262
+ detectExpress,
263
+ detectViteReact,
264
+ ];
265
+ let bestMatch = null;
266
+ const confidenceOrder = { high: 3, medium: 2, low: 1 };
267
+ for (const detector of detectors) {
268
+ const result = detector(projectPath, pkg);
269
+ if (result) {
270
+ if (!bestMatch || confidenceOrder[result.confidence] > confidenceOrder[bestMatch.confidence]) {
271
+ bestMatch = result;
272
+ }
273
+ if (result.confidence === 'high') {
274
+ break;
275
+ }
276
+ }
277
+ }
278
+ if (bestMatch) {
279
+ return bestMatch;
280
+ }
281
+ return {
282
+ framework: 'unknown',
283
+ confidence: 'low',
284
+ signals: ['No specific framework detected'],
285
+ recommendedScans: ['secrets', 'vuln'],
286
+ scanDescription: 'Basic scanning: secrets detection and dependency vulnerability checks',
287
+ };
288
+ }
289
+ function formatFrameworkName(framework) {
290
+ const names = {
291
+ nextjs: 'Next.js',
292
+ express: 'Express.js',
293
+ nestjs: 'NestJS',
294
+ fastify: 'Fastify',
295
+ remix: 'Remix',
296
+ 'vite-react': 'Vite + React',
297
+ unknown: 'Unknown',
298
+ };
299
+ return names[framework];
300
+ }
301
+ //# sourceMappingURL=detect-framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-framework.js","sourceRoot":"","sources":["../../src/init/detect-framework.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Git Hooks Installer
3
+ * Installs and configures husky or lefthook for pre-commit/pre-push hooks
4
+ */
5
+ import type { GuardrailConfig } from './templates';
6
+ export type HookRunner = 'husky' | 'lefthook';
7
+ export interface HooksInstallerOptions {
8
+ projectPath: string;
9
+ config: GuardrailConfig;
10
+ runner?: HookRunner;
11
+ preCommit?: boolean;
12
+ prePush?: boolean;
13
+ }
14
+ export interface HooksInstallerResult {
15
+ success: boolean;
16
+ runner: HookRunner;
17
+ installedHooks: string[];
18
+ error?: string;
19
+ }
20
+ export declare function installHooks(options: HooksInstallerOptions): HooksInstallerResult;
21
+ export declare function getRecommendedRunner(projectPath: string): HookRunner;
22
+ //# sourceMappingURL=hooks-installer.d.ts.map