@shakecodeslikecray/whiterose 0.1.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/LICENSE +135 -0
- package/README.md +578 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +4033 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +1188 -0
- package/dist/index.js +2794 -0
- package/dist/index.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/providers/detect.ts","../../src/core/utils.ts","../../src/types.ts","../../src/core/validation.ts","../../src/providers/adapters/claude-code.ts","../../src/providers/adapters/aider.ts","../../src/providers/index.ts","../../src/core/scanner/index.ts","../../src/core/contracts/intent.ts","../../src/core/docs.ts","../../src/cli/commands/init.ts","../../src/core/config.ts","../../src/analysis/static.ts","../../src/output/sarif.ts","../../src/output/markdown.ts","../../src/cli/commands/scan.ts","../../src/tui/screens/Dashboard.tsx","../../src/tui/screens/BugList.tsx","../../src/tui/screens/BugDetail.tsx","../../src/tui/screens/FixConfirm.tsx","../../src/tui/App.tsx","../../src/core/git.ts","../../src/core/fixer.ts","../../src/tui/index.tsx","../../src/cli/commands/fix.ts","../../src/cli/commands/refresh.ts","../../src/cli/commands/status.ts","../../src/cli/commands/report.ts","../../src/cli/index.ts"],"names":["z","existsSync","execa","text","readFileSync","join","fg","writeFileSync","p","YAML","p2","chalk","spinner","result","formatCategory","useState","useInput","jsxs","Box","jsx","Text","getSeverityColor","getConfidenceColor","relative","dirname","basename","resolve","isAbsolute","bugs","config","confirm","p4","p5","readdirSync","p6","p7"],"mappings":"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","file":"index.js","sourcesContent":["import { execa } from 'execa';\nimport { existsSync } from 'fs';\nimport { homedir } from 'os';\nimport { join } from 'path';\nimport { ProviderType } from '../types.js';\n\ninterface ProviderCheck {\n name: ProviderType;\n command: string;\n args: string[];\n // Common installation paths to check\n paths?: string[];\n}\n\nconst providerChecks: ProviderCheck[] = [\n {\n name: 'claude-code',\n command: 'claude',\n args: ['--version'],\n paths: [\n join(homedir(), '.local', 'bin', 'claude'),\n '/usr/local/bin/claude',\n '/opt/homebrew/bin/claude',\n ],\n },\n {\n name: 'aider',\n command: 'aider',\n args: ['--version'],\n paths: [\n join(homedir(), '.local', 'bin', 'aider'),\n '/usr/local/bin/aider',\n '/opt/homebrew/bin/aider',\n ],\n },\n {\n name: 'codex',\n command: 'codex',\n args: ['--version'],\n paths: [\n join(homedir(), '.local', 'bin', 'codex'),\n '/usr/local/bin/codex',\n '/opt/homebrew/bin/codex',\n ],\n },\n {\n name: 'opencode',\n command: 'opencode',\n args: ['--version'],\n paths: [\n join(homedir(), '.local', 'bin', 'opencode'),\n '/usr/local/bin/opencode',\n '/opt/homebrew/bin/opencode',\n ],\n },\n {\n name: 'gemini',\n command: 'gemini',\n args: ['--version'],\n paths: [\n join(homedir(), '.local', 'bin', 'gemini'),\n '/usr/local/bin/gemini',\n '/opt/homebrew/bin/gemini',\n ],\n },\n {\n name: 'ollama',\n command: 'ollama',\n args: ['--version'],\n paths: [\n join(homedir(), '.local', 'bin', 'ollama'),\n '/usr/local/bin/ollama',\n '/opt/homebrew/bin/ollama',\n ],\n },\n];\n\n// Cache resolved command paths\nconst resolvedPaths: Map<ProviderType, string> = new Map();\n\n/**\n * Find the actual command path, checking common installation locations\n */\nasync function findCommand(check: ProviderCheck): Promise<string | null> {\n // First try the command directly (in case it's in PATH)\n try {\n await execa(check.command, check.args, { timeout: 5000 });\n return check.command;\n } catch {\n // Not in PATH, check common paths\n }\n\n // Check common installation paths\n if (check.paths) {\n for (const path of check.paths) {\n if (existsSync(path)) {\n try {\n await execa(path, check.args, { timeout: 5000 });\n return path;\n } catch {\n // Path exists but command failed, continue\n }\n }\n }\n }\n\n return null;\n}\n\nexport async function detectProvider(): Promise<ProviderType[]> {\n const available: ProviderType[] = [];\n\n for (const check of providerChecks) {\n const commandPath = await findCommand(check);\n if (commandPath) {\n resolvedPaths.set(check.name, commandPath);\n available.push(check.name);\n }\n }\n\n return available;\n}\n\nexport async function isProviderAvailable(name: ProviderType): Promise<boolean> {\n const check = providerChecks.find((c) => c.name === name);\n if (!check) return false;\n\n const commandPath = await findCommand(check);\n if (commandPath) {\n resolvedPaths.set(name, commandPath);\n return true;\n }\n return false;\n}\n\n/**\n * Get the resolved command path for a provider\n */\nexport function getProviderCommand(name: ProviderType): string {\n return resolvedPaths.get(name) || name.replace('-code', '');\n}\n","export function generateBugId(index: number): string {\n return `WR-${String(index + 1).padStart(3, '0')}`;\n}\n\nexport function parseBugId(id: string): number | null {\n const match = id.match(/^WR-(\\d+)$/);\n if (!match) return null;\n return parseInt(match[1], 10) - 1;\n}\n\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n}\n\nexport function truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength - 3) + '...';\n}\n\nexport function pluralize(count: number, singular: string, plural?: string): string {\n return count === 1 ? singular : plural || `${singular}s`;\n}\n","import { z } from 'zod';\n\n// ─────────────────────────────────────────────────────────────\n// Bug & Finding Types\n// ─────────────────────────────────────────────────────────────\n\nexport const BugSeverity = z.enum(['critical', 'high', 'medium', 'low']);\nexport type BugSeverity = z.infer<typeof BugSeverity>;\n\nexport const BugCategory = z.enum([\n 'logic-error',\n 'security',\n 'async-race-condition',\n 'edge-case',\n 'null-reference',\n 'type-coercion',\n 'resource-leak',\n 'intent-violation',\n]);\nexport type BugCategory = z.infer<typeof BugCategory>;\n\nexport const ConfidenceLevel = z.enum(['high', 'medium', 'low']);\nexport type ConfidenceLevel = z.infer<typeof ConfidenceLevel>;\n\nexport const ConfidenceScore = z.object({\n overall: ConfidenceLevel,\n codePathValidity: z.number().min(0).max(1),\n reachability: z.number().min(0).max(1),\n intentViolation: z.boolean(),\n staticToolSignal: z.boolean(),\n adversarialSurvived: z.boolean(),\n});\nexport type ConfidenceScore = z.infer<typeof ConfidenceScore>;\n\nexport const CodePathStep = z.object({\n step: z.number(),\n file: z.string(),\n line: z.number(),\n code: z.string(),\n explanation: z.string(),\n});\nexport type CodePathStep = z.infer<typeof CodePathStep>;\n\nexport const Bug = z.object({\n id: z.string(),\n title: z.string(),\n description: z.string(),\n file: z.string(),\n line: z.number(),\n endLine: z.number().optional(),\n severity: BugSeverity,\n category: BugCategory,\n confidence: ConfidenceScore,\n codePath: z.array(CodePathStep),\n evidence: z.array(z.string()),\n suggestedFix: z.string().optional(),\n relatedContract: z.string().optional(),\n staticAnalysisSignals: z.array(z.string()).optional(),\n createdAt: z.string().datetime(),\n});\nexport type Bug = z.infer<typeof Bug>;\n\n// ─────────────────────────────────────────────────────────────\n// Config Types\n// ─────────────────────────────────────────────────────────────\n\nexport const ProviderType = z.enum([\n 'claude-code',\n 'aider',\n 'codex',\n 'opencode',\n 'ollama',\n 'gemini',\n]);\nexport type ProviderType = z.infer<typeof ProviderType>;\n\nexport const PriorityLevel = z.enum(['critical', 'high', 'medium', 'low', 'ignore']);\nexport type PriorityLevel = z.infer<typeof PriorityLevel>;\n\nexport const PackageConfig = z.object({\n path: z.string(),\n priority: PriorityLevel,\n include: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n});\nexport type PackageConfig = z.infer<typeof PackageConfig>;\n\nexport const MonorepoConfig = z.object({\n detection: z.enum(['auto', 'explicit']),\n packages: z.array(PackageConfig).optional(),\n crossPackageAnalysis: z.boolean().default(true),\n});\nexport type MonorepoConfig = z.infer<typeof MonorepoConfig>;\n\nexport const WhiteroseConfig = z.object({\n version: z.string().default('1'),\n provider: ProviderType.default('claude-code'),\n providerFallback: z.array(ProviderType).optional(),\n\n // Scan settings\n include: z.array(z.string()).default(['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx']),\n exclude: z.array(z.string()).default(['node_modules', 'dist', 'build', '.next', 'coverage']),\n\n // Priority areas\n priorities: z\n .record(z.string(), PriorityLevel)\n .default({}),\n\n // Bug categories to scan for\n categories: z.array(BugCategory).default([\n 'logic-error',\n 'security',\n 'async-race-condition',\n 'edge-case',\n 'null-reference',\n ]),\n\n // Confidence threshold for reporting\n minConfidence: ConfidenceLevel.default('low'),\n\n // Monorepo settings\n monorepo: MonorepoConfig.optional(),\n\n // Static analysis integration\n staticAnalysis: z.object({\n typescript: z.boolean().default(true),\n eslint: z.boolean().default(true),\n }).default({}),\n\n // Output settings\n output: z.object({\n sarif: z.boolean().default(true),\n markdown: z.boolean().default(true),\n sarifPath: z.string().default('.whiterose/reports'),\n markdownPath: z.string().default('BUGS.md'),\n }).default({}),\n});\nexport type WhiteroseConfig = z.infer<typeof WhiteroseConfig>;\n\n// ─────────────────────────────────────────────────────────────\n// Intent & Contract Types\n// ─────────────────────────────────────────────────────────────\n\nexport const BehavioralContract = z.object({\n function: z.string(),\n file: z.string(),\n inputs: z.array(\n z.object({\n name: z.string(),\n type: z.string(),\n constraints: z.string().optional(),\n })\n ),\n outputs: z.object({\n type: z.string(),\n constraints: z.string().optional(),\n }),\n invariants: z.array(z.string()),\n sideEffects: z.array(z.string()),\n throws: z.array(z.string()).optional(),\n});\nexport type BehavioralContract = z.infer<typeof BehavioralContract>;\n\nexport const FeatureIntent = z.object({\n name: z.string(),\n description: z.string(),\n priority: PriorityLevel,\n constraints: z.array(z.string()),\n relatedFiles: z.array(z.string()),\n});\nexport type FeatureIntent = z.infer<typeof FeatureIntent>;\n\nexport const CodebaseUnderstanding = z.object({\n version: z.string(),\n generatedAt: z.string().datetime(),\n summary: z.object({\n framework: z.string().optional(),\n language: z.string(),\n type: z.string(), // e-commerce, saas, api, etc.\n description: z.string(),\n }),\n features: z.array(FeatureIntent),\n contracts: z.array(BehavioralContract),\n dependencies: z.record(z.string(), z.string()),\n structure: z.object({\n totalFiles: z.number(),\n totalLines: z.number(),\n packages: z.array(z.string()).optional(),\n }),\n});\nexport type CodebaseUnderstanding = z.infer<typeof CodebaseUnderstanding>;\n\n// ─────────────────────────────────────────────────────────────\n// Cache Types\n// ─────────────────────────────────────────────────────────────\n\nexport const FileHash = z.object({\n path: z.string(),\n hash: z.string(),\n lastModified: z.string().datetime(),\n});\nexport type FileHash = z.infer<typeof FileHash>;\n\nexport const CacheState = z.object({\n version: z.string(),\n lastFullScan: z.string().datetime().optional(),\n lastIncrementalScan: z.string().datetime().optional(),\n fileHashes: z.array(FileHash),\n});\nexport type CacheState = z.infer<typeof CacheState>;\n\n// ─────────────────────────────────────────────────────────────\n// Provider Types\n// ─────────────────────────────────────────────────────────────\n\nexport interface AnalysisContext {\n files: string[];\n understanding: CodebaseUnderstanding;\n config: WhiteroseConfig;\n staticAnalysisResults: StaticAnalysisResult[];\n}\n\nexport interface StaticAnalysisResult {\n tool: 'typescript' | 'eslint';\n file: string;\n line: number;\n message: string;\n severity: 'error' | 'warning' | 'info';\n code?: string;\n}\n\nexport interface LLMProvider {\n name: ProviderType;\n detect(): Promise<boolean>;\n isAvailable(): Promise<boolean>;\n analyze(context: AnalysisContext): Promise<Bug[]>;\n adversarialValidate(bug: Bug, context: AnalysisContext): Promise<AdversarialResult>;\n generateUnderstanding(files: string[], existingDocsSummary?: string): Promise<CodebaseUnderstanding>;\n}\n\nexport interface AdversarialResult {\n survived: boolean;\n counterArguments: string[];\n adjustedConfidence?: ConfidenceScore;\n}\n\n// ─────────────────────────────────────────────────────────────\n// Scan Result Types\n// ─────────────────────────────────────────────────────────────\n\nexport const ScanResult = z.object({\n id: z.string(),\n timestamp: z.string().datetime(),\n scanType: z.enum(['full', 'incremental']),\n filesScanned: z.number(),\n filesChanged: z.number().optional(),\n duration: z.number(), // ms\n bugs: z.array(Bug),\n summary: z.object({\n critical: z.number(),\n high: z.number(),\n medium: z.number(),\n low: z.number(),\n total: z.number(),\n }),\n});\nexport type ScanResult = z.infer<typeof ScanResult>;\n","/**\n * Validation utilities for safe JSON parsing with Zod schemas\n */\n\nimport { z, ZodSchema, ZodError } from 'zod';\nimport {\n Bug,\n CodebaseUnderstanding,\n CacheState,\n WhiteroseConfig,\n AdversarialResult,\n BugSeverity,\n BugCategory,\n ConfidenceLevel,\n} from '../types.js';\n\n/**\n * Safe JSON parse with Zod validation\n * Returns undefined if parsing or validation fails\n */\nexport function safeParseJson<T>(\n json: string,\n schema: ZodSchema<T>\n): { success: true; data: T } | { success: false; error: string } {\n try {\n const parsed = JSON.parse(json);\n const result = schema.safeParse(parsed);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: formatZodError(result.error) };\n } catch (error: any) {\n return { success: false, error: error.message || 'Invalid JSON' };\n }\n}\n\n/**\n * Format Zod error for logging\n */\nexport function formatZodError(error: ZodError): string {\n return error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join(', ');\n}\n\n/**\n * Partial Bug schema for LLM output (may not have all fields)\n * LLM output often lacks id, createdAt, etc.\n * Made very lenient to handle varied LLM responses.\n */\nexport const PartialBugFromLLM = z.object({\n file: z.string(),\n line: z.number(),\n endLine: z.number().optional(),\n title: z.string(),\n description: z.string().optional().default(''),\n severity: BugSeverity.optional().default('medium'),\n category: BugCategory.optional().default('logic-error'),\n codePath: z.array(z.object({\n step: z.number().optional(),\n file: z.string().optional(),\n line: z.number().optional(),\n code: z.string().optional().default(''),\n explanation: z.string().optional().default(''),\n })).optional().default([]),\n evidence: z.array(z.string()).optional().default([]),\n suggestedFix: z.string().optional(),\n confidence: z.object({\n overall: ConfidenceLevel.optional().default('medium'),\n codePathValidity: z.number().min(0).max(1).optional().default(0.5),\n reachability: z.number().min(0).max(1).optional().default(0.5),\n intentViolation: z.boolean().optional().default(false),\n staticToolSignal: z.boolean().optional().default(false),\n adversarialSurvived: z.boolean().optional().default(false),\n }).optional().default({}),\n});\nexport type PartialBugFromLLM = z.infer<typeof PartialBugFromLLM>;\n\n/**\n * Partial Understanding schema for LLM output\n */\nexport const PartialUnderstandingFromLLM = z.object({\n summary: z.object({\n type: z.string().optional().default('unknown'),\n framework: z.string().optional(),\n language: z.string().optional().default('unknown'),\n description: z.string().optional().default(''),\n }).optional().default({}),\n features: z.array(z.object({\n name: z.string(),\n description: z.string(),\n priority: z.enum(['critical', 'high', 'medium', 'low', 'ignore']).optional().default('medium'),\n constraints: z.array(z.string()).optional().default([]),\n relatedFiles: z.array(z.string()).optional().default([]),\n })).optional().default([]),\n contracts: z.array(z.object({\n function: z.string(),\n file: z.string(),\n inputs: z.array(z.object({\n name: z.string(),\n type: z.string(),\n constraints: z.string().optional(),\n })).optional().default([]),\n outputs: z.object({\n type: z.string(),\n constraints: z.string().optional(),\n }).optional().default({ type: 'unknown' }),\n invariants: z.array(z.string()).optional().default([]),\n sideEffects: z.array(z.string()).optional().default([]),\n throws: z.array(z.string()).optional(),\n })).optional().default([]),\n dependencies: z.record(z.string(), z.string()).optional().default({}),\n});\nexport type PartialUnderstandingFromLLM = z.infer<typeof PartialUnderstandingFromLLM>;\n\n/**\n * Adversarial validation result schema\n */\nexport const AdversarialResultSchema = z.object({\n survived: z.boolean(),\n counterArguments: z.array(z.string()).optional().default([]),\n confidence: ConfidenceLevel.optional(),\n});\n\n/**\n * SARIF schema (simplified for whiterose needs)\n */\nexport const SarifResultSchema = z.object({\n $schema: z.string().optional(),\n version: z.string(),\n runs: z.array(z.object({\n tool: z.object({\n driver: z.object({\n name: z.string(),\n version: z.string().optional(),\n informationUri: z.string().optional(),\n rules: z.array(z.any()).optional(),\n }),\n }),\n results: z.array(z.object({\n ruleId: z.string().optional(),\n level: z.enum(['none', 'note', 'warning', 'error']).optional(),\n message: z.object({\n text: z.string(),\n }),\n locations: z.array(z.object({\n physicalLocation: z.object({\n artifactLocation: z.object({\n uri: z.string(),\n }),\n region: z.object({\n startLine: z.number(),\n endLine: z.number().optional(),\n }).optional(),\n }),\n })).optional(),\n })).optional().default([]),\n })),\n});\nexport type SarifResult = z.infer<typeof SarifResultSchema>;\n\n/**\n * GitHub issue schema (from gh CLI output)\n */\nexport const GitHubIssueSchema = z.object({\n number: z.number(),\n title: z.string(),\n body: z.string().nullable(),\n state: z.string(),\n labels: z.array(z.object({\n name: z.string(),\n })).optional().default([]),\n url: z.string().optional(),\n});\nexport type GitHubIssue = z.infer<typeof GitHubIssueSchema>;\n\n/**\n * ESLint output schema\n */\nexport const ESLintOutputSchema = z.array(z.object({\n filePath: z.string(),\n messages: z.array(z.object({\n ruleId: z.string().nullable(),\n severity: z.number(),\n message: z.string(),\n line: z.number(),\n column: z.number(),\n })),\n errorCount: z.number(),\n warningCount: z.number(),\n}));\nexport type ESLintOutput = z.infer<typeof ESLintOutputSchema>;\n\n/**\n * Package.json schema (minimal)\n */\nexport const PackageJsonSchema = z.object({\n name: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n scripts: z.record(z.string(), z.string()).optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n devDependencies: z.record(z.string(), z.string()).optional(),\n workspaces: z.union([\n z.array(z.string()),\n z.object({ packages: z.array(z.string()) }),\n ]).optional(),\n});\nexport type PackageJson = z.infer<typeof PackageJsonSchema>;\n\n// Re-export schemas from types for convenience\nexport { Bug, CodebaseUnderstanding, CacheState, WhiteroseConfig };\n","import { execa, type ResultPromise } from 'execa';\nimport { readFileSync, existsSync } from 'fs';\nimport {\n LLMProvider,\n ProviderType,\n AnalysisContext,\n Bug,\n AdversarialResult,\n CodebaseUnderstanding,\n} from '../../types.js';\nimport { isProviderAvailable, getProviderCommand } from '../detect.js';\nimport { generateBugId } from '../../core/utils.js';\nimport {\n safeParseJson,\n PartialBugFromLLM,\n PartialUnderstandingFromLLM,\n AdversarialResultSchema,\n} from '../../core/validation.js';\n\n// Callback for streaming progress updates\ntype ProgressCallback = (message: string) => void;\ntype BugFoundCallback = (bug: Bug) => void;\n\n// Protocol markers for parsing agent output\nconst MARKERS = {\n SCANNING: '###SCANNING:',\n BUG: '###BUG:',\n UNDERSTANDING: '###UNDERSTANDING:',\n COMPLETE: '###COMPLETE',\n ERROR: '###ERROR:',\n};\n\nexport class ClaudeCodeProvider implements LLMProvider {\n name: ProviderType = 'claude-code';\n\n private progressCallback?: ProgressCallback;\n private bugFoundCallback?: BugFoundCallback;\n private currentProcess?: ResultPromise;\n private unsafeMode = false;\n\n async detect(): Promise<boolean> {\n return isProviderAvailable('claude-code');\n }\n\n async isAvailable(): Promise<boolean> {\n return isProviderAvailable('claude-code');\n }\n\n /**\n * Enable unsafe mode (--dangerously-skip-permissions).\n * WARNING: This bypasses Claude's permission prompts and should only be used\n * when you trust the codebase being analyzed.\n */\n setUnsafeMode(enabled: boolean): void {\n this.unsafeMode = enabled;\n }\n\n isUnsafeMode(): boolean {\n return this.unsafeMode;\n }\n\n setProgressCallback(callback: ProgressCallback): void {\n this.progressCallback = callback;\n }\n\n setBugFoundCallback(callback: BugFoundCallback): void {\n this.bugFoundCallback = callback;\n }\n\n private reportProgress(message: string): void {\n if (this.progressCallback) {\n this.progressCallback(message);\n }\n }\n\n private reportBug(bug: Bug): void {\n if (this.bugFoundCallback) {\n this.bugFoundCallback(bug);\n }\n }\n\n // Cancel any running analysis\n cancel(): void {\n if (this.currentProcess) {\n this.currentProcess.kill();\n this.currentProcess = undefined;\n }\n }\n\n async analyze(context: AnalysisContext): Promise<Bug[]> {\n const { files, understanding } = context;\n\n if (files.length === 0) {\n return [];\n }\n\n const cwd = process.cwd();\n const bugs: Bug[] = [];\n let bugIndex = 0;\n\n const prompt = this.buildAgenticAnalysisPrompt(understanding);\n\n this.reportProgress('Starting agentic analysis...');\n\n try {\n await this.runAgenticClaude(prompt, cwd, {\n onScanning: (file) => {\n this.reportProgress(`Scanning: ${file}`);\n },\n onBugFound: (bugData) => {\n const bug = this.parseBugData(bugData, bugIndex++, files);\n if (bug) {\n bugs.push(bug);\n this.reportBug(bug);\n this.reportProgress(`Found: ${bug.title} (${bug.severity})`);\n }\n },\n onComplete: () => {\n this.reportProgress(`Analysis complete. Found ${bugs.length} bugs.`);\n },\n onError: (error) => {\n this.reportProgress(`Error: ${error}`);\n },\n });\n } catch (error: any) {\n if (error.message?.includes('ENOENT')) {\n throw new Error('Claude CLI not found. Install it with: npm install -g @anthropic-ai/claude-code');\n }\n throw error;\n }\n\n return bugs;\n }\n\n async adversarialValidate(bug: Bug, _context: AnalysisContext): Promise<AdversarialResult> {\n // Read the file containing the bug for context\n let fileContent = '';\n try {\n if (existsSync(bug.file)) {\n fileContent = readFileSync(bug.file, 'utf-8');\n const lines = fileContent.split('\\n');\n const start = Math.max(0, bug.line - 20);\n const end = Math.min(lines.length, (bug.endLine || bug.line) + 20);\n fileContent = lines.slice(start, end).join('\\n');\n }\n } catch {\n // File read failed, continue without content\n }\n\n const prompt = this.buildAdversarialPrompt(bug, fileContent);\n const result = await this.runSimpleClaude(prompt, process.cwd());\n\n return this.parseAdversarialResponse(result, bug);\n }\n\n async generateUnderstanding(files: string[], existingDocsSummary?: string): Promise<CodebaseUnderstanding> {\n const cwd = process.cwd();\n\n this.reportProgress(`Starting codebase analysis (${files.length} files)...`);\n\n const prompt = this.buildAgenticUnderstandingPrompt(existingDocsSummary);\n let understandingJson = '';\n\n try {\n await this.runAgenticClaude(prompt, cwd, {\n onScanning: (file) => {\n this.reportProgress(`Examining: ${file}`);\n },\n onUnderstanding: (json) => {\n understandingJson = json;\n },\n onComplete: () => {\n this.reportProgress('Understanding complete.');\n },\n onError: (error) => {\n this.reportProgress(`Error: ${error}`);\n },\n });\n\n return this.parseUnderstandingResponse(understandingJson, files);\n } catch (error: any) {\n if (error.message?.includes('ENOENT')) {\n throw new Error('Claude CLI not found. Install it with: npm install -g @anthropic-ai/claude-code');\n }\n throw error;\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Agentic Prompts\n // ─────────────────────────────────────────────────────────────\n\n private buildAgenticAnalysisPrompt(understanding: CodebaseUnderstanding): string {\n return `You are whiterose, an expert bug hunter. Your task is to explore this codebase and find real bugs.\n\nCODEBASE CONTEXT:\n- Type: ${understanding.summary.type}\n- Framework: ${understanding.summary.framework || 'Unknown'}\n- Description: ${understanding.summary.description}\n\nYOUR TASK:\n1. Explore the codebase by reading files\n2. Look for bugs in these categories:\n - Logic errors (off-by-one, wrong operators, incorrect conditions)\n - Null/undefined dereference\n - Security vulnerabilities (injection, auth bypass, XSS)\n - Async/race conditions (missing await, unhandled promises)\n - Edge cases (empty arrays, zero values, boundaries)\n - Resource leaks (unclosed connections)\n\nPROTOCOL - You MUST output these markers:\n- Before reading each file, output: ${MARKERS.SCANNING}<filepath>\n- When you find a bug, output: ${MARKERS.BUG}<json>\n- When completely done, output: ${MARKERS.COMPLETE}\n- If you encounter an error, output: ${MARKERS.ERROR}<message>\n\nBUG JSON FORMAT:\n${MARKERS.BUG}{\"file\":\"src/api/users.ts\",\"line\":42,\"title\":\"Null dereference in getUserById\",\"description\":\"...\",\"severity\":\"high\",\"category\":\"null-reference\",\"evidence\":[\"...\"],\"suggestedFix\":\"...\"}\n\nIMPORTANT:\n- Only report bugs you have HIGH confidence in\n- Include exact line numbers\n- Focus on real bugs, not style issues\n- Explore systematically - check API routes, data handling, auth flows\n\nNow explore this codebase and find bugs. Start by reading the main entry points.`;\n }\n\n private buildAgenticUnderstandingPrompt(existingDocsSummary?: string): string {\n const docsSection = existingDocsSummary\n ? `\\n\\nEXISTING DOCUMENTATION (merge this with your exploration):\\n${existingDocsSummary}\\n`\n : '';\n\n return `You are whiterose. Your task is to understand this codebase.\n${docsSection}\nYOUR TASK:\n1. Review the existing documentation above (if any)\n2. Explore the codebase structure to fill in gaps\n3. Read key files (main entry points, config files, core modules)\n4. Build a comprehensive understanding merging docs + code exploration\n5. Identify main features, business rules, and behavioral contracts\n\nPROTOCOL - You MUST output these markers:\n- Before reading each file, output: ${MARKERS.SCANNING}<filepath>\n- When you have full understanding, output: ${MARKERS.UNDERSTANDING}<json>\n- When completely done, output: ${MARKERS.COMPLETE}\n\nUNDERSTANDING JSON FORMAT:\n${MARKERS.UNDERSTANDING}{\n \"summary\": {\n \"type\": \"api|web-app|cli|library|etc\",\n \"framework\": \"next.js|express|react|etc\",\n \"language\": \"typescript|javascript\",\n \"description\": \"2-3 sentence description\"\n },\n \"features\": [\n {\"name\": \"Feature\", \"description\": \"What it does\", \"priority\": \"critical|high|medium|low\", \"constraints\": [\"business rule 1\", \"invariant 2\"], \"relatedFiles\": [\"path/to/file.ts\"]}\n ],\n \"contracts\": [\n {\"function\": \"functionName\", \"file\": \"path/to/file.ts\", \"inputs\": [], \"outputs\": {}, \"invariants\": [\"must do X before Y\"], \"sideEffects\": [], \"throws\": []}\n ]\n}\n\nIMPORTANT:\n- Merge existing documentation with what you discover in the code\n- Focus on business rules and invariants (what MUST be true)\n- Identify critical paths (checkout, auth, payments, etc.)\n- Document behavioral contracts for important functions\n\nNow explore this codebase and build understanding.`;\n }\n\n private buildAdversarialPrompt(bug: Bug, fileContent: string): string {\n return `You are a skeptical code reviewer. Try to DISPROVE this bug report.\n\nREPORTED BUG:\n- File: ${bug.file}:${bug.line}\n- Title: ${bug.title}\n- Description: ${bug.description}\n- Severity: ${bug.severity}\n\nCODE CONTEXT:\n${fileContent}\n\nTry to prove this is NOT a bug by finding:\n1. Guards or validation that prevents this\n2. Type system guarantees\n3. Framework behavior that handles this\n4. Unreachable code paths\n\nOUTPUT AS JSON:\n{\"survived\": true/false, \"counterArguments\": [\"reason 1\"], \"confidence\": \"high/medium/low\", \"explanation\": \"...\"}\n\nSet \"survived\": true if you CANNOT disprove it (it's a real bug).`;\n }\n\n // ─────────────────────────────────────────────────────────────\n // Claude CLI Execution (Agentic Mode)\n // ─────────────────────────────────────────────────────────────\n\n private async runAgenticClaude(\n prompt: string,\n cwd: string,\n callbacks: {\n onScanning?: (file: string) => void;\n onBugFound?: (bugJson: string) => void;\n onUnderstanding?: (json: string) => void;\n onComplete?: () => void;\n onError?: (error: string) => void;\n }\n ): Promise<void> {\n const claudeCommand = getProviderCommand('claude-code');\n\n // Build command arguments\n const args = ['--verbose', '-p', prompt];\n\n // Only add --dangerously-skip-permissions if explicitly enabled\n // This flag bypasses Claude's safety prompts - use with caution\n if (this.unsafeMode) {\n args.unshift('--dangerously-skip-permissions');\n }\n\n this.currentProcess = execa(\n claudeCommand,\n args,\n {\n cwd,\n env: {\n ...process.env,\n NO_COLOR: '1',\n },\n reject: false,\n }\n );\n\n // Buffer for accumulating output\n let buffer = '';\n\n // Process streaming output\n this.currentProcess.stdout?.on('data', (chunk: Buffer) => {\n buffer += chunk.toString();\n\n // Process complete lines\n const lines = buffer.split('\\n');\n buffer = lines.pop() || ''; // Keep incomplete line in buffer\n\n for (const line of lines) {\n this.processAgentOutput(line, callbacks);\n }\n });\n\n this.currentProcess.stderr?.on('data', (chunk: Buffer) => {\n // Log stderr for debugging but don't treat as error\n const text = chunk.toString().trim();\n if (text && !text.includes('Loading')) {\n // Could log to debug\n }\n });\n\n await this.currentProcess;\n\n // Process any remaining buffer\n if (buffer.trim()) {\n this.processAgentOutput(buffer, callbacks);\n }\n\n this.currentProcess = undefined;\n }\n\n private processAgentOutput(\n line: string,\n callbacks: {\n onScanning?: (file: string) => void;\n onBugFound?: (bugJson: string) => void;\n onUnderstanding?: (json: string) => void;\n onComplete?: () => void;\n onError?: (error: string) => void;\n }\n ): void {\n const trimmed = line.trim();\n\n if (trimmed.startsWith(MARKERS.SCANNING)) {\n const file = trimmed.slice(MARKERS.SCANNING.length).trim();\n callbacks.onScanning?.(file);\n } else if (trimmed.startsWith(MARKERS.BUG)) {\n const json = trimmed.slice(MARKERS.BUG.length).trim();\n callbacks.onBugFound?.(json);\n } else if (trimmed.startsWith(MARKERS.UNDERSTANDING)) {\n const json = trimmed.slice(MARKERS.UNDERSTANDING.length).trim();\n callbacks.onUnderstanding?.(json);\n } else if (trimmed.startsWith(MARKERS.COMPLETE)) {\n callbacks.onComplete?.();\n } else if (trimmed.startsWith(MARKERS.ERROR)) {\n const error = trimmed.slice(MARKERS.ERROR.length).trim();\n callbacks.onError?.(error);\n }\n }\n\n // Simple non-agentic mode for short prompts (adversarial validation)\n private async runSimpleClaude(prompt: string, cwd: string): Promise<string> {\n const claudeCommand = getProviderCommand('claude-code');\n\n try {\n const { stdout } = await execa(\n claudeCommand,\n ['-p', prompt, '--output-format', 'text'],\n {\n cwd,\n timeout: 120000, // 2 min for simple prompts\n env: { ...process.env, NO_COLOR: '1' },\n }\n );\n return stdout;\n } catch (error: any) {\n if (error.stdout) return error.stdout;\n throw error;\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Response Parsers\n // ─────────────────────────────────────────────────────────────\n\n private parseBugData(json: string, index: number, files: string[]): Bug | null {\n // Use Zod validation for safe parsing\n const result = safeParseJson(json, PartialBugFromLLM);\n if (!result.success) {\n return null;\n }\n\n const data = result.data;\n\n // Resolve file path\n let filePath = data.file;\n if (!filePath.startsWith('/')) {\n const match = files.find(f => f.endsWith(filePath) || f.includes(filePath));\n if (match) filePath = match;\n }\n\n return {\n id: generateBugId(index),\n title: String(data.title).slice(0, 100),\n description: String(data.description || ''),\n file: filePath,\n line: data.line,\n endLine: data.endLine,\n severity: data.severity ?? 'medium',\n category: data.category ?? 'logic-error',\n confidence: {\n overall: data.confidence?.overall || 'medium',\n codePathValidity: data.confidence?.codePathValidity ?? 0.8,\n reachability: data.confidence?.reachability ?? 0.8,\n intentViolation: data.confidence?.intentViolation ?? false,\n staticToolSignal: data.confidence?.staticToolSignal ?? false,\n adversarialSurvived: data.confidence?.adversarialSurvived ?? false,\n },\n codePath: (data.codePath || []).map((step, idx) => ({\n step: idx + 1,\n file: step.file || filePath,\n line: step.line || data.line,\n code: step.code || '',\n explanation: step.explanation || '',\n })),\n evidence: data.evidence || [],\n suggestedFix: data.suggestedFix,\n createdAt: new Date().toISOString(),\n };\n }\n\n private parseAdversarialResponse(response: string, bug: Bug): AdversarialResult {\n const json = this.extractJson(response);\n if (!json) {\n return { survived: true, counterArguments: [] };\n }\n\n // Use Zod validation for safe parsing\n const result = safeParseJson(json, AdversarialResultSchema);\n if (!result.success) {\n // Conservative: if parsing fails, assume bug survived\n return { survived: true, counterArguments: [] };\n }\n\n const parsed = result.data;\n const survived = parsed.survived !== false;\n\n return {\n survived,\n counterArguments: parsed.counterArguments || [],\n adjustedConfidence: survived\n ? {\n ...bug.confidence,\n overall: parsed.confidence || bug.confidence.overall,\n adversarialSurvived: true,\n }\n : undefined,\n };\n }\n\n private parseUnderstandingResponse(response: string, files: string[]): CodebaseUnderstanding {\n // Count total lines from a sample (needed for fallback and success cases)\n let totalLines = 0;\n for (const file of files.slice(0, 50)) {\n try {\n const content = readFileSync(file, 'utf-8');\n totalLines += content.split('\\n').length;\n } catch {\n // Skip unreadable files\n }\n }\n\n const json = this.extractJson(response);\n if (!json) {\n // Return minimal understanding when no JSON found\n return {\n version: '1',\n generatedAt: new Date().toISOString(),\n summary: {\n type: 'unknown',\n language: 'unknown',\n description: 'Failed to analyze codebase: No JSON found in response',\n },\n features: [],\n contracts: [],\n dependencies: {},\n structure: { totalFiles: files.length, totalLines },\n };\n }\n\n // Use Zod validation for safe parsing\n const result = safeParseJson(json, PartialUnderstandingFromLLM);\n\n if (!result.success) {\n // Return minimal understanding on validation failure\n return {\n version: '1',\n generatedAt: new Date().toISOString(),\n summary: {\n type: 'unknown',\n language: 'unknown',\n description: `Failed to analyze codebase: ${result.error}`,\n },\n features: [],\n contracts: [],\n dependencies: {},\n structure: { totalFiles: files.length, totalLines },\n };\n }\n\n const parsed = result.data;\n\n return {\n version: '1',\n generatedAt: new Date().toISOString(),\n summary: {\n type: parsed.summary?.type || 'unknown',\n framework: parsed.summary?.framework || undefined,\n language: parsed.summary?.language || 'typescript',\n description: parsed.summary?.description || 'No description available',\n },\n features: (parsed.features || []).map((f) => ({\n name: f.name || 'Unknown',\n description: f.description || '',\n priority: f.priority || 'medium',\n constraints: f.constraints || [],\n relatedFiles: f.relatedFiles || [],\n })),\n contracts: (parsed.contracts || []).map((c) => ({\n function: c.function || 'unknown',\n file: c.file || 'unknown',\n inputs: c.inputs || [],\n outputs: c.outputs || { type: 'unknown' },\n invariants: c.invariants || [],\n sideEffects: c.sideEffects || [],\n throws: c.throws,\n })),\n dependencies: {},\n structure: {\n totalFiles: files.length,\n totalLines,\n },\n };\n }\n\n // ─────────────────────────────────────────────────────────────\n // Utilities\n // ─────────────────────────────────────────────────────────────\n\n private extractJson(text: string): string | null {\n // Try markdown code blocks\n const codeBlockMatch = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (codeBlockMatch) {\n return codeBlockMatch[1].trim();\n }\n\n // Try raw JSON array\n const arrayMatch = text.match(/\\[[\\s\\S]*\\]/);\n if (arrayMatch) {\n return arrayMatch[0];\n }\n\n // Try raw JSON object\n const objectMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (objectMatch) {\n return objectMatch[0];\n }\n\n return null;\n }\n}\n","import { execa } from 'execa';\nimport { readFileSync, existsSync, writeFileSync, mkdtempSync, rmSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { tmpdir } from 'os';\nimport {\n LLMProvider,\n ProviderType,\n AnalysisContext,\n Bug,\n AdversarialResult,\n CodebaseUnderstanding,\n BugSeverity,\n BugCategory,\n ConfidenceLevel,\n CodePathStep,\n} from '../../types.js';\nimport { isProviderAvailable, getProviderCommand } from '../detect.js';\nimport { generateBugId } from '../../core/utils.js';\n\nconst MAX_FILE_SIZE = 50000;\nconst MAX_TOTAL_CONTEXT = 200000;\nconst AIDER_TIMEOUT = 300000;\n\nexport class AiderProvider implements LLMProvider {\n name: ProviderType = 'aider';\n\n async detect(): Promise<boolean> {\n return isProviderAvailable('aider');\n }\n\n async isAvailable(): Promise<boolean> {\n return isProviderAvailable('aider');\n }\n\n async analyze(context: AnalysisContext): Promise<Bug[]> {\n const { files, understanding, staticAnalysisResults } = context;\n\n if (files.length === 0) {\n return [];\n }\n\n // Read file contents with size limits\n const fileContents = this.readFilesWithLimit(files, MAX_TOTAL_CONTEXT);\n\n // Build the analysis prompt\n const prompt = this.buildAnalysisPrompt(fileContents, understanding, staticAnalysisResults);\n\n // Run aider with the prompt\n const result = await this.runAider(prompt, files, dirname(files[0]));\n\n // Parse the response into bugs\n return this.parseAnalysisResponse(result, files);\n }\n\n async adversarialValidate(bug: Bug, _context: AnalysisContext): Promise<AdversarialResult> {\n let fileContent = '';\n try {\n if (existsSync(bug.file)) {\n fileContent = readFileSync(bug.file, 'utf-8');\n const lines = fileContent.split('\\n');\n const start = Math.max(0, bug.line - 20);\n const end = Math.min(lines.length, (bug.endLine || bug.line) + 20);\n fileContent = lines.slice(start, end).join('\\n');\n }\n } catch {\n // Continue without content\n }\n\n const prompt = this.buildAdversarialPrompt(bug, fileContent);\n const result = await this.runAider(prompt, [bug.file], dirname(bug.file));\n\n return this.parseAdversarialResponse(result, bug);\n }\n\n async generateUnderstanding(files: string[], _existingDocsSummary?: string): Promise<CodebaseUnderstanding> {\n const sampledFiles = this.prioritizeFiles(files, 40);\n const fileContents = this.readFilesWithLimit(sampledFiles, MAX_TOTAL_CONTEXT);\n\n let packageJson: Record<string, unknown> | null = null;\n const packageJsonPath = files.find((f) => f.endsWith('package.json'));\n if (packageJsonPath) {\n try {\n packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n } catch {\n // Ignore\n }\n }\n\n const prompt = this.buildUnderstandingPrompt(files.length, fileContents, packageJson);\n const result = await this.runAider(prompt, sampledFiles.slice(0, 5), process.cwd());\n\n return this.parseUnderstandingResponse(result, files);\n }\n\n // ─────────────────────────────────────────────────────────────\n // File Reading Helpers\n // ─────────────────────────────────────────────────────────────\n\n private readFilesWithLimit(\n files: string[],\n maxTotal: number\n ): Array<{ path: string; content: string }> {\n const result: Array<{ path: string; content: string }> = [];\n let totalSize = 0;\n\n for (const file of files) {\n if (totalSize >= maxTotal) break;\n\n try {\n if (!existsSync(file)) continue;\n\n let content = readFileSync(file, 'utf-8');\n\n if (content.length > MAX_FILE_SIZE) {\n content = content.slice(0, MAX_FILE_SIZE) + '\\n// ... truncated ...';\n }\n\n if (totalSize + content.length > maxTotal) {\n const remaining = maxTotal - totalSize;\n content = content.slice(0, remaining) + '\\n// ... truncated ...';\n }\n\n result.push({ path: file, content });\n totalSize += content.length;\n } catch {\n // Skip\n }\n }\n\n return result;\n }\n\n private prioritizeFiles(files: string[], count: number): string[] {\n if (files.length <= count) return files;\n\n const priorityPatterns: Array<{ pattern: RegExp; priority: number }> = [\n { pattern: /package\\.json$/, priority: 100 },\n { pattern: /tsconfig\\.json$/, priority: 90 },\n { pattern: /README\\.md$/i, priority: 80 },\n { pattern: /\\/index\\.(ts|js|tsx|jsx)$/, priority: 70 },\n { pattern: /\\/app\\.(ts|js|tsx|jsx)$/, priority: 70 },\n { pattern: /\\/main\\.(ts|js|tsx|jsx)$/, priority: 70 },\n { pattern: /\\/api\\//, priority: 60 },\n { pattern: /\\/routes?\\//, priority: 55 },\n { pattern: /\\/pages\\//, priority: 55 },\n { pattern: /\\/services?\\//, priority: 50 },\n { pattern: /\\.(ts|tsx)$/, priority: 30 },\n { pattern: /\\.(js|jsx)$/, priority: 20 },\n ];\n\n const scored = files.map((file) => {\n let score = 0;\n for (const { pattern, priority } of priorityPatterns) {\n if (pattern.test(file)) {\n score = Math.max(score, priority);\n }\n }\n return { file, score };\n });\n\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, count).map((s) => s.file);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Prompt Builders (similar to Claude Code but adapted for Aider)\n // ─────────────────────────────────────────────────────────────\n\n private buildAnalysisPrompt(\n fileContents: Array<{ path: string; content: string }>,\n understanding: CodebaseUnderstanding,\n staticResults: Array<{ tool: string; file: string; line: number; message: string }>\n ): string {\n const filesSection = fileContents\n .map((f) => `=== ${f.path} ===\\n${f.content}`)\n .join('\\n\\n');\n\n const staticSignals =\n staticResults.length > 0\n ? `\\nStatic analysis signals:\\n${staticResults\n .slice(0, 50)\n .map((r) => `- ${r.file}:${r.line}: ${r.message}`)\n .join('\\n')}`\n : '';\n\n return `Analyze the following code for bugs. This is a ${understanding.summary.type} application using ${understanding.summary.framework || 'no specific framework'}.\n\n${filesSection}\n${staticSignals}\n\nFind bugs in these categories:\n1. Logic errors (off-by-one, wrong operators)\n2. Null/undefined dereference\n3. Security vulnerabilities\n4. Async/race conditions\n5. Edge cases not handled\n\nOutput as JSON array ONLY:\n[{\"file\": \"path\", \"line\": 42, \"title\": \"Bug title\", \"description\": \"Description\", \"severity\": \"high\", \"category\": \"null-reference\", \"codePath\": [{\"step\": 1, \"file\": \"path\", \"line\": 40, \"code\": \"code\", \"explanation\": \"explanation\"}], \"evidence\": [\"evidence1\"], \"suggestedFix\": \"fix code\"}]\n\nIf no bugs found, output: []`;\n }\n\n private buildAdversarialPrompt(bug: Bug, fileContent: string): string {\n return `Try to DISPROVE this bug report:\n\nBug: ${bug.title}\nFile: ${bug.file}:${bug.line}\nDescription: ${bug.description}\n\nCode context:\n${fileContent}\n\nFind reasons this is NOT a bug (guards, type checks, etc).\n\nOutput JSON ONLY:\n{\"survived\": true/false, \"counterArguments\": [\"reason1\", \"reason2\"], \"confidence\": \"high/medium/low\"}`;\n }\n\n private buildUnderstandingPrompt(\n totalFiles: number,\n fileContents: Array<{ path: string; content: string }>,\n packageJson: Record<string, unknown> | null\n ): string {\n const filesSection = fileContents\n .map((f) => `=== ${f.path} ===\\n${f.content}`)\n .join('\\n\\n');\n\n const depsSection = packageJson\n ? `\\nDependencies: ${JSON.stringify((packageJson as any).dependencies || {})}`\n : '';\n\n return `Analyze this codebase (${totalFiles} total files).\n${depsSection}\n\n${filesSection}\n\nOutput JSON ONLY describing:\n{\n \"summary\": {\"type\": \"app-type\", \"framework\": \"framework\", \"language\": \"typescript\", \"description\": \"description\"},\n \"features\": [{\"name\": \"Feature\", \"description\": \"desc\", \"priority\": \"critical\", \"constraints\": [\"constraint\"], \"relatedFiles\": [\"file\"]}],\n \"contracts\": [{\"function\": \"funcName\", \"file\": \"file.ts\", \"inputs\": [{\"name\": \"param\", \"type\": \"string\"}], \"outputs\": {\"type\": \"Result\"}, \"invariants\": [\"rule\"], \"sideEffects\": [\"effect\"]}]\n}`;\n }\n\n // ─────────────────────────────────────────────────────────────\n // Aider CLI Execution\n // ─────────────────────────────────────────────────────────────\n\n private async runAider(prompt: string, files: string[], cwd: string): Promise<string> {\n // Create a temp file for the prompt\n const tempDir = mkdtempSync(join(tmpdir(), 'whiterose-'));\n const promptFile = join(tempDir, 'prompt.txt');\n\n try {\n writeFileSync(promptFile, prompt, 'utf-8');\n\n // Run aider in no-auto-commits mode with message from file\n const args = [\n '--no-auto-commits',\n '--no-git',\n '--yes',\n '--message-file', promptFile,\n ];\n\n // Add files to analyze\n for (const file of files.slice(0, 10)) {\n if (existsSync(file)) {\n args.push(file);\n }\n }\n\n const aiderCommand = getProviderCommand('aider');\n const { stdout, stderr } = await execa(aiderCommand, args, {\n cwd,\n timeout: AIDER_TIMEOUT,\n env: {\n ...process.env,\n NO_COLOR: '1',\n },\n reject: false,\n });\n\n return stdout || stderr || '';\n } catch (error: any) {\n if (error.stdout) {\n return error.stdout;\n }\n\n if (error.message?.includes('ENOENT')) {\n throw new Error('Aider not found. Install it with: pip install aider-chat');\n }\n\n throw new Error(`Aider failed: ${error.message}`);\n } finally {\n // Clean up temp files\n try {\n rmSync(tempDir, { recursive: true, force: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Response Parsers\n // ─────────────────────────────────────────────────────────────\n\n private parseAnalysisResponse(response: string, files: string[]): Bug[] {\n try {\n const json = this.extractJson(response);\n if (!json) return [];\n\n const parsed = JSON.parse(json);\n if (!Array.isArray(parsed)) return [];\n\n const bugs: Bug[] = [];\n\n for (let i = 0; i < parsed.length; i++) {\n const item = parsed[i];\n if (!item.file || !item.line || !item.title) continue;\n\n let filePath = item.file;\n if (!filePath.startsWith('/')) {\n const match = files.find((f) => f.endsWith(filePath) || f.includes(filePath));\n if (match) filePath = match;\n }\n\n const codePath: CodePathStep[] = (item.codePath || []).map(\n (step: any, idx: number) => ({\n step: step.step || idx + 1,\n file: step.file || filePath,\n line: step.line || item.line,\n code: step.code || '',\n explanation: step.explanation || '',\n })\n );\n\n bugs.push({\n id: generateBugId(i),\n title: String(item.title).slice(0, 100),\n description: String(item.description || ''),\n file: filePath,\n line: Number(item.line) || 0,\n endLine: item.endLine ? Number(item.endLine) : undefined,\n severity: this.parseSeverity(item.severity),\n category: this.parseCategory(item.category),\n confidence: {\n overall: 'medium' as ConfidenceLevel,\n codePathValidity: 0.75,\n reachability: 0.75,\n intentViolation: false,\n staticToolSignal: false,\n adversarialSurvived: false,\n },\n codePath,\n evidence: Array.isArray(item.evidence) ? item.evidence.map(String) : [],\n suggestedFix: item.suggestedFix ? String(item.suggestedFix) : undefined,\n createdAt: new Date().toISOString(),\n });\n }\n\n return bugs;\n } catch {\n return [];\n }\n }\n\n private parseAdversarialResponse(response: string, bug: Bug): AdversarialResult {\n try {\n const json = this.extractJson(response);\n if (!json) return { survived: true, counterArguments: [] };\n\n const parsed = JSON.parse(json);\n const survived = parsed.survived !== false;\n\n return {\n survived,\n counterArguments: Array.isArray(parsed.counterArguments)\n ? parsed.counterArguments.map(String)\n : [],\n adjustedConfidence: survived\n ? {\n ...bug.confidence,\n overall: this.parseConfidence(parsed.confidence),\n adversarialSurvived: true,\n }\n : undefined,\n };\n } catch {\n return { survived: true, counterArguments: [] };\n }\n }\n\n private parseUnderstandingResponse(\n response: string,\n files: string[]\n ): CodebaseUnderstanding {\n try {\n const json = this.extractJson(response);\n if (!json) throw new Error('No JSON found');\n\n const parsed = JSON.parse(json);\n\n let totalLines = 0;\n for (const file of files.slice(0, 50)) {\n try {\n totalLines += readFileSync(file, 'utf-8').split('\\n').length;\n } catch {\n // Skip\n }\n }\n\n return {\n version: '1',\n generatedAt: new Date().toISOString(),\n summary: {\n type: parsed.summary?.type || 'unknown',\n framework: parsed.summary?.framework,\n language: parsed.summary?.language || 'typescript',\n description: parsed.summary?.description || 'No description available',\n },\n features: (parsed.features || []).map((f: any) => ({\n name: f.name || 'Unknown',\n description: f.description || '',\n priority: f.priority || 'medium',\n constraints: Array.isArray(f.constraints) ? f.constraints : [],\n relatedFiles: Array.isArray(f.relatedFiles) ? f.relatedFiles : [],\n })),\n contracts: (parsed.contracts || []).map((c: any) => ({\n function: c.function || 'unknown',\n file: c.file || 'unknown',\n inputs: Array.isArray(c.inputs) ? c.inputs : [],\n outputs: c.outputs || { type: 'unknown' },\n invariants: Array.isArray(c.invariants) ? c.invariants : [],\n sideEffects: Array.isArray(c.sideEffects) ? c.sideEffects : [],\n })),\n dependencies: {},\n structure: {\n totalFiles: files.length,\n totalLines,\n },\n };\n } catch {\n return {\n version: '1',\n generatedAt: new Date().toISOString(),\n summary: {\n type: 'unknown',\n language: 'typescript',\n description: 'Failed to analyze codebase',\n },\n features: [],\n contracts: [],\n dependencies: {},\n structure: {\n totalFiles: files.length,\n totalLines: 0,\n },\n };\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Utilities\n // ─────────────────────────────────────────────────────────────\n\n private extractJson(text: string): string | null {\n const codeBlockMatch = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (codeBlockMatch) return codeBlockMatch[1].trim();\n\n const arrayMatch = text.match(/\\[[\\s\\S]*\\]/);\n if (arrayMatch) return arrayMatch[0];\n\n const objectMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (objectMatch) return objectMatch[0];\n\n return null;\n }\n\n private parseSeverity(value: unknown): BugSeverity {\n const str = String(value).toLowerCase();\n if (['critical', 'high', 'medium', 'low'].includes(str)) {\n return str as BugSeverity;\n }\n return 'medium';\n }\n\n private parseCategory(value: unknown): BugCategory {\n const str = String(value).toLowerCase().replace(/_/g, '-');\n const validCategories: BugCategory[] = [\n 'logic-error', 'security', 'async-race-condition', 'edge-case',\n 'null-reference', 'type-coercion', 'resource-leak', 'intent-violation',\n ];\n\n if (validCategories.includes(str as BugCategory)) {\n return str as BugCategory;\n }\n\n if (str.includes('null') || str.includes('undefined')) return 'null-reference';\n if (str.includes('security')) return 'security';\n if (str.includes('async') || str.includes('race')) return 'async-race-condition';\n\n return 'logic-error';\n }\n\n private parseConfidence(value: unknown): ConfidenceLevel {\n const str = String(value).toLowerCase();\n if (['high', 'medium', 'low'].includes(str)) {\n return str as ConfidenceLevel;\n }\n return 'medium';\n }\n}\n","import { LLMProvider, ProviderType } from '../types.js';\nimport { ClaudeCodeProvider } from './adapters/claude-code.js';\nimport { AiderProvider } from './adapters/aider.js';\n\nconst providers: Record<ProviderType, () => LLMProvider> = {\n 'claude-code': () => new ClaudeCodeProvider(),\n aider: () => new AiderProvider(),\n codex: () => {\n throw new Error('Codex provider not yet implemented');\n },\n opencode: () => {\n throw new Error('OpenCode provider not yet implemented');\n },\n ollama: () => {\n throw new Error('Ollama provider not yet implemented');\n },\n gemini: () => {\n throw new Error('Gemini provider not yet implemented');\n },\n};\n\nexport async function getProvider(name: ProviderType): Promise<LLMProvider> {\n const factory = providers[name];\n if (!factory) {\n throw new Error(`Unknown provider: ${name}`);\n }\n\n const provider = factory();\n\n // Check if provider is available\n const available = await provider.isAvailable();\n if (!available) {\n throw new Error(`Provider ${name} is not available. Make sure it's installed and configured.`);\n }\n\n return provider;\n}\n\nexport { ClaudeCodeProvider, AiderProvider };\n","import fg from 'fast-glob';\nimport { createHash } from 'crypto';\nimport { readFileSync, existsSync, writeFileSync } from 'fs';\nimport { join, relative } from 'path';\nimport { WhiteroseConfig, FileHash, CacheState } from '../../types.js';\nimport { getDependentFiles as getDepGraphDependents } from '../dependencies.js';\n\nconst DEFAULT_INCLUDE = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'];\nconst DEFAULT_EXCLUDE = [\n 'node_modules/**',\n 'dist/**',\n 'build/**',\n '.next/**',\n 'coverage/**',\n '**/*.test.*',\n '**/*.spec.*',\n '**/*.d.ts',\n '.whiterose/**',\n];\n\nexport async function scanCodebase(cwd: string, config?: WhiteroseConfig): Promise<string[]> {\n const include = config?.include || DEFAULT_INCLUDE;\n const exclude = config?.exclude || DEFAULT_EXCLUDE;\n\n const files = await fg(include, {\n cwd,\n ignore: exclude,\n absolute: true,\n onlyFiles: true,\n });\n\n return files.sort();\n}\n\nexport function hashFile(filePath: string): string {\n const content = readFileSync(filePath, 'utf-8');\n return createHash('md5').update(content).digest('hex');\n}\n\nexport async function getChangedFiles(\n cwd: string,\n config: WhiteroseConfig\n): Promise<{ files: string[]; hashes: FileHash[] }> {\n const cachePath = join(cwd, '.whiterose', 'cache', 'file-hashes.json');\n\n // Get current files\n const currentFiles = await scanCodebase(cwd, config);\n\n // Load cached hashes\n let cachedState: CacheState = {\n version: '1',\n fileHashes: [],\n };\n\n if (existsSync(cachePath)) {\n cachedState = JSON.parse(readFileSync(cachePath, 'utf-8'));\n }\n\n const cachedHashes = new Map(cachedState.fileHashes.map((h) => [h.path, h.hash]));\n\n // Find changed files\n const changedFiles: string[] = [];\n const newHashes: FileHash[] = [];\n\n for (const file of currentFiles) {\n const relativePath = relative(cwd, file);\n const currentHash = hashFile(file);\n\n newHashes.push({\n path: relativePath,\n hash: currentHash,\n lastModified: new Date().toISOString(),\n });\n\n const cachedHash = cachedHashes.get(relativePath);\n if (!cachedHash || cachedHash !== currentHash) {\n changedFiles.push(file);\n }\n }\n\n // Update cache\n const newState: CacheState = {\n version: '1',\n lastIncrementalScan: new Date().toISOString(),\n lastFullScan: cachedState.lastFullScan,\n fileHashes: newHashes,\n };\n\n writeFileSync(cachePath, JSON.stringify(newState, null, 2), 'utf-8');\n\n return { files: changedFiles, hashes: newHashes };\n}\n\nexport async function getDependentFiles(\n changedFiles: string[],\n cwd: string,\n allFiles?: string[]\n): Promise<string[]> {\n // Use the dependency graph to find all files that depend on changed files\n return getDepGraphDependents(changedFiles, cwd, allFiles);\n}\n","import { CodebaseUnderstanding, BehavioralContract, FeatureIntent } from '../../types.js';\n\nexport function generateIntentDocument(understanding: CodebaseUnderstanding): string {\n const lines: string[] = [];\n\n // Header\n lines.push(`# App Intent: ${understanding.summary.type}`);\n lines.push('');\n lines.push(`> Generated by whiterose on ${new Date().toISOString()}`);\n lines.push('> Edit the sections above the line. Contracts below are auto-generated.');\n lines.push('');\n\n // Overview\n lines.push('## Overview');\n lines.push('');\n lines.push(understanding.summary.description);\n lines.push('');\n lines.push(`- **Framework:** ${understanding.summary.framework || 'None detected'}`);\n lines.push(`- **Language:** ${understanding.summary.language}`);\n lines.push(`- **Files:** ${understanding.structure.totalFiles}`);\n if (understanding.structure.packages?.length) {\n lines.push(`- **Packages:** ${understanding.structure.packages.join(', ')}`);\n }\n lines.push('');\n\n // Critical Features\n if (understanding.features.length > 0) {\n lines.push('## Critical Features');\n lines.push('');\n\n const criticalFeatures = understanding.features.filter((f) => f.priority === 'critical');\n const highFeatures = understanding.features.filter((f) => f.priority === 'high');\n const otherFeatures = understanding.features.filter(\n (f) => f.priority !== 'critical' && f.priority !== 'high'\n );\n\n for (const feature of criticalFeatures) {\n lines.push(formatFeature(feature, 'CRITICAL'));\n }\n\n if (highFeatures.length > 0) {\n lines.push('## High Priority Features');\n lines.push('');\n for (const feature of highFeatures) {\n lines.push(formatFeature(feature, 'HIGH'));\n }\n }\n\n if (otherFeatures.length > 0) {\n lines.push('## Other Features');\n lines.push('');\n for (const feature of otherFeatures) {\n lines.push(formatFeature(feature));\n }\n }\n }\n\n // Known Constraints (editable section)\n lines.push('## Known Constraints');\n lines.push('');\n lines.push('<!-- Add any known constraints or business rules here -->');\n lines.push('');\n lines.push('- (Add your constraints here)');\n lines.push('');\n\n // Areas of Concern (editable section)\n lines.push('## Areas of Concern');\n lines.push('');\n lines.push('<!-- Add files or areas that need extra scrutiny -->');\n lines.push('');\n lines.push('- (Add files that have had bugs before)');\n lines.push('');\n\n // Divider\n lines.push('---');\n lines.push('');\n lines.push('<!-- ⚠️ DO NOT EDIT BELOW THIS LINE - Auto-generated contracts -->');\n lines.push('');\n\n // Behavioral Contracts\n if (understanding.contracts.length > 0) {\n lines.push('## Behavioral Contracts');\n lines.push('');\n\n for (const contract of understanding.contracts) {\n lines.push(formatContract(contract));\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction formatFeature(feature: FeatureIntent, badge?: string): string {\n const lines: string[] = [];\n\n const badgeStr = badge ? ` [${badge}]` : '';\n lines.push(`### ${feature.name}${badgeStr}`);\n lines.push('');\n lines.push(feature.description);\n lines.push('');\n\n if (feature.constraints.length > 0) {\n lines.push('**Constraints:**');\n for (const constraint of feature.constraints) {\n lines.push(`- ${constraint}`);\n }\n lines.push('');\n }\n\n if (feature.relatedFiles.length > 0) {\n lines.push(`**Files:** \\`${feature.relatedFiles.join('`, `')}\\``);\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nfunction formatContract(contract: BehavioralContract): string {\n const lines: string[] = [];\n\n lines.push(`### \\`${contract.file}:${contract.function}()\\``);\n lines.push('');\n\n // Inputs\n if (contract.inputs.length > 0) {\n lines.push('**Inputs:**');\n for (const input of contract.inputs) {\n const constraints = input.constraints ? ` (${input.constraints})` : '';\n lines.push(`- \\`${input.name}\\`: ${input.type}${constraints}`);\n }\n lines.push('');\n }\n\n // Outputs\n lines.push('**Returns:** `' + contract.outputs.type + '`');\n if (contract.outputs.constraints) {\n lines.push(` - ${contract.outputs.constraints}`);\n }\n lines.push('');\n\n // Invariants\n if (contract.invariants.length > 0) {\n lines.push('**Invariants:**');\n for (const invariant of contract.invariants) {\n lines.push(`- ${invariant}`);\n }\n lines.push('');\n }\n\n // Side Effects\n if (contract.sideEffects.length > 0) {\n lines.push('**Side Effects:**');\n for (const effect of contract.sideEffects) {\n lines.push(`- ${effect}`);\n }\n lines.push('');\n }\n\n // Throws\n if (contract.throws && contract.throws.length > 0) {\n lines.push('**Throws:**');\n for (const t of contract.throws) {\n lines.push(`- ${t}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\ninterface ParsedIntent {\n knownConstraints: string[];\n areasOfConcern: string[];\n customFeatures: FeatureIntent[];\n overrides: {\n description?: string;\n framework?: string;\n };\n}\n\nexport function parseIntentDocument(content: string): ParsedIntent {\n const result: ParsedIntent = {\n knownConstraints: [],\n areasOfConcern: [],\n customFeatures: [],\n overrides: {},\n };\n\n // Split into sections\n const sections = splitIntoSections(content);\n\n // Parse Known Constraints section\n const constraintsSection = sections.find((s) => s.title.includes('Known Constraints'));\n if (constraintsSection) {\n result.knownConstraints = parseListItems(constraintsSection.content);\n }\n\n // Parse Areas of Concern section\n const concernsSection = sections.find((s) => s.title.includes('Areas of Concern'));\n if (concernsSection) {\n result.areasOfConcern = parseListItems(concernsSection.content);\n }\n\n // Parse Overview for overrides\n const overviewSection = sections.find((s) => s.title.includes('Overview'));\n if (overviewSection) {\n // Check for framework override\n const frameworkMatch = overviewSection.content.match(/\\*\\*Framework:\\*\\*\\s*(.+)/);\n if (frameworkMatch && !frameworkMatch[1].includes('None detected')) {\n result.overrides.framework = frameworkMatch[1].trim();\n }\n\n // Get first paragraph as description override\n const paragraphs = overviewSection.content.split(/\\n\\n+/);\n const firstParagraph = paragraphs[0]?.trim();\n if (firstParagraph && !firstParagraph.startsWith('-') && !firstParagraph.startsWith('*')) {\n result.overrides.description = firstParagraph;\n }\n }\n\n // Parse custom features (those added by user above the divider)\n const editableSections = content.split(/---+/)[0] || '';\n const featureSections = editableSections.match(/###\\s+([^\\n]+)\\n([\\s\\S]*?)(?=###|##|$)/g);\n\n if (featureSections) {\n for (const section of featureSections) {\n const feature = parseFeatureSection(section);\n if (feature && isUserAddedFeature(feature)) {\n result.customFeatures.push(feature);\n }\n }\n }\n\n return result;\n}\n\ninterface Section {\n title: string;\n content: string;\n}\n\nfunction splitIntoSections(content: string): Section[] {\n const sections: Section[] = [];\n const sectionRegex = /^##\\s+([^\\n]+)\\n([\\s\\S]*?)(?=^##\\s|$)/gm;\n\n let match;\n while ((match = sectionRegex.exec(content)) !== null) {\n sections.push({\n title: match[1].trim(),\n content: match[2].trim(),\n });\n }\n\n return sections;\n}\n\nfunction parseListItems(content: string): string[] {\n const items: string[] = [];\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const match = line.match(/^[-*]\\s+(.+)/);\n if (match) {\n const item = match[1].trim();\n // Skip placeholder items\n if (!item.includes('Add your') && !item.includes('Add files') && item !== '') {\n items.push(item);\n }\n }\n }\n\n return items;\n}\n\nfunction parseFeatureSection(section: string): FeatureIntent | null {\n const titleMatch = section.match(/###\\s+([^\\[\\n]+)(?:\\s*\\[([^\\]]+)\\])?/);\n if (!titleMatch) return null;\n\n const name = titleMatch[1].trim();\n const badge = titleMatch[2]?.trim().toLowerCase();\n\n // Get priority from badge\n let priority: 'critical' | 'high' | 'medium' | 'low' = 'medium';\n if (badge === 'critical') priority = 'critical';\n else if (badge === 'high') priority = 'high';\n else if (badge === 'low') priority = 'low';\n\n // Get description (first paragraph after title)\n const contentAfterTitle = section.replace(/###\\s+[^\\n]+\\n/, '').trim();\n const paragraphs = contentAfterTitle.split(/\\n\\n+/);\n const description = paragraphs[0]?.trim() || '';\n\n // Get constraints\n const constraints: string[] = [];\n const constraintsMatch = section.match(/\\*\\*Constraints:\\*\\*\\n((?:[-*]\\s+[^\\n]+\\n?)+)/);\n if (constraintsMatch) {\n const constraintLines = constraintsMatch[1].split('\\n');\n for (const line of constraintLines) {\n const match = line.match(/^[-*]\\s+(.+)/);\n if (match) {\n constraints.push(match[1].trim());\n }\n }\n }\n\n // Get related files\n const relatedFiles: string[] = [];\n const filesMatch = section.match(/\\*\\*Files:\\*\\*\\s*`([^`]+)`/);\n if (filesMatch) {\n const files = filesMatch[1].split(/`,\\s*`/);\n relatedFiles.push(...files.map((f) => f.replace(/`/g, '').trim()));\n }\n\n return {\n name,\n description,\n priority,\n constraints,\n relatedFiles,\n };\n}\n\nfunction isUserAddedFeature(feature: FeatureIntent): boolean {\n // Check if this looks like a user-added feature\n // User-added features typically have more specific constraints or descriptions\n return (\n feature.constraints.length > 0 ||\n feature.description.length > 50 ||\n feature.relatedFiles.length > 0\n );\n}\n\n/**\n * Merge parsed intent with existing understanding\n */\nexport function mergeIntentWithUnderstanding(\n understanding: CodebaseUnderstanding,\n parsedIntent: ParsedIntent\n): CodebaseUnderstanding {\n const merged = { ...understanding };\n\n // Apply overrides\n if (parsedIntent.overrides.description) {\n merged.summary = {\n ...merged.summary,\n description: parsedIntent.overrides.description,\n };\n }\n\n if (parsedIntent.overrides.framework) {\n merged.summary = {\n ...merged.summary,\n framework: parsedIntent.overrides.framework,\n };\n }\n\n // Add custom features\n if (parsedIntent.customFeatures.length > 0) {\n merged.features = [\n ...parsedIntent.customFeatures,\n ...merged.features.filter(\n (f) => !parsedIntent.customFeatures.some((cf) => cf.name === f.name)\n ),\n ];\n }\n\n // Add known constraints as invariants to relevant contracts\n if (parsedIntent.knownConstraints.length > 0) {\n // Add as global constraints (could be used for validation)\n (merged as any).globalConstraints = parsedIntent.knownConstraints;\n }\n\n // Store areas of concern for priority scanning\n if (parsedIntent.areasOfConcern.length > 0) {\n (merged as any).areasOfConcern = parsedIntent.areasOfConcern;\n }\n\n return merged;\n}\n","/**\n * Documentation Parser - Layer 0\n *\n * Reads existing documentation from the codebase and extracts\n * relevant information for understanding intent.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join, basename } from 'path';\nimport fg from 'fast-glob';\n\nexport interface ExistingDocs {\n readme: string | null;\n contributing: string | null;\n apiDocs: string[];\n changelog: string | null;\n packageJson: Record<string, unknown> | null;\n tsconfig: Record<string, unknown> | null;\n envExample: string | null;\n otherDocs: Array<{ name: string; content: string }>;\n}\n\nexport interface ExtractedIntent {\n projectName: string;\n description: string;\n features: string[];\n techStack: string[];\n conventions: string[];\n apiEndpoints: string[];\n envVariables: string[];\n scripts: Record<string, string>;\n}\n\n/**\n * Common documentation file patterns\n */\nconst DOC_PATTERNS = [\n 'README.md',\n 'README',\n 'readme.md',\n 'CONTRIBUTING.md',\n 'CONTRIBUTING',\n 'CHANGELOG.md',\n 'CHANGELOG',\n 'HISTORY.md',\n 'docs/**/*.md',\n 'documentation/**/*.md',\n 'API.md',\n '.env.example',\n '.env.sample',\n];\n\n/**\n * Read all existing documentation from a codebase\n */\nexport async function readExistingDocs(cwd: string): Promise<ExistingDocs> {\n const docs: ExistingDocs = {\n readme: null,\n contributing: null,\n apiDocs: [],\n changelog: null,\n packageJson: null,\n tsconfig: null,\n envExample: null,\n otherDocs: [],\n };\n\n // Read README\n for (const name of ['README.md', 'readme.md', 'README', 'Readme.md']) {\n const path = join(cwd, name);\n if (existsSync(path)) {\n docs.readme = readFileSync(path, 'utf-8');\n break;\n }\n }\n\n // Read CONTRIBUTING\n for (const name of ['CONTRIBUTING.md', 'contributing.md', 'CONTRIBUTING']) {\n const path = join(cwd, name);\n if (existsSync(path)) {\n docs.contributing = readFileSync(path, 'utf-8');\n break;\n }\n }\n\n // Read CHANGELOG\n for (const name of ['CHANGELOG.md', 'changelog.md', 'CHANGELOG', 'HISTORY.md']) {\n const path = join(cwd, name);\n if (existsSync(path)) {\n docs.changelog = readFileSync(path, 'utf-8');\n break;\n }\n }\n\n // Read package.json\n const packageJsonPath = join(cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n try {\n docs.packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n } catch {\n // Ignore parse errors\n }\n }\n\n // Read tsconfig.json\n const tsconfigPath = join(cwd, 'tsconfig.json');\n if (existsSync(tsconfigPath)) {\n try {\n docs.tsconfig = JSON.parse(readFileSync(tsconfigPath, 'utf-8'));\n } catch {\n // Ignore parse errors\n }\n }\n\n // Read .env.example\n for (const name of ['.env.example', '.env.sample', '.env.template']) {\n const path = join(cwd, name);\n if (existsSync(path)) {\n docs.envExample = readFileSync(path, 'utf-8');\n break;\n }\n }\n\n // Find and read API docs\n const apiDocPaths = await fg(['docs/**/*.md', 'documentation/**/*.md', 'api/**/*.md'], {\n cwd,\n absolute: true,\n ignore: ['**/node_modules/**'],\n });\n\n for (const path of apiDocPaths.slice(0, 10)) {\n try {\n docs.apiDocs.push(readFileSync(path, 'utf-8'));\n } catch {\n // Skip unreadable files\n }\n }\n\n // Find other markdown docs\n const otherDocPaths = await fg(['*.md', 'docs/*.md'], {\n cwd,\n absolute: true,\n ignore: ['**/node_modules/**', 'README.md', 'CONTRIBUTING.md', 'CHANGELOG.md'],\n });\n\n for (const path of otherDocPaths.slice(0, 5)) {\n try {\n docs.otherDocs.push({\n name: basename(path),\n content: readFileSync(path, 'utf-8'),\n });\n } catch {\n // Skip unreadable files\n }\n }\n\n return docs;\n}\n\n/**\n * Extract structured intent from existing documentation\n */\nexport function extractIntentFromDocs(docs: ExistingDocs): ExtractedIntent {\n const intent: ExtractedIntent = {\n projectName: '',\n description: '',\n features: [],\n techStack: [],\n conventions: [],\n apiEndpoints: [],\n envVariables: [],\n scripts: {},\n };\n\n // Extract from package.json\n if (docs.packageJson) {\n intent.projectName = (docs.packageJson as any).name || '';\n intent.description = (docs.packageJson as any).description || '';\n intent.scripts = (docs.packageJson as any).scripts || {};\n\n // Extract tech stack from dependencies\n const deps = {\n ...(docs.packageJson as any).dependencies,\n ...(docs.packageJson as any).devDependencies,\n };\n\n if (deps) {\n if (deps['next']) intent.techStack.push('Next.js');\n if (deps['react']) intent.techStack.push('React');\n if (deps['vue']) intent.techStack.push('Vue');\n if (deps['express']) intent.techStack.push('Express');\n if (deps['fastify']) intent.techStack.push('Fastify');\n if (deps['typescript']) intent.techStack.push('TypeScript');\n if (deps['prisma']) intent.techStack.push('Prisma');\n if (deps['mongoose']) intent.techStack.push('MongoDB/Mongoose');\n if (deps['pg'] || deps['postgres']) intent.techStack.push('PostgreSQL');\n if (deps['redis']) intent.techStack.push('Redis');\n if (deps['stripe']) intent.techStack.push('Stripe');\n if (deps['@auth/core'] || deps['next-auth']) intent.techStack.push('Auth.js');\n }\n }\n\n // Extract features from README\n if (docs.readme) {\n // Look for features section\n const featuresMatch = docs.readme.match(/##\\s*Features?\\s*\\n([\\s\\S]*?)(?=\\n##|\\n---|\\$)/i);\n if (featuresMatch) {\n const featureLines = featuresMatch[1].split('\\n')\n .filter(line => line.trim().startsWith('-') || line.trim().startsWith('*'))\n .map(line => line.replace(/^[-*]\\s*/, '').trim())\n .filter(line => line.length > 0);\n intent.features.push(...featureLines.slice(0, 20));\n }\n }\n\n // Extract env variables\n if (docs.envExample) {\n const envLines = docs.envExample.split('\\n')\n .filter(line => line.includes('=') && !line.startsWith('#'))\n .map(line => line.split('=')[0].trim())\n .filter(line => line.length > 0);\n intent.envVariables.push(...envLines);\n }\n\n // Extract API endpoints from docs\n for (const apiDoc of docs.apiDocs) {\n const endpointMatches = apiDoc.matchAll(/`(GET|POST|PUT|DELETE|PATCH)\\s+([^`]+)`/g);\n for (const match of endpointMatches) {\n intent.apiEndpoints.push(`${match[1]} ${match[2]}`);\n }\n }\n\n // Extract conventions from CONTRIBUTING\n if (docs.contributing) {\n const conventionLines = docs.contributing.split('\\n')\n .filter(line => line.trim().startsWith('-') || line.trim().startsWith('*'))\n .map(line => line.replace(/^[-*]\\s*/, '').trim())\n .filter(line => line.length > 10 && line.length < 200)\n .slice(0, 10);\n intent.conventions.push(...conventionLines);\n }\n\n return intent;\n}\n\n/**\n * Build a documentation summary for the AI prompt\n */\nexport function buildDocsSummary(docs: ExistingDocs, extracted: ExtractedIntent): string {\n const parts: string[] = [];\n\n parts.push(`# Existing Documentation Summary\\n`);\n\n if (extracted.projectName) {\n parts.push(`## Project: ${extracted.projectName}`);\n if (extracted.description) {\n parts.push(`\\n${extracted.description}\\n`);\n }\n }\n\n if (extracted.techStack.length > 0) {\n parts.push(`\\n## Tech Stack`);\n parts.push(extracted.techStack.map(t => `- ${t}`).join('\\n'));\n }\n\n if (extracted.features.length > 0) {\n parts.push(`\\n## Features (from README)`);\n parts.push(extracted.features.map(f => `- ${f}`).join('\\n'));\n }\n\n if (extracted.apiEndpoints.length > 0) {\n parts.push(`\\n## API Endpoints`);\n parts.push(extracted.apiEndpoints.slice(0, 20).map(e => `- ${e}`).join('\\n'));\n }\n\n if (extracted.envVariables.length > 0) {\n parts.push(`\\n## Environment Variables`);\n parts.push(extracted.envVariables.map(v => `- ${v}`).join('\\n'));\n }\n\n if (extracted.conventions.length > 0) {\n parts.push(`\\n## Conventions (from CONTRIBUTING)`);\n parts.push(extracted.conventions.map(c => `- ${c}`).join('\\n'));\n }\n\n if (Object.keys(extracted.scripts).length > 0) {\n parts.push(`\\n## NPM Scripts`);\n for (const [name, cmd] of Object.entries(extracted.scripts).slice(0, 10)) {\n parts.push(`- \\`npm run ${name}\\`: ${cmd}`);\n }\n }\n\n // Include README excerpt if available\n if (docs.readme && docs.readme.length > 0) {\n const excerpt = docs.readme.slice(0, 2000);\n parts.push(`\\n## README Excerpt\\n\\`\\`\\`\\n${excerpt}\\n\\`\\`\\``);\n }\n\n return parts.join('\\n');\n}\n","import * as p from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { WhiteroseConfig, ProviderType, CodebaseUnderstanding } from '../../types.js';\nimport { detectProvider, getProviderCommand } from '../../providers/detect.js';\nimport { getProvider } from '../../providers/index.js';\nimport { execa } from 'execa';\nimport { scanCodebase } from '../../core/scanner/index.js';\nimport { generateIntentDocument } from '../../core/contracts/intent.js';\nimport { readExistingDocs, extractIntentFromDocs, buildDocsSummary } from '../../core/docs.js';\nimport YAML from 'yaml';\n\ninterface InitOptions {\n provider: string;\n skipQuestions: boolean;\n force: boolean;\n unsafe: boolean;\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n const cwd = process.cwd();\n const whiterosePath = join(cwd, '.whiterose');\n\n // Check if already initialized\n if (existsSync(whiterosePath) && !options.force) {\n p.log.error('whiterose is already initialized in this directory.');\n p.log.info('Use --force to reinitialize, or run \"whiterose refresh\" to update understanding.');\n process.exit(1);\n }\n\n p.intro(chalk.red('whiterose') + chalk.dim(' - initialization'));\n\n // ─────────────────────────────────────────────────────────────\n // Phase 1: Detect available providers\n // ─────────────────────────────────────────────────────────────\n const providerSpinner = p.spinner();\n providerSpinner.start('Detecting available LLM providers...');\n\n const availableProviders = await detectProvider();\n\n if (availableProviders.length === 0) {\n providerSpinner.stop('No LLM providers detected');\n p.log.error('whiterose requires an LLM provider to function.');\n p.log.info('Supported providers: claude-code, aider, codex, opencode');\n p.log.info('Install one and ensure it\\'s configured, then run init again.');\n process.exit(1);\n }\n\n providerSpinner.stop(`Detected providers: ${availableProviders.join(', ')}`);\n\n // Select provider - always ask user to confirm\n let selectedProvider: ProviderType;\n if (options.skipQuestions) {\n // Only auto-select in skip mode\n selectedProvider = availableProviders[0] as ProviderType;\n p.log.info(`Using ${selectedProvider} as your LLM provider.`);\n } else {\n const providerChoice = await p.select({\n message: 'Which LLM provider should whiterose use?',\n options: availableProviders.map((prov) => ({\n value: prov,\n label: prov,\n hint: prov === 'claude-code' ? 'recommended' : undefined,\n })),\n });\n\n if (p.isCancel(providerChoice)) {\n p.cancel('Initialization cancelled.');\n process.exit(0);\n }\n\n selectedProvider = providerChoice as ProviderType;\n }\n\n // ─────────────────────────────────────────────────────────────\n // Phase 1.5: Verify provider CLI actually works (fail fast)\n // ─────────────────────────────────────────────────────────────\n const verifySpinner = p.spinner();\n verifySpinner.start('Verifying provider CLI works...');\n\n try {\n const command = getProviderCommand(selectedProvider);\n await execa(command, ['--version'], { timeout: 10000 });\n verifySpinner.stop(`Using ${selectedProvider} at: ${command}`);\n } catch (error: any) {\n verifySpinner.stop('Provider CLI verification failed');\n const installHint = selectedProvider === 'claude-code'\n ? 'npm install -g @anthropic-ai/claude-code'\n : `Install ${selectedProvider} and ensure it's in your PATH`;\n p.log.error(`Cannot run ${selectedProvider} CLI. ${installHint}`);\n p.log.info(`Resolved path: ${getProviderCommand(selectedProvider)}`);\n if (error.message) {\n p.log.info(`Error: ${error.message}`);\n }\n process.exit(1);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Phase 2: Full codebase scan\n // ─────────────────────────────────────────────────────────────\n const scanSpinner = p.spinner();\n scanSpinner.start('Scanning codebase...');\n\n let codebaseFiles: string[];\n try {\n codebaseFiles = await scanCodebase(cwd);\n scanSpinner.stop(`Found ${codebaseFiles.length} source files`);\n } catch (error) {\n scanSpinner.stop('Failed to scan codebase');\n p.log.error(String(error));\n process.exit(1);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Phase 2.5: Read existing documentation (Layer 0)\n // ─────────────────────────────────────────────────────────────\n const docsSpinner = p.spinner();\n docsSpinner.start('Reading existing documentation...');\n\n let docsSummary: string | undefined;\n try {\n const existingDocs = await readExistingDocs(cwd);\n const extractedIntent = extractIntentFromDocs(existingDocs);\n docsSummary = buildDocsSummary(existingDocs, extractedIntent);\n\n const docsFound = [];\n if (existingDocs.readme) docsFound.push('README');\n if (existingDocs.contributing) docsFound.push('CONTRIBUTING');\n if (existingDocs.packageJson) docsFound.push('package.json');\n if (existingDocs.envExample) docsFound.push('.env.example');\n if (existingDocs.apiDocs.length > 0) docsFound.push(`${existingDocs.apiDocs.length} API docs`);\n\n if (docsFound.length > 0) {\n docsSpinner.stop(`Found existing docs: ${docsFound.join(', ')}`);\n } else {\n docsSpinner.stop('No existing documentation found (will generate from code)');\n docsSummary = undefined;\n }\n } catch (error) {\n docsSpinner.stop('Could not read existing docs (continuing without)');\n docsSummary = undefined;\n }\n\n // ─────────────────────────────────────────────────────────────\n // Phase 3: Generate understanding via LLM (merge with existing docs)\n // ─────────────────────────────────────────────────────────────\n const understandingSpinner = p.spinner();\n const startTime = Date.now();\n\n understandingSpinner.start('Starting codebase analysis...');\n\n let understanding: CodebaseUnderstanding;\n try {\n const provider = await getProvider(selectedProvider);\n\n // Enable unsafe mode if requested (bypasses LLM permission prompts)\n if (options.unsafe && 'setUnsafeMode' in provider) {\n (provider as any).setUnsafeMode(true);\n p.log.warn('Running in unsafe mode (--unsafe). LLM permission prompts are bypassed.');\n }\n\n // Set up progress callback to update spinner\n if ('setProgressCallback' in provider) {\n (provider as any).setProgressCallback((message: string) => {\n understandingSpinner.message(message);\n });\n }\n\n // Pass existing docs summary to merge with AI exploration\n understanding = await provider.generateUnderstanding(codebaseFiles, docsSummary);\n\n const totalTime = Math.floor((Date.now() - startTime) / 1000);\n understandingSpinner.stop(`Analysis complete (${totalTime}s)`);\n } catch (error) {\n understandingSpinner.stop('Analysis failed');\n p.log.error(String(error));\n process.exit(1);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Phase 4: Show summary and confirm understanding\n // ─────────────────────────────────────────────────────────────\n if (!options.skipQuestions) {\n p.log.message(chalk.bold('\\nHere\\'s what I understand about your codebase:\\n'));\n p.log.message(` ${chalk.cyan('Type:')} ${understanding.summary.type}`);\n p.log.message(` ${chalk.cyan('Framework:')} ${understanding.summary.framework || 'None detected'}`);\n p.log.message(` ${chalk.cyan('Language:')} ${understanding.summary.language}`);\n p.log.message(` ${chalk.cyan('Files:')} ${understanding.structure.totalFiles}`);\n p.log.message(` ${chalk.cyan('Lines:')} ${understanding.structure.totalLines.toLocaleString()}`);\n p.log.message(`\\n ${chalk.dim(understanding.summary.description)}\\n`);\n\n if (understanding.features.length > 0) {\n p.log.message(chalk.bold('Detected features:'));\n for (const feature of understanding.features.slice(0, 5)) {\n p.log.message(` ${chalk.yellow('●')} ${feature.name} - ${chalk.dim(feature.description)}`);\n }\n if (understanding.features.length > 5) {\n p.log.message(` ${chalk.dim(`...and ${understanding.features.length - 5} more`)}`);\n }\n console.log();\n }\n\n const isAccurate = await p.confirm({\n message: 'Is this understanding accurate?',\n initialValue: true,\n });\n\n if (p.isCancel(isAccurate)) {\n p.cancel('Initialization cancelled.');\n process.exit(0);\n }\n\n if (!isAccurate) {\n p.log.info('You can edit .whiterose/intent.md after initialization to correct the understanding.');\n }\n\n // ─────────────────────────────────────────────────────────────\n // Phase 5: Priority questions based on detected features\n // ─────────────────────────────────────────────────────────────\n const priorities: Record<string, 'critical' | 'high' | 'medium' | 'low' | 'ignore'> = {};\n\n // Ask about critical features\n for (const feature of understanding.features.filter((f) => f.priority === 'critical').slice(0, 3)) {\n const priority = await p.select({\n message: `I detected ${chalk.bold(feature.name)}. How should I prioritize bugs here?`,\n options: [\n { value: 'critical', label: 'Critical', hint: 'highest priority' },\n { value: 'high', label: 'High' },\n { value: 'medium', label: 'Medium' },\n { value: 'low', label: 'Low' },\n { value: 'ignore', label: 'Ignore', hint: 'skip this area' },\n ],\n initialValue: 'critical',\n });\n\n if (p.isCancel(priority)) {\n p.cancel('Initialization cancelled.');\n process.exit(0);\n }\n\n // Map feature to file patterns\n for (const file of feature.relatedFiles) {\n priorities[file] = priority as typeof priorities[string];\n }\n }\n\n // Ask about areas of concern\n const areasOfConcern = await p.text({\n message: 'Any specific files or directories you want me to focus on? (comma-separated, or leave empty)',\n placeholder: 'src/api/checkout.ts, src/hooks/useAuth.ts',\n });\n\n if (!p.isCancel(areasOfConcern) && areasOfConcern) {\n for (const area of areasOfConcern.split(',').map((s) => s.trim())) {\n priorities[area] = 'critical';\n }\n }\n\n // Store priorities in understanding for config generation\n (understanding as any)._userPriorities = priorities;\n }\n\n // ─────────────────────────────────────────────────────────────\n // Phase 6: Create .whiterose directory and files\n // ─────────────────────────────────────────────────────────────\n const writeSpinner = p.spinner();\n writeSpinner.start('Creating configuration...');\n\n try {\n // Create directory structure\n mkdirSync(join(whiterosePath, 'cache'), { recursive: true });\n mkdirSync(join(whiterosePath, 'reports'), { recursive: true });\n\n // Generate config\n const config: WhiteroseConfig = {\n version: '1',\n provider: selectedProvider,\n include: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],\n exclude: ['node_modules', 'dist', 'build', '.next', 'coverage', '**/*.test.*', '**/*.spec.*'],\n priorities: (understanding as any)._userPriorities || {},\n categories: ['logic-error', 'security', 'async-race-condition', 'edge-case', 'null-reference'],\n minConfidence: 'low',\n staticAnalysis: {\n typescript: true,\n eslint: true,\n },\n output: {\n sarif: true,\n markdown: true,\n sarifPath: '.whiterose/reports',\n markdownPath: 'BUGS.md',\n },\n };\n\n // Write config.yml\n writeFileSync(join(whiterosePath, 'config.yml'), YAML.stringify(config), 'utf-8');\n\n // Write understanding cache\n writeFileSync(\n join(whiterosePath, 'cache', 'understanding.json'),\n JSON.stringify(understanding, null, 2),\n 'utf-8'\n );\n\n // Generate and write intent.md\n const intentDoc = generateIntentDocument(understanding);\n writeFileSync(join(whiterosePath, 'intent.md'), intentDoc, 'utf-8');\n\n // Initialize file hashes cache\n writeFileSync(\n join(whiterosePath, 'cache', 'file-hashes.json'),\n JSON.stringify({ version: '1', fileHashes: [], lastFullScan: null }, null, 2),\n 'utf-8'\n );\n\n // Add to .gitignore if it exists\n const gitignorePath = join(cwd, '.gitignore');\n if (existsSync(gitignorePath)) {\n const gitignore = await import('fs').then((fs) => fs.readFileSync(gitignorePath, 'utf-8'));\n if (!gitignore.includes('.whiterose/cache')) {\n writeFileSync(gitignorePath, gitignore + '\\n# whiterose cache\\n.whiterose/cache/\\n', 'utf-8');\n }\n }\n\n writeSpinner.stop('Configuration created');\n } catch (error) {\n writeSpinner.stop('Failed to create configuration');\n p.log.error(String(error));\n process.exit(1);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Done\n // ─────────────────────────────────────────────────────────────\n p.outro(chalk.green('whiterose initialized successfully!'));\n\n console.log();\n console.log(chalk.dim(' Next steps:'));\n console.log(chalk.dim(' 1. Review .whiterose/intent.md and edit if needed'));\n console.log(chalk.dim(' 2. Run ') + chalk.cyan('whiterose scan') + chalk.dim(' to find bugs'));\n console.log(chalk.dim(' 3. Run ') + chalk.cyan('whiterose fix') + chalk.dim(' to fix them interactively'));\n console.log();\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport YAML from 'yaml';\nimport { WhiteroseConfig, CodebaseUnderstanding } from '../types.js';\n\nexport async function loadConfig(cwd: string): Promise<WhiteroseConfig> {\n const configPath = join(cwd, '.whiterose', 'config.yml');\n\n if (!existsSync(configPath)) {\n throw new Error('Config file not found. Run \"whiterose init\" first.');\n }\n\n const content = readFileSync(configPath, 'utf-8');\n const parsed = YAML.parse(content);\n\n // Apply defaults\n return WhiteroseConfig.parse(parsed);\n}\n\nexport async function loadUnderstanding(cwd: string): Promise<CodebaseUnderstanding | null> {\n const understandingPath = join(cwd, '.whiterose', 'cache', 'understanding.json');\n\n if (!existsSync(understandingPath)) {\n return null;\n }\n\n const content = readFileSync(understandingPath, 'utf-8');\n return JSON.parse(content) as CodebaseUnderstanding;\n}\n\nexport async function saveConfig(cwd: string, config: WhiteroseConfig): Promise<void> {\n const { writeFileSync } = await import('fs');\n const configPath = join(cwd, '.whiterose', 'config.yml');\n writeFileSync(configPath, YAML.stringify(config), 'utf-8');\n}\n","import { execa } from 'execa';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WhiteroseConfig, StaticAnalysisResult } from '../types.js';\n\nexport async function runStaticAnalysis(\n cwd: string,\n files: string[],\n config: WhiteroseConfig\n): Promise<StaticAnalysisResult[]> {\n const results: StaticAnalysisResult[] = [];\n\n // Run TypeScript compiler\n if (config.staticAnalysis.typescript) {\n const tscResults = await runTypeScript(cwd);\n results.push(...tscResults);\n }\n\n // Run ESLint\n if (config.staticAnalysis.eslint) {\n const eslintResults = await runEslint(cwd, files);\n results.push(...eslintResults);\n }\n\n return results;\n}\n\nasync function runTypeScript(cwd: string): Promise<StaticAnalysisResult[]> {\n const results: StaticAnalysisResult[] = [];\n\n // Check if tsconfig exists\n const tsconfigPath = join(cwd, 'tsconfig.json');\n if (!existsSync(tsconfigPath)) {\n return results;\n }\n\n try {\n // Run tsc --noEmit and capture diagnostics\n await execa('npx', ['tsc', '--noEmit', '--pretty', 'false'], {\n cwd,\n timeout: 60000,\n });\n } catch (error: any) {\n // Parse TypeScript errors from stdout\n const output = error.stdout || '';\n const lines = output.split('\\n');\n\n for (const line of lines) {\n // Format: path/to/file.ts(line,col): error TS1234: message\n const match = line.match(/^(.+)\\((\\d+),(\\d+)\\):\\s+(error|warning)\\s+TS\\d+:\\s+(.+)$/);\n if (match) {\n results.push({\n tool: 'typescript',\n file: match[1],\n line: parseInt(match[2], 10),\n message: match[5],\n severity: match[4] === 'error' ? 'error' : 'warning',\n code: `TS${match[4]}`,\n });\n }\n }\n }\n\n return results;\n}\n\nasync function runEslint(cwd: string, files: string[]): Promise<StaticAnalysisResult[]> {\n const results: StaticAnalysisResult[] = [];\n\n // Check if eslint config exists\n const hasEslint =\n existsSync(join(cwd, '.eslintrc')) ||\n existsSync(join(cwd, '.eslintrc.js')) ||\n existsSync(join(cwd, '.eslintrc.json')) ||\n existsSync(join(cwd, '.eslintrc.yml')) ||\n existsSync(join(cwd, 'eslint.config.js')) ||\n existsSync(join(cwd, 'eslint.config.mjs'));\n\n if (!hasEslint) {\n return results;\n }\n\n try {\n // Run eslint with JSON output\n const { stdout } = await execa(\n 'npx',\n ['eslint', '--format', 'json', '--no-error-on-unmatched-pattern', ...files.slice(0, 50)],\n {\n cwd,\n timeout: 60000,\n reject: false,\n }\n );\n\n const eslintResults = JSON.parse(stdout || '[]');\n\n for (const fileResult of eslintResults) {\n for (const message of fileResult.messages || []) {\n results.push({\n tool: 'eslint',\n file: fileResult.filePath,\n line: message.line || 0,\n message: message.message,\n severity: message.severity === 2 ? 'error' : 'warning',\n code: message.ruleId,\n });\n }\n }\n } catch {\n // ESLint failed, skip\n }\n\n return results;\n}\n","import { ScanResult, Bug } from '../types.js';\n\ninterface SarifResult {\n $schema: string;\n version: string;\n runs: SarifRun[];\n}\n\ninterface SarifRun {\n tool: {\n driver: {\n name: string;\n version: string;\n informationUri: string;\n rules: SarifRule[];\n };\n };\n results: SarifResultItem[];\n}\n\ninterface SarifRule {\n id: string;\n name: string;\n shortDescription: { text: string };\n fullDescription: { text: string };\n defaultConfiguration: { level: string };\n properties: { category: string };\n}\n\ninterface SarifResultItem {\n ruleId: string;\n level: string;\n message: { text: string; markdown?: string };\n locations: SarifLocation[];\n codeFlows?: SarifCodeFlow[];\n}\n\ninterface SarifLocation {\n physicalLocation: {\n artifactLocation: { uri: string };\n region: { startLine: number; endLine?: number };\n };\n}\n\ninterface SarifCodeFlow {\n threadFlows: {\n locations: {\n location: SarifLocation;\n message?: { text: string };\n }[];\n }[];\n}\n\nexport function outputSarif(result: ScanResult): SarifResult {\n const rules: SarifRule[] = [];\n const results: SarifResultItem[] = [];\n\n // Build unique rules from bugs\n const seenRules = new Set<string>();\n\n for (const bug of result.bugs) {\n // Create rule if not seen\n if (!seenRules.has(bug.category)) {\n seenRules.add(bug.category);\n rules.push({\n id: bug.category,\n name: formatRuleName(bug.category),\n shortDescription: { text: getCategoryDescription(bug.category) },\n fullDescription: { text: getCategoryDescription(bug.category) },\n defaultConfiguration: { level: 'warning' },\n properties: { category: bug.category },\n });\n }\n\n // Create result\n results.push(bugToSarifResult(bug));\n }\n\n return {\n $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',\n version: '2.1.0',\n runs: [\n {\n tool: {\n driver: {\n name: 'whiterose',\n version: '0.1.0',\n informationUri: 'https://github.com/shakecodeslikecray/whiterose',\n rules,\n },\n },\n results,\n },\n ],\n };\n}\n\nfunction bugToSarifResult(bug: Bug): SarifResultItem {\n const result: SarifResultItem = {\n ruleId: bug.id,\n level: severityToLevel(bug.severity),\n message: {\n text: bug.title,\n markdown: `**${bug.title}**\\n\\n${bug.description}\\n\\n**Evidence:**\\n${bug.evidence.map((e) => `- ${e}`).join('\\n')}`,\n },\n locations: [\n {\n physicalLocation: {\n artifactLocation: { uri: bug.file },\n region: { startLine: bug.line, endLine: bug.endLine },\n },\n },\n ],\n };\n\n // Add code flow if available\n if (bug.codePath.length > 0) {\n result.codeFlows = [\n {\n threadFlows: [\n {\n locations: bug.codePath.map((step) => ({\n location: {\n physicalLocation: {\n artifactLocation: { uri: step.file },\n region: { startLine: step.line },\n },\n },\n message: { text: step.explanation },\n })),\n },\n ],\n },\n ];\n }\n\n return result;\n}\n\nfunction severityToLevel(severity: string): string {\n switch (severity) {\n case 'critical':\n return 'error';\n case 'high':\n return 'error';\n case 'medium':\n return 'warning';\n case 'low':\n return 'note';\n default:\n return 'warning';\n }\n}\n\nfunction formatRuleName(category: string): string {\n return category\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\nfunction getCategoryDescription(category: string): string {\n const descriptions: Record<string, string> = {\n 'logic-error': 'Logic errors such as off-by-one, wrong operators, or incorrect conditions',\n security: 'Security vulnerabilities including injection, auth bypass, and data exposure',\n 'async-race-condition': 'Async/concurrency issues like race conditions and missing awaits',\n 'edge-case': 'Edge cases that are not properly handled',\n 'null-reference': 'Potential null or undefined reference issues',\n 'type-coercion': 'Type coercion bugs that may cause unexpected behavior',\n 'resource-leak': 'Resource leaks such as unclosed handles or connections',\n 'intent-violation': 'Violations of documented behavioral contracts or business rules',\n };\n\n return descriptions[category] || 'Unknown bug category';\n}\n","import { ScanResult, Bug, BugSeverity } from '../types.js';\n\nexport function outputMarkdown(result: ScanResult): string {\n const lines: string[] = [];\n\n // Header\n lines.push('# Bug Report');\n lines.push('');\n lines.push(`> Generated by [whiterose](https://github.com/shakecodeslikecray/whiterose) on ${new Date().toISOString()}`);\n lines.push('');\n\n // Summary\n lines.push('## Summary');\n lines.push('');\n lines.push(`| Severity | Count |`);\n lines.push(`|----------|-------|`);\n lines.push(`| Critical | ${result.summary.critical} |`);\n lines.push(`| High | ${result.summary.high} |`);\n lines.push(`| Medium | ${result.summary.medium} |`);\n lines.push(`| Low | ${result.summary.low} |`);\n lines.push(`| **Total** | **${result.summary.total}** |`);\n lines.push('');\n\n // Scan info\n lines.push(`- **Scan Type:** ${result.scanType}`);\n lines.push(`- **Files Scanned:** ${result.filesScanned}`);\n if (result.filesChanged !== undefined) {\n lines.push(`- **Files Changed:** ${result.filesChanged}`);\n }\n lines.push('');\n\n if (result.bugs.length === 0) {\n lines.push('No bugs found.');\n return lines.join('\\n');\n }\n\n // Group by severity\n const bySeverity: Record<BugSeverity, Bug[]> = {\n critical: [],\n high: [],\n medium: [],\n low: [],\n };\n\n for (const bug of result.bugs) {\n bySeverity[bug.severity].push(bug);\n }\n\n // Critical bugs\n if (bySeverity.critical.length > 0) {\n lines.push('## Critical');\n lines.push('');\n for (const bug of bySeverity.critical) {\n lines.push(formatBug(bug));\n }\n }\n\n // High bugs\n if (bySeverity.high.length > 0) {\n lines.push('## High');\n lines.push('');\n for (const bug of bySeverity.high) {\n lines.push(formatBug(bug));\n }\n }\n\n // Medium bugs\n if (bySeverity.medium.length > 0) {\n lines.push('## Medium');\n lines.push('');\n for (const bug of bySeverity.medium) {\n lines.push(formatBug(bug));\n }\n }\n\n // Low bugs\n if (bySeverity.low.length > 0) {\n lines.push('## Low');\n lines.push('');\n for (const bug of bySeverity.low) {\n lines.push(formatBug(bug));\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction formatBug(bug: Bug): string {\n const lines: string[] = [];\n\n // Title with ID and confidence\n const confidenceBadge = getConfidenceBadge(bug.confidence.overall);\n lines.push(`### ${bug.id}: ${bug.title} ${confidenceBadge}`);\n lines.push('');\n\n // Location\n lines.push(`**Location:** \\`${bug.file}:${bug.line}\\``);\n lines.push(`**Category:** ${formatCategory(bug.category)}`);\n lines.push('');\n\n // Description\n lines.push(bug.description);\n lines.push('');\n\n // Code path\n if (bug.codePath.length > 0) {\n lines.push('<details>');\n lines.push('<summary>Code Path</summary>');\n lines.push('');\n for (const step of bug.codePath) {\n lines.push(`${step.step}. \\`${step.file}:${step.line}\\``);\n lines.push(` \\`\\`\\`${getLanguage(step.file)}`);\n lines.push(` ${step.code}`);\n lines.push(' ```');\n lines.push(` ${step.explanation}`);\n lines.push('');\n }\n lines.push('</details>');\n lines.push('');\n }\n\n // Evidence\n if (bug.evidence.length > 0) {\n lines.push('**Evidence:**');\n for (const e of bug.evidence) {\n lines.push(`- ${e}`);\n }\n lines.push('');\n }\n\n // Suggested fix\n if (bug.suggestedFix) {\n lines.push('**Suggested Fix:**');\n lines.push('```');\n lines.push(bug.suggestedFix);\n lines.push('```');\n lines.push('');\n }\n\n lines.push('---');\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction getConfidenceBadge(confidence: string): string {\n switch (confidence) {\n case 'high':\n return '`[HIGH CONFIDENCE]`';\n case 'medium':\n return '`[MEDIUM CONFIDENCE]`';\n case 'low':\n return '`[LOW CONFIDENCE]`';\n default:\n return '';\n }\n}\n\nfunction formatCategory(category: string): string {\n return category\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\nfunction getLanguage(file: string): string {\n if (file.endsWith('.ts') || file.endsWith('.tsx')) return 'typescript';\n if (file.endsWith('.js') || file.endsWith('.jsx')) return 'javascript';\n if (file.endsWith('.py')) return 'python';\n if (file.endsWith('.go')) return 'go';\n return '';\n}\n","import * as p from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { WhiteroseConfig, ScanResult, Bug, ConfidenceLevel } from '../../types.js';\nimport { loadConfig, loadUnderstanding } from '../../core/config.js';\nimport { getProvider } from '../../providers/index.js';\nimport { scanCodebase, getChangedFiles } from '../../core/scanner/index.js';\nimport { runStaticAnalysis } from '../../analysis/static.js';\nimport { generateBugId } from '../../core/utils.js';\nimport { outputSarif } from '../../output/sarif.js';\nimport { outputMarkdown } from '../../output/markdown.js';\nimport YAML from 'yaml';\n\ninterface ScanOptions {\n full: boolean;\n json: boolean;\n sarif: boolean;\n provider?: string;\n category?: string[];\n minConfidence: string;\n adversarial: boolean;\n unsafe: boolean;\n}\n\nexport async function scanCommand(paths: string[], options: ScanOptions): Promise<void> {\n const cwd = process.cwd();\n const whiterosePath = join(cwd, '.whiterose');\n\n // Check if initialized\n if (!existsSync(whiterosePath)) {\n if (!options.json && !options.sarif) {\n p.log.error('whiterose is not initialized in this directory.');\n p.log.info('Run \"whiterose init\" first.');\n } else {\n console.error(JSON.stringify({ error: 'Not initialized. Run whiterose init first.' }));\n }\n process.exit(1);\n }\n\n const isQuiet = options.json || options.sarif;\n\n if (!isQuiet) {\n p.intro(chalk.red('whiterose') + chalk.dim(' - scanning for bugs'));\n }\n\n // ─────────────────────────────────────────────────────────────\n // Load config and understanding\n // ─────────────────────────────────────────────────────────────\n let config: WhiteroseConfig;\n try {\n config = await loadConfig(cwd);\n } catch (error) {\n if (!isQuiet) p.log.error(`Failed to load config: ${error}`);\n process.exit(1);\n }\n\n const understanding = await loadUnderstanding(cwd);\n if (!understanding) {\n if (!isQuiet) {\n p.log.error('No codebase understanding found. Run \"whiterose refresh\" to regenerate.');\n }\n process.exit(1);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Determine files to scan\n // ─────────────────────────────────────────────────────────────\n let filesToScan: string[];\n let scanType: 'full' | 'incremental';\n\n if (options.full || paths.length > 0) {\n scanType = 'full';\n if (!isQuiet) {\n const spinner = p.spinner();\n spinner.start('Scanning files...');\n filesToScan = paths.length > 0 ? paths : await scanCodebase(cwd, config);\n spinner.stop(`Found ${filesToScan.length} files to scan`);\n } else {\n filesToScan = paths.length > 0 ? paths : await scanCodebase(cwd, config);\n }\n } else {\n // Incremental scan\n scanType = 'incremental';\n const changed = await getChangedFiles(cwd, config);\n filesToScan = changed.files;\n\n if (filesToScan.length === 0) {\n if (!isQuiet) {\n p.log.info('No files changed since last scan. Use --full for a complete scan.');\n } else {\n console.log(JSON.stringify({ bugs: [], message: 'No changes detected' }));\n }\n process.exit(0);\n }\n\n if (!isQuiet) {\n p.log.info(`Incremental scan: ${filesToScan.length} changed files`);\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Run static analysis\n // ─────────────────────────────────────────────────────────────\n let staticResults;\n if (!isQuiet) {\n const staticSpinner = p.spinner();\n staticSpinner.start('Running static analysis (tsc, eslint)...');\n staticResults = await runStaticAnalysis(cwd, filesToScan, config);\n staticSpinner.stop(`Static analysis: ${staticResults.length} signals found`);\n } else {\n staticResults = await runStaticAnalysis(cwd, filesToScan, config);\n }\n\n // ─────────────────────────────────────────────────────────────\n // LLM Analysis\n // ─────────────────────────────────────────────────────────────\n const providerName = options.provider || config.provider;\n const provider = await getProvider(providerName as any);\n\n // Enable unsafe mode if requested (bypasses LLM permission prompts)\n if (options.unsafe) {\n if ('setUnsafeMode' in provider) {\n (provider as any).setUnsafeMode(true);\n if (!isQuiet) {\n p.log.warn('Running in unsafe mode (--unsafe). LLM permission prompts are bypassed.');\n }\n }\n }\n\n let bugs: Bug[];\n if (!isQuiet) {\n const llmSpinner = p.spinner();\n const analysisStartTime = Date.now();\n llmSpinner.start(`Analyzing with ${providerName}... (this may take 1-2 minutes)`);\n\n // Update spinner with elapsed time every 5 seconds\n const analysisTimeInterval = setInterval(() => {\n const elapsed = Math.floor((Date.now() - analysisStartTime) / 1000);\n const minutes = Math.floor(elapsed / 60);\n const seconds = elapsed % 60;\n const timeStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;\n llmSpinner.message(`Analyzing with ${providerName}... (${timeStr} elapsed)`);\n }, 5000);\n\n try {\n bugs = await provider.analyze({\n files: filesToScan,\n understanding,\n config,\n staticAnalysisResults: staticResults,\n });\n clearInterval(analysisTimeInterval);\n const totalTime = Math.floor((Date.now() - analysisStartTime) / 1000);\n llmSpinner.stop(`Found ${bugs.length} potential bugs (${totalTime}s)`);\n } catch (error) {\n clearInterval(analysisTimeInterval);\n llmSpinner.stop('Analysis failed');\n p.log.error(String(error));\n process.exit(1);\n }\n } else {\n bugs = await provider.analyze({\n files: filesToScan,\n understanding,\n config,\n staticAnalysisResults: staticResults,\n });\n }\n\n // ─────────────────────────────────────────────────────────────\n // Adversarial validation\n // ─────────────────────────────────────────────────────────────\n if (options.adversarial && bugs.length > 0) {\n if (!isQuiet) {\n const advSpinner = p.spinner();\n advSpinner.start('Running adversarial validation...');\n\n const validatedBugs: Bug[] = [];\n for (const bug of bugs) {\n const result = await provider.adversarialValidate(bug, {\n files: filesToScan,\n understanding,\n config,\n staticAnalysisResults: staticResults,\n });\n\n if (result.survived) {\n validatedBugs.push({\n ...bug,\n confidence: result.adjustedConfidence || bug.confidence,\n });\n }\n }\n\n const filtered = bugs.length - validatedBugs.length;\n advSpinner.stop(`Adversarial validation: ${filtered} false positives filtered`);\n bugs = validatedBugs;\n } else {\n const validatedBugs: Bug[] = [];\n for (const bug of bugs) {\n const result = await provider.adversarialValidate(bug, {\n files: filesToScan,\n understanding,\n config,\n staticAnalysisResults: staticResults,\n });\n if (result.survived) {\n validatedBugs.push({\n ...bug,\n confidence: result.adjustedConfidence || bug.confidence,\n });\n }\n }\n bugs = validatedBugs;\n }\n }\n\n // ─────────────────────────────────────────────────────────────\n // Filter by confidence\n // ─────────────────────────────────────────────────────────────\n const minConfidence = options.minConfidence as ConfidenceLevel;\n const confidenceOrder = { high: 3, medium: 2, low: 1 };\n bugs = bugs.filter((bug) => confidenceOrder[bug.confidence.overall] >= confidenceOrder[minConfidence]);\n\n // ─────────────────────────────────────────────────────────────\n // Filter by category\n // ─────────────────────────────────────────────────────────────\n if (options.category && options.category.length > 0) {\n bugs = bugs.filter((bug) => options.category!.includes(bug.category));\n }\n\n // ─────────────────────────────────────────────────────────────\n // Assign IDs\n // ─────────────────────────────────────────────────────────────\n bugs = bugs.map((bug, index) => ({\n ...bug,\n id: bug.id || generateBugId(index),\n }));\n\n // ─────────────────────────────────────────────────────────────\n // Create scan result\n // ─────────────────────────────────────────────────────────────\n const result: ScanResult = {\n id: `scan-${Date.now()}`,\n timestamp: new Date().toISOString(),\n scanType,\n filesScanned: filesToScan.length,\n filesChanged: scanType === 'incremental' ? filesToScan.length : undefined,\n duration: 0, // TODO: track actual duration\n bugs,\n summary: {\n critical: bugs.filter((b) => b.severity === 'critical').length,\n high: bugs.filter((b) => b.severity === 'high').length,\n medium: bugs.filter((b) => b.severity === 'medium').length,\n low: bugs.filter((b) => b.severity === 'low').length,\n total: bugs.length,\n },\n };\n\n // ─────────────────────────────────────────────────────────────\n // Output\n // ─────────────────────────────────────────────────────────────\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else if (options.sarif) {\n console.log(JSON.stringify(outputSarif(result), null, 2));\n } else {\n // Save SARIF report\n if (config.output.sarif) {\n const sarifPath = join(whiterosePath, 'reports', `${new Date().toISOString().split('T')[0]}.sarif`);\n writeFileSync(sarifPath, JSON.stringify(outputSarif(result), null, 2));\n }\n\n // Generate markdown\n if (config.output.markdown) {\n const markdown = outputMarkdown(result);\n writeFileSync(join(cwd, config.output.markdownPath), markdown);\n }\n\n // Show summary\n console.log();\n p.log.message(chalk.bold('Scan Results'));\n console.log();\n console.log(` ${chalk.red('●')} Critical: ${result.summary.critical}`);\n console.log(` ${chalk.yellow('●')} High: ${result.summary.high}`);\n console.log(` ${chalk.blue('●')} Medium: ${result.summary.medium}`);\n console.log(` ${chalk.dim('●')} Low: ${result.summary.low}`);\n console.log();\n console.log(` ${chalk.bold('Total:')} ${result.summary.total} bugs found`);\n console.log();\n\n if (result.summary.total > 0) {\n p.log.info(`Run ${chalk.cyan('whiterose fix')} to fix bugs interactively.`);\n }\n\n p.outro(chalk.green('Scan complete'));\n }\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { Bug, BugSeverity, BugCategory } from '../../types.js';\n\ninterface DashboardProps {\n bugs: Bug[];\n onSelectCategory: (category: string | null) => void;\n}\n\ninterface MenuItem {\n key: string;\n label: string;\n count: number;\n color: string;\n}\n\nexport const Dashboard: React.FC<DashboardProps> = ({ bugs, onSelectCategory }) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n // Calculate summary\n const summary = {\n critical: bugs.filter((b) => b.severity === 'critical').length,\n high: bugs.filter((b) => b.severity === 'high').length,\n medium: bugs.filter((b) => b.severity === 'medium').length,\n low: bugs.filter((b) => b.severity === 'low').length,\n };\n\n // Calculate by category\n const byCategory: Record<string, number> = {};\n for (const bug of bugs) {\n byCategory[bug.category] = (byCategory[bug.category] || 0) + 1;\n }\n\n // Build menu items\n const menuItems: MenuItem[] = [\n { key: 'all', label: 'All Bugs', count: bugs.length, color: 'white' },\n { key: 'critical', label: 'Critical', count: summary.critical, color: 'red' },\n { key: 'high', label: 'High', count: summary.high, color: 'yellow' },\n { key: 'medium', label: 'Medium', count: summary.medium, color: 'blue' },\n { key: 'low', label: 'Low', count: summary.low, color: 'gray' },\n ];\n\n // Add category items\n const categoryColors: Record<string, string> = {\n 'logic-error': 'magenta',\n security: 'red',\n 'async-race-condition': 'cyan',\n 'edge-case': 'yellow',\n 'null-reference': 'blue',\n 'type-coercion': 'green',\n 'resource-leak': 'yellow',\n 'intent-violation': 'magenta',\n };\n\n for (const [category, count] of Object.entries(byCategory)) {\n menuItems.push({\n key: category,\n label: formatCategory(category),\n count,\n color: categoryColors[category] || 'white',\n });\n }\n\n useInput((input, key) => {\n if (key.upArrow) {\n setSelectedIndex((i) => Math.max(0, i - 1));\n } else if (key.downArrow) {\n setSelectedIndex((i) => Math.min(menuItems.length - 1, i + 1));\n } else if (key.return) {\n const item = menuItems[selectedIndex];\n if (item.key === 'all') {\n onSelectCategory(null);\n } else {\n onSelectCategory(item.key);\n }\n }\n });\n\n if (bugs.length === 0) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color=\"green\" bold>\n ✓ No bugs found!\n </Text>\n <Text color=\"gray\">Your codebase looks clean.</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n {/* Summary */}\n <Box marginBottom={1} flexDirection=\"column\">\n <Text bold underline>\n Summary\n </Text>\n <Box marginTop={1}>\n <Box marginRight={3}>\n <Text color=\"red\">● Critical: {summary.critical}</Text>\n </Box>\n <Box marginRight={3}>\n <Text color=\"yellow\">● High: {summary.high}</Text>\n </Box>\n <Box marginRight={3}>\n <Text color=\"blue\">● Medium: {summary.medium}</Text>\n </Box>\n <Box>\n <Text color=\"gray\">● Low: {summary.low}</Text>\n </Box>\n </Box>\n </Box>\n\n {/* Menu */}\n <Box flexDirection=\"column\" marginTop={1}>\n <Text bold underline>\n Filter by\n </Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {menuItems.map((item, index) => (\n <Box key={item.key}>\n <Text color={index === selectedIndex ? 'cyan' : 'white'}>\n {index === selectedIndex ? '▶ ' : ' '}\n </Text>\n <Text color={item.color}>\n {item.label}\n </Text>\n <Text color=\"gray\"> ({item.count})</Text>\n </Box>\n ))}\n </Box>\n </Box>\n\n {/* Instructions */}\n <Box marginTop={2}>\n <Text color=\"gray\">[↑↓] Navigate [Enter] Select [q] Quit</Text>\n </Box>\n </Box>\n );\n};\n\nfunction formatCategory(category: string): string {\n return category\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { Bug } from '../../types.js';\n\ninterface BugListProps {\n bugs: Bug[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n onBack: () => void;\n}\n\nconst VISIBLE_ITEMS = 10;\n\nexport const BugList: React.FC<BugListProps> = ({ bugs, selectedIndex, onSelect, onBack }) => {\n const [localIndex, setLocalIndex] = useState(selectedIndex);\n const [scrollOffset, setScrollOffset] = useState(0);\n\n useEffect(() => {\n setLocalIndex(selectedIndex);\n }, [selectedIndex]);\n\n // Ensure selected item is visible\n useEffect(() => {\n if (localIndex < scrollOffset) {\n setScrollOffset(localIndex);\n } else if (localIndex >= scrollOffset + VISIBLE_ITEMS) {\n setScrollOffset(localIndex - VISIBLE_ITEMS + 1);\n }\n }, [localIndex, scrollOffset]);\n\n useInput((input, key) => {\n if (key.upArrow) {\n setLocalIndex((i) => Math.max(0, i - 1));\n } else if (key.downArrow) {\n setLocalIndex((i) => Math.min(bugs.length - 1, i + 1));\n } else if (key.return) {\n onSelect(localIndex);\n } else if (input === 'b' || key.escape) {\n onBack();\n } else if (key.pageUp) {\n setLocalIndex((i) => Math.max(0, i - VISIBLE_ITEMS));\n } else if (key.pageDown) {\n setLocalIndex((i) => Math.min(bugs.length - 1, i + VISIBLE_ITEMS));\n }\n });\n\n if (bugs.length === 0) {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"gray\">No bugs in this category.</Text>\n <Text color=\"gray\">[b] Back to dashboard</Text>\n </Box>\n );\n }\n\n const visibleBugs = bugs.slice(scrollOffset, scrollOffset + VISIBLE_ITEMS);\n\n return (\n <Box flexDirection=\"column\">\n {/* Header */}\n <Box marginBottom={1}>\n <Box width={8}>\n <Text bold color=\"gray\">ID</Text>\n </Box>\n <Box width={10}>\n <Text bold color=\"gray\">Severity</Text>\n </Box>\n <Box width={10}>\n <Text bold color=\"gray\">Confidence</Text>\n </Box>\n <Box flexGrow={1}>\n <Text bold color=\"gray\">Title</Text>\n </Box>\n </Box>\n\n {/* Bug list */}\n {visibleBugs.map((bug, index) => {\n const actualIndex = scrollOffset + index;\n const isSelected = actualIndex === localIndex;\n\n return (\n <Box key={bug.id}>\n <Text color={isSelected ? 'cyan' : 'white'}>\n {isSelected ? '▶ ' : ' '}\n </Text>\n <Box width={6}>\n <Text color=\"gray\">{bug.id}</Text>\n </Box>\n <Box width={10}>\n <Text color={getSeverityColor(bug.severity)}>\n {bug.severity.toUpperCase().padEnd(8)}\n </Text>\n </Box>\n <Box width={10}>\n <Text color={getConfidenceColor(bug.confidence.overall)}>\n {bug.confidence.overall.toUpperCase().padEnd(8)}\n </Text>\n </Box>\n <Box flexGrow={1}>\n <Text color={isSelected ? 'white' : 'gray'}>\n {truncate(bug.title, 50)}\n </Text>\n </Box>\n </Box>\n );\n })}\n\n {/* Scroll indicator */}\n {bugs.length > VISIBLE_ITEMS && (\n <Box marginTop={1}>\n <Text color=\"gray\">\n Showing {scrollOffset + 1}-{Math.min(scrollOffset + VISIBLE_ITEMS, bugs.length)} of {bugs.length}\n {scrollOffset > 0 && ' [↑ more above]'}\n {scrollOffset + VISIBLE_ITEMS < bugs.length && ' [↓ more below]'}\n </Text>\n </Box>\n )}\n\n {/* Instructions */}\n <Box marginTop={1}>\n <Text color=\"gray\">\n [↑↓] Navigate [Enter] View details [PgUp/PgDn] Page [b] Back\n </Text>\n </Box>\n </Box>\n );\n};\n\nfunction getSeverityColor(severity: string): string {\n switch (severity) {\n case 'critical':\n return 'red';\n case 'high':\n return 'yellow';\n case 'medium':\n return 'blue';\n case 'low':\n return 'gray';\n default:\n return 'white';\n }\n}\n\nfunction getConfidenceColor(confidence: string): string {\n switch (confidence) {\n case 'high':\n return 'green';\n case 'medium':\n return 'yellow';\n case 'low':\n return 'red';\n default:\n return 'white';\n }\n}\n\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + '...';\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { Bug } from '../../types.js';\n\ninterface BugDetailProps {\n bug: Bug;\n index: number;\n total: number;\n onFix: () => void;\n onNext: () => void;\n onPrev: () => void;\n onBack: () => void;\n}\n\ntype Tab = 'overview' | 'codepath' | 'evidence' | 'fix';\n\nexport const BugDetail: React.FC<BugDetailProps> = ({\n bug,\n index,\n total,\n onFix,\n onNext,\n onPrev,\n onBack,\n}) => {\n const [activeTab, setActiveTab] = useState<Tab>('overview');\n\n useInput((input, key) => {\n if (input === 'f') {\n onFix();\n } else if (input === 'n' || key.rightArrow) {\n onNext();\n } else if (input === 'p' || key.leftArrow) {\n onPrev();\n } else if (input === 'b' || key.escape) {\n onBack();\n } else if (input === '1') {\n setActiveTab('overview');\n } else if (input === '2') {\n setActiveTab('codepath');\n } else if (input === '3') {\n setActiveTab('evidence');\n } else if (input === '4') {\n setActiveTab('fix');\n } else if (key.tab) {\n const tabs: Tab[] = ['overview', 'codepath', 'evidence', 'fix'];\n const currentIndex = tabs.indexOf(activeTab);\n setActiveTab(tabs[(currentIndex + 1) % tabs.length]);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {/* Bug header */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text color=\"gray\">{bug.id} </Text>\n <Text color={getSeverityColor(bug.severity)} bold>\n [{bug.severity.toUpperCase()}]\n </Text>\n <Text> </Text>\n <Text bold>{bug.title}</Text>\n </Box>\n <Box marginTop={1}>\n <Text color=\"gray\">File: </Text>\n <Text color=\"cyan\">{bug.file}</Text>\n <Text color=\"gray\">:</Text>\n <Text color=\"yellow\">{bug.line}</Text>\n {bug.endLine && (\n <>\n <Text color=\"gray\">-</Text>\n <Text color=\"yellow\">{bug.endLine}</Text>\n </>\n )}\n </Box>\n <Box>\n <Text color=\"gray\">Category: </Text>\n <Text>{formatCategory(bug.category)}</Text>\n <Text color=\"gray\"> | Confidence: </Text>\n <Text color={getConfidenceColor(bug.confidence.overall)}>\n {bug.confidence.overall.toUpperCase()}\n </Text>\n {bug.confidence.adversarialSurvived && (\n <Text color=\"green\"> ✓ Validated</Text>\n )}\n </Box>\n </Box>\n\n {/* Tabs */}\n <Box marginBottom={1}>\n <TabButton label=\"1:Overview\" active={activeTab === 'overview'} />\n <TabButton label=\"2:Code Path\" active={activeTab === 'codepath'} />\n <TabButton label=\"3:Evidence\" active={activeTab === 'evidence'} />\n <TabButton label=\"4:Fix\" active={activeTab === 'fix'} />\n </Box>\n\n {/* Tab content */}\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor=\"gray\"\n padding={1}\n minHeight={10}\n >\n {activeTab === 'overview' && (\n <Box flexDirection=\"column\">\n <Text bold>Description</Text>\n <Text wrap=\"wrap\">{bug.description}</Text>\n </Box>\n )}\n\n {activeTab === 'codepath' && (\n <Box flexDirection=\"column\">\n <Text bold>Code Path ({bug.codePath.length} steps)</Text>\n {bug.codePath.length === 0 ? (\n <Text color=\"gray\">No code path available</Text>\n ) : (\n bug.codePath.map((step, i) => (\n <Box key={i} flexDirection=\"column\" marginTop={i > 0 ? 1 : 0}>\n <Box>\n <Text color=\"cyan\">{step.step}. </Text>\n <Text color=\"yellow\">{step.file}:{step.line}</Text>\n </Box>\n {step.code && (\n <Box marginLeft={3}>\n <Text color=\"gray\">{step.code}</Text>\n </Box>\n )}\n <Box marginLeft={3}>\n <Text>{step.explanation}</Text>\n </Box>\n </Box>\n ))\n )}\n </Box>\n )}\n\n {activeTab === 'evidence' && (\n <Box flexDirection=\"column\">\n <Text bold>Evidence ({bug.evidence.length} items)</Text>\n {bug.evidence.length === 0 ? (\n <Text color=\"gray\">No evidence provided</Text>\n ) : (\n bug.evidence.map((e, i) => (\n <Box key={i}>\n <Text color=\"gray\">• </Text>\n <Text>{e}</Text>\n </Box>\n ))\n )}\n\n {/* Confidence breakdown */}\n <Box flexDirection=\"column\" marginTop={2}>\n <Text bold>Confidence Breakdown</Text>\n <Box>\n <Text color=\"gray\">Code Path Validity: </Text>\n <Text>{(bug.confidence.codePathValidity * 100).toFixed(0)}%</Text>\n </Box>\n <Box>\n <Text color=\"gray\">Reachability: </Text>\n <Text>{(bug.confidence.reachability * 100).toFixed(0)}%</Text>\n </Box>\n <Box>\n <Text color=\"gray\">Intent Violation: </Text>\n <Text>{bug.confidence.intentViolation ? 'Yes' : 'No'}</Text>\n </Box>\n <Box>\n <Text color=\"gray\">Static Tool Signal: </Text>\n <Text>{bug.confidence.staticToolSignal ? 'Yes' : 'No'}</Text>\n </Box>\n <Box>\n <Text color=\"gray\">Adversarial Validated: </Text>\n <Text color={bug.confidence.adversarialSurvived ? 'green' : 'gray'}>\n {bug.confidence.adversarialSurvived ? 'Yes ✓' : 'No'}\n </Text>\n </Box>\n </Box>\n </Box>\n )}\n\n {activeTab === 'fix' && (\n <Box flexDirection=\"column\">\n <Text bold>Suggested Fix</Text>\n {bug.suggestedFix ? (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"green\">{bug.suggestedFix}</Text>\n </Box>\n ) : (\n <Text color=\"gray\">No suggested fix available. Press [f] to generate one.</Text>\n )}\n </Box>\n )}\n </Box>\n\n {/* Navigation */}\n <Box marginTop={1} justifyContent=\"space-between\">\n <Text color=\"gray\">\n Bug {index + 1} of {total}\n </Text>\n <Text color=\"gray\">\n [←/p] Prev [→/n] Next [f] Fix [Tab] Switch tab [b] Back\n </Text>\n </Box>\n </Box>\n );\n};\n\nconst TabButton: React.FC<{ label: string; active: boolean }> = ({ label, active }) => (\n <Box marginRight={2}>\n <Text color={active ? 'cyan' : 'gray'} bold={active} underline={active}>\n {label}\n </Text>\n </Box>\n);\n\nfunction getSeverityColor(severity: string): string {\n switch (severity) {\n case 'critical':\n return 'red';\n case 'high':\n return 'yellow';\n case 'medium':\n return 'blue';\n case 'low':\n return 'gray';\n default:\n return 'white';\n }\n}\n\nfunction getConfidenceColor(confidence: string): string {\n switch (confidence) {\n case 'high':\n return 'green';\n case 'medium':\n return 'yellow';\n case 'low':\n return 'red';\n default:\n return 'white';\n }\n}\n\nfunction formatCategory(category: string): string {\n return category\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport Spinner from 'ink-spinner';\nimport { Bug } from '../../types.js';\n\ninterface FixConfirmProps {\n bug: Bug;\n dryRun: boolean;\n onConfirm: () => Promise<void>;\n onCancel: () => void;\n}\n\nexport const FixConfirm: React.FC<FixConfirmProps> = ({ bug, dryRun, onConfirm, onCancel }) => {\n const [status, setStatus] = useState<'confirm' | 'fixing' | 'done' | 'error'>('confirm');\n const [error, setError] = useState<string | null>(null);\n\n useInput(async (input, key) => {\n if (status !== 'confirm') return;\n\n if (input === 'y' || key.return) {\n setStatus('fixing');\n try {\n await onConfirm();\n setStatus('done');\n // Auto-close after success\n setTimeout(() => {\n onCancel();\n }, 1500);\n } catch (e: any) {\n setError(e.message || 'Unknown error');\n setStatus('error');\n }\n } else if (input === 'n' || key.escape) {\n onCancel();\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {/* Bug summary */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text bold>Fix: </Text>\n <Text>{bug.title}</Text>\n </Box>\n <Box>\n <Text color=\"gray\">File: </Text>\n <Text color=\"cyan\">{bug.file}:{bug.line}</Text>\n </Box>\n </Box>\n\n {/* Proposed fix */}\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor=\"gray\"\n padding={1}\n marginBottom={1}\n >\n <Text bold>Proposed Fix:</Text>\n {bug.suggestedFix ? (\n <Box marginTop={1}>\n <Text color=\"green\">{bug.suggestedFix}</Text>\n </Box>\n ) : (\n <Text color=\"yellow\">\n No suggested fix available. Will ask AI to generate and apply a fix.\n </Text>\n )}\n </Box>\n\n {/* Status */}\n {status === 'confirm' && (\n <Box flexDirection=\"column\">\n {dryRun && (\n <Box marginBottom={1}>\n <Text color=\"yellow\">DRY RUN MODE - Changes will NOT be applied</Text>\n </Box>\n )}\n <Box>\n <Text>Apply this fix? </Text>\n <Text color=\"green\">[y]es</Text>\n <Text> / </Text>\n <Text color=\"red\">[n]o</Text>\n </Box>\n </Box>\n )}\n\n {status === 'fixing' && (\n <Box>\n <Text color=\"cyan\">\n <Spinner type=\"dots\" />\n </Text>\n <Text> Applying fix...</Text>\n </Box>\n )}\n\n {status === 'done' && (\n <Box>\n <Text color=\"green\">✓ Fix applied successfully!</Text>\n </Box>\n )}\n\n {status === 'error' && (\n <Box flexDirection=\"column\">\n <Text color=\"red\">✗ Failed to apply fix</Text>\n {error && <Text color=\"gray\">{error}</Text>}\n <Box marginTop={1}>\n <Text color=\"gray\">Press any key to go back</Text>\n </Box>\n </Box>\n )}\n </Box>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text, useInput, useApp } from 'ink';\nimport { Bug, WhiteroseConfig } from '../types.js';\nimport { Dashboard } from './screens/Dashboard.js';\nimport { BugList } from './screens/BugList.js';\nimport { BugDetail } from './screens/BugDetail.js';\nimport { FixConfirm } from './screens/FixConfirm.js';\n\nexport type Screen = 'dashboard' | 'list' | 'detail' | 'fix';\n\nexport interface AppState {\n screen: Screen;\n bugs: Bug[];\n selectedCategory: string | null;\n selectedBugIndex: number;\n config: WhiteroseConfig;\n fixOptions: {\n dryRun: boolean;\n branch?: string;\n };\n}\n\ninterface AppProps {\n bugs: Bug[];\n config: WhiteroseConfig;\n fixOptions: {\n dryRun: boolean;\n branch?: string;\n };\n onFix: (bug: Bug) => Promise<void>;\n onExit: () => void;\n}\n\nexport const App: React.FC<AppProps> = ({ bugs, config, fixOptions, onFix, onExit }) => {\n const { exit } = useApp();\n const [state, setState] = useState<AppState>({\n screen: 'dashboard',\n bugs,\n selectedCategory: null,\n selectedBugIndex: 0,\n config,\n fixOptions,\n });\n\n // Filter bugs based on selected category\n const filteredBugs = state.selectedCategory\n ? state.bugs.filter((b) => b.category === state.selectedCategory || b.severity === state.selectedCategory)\n : state.bugs;\n\n const selectedBug = filteredBugs[state.selectedBugIndex];\n\n // Handle global keys\n useInput((input, key) => {\n if (input === 'q' || (key.ctrl && input === 'c')) {\n onExit();\n exit();\n return;\n }\n\n if (key.escape) {\n // Go back\n if (state.screen === 'fix') {\n setState((s) => ({ ...s, screen: 'detail' }));\n } else if (state.screen === 'detail') {\n setState((s) => ({ ...s, screen: 'list' }));\n } else if (state.screen === 'list') {\n setState((s) => ({ ...s, screen: 'dashboard', selectedCategory: null }));\n }\n }\n });\n\n const handleSelectCategory = (category: string | null) => {\n setState((s) => ({\n ...s,\n screen: 'list',\n selectedCategory: category,\n selectedBugIndex: 0,\n }));\n };\n\n const handleSelectBug = (index: number) => {\n setState((s) => ({\n ...s,\n screen: 'detail',\n selectedBugIndex: index,\n }));\n };\n\n const handleStartFix = () => {\n setState((s) => ({ ...s, screen: 'fix' }));\n };\n\n const handleConfirmFix = async () => {\n if (selectedBug) {\n await onFix(selectedBug);\n // Move to next bug or back to list\n if (state.selectedBugIndex < filteredBugs.length - 1) {\n setState((s) => ({\n ...s,\n screen: 'detail',\n selectedBugIndex: s.selectedBugIndex + 1,\n }));\n } else {\n setState((s) => ({ ...s, screen: 'list' }));\n }\n }\n };\n\n const handleCancelFix = () => {\n setState((s) => ({ ...s, screen: 'detail' }));\n };\n\n const handleBack = () => {\n if (state.screen === 'fix') {\n setState((s) => ({ ...s, screen: 'detail' }));\n } else if (state.screen === 'detail') {\n setState((s) => ({ ...s, screen: 'list' }));\n } else if (state.screen === 'list') {\n setState((s) => ({ ...s, screen: 'dashboard', selectedCategory: null }));\n }\n };\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n {/* Header */}\n <Box marginBottom={1}>\n <Text color=\"red\" bold>\n whiterose\n </Text>\n <Text color=\"gray\"> - fix mode</Text>\n <Text color=\"gray\"> | </Text>\n <Text color=\"gray\">\n {state.screen === 'dashboard' && 'Dashboard'}\n {state.screen === 'list' && `Bugs${state.selectedCategory ? ` (${state.selectedCategory})` : ''}`}\n {state.screen === 'detail' && `Bug ${state.selectedBugIndex + 1}/${filteredBugs.length}`}\n {state.screen === 'fix' && 'Confirm Fix'}\n </Text>\n </Box>\n\n {/* Main content */}\n {state.screen === 'dashboard' && (\n <Dashboard bugs={state.bugs} onSelectCategory={handleSelectCategory} />\n )}\n\n {state.screen === 'list' && (\n <BugList\n bugs={filteredBugs}\n selectedIndex={state.selectedBugIndex}\n onSelect={handleSelectBug}\n onBack={handleBack}\n />\n )}\n\n {state.screen === 'detail' && selectedBug && (\n <BugDetail\n bug={selectedBug}\n index={state.selectedBugIndex}\n total={filteredBugs.length}\n onFix={handleStartFix}\n onNext={() =>\n setState((s) => ({\n ...s,\n selectedBugIndex: Math.min(s.selectedBugIndex + 1, filteredBugs.length - 1),\n }))\n }\n onPrev={() =>\n setState((s) => ({\n ...s,\n selectedBugIndex: Math.max(s.selectedBugIndex - 1, 0),\n }))\n }\n onBack={handleBack}\n />\n )}\n\n {state.screen === 'fix' && selectedBug && (\n <FixConfirm\n bug={selectedBug}\n dryRun={fixOptions.dryRun}\n onConfirm={handleConfirmFix}\n onCancel={handleCancelFix}\n />\n )}\n\n {/* Footer */}\n <Box marginTop={1} borderStyle=\"single\" borderColor=\"gray\" paddingX={1}>\n <Text color=\"gray\">\n [q] Quit [esc] Back [↑↓] Navigate [enter] Select [f] Fix\n </Text>\n </Box>\n </Box>\n );\n};\n","import { execa } from 'execa';\nimport { Bug } from '../types.js';\n\nconst GIT_TIMEOUT = 30000; // 30 seconds\n\nexport async function isGitRepo(cwd: string = process.cwd()): Promise<boolean> {\n try {\n await execa('git', ['rev-parse', '--git-dir'], { cwd, timeout: GIT_TIMEOUT });\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function getCurrentBranch(cwd: string = process.cwd()): Promise<string> {\n try {\n const { stdout } = await execa('git', ['branch', '--show-current'], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n return stdout.trim();\n } catch {\n return 'main';\n }\n}\n\nexport async function hasUncommittedChanges(cwd: string = process.cwd()): Promise<boolean> {\n try {\n const { stdout } = await execa('git', ['status', '--porcelain'], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n return stdout.trim().length > 0;\n } catch {\n return false;\n }\n}\n\nexport async function createFixBranch(\n branchName: string,\n bug: Bug,\n cwd: string = process.cwd()\n): Promise<string> {\n // Generate branch name from bug info if not provided\n const safeBugId = bug.id.toLowerCase().replace(/[^a-z0-9]/g, '-');\n const safeTitle = bug.title\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '')\n .replace(/\\s+/g, '-')\n .slice(0, 30);\n\n const fullBranchName = branchName || `whiterose/fix-${safeBugId}-${safeTitle}`;\n\n try {\n // Check if branch already exists\n try {\n await execa('git', ['rev-parse', '--verify', fullBranchName], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n // Branch exists, check it out\n await execa('git', ['checkout', fullBranchName], { cwd, timeout: GIT_TIMEOUT });\n } catch {\n // Branch doesn't exist, create it\n await execa('git', ['checkout', '-b', fullBranchName], { cwd, timeout: GIT_TIMEOUT });\n }\n\n return fullBranchName;\n } catch (error: any) {\n throw new Error(`Failed to create branch: ${error.message}`);\n }\n}\n\nexport async function commitFix(bug: Bug, cwd: string = process.cwd()): Promise<string> {\n try {\n // Stage the changed file\n await execa('git', ['add', bug.file], { cwd, timeout: GIT_TIMEOUT });\n\n // Check if there are staged changes\n const { stdout: diff } = await execa('git', ['diff', '--cached', '--name-only'], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n\n if (!diff.trim()) {\n return ''; // No changes to commit\n }\n\n // Create commit message\n const commitMessage = `fix(${bug.category}): ${bug.title}\n\nBug ID: ${bug.id}\nFile: ${bug.file}:${bug.line}\nSeverity: ${bug.severity}\n\n${bug.description}\n\nFixed by whiterose`;\n\n // Commit\n await execa('git', ['commit', '-m', commitMessage], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n\n // Get the commit hash\n const { stdout: hash } = await execa('git', ['rev-parse', 'HEAD'], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n\n return hash.trim();\n } catch (error: any) {\n throw new Error(`Failed to commit fix: ${error.message}`);\n }\n}\n\nexport async function stashChanges(cwd: string = process.cwd()): Promise<boolean> {\n try {\n const hasChanges = await hasUncommittedChanges(cwd);\n if (!hasChanges) {\n return false;\n }\n\n await execa('git', ['stash', 'push', '-m', 'whiterose: stash before fix'], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n\n return true;\n } catch (error: any) {\n throw new Error(`Failed to stash changes: ${error.message}`);\n }\n}\n\nexport async function popStash(cwd: string = process.cwd()): Promise<void> {\n try {\n await execa('git', ['stash', 'pop'], { cwd, timeout: GIT_TIMEOUT });\n } catch (error: any) {\n throw new Error(`Failed to pop stash: ${error.message}`);\n }\n}\n\nexport async function getDiff(file: string, cwd: string = process.cwd()): Promise<string> {\n try {\n const { stdout } = await execa('git', ['diff', file], { cwd, timeout: GIT_TIMEOUT });\n return stdout;\n } catch {\n return '';\n }\n}\n\nexport async function getStagedDiff(cwd: string = process.cwd()): Promise<string> {\n try {\n const { stdout } = await execa('git', ['diff', '--cached'], { cwd, timeout: GIT_TIMEOUT });\n return stdout;\n } catch {\n return '';\n }\n}\n\nexport async function resetFile(file: string, cwd: string = process.cwd()): Promise<void> {\n try {\n await execa('git', ['checkout', '--', file], { cwd, timeout: GIT_TIMEOUT });\n } catch (error: any) {\n throw new Error(`Failed to reset file: ${error.message}`);\n }\n}\n\nexport async function getFileAtHead(file: string, cwd: string = process.cwd()): Promise<string> {\n try {\n const { stdout } = await execa('git', ['show', `HEAD:${file}`], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n return stdout;\n } catch {\n return '';\n }\n}\n\nexport interface GitStatus {\n isRepo: boolean;\n branch: string;\n hasChanges: boolean;\n staged: string[];\n modified: string[];\n untracked: string[];\n}\n\nexport async function getGitStatus(cwd: string = process.cwd()): Promise<GitStatus> {\n const isRepo = await isGitRepo(cwd);\n if (!isRepo) {\n return {\n isRepo: false,\n branch: '',\n hasChanges: false,\n staged: [],\n modified: [],\n untracked: [],\n };\n }\n\n const branch = await getCurrentBranch(cwd);\n\n try {\n const { stdout } = await execa('git', ['status', '--porcelain'], {\n cwd,\n timeout: GIT_TIMEOUT,\n });\n\n const staged: string[] = [];\n const modified: string[] = [];\n const untracked: string[] = [];\n\n for (const line of stdout.split('\\n')) {\n if (!line.trim()) continue;\n\n const status = line.slice(0, 2);\n const file = line.slice(3);\n\n if (status[0] !== ' ' && status[0] !== '?') {\n staged.push(file);\n }\n if (status[1] === 'M') {\n modified.push(file);\n }\n if (status === '??') {\n untracked.push(file);\n }\n }\n\n return {\n isRepo: true,\n branch,\n hasChanges: staged.length > 0 || modified.length > 0,\n staged,\n modified,\n untracked,\n };\n } catch {\n return {\n isRepo: true,\n branch,\n hasChanges: false,\n staged: [],\n modified: [],\n untracked: [],\n };\n }\n}\n","import { execa } from 'execa';\nimport { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { dirname, basename, resolve, relative, isAbsolute } from 'path';\nimport { Bug, WhiteroseConfig } from '../types.js';\nimport { createFixBranch, commitFix } from './git.js';\n\n/**\n * Validates that a file path is within the project directory.\n * Prevents path traversal attacks from malicious bug.file values.\n */\nfunction isPathWithinProject(filePath: string, projectDir: string): boolean {\n const resolvedPath = resolve(projectDir, filePath);\n const relativePath = relative(projectDir, resolvedPath);\n\n // Path is outside if it starts with '..' or is an absolute path\n return !relativePath.startsWith('..') && !isAbsolute(relativePath);\n}\n\n/**\n * Sanitizes and validates a file path for safe operations.\n * Returns the resolved absolute path if valid, throws if invalid.\n */\nfunction validateFilePath(filePath: string, projectDir: string): string {\n // Resolve to absolute path\n const resolvedPath = isAbsolute(filePath) ? filePath : resolve(projectDir, filePath);\n\n // Check for path traversal\n if (!isPathWithinProject(resolvedPath, projectDir)) {\n throw new Error(`Security: Refusing to access file outside project directory: ${filePath}`);\n }\n\n // Check for suspicious patterns\n if (filePath.includes('\\0') || filePath.includes('..')) {\n throw new Error(`Security: Invalid file path contains suspicious characters: ${filePath}`);\n }\n\n return resolvedPath;\n}\n\ninterface FixOptions {\n dryRun: boolean;\n branch?: string;\n}\n\ninterface FixResult {\n success: boolean;\n diff?: string;\n error?: string;\n branchName?: string;\n}\n\nexport async function applyFix(\n bug: Bug,\n config: WhiteroseConfig,\n options: FixOptions\n): Promise<FixResult> {\n const { dryRun, branch } = options;\n const projectDir = process.cwd();\n\n // SECURITY: Validate file path to prevent path traversal\n let safePath: string;\n try {\n safePath = validateFilePath(bug.file, projectDir);\n } catch (error: any) {\n return {\n success: false,\n error: error.message,\n };\n }\n\n // Read the original file\n if (!existsSync(safePath)) {\n return {\n success: false,\n error: `File not found: ${bug.file}`,\n };\n }\n\n const originalContent = readFileSync(safePath, 'utf-8');\n const lines = originalContent.split('\\n');\n\n // If we have a suggested fix, try to apply it\n let fixedContent: string;\n let diff: string;\n\n if (bug.suggestedFix) {\n // Try to apply the suggested fix by replacing the relevant lines\n const result = applySimpleFix(lines, bug.line, bug.endLine || bug.line, bug.suggestedFix);\n if (result.success) {\n fixedContent = result.content;\n diff = result.diff;\n } else {\n // Fall back to LLM-based fix\n const llmResult = await generateAndApplyFix(bug, config, originalContent, safePath);\n if (!llmResult.success) {\n return llmResult;\n }\n fixedContent = llmResult.content!;\n diff = llmResult.diff!;\n }\n } else {\n // No suggested fix, use LLM\n const llmResult = await generateAndApplyFix(bug, config, originalContent, safePath);\n if (!llmResult.success) {\n return llmResult;\n }\n fixedContent = llmResult.content!;\n diff = llmResult.diff!;\n }\n\n // Dry run - just show the diff\n if (dryRun) {\n console.log('\\n--- Dry Run: Proposed changes ---');\n console.log(diff);\n console.log('--- End of proposed changes ---\\n');\n return {\n success: true,\n diff,\n };\n }\n\n // Create branch if needed\n let branchName: string | undefined;\n if (branch) {\n branchName = await createFixBranch(branch, bug);\n }\n\n // Write the fixed content (using validated safe path)\n writeFileSync(safePath, fixedContent, 'utf-8');\n\n // Commit the change\n if (branchName || !branch) {\n await commitFix(bug);\n }\n\n return {\n success: true,\n diff,\n branchName,\n };\n}\n\nfunction applySimpleFix(\n lines: string[],\n startLine: number,\n endLine: number,\n fix: string\n): { success: boolean; content: string; diff: string } {\n // Simple fix application: replace lines startLine to endLine with the fix\n // This works for simple one-line or few-line fixes\n\n const lineIndex = startLine - 1; // Convert to 0-indexed\n const endIndex = endLine - 1;\n\n if (lineIndex < 0 || lineIndex >= lines.length) {\n return { success: false, content: '', diff: '' };\n }\n\n // Get the indentation of the original line\n const originalLine = lines[lineIndex];\n const indentMatch = originalLine.match(/^(\\s*)/);\n const indent = indentMatch ? indentMatch[1] : '';\n\n // Apply indentation to fix\n const fixLines = fix.split('\\n').map((line, i) => {\n if (i === 0 || line.trim() === '') return line;\n return indent + line.trimStart();\n });\n\n // Build the diff\n const removedLines = lines.slice(lineIndex, endIndex + 1);\n const diff = [\n `--- ${lines[lineIndex]}`,\n ...removedLines.map((l) => `- ${l}`),\n ...fixLines.map((l) => `+ ${l}`),\n ].join('\\n');\n\n // Create the new content\n const newLines = [...lines.slice(0, lineIndex), ...fixLines, ...lines.slice(endIndex + 1)];\n\n return {\n success: true,\n content: newLines.join('\\n'),\n diff,\n };\n}\n\nasync function generateAndApplyFix(\n bug: Bug,\n _config: WhiteroseConfig,\n originalContent: string,\n safePath?: string\n): Promise<{ success: boolean; content?: string; diff?: string; error?: string }> {\n try {\n // Build a prompt for fixing\n const prompt = buildFixPrompt(bug, originalContent);\n\n // Use validated path for cwd, fallback to process.cwd()\n const workingDir = safePath ? dirname(safePath) : process.cwd();\n\n // Use the provider to generate a fix\n // We'll use execa directly since we need a specific prompt format\n const { stdout } = await execa(\n 'claude',\n ['-p', prompt, '--output-format', 'text'],\n {\n cwd: workingDir,\n timeout: 120000,\n env: { ...process.env, NO_COLOR: '1' },\n }\n );\n\n // Parse the fixed content from the response\n const fixedContent = parseFixResponse(stdout, originalContent);\n if (!fixedContent) {\n return {\n success: false,\n error: 'Failed to parse fix from LLM response',\n };\n }\n\n // Generate diff\n const diff = generateDiff(originalContent, fixedContent, bug.file);\n\n return {\n success: true,\n content: fixedContent,\n diff,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Unknown error generating fix',\n };\n }\n}\n\nfunction buildFixPrompt(bug: Bug, originalContent: string): string {\n return `Fix the following bug in the code.\n\nBUG DETAILS:\n- Title: ${bug.title}\n- Description: ${bug.description}\n- File: ${bug.file}\n- Line: ${bug.line}${bug.endLine ? `-${bug.endLine}` : ''}\n- Category: ${bug.category}\n- Severity: ${bug.severity}\n\nEVIDENCE:\n${bug.evidence.map((e) => `- ${e}`).join('\\n')}\n\nCODE PATH:\n${bug.codePath.map((s) => `${s.step}. ${s.file}:${s.line} - ${s.explanation}`).join('\\n')}\n\nORIGINAL FILE CONTENT:\n\\`\\`\\`\n${originalContent}\n\\`\\`\\`\n\n${bug.suggestedFix ? `SUGGESTED FIX APPROACH:\\n${bug.suggestedFix}\\n\\n` : ''}\n\nPlease provide the COMPLETE fixed file content. Output ONLY the fixed code, no explanations.\nWrap the code in \\`\\`\\` code blocks.\n\nIMPORTANT:\n- Fix ONLY the identified bug\n- Do not refactor or change anything else\n- Preserve all formatting and style\n- Ensure the fix actually addresses the bug`;\n}\n\nfunction parseFixResponse(response: string, originalContent: string): string | null {\n // Try to extract code from markdown code blocks\n const codeBlockMatch = response.match(/```(?:\\w+)?\\s*([\\s\\S]*?)```/);\n if (codeBlockMatch) {\n const extracted = codeBlockMatch[1].trim();\n // Validate it looks like code (has some similar lines)\n const originalLines = originalContent.split('\\n').slice(0, 5);\n const extractedLines = extracted.split('\\n').slice(0, 5);\n\n // Check if at least some lines match (accounting for the fix)\n let matchCount = 0;\n for (const origLine of originalLines) {\n if (extractedLines.some((l) => l.trim() === origLine.trim())) {\n matchCount++;\n }\n }\n\n if (matchCount >= 2 || extracted.length > originalContent.length * 0.5) {\n return extracted;\n }\n }\n\n // If no code block, check if the entire response looks like code\n if (response.includes('function') || response.includes('const ') || response.includes('import ')) {\n return response.trim();\n }\n\n return null;\n}\n\nfunction generateDiff(original: string, fixed: string, filename: string): string {\n const origLines = original.split('\\n');\n const fixedLines = fixed.split('\\n');\n\n const diff: string[] = [`--- a/${basename(filename)}`, `+++ b/${basename(filename)}`];\n\n // Simple line-by-line diff\n const maxLen = Math.max(origLines.length, fixedLines.length);\n\n for (let i = 0; i < maxLen; i++) {\n const origLine = origLines[i];\n const fixedLine = fixedLines[i];\n\n if (origLine === undefined) {\n diff.push(`+ ${fixedLine}`);\n } else if (fixedLine === undefined) {\n diff.push(`- ${origLine}`);\n } else if (origLine !== fixedLine) {\n diff.push(`- ${origLine}`);\n diff.push(`+ ${fixedLine}`);\n }\n }\n\n return diff.join('\\n');\n}\n\nexport async function batchFix(\n bugs: Bug[],\n config: WhiteroseConfig,\n options: FixOptions\n): Promise<Map<string, FixResult>> {\n const results = new Map<string, FixResult>();\n\n for (const bug of bugs) {\n const result = await applyFix(bug, config, options);\n results.set(bug.id, result);\n\n // If any fix fails in non-dry-run mode, stop\n if (!result.success && !options.dryRun) {\n break;\n }\n }\n\n return results;\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport { Bug, WhiteroseConfig } from '../types.js';\nimport { App } from './App.js';\nimport { applyFix } from '../core/fixer.js';\n\ninterface FixOptions {\n dryRun: boolean;\n branch?: string;\n}\n\nexport async function startFixTUI(\n bugs: Bug[],\n config: WhiteroseConfig,\n options: FixOptions\n): Promise<void> {\n return new Promise((resolve) => {\n const handleFix = async (bug: Bug) => {\n await applyFix(bug, config, options);\n };\n\n const handleExit = () => {\n resolve();\n };\n\n const { unmount, waitUntilExit } = render(\n <App\n bugs={bugs}\n config={config}\n fixOptions={options}\n onFix={handleFix}\n onExit={handleExit}\n />\n );\n\n waitUntilExit().then(() => {\n resolve();\n });\n });\n}\n\n// Also export a simpler non-interactive mode for CI/scripts\nexport { App } from './App.js';\nexport { Dashboard } from './screens/Dashboard.js';\nexport { BugList } from './screens/BugList.js';\nexport { BugDetail } from './screens/BugDetail.js';\nexport { FixConfirm } from './screens/FixConfirm.js';\n","import * as p from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, readdirSync } from 'fs';\nimport { join, resolve, isAbsolute } from 'path';\nimport { execa } from 'execa';\nimport { Bug } from '../../types.js';\nimport { loadConfig } from '../../core/config.js';\nimport { startFixTUI } from '../../tui/index.js';\nimport { applyFix } from '../../core/fixer.js';\n\ninterface FixOptions {\n dryRun: boolean;\n branch?: string;\n sarif?: string;\n github?: string;\n describe?: boolean;\n}\n\nexport async function fixCommand(bugId: string | undefined, options: FixOptions): Promise<void> {\n const cwd = process.cwd();\n const whiterosePath = join(cwd, '.whiterose');\n\n // ─────────────────────────────────────────────────────────────\n // Source 1: External SARIF file\n // ─────────────────────────────────────────────────────────────\n if (options.sarif) {\n const sarifPath = isAbsolute(options.sarif) ? options.sarif : resolve(cwd, options.sarif);\n\n if (!existsSync(sarifPath)) {\n p.log.error(`SARIF file not found: ${sarifPath}`);\n process.exit(1);\n }\n\n p.intro(chalk.red('whiterose') + chalk.dim(' - fixing bugs from external SARIF'));\n\n const bugs = loadBugsFromSarif(sarifPath);\n if (bugs.length === 0) {\n p.log.success('No bugs found in SARIF file!');\n process.exit(0);\n }\n\n p.log.info(`Loaded ${bugs.length} bugs from ${options.sarif}`);\n\n // Load config if available (for fix options), or use defaults\n const config = existsSync(whiterosePath)\n ? await loadConfig(cwd)\n : getDefaultConfig();\n\n return await processBugList(bugs, config, options, bugId);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Source 2: GitHub issue\n // ─────────────────────────────────────────────────────────────\n if (options.github) {\n p.intro(chalk.red('whiterose') + chalk.dim(' - fixing bug from GitHub issue'));\n\n const bug = await loadBugFromGitHub(options.github, cwd);\n if (!bug) {\n p.log.error('Failed to parse GitHub issue as a bug');\n process.exit(1);\n }\n\n p.log.info(`Loaded bug from GitHub: ${bug.title}`);\n\n const config = existsSync(whiterosePath)\n ? await loadConfig(cwd)\n : getDefaultConfig();\n\n return await fixSingleBug(bug, config, options);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Source 3: Manual description (interactive)\n // ─────────────────────────────────────────────────────────────\n if (options.describe) {\n p.intro(chalk.red('whiterose') + chalk.dim(' - fixing manually described bug'));\n\n const bug = await collectManualBugDescription(cwd);\n if (!bug) {\n p.cancel('Bug description cancelled.');\n process.exit(0);\n }\n\n const config = existsSync(whiterosePath)\n ? await loadConfig(cwd)\n : getDefaultConfig();\n\n return await fixSingleBug(bug, config, options);\n }\n\n // ─────────────────────────────────────────────────────────────\n // Source 4: Default - whiterose scan results\n // ─────────────────────────────────────────────────────────────\n\n // Check if initialized\n if (!existsSync(whiterosePath)) {\n p.log.error('whiterose is not initialized in this directory.');\n p.log.info('Run \"whiterose init\" first, or use:');\n p.log.info(' --sarif <path> Fix bugs from an external SARIF file');\n p.log.info(' --github <url> Fix bug from a GitHub issue');\n p.log.info(' --describe Manually describe a bug to fix');\n process.exit(1);\n }\n\n // Load config\n const config = await loadConfig(cwd);\n\n // Find latest scan result\n const reportsDir = join(whiterosePath, 'reports');\n if (!existsSync(reportsDir)) {\n p.log.error('No scan results found. Run \"whiterose scan\" first.');\n p.log.info('Or use --sarif, --github, or --describe for external bugs.');\n process.exit(1);\n }\n\n // Get latest SARIF file\n const reports = readdirSync(reportsDir)\n .filter((f) => f.endsWith('.sarif'))\n .sort()\n .reverse();\n\n if (reports.length === 0) {\n p.log.error('No scan results found. Run \"whiterose scan\" first.');\n p.log.info('Or use --sarif, --github, or --describe for external bugs.');\n process.exit(1);\n }\n\n const latestReport = join(reportsDir, reports[0]);\n const bugs = loadBugsFromSarif(latestReport);\n\n return await processBugList(bugs, config, options, bugId);\n}\n\n// ─────────────────────────────────────────────────────────────\n// Bug Loading Functions\n// ─────────────────────────────────────────────────────────────\n\nfunction loadBugsFromSarif(sarifPath: string): Bug[] {\n const sarif = JSON.parse(readFileSync(sarifPath, 'utf-8'));\n\n return sarif.runs?.[0]?.results?.map((r: any, i: number) => {\n // Try to extract full bug info from SARIF properties if available\n const props = r.properties || {};\n\n return {\n id: r.ruleId || `WR-${String(i + 1).padStart(3, '0')}`,\n title: r.message?.text || 'Unknown bug',\n description: r.message?.markdown || r.message?.text || '',\n file: r.locations?.[0]?.physicalLocation?.artifactLocation?.uri || 'unknown',\n line: r.locations?.[0]?.physicalLocation?.region?.startLine || 0,\n endLine: r.locations?.[0]?.physicalLocation?.region?.endLine,\n severity: mapSarifLevel(r.level),\n category: props.category || 'logic-error',\n confidence: {\n overall: props.confidence || 'medium',\n codePathValidity: props.codePathValidity || 0.8,\n reachability: props.reachability || 0.8,\n intentViolation: props.intentViolation || false,\n staticToolSignal: props.staticToolSignal || false,\n adversarialSurvived: props.adversarialSurvived || false,\n },\n codePath: r.codeFlows?.[0]?.threadFlows?.[0]?.locations?.map((loc: any, idx: number) => ({\n step: idx + 1,\n file: loc.location?.physicalLocation?.artifactLocation?.uri || '',\n line: loc.location?.physicalLocation?.region?.startLine || 0,\n code: '',\n explanation: loc.message?.text || '',\n })) || [],\n evidence: props.evidence || [],\n suggestedFix: props.suggestedFix,\n createdAt: new Date().toISOString(),\n };\n }) || [];\n}\n\nasync function loadBugFromGitHub(issueUrl: string, cwd: string): Promise<Bug | null> {\n try {\n // Parse the issue URL: https://github.com/owner/repo/issues/123\n const match = issueUrl.match(/github\\.com\\/([^/]+)\\/([^/]+)\\/issues\\/(\\d+)/);\n if (!match) {\n p.log.error('Invalid GitHub issue URL format. Expected: https://github.com/owner/repo/issues/123');\n return null;\n }\n\n const [, owner, repo, issueNumber] = match;\n\n // Use gh CLI to fetch issue details\n const { stdout } = await execa('gh', [\n 'issue', 'view', issueNumber,\n '--repo', `${owner}/${repo}`,\n '--json', 'title,body,labels'\n ], { cwd });\n\n const issue = JSON.parse(stdout);\n\n // Parse file and line from issue body (common patterns)\n const fileMatch = issue.body?.match(/(?:file|path|location):\\s*[`\"]?([^\\s`\"]+)[`\"]?/i) ||\n issue.body?.match(/```[\\w]*\\n(?:\\/\\/|#)\\s*([^\\s:]+):(\\d+)/);\n const lineMatch = issue.body?.match(/(?:line|L|:)(\\d+)/);\n\n // Determine severity from labels\n let severity: 'critical' | 'high' | 'medium' | 'low' = 'medium';\n const labels = issue.labels?.map((l: any) => l.name.toLowerCase()) || [];\n if (labels.some((l: string) => l.includes('critical') || l.includes('security'))) {\n severity = 'critical';\n } else if (labels.some((l: string) => l.includes('bug') || l.includes('high'))) {\n severity = 'high';\n } else if (labels.some((l: string) => l.includes('low') || l.includes('minor'))) {\n severity = 'low';\n }\n\n // Determine category from labels\n let category: Bug['category'] = 'logic-error';\n if (labels.some((l: string) => l.includes('security'))) {\n category = 'security';\n } else if (labels.some((l: string) => l.includes('null') || l.includes('undefined'))) {\n category = 'null-reference';\n } else if (labels.some((l: string) => l.includes('async') || l.includes('race'))) {\n category = 'async-race-condition';\n }\n\n return {\n id: `GH-${issueNumber}`,\n title: issue.title,\n description: issue.body || issue.title,\n file: fileMatch?.[1] || '',\n line: parseInt(lineMatch?.[1] || '1', 10),\n severity,\n category,\n confidence: {\n overall: 'medium',\n codePathValidity: 0.5,\n reachability: 0.5,\n intentViolation: false,\n staticToolSignal: false,\n adversarialSurvived: false,\n },\n codePath: [],\n evidence: [`GitHub issue: ${issueUrl}`],\n createdAt: new Date().toISOString(),\n };\n } catch (error: any) {\n if (error.message?.includes('gh')) {\n p.log.error('GitHub CLI (gh) is required for --github option.');\n p.log.info('Install it: https://cli.github.com/');\n } else {\n p.log.error(`Failed to fetch GitHub issue: ${error.message}`);\n }\n return null;\n }\n}\n\nasync function collectManualBugDescription(cwd: string): Promise<Bug | null> {\n // Get file path\n const file = await p.text({\n message: 'File path containing the bug:',\n placeholder: 'src/components/Button.tsx',\n validate: (value) => {\n if (!value) return 'File path is required';\n const fullPath = isAbsolute(value) ? value : resolve(cwd, value);\n if (!existsSync(fullPath)) return `File not found: ${value}`;\n return undefined;\n },\n });\n\n if (p.isCancel(file)) return null;\n\n // Get line number\n const lineStr = await p.text({\n message: 'Line number (approximate is fine):',\n placeholder: '42',\n validate: (value) => {\n if (!value) return 'Line number is required';\n if (isNaN(parseInt(value, 10))) return 'Must be a number';\n return undefined;\n },\n });\n\n if (p.isCancel(lineStr)) return null;\n\n // Get bug title\n const title = await p.text({\n message: 'Bug title (brief description):',\n placeholder: 'Null reference when user is not logged in',\n });\n\n if (p.isCancel(title)) return null;\n\n // Get detailed description\n const description = await p.text({\n message: 'Detailed description (what happens, how to trigger):',\n placeholder: 'When user.profile is accessed before login check, TypeError is thrown',\n });\n\n if (p.isCancel(description)) return null;\n\n // Get severity\n const severity = await p.select({\n message: 'Bug severity:',\n options: [\n { value: 'critical', label: 'Critical', hint: 'security issue, data loss' },\n { value: 'high', label: 'High', hint: 'crash, incorrect behavior' },\n { value: 'medium', label: 'Medium', hint: 'bug with workaround' },\n { value: 'low', label: 'Low', hint: 'minor issue' },\n ],\n initialValue: 'medium',\n });\n\n if (p.isCancel(severity)) return null;\n\n // Get category\n const category = await p.select({\n message: 'Bug category:',\n options: [\n { value: 'logic-error', label: 'Logic Error' },\n { value: 'null-reference', label: 'Null Reference' },\n { value: 'security', label: 'Security' },\n { value: 'async-race-condition', label: 'Async/Race Condition' },\n { value: 'edge-case', label: 'Edge Case' },\n { value: 'type-coercion', label: 'Type Coercion' },\n { value: 'resource-leak', label: 'Resource Leak' },\n { value: 'intent-violation', label: 'Intent Violation' },\n ],\n initialValue: 'logic-error',\n });\n\n if (p.isCancel(category)) return null;\n\n const filePath = isAbsolute(file) ? file : resolve(cwd, file);\n const relativePath = filePath.startsWith(cwd) ? filePath.slice(cwd.length + 1) : filePath;\n\n return {\n id: `MANUAL-${Date.now()}`,\n title: title || 'Manual bug',\n description: description || title || 'Manual bug',\n file: relativePath,\n line: parseInt(lineStr || '1', 10),\n severity: severity as Bug['severity'],\n category: category as Bug['category'],\n confidence: {\n overall: 'high', // User-reported bugs are high confidence\n codePathValidity: 1,\n reachability: 1,\n intentViolation: true,\n staticToolSignal: false,\n adversarialSurvived: false,\n },\n codePath: [],\n evidence: ['Manually reported by user'],\n createdAt: new Date().toISOString(),\n };\n}\n\nfunction getDefaultConfig() {\n // Return minimal config for external bug sources when whiterose isn't initialized\n return {\n version: '1',\n provider: 'claude-code' as const,\n include: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],\n exclude: ['node_modules', 'dist', 'build'],\n priorities: {},\n categories: ['logic-error', 'security', 'null-reference'],\n minConfidence: 'low' as const,\n staticAnalysis: { typescript: true, eslint: true },\n output: { sarif: true, markdown: true, sarifPath: '.whiterose/reports', markdownPath: 'BUGS.md' },\n };\n}\n\n// ─────────────────────────────────────────────────────────────\n// Bug Processing Functions\n// ─────────────────────────────────────────────────────────────\n\nasync function processBugList(\n bugs: Bug[],\n config: any,\n options: FixOptions,\n bugId: string | undefined\n): Promise<void> {\n if (bugs.length === 0) {\n p.log.success('No bugs to fix!');\n process.exit(0);\n }\n\n // If specific bug ID provided, fix just that bug\n if (bugId) {\n const bug = bugs.find((b) => b.id === bugId || b.id.toLowerCase() === bugId.toLowerCase());\n if (!bug) {\n p.log.error(`Bug ${bugId} not found.`);\n p.log.info('Available bugs: ' + bugs.map((b) => b.id).join(', '));\n process.exit(1);\n }\n\n return await fixSingleBug(bug, config, options);\n }\n\n // Launch interactive TUI\n try {\n await startFixTUI(bugs, config, options);\n } catch (error: any) {\n // If Ink fails (e.g., not a TTY), fall back to simple mode\n if (error.message?.includes('stdin') || error.message?.includes('TTY')) {\n p.log.warn('Interactive mode not available. Use \"whiterose fix <bug-id>\" to fix specific bugs.');\n p.log.info('Available bugs:');\n for (const bug of bugs) {\n const severityColor = bug.severity === 'critical' ? 'red' : bug.severity === 'high' ? 'yellow' : 'blue';\n console.log(` ${chalk[severityColor]('●')} ${bug.id}: ${bug.title}`);\n }\n } else {\n throw error;\n }\n }\n}\n\nasync function fixSingleBug(bug: Bug, config: any, options: FixOptions): Promise<void> {\n p.intro(chalk.red('whiterose') + chalk.dim(' - fixing bug'));\n\n // Check if file is specified (needed for fixing)\n if (!bug.file) {\n const file = await p.text({\n message: 'File path containing the bug (required for fix):',\n placeholder: 'src/components/Button.tsx',\n });\n\n if (p.isCancel(file) || !file) {\n p.cancel('Fix cancelled - file path required.');\n process.exit(0);\n }\n\n bug.file = file;\n }\n\n // Show bug details\n console.log();\n console.log(chalk.bold(` ${bug.id}: ${bug.title}`));\n console.log(` ${chalk.dim('File:')} ${bug.file}:${bug.line}`);\n console.log(` ${chalk.dim('Severity:')} ${bug.severity}`);\n console.log();\n console.log(` ${bug.description}`);\n console.log();\n\n if (bug.suggestedFix) {\n console.log(chalk.dim(' Suggested fix:'));\n console.log(` ${chalk.green(bug.suggestedFix)}`);\n console.log();\n }\n\n // Confirm fix\n if (!options.dryRun) {\n const confirm = await p.confirm({\n message: 'Apply this fix?',\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel('Fix cancelled.');\n process.exit(0);\n }\n }\n\n // Apply fix\n const spinner = p.spinner();\n spinner.start(options.dryRun ? 'Generating fix preview...' : 'Applying fix...');\n\n try {\n const result = await applyFix(bug, config, options);\n\n if (result.success) {\n spinner.stop(options.dryRun ? 'Fix preview generated' : 'Fix applied');\n\n if (result.diff) {\n console.log();\n console.log(chalk.dim(' Changes:'));\n for (const line of result.diff.split('\\n')) {\n if (line.startsWith('+')) {\n console.log(chalk.green(` ${line}`));\n } else if (line.startsWith('-')) {\n console.log(chalk.red(` ${line}`));\n } else {\n console.log(chalk.dim(` ${line}`));\n }\n }\n console.log();\n }\n\n if (result.branchName) {\n p.log.info(`Changes committed to branch: ${result.branchName}`);\n }\n\n p.outro(chalk.green('Fix complete!'));\n } else {\n spinner.stop('Fix failed');\n p.log.error(result.error || 'Unknown error');\n process.exit(1);\n }\n } catch (error: any) {\n spinner.stop('Fix failed');\n p.log.error(error.message);\n process.exit(1);\n }\n}\n\nfunction mapSarifLevel(level: string): 'critical' | 'high' | 'medium' | 'low' {\n switch (level) {\n case 'error':\n return 'high';\n case 'warning':\n return 'medium';\n case 'note':\n return 'low';\n default:\n return 'medium';\n }\n}\n","import * as p from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { loadConfig } from '../../core/config.js';\nimport { getProvider } from '../../providers/index.js';\nimport { scanCodebase } from '../../core/scanner/index.js';\nimport { generateIntentDocument } from '../../core/contracts/intent.js';\n\ninterface RefreshOptions {\n keepConfig: boolean;\n}\n\nexport async function refreshCommand(options: RefreshOptions): Promise<void> {\n const cwd = process.cwd();\n const whiterosePath = join(cwd, '.whiterose');\n\n // Check if initialized\n if (!existsSync(whiterosePath)) {\n p.log.error('whiterose is not initialized in this directory.');\n p.log.info('Run \"whiterose init\" first.');\n process.exit(1);\n }\n\n p.intro(chalk.red('whiterose') + chalk.dim(' - refreshing understanding'));\n\n // Load config\n const config = await loadConfig(cwd);\n\n // Scan codebase\n const scanSpinner = p.spinner();\n scanSpinner.start('Scanning codebase...');\n const files = await scanCodebase(cwd, config);\n scanSpinner.stop(`Found ${files.length} source files`);\n\n // Generate new understanding\n const understandingSpinner = p.spinner();\n understandingSpinner.start('Regenerating understanding with AI...');\n\n try {\n const provider = await getProvider(config.provider);\n const understanding = await provider.generateUnderstanding(files);\n\n // Write new understanding\n writeFileSync(\n join(whiterosePath, 'cache', 'understanding.json'),\n JSON.stringify(understanding, null, 2),\n 'utf-8'\n );\n\n // Regenerate intent.md\n const intentDoc = generateIntentDocument(understanding);\n writeFileSync(join(whiterosePath, 'intent.md'), intentDoc, 'utf-8');\n\n // Reset file hashes\n writeFileSync(\n join(whiterosePath, 'cache', 'file-hashes.json'),\n JSON.stringify({ version: '1', fileHashes: [], lastFullScan: new Date().toISOString() }, null, 2),\n 'utf-8'\n );\n\n understandingSpinner.stop('Understanding regenerated');\n } catch (error) {\n understandingSpinner.stop('Failed to regenerate understanding');\n p.log.error(String(error));\n process.exit(1);\n }\n\n p.outro(chalk.green('Refresh complete!'));\n}\n","import * as p from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, readdirSync, statSync } from 'fs';\nimport { join } from 'path';\nimport { loadConfig, loadUnderstanding } from '../../core/config.js';\nimport { detectProvider } from '../../providers/detect.js';\n\nexport async function statusCommand(): Promise<void> {\n const cwd = process.cwd();\n const whiterosePath = join(cwd, '.whiterose');\n\n // Check if initialized\n if (!existsSync(whiterosePath)) {\n p.log.error('whiterose is not initialized in this directory.');\n p.log.info('Run \"whiterose init\" first.');\n process.exit(1);\n }\n\n p.intro(chalk.red('whiterose') + chalk.dim(' - status'));\n\n // Load config\n const config = await loadConfig(cwd);\n const understanding = await loadUnderstanding(cwd);\n\n // Detect available providers\n const availableProviders = await detectProvider();\n\n console.log();\n console.log(chalk.bold(' Configuration'));\n console.log(` ${chalk.dim('Provider:')} ${config.provider}`);\n console.log(` ${chalk.dim('Available:')} ${availableProviders.join(', ') || 'none'}`);\n console.log();\n\n if (understanding) {\n console.log(chalk.bold(' Codebase Understanding'));\n console.log(` ${chalk.dim('Type:')} ${understanding.summary.type}`);\n console.log(` ${chalk.dim('Framework:')} ${understanding.summary.framework || 'none'}`);\n console.log(` ${chalk.dim('Files:')} ${understanding.structure.totalFiles}`);\n console.log(` ${chalk.dim('Features:')} ${understanding.features.length}`);\n console.log(` ${chalk.dim('Contracts:')} ${understanding.contracts.length}`);\n console.log(` ${chalk.dim('Generated:')} ${understanding.generatedAt}`);\n console.log();\n }\n\n // Check cache status\n const hashesPath = join(whiterosePath, 'cache', 'file-hashes.json');\n if (existsSync(hashesPath)) {\n const hashes = JSON.parse(readFileSync(hashesPath, 'utf-8'));\n console.log(chalk.bold(' Cache'));\n console.log(` ${chalk.dim('Files tracked:')} ${hashes.fileHashes?.length || 0}`);\n console.log(` ${chalk.dim('Last full scan:')} ${hashes.lastFullScan || 'never'}`);\n console.log();\n }\n\n // Check reports\n const reportsDir = join(whiterosePath, 'reports');\n if (existsSync(reportsDir)) {\n const reports = readdirSync(reportsDir).filter((f) => f.endsWith('.sarif'));\n if (reports.length > 0) {\n const latestReport = reports.sort().reverse()[0];\n const reportPath = join(reportsDir, latestReport);\n const stats = statSync(reportPath);\n\n console.log(chalk.bold(' Last Scan'));\n console.log(` ${chalk.dim('Report:')} ${latestReport}`);\n console.log(` ${chalk.dim('Date:')} ${stats.mtime.toISOString()}`);\n\n // Try to get bug count from report\n try {\n const sarif = JSON.parse(readFileSync(reportPath, 'utf-8'));\n const bugCount = sarif.runs?.[0]?.results?.length || 0;\n console.log(` ${chalk.dim('Bugs found:')} ${bugCount}`);\n } catch {\n // Ignore parse errors\n }\n console.log();\n }\n }\n\n p.outro(chalk.dim('Run \"whiterose scan\" to scan for bugs'));\n}\n","import * as p from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport { outputMarkdown } from '../../output/markdown.js';\nimport { ScanResult, Bug } from '../../types.js';\n\ninterface ReportOptions {\n output: string;\n format: 'markdown' | 'sarif' | 'json';\n}\n\nexport async function reportCommand(options: ReportOptions): Promise<void> {\n const cwd = process.cwd();\n const whiterosePath = join(cwd, '.whiterose');\n\n // Check if initialized\n if (!existsSync(whiterosePath)) {\n p.log.error('whiterose is not initialized in this directory.');\n p.log.info('Run \"whiterose init\" first.');\n process.exit(1);\n }\n\n // Find latest scan result\n const reportsDir = join(whiterosePath, 'reports');\n if (!existsSync(reportsDir)) {\n p.log.error('No scan results found. Run \"whiterose scan\" first.');\n process.exit(1);\n }\n\n const reports = readdirSync(reportsDir)\n .filter((f) => f.endsWith('.sarif'))\n .sort()\n .reverse();\n\n if (reports.length === 0) {\n p.log.error('No scan results found. Run \"whiterose scan\" first.');\n process.exit(1);\n }\n\n const latestReport = join(reportsDir, reports[0]);\n const sarif = JSON.parse(readFileSync(latestReport, 'utf-8'));\n\n // Convert SARIF to ScanResult\n const bugs: Bug[] = sarif.runs?.[0]?.results?.map((r: any, i: number) => ({\n id: r.ruleId || `WR-${String(i + 1).padStart(3, '0')}`,\n title: r.message?.text || 'Unknown bug',\n description: r.message?.markdown || r.message?.text || '',\n file: r.locations?.[0]?.physicalLocation?.artifactLocation?.uri || 'unknown',\n line: r.locations?.[0]?.physicalLocation?.region?.startLine || 0,\n severity: r.level === 'error' ? 'critical' : r.level === 'warning' ? 'high' : 'medium',\n category: 'logic-error',\n confidence: { overall: 'high', codePathValidity: 0.9, reachability: 0.9, intentViolation: false, staticToolSignal: false, adversarialSurvived: true },\n codePath: [],\n evidence: [],\n createdAt: new Date().toISOString(),\n })) || [];\n\n const result: ScanResult = {\n id: 'report',\n timestamp: new Date().toISOString(),\n scanType: 'full',\n filesScanned: 0,\n duration: 0,\n bugs,\n summary: {\n critical: bugs.filter((b) => b.severity === 'critical').length,\n high: bugs.filter((b) => b.severity === 'high').length,\n medium: bugs.filter((b) => b.severity === 'medium').length,\n low: bugs.filter((b) => b.severity === 'low').length,\n total: bugs.length,\n },\n };\n\n // Generate output\n let output: string;\n switch (options.format) {\n case 'markdown':\n output = outputMarkdown(result);\n break;\n case 'sarif':\n output = readFileSync(latestReport, 'utf-8');\n break;\n case 'json':\n output = JSON.stringify(result, null, 2);\n break;\n default:\n output = outputMarkdown(result);\n }\n\n // Write or print\n if (options.output === '-') {\n console.log(output);\n } else {\n writeFileSync(options.output, output);\n p.log.success(`Report written to ${options.output}`);\n }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport * as p from '@clack/prompts';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { initCommand } from './commands/init.js';\nimport { scanCommand } from './commands/scan.js';\nimport { fixCommand } from './commands/fix.js';\nimport { refreshCommand } from './commands/refresh.js';\nimport { statusCommand } from './commands/status.js';\nimport { reportCommand } from './commands/report.js';\n\nconst BANNER = `\n${chalk.red('██╗ ██╗██╗ ██╗██╗████████╗███████╗██████╗ ██████╗ ███████╗███████╗')}\n${chalk.red('██║ ██║██║ ██║██║╚══██╔══╝██╔════╝██╔══██╗██╔═══██╗██╔════╝██╔════╝')}\n${chalk.red('██║ █╗ ██║███████║██║ ██║ █████╗ ██████╔╝██║ ██║███████╗█████╗ ')}\n${chalk.red('██║███╗██║██╔══██║██║ ██║ ██╔══╝ ██╔══██╗██║ ██║╚════██║██╔══╝ ')}\n${chalk.red('╚███╔███╔╝██║ ██║██║ ██║ ███████╗██║ ██║╚██████╔╝███████║███████╗')}\n${chalk.red(' ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚══════╝')}\n\n${chalk.dim(' \"I\\'ve been staring at your code for a long time.\"')}\n`;\n\nconst program = new Command();\n\nprogram\n .name('whiterose')\n .description('AI-powered bug hunter that uses your existing LLM subscription')\n .version('0.1.0')\n .hook('preAction', () => {\n // Show banner only for main commands, not help\n const args = process.argv.slice(2);\n if (!args.includes('--help') && !args.includes('-h') && args.length > 0) {\n console.log(BANNER);\n }\n });\n\n// ─────────────────────────────────────────────────────────────\n// init - First-time setup with intelligent onboarding\n// ─────────────────────────────────────────────────────────────\nprogram\n .command('init')\n .description('Initialize whiterose for this project (scans codebase, asks questions, generates config)')\n .option('-p, --provider <provider>', 'LLM provider to use', 'claude-code')\n .option('--skip-questions', 'Skip interactive questions, use defaults')\n .option('--force', 'Overwrite existing .whiterose directory')\n .option('--unsafe', 'Bypass LLM permission prompts (use with caution)')\n .action(initCommand);\n\n// ─────────────────────────────────────────────────────────────\n// scan - Find bugs\n// ─────────────────────────────────────────────────────────────\nprogram\n .command('scan [paths...]')\n .description('Scan for bugs in the codebase')\n .option('-f, --full', 'Force full scan (ignore cache)')\n .option('--json', 'Output as JSON only')\n .option('--sarif', 'Output as SARIF only')\n .option('-p, --provider <provider>', 'Override LLM provider')\n .option('-c, --category <categories...>', 'Filter by bug categories')\n .option('--min-confidence <level>', 'Minimum confidence level to report', 'low')\n .option('--no-adversarial', 'Skip adversarial validation (faster, less accurate)')\n .option('--unsafe', 'Bypass LLM permission prompts (use with caution)')\n .action(scanCommand);\n\n// ─────────────────────────────────────────────────────────────\n// fix - Interactive bug fixing TUI\n// ─────────────────────────────────────────────────────────────\nprogram\n .command('fix [bugId]')\n .description('Fix bugs interactively or by ID')\n .option('--dry-run', 'Show proposed fixes without applying')\n .option('--branch <name>', 'Create fixes in a new branch')\n .option('--sarif <path>', 'Load bugs from an external SARIF file')\n .option('--github <url>', 'Load bug from a GitHub issue URL')\n .option('--describe', 'Manually describe a bug to fix')\n .action(fixCommand);\n\n// ─────────────────────────────────────────────────────────────\n// refresh - Rebuild understanding from scratch\n// ─────────────────────────────────────────────────────────────\nprogram\n .command('refresh')\n .description('Rebuild codebase understanding from scratch')\n .option('--keep-config', 'Keep existing config, only regenerate understanding')\n .action(refreshCommand);\n\n// ─────────────────────────────────────────────────────────────\n// status - Show cache and scan status\n// ─────────────────────────────────────────────────────────────\nprogram\n .command('status')\n .description('Show whiterose status (cache, last scan, provider)')\n .action(statusCommand);\n\n// ─────────────────────────────────────────────────────────────\n// report - Generate bug report\n// ─────────────────────────────────────────────────────────────\nprogram\n .command('report')\n .description('Generate BUGS.md from last scan')\n .option('-o, --output <path>', 'Output path', 'BUGS.md')\n .option('--format <format>', 'Output format (markdown, sarif, json)', 'markdown')\n .action(reportCommand);\n\n// ─────────────────────────────────────────────────────────────\n// Interactive menu when no command provided\n// ─────────────────────────────────────────────────────────────\nasync function showInteractiveMenu(): Promise<void> {\n console.log(BANNER);\n\n const cwd = process.cwd();\n const whiterosePath = join(cwd, '.whiterose');\n const isInitialized = existsSync(whiterosePath);\n\n // Show project status\n if (isInitialized) {\n console.log(chalk.dim(` Project: ${chalk.white(cwd.split('/').pop())}`));\n console.log(chalk.dim(` Status: ${chalk.green('initialized')}`));\n console.log();\n } else {\n console.log(chalk.dim(` Project: ${chalk.white(cwd.split('/').pop())}`));\n console.log(chalk.dim(` Status: ${chalk.yellow('not initialized')}`));\n console.log();\n }\n\n // Build menu options based on state\n const menuOptions: Array<{ value: string; label: string; hint?: string }> = [];\n\n if (!isInitialized) {\n menuOptions.push({\n value: 'init',\n label: 'Initialize',\n hint: 'set up whiterose for this project',\n });\n } else {\n menuOptions.push(\n { value: 'scan', label: 'Scan', hint: 'find bugs in the codebase' },\n { value: 'fix', label: 'Fix', hint: 'fix bugs interactively' },\n { value: 'status', label: 'Status', hint: 'show current status' },\n { value: 'report', label: 'Report', hint: 'generate bug report' },\n { value: 'refresh', label: 'Refresh', hint: 'rebuild codebase understanding' }\n );\n }\n\n menuOptions.push({ value: 'help', label: 'Help', hint: 'show all commands' });\n menuOptions.push({ value: 'exit', label: 'Exit' });\n\n const choice = await p.select({\n message: 'What would you like to do?',\n options: menuOptions,\n });\n\n if (p.isCancel(choice) || choice === 'exit') {\n p.outro(chalk.dim('Goodbye.'));\n process.exit(0);\n }\n\n // Execute chosen command\n console.log(); // Add spacing\n\n switch (choice) {\n case 'init':\n await initCommand({ provider: 'claude-code', skipQuestions: false, force: false, unsafe: false });\n break;\n case 'scan':\n await scanCommand([], {\n full: false,\n json: false,\n sarif: false,\n provider: undefined,\n category: undefined,\n minConfidence: 'low',\n adversarial: true,\n unsafe: false,\n });\n break;\n case 'fix':\n await fixCommand(undefined, { dryRun: false });\n break;\n case 'status':\n await statusCommand();\n break;\n case 'report':\n await reportCommand({ output: 'BUGS.md', format: 'markdown' });\n break;\n case 'refresh':\n await refreshCommand({ keepConfig: false });\n break;\n case 'help':\n program.help();\n break;\n }\n}\n\n// Show interactive menu when no command provided\nif (process.argv.length === 2) {\n showInteractiveMenu().catch((error) => {\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n });\n} else {\n program.parse();\n}\n"]}
|