coverme-security-scanner 3.0.0 → 3.2.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.
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Clean, professional palette with subtle color accents
3
+ */
4
+ export declare const colors: {
5
+ readonly background: "#FFFFFF";
6
+ readonly text: {
7
+ readonly primary: "#1a1a1a";
8
+ readonly secondary: "#4a4a4a";
9
+ readonly muted: "#7a7a7a";
10
+ };
11
+ readonly severity: {
12
+ readonly critical: {
13
+ readonly bg: "#FFFFFF";
14
+ readonly text: "#C41E3A";
15
+ readonly border: "#E8E8E8";
16
+ };
17
+ readonly high: {
18
+ readonly bg: "#FFFFFF";
19
+ readonly text: "#D2691E";
20
+ readonly border: "#E8E8E8";
21
+ };
22
+ readonly medium: {
23
+ readonly bg: "#FFFFFF";
24
+ readonly text: "#B8860B";
25
+ readonly border: "#E8E8E8";
26
+ };
27
+ readonly low: {
28
+ readonly bg: "#FFFFFF";
29
+ readonly text: "#2E8B57";
30
+ readonly border: "#E8E8E8";
31
+ };
32
+ readonly info: {
33
+ readonly bg: "#FFFFFF";
34
+ readonly text: "#4682B4";
35
+ readonly border: "#E8E8E8";
36
+ };
37
+ };
38
+ readonly border: "#E0E0E0";
39
+ readonly borderLight: "#F0F0F0";
40
+ readonly accent: "#2C5282";
41
+ readonly accentMuted: "#F7FAFC";
42
+ readonly table: {
43
+ readonly header: "#F7F7F7";
44
+ readonly headerText: "#1a1a1a";
45
+ readonly border: "#E0E0E0";
46
+ readonly altRow: "#FAFAFA";
47
+ };
48
+ };
49
+ export declare const fonts: {
50
+ readonly primary: "Helvetica";
51
+ readonly mono: "Courier";
52
+ readonly sizes: {
53
+ readonly title: 28;
54
+ readonly h1: 22;
55
+ readonly h2: 16;
56
+ readonly h3: 13;
57
+ readonly body: 10;
58
+ readonly small: 9;
59
+ readonly caption: 8;
60
+ };
61
+ readonly weights: {
62
+ readonly normal: "Helvetica";
63
+ readonly bold: "Helvetica-Bold";
64
+ };
65
+ };
66
+ export declare const spacing: {
67
+ readonly page: {
68
+ readonly margin: 50;
69
+ readonly top: 60;
70
+ readonly bottom: 50;
71
+ };
72
+ readonly section: 30;
73
+ readonly paragraph: 12;
74
+ readonly line: 4;
75
+ };
76
+ export declare const layout: {
77
+ readonly page: {
78
+ readonly width: 595.28;
79
+ readonly height: 841.89;
80
+ };
81
+ readonly content: {
82
+ readonly width: number;
83
+ };
84
+ };
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Clean, professional palette with subtle color accents
3
+ */
4
+ export const colors = {
5
+ // Base
6
+ background: '#FFFFFF',
7
+ text: {
8
+ primary: '#1a1a1a',
9
+ secondary: '#4a4a4a',
10
+ muted: '#7a7a7a',
11
+ },
12
+ // Severity - subtle, professional
13
+ severity: {
14
+ critical: {
15
+ bg: '#FFFFFF',
16
+ text: '#C41E3A', // Subtle red
17
+ border: '#E8E8E8',
18
+ },
19
+ high: {
20
+ bg: '#FFFFFF',
21
+ text: '#D2691E', // Subtle orange
22
+ border: '#E8E8E8',
23
+ },
24
+ medium: {
25
+ bg: '#FFFFFF',
26
+ text: '#B8860B', // Subtle gold
27
+ border: '#E8E8E8',
28
+ },
29
+ low: {
30
+ bg: '#FFFFFF',
31
+ text: '#2E8B57', // Subtle green
32
+ border: '#E8E8E8',
33
+ },
34
+ info: {
35
+ bg: '#FFFFFF',
36
+ text: '#4682B4', // Subtle blue
37
+ border: '#E8E8E8',
38
+ },
39
+ },
40
+ // UI elements
41
+ border: '#E0E0E0',
42
+ borderLight: '#F0F0F0',
43
+ accent: '#2C5282', // Professional blue
44
+ accentMuted: '#F7FAFC',
45
+ // Table
46
+ table: {
47
+ header: '#F7F7F7',
48
+ headerText: '#1a1a1a',
49
+ border: '#E0E0E0',
50
+ altRow: '#FAFAFA',
51
+ },
52
+ };
53
+ export const fonts = {
54
+ // Using system fonts for clean rendering
55
+ primary: 'Helvetica',
56
+ mono: 'Courier',
57
+ sizes: {
58
+ title: 28,
59
+ h1: 22,
60
+ h2: 16,
61
+ h3: 13,
62
+ body: 10,
63
+ small: 9,
64
+ caption: 8,
65
+ },
66
+ weights: {
67
+ normal: 'Helvetica',
68
+ bold: 'Helvetica-Bold',
69
+ },
70
+ };
71
+ export const spacing = {
72
+ page: {
73
+ margin: 50,
74
+ top: 60,
75
+ bottom: 50,
76
+ },
77
+ section: 30,
78
+ paragraph: 12,
79
+ line: 4,
80
+ };
81
+ export const layout = {
82
+ page: {
83
+ width: 595.28, // A4
84
+ height: 841.89, // A4
85
+ },
86
+ content: {
87
+ width: 595.28 - (50 * 2), // page width - margins
88
+ },
89
+ };
@@ -0,0 +1,203 @@
1
+ export type Severity = 'critical' | 'high' | 'medium' | 'low' | 'info';
2
+ export interface CodeEvidence {
3
+ file: string;
4
+ startLine: number;
5
+ endLine?: number;
6
+ code: string;
7
+ highlight?: number[];
8
+ annotation?: string;
9
+ }
10
+ export interface Exploitability {
11
+ skillLevel: 'novice' | 'intermediate' | 'expert';
12
+ accessRequired: 'network' | 'adjacent' | 'local' | 'physical';
13
+ authRequired: 'none' | 'low' | 'high';
14
+ userInteraction: 'none' | 'required';
15
+ hasPublicExploit: boolean;
16
+ exploitMaturity: 'theoretical' | 'poc' | 'weaponized';
17
+ automatable: boolean;
18
+ }
19
+ export interface BlastRadius {
20
+ affectedUsers: 'none' | 'single' | 'subset' | 'all';
21
+ affectedData: string[];
22
+ affectedServices: string[];
23
+ cascadeRisk: boolean;
24
+ containment: 'isolated' | 'component' | 'system' | 'infrastructure';
25
+ }
26
+ export interface BusinessImpact {
27
+ confidentiality: 'none' | 'low' | 'high';
28
+ integrity: 'none' | 'low' | 'high';
29
+ availability: 'none' | 'low' | 'high';
30
+ financialExposure?: string;
31
+ complianceViolations?: string[];
32
+ reputationalRisk: 'low' | 'medium' | 'high';
33
+ slaImpact?: string;
34
+ }
35
+ export interface Finding {
36
+ id: string;
37
+ title: string;
38
+ severity: Severity;
39
+ file?: string;
40
+ line?: number;
41
+ issue?: string;
42
+ why?: string;
43
+ fix?: string;
44
+ description?: string;
45
+ impact?: string;
46
+ recommendation?: string;
47
+ status?: 'open' | 'resolved' | 'accepted' | 'partial';
48
+ dreadScore?: number;
49
+ codeEvidence?: CodeEvidence[];
50
+ exploitability?: Exploitability;
51
+ blastRadius?: BlastRadius;
52
+ businessImpact?: BusinessImpact;
53
+ cwe?: string;
54
+ cvssVector?: string;
55
+ cvssScore?: number;
56
+ relatedFindings?: string[];
57
+ attackChainPosition?: 'entry' | 'pivot' | 'objective';
58
+ proofOfConcept?: string;
59
+ references?: string[];
60
+ }
61
+ export interface ThreatModelEntry {
62
+ id: string;
63
+ severity: Severity;
64
+ dread?: number;
65
+ status: 'mitigated' | 'partial' | 'accepted' | 'open';
66
+ finding: string;
67
+ }
68
+ export interface ArchitectureComponent {
69
+ name: string;
70
+ technology: string;
71
+ description: string;
72
+ }
73
+ export interface NetworkConnection {
74
+ flow: string;
75
+ description: string;
76
+ }
77
+ export interface PortEntry {
78
+ port: number;
79
+ protocol: string;
80
+ component: string;
81
+ binding: string;
82
+ purpose: string;
83
+ }
84
+ export interface RemediationItem {
85
+ action: string;
86
+ finding: string;
87
+ owner: string;
88
+ }
89
+ export interface AttackChain {
90
+ id: string;
91
+ name: string;
92
+ description: string;
93
+ likelihood: 'low' | 'medium' | 'high' | 'critical';
94
+ impact: 'low' | 'medium' | 'high' | 'critical';
95
+ steps: {
96
+ order: number;
97
+ findingId: string;
98
+ action: string;
99
+ outcome: string;
100
+ }[];
101
+ mitigationStrategy: string;
102
+ }
103
+ export interface RiskMatrix {
104
+ category: string;
105
+ currentRisk: 'low' | 'medium' | 'high' | 'critical';
106
+ residualRisk: 'low' | 'medium' | 'high' | 'critical';
107
+ trend: 'improving' | 'stable' | 'worsening';
108
+ }
109
+ export interface QualityItem {
110
+ type: 'dead-code' | 'dry-violation' | 'deprecated';
111
+ action: 'DELETE' | 'MERGE' | 'REFACTOR';
112
+ file: string;
113
+ line?: number;
114
+ description: string;
115
+ relatedFiles?: string[];
116
+ }
117
+ export interface ResolvedIssue {
118
+ id: string;
119
+ title: string;
120
+ severity: Severity;
121
+ resolvedDate?: string;
122
+ resolution: string;
123
+ }
124
+ export interface SecurityReport {
125
+ project: string;
126
+ date: string;
127
+ branch?: string;
128
+ scope?: string;
129
+ components?: string[];
130
+ methodology?: string;
131
+ reviewType?: string;
132
+ author?: string;
133
+ summary: {
134
+ critical: number;
135
+ high: number;
136
+ medium: number;
137
+ low: number;
138
+ total: number;
139
+ };
140
+ executiveSummary: string;
141
+ overallRiskLevel: 'critical' | 'high' | 'medium' | 'low';
142
+ topPriorities?: {
143
+ finding: string;
144
+ severity: Severity;
145
+ action: string;
146
+ }[];
147
+ attackChains?: AttackChain[];
148
+ riskMatrix?: RiskMatrix[];
149
+ architecture?: {
150
+ overview?: string;
151
+ components?: ArchitectureComponent[];
152
+ trustBoundaries?: {
153
+ id: string;
154
+ boundary: string;
155
+ trustLevel: string;
156
+ description: string;
157
+ }[];
158
+ };
159
+ network?: {
160
+ diagram?: string;
161
+ connections?: NetworkConnection[];
162
+ ports?: PortEntry[];
163
+ externalDeps?: {
164
+ service: string;
165
+ endpoint: string;
166
+ auth: string;
167
+ risk?: string;
168
+ }[];
169
+ };
170
+ findings: Finding[];
171
+ threatModel?: ThreatModelEntry[];
172
+ positiveObservations?: {
173
+ title: string;
174
+ description: string;
175
+ }[];
176
+ remediation?: {
177
+ p0?: RemediationItem[];
178
+ p1?: RemediationItem[];
179
+ p2?: RemediationItem[];
180
+ p3?: RemediationItem[];
181
+ };
182
+ complianceMapping?: {
183
+ framework: string;
184
+ controls: {
185
+ controlId: string;
186
+ name: string;
187
+ status: 'compliant' | 'partial' | 'non-compliant';
188
+ relatedFindings?: string[];
189
+ }[];
190
+ }[];
191
+ qualityReview?: {
192
+ deadCode?: QualityItem[];
193
+ dryViolations?: QualityItem[];
194
+ deprecated?: QualityItem[];
195
+ };
196
+ resolvedIssues?: ResolvedIssue[];
197
+ privacyAnalysis?: {
198
+ category: string;
199
+ risk: 'low' | 'medium' | 'high';
200
+ description: string;
201
+ mitigation?: string;
202
+ }[];
203
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,43 +1,44 @@
1
1
  {
2
2
  "name": "coverme-security-scanner",
3
- "version": "3.0.0",
4
- "description": "CoverMe Security Scanner - AI-powered security assessment tool for Claude Code",
3
+ "version": "3.2.0",
4
+ "description": "AI-powered security assessment reports with beautiful PDF output",
5
5
  "type": "module",
6
- "main": "dist/index.js",
7
6
  "bin": {
8
- "coverme": "dist/index.js"
7
+ "coverme": "./bin/coverme.js",
8
+ "coverme-install": "./bin/install-command.js"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
9
17
  },
10
18
  "scripts": {
11
19
  "build": "tsc",
12
- "start": "node dist/index.js",
13
- "dev": "tsx src/index.ts",
14
- "typecheck": "tsc --noEmit",
15
- "clean": "rm -rf dist",
16
20
  "prepublishOnly": "npm run build"
17
21
  },
22
+ "files": [
23
+ "dist",
24
+ "bin",
25
+ "commands"
26
+ ],
18
27
  "keywords": [
19
28
  "security",
20
- "scanner",
21
29
  "assessment",
22
- "claude-code",
23
- "pdf-report"
30
+ "pdf",
31
+ "claude",
32
+ "audit"
24
33
  ],
25
- "author": "Roy-ai",
34
+ "author": "",
26
35
  "license": "MIT",
27
- "publishConfig": {
28
- "access": "public"
29
- },
30
36
  "dependencies": {
31
- "commander": "^12.1.0",
32
37
  "pdfkit": "^0.15.0"
33
38
  },
34
39
  "devDependencies": {
35
- "@types/node": "^22.0.0",
36
- "@types/pdfkit": "^0.13.4",
37
- "tsx": "^4.19.0",
38
- "typescript": "^5.6.0"
39
- },
40
- "engines": {
41
- "node": ">=20.0.0"
40
+ "@types/node": "^20.0.0",
41
+ "@types/pdfkit": "^0.13.0",
42
+ "typescript": "^5.0.0"
42
43
  }
43
44
  }