@kevinrabun/judges 3.40.0 → 3.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +133 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto-calibrate.d.ts +15 -0
- package/dist/commands/auto-calibrate.d.ts.map +1 -0
- package/dist/commands/auto-calibrate.js +107 -0
- package/dist/commands/auto-calibrate.js.map +1 -0
- package/dist/commands/auto-triage.d.ts +32 -0
- package/dist/commands/auto-triage.d.ts.map +1 -0
- package/dist/commands/auto-triage.js +126 -0
- package/dist/commands/auto-triage.js.map +1 -0
- package/dist/commands/config-migrate.d.ts +44 -0
- package/dist/commands/config-migrate.d.ts.map +1 -0
- package/dist/commands/config-migrate.js +241 -0
- package/dist/commands/config-migrate.js.map +1 -0
- package/dist/commands/coverage-map.d.ts +23 -0
- package/dist/commands/coverage-map.d.ts.map +1 -0
- package/dist/commands/coverage-map.js +223 -0
- package/dist/commands/coverage-map.js.map +1 -0
- package/dist/commands/dedup-report.d.ts +13 -0
- package/dist/commands/dedup-report.d.ts.map +1 -0
- package/dist/commands/dedup-report.js +138 -0
- package/dist/commands/dedup-report.js.map +1 -0
- package/dist/commands/dep-audit.d.ts +53 -0
- package/dist/commands/dep-audit.d.ts.map +1 -0
- package/dist/commands/dep-audit.js +278 -0
- package/dist/commands/dep-audit.js.map +1 -0
- package/dist/commands/deprecated.d.ts +48 -0
- package/dist/commands/deprecated.d.ts.map +1 -0
- package/dist/commands/deprecated.js +202 -0
- package/dist/commands/deprecated.js.map +1 -0
- package/dist/commands/diff-only.d.ts +34 -0
- package/dist/commands/diff-only.d.ts.map +1 -0
- package/dist/commands/diff-only.js +152 -0
- package/dist/commands/diff-only.js.map +1 -0
- package/dist/commands/fix-pr.d.ts +23 -0
- package/dist/commands/fix-pr.d.ts.map +1 -0
- package/dist/commands/fix-pr.js +323 -0
- package/dist/commands/fix-pr.js.map +1 -0
- package/dist/commands/group-findings.d.ts +23 -0
- package/dist/commands/group-findings.d.ts.map +1 -0
- package/dist/commands/group-findings.js +155 -0
- package/dist/commands/group-findings.js.map +1 -0
- package/dist/commands/interactive-fix.d.ts +23 -0
- package/dist/commands/interactive-fix.d.ts.map +1 -0
- package/dist/commands/interactive-fix.js +140 -0
- package/dist/commands/interactive-fix.js.map +1 -0
- package/dist/commands/monorepo.d.ts +38 -0
- package/dist/commands/monorepo.d.ts.map +1 -0
- package/dist/commands/monorepo.js +233 -0
- package/dist/commands/monorepo.js.map +1 -0
- package/dist/commands/notify.d.ts +79 -0
- package/dist/commands/notify.d.ts.map +1 -0
- package/dist/commands/notify.js +325 -0
- package/dist/commands/notify.js.map +1 -0
- package/dist/commands/pr-summary.d.ts +26 -0
- package/dist/commands/pr-summary.d.ts.map +1 -0
- package/dist/commands/pr-summary.js +188 -0
- package/dist/commands/pr-summary.js.map +1 -0
- package/dist/commands/profile.d.ts +38 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +102 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/quality-gate.d.ts +70 -0
- package/dist/commands/quality-gate.d.ts.map +1 -0
- package/dist/commands/quality-gate.js +264 -0
- package/dist/commands/quality-gate.js.map +1 -0
- package/dist/commands/smart-select.d.ts +27 -0
- package/dist/commands/smart-select.d.ts.map +1 -0
- package/dist/commands/smart-select.js +346 -0
- package/dist/commands/smart-select.js.map +1 -0
- package/dist/commands/upload.d.ts +14 -0
- package/dist/commands/upload.d.ts.map +1 -0
- package/dist/commands/upload.js +173 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/commands/validate-config.d.ts +17 -0
- package/dist/commands/validate-config.d.ts.map +1 -0
- package/dist/commands/validate-config.js +268 -0
- package/dist/commands/validate-config.js.map +1 -0
- package/dist/commands/warm-cache.d.ts +31 -0
- package/dist/commands/warm-cache.d.ts.map +1 -0
- package/dist/commands/warm-cache.js +166 -0
- package/dist/commands/warm-cache.js.map +1 -0
- package/dist/evaluators/framework-rules.d.ts +59 -0
- package/dist/evaluators/framework-rules.d.ts.map +1 -0
- package/dist/evaluators/framework-rules.js +292 -0
- package/dist/evaluators/framework-rules.js.map +1 -0
- package/dist/parallel.d.ts +53 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +170 -0
- package/dist/parallel.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-summary.js","sourceRoot":"","sources":["../../src/commands/pr-summary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,+EAA+E;AAE/E,MAAM,cAAc,GAAG,4BAA4B,CAAC;AAEpD,+EAA+E;AAE/E,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IACnC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,GAAG,GAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACvG,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAwB;IACtD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,KAAK,GAAa;QACtB,cAAc;QACd,MAAM,KAAK,yBAAyB,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE;QAC1E,EAAE;QACF,oBAAoB;QACpB,oBAAoB;QACpB,mBAAmB,OAAO,CAAC,cAAc,IAAI;QAC7C,iBAAiB,OAAO,CAAC,YAAY,QAAQ;QAC7C,oBAAoB,OAAO,CAAC,aAAa,IAAI;QAC7C,gBAAgB,OAAO,CAAC,SAAS,IAAI;QACrC,sBAAsB,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI;QACpD,EAAE;KACH,CAAC;IAEF,sBAAsB;IACtB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAErD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CACR,KAAK,UAAU,CAAC,OAAO,MAAM,MAAM,IAAI,UAAU,CAAC,OAAO,MAAM,UAAU,CAAC,KAAK,UAAU,YAAY,IAAI,CAC1G,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,eAAe;IACf,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/G,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAK,EACL,uEAAuE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,CACxG,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,mBAAmB,CAChC,KAAa,EACb,IAAY,EACZ,QAAgB,EAChB,KAAa,EACb,OAAe;IAEf,MAAM,GAAG,GAAG,GAAG,OAAO,UAAU,KAAK,IAAI,IAAI,WAAW,QAAQ,wBAAwB,CAAC;IACzF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE;KACrF,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0D,CAAC;IAC7F,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAyB;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,wBAAwB,CAAC;IAC5D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG;QACd,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;QACxC,MAAM,EAAE,6BAA6B;QACrC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,uCAAuC;IACvC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAElH,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,OAAO,UAAU,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,oBAAoB,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC/F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,OAAO;YACf,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;SAC/B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,UAAU,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,WAAW,OAAO,CAAC,QAAQ,WAAW,CAAC;IACpG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqC,CAAC;IACpE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpE,CAAC;AAED,+EAA+E;AAE/E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAC9D,IAAI,KAAK;gBAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAChH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,eAAe;IACf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAClF,IAAI,OAAwB,CAAC;IAE7B,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,uCAAuC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QAChD,OAAO,GAAG;YACR,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC9F,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,OAAO,EAAE,qBAAqB,QAAQ,CAAC,MAAM,WAAW;YACxD,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,EAAE;YACZ,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,MAAM;YACpF,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM;YAClF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC/E,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,wBAAwB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance profiling — track evaluation time per judge/evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Wraps tribunal evaluation and reports timing data for each judge,
|
|
5
|
+
* helping identify bottlenecks and optimize CI pipeline duration.
|
|
6
|
+
*/
|
|
7
|
+
export interface JudgeTiming {
|
|
8
|
+
judgeId: string;
|
|
9
|
+
durationMs: number;
|
|
10
|
+
findingCount: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ProfilingReport {
|
|
13
|
+
totalMs: number;
|
|
14
|
+
judges: JudgeTiming[];
|
|
15
|
+
slowest: string;
|
|
16
|
+
fastest: string;
|
|
17
|
+
avgMs: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a profiling wrapper around a function.
|
|
21
|
+
*/
|
|
22
|
+
export declare function profileFn<T>(fn: () => T): {
|
|
23
|
+
result: T;
|
|
24
|
+
durationMs: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Create a profiling wrapper around an async function.
|
|
28
|
+
*/
|
|
29
|
+
export declare function profileAsync<T>(fn: () => Promise<T>): Promise<{
|
|
30
|
+
result: T;
|
|
31
|
+
durationMs: number;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Build a profiling report from timing data collected during evaluation.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildProfilingReport(timings: JudgeTiming[]): ProfilingReport;
|
|
37
|
+
export declare function runProfile(argv: string[]): void;
|
|
38
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAI3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAItG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,eAAe,CAe5E;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgD/C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance profiling — track evaluation time per judge/evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Wraps tribunal evaluation and reports timing data for each judge,
|
|
5
|
+
* helping identify bottlenecks and optimize CI pipeline duration.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Profiling ──────────────────────────────────────────────────────────────
|
|
8
|
+
/**
|
|
9
|
+
* Create a profiling wrapper around a function.
|
|
10
|
+
*/
|
|
11
|
+
export function profileFn(fn) {
|
|
12
|
+
const start = performance.now();
|
|
13
|
+
const result = fn();
|
|
14
|
+
return { result, durationMs: Math.round(performance.now() - start) };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a profiling wrapper around an async function.
|
|
18
|
+
*/
|
|
19
|
+
export async function profileAsync(fn) {
|
|
20
|
+
const start = performance.now();
|
|
21
|
+
const result = await fn();
|
|
22
|
+
return { result, durationMs: Math.round(performance.now() - start) };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build a profiling report from timing data collected during evaluation.
|
|
26
|
+
*/
|
|
27
|
+
export function buildProfilingReport(timings) {
|
|
28
|
+
if (timings.length === 0) {
|
|
29
|
+
return { totalMs: 0, judges: [], slowest: "N/A", fastest: "N/A", avgMs: 0 };
|
|
30
|
+
}
|
|
31
|
+
const sorted = [...timings].sort((a, b) => b.durationMs - a.durationMs);
|
|
32
|
+
const totalMs = sorted.reduce((sum, t) => sum + t.durationMs, 0);
|
|
33
|
+
return {
|
|
34
|
+
totalMs,
|
|
35
|
+
judges: sorted,
|
|
36
|
+
slowest: sorted[0].judgeId,
|
|
37
|
+
fastest: sorted[sorted.length - 1].judgeId,
|
|
38
|
+
avgMs: Math.round(totalMs / sorted.length),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// ─── CLI ────────────────────────────────────────────────────────────────────
|
|
42
|
+
export function runProfile(argv) {
|
|
43
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
44
|
+
console.log(`
|
|
45
|
+
judges profile — Performance profiling for judge evaluations
|
|
46
|
+
|
|
47
|
+
Usage:
|
|
48
|
+
judges profile <file> Profile evaluation of a file
|
|
49
|
+
judges profile --report <path> Display a saved profiling report
|
|
50
|
+
|
|
51
|
+
Options:
|
|
52
|
+
--format json JSON output
|
|
53
|
+
--threshold <ms> Highlight judges slower than threshold (default: 500)
|
|
54
|
+
--help, -h Show this help
|
|
55
|
+
|
|
56
|
+
Note: This command wraps the normal evaluation pipeline with timing
|
|
57
|
+
instrumentation. Each judge's execution time is measured individually.
|
|
58
|
+
`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const { readFileSync, existsSync } = require("fs");
|
|
62
|
+
const reportPath = argv.find((_a, i) => argv[i - 1] === "--report");
|
|
63
|
+
const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
|
|
64
|
+
const thresholdStr = argv.find((_a, i) => argv[i - 1] === "--threshold");
|
|
65
|
+
const threshold = thresholdStr ? parseInt(thresholdStr, 10) : 500;
|
|
66
|
+
if (reportPath && existsSync(reportPath)) {
|
|
67
|
+
const report = JSON.parse(readFileSync(reportPath, "utf-8"));
|
|
68
|
+
printReport(report, format, threshold);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Without a saved report, show instructions
|
|
72
|
+
console.log(`
|
|
73
|
+
Profiling requires running an evaluation first.
|
|
74
|
+
|
|
75
|
+
Run with JUDGES_PROFILE=1 to enable profiling during eval:
|
|
76
|
+
|
|
77
|
+
JUDGES_PROFILE=1 judges eval --file src/app.ts --format json > results.json
|
|
78
|
+
|
|
79
|
+
Then view the profiling data:
|
|
80
|
+
|
|
81
|
+
judges profile --report .judges-profile.json
|
|
82
|
+
|
|
83
|
+
The profiling data is saved to .judges-profile.json automatically
|
|
84
|
+
when JUDGES_PROFILE=1 is set.
|
|
85
|
+
`);
|
|
86
|
+
}
|
|
87
|
+
function printReport(report, format, threshold) {
|
|
88
|
+
if (format === "json") {
|
|
89
|
+
console.log(JSON.stringify(report, null, 2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.log(`\n ⏱️ Judges Evaluation Profile\n`);
|
|
93
|
+
console.log(` Total: ${report.totalMs}ms | Avg: ${report.avgMs}ms | Judges: ${report.judges.length}\n`);
|
|
94
|
+
const maxLen = Math.max(...report.judges.map((j) => j.judgeId.length));
|
|
95
|
+
for (const j of report.judges) {
|
|
96
|
+
const bar = "█".repeat(Math.max(1, Math.round((j.durationMs / report.totalMs) * 40)));
|
|
97
|
+
const warn = j.durationMs > threshold ? " ⚠️ SLOW" : "";
|
|
98
|
+
console.log(` ${j.judgeId.padEnd(maxLen)} ${String(j.durationMs).padStart(6)}ms ${bar} (${j.findingCount} findings)${warn}`);
|
|
99
|
+
}
|
|
100
|
+
console.log(`\n Slowest: ${report.slowest} | Fastest: ${report.fastest}\n`);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,EAAW;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,EAAoB;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsB;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,OAAO;QACP,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;QAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO;QAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,MAAM,CAAC;IAC1F,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAElE,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,MAAM,MAAM,GAAoB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9E,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAab,CAAC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,MAAc,EAAE,SAAiB;IAC7E,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,KAAK,gBAAgB,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAEzG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,YAAY,aAAa,IAAI,EAAE,CACpH,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,OAAO,eAAe,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges quality-gate` — Configurable composite quality gates.
|
|
3
|
+
*
|
|
4
|
+
* Defines and evaluates multi-dimensional quality gates for CI pipelines.
|
|
5
|
+
* Goes beyond simple severity counts — supports score thresholds, specific
|
|
6
|
+
* rule requirements, trend-based gates, and custom composite conditions.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges quality-gate --file src/app.ts # Evaluate default gate
|
|
10
|
+
* judges quality-gate --file src/app.ts --gate strict # Named gate definition
|
|
11
|
+
* judges quality-gate --file src/app.ts --json # JSON output
|
|
12
|
+
*
|
|
13
|
+
* Configuration in .judgesrc:
|
|
14
|
+
* ```json
|
|
15
|
+
* {
|
|
16
|
+
* "qualityGates": {
|
|
17
|
+
* "default": {
|
|
18
|
+
* "maxFindings": { "critical": 0, "high": 2 },
|
|
19
|
+
* "minScore": 70,
|
|
20
|
+
* "requiredJudges": ["cybersecurity", "data-security"],
|
|
21
|
+
* "maxFpRate": 0.3
|
|
22
|
+
* },
|
|
23
|
+
* "strict": {
|
|
24
|
+
* "maxFindings": { "critical": 0, "high": 0, "medium": 5 },
|
|
25
|
+
* "minScore": 85,
|
|
26
|
+
* "requiredJudges": ["cybersecurity", "data-security", "authentication"]
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import type { Severity, TribunalVerdict } from "../types.js";
|
|
33
|
+
export interface QualityGateDefinition {
|
|
34
|
+
/** Maximum allowed findings by severity — exceeding any triggers failure */
|
|
35
|
+
maxFindings?: Partial<Record<Severity, number>>;
|
|
36
|
+
/** Minimum aggregated score (0-100) */
|
|
37
|
+
minScore?: number;
|
|
38
|
+
/** Judge IDs that must participate in evaluation */
|
|
39
|
+
requiredJudges?: string[];
|
|
40
|
+
/** Maximum false-positive rate allowed (0-1) — requires feedback data */
|
|
41
|
+
maxFpRate?: number;
|
|
42
|
+
/** Required rules that must not be violated — listing a rule ID means zero violations */
|
|
43
|
+
blockerRules?: string[];
|
|
44
|
+
/** Minimum percentage of findings that must have auto-fix patches */
|
|
45
|
+
minFixRate?: number;
|
|
46
|
+
/** Minimum average confidence score for findings (0-1) */
|
|
47
|
+
minConfidence?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface QualityGateResult {
|
|
50
|
+
/** Overall pass/fail */
|
|
51
|
+
passed: boolean;
|
|
52
|
+
/** Named gate that was evaluated */
|
|
53
|
+
gateName: string;
|
|
54
|
+
/** Individual check results */
|
|
55
|
+
checks: QualityGateCheck[];
|
|
56
|
+
/** Verdict summary */
|
|
57
|
+
summary: string;
|
|
58
|
+
}
|
|
59
|
+
export interface QualityGateCheck {
|
|
60
|
+
/** Check name */
|
|
61
|
+
name: string;
|
|
62
|
+
/** Pass/fail */
|
|
63
|
+
passed: boolean;
|
|
64
|
+
/** Descriptive message */
|
|
65
|
+
message: string;
|
|
66
|
+
}
|
|
67
|
+
export declare function evaluateQualityGate(gate: QualityGateDefinition, gateName: string, verdict: TribunalVerdict, fpRateByRule?: Map<string, number>): QualityGateResult;
|
|
68
|
+
export declare function parseQualityGateConfig(obj: Record<string, unknown>): Record<string, QualityGateDefinition> | undefined;
|
|
69
|
+
export declare function runQualityGate(argv: string[]): void;
|
|
70
|
+
//# sourceMappingURL=quality-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate.d.ts","sourceRoot":"","sources":["../../src/commands/quality-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI7D,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,iBAAiB,CAsGnB;AAID,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,SAAS,CA2BnD;AAiBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgGnD"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges quality-gate` — Configurable composite quality gates.
|
|
3
|
+
*
|
|
4
|
+
* Defines and evaluates multi-dimensional quality gates for CI pipelines.
|
|
5
|
+
* Goes beyond simple severity counts — supports score thresholds, specific
|
|
6
|
+
* rule requirements, trend-based gates, and custom composite conditions.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges quality-gate --file src/app.ts # Evaluate default gate
|
|
10
|
+
* judges quality-gate --file src/app.ts --gate strict # Named gate definition
|
|
11
|
+
* judges quality-gate --file src/app.ts --json # JSON output
|
|
12
|
+
*
|
|
13
|
+
* Configuration in .judgesrc:
|
|
14
|
+
* ```json
|
|
15
|
+
* {
|
|
16
|
+
* "qualityGates": {
|
|
17
|
+
* "default": {
|
|
18
|
+
* "maxFindings": { "critical": 0, "high": 2 },
|
|
19
|
+
* "minScore": 70,
|
|
20
|
+
* "requiredJudges": ["cybersecurity", "data-security"],
|
|
21
|
+
* "maxFpRate": 0.3
|
|
22
|
+
* },
|
|
23
|
+
* "strict": {
|
|
24
|
+
* "maxFindings": { "critical": 0, "high": 0, "medium": 5 },
|
|
25
|
+
* "minScore": 85,
|
|
26
|
+
* "requiredJudges": ["cybersecurity", "data-security", "authentication"]
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import { existsSync, readFileSync } from "fs";
|
|
33
|
+
import { extname } from "path";
|
|
34
|
+
import { evaluateWithTribunal } from "../evaluators/index.js";
|
|
35
|
+
// ─── Gate Evaluation ────────────────────────────────────────────────────────
|
|
36
|
+
const SEVERITY_LEVELS = ["critical", "high", "medium", "low", "info"];
|
|
37
|
+
export function evaluateQualityGate(gate, gateName, verdict, fpRateByRule) {
|
|
38
|
+
const checks = [];
|
|
39
|
+
// Check max findings by severity
|
|
40
|
+
if (gate.maxFindings) {
|
|
41
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
42
|
+
for (const f of verdict.findings) {
|
|
43
|
+
counts[f.severity] = (counts[f.severity] || 0) + 1;
|
|
44
|
+
}
|
|
45
|
+
for (const sev of SEVERITY_LEVELS) {
|
|
46
|
+
const max = gate.maxFindings[sev];
|
|
47
|
+
if (max !== undefined) {
|
|
48
|
+
const actual = counts[sev];
|
|
49
|
+
checks.push({
|
|
50
|
+
name: `max-${sev}`,
|
|
51
|
+
passed: actual <= max,
|
|
52
|
+
message: `${sev} findings: ${actual}/${max} allowed`,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Check minimum score
|
|
58
|
+
if (gate.minScore !== undefined) {
|
|
59
|
+
checks.push({
|
|
60
|
+
name: "min-score",
|
|
61
|
+
passed: verdict.overallScore >= gate.minScore,
|
|
62
|
+
message: `Score: ${verdict.overallScore}/${gate.minScore} required`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Check required judges participated
|
|
66
|
+
if (gate.requiredJudges) {
|
|
67
|
+
const participatingJudges = new Set(verdict.evaluations.map((e) => e.judgeId));
|
|
68
|
+
for (const required of gate.requiredJudges) {
|
|
69
|
+
checks.push({
|
|
70
|
+
name: `required-judge-${required}`,
|
|
71
|
+
passed: participatingJudges.has(required),
|
|
72
|
+
message: `Judge "${required}": ${participatingJudges.has(required) ? "participated" : "MISSING"}`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Check blocker rules
|
|
77
|
+
if (gate.blockerRules) {
|
|
78
|
+
const violatedRules = new Set(verdict.findings.map((f) => f.ruleId));
|
|
79
|
+
for (const rule of gate.blockerRules) {
|
|
80
|
+
const violated = violatedRules.has(rule);
|
|
81
|
+
checks.push({
|
|
82
|
+
name: `blocker-${rule}`,
|
|
83
|
+
passed: !violated,
|
|
84
|
+
message: `Blocker rule ${rule}: ${violated ? "VIOLATED" : "clear"}`,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Check max FP rate
|
|
89
|
+
if (gate.maxFpRate !== undefined && fpRateByRule) {
|
|
90
|
+
const avgFpRate = fpRateByRule.size > 0 ? Array.from(fpRateByRule.values()).reduce((sum, r) => sum + r, 0) / fpRateByRule.size : 0;
|
|
91
|
+
checks.push({
|
|
92
|
+
name: "max-fp-rate",
|
|
93
|
+
passed: avgFpRate <= gate.maxFpRate,
|
|
94
|
+
message: `FP rate: ${(avgFpRate * 100).toFixed(1)}%/${(gate.maxFpRate * 100).toFixed(1)}% allowed`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Check min fix rate
|
|
98
|
+
if (gate.minFixRate !== undefined) {
|
|
99
|
+
const fixable = verdict.findings.filter((f) => f.patch).length;
|
|
100
|
+
const total = verdict.findings.length;
|
|
101
|
+
const fixRate = total > 0 ? fixable / total : 1;
|
|
102
|
+
checks.push({
|
|
103
|
+
name: "min-fix-rate",
|
|
104
|
+
passed: fixRate >= gate.minFixRate,
|
|
105
|
+
message: `Fix rate: ${(fixRate * 100).toFixed(1)}%/${(gate.minFixRate * 100).toFixed(1)}% required`,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Check min confidence
|
|
109
|
+
if (gate.minConfidence !== undefined) {
|
|
110
|
+
const confidences = verdict.findings.filter((f) => f.confidence !== undefined).map((f) => f.confidence);
|
|
111
|
+
const avgConf = confidences.length > 0 ? confidences.reduce((s, c) => s + c, 0) / confidences.length : 1;
|
|
112
|
+
checks.push({
|
|
113
|
+
name: "min-confidence",
|
|
114
|
+
passed: avgConf >= gate.minConfidence,
|
|
115
|
+
message: `Avg confidence: ${(avgConf * 100).toFixed(1)}%/${(gate.minConfidence * 100).toFixed(1)}% required`,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const passed = checks.every((c) => c.passed);
|
|
119
|
+
const failed = checks.filter((c) => !c.passed);
|
|
120
|
+
return {
|
|
121
|
+
passed,
|
|
122
|
+
gateName,
|
|
123
|
+
checks,
|
|
124
|
+
summary: passed
|
|
125
|
+
? `Quality gate "${gateName}" PASSED — all ${checks.length} check(s) passed`
|
|
126
|
+
: `Quality gate "${gateName}" FAILED — ${failed.length}/${checks.length} check(s) failed`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// ─── Config Parsing ─────────────────────────────────────────────────────────
|
|
130
|
+
export function parseQualityGateConfig(obj) {
|
|
131
|
+
if (!obj.qualityGates)
|
|
132
|
+
return undefined;
|
|
133
|
+
const raw = obj.qualityGates;
|
|
134
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
135
|
+
return undefined;
|
|
136
|
+
const gates = {};
|
|
137
|
+
for (const [name, def] of Object.entries(raw)) {
|
|
138
|
+
if (typeof def !== "object" || def === null)
|
|
139
|
+
continue;
|
|
140
|
+
const d = def;
|
|
141
|
+
const gate = {};
|
|
142
|
+
if (d.maxFindings && typeof d.maxFindings === "object") {
|
|
143
|
+
gate.maxFindings = d.maxFindings;
|
|
144
|
+
}
|
|
145
|
+
if (typeof d.minScore === "number")
|
|
146
|
+
gate.minScore = d.minScore;
|
|
147
|
+
if (Array.isArray(d.requiredJudges))
|
|
148
|
+
gate.requiredJudges = d.requiredJudges;
|
|
149
|
+
if (typeof d.maxFpRate === "number")
|
|
150
|
+
gate.maxFpRate = d.maxFpRate;
|
|
151
|
+
if (Array.isArray(d.blockerRules))
|
|
152
|
+
gate.blockerRules = d.blockerRules;
|
|
153
|
+
if (typeof d.minFixRate === "number")
|
|
154
|
+
gate.minFixRate = d.minFixRate;
|
|
155
|
+
if (typeof d.minConfidence === "number")
|
|
156
|
+
gate.minConfidence = d.minConfidence;
|
|
157
|
+
gates[name] = gate;
|
|
158
|
+
}
|
|
159
|
+
return Object.keys(gates).length > 0 ? gates : undefined;
|
|
160
|
+
}
|
|
161
|
+
// ─── CLI Runner ─────────────────────────────────────────────────────────────
|
|
162
|
+
const EXT_TO_LANG = {
|
|
163
|
+
".ts": "typescript",
|
|
164
|
+
".tsx": "typescript",
|
|
165
|
+
".js": "javascript",
|
|
166
|
+
".jsx": "javascript",
|
|
167
|
+
".py": "python",
|
|
168
|
+
".rs": "rust",
|
|
169
|
+
".go": "go",
|
|
170
|
+
".java": "java",
|
|
171
|
+
".cs": "csharp",
|
|
172
|
+
".cpp": "cpp",
|
|
173
|
+
};
|
|
174
|
+
export function runQualityGate(argv) {
|
|
175
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
176
|
+
console.log(`
|
|
177
|
+
judges quality-gate — Evaluate configurable quality gates
|
|
178
|
+
|
|
179
|
+
Usage:
|
|
180
|
+
judges quality-gate --file <path> Evaluate default gate
|
|
181
|
+
judges quality-gate --file <path> --gate <name> Use a named gate definition
|
|
182
|
+
judges quality-gate --json JSON output
|
|
183
|
+
|
|
184
|
+
Configuration (.judgesrc):
|
|
185
|
+
"qualityGates": {
|
|
186
|
+
"default": {
|
|
187
|
+
"maxFindings": { "critical": 0, "high": 2 },
|
|
188
|
+
"minScore": 70,
|
|
189
|
+
"requiredJudges": ["cybersecurity"],
|
|
190
|
+
"blockerRules": ["SEC-001", "AUTH-001"]
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
Options:
|
|
195
|
+
--file, -f <path> File to evaluate
|
|
196
|
+
--gate <name> Gate name (default: "default")
|
|
197
|
+
--json JSON output
|
|
198
|
+
--help, -h Show this help
|
|
199
|
+
`);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const file = argv.find((_a, i) => argv[i - 1] === "--file" || argv[i - 1] === "-f");
|
|
203
|
+
const gateName = argv.find((_a, i) => argv[i - 1] === "--gate") || "default";
|
|
204
|
+
const jsonFormat = argv.includes("--json");
|
|
205
|
+
if (!file) {
|
|
206
|
+
console.error("Error: --file is required.");
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
if (!existsSync(file)) {
|
|
210
|
+
console.error(`Error: File not found: ${file}`);
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
// Load quality gate config from .judgesrc
|
|
214
|
+
let gates;
|
|
215
|
+
for (const name of [".judgesrc", ".judgesrc.json"]) {
|
|
216
|
+
if (existsSync(name)) {
|
|
217
|
+
try {
|
|
218
|
+
const raw = JSON.parse(readFileSync(name, "utf-8"));
|
|
219
|
+
gates = parseQualityGateConfig(raw);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Skip invalid config
|
|
223
|
+
}
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Use a sensible default gate if none configured
|
|
228
|
+
const gate = gates?.[gateName] ?? {
|
|
229
|
+
maxFindings: { critical: 0, high: 3 },
|
|
230
|
+
minScore: 60,
|
|
231
|
+
};
|
|
232
|
+
// Evaluate
|
|
233
|
+
const code = readFileSync(file, "utf-8");
|
|
234
|
+
const lang = EXT_TO_LANG[extname(file)] || "typescript";
|
|
235
|
+
const verdict = evaluateWithTribunal(code, lang);
|
|
236
|
+
// Load FP rates if available
|
|
237
|
+
let fpRateByRule;
|
|
238
|
+
try {
|
|
239
|
+
const { loadFeedbackStore, getFpRateByRule: getFpRate } = require("./feedback.js");
|
|
240
|
+
const store = loadFeedbackStore();
|
|
241
|
+
const rates = getFpRate(store);
|
|
242
|
+
fpRateByRule = rates instanceof Map ? rates : new Map(Object.entries(rates));
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Feedback data not available
|
|
246
|
+
}
|
|
247
|
+
const result = evaluateQualityGate(gate, gateName, verdict, fpRateByRule);
|
|
248
|
+
if (jsonFormat) {
|
|
249
|
+
console.log(JSON.stringify(result, null, 2));
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
const icon = result.passed ? "✅" : "❌";
|
|
253
|
+
console.log(`\n ${icon} ${result.summary}\n`);
|
|
254
|
+
for (const check of result.checks) {
|
|
255
|
+
const checkIcon = check.passed ? " ✓" : " ✗";
|
|
256
|
+
console.log(` ${checkIcon} ${check.message}`);
|
|
257
|
+
}
|
|
258
|
+
console.log("");
|
|
259
|
+
}
|
|
260
|
+
if (!result.passed) {
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=quality-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-gate.js","sourceRoot":"","sources":["../../src/commands/quality-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart judge selection — auto-select relevant judges based on file content.
|
|
3
|
+
*
|
|
4
|
+
* Avoids running irrelevant judges (e.g., SQL judge on .tsx files,
|
|
5
|
+
* IaC judge on .py files) to improve evaluation speed and reduce noise.
|
|
6
|
+
*
|
|
7
|
+
* Used internally by the evaluation pipeline when `smartSelect: true`.
|
|
8
|
+
*/
|
|
9
|
+
export interface JudgeRelevance {
|
|
10
|
+
judgeId: string;
|
|
11
|
+
relevant: boolean;
|
|
12
|
+
reason: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Select relevant judges for a given file based on its language and content.
|
|
16
|
+
* Returns the list of judge IDs that should be run.
|
|
17
|
+
*/
|
|
18
|
+
export declare function selectJudgesForFile(language: string, code: string, availableJudges?: string[]): JudgeRelevance[];
|
|
19
|
+
/**
|
|
20
|
+
* Get just the relevant judge IDs for a file.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getRelevantJudges(language: string, code: string, availableJudges?: string[]): string[];
|
|
23
|
+
/**
|
|
24
|
+
* CLI: Show judge selection for a file.
|
|
25
|
+
*/
|
|
26
|
+
export declare function runSmartSelect(argv: string[]): void;
|
|
27
|
+
//# sourceMappingURL=smart-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-select.d.ts","sourceRoot":"","sources":["../../src/commands/smart-select.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AA8ND;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAiChH;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAItG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkGnD"}
|