/** * Shared types for the @vskill/scanner package. */ /** Severity levels for security findings */ export type Severity = 'critical' | 'high' | 'medium' | 'low' | 'info'; /** A single security finding from scanning */ export interface SecurityFinding { /** Severity level */ severity: Severity; /** Finding category (e.g., 'destructive-command', 'remote-code-execution') */ category: string; /** Human-readable description of the finding */ message: string; /** Line number in the file where the finding was detected */ line?: number; } /** Result from a security scan */ export interface ScanResult { /** Whether the scan passed (no critical or high findings) */ passed: boolean; /** All individual findings */ findings: SecurityFinding[]; } /** A pattern check definition used by the Tier 1 scanner */ export interface PatternCheck { /** Regular expression pattern to match */ pattern: RegExp; /** Severity level if matched */ severity: Severity; /** Category of the finding */ category: string; /** Human-readable message describing the finding */ message: string; /** If provided, the finding is suppressed when a safe-context regex matches the line */ safeContexts?: RegExp[]; } /** Represents a file discovered in a repository for scanning */ export interface RepoFile { /** Relative path within the repository */ path: string; /** File content as a string */ content: string; /** File size in bytes */ sizeBytes: number; } /** Result from the Tier 2 LLM-based scan */ export interface Tier2Result { /** Score from 0 (most dangerous) to 100 (safest) */ score: number; /** Overall verdict */ verdict: ScanVerdict; /** LLM's rationale for the verdict */ rationale: string; /** Model identifier used for the scan */ model: string; } /** Overall verdict for a scan */ export type ScanVerdict = 'PASS' | 'CONCERNS' | 'FAIL';