@kevinrabun/judges 3.38.0 → 3.41.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 +68 -0
- package/README.md +5 -4
- package/dist/api.d.ts +5 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +5 -1
- package/dist/api.js.map +1 -1
- package/dist/ast/structural-parser.js +3 -3
- package/dist/ast/structural-parser.js.map +1 -1
- package/dist/calibration.d.ts +35 -0
- package/dist/calibration.d.ts.map +1 -1
- package/dist/calibration.js +52 -0
- package/dist/calibration.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +370 -16
- 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/benchmark-languages.js +4 -4
- package/dist/commands/benchmark.d.ts +2 -1
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +67 -2
- package/dist/commands/benchmark.js.map +1 -1
- package/dist/commands/calibration-dashboard.d.ts.map +1 -1
- package/dist/commands/calibration-dashboard.js +198 -0
- package/dist/commands/calibration-dashboard.js.map +1 -1
- package/dist/commands/calibration-share.d.ts +31 -0
- package/dist/commands/calibration-share.d.ts.map +1 -0
- package/dist/commands/calibration-share.js +183 -0
- package/dist/commands/calibration-share.js.map +1 -0
- package/dist/commands/compliance-report.d.ts +35 -0
- package/dist/commands/compliance-report.d.ts.map +1 -0
- package/dist/commands/compliance-report.js +162 -0
- package/dist/commands/compliance-report.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/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.d.ts.map +1 -1
- package/dist/commands/diff.js +8 -3
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/feedback-rules.d.ts +29 -0
- package/dist/commands/feedback-rules.d.ts.map +1 -0
- package/dist/commands/feedback-rules.js +174 -0
- package/dist/commands/feedback-rules.js.map +1 -0
- package/dist/commands/feedback.d.ts +12 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +16 -0
- package/dist/commands/feedback.js.map +1 -1
- 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/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +33 -1
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/governance.d.ts +32 -0
- package/dist/commands/governance.d.ts.map +1 -0
- package/dist/commands/governance.js +203 -0
- package/dist/commands/governance.js.map +1 -0
- package/dist/commands/help.d.ts +8 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +303 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +17 -20
- package/dist/commands/hook.js.map +1 -1
- 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/llm-benchmark.d.ts +119 -0
- package/dist/commands/llm-benchmark.d.ts.map +1 -0
- package/dist/commands/llm-benchmark.js +396 -0
- package/dist/commands/llm-benchmark.js.map +1 -0
- package/dist/commands/metrics-dashboard.d.ts +22 -0
- package/dist/commands/metrics-dashboard.d.ts.map +1 -0
- package/dist/commands/metrics-dashboard.js +335 -0
- package/dist/commands/metrics-dashboard.js.map +1 -0
- package/dist/commands/metrics.d.ts +58 -0
- package/dist/commands/metrics.d.ts.map +1 -0
- package/dist/commands/metrics.js +242 -0
- package/dist/commands/metrics.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/onboard.d.ts +13 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +179 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/org-metrics.d.ts +24 -0
- package/dist/commands/org-metrics.d.ts.map +1 -0
- package/dist/commands/org-metrics.js +238 -0
- package/dist/commands/org-metrics.js.map +1 -0
- package/dist/commands/override.d.ts +62 -0
- package/dist/commands/override.d.ts.map +1 -0
- package/dist/commands/override.js +264 -0
- package/dist/commands/override.js.map +1 -0
- package/dist/commands/parity.d.ts +31 -0
- package/dist/commands/parity.d.ts.map +1 -0
- package/dist/commands/parity.js +213 -0
- package/dist/commands/parity.js.map +1 -0
- package/dist/commands/plugin-search.d.ts +40 -0
- package/dist/commands/plugin-search.d.ts.map +1 -0
- package/dist/commands/plugin-search.js +328 -0
- package/dist/commands/plugin-search.js.map +1 -0
- package/dist/commands/plugins.d.ts +13 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +105 -0
- package/dist/commands/plugins.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/review.js +1 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/snapshot.d.ts +27 -0
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +99 -0
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/trace.d.ts +65 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +246 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/trust-ramp.d.ts +30 -0
- package/dist/commands/trust-ramp.d.ts.map +1 -0
- package/dist/commands/trust-ramp.js +190 -0
- package/dist/commands/trust-ramp.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +65 -0
- package/dist/config.js.map +1 -1
- package/dist/data-adapter.d.ts +124 -0
- package/dist/data-adapter.d.ts.map +1 -0
- package/dist/data-adapter.js +213 -0
- package/dist/data-adapter.js.map +1 -0
- package/dist/evaluators/accessibility.js +1 -1
- package/dist/evaluators/accessibility.js.map +1 -1
- package/dist/evaluators/ai-code-safety.d.ts.map +1 -1
- package/dist/evaluators/ai-code-safety.js +1 -4
- package/dist/evaluators/ai-code-safety.js.map +1 -1
- package/dist/evaluators/cost-effectiveness.js +1 -1
- package/dist/evaluators/cost-effectiveness.js.map +1 -1
- package/dist/evaluators/false-positive-review.js +4 -4
- package/dist/evaluators/false-positive-review.js.map +1 -1
- 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/evaluators/iac-security.js +1 -1
- package/dist/evaluators/iac-security.js.map +1 -1
- package/dist/evaluators/index.d.ts.map +1 -1
- package/dist/evaluators/index.js +59 -10
- package/dist/evaluators/index.js.map +1 -1
- package/dist/evaluators/intent-alignment.d.ts +4 -0
- package/dist/evaluators/intent-alignment.d.ts.map +1 -1
- package/dist/evaluators/intent-alignment.js +163 -0
- package/dist/evaluators/intent-alignment.js.map +1 -1
- package/dist/evaluators/logic-review.js +1 -1
- package/dist/evaluators/logic-review.js.map +1 -1
- package/dist/evaluators/maintainability.js +1 -1
- package/dist/evaluators/maintainability.js.map +1 -1
- package/dist/evaluators/over-engineering.js +3 -3
- package/dist/evaluators/over-engineering.js.map +1 -1
- package/dist/evaluators/project.d.ts +12 -0
- package/dist/evaluators/project.d.ts.map +1 -1
- package/dist/evaluators/project.js +86 -0
- package/dist/evaluators/project.js.map +1 -1
- package/dist/evaluators/security.js +2 -2
- package/dist/evaluators/security.js.map +1 -1
- package/dist/evaluators/ux.js +1 -1
- package/dist/evaluators/ux.js.map +1 -1
- package/dist/finding-lifecycle.d.ts +9 -0
- package/dist/finding-lifecycle.d.ts.map +1 -1
- package/dist/finding-lifecycle.js +15 -0
- package/dist/finding-lifecycle.js.map +1 -1
- package/dist/fix-history.d.ts +9 -0
- package/dist/fix-history.d.ts.map +1 -1
- package/dist/fix-history.js +15 -0
- package/dist/fix-history.js.map +1 -1
- package/dist/formatters/sarif.d.ts +3 -0
- package/dist/formatters/sarif.d.ts.map +1 -1
- package/dist/formatters/sarif.js +36 -12
- package/dist/formatters/sarif.js.map +1 -1
- package/dist/github-app.d.ts +16 -1
- package/dist/github-app.d.ts.map +1 -1
- package/dist/github-app.js +85 -2
- package/dist/github-app.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/judge-registry.d.ts +157 -0
- package/dist/judge-registry.d.ts.map +1 -0
- package/dist/judge-registry.js +273 -0
- package/dist/judge-registry.js.map +1 -0
- package/dist/judges/accessibility.d.ts.map +1 -1
- package/dist/judges/accessibility.js +4 -0
- package/dist/judges/accessibility.js.map +1 -1
- package/dist/judges/agent-instructions.d.ts.map +1 -1
- package/dist/judges/agent-instructions.js +4 -0
- package/dist/judges/agent-instructions.js.map +1 -1
- package/dist/judges/ai-code-safety.d.ts.map +1 -1
- package/dist/judges/ai-code-safety.js +4 -0
- package/dist/judges/ai-code-safety.js.map +1 -1
- package/dist/judges/api-contract.d.ts.map +1 -1
- package/dist/judges/api-contract.js +4 -0
- package/dist/judges/api-contract.js.map +1 -1
- package/dist/judges/api-design.d.ts.map +1 -1
- package/dist/judges/api-design.js +4 -0
- package/dist/judges/api-design.js.map +1 -1
- package/dist/judges/authentication.d.ts.map +1 -1
- package/dist/judges/authentication.js +4 -0
- package/dist/judges/authentication.js.map +1 -1
- package/dist/judges/backwards-compatibility.d.ts.map +1 -1
- package/dist/judges/backwards-compatibility.js +4 -0
- package/dist/judges/backwards-compatibility.js.map +1 -1
- package/dist/judges/caching.d.ts.map +1 -1
- package/dist/judges/caching.js +4 -0
- package/dist/judges/caching.js.map +1 -1
- package/dist/judges/ci-cd.d.ts.map +1 -1
- package/dist/judges/ci-cd.js +4 -0
- package/dist/judges/ci-cd.js.map +1 -1
- package/dist/judges/cloud-readiness.d.ts.map +1 -1
- package/dist/judges/cloud-readiness.js +4 -0
- package/dist/judges/cloud-readiness.js.map +1 -1
- package/dist/judges/code-structure.d.ts.map +1 -1
- package/dist/judges/code-structure.js +4 -0
- package/dist/judges/code-structure.js.map +1 -1
- package/dist/judges/compliance.d.ts.map +1 -1
- package/dist/judges/compliance.js +4 -0
- package/dist/judges/compliance.js.map +1 -1
- package/dist/judges/concurrency.d.ts.map +1 -1
- package/dist/judges/concurrency.js +4 -0
- package/dist/judges/concurrency.js.map +1 -1
- package/dist/judges/configuration-management.d.ts.map +1 -1
- package/dist/judges/configuration-management.js +4 -0
- package/dist/judges/configuration-management.js.map +1 -1
- package/dist/judges/cost-effectiveness.d.ts.map +1 -1
- package/dist/judges/cost-effectiveness.js +4 -0
- package/dist/judges/cost-effectiveness.js.map +1 -1
- package/dist/judges/cybersecurity.d.ts.map +1 -1
- package/dist/judges/cybersecurity.js +4 -0
- package/dist/judges/cybersecurity.js.map +1 -1
- package/dist/judges/data-security.d.ts.map +1 -1
- package/dist/judges/data-security.js +4 -0
- package/dist/judges/data-security.js.map +1 -1
- package/dist/judges/data-sovereignty.d.ts.map +1 -1
- package/dist/judges/data-sovereignty.js +4 -0
- package/dist/judges/data-sovereignty.js.map +1 -1
- package/dist/judges/database.d.ts.map +1 -1
- package/dist/judges/database.js +4 -0
- package/dist/judges/database.js.map +1 -1
- package/dist/judges/dependency-health.d.ts.map +1 -1
- package/dist/judges/dependency-health.js +4 -0
- package/dist/judges/dependency-health.js.map +1 -1
- package/dist/judges/documentation.d.ts.map +1 -1
- package/dist/judges/documentation.js +4 -0
- package/dist/judges/documentation.js.map +1 -1
- package/dist/judges/error-handling.d.ts.map +1 -1
- package/dist/judges/error-handling.js +4 -0
- package/dist/judges/error-handling.js.map +1 -1
- package/dist/judges/ethics-bias.d.ts.map +1 -1
- package/dist/judges/ethics-bias.js +4 -0
- package/dist/judges/ethics-bias.js.map +1 -1
- package/dist/judges/false-positive-review.d.ts.map +1 -1
- package/dist/judges/false-positive-review.js +2 -0
- package/dist/judges/false-positive-review.js.map +1 -1
- package/dist/judges/framework-safety.d.ts.map +1 -1
- package/dist/judges/framework-safety.js +4 -0
- package/dist/judges/framework-safety.js.map +1 -1
- package/dist/judges/hallucination-detection.d.ts.map +1 -1
- package/dist/judges/hallucination-detection.js +4 -0
- package/dist/judges/hallucination-detection.js.map +1 -1
- package/dist/judges/iac-security.d.ts.map +1 -1
- package/dist/judges/iac-security.js +4 -0
- package/dist/judges/iac-security.js.map +1 -1
- package/dist/judges/index.d.ts +59 -0
- package/dist/judges/index.d.ts.map +1 -1
- package/dist/judges/index.js +65 -189
- package/dist/judges/index.js.map +1 -1
- package/dist/judges/intent-alignment.d.ts.map +1 -1
- package/dist/judges/intent-alignment.js +4 -0
- package/dist/judges/intent-alignment.js.map +1 -1
- package/dist/judges/internationalization.d.ts.map +1 -1
- package/dist/judges/internationalization.js +4 -0
- package/dist/judges/internationalization.js.map +1 -1
- package/dist/judges/logging-privacy.d.ts.map +1 -1
- package/dist/judges/logging-privacy.js +4 -0
- package/dist/judges/logging-privacy.js.map +1 -1
- package/dist/judges/logic-review.d.ts.map +1 -1
- package/dist/judges/logic-review.js +4 -0
- package/dist/judges/logic-review.js.map +1 -1
- package/dist/judges/maintainability.d.ts.map +1 -1
- package/dist/judges/maintainability.js +4 -0
- package/dist/judges/maintainability.js.map +1 -1
- package/dist/judges/model-fingerprint.d.ts.map +1 -1
- package/dist/judges/model-fingerprint.js +4 -0
- package/dist/judges/model-fingerprint.js.map +1 -1
- package/dist/judges/multi-turn-coherence.d.ts.map +1 -1
- package/dist/judges/multi-turn-coherence.js +4 -0
- package/dist/judges/multi-turn-coherence.js.map +1 -1
- package/dist/judges/observability.d.ts.map +1 -1
- package/dist/judges/observability.js +4 -0
- package/dist/judges/observability.js.map +1 -1
- package/dist/judges/over-engineering.d.ts.map +1 -1
- package/dist/judges/over-engineering.js +4 -0
- package/dist/judges/over-engineering.js.map +1 -1
- package/dist/judges/performance.d.ts.map +1 -1
- package/dist/judges/performance.js +4 -0
- package/dist/judges/performance.js.map +1 -1
- package/dist/judges/portability.d.ts.map +1 -1
- package/dist/judges/portability.js +4 -0
- package/dist/judges/portability.js.map +1 -1
- package/dist/judges/rate-limiting.d.ts.map +1 -1
- package/dist/judges/rate-limiting.js +4 -0
- package/dist/judges/rate-limiting.js.map +1 -1
- package/dist/judges/reliability.d.ts.map +1 -1
- package/dist/judges/reliability.js +4 -0
- package/dist/judges/reliability.js.map +1 -1
- package/dist/judges/scalability.d.ts.map +1 -1
- package/dist/judges/scalability.js +4 -0
- package/dist/judges/scalability.js.map +1 -1
- package/dist/judges/security.d.ts.map +1 -1
- package/dist/judges/security.js +4 -0
- package/dist/judges/security.js.map +1 -1
- package/dist/judges/software-practices.d.ts.map +1 -1
- package/dist/judges/software-practices.js +4 -0
- package/dist/judges/software-practices.js.map +1 -1
- package/dist/judges/testing.d.ts.map +1 -1
- package/dist/judges/testing.js +4 -0
- package/dist/judges/testing.js.map +1 -1
- package/dist/judges/ux.d.ts.map +1 -1
- package/dist/judges/ux.js +4 -0
- package/dist/judges/ux.js.map +1 -1
- 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/dist/plugins.d.ts +8 -51
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +16 -125
- package/dist/plugins.js.map +1 -1
- package/dist/security-ids.d.ts +24 -0
- package/dist/security-ids.d.ts.map +1 -0
- package/dist/security-ids.js +240 -0
- package/dist/security-ids.js.map +1 -0
- package/dist/tools/prompts.d.ts +4 -0
- package/dist/tools/prompts.d.ts.map +1 -1
- package/dist/tools/prompts.js +6 -4
- package/dist/tools/prompts.js.map +1 -1
- package/dist/tools/register-scaffold.d.ts +3 -0
- package/dist/tools/register-scaffold.d.ts.map +1 -0
- package/dist/tools/register-scaffold.js +399 -0
- package/dist/tools/register-scaffold.js.map +1 -0
- package/dist/tools/register.d.ts +1 -1
- package/dist/tools/register.d.ts.map +1 -1
- package/dist/tools/register.js +3 -1
- package/dist/tools/register.js.map +1 -1
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/server.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-benchmark.js","sourceRoot":"","sources":["../../src/commands/llm-benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges metrics-dashboard` — Interactive HTML metrics dashboard.
|
|
3
|
+
*
|
|
4
|
+
* Generates a self-contained HTML page with charts visualising:
|
|
5
|
+
* - Findings over time (from snapshot data)
|
|
6
|
+
* - Fix rates and time saved (from finding lifecycle data)
|
|
7
|
+
* - Severity distribution
|
|
8
|
+
* - Judge performance breakdown
|
|
9
|
+
* - Feedback-driven calibration improvements
|
|
10
|
+
*
|
|
11
|
+
* All data comes from the user's own local stores (or configured adapter).
|
|
12
|
+
* Judges never hosts or processes user data — dashboards are generated
|
|
13
|
+
* client-side from the user's own files.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* judges metrics-dashboard # output HTML to stdout
|
|
17
|
+
* judges metrics-dashboard --output report.html # write to file
|
|
18
|
+
* judges metrics-dashboard --format json # raw data
|
|
19
|
+
*/
|
|
20
|
+
export declare function renderMetricsDashboardHtml(dir: string): string;
|
|
21
|
+
export declare function runMetricsDashboard(argv: string[]): void;
|
|
22
|
+
//# sourceMappingURL=metrics-dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/metrics-dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA0DH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsI9D;AA0HD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA2CxD"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges metrics-dashboard` — Interactive HTML metrics dashboard.
|
|
3
|
+
*
|
|
4
|
+
* Generates a self-contained HTML page with charts visualising:
|
|
5
|
+
* - Findings over time (from snapshot data)
|
|
6
|
+
* - Fix rates and time saved (from finding lifecycle data)
|
|
7
|
+
* - Severity distribution
|
|
8
|
+
* - Judge performance breakdown
|
|
9
|
+
* - Feedback-driven calibration improvements
|
|
10
|
+
*
|
|
11
|
+
* All data comes from the user's own local stores (or configured adapter).
|
|
12
|
+
* Judges never hosts or processes user data — dashboards are generated
|
|
13
|
+
* client-side from the user's own files.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* judges metrics-dashboard # output HTML to stdout
|
|
17
|
+
* judges metrics-dashboard --output report.html # write to file
|
|
18
|
+
* judges metrics-dashboard --format json # raw data
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
21
|
+
import { resolve } from "path";
|
|
22
|
+
import { computeMetrics } from "./metrics.js";
|
|
23
|
+
function loadSnapshots(dir) {
|
|
24
|
+
const p = resolve(dir, ".judges-snapshots.json");
|
|
25
|
+
if (!existsSync(p))
|
|
26
|
+
return { snapshots: [] };
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return { snapshots: [] };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function loadFindingStoreLocal(dir) {
|
|
35
|
+
const p = resolve(dir, ".judges-findings.json");
|
|
36
|
+
if (!existsSync(p))
|
|
37
|
+
return undefined;
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function loadFeedbackLocal(dir) {
|
|
46
|
+
const p = resolve(dir, ".judges-feedback.json");
|
|
47
|
+
if (!existsSync(p))
|
|
48
|
+
return { entries: [] };
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return { entries: [] };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ─── HTML Dashboard ─────────────────────────────────────────────────────────
|
|
57
|
+
export function renderMetricsDashboardHtml(dir) {
|
|
58
|
+
const metrics = computeMetrics(resolve(dir));
|
|
59
|
+
const snapshots = loadSnapshots(dir);
|
|
60
|
+
const _findingStore = loadFindingStoreLocal(dir);
|
|
61
|
+
const feedback = loadFeedbackLocal(dir);
|
|
62
|
+
const _snapshotJson = JSON.stringify(snapshots.snapshots.slice(-50));
|
|
63
|
+
const _metricsJson = JSON.stringify(metrics);
|
|
64
|
+
const _severityJson = JSON.stringify(metrics.findings.bySeverity);
|
|
65
|
+
const _feedbackJson = JSON.stringify(aggregateFeedbackByWeek(feedback));
|
|
66
|
+
return `<!DOCTYPE html>
|
|
67
|
+
<html lang="en">
|
|
68
|
+
<head>
|
|
69
|
+
<meta charset="utf-8">
|
|
70
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
71
|
+
<title>Judges — Metrics Dashboard</title>
|
|
72
|
+
<style>
|
|
73
|
+
:root {
|
|
74
|
+
--bg: #0d1117; --surface: #161b22; --border: #30363d;
|
|
75
|
+
--text: #e6edf3; --text2: #8b949e; --accent: #58a6ff;
|
|
76
|
+
--green: #3fb950; --yellow: #d29922; --red: #f85149; --orange: #db6d28;
|
|
77
|
+
}
|
|
78
|
+
@media (prefers-color-scheme: light) {
|
|
79
|
+
:root {
|
|
80
|
+
--bg: #f6f8fa; --surface: #ffffff; --border: #d0d7de;
|
|
81
|
+
--text: #1f2328; --text2: #656d76; --accent: #0969da;
|
|
82
|
+
--green: #1a7f37; --yellow: #9a6700; --red: #cf222e; --orange: #bc4c00;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
86
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
87
|
+
background: var(--bg); color: var(--text); padding: 2rem; line-height: 1.5; }
|
|
88
|
+
h1 { font-size: 1.8rem; margin-bottom: 0.5rem; }
|
|
89
|
+
h2 { font-size: 1.2rem; margin: 1.5rem 0 0.8rem; color: var(--text2); }
|
|
90
|
+
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; margin: 1rem 0; }
|
|
91
|
+
.card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 1.2rem; }
|
|
92
|
+
.card .label { font-size: 0.8rem; color: var(--text2); text-transform: uppercase; letter-spacing: 0.05em; }
|
|
93
|
+
.card .value { font-size: 2rem; font-weight: 700; margin-top: 0.3rem; }
|
|
94
|
+
.card .sub { font-size: 0.85rem; color: var(--text2); margin-top: 0.2rem; }
|
|
95
|
+
.green { color: var(--green); } .yellow { color: var(--yellow); } .red { color: var(--red); }
|
|
96
|
+
.chart-container { background: var(--surface); border: 1px solid var(--border);
|
|
97
|
+
border-radius: 8px; padding: 1.2rem; margin: 1rem 0; }
|
|
98
|
+
svg { width: 100%; }
|
|
99
|
+
table { width: 100%; border-collapse: collapse; margin: 0.5rem 0; }
|
|
100
|
+
th, td { padding: 0.5rem 0.8rem; text-align: left; border-bottom: 1px solid var(--border); font-size: 0.9rem; }
|
|
101
|
+
th { color: var(--text2); font-weight: 600; }
|
|
102
|
+
.bar { height: 18px; border-radius: 3px; display: inline-block; vertical-align: middle; }
|
|
103
|
+
.legend { display: flex; gap: 1rem; flex-wrap: wrap; margin: 0.5rem 0; font-size: 0.85rem; }
|
|
104
|
+
.legend span::before { content: ''; display: inline-block; width: 10px; height: 10px;
|
|
105
|
+
border-radius: 2px; margin-right: 4px; vertical-align: middle; }
|
|
106
|
+
.trend-arrow { font-size: 1.5rem; }
|
|
107
|
+
footer { margin-top: 2rem; font-size: 0.8rem; color: var(--text2); text-align: center; }
|
|
108
|
+
</style>
|
|
109
|
+
</head>
|
|
110
|
+
<body>
|
|
111
|
+
<h1>Judges — Metrics Dashboard</h1>
|
|
112
|
+
<p style="color:var(--text2)">Period: ${metrics.period.from.slice(0, 10)} → ${metrics.period.to.slice(0, 10)}</p>
|
|
113
|
+
|
|
114
|
+
<h2>Overview</h2>
|
|
115
|
+
<div class="grid">
|
|
116
|
+
<div class="card">
|
|
117
|
+
<div class="label">Total Findings</div>
|
|
118
|
+
<div class="value">${metrics.findings.totalDetected}</div>
|
|
119
|
+
<div class="sub">${metrics.findings.totalOpen} open · ${metrics.findings.totalFixed} fixed</div>
|
|
120
|
+
</div>
|
|
121
|
+
<div class="card">
|
|
122
|
+
<div class="label">Fix Rate</div>
|
|
123
|
+
<div class="value ${metrics.findings.fixRate >= 0.7 ? "green" : metrics.findings.fixRate >= 0.4 ? "yellow" : "red"}">${(metrics.findings.fixRate * 100).toFixed(1)}%</div>
|
|
124
|
+
<div class="sub">${metrics.findings.totalFixed} of ${metrics.findings.totalDetected} resolved</div>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="card">
|
|
127
|
+
<div class="label">Time Saved</div>
|
|
128
|
+
<div class="value green">~${metrics.timeSaved.estimatedHours}h</div>
|
|
129
|
+
<div class="sub">${metrics.timeSaved.estimatedMinutes} minutes total</div>
|
|
130
|
+
</div>
|
|
131
|
+
<div class="card">
|
|
132
|
+
<div class="label">Trend</div>
|
|
133
|
+
<div class="value">
|
|
134
|
+
<span class="trend-arrow ${metrics.trend.direction === "improving" ? "green" : metrics.trend.direction === "degrading" ? "red" : "yellow"}">${metrics.trend.direction === "improving" ? "↗" : metrics.trend.direction === "degrading" ? "↘" : "→"}</span>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="sub">${metrics.trend.direction} — ${metrics.trend.newFindingsPerRun.toFixed(1)} new / ${metrics.trend.fixedFindingsPerRun.toFixed(1)} fixed per run</div>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="card">
|
|
139
|
+
<div class="label">False Positives</div>
|
|
140
|
+
<div class="value ${metrics.findings.totalFalsePositive === 0 ? "green" : "yellow"}">${metrics.findings.totalFalsePositive}</div>
|
|
141
|
+
<div class="sub">${metrics.findings.totalAcceptedRisk} accepted risk</div>
|
|
142
|
+
</div>
|
|
143
|
+
<div class="card">
|
|
144
|
+
<div class="label">Feedback Entries</div>
|
|
145
|
+
<div class="value">${feedback.entries.length}</div>
|
|
146
|
+
<div class="sub">Used for calibration</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<h2>Severity Distribution</h2>
|
|
151
|
+
<div class="chart-container">
|
|
152
|
+
${renderSeverityBars(metrics)}
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<h2>Time Saved Breakdown</h2>
|
|
156
|
+
<div class="chart-container">
|
|
157
|
+
<table>
|
|
158
|
+
<thead><tr><th>Category</th><th>Count</th><th>Per Item</th><th>Total</th></tr></thead>
|
|
159
|
+
<tbody>${metrics.timeSaved.breakdown.map((b) => `<tr><td>${escapeHtml(b.category)}</td><td>${b.count}</td><td>${b.minutesPerItem} min</td><td>${b.totalMinutes} min</td></tr>`).join("")}</tbody>
|
|
160
|
+
</table>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
${snapshots.snapshots.length > 1
|
|
164
|
+
? `
|
|
165
|
+
<h2>Findings Over Time</h2>
|
|
166
|
+
<div class="chart-container">
|
|
167
|
+
${renderTrendChart(snapshots.snapshots)}
|
|
168
|
+
</div>`
|
|
169
|
+
: ""}
|
|
170
|
+
|
|
171
|
+
${feedback.entries.length > 0
|
|
172
|
+
? `
|
|
173
|
+
<h2>Feedback Activity</h2>
|
|
174
|
+
<div class="chart-container">
|
|
175
|
+
${renderFeedbackChart(feedback)}
|
|
176
|
+
</div>`
|
|
177
|
+
: ""}
|
|
178
|
+
|
|
179
|
+
<footer>
|
|
180
|
+
Generated by Judges Panel · ${new Date().toISOString().slice(0, 10)} ·
|
|
181
|
+
Data sourced from local project files — judges never hosts or processes your data
|
|
182
|
+
</footer>
|
|
183
|
+
</body>
|
|
184
|
+
</html>`;
|
|
185
|
+
}
|
|
186
|
+
// ─── Chart Renderers ────────────────────────────────────────────────────────
|
|
187
|
+
function renderSeverityBars(metrics) {
|
|
188
|
+
const severities = ["critical", "high", "medium", "low", "info"];
|
|
189
|
+
const colors = {
|
|
190
|
+
critical: "var(--red)",
|
|
191
|
+
high: "var(--orange)",
|
|
192
|
+
medium: "var(--yellow)",
|
|
193
|
+
low: "var(--accent)",
|
|
194
|
+
info: "var(--text2)",
|
|
195
|
+
};
|
|
196
|
+
const max = Math.max(1, ...severities.map((s) => metrics.findings.bySeverity[s]?.detected ?? 0));
|
|
197
|
+
return `<table>
|
|
198
|
+
<thead><tr><th>Severity</th><th>Detected</th><th>Fixed</th><th></th></tr></thead>
|
|
199
|
+
<tbody>${severities
|
|
200
|
+
.map((s) => {
|
|
201
|
+
const d = metrics.findings.bySeverity[s]?.detected ?? 0;
|
|
202
|
+
const f = metrics.findings.bySeverity[s]?.fixed ?? 0;
|
|
203
|
+
const pct = max > 0 ? (d / max) * 100 : 0;
|
|
204
|
+
return `<tr><td style="text-transform:capitalize">${s}</td><td>${d}</td><td>${f}</td><td><span class="bar" style="width:${pct}%;background:${colors[s]}"></span></td></tr>`;
|
|
205
|
+
})
|
|
206
|
+
.join("")}</tbody>
|
|
207
|
+
</table>`;
|
|
208
|
+
}
|
|
209
|
+
function renderTrendChart(snapshots) {
|
|
210
|
+
const pts = snapshots.slice(-30);
|
|
211
|
+
if (pts.length < 2)
|
|
212
|
+
return "<p>Not enough data points for trend chart.</p>";
|
|
213
|
+
const maxFindings = Math.max(1, ...pts.map((p) => p.totalFindings));
|
|
214
|
+
const w = 800;
|
|
215
|
+
const h = 200;
|
|
216
|
+
const pad = 40;
|
|
217
|
+
const xStep = (w - 2 * pad) / (pts.length - 1);
|
|
218
|
+
const points = pts.map((p, i) => ({
|
|
219
|
+
x: pad + i * xStep,
|
|
220
|
+
y: h - pad - (p.totalFindings / maxFindings) * (h - 2 * pad),
|
|
221
|
+
}));
|
|
222
|
+
const pathD = points.map((p, i) => `${i === 0 ? "M" : "L"} ${p.x.toFixed(1)} ${p.y.toFixed(1)}`).join(" ");
|
|
223
|
+
return `<svg viewBox="0 0 ${w} ${h}" preserveAspectRatio="xMidYMid meet">
|
|
224
|
+
<line x1="${pad}" y1="${h - pad}" x2="${w - pad}" y2="${h - pad}" stroke="var(--border)" />
|
|
225
|
+
<line x1="${pad}" y1="${pad}" x2="${pad}" y2="${h - pad}" stroke="var(--border)" />
|
|
226
|
+
<text x="${pad - 5}" y="${pad + 4}" fill="var(--text2)" font-size="11" text-anchor="end">${maxFindings}</text>
|
|
227
|
+
<text x="${pad - 5}" y="${h - pad + 4}" fill="var(--text2)" font-size="11" text-anchor="end">0</text>
|
|
228
|
+
<text x="${pad}" y="${h - pad + 16}" fill="var(--text2)" font-size="10">${pts[0].timestamp.slice(0, 10)}</text>
|
|
229
|
+
<text x="${w - pad}" y="${h - pad + 16}" fill="var(--text2)" font-size="10" text-anchor="end">${pts[pts.length - 1].timestamp.slice(0, 10)}</text>
|
|
230
|
+
<path d="${pathD}" fill="none" stroke="var(--accent)" stroke-width="2" />
|
|
231
|
+
${points.map((p, i) => `<circle cx="${p.x.toFixed(1)}" cy="${p.y.toFixed(1)}" r="3" fill="var(--accent)"><title>${pts[i].timestamp.slice(0, 10)}: ${pts[i].totalFindings} findings</title></circle>`).join("")}
|
|
232
|
+
</svg>
|
|
233
|
+
<div class="legend"><span style="color:var(--accent)">● Total findings over time (last ${pts.length} snapshots)</span></div>`;
|
|
234
|
+
}
|
|
235
|
+
function renderFeedbackChart(feedback) {
|
|
236
|
+
const weeks = aggregateFeedbackByWeek(feedback);
|
|
237
|
+
if (weeks.length === 0)
|
|
238
|
+
return "<p>No feedback data.</p>";
|
|
239
|
+
const max = Math.max(1, ...weeks.map((w) => w.tp + w.fp + w.wontfix));
|
|
240
|
+
const w = 800;
|
|
241
|
+
const h = 180;
|
|
242
|
+
const pad = 40;
|
|
243
|
+
const barWidth = Math.max(8, Math.min(40, (w - 2 * pad) / weeks.length - 4));
|
|
244
|
+
return `<svg viewBox="0 0 ${w} ${h}" preserveAspectRatio="xMidYMid meet">
|
|
245
|
+
<line x1="${pad}" y1="${h - pad}" x2="${w - pad}" y2="${h - pad}" stroke="var(--border)" />
|
|
246
|
+
${weeks
|
|
247
|
+
.map((wk, i) => {
|
|
248
|
+
const x = pad + i * ((w - 2 * pad) / weeks.length) + 2;
|
|
249
|
+
const totalH = ((wk.tp + wk.fp + wk.wontfix) / max) * (h - 2 * pad);
|
|
250
|
+
const tpH = (wk.tp / max) * (h - 2 * pad);
|
|
251
|
+
const fpH = (wk.fp / max) * (h - 2 * pad);
|
|
252
|
+
const wfH = (wk.wontfix / max) * (h - 2 * pad);
|
|
253
|
+
const baseY = h - pad;
|
|
254
|
+
return `
|
|
255
|
+
<rect x="${x}" y="${baseY - tpH}" width="${barWidth}" height="${tpH}" fill="var(--green)" rx="2"><title>Week ${wk.week}: ${wk.tp} TP</title></rect>
|
|
256
|
+
<rect x="${x}" y="${baseY - tpH - fpH}" width="${barWidth}" height="${fpH}" fill="var(--red)" rx="2"><title>Week ${wk.week}: ${wk.fp} FP</title></rect>
|
|
257
|
+
<rect x="${x}" y="${baseY - totalH}" width="${barWidth}" height="${wfH}" fill="var(--yellow)" rx="2"><title>Week ${wk.week}: ${wk.wontfix} Won't Fix</title></rect>`;
|
|
258
|
+
})
|
|
259
|
+
.join("")}
|
|
260
|
+
</svg>
|
|
261
|
+
<div class="legend">
|
|
262
|
+
<span style="color:var(--green)">● True Positive</span>
|
|
263
|
+
<span style="color:var(--red)">● False Positive</span>
|
|
264
|
+
<span style="color:var(--yellow)">● Won't Fix</span>
|
|
265
|
+
</div>`;
|
|
266
|
+
}
|
|
267
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
268
|
+
function escapeHtml(s) {
|
|
269
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
270
|
+
}
|
|
271
|
+
function aggregateFeedbackByWeek(feedback) {
|
|
272
|
+
const buckets = new Map();
|
|
273
|
+
for (const e of feedback.entries) {
|
|
274
|
+
const d = new Date(e.timestamp);
|
|
275
|
+
const weekStart = new Date(d);
|
|
276
|
+
weekStart.setDate(d.getDate() - d.getDay());
|
|
277
|
+
const key = weekStart.toISOString().slice(0, 10);
|
|
278
|
+
const b = buckets.get(key) ?? { week: key, tp: 0, fp: 0, wontfix: 0 };
|
|
279
|
+
if (e.verdict === "tp")
|
|
280
|
+
b.tp++;
|
|
281
|
+
else if (e.verdict === "fp")
|
|
282
|
+
b.fp++;
|
|
283
|
+
else
|
|
284
|
+
b.wontfix++;
|
|
285
|
+
buckets.set(key, b);
|
|
286
|
+
}
|
|
287
|
+
return [...buckets.values()].sort((a, b) => a.week.localeCompare(b.week)).slice(-12);
|
|
288
|
+
}
|
|
289
|
+
// ─── CLI Entry ──────────────────────────────────────────────────────────────
|
|
290
|
+
export function runMetricsDashboard(argv) {
|
|
291
|
+
let format = "html";
|
|
292
|
+
let outputPath;
|
|
293
|
+
let dir = ".";
|
|
294
|
+
for (let i = 0; i < argv.length; i++) {
|
|
295
|
+
const arg = argv[i];
|
|
296
|
+
if (arg === "--format" && argv[i + 1])
|
|
297
|
+
format = argv[++i];
|
|
298
|
+
else if ((arg === "--output" || arg === "-o") && argv[i + 1])
|
|
299
|
+
outputPath = argv[++i];
|
|
300
|
+
else if (arg === "--dir" && argv[i + 1])
|
|
301
|
+
dir = argv[++i];
|
|
302
|
+
else if (arg === "--help" || arg === "-h") {
|
|
303
|
+
console.log(`
|
|
304
|
+
judges metrics-dashboard — Interactive HTML metrics dashboard
|
|
305
|
+
|
|
306
|
+
Usage:
|
|
307
|
+
judges metrics-dashboard Output HTML to stdout
|
|
308
|
+
judges metrics-dashboard -o report.html Write to file
|
|
309
|
+
judges metrics-dashboard --format json Raw metrics data
|
|
310
|
+
judges metrics-dashboard --dir ./project Target project directory
|
|
311
|
+
|
|
312
|
+
Options:
|
|
313
|
+
--format <fmt> Output format: html (default), json
|
|
314
|
+
--output, -o Write to file instead of stdout
|
|
315
|
+
--dir <path> Project directory (default: cwd)
|
|
316
|
+
-h, --help Show this help
|
|
317
|
+
`);
|
|
318
|
+
process.exit(0);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
if (format === "json") {
|
|
322
|
+
const metrics = computeMetrics(resolve(dir));
|
|
323
|
+
console.log(JSON.stringify(metrics, null, 2));
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const html = renderMetricsDashboardHtml(dir);
|
|
327
|
+
if (outputPath) {
|
|
328
|
+
writeFileSync(outputPath, html, "utf-8");
|
|
329
|
+
console.log(` ✅ Metrics dashboard written to ${outputPath}`);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
console.log(html);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=metrics-dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-dashboard.js","sourceRoot":"","sources":["../../src/commands/metrics-dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `judges metrics` — Local-only ROI metrics.
|
|
3
|
+
*
|
|
4
|
+
* Computes time-saved, defect-catch, and adoption statistics from
|
|
5
|
+
* local finding lifecycle data and feedback stores. No data leaves
|
|
6
|
+
* the developer's machine.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* judges metrics # summary to stdout
|
|
10
|
+
* judges metrics --format json # machine-readable
|
|
11
|
+
* judges metrics --since 30d # last 30 days
|
|
12
|
+
*/
|
|
13
|
+
export interface RoiMetrics {
|
|
14
|
+
/** Period covered by the metrics */
|
|
15
|
+
period: {
|
|
16
|
+
from: string;
|
|
17
|
+
to: string;
|
|
18
|
+
};
|
|
19
|
+
/** Finding statistics */
|
|
20
|
+
findings: {
|
|
21
|
+
totalDetected: number;
|
|
22
|
+
totalFixed: number;
|
|
23
|
+
totalOpen: number;
|
|
24
|
+
totalAcceptedRisk: number;
|
|
25
|
+
totalFalsePositive: number;
|
|
26
|
+
fixRate: number;
|
|
27
|
+
bySeverity: Record<string, {
|
|
28
|
+
detected: number;
|
|
29
|
+
fixed: number;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
/** Auto-fix statistics */
|
|
33
|
+
autoFix: {
|
|
34
|
+
available: number;
|
|
35
|
+
applied: number;
|
|
36
|
+
adoptionRate: number;
|
|
37
|
+
};
|
|
38
|
+
/** Estimated time savings */
|
|
39
|
+
timeSaved: {
|
|
40
|
+
estimatedMinutes: number;
|
|
41
|
+
estimatedHours: number;
|
|
42
|
+
breakdown: {
|
|
43
|
+
category: string;
|
|
44
|
+
count: number;
|
|
45
|
+
minutesPerItem: number;
|
|
46
|
+
totalMinutes: number;
|
|
47
|
+
}[];
|
|
48
|
+
};
|
|
49
|
+
/** Trend over the period */
|
|
50
|
+
trend: {
|
|
51
|
+
direction: "improving" | "stable" | "degrading";
|
|
52
|
+
newFindingsPerRun: number;
|
|
53
|
+
fixedFindingsPerRun: number;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export declare function computeMetrics(dir: string, sinceDays?: number): RoiMetrics;
|
|
57
|
+
export declare function runMetrics(argv: string[]): void;
|
|
58
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/commands/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,yBAAyB;IACzB,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjE,CAAC;IACF,0BAA0B;IAC1B,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,6BAA6B;IAC7B,SAAS,EAAE;QACT,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE;YACT,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,cAAc,EAAE,MAAM,CAAC;YACvB,YAAY,EAAE,MAAM,CAAC;SACtB,EAAE,CAAC;KACL,CAAC;IACF,4BAA4B;IAC5B,KAAK,EAAE;QACL,SAAS,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;QAChD,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AA2DD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CA8G1E;AAiDD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsC/C"}
|