@kevinrabun/judges 3.5.0 → 3.7.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.
Files changed (64) hide show
  1. package/README.md +33 -17
  2. package/dist/api.d.ts +17 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +18 -0
  5. package/dist/api.js.map +1 -1
  6. package/dist/calibration.d.ts +58 -0
  7. package/dist/calibration.d.ts.map +1 -0
  8. package/dist/calibration.js +125 -0
  9. package/dist/calibration.js.map +1 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +265 -4
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/benchmark.d.ts +100 -0
  14. package/dist/commands/benchmark.d.ts.map +1 -0
  15. package/dist/commands/benchmark.js +650 -0
  16. package/dist/commands/benchmark.js.map +1 -0
  17. package/dist/commands/config-share.d.ts +49 -0
  18. package/dist/commands/config-share.d.ts.map +1 -0
  19. package/dist/commands/config-share.js +178 -0
  20. package/dist/commands/config-share.js.map +1 -0
  21. package/dist/commands/feedback.d.ts +87 -0
  22. package/dist/commands/feedback.d.ts.map +1 -0
  23. package/dist/commands/feedback.js +320 -0
  24. package/dist/commands/feedback.js.map +1 -0
  25. package/dist/commands/fix.d.ts +21 -0
  26. package/dist/commands/fix.d.ts.map +1 -1
  27. package/dist/commands/fix.js +2 -2
  28. package/dist/commands/fix.js.map +1 -1
  29. package/dist/commands/language-packs.d.ts +43 -0
  30. package/dist/commands/language-packs.d.ts.map +1 -0
  31. package/dist/commands/language-packs.js +151 -0
  32. package/dist/commands/language-packs.js.map +1 -0
  33. package/dist/commands/rule.d.ts +50 -0
  34. package/dist/commands/rule.d.ts.map +1 -0
  35. package/dist/commands/rule.js +202 -0
  36. package/dist/commands/rule.js.map +1 -0
  37. package/dist/commands/smart-output.d.ts +39 -0
  38. package/dist/commands/smart-output.d.ts.map +1 -0
  39. package/dist/commands/smart-output.js +176 -0
  40. package/dist/commands/smart-output.js.map +1 -0
  41. package/dist/comparison.d.ts +68 -0
  42. package/dist/comparison.d.ts.map +1 -0
  43. package/dist/comparison.js +254 -0
  44. package/dist/comparison.js.map +1 -0
  45. package/dist/fingerprint.d.ts +40 -0
  46. package/dist/fingerprint.d.ts.map +1 -0
  47. package/dist/fingerprint.js +180 -0
  48. package/dist/fingerprint.js.map +1 -0
  49. package/dist/fix-history.d.ts +72 -0
  50. package/dist/fix-history.d.ts.map +1 -0
  51. package/dist/fix-history.js +127 -0
  52. package/dist/fix-history.js.map +1 -0
  53. package/dist/formatters/diagnostics.d.ts +82 -0
  54. package/dist/formatters/diagnostics.d.ts.map +1 -0
  55. package/dist/formatters/diagnostics.js +153 -0
  56. package/dist/formatters/diagnostics.js.map +1 -0
  57. package/dist/index.js +7 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/plugins.d.ts +103 -0
  60. package/dist/plugins.d.ts.map +1 -0
  61. package/dist/plugins.js +186 -0
  62. package/dist/plugins.js.map +1 -0
  63. package/package.json +17 -1
  64. package/server.json +2 -2
@@ -9,6 +9,27 @@
9
9
  * judges fix src/app.ts --apply # Apply fixes in-place
10
10
  * judges fix src/app.ts --judge cyber # Fixes from one judge only
11
11
  */
12
+ import type { Patch } from "../types.js";
13
+ export interface PatchCandidate {
14
+ ruleId: string;
15
+ title: string;
16
+ severity: string;
17
+ patch: Patch;
18
+ lineNumbers?: number[];
19
+ }
20
+ /**
21
+ * Sort patches bottom-to-top (by startLine descending) to avoid line offsets.
22
+ */
23
+ export declare function sortPatchesBottomUp(patches: PatchCandidate[]): PatchCandidate[];
24
+ /**
25
+ * Apply patches to source code. Patches are applied bottom-to-top so that
26
+ * earlier line numbers remain stable.
27
+ */
28
+ export declare function applyPatches(code: string, patches: PatchCandidate[]): {
29
+ result: string;
30
+ applied: number;
31
+ skipped: number;
32
+ };
12
33
  interface FixArgs {
13
34
  file: string | undefined;
14
35
  language: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsFH,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAoCpD;AAID,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsF3C"}
1
+ {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,aAAa,CAAC;AAgClD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAE/E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EAAE,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAwBtD;AAID,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAoCpD;AAID,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsF3C"}
@@ -42,14 +42,14 @@ function detectLanguage(filePath) {
42
42
  /**
43
43
  * Sort patches bottom-to-top (by startLine descending) to avoid line offsets.
44
44
  */
45
- function sortPatchesBottomUp(patches) {
45
+ export function sortPatchesBottomUp(patches) {
46
46
  return [...patches].sort((a, b) => b.patch.startLine - a.patch.startLine);
47
47
  }
48
48
  /**
49
49
  * Apply patches to source code. Patches are applied bottom-to-top so that
50
50
  * earlier line numbers remain stable.
51
51
  */
52
- function applyPatches(code, patches) {
52
+ export function applyPatches(code, patches) {
53
53
  const lines = code.split("\n");
54
54
  const sorted = sortPatchesBottomUp(patches);
55
55
  let applied = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Language Packs — Preset rule configurations per language
3
+ *
4
+ * Provides curated rule sets optimized for specific languages and frameworks.
5
+ * Each pack enables/disables judges and adjusts severity thresholds to
6
+ * reduce noise and focus on language-relevant patterns.
7
+ *
8
+ * Usage:
9
+ * judges eval --pack react src/App.tsx
10
+ * judges pack list
11
+ */
12
+ import type { JudgesConfig } from "../types.js";
13
+ export interface LanguagePack {
14
+ id: string;
15
+ name: string;
16
+ description: string;
17
+ languages: string[];
18
+ config: JudgesConfig;
19
+ /** Extra rule ID prefixes to prioritize */
20
+ priorityRules?: string[];
21
+ /** Tags for discoverability */
22
+ tags?: string[];
23
+ }
24
+ export declare const LANGUAGE_PACKS: Record<string, LanguagePack>;
25
+ /**
26
+ * Get a language pack by ID.
27
+ */
28
+ export declare function getLanguagePack(id: string): LanguagePack | undefined;
29
+ /**
30
+ * List all available language packs.
31
+ */
32
+ export declare function listLanguagePacks(): Array<{
33
+ id: string;
34
+ name: string;
35
+ description: string;
36
+ languages: string[];
37
+ }>;
38
+ /**
39
+ * Auto-detect the best language pack for a given language.
40
+ */
41
+ export declare function suggestPack(language: string): LanguagePack | undefined;
42
+ export declare function runPack(argv: string[]): void;
43
+ //# sourceMappingURL=language-packs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-packs.d.ts","sourceRoot":"","sources":["../../src/commands/language-packs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AAI1D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAiGvD,CAAC;AAIF;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAOjH;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAItE;AAID,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoB5C"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Language Packs — Preset rule configurations per language
3
+ *
4
+ * Provides curated rule sets optimized for specific languages and frameworks.
5
+ * Each pack enables/disables judges and adjusts severity thresholds to
6
+ * reduce noise and focus on language-relevant patterns.
7
+ *
8
+ * Usage:
9
+ * judges eval --pack react src/App.tsx
10
+ * judges pack list
11
+ */
12
+ // ─── Built-in Language Packs ─────────────────────────────────────────────────
13
+ export const LANGUAGE_PACKS = {
14
+ react: {
15
+ id: "react",
16
+ name: "React / Next.js",
17
+ description: "Frontend-focused: accessibility, XSS, client-side security, component patterns",
18
+ languages: ["typescript", "javascript"],
19
+ config: {
20
+ disabledJudges: ["database", "data-sovereignty", "ci-cd", "cloud-readiness", "rate-limiting"],
21
+ minSeverity: "low",
22
+ },
23
+ priorityRules: ["SEC-", "A11Y-", "UX-", "PERF-"],
24
+ tags: ["frontend", "react", "nextjs"],
25
+ },
26
+ api: {
27
+ id: "api",
28
+ name: "REST/GraphQL API",
29
+ description: "Backend API focus: auth, rate limiting, input validation, error handling",
30
+ languages: ["typescript", "javascript", "python", "go", "java", "csharp"],
31
+ config: {
32
+ disabledJudges: ["accessibility", "internationalization", "ux"],
33
+ minSeverity: "low",
34
+ },
35
+ priorityRules: ["SEC-", "AUTH-", "RATE-", "API-", "ERR-"],
36
+ tags: ["backend", "api", "rest"],
37
+ },
38
+ python: {
39
+ id: "python",
40
+ name: "Python",
41
+ description: "Python-specific: injection, deserialization, type safety, package security",
42
+ languages: ["python"],
43
+ config: {
44
+ minSeverity: "low",
45
+ },
46
+ priorityRules: ["SEC-", "CYBER-", "DEP-"],
47
+ tags: ["python", "django", "flask", "fastapi"],
48
+ },
49
+ infrastructure: {
50
+ id: "infrastructure",
51
+ name: "Infrastructure / IaC",
52
+ description: "Terraform, Docker, CI/CD: config management, secrets, cloud readiness",
53
+ languages: ["terraform", "dockerfile", "yaml", "bash"],
54
+ config: {
55
+ disabledJudges: [
56
+ "accessibility",
57
+ "internationalization",
58
+ "ux",
59
+ "database",
60
+ "backwards-compatibility",
61
+ "api-design",
62
+ ],
63
+ minSeverity: "low",
64
+ },
65
+ priorityRules: ["CONF-", "CLOUD-", "CICD-", "SEC-"],
66
+ tags: ["infrastructure", "devops", "terraform", "docker"],
67
+ },
68
+ mobile: {
69
+ id: "mobile",
70
+ name: "Mobile App",
71
+ description: "Mobile-focused: data security, auth, offline, performance",
72
+ languages: ["typescript", "javascript", "swift", "kotlin", "java"],
73
+ config: {
74
+ disabledJudges: ["database", "ci-cd", "cloud-readiness", "data-sovereignty"],
75
+ minSeverity: "low",
76
+ },
77
+ priorityRules: ["SEC-", "AUTH-", "DATA-", "PERF-"],
78
+ tags: ["mobile", "ios", "android", "react-native"],
79
+ },
80
+ "data-pipeline": {
81
+ id: "data-pipeline",
82
+ name: "Data Pipeline",
83
+ description: "Data engineering: SQL injection, data security, compliance, observability",
84
+ languages: ["python", "typescript", "java", "scala"],
85
+ config: {
86
+ disabledJudges: ["accessibility", "internationalization", "ux", "api-design", "backwards-compatibility"],
87
+ minSeverity: "low",
88
+ },
89
+ priorityRules: ["DB-", "DATA-", "COMP-", "LOGPRIV-"],
90
+ tags: ["data", "etl", "pipeline", "spark"],
91
+ },
92
+ "ai-agent": {
93
+ id: "ai-agent",
94
+ name: "AI Agent / LLM App",
95
+ description: "AI safety: prompt injection, agent instructions, data security, ethics",
96
+ languages: ["typescript", "javascript", "python"],
97
+ config: {
98
+ disabledJudges: ["database", "ci-cd", "backwards-compatibility", "portability"],
99
+ minSeverity: "low",
100
+ },
101
+ priorityRules: ["AGENT-", "AICS-", "SEC-", "ETHICS-", "DATA-"],
102
+ tags: ["ai", "llm", "agent", "chatbot"],
103
+ },
104
+ };
105
+ // ─── Pack Lookup ─────────────────────────────────────────────────────────────
106
+ /**
107
+ * Get a language pack by ID.
108
+ */
109
+ export function getLanguagePack(id) {
110
+ return LANGUAGE_PACKS[id];
111
+ }
112
+ /**
113
+ * List all available language packs.
114
+ */
115
+ export function listLanguagePacks() {
116
+ return Object.values(LANGUAGE_PACKS).map((pack) => ({
117
+ id: pack.id,
118
+ name: pack.name,
119
+ description: pack.description,
120
+ languages: pack.languages,
121
+ }));
122
+ }
123
+ /**
124
+ * Auto-detect the best language pack for a given language.
125
+ */
126
+ export function suggestPack(language) {
127
+ // Find packs whose languages array includes the given language
128
+ const candidates = Object.values(LANGUAGE_PACKS).filter((p) => p.languages.includes(language));
129
+ return candidates[0]; // Return first match or undefined
130
+ }
131
+ // ─── CLI Handler ─────────────────────────────────────────────────────────────
132
+ export function runPack(argv) {
133
+ const subcommand = argv[3] || "list";
134
+ if (subcommand === "list" || subcommand === "--help" || subcommand === "-h") {
135
+ const packs = listLanguagePacks();
136
+ console.log(`\n Language Packs (${packs.length}):`);
137
+ console.log(" " + "─".repeat(60));
138
+ for (const p of packs) {
139
+ console.log(` ${p.id.padEnd(20)} ${p.name}`);
140
+ console.log(` ${"".padEnd(20)} ${p.description}`);
141
+ console.log(` ${"".padEnd(20)} Languages: ${p.languages.join(", ")}`);
142
+ console.log("");
143
+ }
144
+ console.log(" Usage: judges eval --pack <id> <file>");
145
+ console.log("");
146
+ process.exit(0);
147
+ }
148
+ console.error(`Unknown pack subcommand: ${subcommand}`);
149
+ process.exit(1);
150
+ }
151
+ //# sourceMappingURL=language-packs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-packs.js","sourceRoot":"","sources":["../../src/commands/language-packs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Custom Rule Authoring — `judges rule` command
3
+ *
4
+ * Create, list, and manage custom evaluation rules from the CLI.
5
+ * Custom rules are stored in .judgesrc or a dedicated rules directory.
6
+ *
7
+ * Usage:
8
+ * judges rule create Interactive rule creation wizard
9
+ * judges rule list List custom rules
10
+ * judges rule test <rule-id> Test a custom rule against sample code
11
+ */
12
+ import type { Finding, Severity } from "../types.js";
13
+ import type { CustomRule } from "../plugins.js";
14
+ export interface CustomRuleFile {
15
+ version: string;
16
+ rules: SerializedRule[];
17
+ }
18
+ export interface SerializedRule {
19
+ id: string;
20
+ title: string;
21
+ severity: Severity;
22
+ judgeId: string;
23
+ description: string;
24
+ languages?: string[];
25
+ pattern?: string;
26
+ patternFlags?: string;
27
+ suggestedFix?: string;
28
+ tags?: string[];
29
+ }
30
+ export declare function loadCustomRuleFile(dir?: string): CustomRuleFile;
31
+ export declare function saveCustomRuleFile(data: CustomRuleFile, dir?: string): void;
32
+ /**
33
+ * Convert a serialized rule to a CustomRule object.
34
+ */
35
+ export declare function deserializeRule(sr: SerializedRule): CustomRule;
36
+ /**
37
+ * Generate a rule template.
38
+ */
39
+ export declare function generateRuleTemplate(id: string): SerializedRule;
40
+ /**
41
+ * Test a custom rule against sample code.
42
+ */
43
+ export declare function testRule(rule: CustomRule, code: string, language: string): Finding[];
44
+ export declare function parseRuleArgs(argv: string[]): {
45
+ subcommand: string;
46
+ ruleId?: string;
47
+ file?: string;
48
+ };
49
+ export declare function runRule(argv: string[]): void;
50
+ //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../src/commands/rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAMD,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAY,GAAG,cAAc,CAUpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,GAAE,MAAY,GAAG,IAAI,CAGhF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,UAAU,CAY9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAa/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CA8BpF;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAepG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4F5C"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Custom Rule Authoring — `judges rule` command
3
+ *
4
+ * Create, list, and manage custom evaluation rules from the CLI.
5
+ * Custom rules are stored in .judgesrc or a dedicated rules directory.
6
+ *
7
+ * Usage:
8
+ * judges rule create Interactive rule creation wizard
9
+ * judges rule list List custom rules
10
+ * judges rule test <rule-id> Test a custom rule against sample code
11
+ */
12
+ import { readFileSync, writeFileSync, existsSync } from "fs";
13
+ import { resolve } from "path";
14
+ // ─── Rule File I/O ───────────────────────────────────────────────────────────
15
+ const RULES_FILE = ".judges-rules.json";
16
+ export function loadCustomRuleFile(dir = ".") {
17
+ const filePath = resolve(dir, RULES_FILE);
18
+ if (!existsSync(filePath)) {
19
+ return { version: "1.0.0", rules: [] };
20
+ }
21
+ try {
22
+ return JSON.parse(readFileSync(filePath, "utf-8"));
23
+ }
24
+ catch {
25
+ return { version: "1.0.0", rules: [] };
26
+ }
27
+ }
28
+ export function saveCustomRuleFile(data, dir = ".") {
29
+ const filePath = resolve(dir, RULES_FILE);
30
+ writeFileSync(filePath, JSON.stringify(data, null, 2) + "\n", "utf-8");
31
+ }
32
+ /**
33
+ * Convert a serialized rule to a CustomRule object.
34
+ */
35
+ export function deserializeRule(sr) {
36
+ return {
37
+ id: sr.id,
38
+ title: sr.title,
39
+ severity: sr.severity,
40
+ judgeId: sr.judgeId,
41
+ description: sr.description,
42
+ languages: sr.languages,
43
+ pattern: sr.pattern ? new RegExp(sr.pattern, sr.patternFlags || "gi") : undefined,
44
+ suggestedFix: sr.suggestedFix,
45
+ tags: sr.tags,
46
+ };
47
+ }
48
+ /**
49
+ * Generate a rule template.
50
+ */
51
+ export function generateRuleTemplate(id) {
52
+ return {
53
+ id,
54
+ title: "Custom Rule",
55
+ severity: "medium",
56
+ judgeId: "cybersecurity",
57
+ description: "Describe what this rule detects.",
58
+ languages: ["typescript", "javascript"],
59
+ pattern: "TODO_PATTERN",
60
+ patternFlags: "gi",
61
+ suggestedFix: "Describe how to fix this issue.",
62
+ tags: ["custom"],
63
+ };
64
+ }
65
+ /**
66
+ * Test a custom rule against sample code.
67
+ */
68
+ export function testRule(rule, code, language) {
69
+ if (!rule.pattern && !rule.analyze)
70
+ return [];
71
+ if (rule.languages && rule.languages.length > 0 && !rule.languages.includes(language)) {
72
+ return [];
73
+ }
74
+ const findings = [];
75
+ if (rule.analyze) {
76
+ findings.push(...rule.analyze(code, language));
77
+ }
78
+ else if (rule.pattern) {
79
+ const re = new RegExp(rule.pattern.source, rule.pattern.flags);
80
+ let match;
81
+ while ((match = re.exec(code)) !== null) {
82
+ const beforeMatch = code.slice(0, match.index);
83
+ const lineNum = (beforeMatch.match(/\n/g) || []).length + 1;
84
+ findings.push({
85
+ ruleId: rule.id,
86
+ title: rule.title,
87
+ severity: rule.severity,
88
+ description: `${rule.description} (matched: ${match[0].slice(0, 80)})`,
89
+ lineNumbers: [lineNum],
90
+ recommendation: rule.suggestedFix || "",
91
+ suggestedFix: rule.suggestedFix,
92
+ });
93
+ }
94
+ }
95
+ return findings;
96
+ }
97
+ // ─── CLI Handler ─────────────────────────────────────────────────────────────
98
+ export function parseRuleArgs(argv) {
99
+ const subcommand = argv[3] || "list";
100
+ let ruleId;
101
+ let file;
102
+ for (let i = 4; i < argv.length; i++) {
103
+ const arg = argv[i];
104
+ if (arg === "--file" || arg === "-f") {
105
+ file = argv[++i];
106
+ }
107
+ else if (!arg.startsWith("-") && !ruleId) {
108
+ ruleId = arg;
109
+ }
110
+ }
111
+ return { subcommand, ruleId, file };
112
+ }
113
+ export function runRule(argv) {
114
+ const { subcommand, ruleId, file } = parseRuleArgs(argv);
115
+ switch (subcommand) {
116
+ case "create": {
117
+ const id = ruleId || `CUSTOM-${String(Date.now()).slice(-4)}`;
118
+ const ruleFile = loadCustomRuleFile();
119
+ const template = generateRuleTemplate(id);
120
+ ruleFile.rules.push(template);
121
+ saveCustomRuleFile(ruleFile);
122
+ console.log(`\n ✅ Created custom rule template: ${id}`);
123
+ console.log(` Edit ${RULES_FILE} to configure the rule pattern and metadata.`);
124
+ console.log("");
125
+ console.log(` Template:`);
126
+ console.log(` ${JSON.stringify(template, null, 2).split("\n").join("\n ")}`);
127
+ console.log("");
128
+ process.exit(0);
129
+ break;
130
+ }
131
+ case "list": {
132
+ const ruleFile = loadCustomRuleFile();
133
+ if (ruleFile.rules.length === 0) {
134
+ console.log("\n No custom rules defined.");
135
+ console.log(" Run 'judges rule create <id>' to create one.\n");
136
+ process.exit(0);
137
+ }
138
+ console.log(`\n Custom Rules (${ruleFile.rules.length}):`);
139
+ console.log(" " + "─".repeat(60));
140
+ for (const r of ruleFile.rules) {
141
+ console.log(` ${r.id.padEnd(20)} ${r.title} [${r.severity}]`);
142
+ if (r.description)
143
+ console.log(` ${"".padEnd(20)} ${r.description}`);
144
+ }
145
+ console.log("");
146
+ process.exit(0);
147
+ break;
148
+ }
149
+ case "test": {
150
+ if (!ruleId) {
151
+ console.error("Error: Specify a rule ID to test.");
152
+ process.exit(1);
153
+ }
154
+ const ruleFile = loadCustomRuleFile();
155
+ const serialized = ruleFile.rules.find((r) => r.id === ruleId);
156
+ if (!serialized) {
157
+ console.error(`Error: Rule "${ruleId}" not found.`);
158
+ process.exit(1);
159
+ }
160
+ const rule = deserializeRule(serialized);
161
+ let code = "";
162
+ const language = "typescript";
163
+ if (file) {
164
+ const resolved = resolve(file);
165
+ if (!existsSync(resolved)) {
166
+ console.error(`Error: File not found: ${resolved}`);
167
+ process.exit(1);
168
+ }
169
+ code = readFileSync(resolved, "utf-8");
170
+ }
171
+ else if (!process.stdin.isTTY) {
172
+ code = readFileSync(0, "utf-8");
173
+ }
174
+ else {
175
+ console.error("Error: Provide a file with --file or pipe code via stdin.");
176
+ process.exit(1);
177
+ }
178
+ const findings = testRule(rule, code, language);
179
+ console.log(`\n Rule: ${rule.id} — ${rule.title}`);
180
+ console.log(` Findings: ${findings.length}`);
181
+ for (const f of findings) {
182
+ console.log(` Line ${f.lineNumbers?.[0] ?? "?"}: ${f.description}`);
183
+ }
184
+ console.log("");
185
+ process.exit(0);
186
+ break;
187
+ }
188
+ default: {
189
+ console.log(`
190
+ Judges Panel — Custom Rule Management
191
+
192
+ USAGE:
193
+ judges rule create [id] Create a custom rule template
194
+ judges rule list List all custom rules
195
+ judges rule test <rule-id> Test a rule against code
196
+ --file, -f <path> File to test against (or pipe via stdin)
197
+ `);
198
+ process.exit(0);
199
+ }
200
+ }
201
+ }
202
+ //# sourceMappingURL=rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/commands/rule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Smart Output — Adaptive first-experience output formatting
3
+ *
4
+ * Provides contextual, actionable output that adapts to the user's environment
5
+ * and experience level. Includes onboarding hints, quick-fix commands, and
6
+ * progressive detail levels.
7
+ */
8
+ import type { TribunalVerdict, JudgeEvaluation } from "../types.js";
9
+ export interface SmartOutputOptions {
10
+ /** Whether this is the first evaluation in the session */
11
+ isFirstRun?: boolean;
12
+ /** Output width in columns (default: 80) */
13
+ columns?: number;
14
+ /** Show suggested next steps */
15
+ showNextSteps?: boolean;
16
+ /** Maximum number of findings to show inline */
17
+ maxFindings?: number;
18
+ /** Hide judges with no findings */
19
+ hideCleanJudges?: boolean;
20
+ /** Collapse passing judges into a count */
21
+ collapsePassingJudges?: boolean;
22
+ /** Show fix commands inline */
23
+ showFixCommands?: boolean;
24
+ /** Show time-to-fix estimates */
25
+ showTimeEstimates?: boolean;
26
+ /** CI environment (suppress decorations) */
27
+ ci?: boolean;
28
+ }
29
+ export interface NextStep {
30
+ label: string;
31
+ command: string;
32
+ description: string;
33
+ }
34
+ /**
35
+ * Generate smart, contextual output for a tribunal verdict.
36
+ */
37
+ export declare function formatSmartOutput(verdict: TribunalVerdict, filePath?: string, options?: SmartOutputOptions): string;
38
+ export declare function formatSmartSingleJudge(evaluation: JudgeEvaluation, filePath?: string, options?: SmartOutputOptions): string;
39
+ //# sourceMappingURL=smart-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-output.d.ts","sourceRoot":"","sources":["../../src/commands/smart-output.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAW,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI7E,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,+BAA+B;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAyBD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,eAAe,EACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAyHR;AA6CD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,eAAe,EAC3B,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAwBR"}