@kevinrabun/judges 2.3.0 → 3.0.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 (321) hide show
  1. package/README.md +177 -12
  2. package/dist/api.d.ts +40 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +56 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/ast/cross-file-taint.d.ts +43 -0
  7. package/dist/ast/cross-file-taint.d.ts.map +1 -0
  8. package/dist/ast/cross-file-taint.js +713 -0
  9. package/dist/ast/cross-file-taint.js.map +1 -0
  10. package/dist/ast/index.d.ts +4 -0
  11. package/dist/ast/index.d.ts.map +1 -1
  12. package/dist/ast/index.js +5 -0
  13. package/dist/ast/index.js.map +1 -1
  14. package/dist/ast/structural-parser.d.ts.map +1 -1
  15. package/dist/ast/structural-parser.js +66 -11
  16. package/dist/ast/structural-parser.js.map +1 -1
  17. package/dist/ast/taint-tracker.d.ts +35 -0
  18. package/dist/ast/taint-tracker.d.ts.map +1 -0
  19. package/dist/ast/taint-tracker.js +518 -0
  20. package/dist/ast/taint-tracker.js.map +1 -0
  21. package/dist/ast/types.d.ts +2 -0
  22. package/dist/ast/types.d.ts.map +1 -1
  23. package/dist/ast/typescript-ast.d.ts.map +1 -1
  24. package/dist/ast/typescript-ast.js +25 -5
  25. package/dist/ast/typescript-ast.js.map +1 -1
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +10 -9
  28. package/dist/config.js.map +1 -1
  29. package/dist/dedup.d.ts +19 -0
  30. package/dist/dedup.d.ts.map +1 -0
  31. package/dist/dedup.js +222 -0
  32. package/dist/dedup.js.map +1 -0
  33. package/dist/errors.d.ts +37 -0
  34. package/dist/errors.d.ts.map +1 -0
  35. package/dist/errors.js +57 -0
  36. package/dist/errors.js.map +1 -0
  37. package/dist/evaluators/accessibility.d.ts +1 -1
  38. package/dist/evaluators/accessibility.d.ts.map +1 -1
  39. package/dist/evaluators/accessibility.js +22 -16
  40. package/dist/evaluators/accessibility.js.map +1 -1
  41. package/dist/evaluators/agent-instructions.d.ts +1 -1
  42. package/dist/evaluators/agent-instructions.d.ts.map +1 -1
  43. package/dist/evaluators/agent-instructions.js +1 -2
  44. package/dist/evaluators/agent-instructions.js.map +1 -1
  45. package/dist/evaluators/ai-code-safety.d.ts +1 -1
  46. package/dist/evaluators/ai-code-safety.d.ts.map +1 -1
  47. package/dist/evaluators/ai-code-safety.js +2 -6
  48. package/dist/evaluators/ai-code-safety.js.map +1 -1
  49. package/dist/evaluators/api-design.d.ts +1 -1
  50. package/dist/evaluators/api-design.d.ts.map +1 -1
  51. package/dist/evaluators/api-design.js +2 -1
  52. package/dist/evaluators/api-design.js.map +1 -1
  53. package/dist/evaluators/app-builder.d.ts +34 -0
  54. package/dist/evaluators/app-builder.d.ts.map +1 -0
  55. package/dist/evaluators/app-builder.js +156 -0
  56. package/dist/evaluators/app-builder.js.map +1 -0
  57. package/dist/evaluators/authentication.d.ts +1 -1
  58. package/dist/evaluators/authentication.d.ts.map +1 -1
  59. package/dist/evaluators/authentication.js +2 -66
  60. package/dist/evaluators/authentication.js.map +1 -1
  61. package/dist/evaluators/backwards-compatibility.d.ts +1 -1
  62. package/dist/evaluators/backwards-compatibility.d.ts.map +1 -1
  63. package/dist/evaluators/backwards-compatibility.js.map +1 -1
  64. package/dist/evaluators/caching.d.ts +1 -1
  65. package/dist/evaluators/caching.d.ts.map +1 -1
  66. package/dist/evaluators/caching.js.map +1 -1
  67. package/dist/evaluators/ci-cd.d.ts +1 -1
  68. package/dist/evaluators/ci-cd.d.ts.map +1 -1
  69. package/dist/evaluators/ci-cd.js +4 -4
  70. package/dist/evaluators/ci-cd.js.map +1 -1
  71. package/dist/evaluators/cloud-readiness.d.ts +1 -1
  72. package/dist/evaluators/cloud-readiness.d.ts.map +1 -1
  73. package/dist/evaluators/cloud-readiness.js.map +1 -1
  74. package/dist/evaluators/code-structure.d.ts +1 -1
  75. package/dist/evaluators/code-structure.d.ts.map +1 -1
  76. package/dist/evaluators/code-structure.js +2 -6
  77. package/dist/evaluators/code-structure.js.map +1 -1
  78. package/dist/evaluators/compliance.d.ts +1 -1
  79. package/dist/evaluators/compliance.d.ts.map +1 -1
  80. package/dist/evaluators/compliance.js +15 -6
  81. package/dist/evaluators/compliance.js.map +1 -1
  82. package/dist/evaluators/concurrency.d.ts +1 -1
  83. package/dist/evaluators/concurrency.d.ts.map +1 -1
  84. package/dist/evaluators/concurrency.js +9 -4
  85. package/dist/evaluators/concurrency.js.map +1 -1
  86. package/dist/evaluators/configuration-management.d.ts +1 -1
  87. package/dist/evaluators/configuration-management.d.ts.map +1 -1
  88. package/dist/evaluators/configuration-management.js +7 -2
  89. package/dist/evaluators/configuration-management.js.map +1 -1
  90. package/dist/evaluators/cost-effectiveness.d.ts +1 -1
  91. package/dist/evaluators/cost-effectiveness.d.ts.map +1 -1
  92. package/dist/evaluators/cost-effectiveness.js +1 -3
  93. package/dist/evaluators/cost-effectiveness.js.map +1 -1
  94. package/dist/evaluators/cybersecurity.d.ts +1 -1
  95. package/dist/evaluators/cybersecurity.d.ts.map +1 -1
  96. package/dist/evaluators/cybersecurity.js +50 -1
  97. package/dist/evaluators/cybersecurity.js.map +1 -1
  98. package/dist/evaluators/data-security.d.ts +1 -1
  99. package/dist/evaluators/data-security.d.ts.map +1 -1
  100. package/dist/evaluators/data-security.js +9 -66
  101. package/dist/evaluators/data-security.js.map +1 -1
  102. package/dist/evaluators/data-sovereignty.d.ts +1 -1
  103. package/dist/evaluators/data-sovereignty.d.ts.map +1 -1
  104. package/dist/evaluators/data-sovereignty.js +4 -2
  105. package/dist/evaluators/data-sovereignty.js.map +1 -1
  106. package/dist/evaluators/database.d.ts +1 -1
  107. package/dist/evaluators/database.d.ts.map +1 -1
  108. package/dist/evaluators/database.js +3 -1
  109. package/dist/evaluators/database.js.map +1 -1
  110. package/dist/evaluators/dependencies.d.ts +6 -0
  111. package/dist/evaluators/dependencies.d.ts.map +1 -0
  112. package/dist/evaluators/dependencies.js +204 -0
  113. package/dist/evaluators/dependencies.js.map +1 -0
  114. package/dist/evaluators/dependency-health.d.ts +1 -1
  115. package/dist/evaluators/dependency-health.d.ts.map +1 -1
  116. package/dist/evaluators/dependency-health.js +198 -6
  117. package/dist/evaluators/dependency-health.js.map +1 -1
  118. package/dist/evaluators/documentation.d.ts +1 -1
  119. package/dist/evaluators/documentation.d.ts.map +1 -1
  120. package/dist/evaluators/documentation.js +5 -2
  121. package/dist/evaluators/documentation.js.map +1 -1
  122. package/dist/evaluators/error-handling.d.ts +1 -1
  123. package/dist/evaluators/error-handling.d.ts.map +1 -1
  124. package/dist/evaluators/error-handling.js.map +1 -1
  125. package/dist/evaluators/ethics-bias.d.ts +1 -1
  126. package/dist/evaluators/ethics-bias.d.ts.map +1 -1
  127. package/dist/evaluators/ethics-bias.js +10 -5
  128. package/dist/evaluators/ethics-bias.js.map +1 -1
  129. package/dist/evaluators/framework-safety.d.ts +13 -0
  130. package/dist/evaluators/framework-safety.d.ts.map +1 -0
  131. package/dist/evaluators/framework-safety.js +424 -0
  132. package/dist/evaluators/framework-safety.js.map +1 -0
  133. package/dist/evaluators/index.d.ts +20 -24
  134. package/dist/evaluators/index.d.ts.map +1 -1
  135. package/dist/evaluators/index.js +294 -728
  136. package/dist/evaluators/index.js.map +1 -1
  137. package/dist/evaluators/internationalization.d.ts +1 -1
  138. package/dist/evaluators/internationalization.d.ts.map +1 -1
  139. package/dist/evaluators/internationalization.js +14 -6
  140. package/dist/evaluators/internationalization.js.map +1 -1
  141. package/dist/evaluators/logging-privacy.d.ts +1 -1
  142. package/dist/evaluators/logging-privacy.d.ts.map +1 -1
  143. package/dist/evaluators/logging-privacy.js +3 -1
  144. package/dist/evaluators/logging-privacy.js.map +1 -1
  145. package/dist/evaluators/maintainability.d.ts +1 -1
  146. package/dist/evaluators/maintainability.d.ts.map +1 -1
  147. package/dist/evaluators/maintainability.js +15 -9
  148. package/dist/evaluators/maintainability.js.map +1 -1
  149. package/dist/evaluators/observability.d.ts +1 -1
  150. package/dist/evaluators/observability.d.ts.map +1 -1
  151. package/dist/evaluators/observability.js +2 -1
  152. package/dist/evaluators/observability.js.map +1 -1
  153. package/dist/evaluators/performance.d.ts +1 -1
  154. package/dist/evaluators/performance.d.ts.map +1 -1
  155. package/dist/evaluators/performance.js +181 -4
  156. package/dist/evaluators/performance.js.map +1 -1
  157. package/dist/evaluators/portability.d.ts +1 -1
  158. package/dist/evaluators/portability.d.ts.map +1 -1
  159. package/dist/evaluators/portability.js +2 -1
  160. package/dist/evaluators/portability.js.map +1 -1
  161. package/dist/evaluators/project.d.ts +16 -0
  162. package/dist/evaluators/project.d.ts.map +1 -0
  163. package/dist/evaluators/project.js +353 -0
  164. package/dist/evaluators/project.js.map +1 -0
  165. package/dist/evaluators/rate-limiting.d.ts +1 -1
  166. package/dist/evaluators/rate-limiting.d.ts.map +1 -1
  167. package/dist/evaluators/rate-limiting.js.map +1 -1
  168. package/dist/evaluators/reliability.d.ts +1 -1
  169. package/dist/evaluators/reliability.d.ts.map +1 -1
  170. package/dist/evaluators/reliability.js.map +1 -1
  171. package/dist/evaluators/scalability.d.ts +1 -1
  172. package/dist/evaluators/scalability.d.ts.map +1 -1
  173. package/dist/evaluators/scalability.js +3 -1
  174. package/dist/evaluators/scalability.js.map +1 -1
  175. package/dist/evaluators/shared.d.ts +24 -2
  176. package/dist/evaluators/shared.d.ts.map +1 -1
  177. package/dist/evaluators/shared.js +190 -2
  178. package/dist/evaluators/shared.js.map +1 -1
  179. package/dist/evaluators/software-practices.d.ts +1 -1
  180. package/dist/evaluators/software-practices.d.ts.map +1 -1
  181. package/dist/evaluators/software-practices.js +3 -3
  182. package/dist/evaluators/software-practices.js.map +1 -1
  183. package/dist/evaluators/testing.d.ts +1 -1
  184. package/dist/evaluators/testing.d.ts.map +1 -1
  185. package/dist/evaluators/testing.js +12 -4
  186. package/dist/evaluators/testing.js.map +1 -1
  187. package/dist/evaluators/ux.d.ts +1 -1
  188. package/dist/evaluators/ux.d.ts.map +1 -1
  189. package/dist/evaluators/ux.js.map +1 -1
  190. package/dist/evaluators/v2.d.ts +1 -1
  191. package/dist/evaluators/v2.d.ts.map +1 -1
  192. package/dist/evaluators/v2.js +13 -35
  193. package/dist/evaluators/v2.js.map +1 -1
  194. package/dist/formatters/sarif.d.ts +75 -0
  195. package/dist/formatters/sarif.d.ts.map +1 -0
  196. package/dist/formatters/sarif.js +93 -0
  197. package/dist/formatters/sarif.js.map +1 -0
  198. package/dist/index.d.ts +4 -1
  199. package/dist/index.d.ts.map +1 -1
  200. package/dist/index.js +9 -806
  201. package/dist/index.js.map +1 -1
  202. package/dist/judges/accessibility.d.ts +1 -1
  203. package/dist/judges/accessibility.d.ts.map +1 -1
  204. package/dist/judges/agent-instructions.d.ts +1 -1
  205. package/dist/judges/agent-instructions.d.ts.map +1 -1
  206. package/dist/judges/ai-code-safety.d.ts +1 -1
  207. package/dist/judges/ai-code-safety.d.ts.map +1 -1
  208. package/dist/judges/api-design.d.ts +1 -1
  209. package/dist/judges/api-design.d.ts.map +1 -1
  210. package/dist/judges/authentication.d.ts +1 -1
  211. package/dist/judges/authentication.d.ts.map +1 -1
  212. package/dist/judges/backwards-compatibility.d.ts +1 -1
  213. package/dist/judges/backwards-compatibility.d.ts.map +1 -1
  214. package/dist/judges/caching.d.ts +1 -1
  215. package/dist/judges/caching.d.ts.map +1 -1
  216. package/dist/judges/ci-cd.d.ts +1 -1
  217. package/dist/judges/ci-cd.d.ts.map +1 -1
  218. package/dist/judges/cloud-readiness.d.ts +1 -1
  219. package/dist/judges/cloud-readiness.d.ts.map +1 -1
  220. package/dist/judges/code-structure.d.ts +1 -1
  221. package/dist/judges/code-structure.d.ts.map +1 -1
  222. package/dist/judges/code-structure.js +7 -1
  223. package/dist/judges/code-structure.js.map +1 -1
  224. package/dist/judges/compliance.d.ts +1 -1
  225. package/dist/judges/compliance.d.ts.map +1 -1
  226. package/dist/judges/concurrency.d.ts +1 -1
  227. package/dist/judges/concurrency.d.ts.map +1 -1
  228. package/dist/judges/configuration-management.d.ts +1 -1
  229. package/dist/judges/configuration-management.d.ts.map +1 -1
  230. package/dist/judges/cost-effectiveness.d.ts +1 -1
  231. package/dist/judges/cost-effectiveness.d.ts.map +1 -1
  232. package/dist/judges/cybersecurity.d.ts +1 -1
  233. package/dist/judges/cybersecurity.d.ts.map +1 -1
  234. package/dist/judges/data-security.d.ts +1 -1
  235. package/dist/judges/data-security.d.ts.map +1 -1
  236. package/dist/judges/data-sovereignty.d.ts +1 -1
  237. package/dist/judges/data-sovereignty.d.ts.map +1 -1
  238. package/dist/judges/database.d.ts +1 -1
  239. package/dist/judges/database.d.ts.map +1 -1
  240. package/dist/judges/dependency-health.d.ts +1 -1
  241. package/dist/judges/dependency-health.d.ts.map +1 -1
  242. package/dist/judges/documentation.d.ts +1 -1
  243. package/dist/judges/documentation.d.ts.map +1 -1
  244. package/dist/judges/error-handling.d.ts +1 -1
  245. package/dist/judges/error-handling.d.ts.map +1 -1
  246. package/dist/judges/ethics-bias.d.ts +1 -1
  247. package/dist/judges/ethics-bias.d.ts.map +1 -1
  248. package/dist/judges/framework-safety.d.ts +3 -0
  249. package/dist/judges/framework-safety.d.ts.map +1 -0
  250. package/dist/judges/framework-safety.js +31 -0
  251. package/dist/judges/framework-safety.js.map +1 -0
  252. package/dist/judges/index.d.ts +1 -1
  253. package/dist/judges/index.d.ts.map +1 -1
  254. package/dist/judges/index.js +74 -0
  255. package/dist/judges/index.js.map +1 -1
  256. package/dist/judges/internationalization.d.ts +1 -1
  257. package/dist/judges/internationalization.d.ts.map +1 -1
  258. package/dist/judges/logging-privacy.d.ts +1 -1
  259. package/dist/judges/logging-privacy.d.ts.map +1 -1
  260. package/dist/judges/maintainability.d.ts +1 -1
  261. package/dist/judges/maintainability.d.ts.map +1 -1
  262. package/dist/judges/observability.d.ts +1 -1
  263. package/dist/judges/observability.d.ts.map +1 -1
  264. package/dist/judges/performance.d.ts +1 -1
  265. package/dist/judges/performance.d.ts.map +1 -1
  266. package/dist/judges/portability.d.ts +1 -1
  267. package/dist/judges/portability.d.ts.map +1 -1
  268. package/dist/judges/rate-limiting.d.ts +1 -1
  269. package/dist/judges/rate-limiting.d.ts.map +1 -1
  270. package/dist/judges/reliability.d.ts +1 -1
  271. package/dist/judges/reliability.d.ts.map +1 -1
  272. package/dist/judges/scalability.d.ts +1 -1
  273. package/dist/judges/scalability.d.ts.map +1 -1
  274. package/dist/judges/software-practices.d.ts +1 -1
  275. package/dist/judges/software-practices.d.ts.map +1 -1
  276. package/dist/judges/testing.d.ts +1 -1
  277. package/dist/judges/testing.d.ts.map +1 -1
  278. package/dist/judges/ux.d.ts +1 -1
  279. package/dist/judges/ux.d.ts.map +1 -1
  280. package/dist/language-patterns.d.ts +37 -0
  281. package/dist/language-patterns.d.ts.map +1 -1
  282. package/dist/language-patterns.js +58 -3
  283. package/dist/language-patterns.js.map +1 -1
  284. package/dist/patches/index.d.ts +10 -0
  285. package/dist/patches/index.d.ts.map +1 -0
  286. package/dist/patches/index.js +533 -0
  287. package/dist/patches/index.js.map +1 -0
  288. package/dist/reports/public-repo-report.d.ts +1 -1
  289. package/dist/reports/public-repo-report.d.ts.map +1 -1
  290. package/dist/scoring.d.ts +18 -0
  291. package/dist/scoring.d.ts.map +1 -0
  292. package/dist/scoring.js +178 -0
  293. package/dist/scoring.js.map +1 -0
  294. package/dist/tools/deep-review.d.ts +4 -0
  295. package/dist/tools/deep-review.d.ts.map +1 -0
  296. package/dist/tools/deep-review.js +56 -0
  297. package/dist/tools/deep-review.js.map +1 -0
  298. package/dist/tools/prompts.d.ts +8 -0
  299. package/dist/tools/prompts.d.ts.map +1 -0
  300. package/dist/tools/prompts.js +66 -0
  301. package/dist/tools/prompts.js.map +1 -0
  302. package/dist/tools/register-evaluation.d.ts +7 -0
  303. package/dist/tools/register-evaluation.d.ts.map +1 -0
  304. package/dist/tools/register-evaluation.js +303 -0
  305. package/dist/tools/register-evaluation.js.map +1 -0
  306. package/dist/tools/register-workflow.d.ts +7 -0
  307. package/dist/tools/register-workflow.d.ts.map +1 -0
  308. package/dist/tools/register-workflow.js +395 -0
  309. package/dist/tools/register-workflow.js.map +1 -0
  310. package/dist/tools/register.d.ts +7 -0
  311. package/dist/tools/register.d.ts.map +1 -0
  312. package/dist/tools/register.js +14 -0
  313. package/dist/tools/register.js.map +1 -0
  314. package/dist/tools/schemas.d.ts +26 -0
  315. package/dist/tools/schemas.d.ts.map +1 -0
  316. package/dist/tools/schemas.js +42 -0
  317. package/dist/tools/schemas.js.map +1 -0
  318. package/dist/types.d.ts +29 -2
  319. package/dist/types.d.ts.map +1 -1
  320. package/package.json +42 -3
  321. package/server.json +51 -3
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Confidence Scoring, Must-Fix Gate & File-Type Gating
3
+ *
4
+ * Extracted from the evaluators monolith for clean separation of concerns.
5
+ * Handles confidence estimation for findings, the must-fix safety gate,
6
+ * and absence-based finding suppression for non-server files.
7
+ */
8
+ // ─── Must-Fix Gate ───────────────────────────────────────────────────────────
9
+ const DEFAULT_MUST_FIX_PREFIXES = [
10
+ "AUTH-",
11
+ "CYBER-",
12
+ "DATA-",
13
+ "ERR-",
14
+ "REL-",
15
+ "RATE-",
16
+ "DB-",
17
+ "COMP-",
18
+ "LOGPRIV-",
19
+ "AICS-",
20
+ ];
21
+ export function evaluateMustFixGate(findings, options) {
22
+ if (!options?.enabled) {
23
+ return undefined;
24
+ }
25
+ const minConfidence = clampConfidence(options.minConfidence ?? 0.85);
26
+ const prefixes = options.dangerousRulePrefixes?.length ? options.dangerousRulePrefixes : DEFAULT_MUST_FIX_PREFIXES;
27
+ const dangerSignal = /(injection|command\s*execution|sql|xss|ssrf|deseriali[sz]ation|auth(?:entication|orization)?\s*bypass|hardcoded\s+(?:secret|credential|password|token)|unsafe\s+eval|\beval\(|\bexec\()/i;
28
+ const matched = findings.filter((finding) => {
29
+ const severityMatch = finding.severity === "critical" || finding.severity === "high";
30
+ if (!severityMatch)
31
+ return false;
32
+ const confidence = finding.confidence ?? 0;
33
+ if (confidence < minConfidence)
34
+ return false;
35
+ const prefixMatch = prefixes.some((prefix) => finding.ruleId.startsWith(prefix));
36
+ const contentMatch = dangerSignal.test(`${finding.title} ${finding.description} ${finding.recommendation}`);
37
+ return prefixMatch || contentMatch;
38
+ });
39
+ const matchedRuleIds = [...new Set(matched.map((finding) => finding.ruleId))];
40
+ const triggered = matched.length > 0;
41
+ return {
42
+ enabled: true,
43
+ triggered,
44
+ minConfidence,
45
+ matchedCount: matched.length,
46
+ matchedRuleIds,
47
+ summary: triggered
48
+ ? `Must-fix gate triggered by ${matched.length} high-confidence dangerous finding(s).`
49
+ : "Must-fix gate passed with no high-confidence dangerous findings.",
50
+ };
51
+ }
52
+ // ─── Confidence Estimation ───────────────────────────────────────────────────
53
+ export function clampConfidence(value) {
54
+ if (!Number.isFinite(value))
55
+ return 0;
56
+ return Math.max(0, Math.min(1, value));
57
+ }
58
+ export function estimateFindingConfidence(finding) {
59
+ const existing = typeof finding.confidence === "number" ? finding.confidence : undefined;
60
+ if (typeof existing === "number" && Number.isFinite(existing)) {
61
+ return clampConfidence(existing);
62
+ }
63
+ let score = 0.4;
64
+ // ── Evidence tier 1: Line-level precision ──────────────────────────────
65
+ const lineCount = finding.lineNumbers?.length ?? 0;
66
+ if (lineCount === 0) {
67
+ score -= 0.15;
68
+ }
69
+ else if (lineCount <= 3) {
70
+ score += 0.22;
71
+ }
72
+ else if (lineCount <= 8) {
73
+ score += 0.14;
74
+ }
75
+ else {
76
+ score += 0.06;
77
+ }
78
+ // ── Evidence tier 2: Pattern-match specificity ─────────────────────────
79
+ const descLower = finding.description.toLowerCase();
80
+ const hasExactApiMatch = /\b(?:eval|exec|innerHTML|dangerouslySetInnerHTML|createConnection|query)\b/i.test(finding.description) ||
81
+ /\b(?:document\.write|child_process|\.exec\(|\.execSync)\b/i.test(finding.description);
82
+ const hasCveReference = /CVE-\d{4}-\d+/i.test(finding.description + (finding.reference ?? ""));
83
+ const hasCweReference = /CWE-\d+/i.test(finding.description + (finding.reference ?? ""));
84
+ if (hasExactApiMatch)
85
+ score += 0.12;
86
+ if (hasCveReference)
87
+ score += 0.08;
88
+ if (hasCweReference)
89
+ score += 0.05;
90
+ // ── Evidence tier 3: Structured evidence ───────────────────────────────
91
+ const hasReference = Boolean(finding.reference);
92
+ const hasSuggestedFix = Boolean(finding.suggestedFix);
93
+ const hasRichDescription = finding.description.length >= 120;
94
+ const hasRichRecommendation = finding.recommendation.length >= 90;
95
+ if (hasReference)
96
+ score += 0.06;
97
+ if (hasSuggestedFix)
98
+ score += 0.08;
99
+ if (hasRichDescription)
100
+ score += 0.03;
101
+ if (hasRichRecommendation)
102
+ score += 0.03;
103
+ // ── Evidence tier 4: Absence-based findings are inherently lower confidence
104
+ const absenceKeywords = [
105
+ "no .* found",
106
+ "missing",
107
+ "absent",
108
+ "not detected",
109
+ "should (?:have|include|implement)",
110
+ "consider (?:adding|implementing)",
111
+ ];
112
+ const isAbsenceLike = absenceKeywords.some((kw) => new RegExp(kw, "i").test(descLower));
113
+ if (isAbsenceLike && lineCount === 0) {
114
+ score -= 0.1;
115
+ }
116
+ // ── Noisy evaluator cap: prevent low-evidence findings from inflating ──
117
+ const richEvidenceCount = [
118
+ hasReference,
119
+ hasSuggestedFix,
120
+ hasRichDescription,
121
+ hasRichRecommendation,
122
+ hasExactApiMatch,
123
+ lineCount > 0,
124
+ ].filter(Boolean).length;
125
+ const noisyPrefixes = ["API-", "COMP-", "CONC-", "CYBER-", "DB-", "DEPS-", "ETHICS-", "LOGPRIV-", "OBS-", "PERF-"];
126
+ if (noisyPrefixes.some((prefix) => finding.ruleId.startsWith(prefix)) && richEvidenceCount < 4) {
127
+ score = Math.min(score, 0.89);
128
+ }
129
+ return Number(clampConfidence(score).toFixed(2));
130
+ }
131
+ export function applyConfidenceThreshold(findings, options) {
132
+ const minConfidence = clampConfidence(options?.minConfidence ?? 0);
133
+ const normalized = findings.map((finding) => ({
134
+ ...finding,
135
+ confidence: estimateFindingConfidence(finding),
136
+ }));
137
+ if (minConfidence <= 0) {
138
+ return normalized;
139
+ }
140
+ return normalized.filter((finding) => (finding.confidence ?? 0) >= minConfidence);
141
+ }
142
+ // ─── Absence-Based Finding Gating ────────────────────────────────────────────
143
+ /**
144
+ * Rule ID prefixes whose absence-based findings should be suppressed on
145
+ * non-server files. These are evaluators that primarily check for missing
146
+ * infrastructure (rate limiting, health checks, auth middleware, etc.)
147
+ * which would be meaningless on utility/type/test files.
148
+ */
149
+ const ABSENCE_GATED_PREFIXES = [
150
+ "RATE-",
151
+ "AUTH-",
152
+ "OBS-",
153
+ "CLOUD-",
154
+ "CICD-",
155
+ "CACHE-",
156
+ "COMPAT-",
157
+ "API-",
158
+ "CFG-",
159
+ "SCALE-",
160
+ "REL-",
161
+ ];
162
+ export function isAbsenceBasedFinding(finding) {
163
+ if (finding.lineNumbers && finding.lineNumbers.length > 0) {
164
+ return false;
165
+ }
166
+ if (!ABSENCE_GATED_PREFIXES.some((p) => finding.ruleId.startsWith(p))) {
167
+ return false;
168
+ }
169
+ const hasAbsenceTitle = /^No\s|(?:not|without|missing|no)\s.*(?:detected|configured|set|defined|endpoint|middleware|protection|handler|strategy|limiting)|(?:without|lacks?|missing)\s/i.test(finding.title);
170
+ if (!hasAbsenceTitle)
171
+ return false;
172
+ const projectLevelKeywords = /\b(?:ci[\s/]cd|pipeline|deployment|infrastructure|monitoring|alerting|backup)\b/i;
173
+ if (projectLevelKeywords.test(finding.title)) {
174
+ return false;
175
+ }
176
+ return true;
177
+ }
178
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { JudgeDefinition } from "../types.js";
2
+ export declare function buildSingleJudgeDeepReviewSection(judge: JudgeDefinition, language: string, context?: string): string;
3
+ export declare function buildTribunalDeepReviewSection(judges: JudgeDefinition[], language: string, context?: string): string;
4
+ //# sourceMappingURL=deep-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-review.d.ts","sourceRoot":"","sources":["../../src/tools/deep-review.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBpH;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CA8BpH"}
@@ -0,0 +1,56 @@
1
+ // ─── Deep Review Section Builders ────────────────────────────────────────────
2
+ // These functions append each judge's expert criteria to tool output,
3
+ // turning pattern-only results into hybrid evaluations. The calling LLM
4
+ // uses these criteria to perform deep contextual analysis beyond static
5
+ // pattern matching.
6
+ // ──────────────────────────────────────────────────────────────────────────────
7
+ export function buildSingleJudgeDeepReviewSection(judge, language, context) {
8
+ let md = `\n\n---\n\n`;
9
+ md += `## 🔍 Deep Contextual Review Required\n\n`;
10
+ md += `> **The pattern-based findings above are a starting point only.** `;
11
+ md += `Static pattern matching cannot evaluate semantic correctness, architectural coherence, `;
12
+ md += `business logic validity, cross-module data flow, or context-dependent implications.\n>\n`;
13
+ md += `> **You MUST now perform a thorough contextual review** of the ${language} code using the expert criteria below. `;
14
+ md += `Identify issues that pattern matching cannot catch. Incorporate both the pattern findings above AND your own deep analysis into a final, unified evaluation.\n\n`;
15
+ if (context) {
16
+ md += `**Context provided:** ${context}\n\n`;
17
+ }
18
+ md += `### ${judge.name} — ${judge.domain}\n\n`;
19
+ md += `${judge.systemPrompt}\n\n`;
20
+ md += `### Response Format\n\n`;
21
+ md += `Provide your deep review as additional findings using the same format:\n`;
22
+ md += `- Rule ID prefix: \`${judge.rulePrefix}-\`\n`;
23
+ md += `- Severity levels: critical / high / medium / low / info\n`;
24
+ md += `- Include: title, description, affected lines, recommendation, and reference\n`;
25
+ md += `- After all findings, provide an updated score (0-100) and final verdict (PASS/WARNING/FAIL)\n`;
26
+ md += `- The final verdict must account for BOTH the pattern findings AND your contextual findings\n`;
27
+ return md;
28
+ }
29
+ export function buildTribunalDeepReviewSection(judges, language, context) {
30
+ let md = `\n\n---\n\n`;
31
+ md += `## 🔍 Deep Contextual Review Required\n\n`;
32
+ md += `> **The pattern-based tribunal findings above are a starting point only.** `;
33
+ md += `Static pattern matching cannot evaluate semantic correctness, architectural coherence, `;
34
+ md += `business logic validity, cross-module data flow, or context-dependent implications.\n>\n`;
35
+ md += `> **You MUST now perform a thorough contextual review** of the ${language} code from the perspective of ALL ${judges.length} judges below. `;
36
+ md += `Identify issues that pattern matching cannot catch. Incorporate both the pattern findings above AND your own deep analysis into a final, unified tribunal verdict.\n\n`;
37
+ if (context) {
38
+ md += `**Context provided:** ${context}\n\n`;
39
+ }
40
+ for (const judge of judges) {
41
+ md += `### ${judge.name} — ${judge.domain}\n\n`;
42
+ md += `${judge.systemPrompt}\n\n`;
43
+ md += `---\n\n`;
44
+ }
45
+ md += `### Response Format\n\n`;
46
+ md += `For each judge, provide any additional findings your contextual analysis uncovers using:\n`;
47
+ md += `- The judge's rule ID prefix\n`;
48
+ md += `- Severity levels: critical / high / medium / low / info\n`;
49
+ md += `- Include: title, description, affected lines, recommendation, and reference\n\n`;
50
+ md += `Then provide an **OVERALL UPDATED TRIBUNAL VERDICT** that accounts for BOTH the pattern findings AND your contextual findings:\n`;
51
+ md += `- Per-judge scores (0-100) and verdicts\n`;
52
+ md += `- Overall score and verdict (PASS/WARNING/FAIL)\n`;
53
+ md += `- Executive summary of the most critical issues\n`;
54
+ return md;
55
+ }
56
+ //# sourceMappingURL=deep-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-review.js","sourceRoot":"","sources":["../../src/tools/deep-review.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sEAAsE;AACtE,wEAAwE;AACxE,wEAAwE;AACxE,oBAAoB;AACpB,iFAAiF;AAIjF,MAAM,UAAU,iCAAiC,CAAC,KAAsB,EAAE,QAAgB,EAAE,OAAgB;IAC1G,IAAI,EAAE,GAAG,aAAa,CAAC;IACvB,EAAE,IAAI,2CAA2C,CAAC;IAClD,EAAE,IAAI,oEAAoE,CAAC;IAC3E,EAAE,IAAI,yFAAyF,CAAC;IAChG,EAAE,IAAI,0FAA0F,CAAC;IACjG,EAAE,IAAI,kEAAkE,QAAQ,yCAAyC,CAAC;IAC1H,EAAE,IAAI,kKAAkK,CAAC;IAEzK,IAAI,OAAO,EAAE,CAAC;QACZ,EAAE,IAAI,yBAAyB,OAAO,MAAM,CAAC;IAC/C,CAAC;IAED,EAAE,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,MAAM,MAAM,CAAC;IAChD,EAAE,IAAI,GAAG,KAAK,CAAC,YAAY,MAAM,CAAC;IAElC,EAAE,IAAI,yBAAyB,CAAC;IAChC,EAAE,IAAI,0EAA0E,CAAC;IACjF,EAAE,IAAI,uBAAuB,KAAK,CAAC,UAAU,OAAO,CAAC;IACrD,EAAE,IAAI,4DAA4D,CAAC;IACnE,EAAE,IAAI,gFAAgF,CAAC;IACvF,EAAE,IAAI,gGAAgG,CAAC;IACvG,EAAE,IAAI,+FAA+F,CAAC;IAEtG,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAyB,EAAE,QAAgB,EAAE,OAAgB;IAC1G,IAAI,EAAE,GAAG,aAAa,CAAC;IACvB,EAAE,IAAI,2CAA2C,CAAC;IAClD,EAAE,IAAI,6EAA6E,CAAC;IACpF,EAAE,IAAI,yFAAyF,CAAC;IAChG,EAAE,IAAI,0FAA0F,CAAC;IACjG,EAAE,IAAI,kEAAkE,QAAQ,qCAAqC,MAAM,CAAC,MAAM,iBAAiB,CAAC;IACpJ,EAAE,IAAI,wKAAwK,CAAC;IAE/K,IAAI,OAAO,EAAE,CAAC;QACZ,EAAE,IAAI,yBAAyB,OAAO,MAAM,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,EAAE,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,MAAM,MAAM,CAAC;QAChD,EAAE,IAAI,GAAG,KAAK,CAAC,YAAY,MAAM,CAAC;QAClC,EAAE,IAAI,SAAS,CAAC;IAClB,CAAC;IAED,EAAE,IAAI,yBAAyB,CAAC;IAChC,EAAE,IAAI,4FAA4F,CAAC;IACnG,EAAE,IAAI,gCAAgC,CAAC;IACvC,EAAE,IAAI,4DAA4D,CAAC;IACnE,EAAE,IAAI,kFAAkF,CAAC;IACzF,EAAE,IAAI,kIAAkI,CAAC;IACzI,EAAE,IAAI,2CAA2C,CAAC;IAClD,EAAE,IAAI,mDAAmD,CAAC;IAC1D,EAAE,IAAI,mDAAmD,CAAC;IAE1D,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Register all MCP prompts on the given server:
4
+ * - One per-judge prompt (`judge-{id}`) for single-persona deep reviews
5
+ * - A `full-tribunal` prompt that convenes all judges at once
6
+ */
7
+ export declare function registerPrompts(server: McpServer): void;
8
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqEvD"}
@@ -0,0 +1,66 @@
1
+ // ─── MCP Prompt Registrations ────────────────────────────────────────────────
2
+ // Expose judge system prompts as MCP prompts so LLM-based clients can use
3
+ // them for deeper, AI-powered analysis beyond pattern matching.
4
+ // ──────────────────────────────────────────────────────────────────────────────
5
+ import { z } from "zod";
6
+ import { JUDGES } from "../judges/index.js";
7
+ /**
8
+ * Register all MCP prompts on the given server:
9
+ * - One per-judge prompt (`judge-{id}`) for single-persona deep reviews
10
+ * - A `full-tribunal` prompt that convenes all judges at once
11
+ */
12
+ export function registerPrompts(server) {
13
+ // Per-judge prompts
14
+ for (const judge of JUDGES) {
15
+ server.prompt(`judge-${judge.id}`, `Use the ${judge.name} persona to perform a deep ${judge.domain} review of code. This prompt provides the judge's expert criteria for LLM-powered analysis that goes beyond pattern matching.`, {
16
+ code: z.string().describe("The source code to evaluate"),
17
+ language: z.string().describe("The programming language"),
18
+ context: z.string().optional().describe("Additional context about the code"),
19
+ }, async ({ code, language, context }) => {
20
+ const userMessage = `Please evaluate the following ${language} code:\n\n\`\`\`${language}\n${code}\n\`\`\`` +
21
+ (context ? `\n\nAdditional context: ${context}` : "") +
22
+ `\n\nProvide your evaluation as structured findings with rule IDs (prefix: ${judge.rulePrefix}-), severity levels (critical/high/medium/low/info), descriptions, and actionable recommendations. End with an overall score (0-100) and verdict (pass/warning/fail).`;
23
+ return {
24
+ messages: [
25
+ {
26
+ role: "user",
27
+ content: {
28
+ type: "text",
29
+ text: userMessage,
30
+ },
31
+ },
32
+ ],
33
+ };
34
+ });
35
+ }
36
+ // Full tribunal prompt
37
+ server.prompt("full-tribunal", `Convene the full Judges Panel — all ${JUDGES.length} judges evaluate the code in their respective domains and produce a combined verdict.`, {
38
+ code: z.string().describe("The source code to evaluate"),
39
+ language: z.string().describe("The programming language"),
40
+ context: z.string().optional().describe("Additional context about the code"),
41
+ }, async ({ code, language, context }) => {
42
+ const judgeInstructions = JUDGES.map((j) => `### ${j.name} — ${j.domain}\n${j.systemPrompt}`).join("\n\n---\n\n");
43
+ const userMessage = `You are the Judges Panel — a panel of ${JUDGES.length} expert judges who independently evaluate code for quality, security, and operational readiness.\n\n` +
44
+ `Evaluate the following ${language} code from the perspective of ALL ${JUDGES.length} judges below. For each judge, provide:\n` +
45
+ `1. Judge name and domain\n` +
46
+ `2. Verdict (PASS / WARNING / FAIL)\n` +
47
+ `3. Score (0-100)\n` +
48
+ `4. Specific findings with rule IDs, severity, and recommendations\n\n` +
49
+ `Then provide an OVERALL TRIBUNAL VERDICT that synthesizes all judges' input.\n\n` +
50
+ `## The Judges\n\n${judgeInstructions}\n\n` +
51
+ `## Code to Evaluate\n\n\`\`\`${language}\n${code}\n\`\`\`` +
52
+ (context ? `\n\n## Additional Context\n${context}` : "");
53
+ return {
54
+ messages: [
55
+ {
56
+ role: "user",
57
+ content: {
58
+ type: "text",
59
+ text: userMessage,
60
+ },
61
+ },
62
+ ],
63
+ };
64
+ });
65
+ }
66
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/tools/prompts.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,gEAAgE;AAChE,iFAAiF;AAGjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,oBAAoB;IACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CACX,SAAS,KAAK,CAAC,EAAE,EAAE,EACnB,WAAW,KAAK,CAAC,IAAI,8BAA8B,KAAK,CAAC,MAAM,+HAA+H,EAC9L;YACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACzD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SAC7E,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACpC,MAAM,WAAW,GACf,iCAAiC,QAAQ,mBAAmB,QAAQ,KAAK,IAAI,UAAU;gBACvF,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,6EAA6E,KAAK,CAAC,UAAU,uKAAuK,CAAC;YAEvQ,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAe;wBACrB,OAAO,EAAE;4BACP,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,WAAW;yBAClB;qBACF;iBACF;aACF,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,MAAM,CAAC,MAAM,CACX,eAAe,EACf,uCAAuC,MAAM,CAAC,MAAM,uFAAuF,EAC3I;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACzD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC7E,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAElH,MAAM,WAAW,GACf,yCAAyC,MAAM,CAAC,MAAM,sGAAsG;YAC5J,0BAA0B,QAAQ,qCAAqC,MAAM,CAAC,MAAM,2CAA2C;YAC/H,4BAA4B;YAC5B,sCAAsC;YACtC,oBAAoB;YACpB,uEAAuE;YACvE,kFAAkF;YAClF,oBAAoB,iBAAiB,MAAM;YAC3C,gCAAgC,QAAQ,KAAK,IAAI,UAAU;YAC3D,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE3D,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,WAAW;qBAClB;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Register evaluation-focused tools: get_judges, evaluate_code,
4
+ * evaluate_code_single_judge, and evaluate_v2.
5
+ */
6
+ export declare function registerEvaluationTools(server: McpServer): void;
7
+ //# sourceMappingURL=register-evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-evaluation.d.ts","sourceRoot":"","sources":["../../src/tools/register-evaluation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAK/D"}