guardrail-cli 2.4.13 → 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 (244) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +548 -521
  3. package/dist/commands/autopilot-decision.d.ts +24 -0
  4. package/dist/commands/autopilot-decision.d.ts.map +1 -0
  5. package/dist/commands/autopilot-decision.js +304 -0
  6. package/dist/commands/autopilot-decision.js.map +1 -0
  7. package/dist/commands/autopilot.d.ts +33 -0
  8. package/dist/commands/autopilot.d.ts.map +1 -0
  9. package/dist/commands/autopilot.js +1539 -0
  10. package/dist/commands/autopilot.js.map +1 -0
  11. package/dist/commands/baseline.d.ts.map +1 -1
  12. package/dist/commands/baseline.js.map +1 -1
  13. package/dist/commands/cache.d.ts.map +1 -1
  14. package/dist/commands/cache.js +3 -1
  15. package/dist/commands/cache.js.map +1 -1
  16. package/dist/commands/context.d.ts +8 -0
  17. package/dist/commands/context.d.ts.map +1 -0
  18. package/dist/commands/context.js +340 -0
  19. package/dist/commands/context.js.map +1 -0
  20. package/dist/commands/debug.d.ts +78 -0
  21. package/dist/commands/debug.d.ts.map +1 -0
  22. package/dist/commands/debug.js +381 -0
  23. package/dist/commands/debug.js.map +1 -0
  24. package/dist/commands/evidence.d.ts.map +1 -1
  25. package/dist/commands/evidence.js +23 -7
  26. package/dist/commands/evidence.js.map +1 -1
  27. package/dist/commands/index.d.ts +5 -0
  28. package/dist/commands/index.d.ts.map +1 -1
  29. package/dist/commands/index.js +16 -1
  30. package/dist/commands/index.js.map +1 -1
  31. package/dist/commands/preview.d.ts +54 -0
  32. package/dist/commands/preview.d.ts.map +1 -0
  33. package/dist/commands/preview.js +352 -0
  34. package/dist/commands/preview.js.map +1 -0
  35. package/dist/commands/quality/check.d.ts +31 -0
  36. package/dist/commands/quality/check.d.ts.map +1 -0
  37. package/dist/commands/quality/check.js +242 -0
  38. package/dist/commands/quality/check.js.map +1 -0
  39. package/dist/commands/quality/index.d.ts +8 -0
  40. package/dist/commands/quality/index.d.ts.map +1 -0
  41. package/dist/commands/quality/index.js +14 -0
  42. package/dist/commands/quality/index.js.map +1 -0
  43. package/dist/commands/quality/setup-quality.d.ts +23 -0
  44. package/dist/commands/quality/setup-quality.d.ts.map +1 -0
  45. package/dist/commands/quality/setup-quality.js +452 -0
  46. package/dist/commands/quality/setup-quality.js.map +1 -0
  47. package/dist/commands/quality/tidy.d.ts +41 -0
  48. package/dist/commands/quality/tidy.d.ts.map +1 -0
  49. package/dist/commands/quality/tidy.js +466 -0
  50. package/dist/commands/quality/tidy.js.map +1 -0
  51. package/dist/commands/quality/utils.d.ts +73 -0
  52. package/dist/commands/quality/utils.d.ts.map +1 -0
  53. package/dist/commands/quality/utils.js +158 -0
  54. package/dist/commands/quality/utils.js.map +1 -0
  55. package/dist/commands/scan-secrets.d.ts.map +1 -1
  56. package/dist/commands/scan-secrets.js +35 -18
  57. package/dist/commands/scan-secrets.js.map +1 -1
  58. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +1 -0
  59. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -1
  60. package/dist/commands/scan-vulnerabilities-enhanced.js +40 -14
  61. package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -1
  62. package/dist/commands/scan-vulnerabilities-osv.d.ts +1 -1
  63. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -1
  64. package/dist/commands/scan-vulnerabilities-osv.js +76 -45
  65. package/dist/commands/scan-vulnerabilities-osv.js.map +1 -1
  66. package/dist/commands/scan-vulnerabilities.d.ts.map +1 -1
  67. package/dist/commands/scan-vulnerabilities.js +82 -21
  68. package/dist/commands/scan-vulnerabilities.js.map +1 -1
  69. package/dist/commands/secrets-allowlist.d.ts.map +1 -1
  70. package/dist/commands/secrets-allowlist.js +12 -11
  71. package/dist/commands/secrets-allowlist.js.map +1 -1
  72. package/dist/fix/analytics.d.ts +121 -0
  73. package/dist/fix/analytics.d.ts.map +1 -0
  74. package/dist/fix/analytics.js +289 -0
  75. package/dist/fix/analytics.js.map +1 -0
  76. package/dist/fix/applicator.d.ts +21 -2
  77. package/dist/fix/applicator.d.ts.map +1 -1
  78. package/dist/fix/applicator.js +109 -6
  79. package/dist/fix/applicator.js.map +1 -1
  80. package/dist/fix/audit.d.ts +61 -0
  81. package/dist/fix/audit.d.ts.map +1 -0
  82. package/dist/fix/audit.js +149 -0
  83. package/dist/fix/audit.js.map +1 -0
  84. package/dist/fix/backup.d.ts +12 -2
  85. package/dist/fix/backup.d.ts.map +1 -1
  86. package/dist/fix/backup.js +53 -4
  87. package/dist/fix/backup.js.map +1 -1
  88. package/dist/fix/config.d.ts +78 -0
  89. package/dist/fix/config.d.ts.map +1 -0
  90. package/dist/fix/config.js +200 -0
  91. package/dist/fix/config.js.map +1 -0
  92. package/dist/fix/engine.d.ts.map +1 -1
  93. package/dist/fix/engine.js +5 -5
  94. package/dist/fix/engine.js.map +1 -1
  95. package/dist/fix/impact.d.ts +74 -0
  96. package/dist/fix/impact.d.ts.map +1 -0
  97. package/dist/fix/impact.js +281 -0
  98. package/dist/fix/impact.js.map +1 -0
  99. package/dist/fix/index.d.ts +3 -0
  100. package/dist/fix/index.d.ts.map +1 -1
  101. package/dist/fix/index.js +7 -1
  102. package/dist/fix/index.js.map +1 -1
  103. package/dist/fix/interactive.d.ts.map +1 -1
  104. package/dist/fix/interactive.js +9 -4
  105. package/dist/fix/interactive.js.map +1 -1
  106. package/dist/fix/learning.d.ts +109 -0
  107. package/dist/fix/learning.d.ts.map +1 -0
  108. package/dist/fix/learning.js +296 -0
  109. package/dist/fix/learning.js.map +1 -0
  110. package/dist/fix/metrics.d.ts +106 -0
  111. package/dist/fix/metrics.d.ts.map +1 -0
  112. package/dist/fix/metrics.js +138 -0
  113. package/dist/fix/metrics.js.map +1 -0
  114. package/dist/fix/parallel.d.ts +69 -0
  115. package/dist/fix/parallel.d.ts.map +1 -0
  116. package/dist/fix/parallel.js +203 -0
  117. package/dist/fix/parallel.js.map +1 -0
  118. package/dist/fix/report.d.ts +40 -0
  119. package/dist/fix/report.d.ts.map +1 -0
  120. package/dist/fix/report.js +212 -0
  121. package/dist/fix/report.js.map +1 -0
  122. package/dist/fix/strategy.d.ts +53 -0
  123. package/dist/fix/strategy.d.ts.map +1 -0
  124. package/dist/fix/strategy.js +143 -0
  125. package/dist/fix/strategy.js.map +1 -0
  126. package/dist/fix/templates.d.ts +58 -0
  127. package/dist/fix/templates.d.ts.map +1 -0
  128. package/dist/fix/templates.js +259 -0
  129. package/dist/fix/templates.js.map +1 -0
  130. package/dist/fix/testing.d.ts +68 -0
  131. package/dist/fix/testing.d.ts.map +1 -0
  132. package/dist/fix/testing.js +245 -0
  133. package/dist/fix/testing.js.map +1 -0
  134. package/dist/fix/validation.d.ts +71 -0
  135. package/dist/fix/validation.d.ts.map +1 -0
  136. package/dist/fix/validation.js +267 -0
  137. package/dist/fix/validation.js.map +1 -0
  138. package/dist/fix/visualization.d.ts +73 -0
  139. package/dist/fix/visualization.d.ts.map +1 -0
  140. package/dist/fix/visualization.js +243 -0
  141. package/dist/fix/visualization.js.map +1 -0
  142. package/dist/formatters/sarif-enhanced.d.ts.map +1 -1
  143. package/dist/formatters/sarif-enhanced.js +15 -7
  144. package/dist/formatters/sarif-enhanced.js.map +1 -1
  145. package/dist/formatters/sarif-v2.d.ts.map +1 -1
  146. package/dist/formatters/sarif-v2.js +82 -46
  147. package/dist/formatters/sarif-v2.js.map +1 -1
  148. package/dist/formatters/sarif.d.ts.map +1 -1
  149. package/dist/formatters/sarif.js +49 -22
  150. package/dist/formatters/sarif.js.map +1 -1
  151. package/dist/index.js +2544 -410
  152. package/dist/index.js.map +1 -1
  153. package/dist/init/ci-generator.d.ts.map +1 -1
  154. package/dist/init/ci-generator.js +186 -180
  155. package/dist/init/ci-generator.js.map +1 -1
  156. package/dist/init/detect-framework.d.ts.map +1 -1
  157. package/dist/init/detect-framework.js +19 -9
  158. package/dist/init/detect-framework.js.map +1 -1
  159. package/dist/init/hooks-installer.d.ts.map +1 -1
  160. package/dist/init/hooks-installer.js +74 -65
  161. package/dist/init/hooks-installer.js.map +1 -1
  162. package/dist/init/index.d.ts +3 -3
  163. package/dist/init/index.d.ts.map +1 -1
  164. package/dist/init/index.js.map +1 -1
  165. package/dist/init/templates.d.ts +10 -10
  166. package/dist/init/templates.d.ts.map +1 -1
  167. package/dist/init/templates.js +9 -4
  168. package/dist/init/templates.js.map +1 -1
  169. package/dist/reality/reality-runner.d.ts.map +1 -1
  170. package/dist/reality/reality-runner.js +23 -7
  171. package/dist/reality/reality-runner.js.map +1 -1
  172. package/dist/runtime/auth-utils.d.ts.map +1 -1
  173. package/dist/runtime/auth-utils.js.map +1 -1
  174. package/dist/runtime/cli-errors.d.ts +38 -0
  175. package/dist/runtime/cli-errors.d.ts.map +1 -0
  176. package/dist/runtime/cli-errors.js +354 -0
  177. package/dist/runtime/cli-errors.js.map +1 -0
  178. package/dist/runtime/client.d.ts.map +1 -1
  179. package/dist/runtime/client.js +27 -10
  180. package/dist/runtime/client.js.map +1 -1
  181. package/dist/runtime/creds.d.ts +5 -0
  182. package/dist/runtime/creds.d.ts.map +1 -1
  183. package/dist/runtime/creds.js +6 -1
  184. package/dist/runtime/creds.js.map +1 -1
  185. package/dist/runtime/exit-codes.d.ts +32 -4
  186. package/dist/runtime/exit-codes.d.ts.map +1 -1
  187. package/dist/runtime/exit-codes.js +42 -14
  188. package/dist/runtime/exit-codes.js.map +1 -1
  189. package/dist/runtime/owner-mode.d.ts +48 -0
  190. package/dist/runtime/owner-mode.d.ts.map +1 -0
  191. package/dist/runtime/owner-mode.js +284 -0
  192. package/dist/runtime/owner-mode.js.map +1 -0
  193. package/dist/runtime/semver.d.ts.map +1 -1
  194. package/dist/runtime/semver.js +5 -2
  195. package/dist/runtime/semver.js.map +1 -1
  196. package/dist/scanner/baseline.d.ts.map +1 -1
  197. package/dist/scanner/baseline.js +3 -3
  198. package/dist/scanner/baseline.js.map +1 -1
  199. package/dist/scanner/incremental.d.ts.map +1 -1
  200. package/dist/scanner/incremental.js +3 -3
  201. package/dist/scanner/incremental.js.map +1 -1
  202. package/dist/scanner/index.d.ts +8 -0
  203. package/dist/scanner/index.d.ts.map +1 -0
  204. package/dist/scanner/index.js +15 -0
  205. package/dist/scanner/index.js.map +1 -0
  206. package/dist/scanner/parallel.d.ts.map +1 -1
  207. package/dist/scanner/parallel.js +29 -8
  208. package/dist/scanner/parallel.js.map +1 -1
  209. package/dist/scanner/placeholder-detector.d.ts +56 -0
  210. package/dist/scanner/placeholder-detector.d.ts.map +1 -0
  211. package/dist/scanner/placeholder-detector.js +220 -0
  212. package/dist/scanner/placeholder-detector.js.map +1 -0
  213. package/dist/scanner/route-detector.d.ts +100 -0
  214. package/dist/scanner/route-detector.d.ts.map +1 -0
  215. package/dist/scanner/route-detector.js +455 -0
  216. package/dist/scanner/route-detector.js.map +1 -0
  217. package/dist/scanner/scoring.d.ts +67 -0
  218. package/dist/scanner/scoring.d.ts.map +1 -0
  219. package/dist/scanner/scoring.js +284 -0
  220. package/dist/scanner/scoring.js.map +1 -0
  221. package/dist/ship-baseline.d.ts +56 -0
  222. package/dist/ship-baseline.d.ts.map +1 -0
  223. package/dist/ship-baseline.js +194 -0
  224. package/dist/ship-baseline.js.map +1 -0
  225. package/dist/ship-config.d.ts +91 -0
  226. package/dist/ship-config.d.ts.map +1 -0
  227. package/dist/ship-config.js +133 -0
  228. package/dist/ship-config.js.map +1 -0
  229. package/dist/ship-data-loader.d.ts +70 -0
  230. package/dist/ship-data-loader.d.ts.map +1 -0
  231. package/dist/ship-data-loader.js +301 -0
  232. package/dist/ship-data-loader.js.map +1 -0
  233. package/dist/ui/frame.d.ts.map +1 -1
  234. package/dist/ui/frame.js +3 -1
  235. package/dist/ui/frame.js.map +1 -1
  236. package/dist/utils/ai-helpers.d.ts +72 -0
  237. package/dist/utils/ai-helpers.d.ts.map +1 -0
  238. package/dist/utils/ai-helpers.js +339 -0
  239. package/dist/utils/ai-helpers.js.map +1 -0
  240. package/dist/utils/validation.d.ts +34 -0
  241. package/dist/utils/validation.d.ts.map +1 -0
  242. package/dist/utils/validation.js +160 -0
  243. package/dist/utils/validation.js.map +1 -0
  244. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../src/scanner/parallel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAe,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAuB,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAC3D,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,iBAAiB,CAA4D;IAErF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI5E,OAAO,CAAC,cAAc;IAOhB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA0C5E,iBAAiB;YAkBjB,yBAAyB;YAgBzB,oBAAoB;CAoBnC"}
1
+ {"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../src/scanner/parallel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAe,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAEL,cAAc,EACf,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAC3D,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,iBAAiB,CACb;IAEZ,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI5E,OAAO,CAAC,cAAc;IAYhB,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC;YA0ChB,iBAAiB;YA0BjB,yBAAyB;YAgCzB,oBAAoB;CAsDnC"}
@@ -28,19 +28,19 @@ class ParallelScanner {
28
28
  };
29
29
  // Secrets scan
30
30
  if (options.type === 'all' || options.type === 'secrets') {
31
- tasks.push(this.runSecretsScanner(projectPath, options).then(res => {
31
+ tasks.push(this.runSecretsScanner(projectPath, options).then((res) => {
32
32
  result.secrets = res;
33
33
  }));
34
34
  }
35
35
  // Vulnerabilities scan
36
36
  if (options.type === 'all' || options.type === 'vulnerabilities') {
37
- tasks.push(this.runVulnerabilitiesScanner(projectPath, options).then(res => {
37
+ tasks.push(this.runVulnerabilitiesScanner(projectPath, options).then((res) => {
38
38
  result.vulnerabilities = res;
39
39
  }));
40
40
  }
41
41
  // Compliance scan (if selected)
42
42
  if (options.type === 'compliance') {
43
- tasks.push(this.runComplianceScanner(projectPath, options).then(res => {
43
+ tasks.push(this.runComplianceScanner(projectPath, options).then((res) => {
44
44
  result.compliance = res;
45
45
  }));
46
46
  }
@@ -54,7 +54,7 @@ class ParallelScanner {
54
54
  this.updateProgress('secrets', 'scan', 'Scanning files for secrets...');
55
55
  const result = await (0, scan_secrets_1.scanSecrets)(projectPath, {
56
56
  path: projectPath,
57
- format: options.format,
57
+ format: options.format === 'markdown' ? 'table' : options.format,
58
58
  output: options.output,
59
59
  excludeTests: options.excludeTests || false,
60
60
  minConfidence: options.minConfidence,
@@ -73,7 +73,10 @@ class ParallelScanner {
73
73
  failOnCritical: options.failOnCritical,
74
74
  failOnHigh: options.failOnHigh,
75
75
  });
76
- const total = result.summary.critical + result.summary.high + result.summary.medium + result.summary.low;
76
+ const total = result.summary.critical +
77
+ result.summary.high +
78
+ result.summary.medium +
79
+ result.summary.low;
77
80
  this.updateProgress('vulnerabilities', 'complete', `Found ${total} vulnerabilities`, true);
78
81
  return result;
79
82
  }
@@ -86,9 +89,27 @@ class ParallelScanner {
86
89
  framework: options.complianceFramework || 'SOC2',
87
90
  overallScore: 78,
88
91
  categories: [
89
- { name: 'Access Control', score: 85, status: 'pass', checks: 12, passed: 10 },
90
- { name: 'Data Encryption', score: 92, status: 'pass', checks: 8, passed: 7 },
91
- { name: 'Audit Logging', score: 65, status: 'warning', checks: 10, passed: 6 },
92
+ {
93
+ name: 'Access Control',
94
+ score: 85,
95
+ status: 'pass',
96
+ checks: 12,
97
+ passed: 10,
98
+ },
99
+ {
100
+ name: 'Data Encryption',
101
+ score: 92,
102
+ status: 'pass',
103
+ checks: 8,
104
+ passed: 7,
105
+ },
106
+ {
107
+ name: 'Audit Logging',
108
+ score: 65,
109
+ status: 'warning',
110
+ checks: 10,
111
+ passed: 6,
112
+ },
92
113
  ],
93
114
  };
94
115
  this.updateProgress('compliance', 'complete', `Score: ${result.overallScore}%`, true);
@@ -1 +1 @@
1
- {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../src/scanner/parallel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../src/scanner/parallel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Placeholder Detector with Rule-Tiered Approach
3
+ *
4
+ * Implements sophisticated placeholder detection with multiple confidence levels:
5
+ * - Ignore list (safe): HTML placeholder attributes by default
6
+ * - High-confidence: UI text nodes, mock responses
7
+ * - Medium-confidence: "placeholder" in variable names or comments
8
+ */
9
+ export interface PlaceholderFinding {
10
+ type: 'ui_text' | 'html_attribute' | 'mock_response' | 'comment' | 'variable';
11
+ file: string;
12
+ line: number;
13
+ column?: number;
14
+ match: string;
15
+ confidence: 'high' | 'medium' | 'low';
16
+ snippet?: string;
17
+ }
18
+ export interface PlaceholderDetectorConfig {
19
+ /** Count HTML placeholder attributes (default: false) */
20
+ countInputPlaceholders?: boolean;
21
+ /** Ignore patterns (regex) */
22
+ ignorePatterns?: RegExp[];
23
+ }
24
+ export declare class PlaceholderDetector {
25
+ private config;
26
+ constructor(config?: PlaceholderDetectorConfig);
27
+ /**
28
+ * Detect placeholders in source code
29
+ */
30
+ detectPlaceholders(filePath: string, content: string): Promise<PlaceholderFinding[]>;
31
+ /**
32
+ * High-confidence placeholders: UI text nodes and mock responses
33
+ */
34
+ private detectHighConfidence;
35
+ /**
36
+ * Medium-confidence placeholders: comments and variable names
37
+ */
38
+ private detectMediumConfidence;
39
+ /**
40
+ * Detect HTML placeholder attributes
41
+ */
42
+ private detectHtmlPlaceholderAttributes;
43
+ /**
44
+ * Check if line is an HTML placeholder attribute
45
+ */
46
+ private isHtmlPlaceholderAttribute;
47
+ /**
48
+ * Find all matches in a string with their indices
49
+ */
50
+ private findAllMatches;
51
+ /**
52
+ * Count placeholders by type
53
+ */
54
+ static countByType(findings: PlaceholderFinding[]): Record<string, number>;
55
+ }
56
+ //# sourceMappingURL=placeholder-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-detector.d.ts","sourceRoot":"","sources":["../../src/scanner/placeholder-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,GAAG,gBAAgB,GAAG,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAsC;gBAExC,MAAM,GAAE,yBAA8B;IAOlD;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAsDhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6D5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuD9B;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAiCvC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAIlC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,MAAM,CAAC,WAAW,CAChB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAgB1B"}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ /**
3
+ * Placeholder Detector with Rule-Tiered Approach
4
+ *
5
+ * Implements sophisticated placeholder detection with multiple confidence levels:
6
+ * - Ignore list (safe): HTML placeholder attributes by default
7
+ * - High-confidence: UI text nodes, mock responses
8
+ * - Medium-confidence: "placeholder" in variable names or comments
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.PlaceholderDetector = void 0;
12
+ class PlaceholderDetector {
13
+ constructor(config = {}) {
14
+ this.config = {
15
+ countInputPlaceholders: config.countInputPlaceholders ?? false,
16
+ ignorePatterns: config.ignorePatterns ?? [],
17
+ };
18
+ }
19
+ /**
20
+ * Detect placeholders in source code
21
+ */
22
+ async detectPlaceholders(filePath, content) {
23
+ const findings = [];
24
+ const lines = content.split('\n');
25
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
26
+ const line = lines[lineNum];
27
+ const lineContent = line.trim();
28
+ // Skip empty lines
29
+ if (!lineContent)
30
+ continue;
31
+ // High-confidence patterns: UI text nodes and mock responses
32
+ const highConfidenceFindings = this.detectHighConfidence(filePath, lineNum + 1, lineContent, line);
33
+ findings.push(...highConfidenceFindings);
34
+ // Medium-confidence patterns: comments and variable names
35
+ if (!this.config.countInputPlaceholders) {
36
+ // Skip HTML placeholder attributes unless explicitly enabled
37
+ if (this.isHtmlPlaceholderAttribute(lineContent)) {
38
+ continue;
39
+ }
40
+ }
41
+ else {
42
+ // Count HTML placeholder attributes if enabled
43
+ const htmlFindings = this.detectHtmlPlaceholderAttributes(filePath, lineNum + 1, lineContent, line);
44
+ findings.push(...htmlFindings);
45
+ }
46
+ const mediumConfidenceFindings = this.detectMediumConfidence(filePath, lineNum + 1, lineContent, line);
47
+ findings.push(...mediumConfidenceFindings);
48
+ }
49
+ // Filter out ignored patterns
50
+ return findings.filter((finding) => {
51
+ return !this.config.ignorePatterns.some((pattern) => pattern.test(finding.match));
52
+ });
53
+ }
54
+ /**
55
+ * High-confidence placeholders: UI text nodes and mock responses
56
+ */
57
+ detectHighConfidence(filePath, lineNum, lineContent, originalLine) {
58
+ const findings = [];
59
+ // UI text patterns
60
+ const uiTextPatterns = [
61
+ /["'`]Coming\s+soon["'`]/i,
62
+ /["'`]Todo\s+App["'`]/i,
63
+ /["'`]Chart\s+Placeholder/i,
64
+ /["'`]Placeholder\.\.\.["'`]/i,
65
+ /["'`]TODO:.*["'`]/i,
66
+ /["'`]FIXME:.*["'`]/i,
67
+ ];
68
+ for (const pattern of uiTextPatterns) {
69
+ const matches = this.findAllMatches(lineContent, pattern);
70
+ for (const match of matches) {
71
+ findings.push({
72
+ type: 'ui_text',
73
+ file: filePath,
74
+ line: lineNum,
75
+ column: match.index,
76
+ match: match.text,
77
+ confidence: 'high',
78
+ snippet: originalLine.trim(),
79
+ });
80
+ }
81
+ }
82
+ // Mock response patterns
83
+ const mockResponsePatterns = [
84
+ /"success":\s*true.*"TODO"/i,
85
+ /"success":\s*true.*"FIXME"/i,
86
+ /"mock":\s*true/i,
87
+ /"isMock":\s*true/i,
88
+ /mockData\s*[:=]/i,
89
+ /lorem\s+ipsum/i,
90
+ ];
91
+ for (const pattern of mockResponsePatterns) {
92
+ const matches = this.findAllMatches(lineContent, pattern);
93
+ for (const match of matches) {
94
+ findings.push({
95
+ type: 'mock_response',
96
+ file: filePath,
97
+ line: lineNum,
98
+ column: match.index,
99
+ match: match.text,
100
+ confidence: 'high',
101
+ snippet: originalLine.trim(),
102
+ });
103
+ }
104
+ }
105
+ return findings;
106
+ }
107
+ /**
108
+ * Medium-confidence placeholders: comments and variable names
109
+ */
110
+ detectMediumConfidence(filePath, lineNum, lineContent, originalLine) {
111
+ const findings = [];
112
+ // Comment patterns (medium confidence)
113
+ const commentPatterns = [
114
+ /\/\/.*\bplaceholder\b/i,
115
+ /\/\*.*\bplaceholder\b.*\*\//i,
116
+ /\/\/.*TODO:/i,
117
+ /\/\/.*FIXME:/i,
118
+ ];
119
+ for (const pattern of commentPatterns) {
120
+ const matches = this.findAllMatches(lineContent, pattern);
121
+ for (const match of matches) {
122
+ findings.push({
123
+ type: 'comment',
124
+ file: filePath,
125
+ line: lineNum,
126
+ column: match.index,
127
+ match: match.text,
128
+ confidence: 'medium',
129
+ snippet: originalLine.trim(),
130
+ });
131
+ }
132
+ }
133
+ // Variable name patterns (medium confidence)
134
+ const variablePatterns = [
135
+ /\bplaceholder[A-Z]\w*/i,
136
+ /\bplaceholder\w*[:=]/i,
137
+ ];
138
+ for (const pattern of variablePatterns) {
139
+ const matches = this.findAllMatches(lineContent, pattern);
140
+ for (const match of matches) {
141
+ findings.push({
142
+ type: 'variable',
143
+ file: filePath,
144
+ line: lineNum,
145
+ column: match.index,
146
+ match: match.text,
147
+ confidence: 'medium',
148
+ snippet: originalLine.trim(),
149
+ });
150
+ }
151
+ }
152
+ return findings;
153
+ }
154
+ /**
155
+ * Detect HTML placeholder attributes
156
+ */
157
+ detectHtmlPlaceholderAttributes(filePath, lineNum, lineContent, originalLine) {
158
+ const findings = [];
159
+ // HTML placeholder attribute pattern
160
+ const htmlPlaceholderPattern = /placeholder\s*=\s*["']([^"']+)["']/gi;
161
+ let match;
162
+ while ((match = htmlPlaceholderPattern.exec(lineContent)) !== null) {
163
+ const placeholderValue = match[1];
164
+ // Only flag if the placeholder value looks like actual placeholder text
165
+ // (not user-facing labels like "Enter your email")
166
+ if (/placeholder|coming soon|todo|fixme|mock|lorem/i.test(placeholderValue)) {
167
+ findings.push({
168
+ type: 'html_attribute',
169
+ file: filePath,
170
+ line: lineNum,
171
+ column: match.index,
172
+ match: match[0],
173
+ confidence: 'high',
174
+ snippet: originalLine.trim(),
175
+ });
176
+ }
177
+ }
178
+ return findings;
179
+ }
180
+ /**
181
+ * Check if line is an HTML placeholder attribute
182
+ */
183
+ isHtmlPlaceholderAttribute(lineContent) {
184
+ return /<input[^>]*placeholder\s*=/i.test(lineContent);
185
+ }
186
+ /**
187
+ * Find all matches in a string with their indices
188
+ */
189
+ findAllMatches(text, pattern) {
190
+ const matches = [];
191
+ let match;
192
+ const globalPattern = new RegExp(pattern.source, pattern.flags + 'g');
193
+ while ((match = globalPattern.exec(text)) !== null) {
194
+ matches.push({
195
+ text: match[0],
196
+ index: match.index,
197
+ });
198
+ }
199
+ return matches;
200
+ }
201
+ /**
202
+ * Count placeholders by type
203
+ */
204
+ static countByType(findings) {
205
+ const counts = {
206
+ ui_text: 0,
207
+ html_attribute: 0,
208
+ mock_response: 0,
209
+ comment: 0,
210
+ variable: 0,
211
+ total: findings.length,
212
+ };
213
+ for (const finding of findings) {
214
+ counts[finding.type] = (counts[finding.type] || 0) + 1;
215
+ }
216
+ return counts;
217
+ }
218
+ }
219
+ exports.PlaceholderDetector = PlaceholderDetector;
220
+ //# sourceMappingURL=placeholder-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-detector.js","sourceRoot":"","sources":["../../src/scanner/placeholder-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Route Detector for Client-Side Routers
3
+ *
4
+ * Detects routes in various routing frameworks:
5
+ * - Next.js/Remix (file-based routing)
6
+ * - React Router (component-based)
7
+ * - Wouter (lightweight router)
8
+ * - Generic route inference mode
9
+ */
10
+ export interface RouteInfo {
11
+ path: string;
12
+ file?: string;
13
+ line?: number;
14
+ method?: string;
15
+ dynamic?: boolean;
16
+ params?: string[];
17
+ source: 'file_based' | 'component' | 'config' | 'inferred';
18
+ }
19
+ export interface RouteDetectionResult {
20
+ routes: RouteInfo[];
21
+ framework: string;
22
+ confidence: 'high' | 'medium' | 'low';
23
+ message?: string;
24
+ hints?: string[];
25
+ }
26
+ export interface RouteDetectorConfig {
27
+ projectPath: string;
28
+ framework?: string;
29
+ /** Custom route hints from config */
30
+ routeHints?: Array<{
31
+ path: string;
32
+ file?: string;
33
+ description?: string;
34
+ }>;
35
+ }
36
+ export declare class RouteDetector {
37
+ private config;
38
+ constructor(config: RouteDetectorConfig);
39
+ /**
40
+ * Detect routes in the project
41
+ */
42
+ detectRoutes(): Promise<RouteDetectionResult>;
43
+ /**
44
+ * Detect routes based on detected framework
45
+ */
46
+ private detectFrameworkRoutes;
47
+ /**
48
+ * Detect Next.js file-based routes
49
+ */
50
+ private detectNextJSRoutes;
51
+ /**
52
+ * Detect Remix routes
53
+ */
54
+ private detectRemixRoutes;
55
+ /**
56
+ * Detect component-based routes (React Router, Wouter)
57
+ */
58
+ private detectComponentRoutes;
59
+ /**
60
+ * Generic route inference mode
61
+ */
62
+ private detectGenericRoutes;
63
+ /**
64
+ * Detect router framework from dependencies
65
+ */
66
+ private detectRouterFramework;
67
+ /**
68
+ * Check if a string looks like a route path
69
+ */
70
+ private looksLikeRoute;
71
+ /**
72
+ * Extract route parameters from path
73
+ */
74
+ private extractRouteParams;
75
+ /**
76
+ * Parse route array from config
77
+ */
78
+ private parseRouteArray;
79
+ /**
80
+ * Find route files in directory (for file-based routing)
81
+ */
82
+ private findRouteFiles;
83
+ /**
84
+ * Convert file path to route path
85
+ */
86
+ private filePathToRoute;
87
+ /**
88
+ * Find all source files in project
89
+ */
90
+ private findSourceFiles;
91
+ /**
92
+ * Get all files recursively
93
+ */
94
+ private getAllFiles;
95
+ /**
96
+ * Deduplicate routes
97
+ */
98
+ private deduplicateRoutes;
99
+ }
100
+ //# sourceMappingURL=route-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-detector.d.ts","sourceRoot":"","sources":["../../src/scanner/route-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC;IA0CnD;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;YACW,iBAAiB;IAgB/B;;OAEG;YACW,qBAAqB;IAyEnC;;OAEG;YACW,mBAAmB;IAgDjC;;OAEG;YACW,qBAAqB;IA6BnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;YACW,cAAc;IAoB5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;YACW,eAAe;IAoC7B;;OAEG;YACW,WAAW;IAmBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAc1B"}