@kevinrabun/judges 3.47.0 → 3.49.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 (70) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +112 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/audit-trail.d.ts +18 -0
  6. package/dist/commands/audit-trail.d.ts.map +1 -0
  7. package/dist/commands/audit-trail.js +155 -0
  8. package/dist/commands/audit-trail.js.map +1 -0
  9. package/dist/commands/auto-fix.d.ts +18 -0
  10. package/dist/commands/auto-fix.d.ts.map +1 -0
  11. package/dist/commands/auto-fix.js +241 -0
  12. package/dist/commands/auto-fix.js.map +1 -0
  13. package/dist/commands/dep-correlate.d.ts +9 -0
  14. package/dist/commands/dep-correlate.d.ts.map +1 -0
  15. package/dist/commands/dep-correlate.js +208 -0
  16. package/dist/commands/dep-correlate.js.map +1 -0
  17. package/dist/commands/doc-gen.d.ts +8 -0
  18. package/dist/commands/doc-gen.d.ts.map +1 -0
  19. package/dist/commands/doc-gen.js +209 -0
  20. package/dist/commands/doc-gen.js.map +1 -0
  21. package/dist/commands/incident-response.d.ts +8 -0
  22. package/dist/commands/incident-response.d.ts.map +1 -0
  23. package/dist/commands/incident-response.js +255 -0
  24. package/dist/commands/incident-response.js.map +1 -0
  25. package/dist/commands/judge-author.d.ts +8 -0
  26. package/dist/commands/judge-author.d.ts.map +1 -0
  27. package/dist/commands/judge-author.js +261 -0
  28. package/dist/commands/judge-author.js.map +1 -0
  29. package/dist/commands/learning-path.d.ts +9 -0
  30. package/dist/commands/learning-path.d.ts.map +1 -0
  31. package/dist/commands/learning-path.js +326 -0
  32. package/dist/commands/learning-path.js.map +1 -0
  33. package/dist/commands/license-scan.d.ts +9 -0
  34. package/dist/commands/license-scan.d.ts.map +1 -0
  35. package/dist/commands/license-scan.js +180 -0
  36. package/dist/commands/license-scan.js.map +1 -0
  37. package/dist/commands/org-policy.d.ts +8 -0
  38. package/dist/commands/org-policy.d.ts.map +1 -0
  39. package/dist/commands/org-policy.js +208 -0
  40. package/dist/commands/org-policy.js.map +1 -0
  41. package/dist/commands/pattern-registry.d.ts +23 -0
  42. package/dist/commands/pattern-registry.d.ts.map +1 -0
  43. package/dist/commands/pattern-registry.js +227 -0
  44. package/dist/commands/pattern-registry.js.map +1 -0
  45. package/dist/commands/perf-hotspot.d.ts +8 -0
  46. package/dist/commands/perf-hotspot.d.ts.map +1 -0
  47. package/dist/commands/perf-hotspot.js +274 -0
  48. package/dist/commands/perf-hotspot.js.map +1 -0
  49. package/dist/commands/predict.d.ts +8 -0
  50. package/dist/commands/predict.d.ts.map +1 -0
  51. package/dist/commands/predict.js +219 -0
  52. package/dist/commands/predict.js.map +1 -0
  53. package/dist/commands/risk-heatmap.d.ts +8 -0
  54. package/dist/commands/risk-heatmap.d.ts.map +1 -0
  55. package/dist/commands/risk-heatmap.js +224 -0
  56. package/dist/commands/risk-heatmap.js.map +1 -0
  57. package/dist/commands/sbom-export.d.ts +8 -0
  58. package/dist/commands/sbom-export.d.ts.map +1 -0
  59. package/dist/commands/sbom-export.js +162 -0
  60. package/dist/commands/sbom-export.js.map +1 -0
  61. package/dist/commands/security-maturity.d.ts +8 -0
  62. package/dist/commands/security-maturity.d.ts.map +1 -0
  63. package/dist/commands/security-maturity.js +313 -0
  64. package/dist/commands/security-maturity.js.map +1 -0
  65. package/dist/commands/test-correlate.d.ts +8 -0
  66. package/dist/commands/test-correlate.d.ts.map +1 -0
  67. package/dist/commands/test-correlate.js +222 -0
  68. package/dist/commands/test-correlate.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep-correlate.js","sourceRoot":"","sources":["../../src/commands/dep-correlate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Documentation generation — generates security documentation
3
+ * from Judges findings history and configuration.
4
+ *
5
+ * All output is local markdown files.
6
+ */
7
+ export declare function runDocGen(argv: string[]): void;
8
+ //# sourceMappingURL=doc-gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-gen.d.ts","sourceRoot":"","sources":["../../src/commands/doc-gen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+JH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwE9C"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Documentation generation — generates security documentation
3
+ * from Judges findings history and configuration.
4
+ *
5
+ * All output is local markdown files.
6
+ */
7
+ import { existsSync, readFileSync, mkdirSync, writeFileSync } from "fs";
8
+ import { join } from "path";
9
+ // ─── Helpers ────────────────────────────────────────────────────────────────
10
+ function loadJsonSafe(path, fallback) {
11
+ if (!existsSync(path))
12
+ return fallback;
13
+ try {
14
+ return JSON.parse(readFileSync(path, "utf-8"));
15
+ }
16
+ catch {
17
+ return fallback;
18
+ }
19
+ }
20
+ function generatePolicyDoc() {
21
+ const sections = [];
22
+ // Header
23
+ sections.push({
24
+ title: "Security Review Policy",
25
+ content: `# Security Review Policy\n\n_Generated by Judges on ${new Date().toISOString().split("T")[0]}_\n\n## Overview\n\nThis document outlines the security review policy enforced by the Judges automated code review system.\n`,
26
+ });
27
+ // Configuration
28
+ const configPath = ".judgesrc";
29
+ if (existsSync(configPath)) {
30
+ try {
31
+ const config = JSON.parse(readFileSync(configPath, "utf-8"));
32
+ let content = `## Configuration\n\n`;
33
+ if (config.preset)
34
+ content += `- **Preset:** ${config.preset}\n`;
35
+ if (config.minSeverity)
36
+ content += `- **Minimum Severity:** ${config.minSeverity}\n`;
37
+ if (config.disabledJudges?.length)
38
+ content += `- **Disabled Judges:** ${config.disabledJudges.join(", ")}\n`;
39
+ if (config.disabledRules?.length)
40
+ content += `- **Disabled Rules:** ${config.disabledRules.join(", ")}\n`;
41
+ content += `\n`;
42
+ sections.push({ title: "Configuration", content });
43
+ }
44
+ catch {
45
+ // skip
46
+ }
47
+ }
48
+ // Suppressions
49
+ const supps = loadJsonSafe(".judges-suppressions.json", { suppressions: [] });
50
+ if (supps.suppressions && supps.suppressions.length > 0) {
51
+ let content = `## Approved Suppressions\n\n| Rule | Reason | Approved By |\n|------|--------|-------------|\n`;
52
+ for (const s of supps.suppressions) {
53
+ content += `| ${s.ruleId || "—"} | ${s.reason || "—"} | ${s.approvedBy || "—"} |\n`;
54
+ }
55
+ content += `\n`;
56
+ sections.push({ title: "Suppressions", content });
57
+ }
58
+ // Quality gates
59
+ const gate = loadJsonSafe(join(".judges-quality-gate", "policy.json"), {});
60
+ if (Object.keys(gate).length > 0) {
61
+ let content = `## Quality Gate Policy\n\n`;
62
+ for (const [key, val] of Object.entries(gate)) {
63
+ content += `- **${key}:** ${JSON.stringify(val)}\n`;
64
+ }
65
+ content += `\n`;
66
+ sections.push({ title: "Quality Gate", content });
67
+ }
68
+ return sections;
69
+ }
70
+ function generateRemediationGuide() {
71
+ const sections = [];
72
+ sections.push({
73
+ title: "Remediation Guide",
74
+ content: `# Security Remediation Guide\n\n_Generated by Judges on ${new Date().toISOString().split("T")[0]}_\n\nThis guide covers common security findings and how to fix them.\n\n`,
75
+ });
76
+ const guides = [
77
+ {
78
+ rule: "SQL Injection",
79
+ fix: "Use parameterized queries or prepared statements. Never concatenate user input into SQL strings.",
80
+ example: "db.query('SELECT * FROM users WHERE id = ?', [userId])",
81
+ },
82
+ {
83
+ rule: "Cross-Site Scripting (XSS)",
84
+ fix: "Sanitize and encode all user-provided output. Use framework-provided escaping (e.g., React auto-escapes).",
85
+ example: "const safe = DOMPurify.sanitize(userInput)",
86
+ },
87
+ {
88
+ rule: "Command Injection",
89
+ fix: "Use parameterized APIs or allowlists instead of shell execution with user input.",
90
+ example: "execFile('git', ['log', '--oneline'], callback)",
91
+ },
92
+ {
93
+ rule: "Hardcoded Secrets",
94
+ fix: "Move secrets to environment variables or a secrets manager. Never commit credentials.",
95
+ example: "const apiKey = process.env.API_KEY",
96
+ },
97
+ {
98
+ rule: "Insecure Cryptography",
99
+ fix: "Use strong algorithms (AES-256-GCM, SHA-256+). Avoid MD5, SHA-1, DES, RC4.",
100
+ example: "crypto.createCipheriv('aes-256-gcm', key, iv)",
101
+ },
102
+ {
103
+ rule: "Path Traversal",
104
+ fix: "Validate and normalize file paths. Use allowlists for permitted directories.",
105
+ example: "const safePath = path.resolve(baseDir, path.basename(userInput))",
106
+ },
107
+ {
108
+ rule: "SSRF",
109
+ fix: "Validate and allowlist URLs. Block internal IP ranges. Use URL parsing.",
110
+ example: "const url = new URL(userInput); if (!ALLOWED_HOSTS.has(url.hostname)) throw new Error()",
111
+ },
112
+ {
113
+ rule: "Missing Authentication",
114
+ fix: "Require authentication on all sensitive endpoints. Use middleware for consistent enforcement.",
115
+ example: "app.use('/api', authMiddleware)",
116
+ },
117
+ ];
118
+ let content = "";
119
+ for (const g of guides) {
120
+ content += `## ${g.rule}\n\n**Fix:** ${g.fix}\n\n\`\`\`\n${g.example}\n\`\`\`\n\n---\n\n`;
121
+ }
122
+ sections.push({ title: "Remediation Details", content });
123
+ return sections;
124
+ }
125
+ function generateTeamPlaybook() {
126
+ const sections = [];
127
+ sections.push({
128
+ title: "Team Security Playbook",
129
+ content: `# Team Security Playbook\n\n_Generated by Judges on ${new Date().toISOString().split("T")[0]}_\n\n## Workflow\n\n1. **Pre-commit**: Run \`judges review\` locally before pushing code\n2. **CI Pipeline**: Configure \`judges ci-template\` for automated PR checks\n3. **Triage**: Use \`judges auto-triage\` to prioritize critical findings\n4. **Review**: Assign findings using \`judges assign-findings\`\n5. **Track**: Monitor progress with \`judges burndown\`\n6. **Report**: Generate digests with \`judges digest\`\n\n`,
130
+ });
131
+ sections.push({
132
+ title: "Escalation Procedures",
133
+ content: `## Escalation Procedures\n\n| Severity | SLA | Action |\n|----------|-----|--------|\n| Critical | 4 hours | Notify security lead, create incident ticket |\n| High | 24 hours | Assign to code owner, block PR merge |\n| Medium | 1 week | Assign to team backlog |\n| Low | 1 sprint | Track in burndown |\n\n`,
134
+ });
135
+ sections.push({
136
+ title: "Metrics",
137
+ content: `## Key Metrics\n\n- **Mean Time to Remediate (MTTR)**: Track via \`judges sla-track\`\n- **False Positive Rate**: Tune via \`judges noise-advisor\`\n- **Coverage**: Monitor via \`judges coverage-map\`\n- **Team Score**: View via \`judges team-leaderboard\`\n- **Security Maturity**: Assess via \`judges security-maturity\`\n\n`,
138
+ });
139
+ return sections;
140
+ }
141
+ // ─── CLI ────────────────────────────────────────────────────────────────────
142
+ const STORE = ".judges-docs";
143
+ export function runDocGen(argv) {
144
+ if (argv.includes("--help") || argv.includes("-h")) {
145
+ console.log(`
146
+ judges doc-gen — Generate security documentation
147
+
148
+ Usage:
149
+ judges doc-gen --policy
150
+ judges doc-gen --remediation
151
+ judges doc-gen --playbook
152
+ judges doc-gen --all
153
+
154
+ Options:
155
+ --policy Generate security review policy document
156
+ --remediation Generate remediation guide
157
+ --playbook Generate team security playbook
158
+ --all Generate all documents
159
+ --output <dir> Output directory (default: .judges-docs)
160
+ --format json JSON output
161
+ --help, -h Show this help
162
+ `);
163
+ return;
164
+ }
165
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
166
+ const outputDir = argv.find((_a, i) => argv[i - 1] === "--output") || STORE;
167
+ const genPolicy = argv.includes("--policy") || argv.includes("--all");
168
+ const genRemediation = argv.includes("--remediation") || argv.includes("--all");
169
+ const genPlaybook = argv.includes("--playbook") || argv.includes("--all");
170
+ if (!genPolicy && !genRemediation && !genPlaybook) {
171
+ console.log(" Specify --policy, --remediation, --playbook, or --all. Use --help for details.");
172
+ return;
173
+ }
174
+ if (!existsSync(outputDir))
175
+ mkdirSync(outputDir, { recursive: true });
176
+ const generated = [];
177
+ if (genPolicy) {
178
+ const sections = generatePolicyDoc();
179
+ const content = sections.map((s) => s.content).join("\n");
180
+ const outPath = join(outputDir, "security-policy.md");
181
+ writeFileSync(outPath, content);
182
+ generated.push(outPath);
183
+ }
184
+ if (genRemediation) {
185
+ const sections = generateRemediationGuide();
186
+ const content = sections.map((s) => s.content).join("\n");
187
+ const outPath = join(outputDir, "remediation-guide.md");
188
+ writeFileSync(outPath, content);
189
+ generated.push(outPath);
190
+ }
191
+ if (genPlaybook) {
192
+ const sections = generateTeamPlaybook();
193
+ const content = sections.map((s) => s.content).join("\n");
194
+ const outPath = join(outputDir, "team-playbook.md");
195
+ writeFileSync(outPath, content);
196
+ generated.push(outPath);
197
+ }
198
+ if (format === "json") {
199
+ console.log(JSON.stringify({ generated, outputDir, timestamp: new Date().toISOString() }, null, 2));
200
+ }
201
+ else {
202
+ console.log(`\n Documentation Generated\n ──────────────────────────`);
203
+ for (const g of generated) {
204
+ console.log(` ✅ ${g}`);
205
+ }
206
+ console.log(`\n Output directory: ${outputDir}\n`);
207
+ }
208
+ }
209
+ //# sourceMappingURL=doc-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-gen.js","sourceRoot":"","sources":["../../src/commands/doc-gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Incident response — generates incident response playbooks
3
+ * from finding spikes, CVEs, or severity escalations.
4
+ *
5
+ * All data from local files.
6
+ */
7
+ export declare function runIncidentResponse(argv: string[]): void;
8
+ //# sourceMappingURL=incident-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incident-response.d.ts","sourceRoot":"","sources":["../../src/commands/incident-response.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoJH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoKxD"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Incident response — generates incident response playbooks
3
+ * from finding spikes, CVEs, or severity escalations.
4
+ *
5
+ * All data from local files.
6
+ */
7
+ import { existsSync, readFileSync, mkdirSync, writeFileSync } from "fs";
8
+ import { join } from "path";
9
+ // ─── Playbook Generation ────────────────────────────────────────────────────
10
+ function generatePlaybook(severity, findings) {
11
+ const steps = [
12
+ {
13
+ order: 1,
14
+ action: "Acknowledge incident and assign incident commander",
15
+ owner: "security-lead",
16
+ status: "pending",
17
+ },
18
+ {
19
+ order: 2,
20
+ action: "Assess blast radius — identify all affected files and services",
21
+ owner: "incident-commander",
22
+ status: "pending",
23
+ },
24
+ {
25
+ order: 3,
26
+ action: "Notify relevant code owners and stakeholders",
27
+ owner: "incident-commander",
28
+ status: "pending",
29
+ },
30
+ ];
31
+ if (severity === "critical") {
32
+ steps.push({
33
+ order: 4,
34
+ action: "Evaluate if production rollback or hotfix is needed",
35
+ owner: "engineering-lead",
36
+ status: "pending",
37
+ }, { order: 5, action: "Apply emergency patches to critical findings", owner: "assigned-devs", status: "pending" }, { order: 6, action: "Run security regression tests on patched code", owner: "qa-lead", status: "pending" }, { order: 7, action: "Deploy hotfix through expedited release process", owner: "devops-lead", status: "pending" });
38
+ }
39
+ else {
40
+ steps.push({
41
+ order: 4,
42
+ action: "Prioritize findings by severity and blast radius",
43
+ owner: "security-lead",
44
+ status: "pending",
45
+ }, { order: 5, action: "Create fix PRs for each affected file", owner: "assigned-devs", status: "pending" }, { order: 6, action: "Review and merge fixes through normal PR process", owner: "code-owners", status: "pending" });
46
+ }
47
+ const hasSqlFindings = findings.some((f) => /sql/i.test(f.ruleId) || /injection/i.test(f.title));
48
+ if (hasSqlFindings) {
49
+ steps.push({
50
+ order: steps.length + 1,
51
+ action: "Audit database access logs for exploitation evidence",
52
+ owner: "dba",
53
+ status: "pending",
54
+ });
55
+ }
56
+ const hasAuthFindings = findings.some((f) => /auth/i.test(f.ruleId) || /auth/i.test(f.title));
57
+ if (hasAuthFindings) {
58
+ steps.push({
59
+ order: steps.length + 1,
60
+ action: "Review authentication logs and rotate affected credentials",
61
+ owner: "security-lead",
62
+ status: "pending",
63
+ });
64
+ }
65
+ steps.push({
66
+ order: steps.length + 1,
67
+ action: "Verify all findings are resolved with re-scan",
68
+ owner: "security-lead",
69
+ status: "pending",
70
+ }, {
71
+ order: steps.length + 2,
72
+ action: "Document lessons learned and update prevention controls",
73
+ owner: "incident-commander",
74
+ status: "pending",
75
+ }, {
76
+ order: steps.length + 3,
77
+ action: "Close incident and update status",
78
+ owner: "incident-commander",
79
+ status: "pending",
80
+ });
81
+ return steps;
82
+ }
83
+ function generateId() {
84
+ return `INC-${Date.now().toString(36).toUpperCase()}`;
85
+ }
86
+ // ─── Load findings ──────────────────────────────────────────────────────────
87
+ function loadRecentFindings() {
88
+ const paths = [".judges-findings.json", "judges-report.json"];
89
+ for (const p of paths) {
90
+ if (!existsSync(p))
91
+ continue;
92
+ try {
93
+ const data = JSON.parse(readFileSync(p, "utf-8"));
94
+ if (Array.isArray(data))
95
+ return data;
96
+ if (data.findings)
97
+ return data.findings;
98
+ }
99
+ catch {
100
+ /* skip */
101
+ }
102
+ }
103
+ return [];
104
+ }
105
+ // ─── CLI ────────────────────────────────────────────────────────────────────
106
+ const STORE = ".judges-incidents";
107
+ export function runIncidentResponse(argv) {
108
+ if (argv.includes("--help") || argv.includes("-h")) {
109
+ console.log(`
110
+ judges incident-response — Incident response playbook generation
111
+
112
+ Usage:
113
+ judges incident-response --create --severity critical --title "SQL Injection in auth module"
114
+ judges incident-response --list
115
+ judges incident-response --show <id>
116
+ judges incident-response --update <id> --status investigating
117
+ judges incident-response --generate-from-findings
118
+
119
+ Options:
120
+ --create Create new incident
121
+ --severity <level> Incident severity (critical, high, medium)
122
+ --title <text> Incident title
123
+ --generate-from-findings Auto-generate incident from current findings
124
+ --list List all incidents
125
+ --show <id> Show incident details
126
+ --update <id> Update incident
127
+ --status <status> Set status (open, investigating, mitigating, resolved)
128
+ --format json JSON output
129
+ --help, -h Show this help
130
+ `);
131
+ return;
132
+ }
133
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
134
+ if (!existsSync(STORE))
135
+ mkdirSync(STORE, { recursive: true });
136
+ const incidentsPath = join(STORE, "incidents.json");
137
+ const incidents = existsSync(incidentsPath) ? JSON.parse(readFileSync(incidentsPath, "utf-8")) : [];
138
+ // List
139
+ if (argv.includes("--list")) {
140
+ if (format === "json") {
141
+ console.log(JSON.stringify(incidents, null, 2));
142
+ }
143
+ else {
144
+ console.log(`\n Incidents (${incidents.length})\n ──────────────────────────`);
145
+ if (incidents.length === 0) {
146
+ console.log(" No incidents recorded.\n");
147
+ return;
148
+ }
149
+ for (const inc of incidents) {
150
+ console.log(` [${inc.status.toUpperCase().padEnd(13)}] ${inc.id} ${inc.severity.toUpperCase().padEnd(8)} ${inc.title}`);
151
+ }
152
+ console.log("");
153
+ }
154
+ return;
155
+ }
156
+ // Show
157
+ const showId = argv.find((_a, i) => argv[i - 1] === "--show");
158
+ if (showId) {
159
+ const inc = incidents.find((i) => i.id === showId);
160
+ if (!inc) {
161
+ console.error(` Incident ${showId} not found.`);
162
+ return;
163
+ }
164
+ if (format === "json") {
165
+ console.log(JSON.stringify(inc, null, 2));
166
+ }
167
+ else {
168
+ console.log(`\n Incident: ${inc.id}\n ──────────────────────────`);
169
+ console.log(` Title: ${inc.title}`);
170
+ console.log(` Severity: ${inc.severity}`);
171
+ console.log(` Status: ${inc.status}`);
172
+ console.log(` Created: ${inc.createdAt}`);
173
+ console.log(` Files: ${inc.affectedFiles.length}`);
174
+ console.log(` Findings: ${inc.findings.length}`);
175
+ console.log(`\n Playbook:`);
176
+ for (const step of inc.playbook) {
177
+ const icon = step.status === "done" ? "✅" : step.status === "in-progress" ? "🔄" : "⬜";
178
+ console.log(` ${icon} ${step.order}. ${step.action} (@${step.owner})`);
179
+ }
180
+ console.log("");
181
+ }
182
+ return;
183
+ }
184
+ // Update
185
+ const updateId = argv.find((_a, i) => argv[i - 1] === "--update");
186
+ if (updateId) {
187
+ const inc = incidents.find((i) => i.id === updateId);
188
+ if (!inc) {
189
+ console.error(` Incident ${updateId} not found.`);
190
+ return;
191
+ }
192
+ const newStatus = argv.find((_a, i) => argv[i - 1] === "--status");
193
+ if (newStatus) {
194
+ inc.status = newStatus;
195
+ inc.updatedAt = new Date().toISOString();
196
+ writeFileSync(incidentsPath, JSON.stringify(incidents, null, 2));
197
+ console.log(` Incident ${updateId} → ${newStatus}`);
198
+ }
199
+ return;
200
+ }
201
+ // Generate from findings
202
+ if (argv.includes("--generate-from-findings")) {
203
+ const findings = loadRecentFindings();
204
+ const criticals = findings.filter((f) => f.severity === "critical");
205
+ const highs = findings.filter((f) => f.severity === "high");
206
+ if (criticals.length === 0 && highs.length === 0) {
207
+ console.log(" No critical or high severity findings to generate incident from.");
208
+ return;
209
+ }
210
+ const severity = criticals.length > 0 ? "critical" : "high";
211
+ const relevantFindings = criticals.length > 0 ? criticals : highs;
212
+ const affectedFiles = [...new Set(relevantFindings.map((f) => f.file || "unknown"))];
213
+ const incident = {
214
+ id: generateId(),
215
+ severity,
216
+ title: `${severity.toUpperCase()} findings detected (${relevantFindings.length})`,
217
+ description: `Auto-generated incident from ${relevantFindings.length} ${severity} severity findings`,
218
+ affectedFiles,
219
+ findings: relevantFindings.map((f) => ({ ruleId: f.ruleId, severity: f.severity, title: f.title })),
220
+ playbook: generatePlaybook(severity, relevantFindings),
221
+ status: "open",
222
+ createdAt: new Date().toISOString(),
223
+ updatedAt: new Date().toISOString(),
224
+ };
225
+ incidents.push(incident);
226
+ writeFileSync(incidentsPath, JSON.stringify(incidents, null, 2));
227
+ console.log(` Created incident ${incident.id} (${severity}) with ${incident.playbook.length}-step playbook`);
228
+ return;
229
+ }
230
+ // Create
231
+ if (argv.includes("--create")) {
232
+ const severity = (argv.find((_a, i) => argv[i - 1] === "--severity") ||
233
+ "high");
234
+ const title = argv.find((_a, i) => argv[i - 1] === "--title") || "New security incident";
235
+ const findings = loadRecentFindings();
236
+ const incident = {
237
+ id: generateId(),
238
+ severity,
239
+ title,
240
+ description: `Manually created incident: ${title}`,
241
+ affectedFiles: [...new Set(findings.map((f) => f.file || "unknown"))],
242
+ findings: findings.map((f) => ({ ruleId: f.ruleId, severity: f.severity, title: f.title })),
243
+ playbook: generatePlaybook(severity, findings),
244
+ status: "open",
245
+ createdAt: new Date().toISOString(),
246
+ updatedAt: new Date().toISOString(),
247
+ };
248
+ incidents.push(incident);
249
+ writeFileSync(incidentsPath, JSON.stringify(incidents, null, 2));
250
+ console.log(` Created incident ${incident.id} with ${incident.playbook.length}-step playbook`);
251
+ return;
252
+ }
253
+ console.log(" Use --create, --generate-from-findings, --list, --show, or --update. Run --help for details.");
254
+ }
255
+ //# sourceMappingURL=incident-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incident-response.js","sourceRoot":"","sources":["../../src/commands/incident-response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Custom judge authoring toolkit — scaffolds, validates,
3
+ * and tests new judge definitions.
4
+ *
5
+ * All data stored locally.
6
+ */
7
+ export declare function runJudgeAuthor(argv: string[]): void;
8
+ //# sourceMappingURL=judge-author.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-author.d.ts","sourceRoot":"","sources":["../../src/commands/judge-author.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2JH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6InD"}