@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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/core/config.ts","../src/core/dependencies.ts","../src/core/scanner/index.ts","../src/providers/detect.ts","../src/core/utils.ts","../src/core/validation.ts","../src/providers/adapters/claude-code.ts","../src/providers/adapters/aider.ts","../src/providers/index.ts","../src/analysis/static.ts","../src/output/sarif.ts","../src/output/markdown.ts","../src/core/contracts/intent.ts","../src/core/git.ts","../src/core/fixer.ts","../src/core/monorepo.ts"],"names":["writeFileSync","fg","existsSync","readFileSync","join","ext","getDependentFiles","z","execa","dirname","resolve","relative"],"mappings":"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","file":"index.js","sourcesContent":["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","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 { readFileSync, existsSync } from 'fs';\nimport { dirname, join, resolve, extname } from 'path';\nimport fg from 'fast-glob';\n\ninterface ImportInfo {\n source: string;\n specifiers: string[];\n isDefault: boolean;\n isNamespace: boolean;\n isTypeOnly: boolean;\n}\n\ninterface DependencyGraph {\n files: Map<string, Set<string>>; // file -> files it imports\n dependents: Map<string, Set<string>>; // file -> files that import it\n}\n\n/**\n * Build a dependency graph for the given files\n */\nexport async function buildDependencyGraph(\n cwd: string,\n files: string[]\n): Promise<DependencyGraph> {\n const graph: DependencyGraph = {\n files: new Map(),\n dependents: new Map(),\n };\n\n for (const file of files) {\n const imports = await getFileImports(file);\n const resolvedImports = new Set<string>();\n\n for (const imp of imports) {\n const resolved = resolveImport(file, imp.source, cwd);\n if (resolved && files.includes(resolved)) {\n resolvedImports.add(resolved);\n }\n }\n\n graph.files.set(file, resolvedImports);\n\n // Build reverse mapping (dependents)\n for (const imported of resolvedImports) {\n if (!graph.dependents.has(imported)) {\n graph.dependents.set(imported, new Set());\n }\n graph.dependents.get(imported)!.add(file);\n }\n }\n\n return graph;\n}\n\n/**\n * Get all files that depend on the given files (directly or transitively)\n */\nexport async function getDependentFiles(\n changedFiles: string[],\n cwd: string,\n allFiles?: string[]\n): Promise<string[]> {\n // Get all project files if not provided\n if (!allFiles) {\n allFiles = await fg(['**/*.{ts,tsx,js,jsx}'], {\n cwd,\n ignore: ['node_modules/**', 'dist/**', 'build/**', '.next/**'],\n absolute: true,\n });\n }\n\n // Build dependency graph\n const graph = await buildDependencyGraph(cwd, allFiles);\n\n // Find all dependents transitively\n const dependents = new Set<string>(changedFiles);\n const queue = [...changedFiles];\n\n while (queue.length > 0) {\n const file = queue.shift()!;\n const fileDependents = graph.dependents.get(file);\n\n if (fileDependents) {\n for (const dep of fileDependents) {\n if (!dependents.has(dep)) {\n dependents.add(dep);\n queue.push(dep);\n }\n }\n }\n }\n\n return Array.from(dependents);\n}\n\n/**\n * Parse imports from a TypeScript/JavaScript file\n */\nasync function getFileImports(filePath: string): Promise<ImportInfo[]> {\n if (!existsSync(filePath)) {\n return [];\n }\n\n const content = readFileSync(filePath, 'utf-8');\n const imports: ImportInfo[] = [];\n\n // Match ES6 imports\n // import { x, y } from 'module'\n // import x from 'module'\n // import * as x from 'module'\n // import 'module'\n // import type { x } from 'module'\n const importRegex =\n /import\\s+(?:(type)\\s+)?(?:(\\*\\s+as\\s+\\w+)|(\\{[^}]+\\})|(\\w+)(?:\\s*,\\s*(\\{[^}]+\\}))?|)\\s*(?:from\\s+)?['\"]([^'\"]+)['\"]/g;\n\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const isTypeOnly = !!match[1];\n const isNamespace = !!match[2];\n const namedImports = match[3] || match[5] || '';\n const defaultImport = match[4] || '';\n const source = match[6];\n\n const specifiers: string[] = [];\n\n if (defaultImport) {\n specifiers.push(defaultImport);\n }\n\n if (namedImports) {\n const named = namedImports\n .replace(/[{}]/g, '')\n .split(',')\n .map((s) => s.trim().split(/\\s+as\\s+/)[0].trim())\n .filter(Boolean);\n specifiers.push(...named);\n }\n\n imports.push({\n source,\n specifiers,\n isDefault: !!defaultImport,\n isNamespace,\n isTypeOnly,\n });\n }\n\n // Also match require() calls\n const requireRegex = /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n while ((match = requireRegex.exec(content)) !== null) {\n imports.push({\n source: match[1],\n specifiers: [],\n isDefault: false,\n isNamespace: false,\n isTypeOnly: false,\n });\n }\n\n // Match dynamic imports\n const dynamicImportRegex = /import\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n while ((match = dynamicImportRegex.exec(content)) !== null) {\n imports.push({\n source: match[1],\n specifiers: [],\n isDefault: false,\n isNamespace: false,\n isTypeOnly: false,\n });\n }\n\n return imports;\n}\n\n/**\n * Resolve an import path to an absolute file path\n */\nfunction resolveImport(\n fromFile: string,\n importPath: string,\n cwd: string\n): string | null {\n // Skip node_modules imports\n if (!importPath.startsWith('.') && !importPath.startsWith('/')) {\n return null;\n }\n\n const fromDir = dirname(fromFile);\n let resolved: string;\n\n if (importPath.startsWith('/')) {\n resolved = join(cwd, importPath);\n } else {\n resolved = resolve(fromDir, importPath);\n }\n\n // Try to resolve with different extensions\n const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.tsx', '/index.js', '/index.jsx'];\n\n // First check if the path exists as-is\n if (existsSync(resolved)) {\n const ext = extname(resolved);\n if (ext === '.ts' || ext === '.tsx' || ext === '.js' || ext === '.jsx') {\n return resolved;\n }\n // It's a directory, try index files\n for (const ext of ['/index.ts', '/index.tsx', '/index.js', '/index.jsx']) {\n if (existsSync(resolved + ext)) {\n return resolved + ext;\n }\n }\n }\n\n // Try adding extensions\n for (const ext of extensions) {\n const withExt = resolved + ext;\n if (existsSync(withExt)) {\n return withExt;\n }\n }\n\n // Try removing .js extension and adding .ts (common in ESM)\n if (importPath.endsWith('.js')) {\n const tsPath = resolved.replace(/\\.js$/, '.ts');\n if (existsSync(tsPath)) {\n return tsPath;\n }\n const tsxPath = resolved.replace(/\\.js$/, '.tsx');\n if (existsSync(tsxPath)) {\n return tsxPath;\n }\n }\n\n return null;\n}\n\n/**\n * Get the imports that a file makes\n */\nexport async function getImportsOf(filePath: string): Promise<string[]> {\n const imports = await getFileImports(filePath);\n return imports.map((i) => i.source);\n}\n\n/**\n * Check if fileA depends on fileB (directly or transitively)\n */\nexport async function dependsOn(\n fileA: string,\n fileB: string,\n cwd: string,\n allFiles: string[]\n): Promise<boolean> {\n const graph = await buildDependencyGraph(cwd, allFiles);\n\n const visited = new Set<string>();\n const queue = [fileA];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (visited.has(current)) continue;\n visited.add(current);\n\n const deps = graph.files.get(current);\n if (!deps) continue;\n\n if (deps.has(fileB)) {\n return true;\n }\n\n for (const dep of deps) {\n if (!visited.has(dep)) {\n queue.push(dep);\n }\n }\n }\n\n return false;\n}\n\n/**\n * Get circular dependencies\n */\nexport async function findCircularDependencies(\n cwd: string,\n allFiles: string[]\n): Promise<string[][]> {\n const graph = await buildDependencyGraph(cwd, allFiles);\n const circles: string[][] = [];\n\n for (const file of allFiles) {\n const path = findCycle(file, graph, []);\n if (path && !circles.some((c) => arraysEqual(c, path))) {\n circles.push(path);\n }\n }\n\n return circles;\n}\n\nfunction findCycle(\n file: string,\n graph: DependencyGraph,\n path: string[]\n): string[] | null {\n const index = path.indexOf(file);\n if (index !== -1) {\n return path.slice(index);\n }\n\n const deps = graph.files.get(file);\n if (!deps) return null;\n\n for (const dep of deps) {\n const cycle = findCycle(dep, graph, [...path, file]);\n if (cycle) return cycle;\n }\n\n return null;\n}\n\nfunction arraysEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) return false;\n const sortedA = [...a].sort();\n const sortedB = [...b].sort();\n return sortedA.every((v, i) => v === sortedB[i]);\n}\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 { 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","/**\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 { 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 { 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","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 { existsSync, readFileSync } from 'fs';\nimport { join, relative, dirname } from 'path';\nimport fg from 'fast-glob';\n\nexport interface Package {\n name: string;\n path: string;\n relativePath: string;\n packageJson: Record<string, any>;\n}\n\nexport interface MonorepoInfo {\n isMonorepo: boolean;\n type: 'npm-workspaces' | 'yarn-workspaces' | 'pnpm-workspaces' | 'lerna' | 'nx' | 'turborepo' | 'none';\n rootPath: string;\n packages: Package[];\n}\n\n/**\n * Detect if the cwd is a monorepo and return info about packages\n */\nexport async function detectMonorepo(cwd: string): Promise<MonorepoInfo> {\n // Check for various monorepo configurations\n const packageJsonPath = join(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return {\n isMonorepo: false,\n type: 'none',\n rootPath: cwd,\n packages: [],\n };\n }\n\n let packageJson: Record<string, any>;\n try {\n packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n } catch {\n return {\n isMonorepo: false,\n type: 'none',\n rootPath: cwd,\n packages: [],\n };\n }\n\n // Check for npm/yarn workspaces\n if (packageJson.workspaces) {\n const workspacePatterns = Array.isArray(packageJson.workspaces)\n ? packageJson.workspaces\n : packageJson.workspaces.packages || [];\n\n const packages = await findPackages(cwd, workspacePatterns);\n\n const type = existsSync(join(cwd, 'yarn.lock')) ? 'yarn-workspaces' : 'npm-workspaces';\n\n return {\n isMonorepo: packages.length > 0,\n type,\n rootPath: cwd,\n packages,\n };\n }\n\n // Check for pnpm workspaces\n const pnpmWorkspacePath = join(cwd, 'pnpm-workspace.yaml');\n if (existsSync(pnpmWorkspacePath)) {\n const pnpmWorkspace = readFileSync(pnpmWorkspacePath, 'utf-8');\n const packagesMatch = pnpmWorkspace.match(/packages:\\s*([\\s\\S]*?)(?=\\n\\w|$)/);\n\n if (packagesMatch) {\n const patterns = packagesMatch[1]\n .split('\\n')\n .map((line) => line.replace(/^\\s*-\\s*['\"]?/, '').replace(/['\"]?\\s*$/, ''))\n .filter((line) => line && !line.startsWith('#'));\n\n const packages = await findPackages(cwd, patterns);\n\n return {\n isMonorepo: packages.length > 0,\n type: 'pnpm-workspaces',\n rootPath: cwd,\n packages,\n };\n }\n }\n\n // Check for lerna\n const lernaJsonPath = join(cwd, 'lerna.json');\n if (existsSync(lernaJsonPath)) {\n try {\n const lernaConfig = JSON.parse(readFileSync(lernaJsonPath, 'utf-8'));\n const patterns = lernaConfig.packages || ['packages/*'];\n const packages = await findPackages(cwd, patterns);\n\n return {\n isMonorepo: packages.length > 0,\n type: 'lerna',\n rootPath: cwd,\n packages,\n };\n } catch {\n // Invalid lerna.json\n }\n }\n\n // Check for Nx\n const nxJsonPath = join(cwd, 'nx.json');\n if (existsSync(nxJsonPath)) {\n // Nx can have apps/ and libs/ directories\n const nxPatterns = ['apps/*', 'libs/*', 'packages/*'];\n const packages = await findPackages(cwd, nxPatterns);\n\n return {\n isMonorepo: packages.length > 0,\n type: 'nx',\n rootPath: cwd,\n packages,\n };\n }\n\n // Check for Turborepo\n const turboJsonPath = join(cwd, 'turbo.json');\n if (existsSync(turboJsonPath)) {\n // Turborepo typically uses npm/yarn/pnpm workspaces\n // but we detect turbo.json as an indicator\n const workspacePatterns = packageJson.workspaces\n ? Array.isArray(packageJson.workspaces)\n ? packageJson.workspaces\n : packageJson.workspaces.packages || []\n : ['packages/*', 'apps/*'];\n\n const packages = await findPackages(cwd, workspacePatterns);\n\n return {\n isMonorepo: packages.length > 0,\n type: 'turborepo',\n rootPath: cwd,\n packages,\n };\n }\n\n // Not a monorepo\n return {\n isMonorepo: false,\n type: 'none',\n rootPath: cwd,\n packages: [],\n };\n}\n\n/**\n * Find all packages matching the given workspace patterns\n */\nasync function findPackages(cwd: string, patterns: string[]): Promise<Package[]> {\n const packages: Package[] = [];\n\n // Convert workspace patterns to glob patterns for package.json files\n const globPatterns = patterns.map((pattern) => {\n // Remove trailing slash if present\n pattern = pattern.replace(/\\/$/, '');\n // If pattern ends with *, look for package.json in subdirectories\n if (pattern.endsWith('*')) {\n return `${pattern}/package.json`;\n }\n // If pattern is a specific directory, look for package.json there\n return `${pattern}/package.json`;\n });\n\n const packageJsonPaths = await fg(globPatterns, {\n cwd,\n absolute: true,\n ignore: ['**/node_modules/**'],\n });\n\n for (const pkgJsonPath of packageJsonPaths) {\n try {\n const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));\n const pkgDir = dirname(pkgJsonPath);\n\n packages.push({\n name: pkgJson.name || relative(cwd, pkgDir),\n path: pkgDir,\n relativePath: relative(cwd, pkgDir),\n packageJson: pkgJson,\n });\n } catch {\n // Invalid package.json, skip\n }\n }\n\n return packages.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/**\n * Get files belonging to a specific package\n */\nexport async function getPackageFiles(\n pkg: Package,\n patterns: string[] = ['**/*.{ts,tsx,js,jsx}'],\n ignore: string[] = ['node_modules/**', 'dist/**', 'build/**']\n): Promise<string[]> {\n return fg(patterns, {\n cwd: pkg.path,\n absolute: true,\n ignore,\n onlyFiles: true,\n });\n}\n\n/**\n * Detect which package a file belongs to\n */\nexport function getPackageForFile(file: string, packages: Package[]): Package | null {\n for (const pkg of packages) {\n if (file.startsWith(pkg.path)) {\n return pkg;\n }\n }\n return null;\n}\n\n/**\n * Group files by package\n */\nexport function groupFilesByPackage(\n files: string[],\n packages: Package[]\n): Map<Package | null, string[]> {\n const grouped = new Map<Package | null, string[]>();\n\n for (const file of files) {\n const pkg = getPackageForFile(file, packages);\n const existing = grouped.get(pkg) || [];\n existing.push(file);\n grouped.set(pkg, existing);\n }\n\n return grouped;\n}\n\n/**\n * Get cross-package dependencies\n */\nexport async function getCrossPackageDependencies(\n packages: Package[]\n): Promise<Map<string, string[]>> {\n const deps = new Map<string, string[]>();\n\n for (const pkg of packages) {\n const pkgDeps: string[] = [];\n const allDeps = {\n ...pkg.packageJson.dependencies,\n ...pkg.packageJson.devDependencies,\n ...pkg.packageJson.peerDependencies,\n };\n\n for (const depName of Object.keys(allDeps)) {\n if (packages.some((p) => p.name === depName)) {\n pkgDeps.push(depName);\n }\n }\n\n if (pkgDeps.length > 0) {\n deps.set(pkg.name, pkgDeps);\n }\n }\n\n return deps;\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@shakecodeslikecray/whiterose",
3
+ "version": "0.1.0",
4
+ "description": "AI-powered bug hunter that uses your existing LLM subscription. \"I've been staring at your code for a long time.\"",
5
+ "keywords": [
6
+ "bug-finder",
7
+ "static-analysis",
8
+ "ai",
9
+ "llm",
10
+ "code-quality",
11
+ "security",
12
+ "cli"
13
+ ],
14
+ "author": "shakecodeslikecray",
15
+ "license": "PolyForm-Noncommercial-1.0.0",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/shakecodeslikecray/whiterose"
19
+ },
20
+ "type": "module",
21
+ "main": "dist/index.js",
22
+ "types": "dist/index.d.ts",
23
+ "bin": {
24
+ "whiterose": "dist/cli/index.js"
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "scripts": {
30
+ "dev": "tsx watch src/cli/index.ts",
31
+ "build": "tsup",
32
+ "start": "node dist/cli/index.js",
33
+ "test": "vitest",
34
+ "test:run": "vitest run",
35
+ "lint": "eslint src --ext .ts",
36
+ "typecheck": "tsc --noEmit",
37
+ "prepare": "npm run build"
38
+ },
39
+ "dependencies": {
40
+ "@clack/prompts": "^0.7.0",
41
+ "chalk": "^5.3.0",
42
+ "chokidar": "^3.6.0",
43
+ "commander": "^12.1.0",
44
+ "execa": "^9.3.0",
45
+ "fast-glob": "^3.3.2",
46
+ "ink": "^5.0.1",
47
+ "ink-select-input": "^6.0.0",
48
+ "ink-spinner": "^5.0.0",
49
+ "ink-table": "^3.1.0",
50
+ "react": "^18.3.1",
51
+ "yaml": "^2.4.5",
52
+ "zod": "^3.23.8"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^20.14.10",
56
+ "@types/react": "^18.3.3",
57
+ "@typescript-eslint/eslint-plugin": "^7.16.0",
58
+ "@typescript-eslint/parser": "^7.16.0",
59
+ "@vitest/coverage-v8": "^2.1.9",
60
+ "eslint": "^8.57.0",
61
+ "tsup": "^8.1.0",
62
+ "tsx": "^4.16.2",
63
+ "typescript": "^5.5.3",
64
+ "vitest": "^2.0.2"
65
+ },
66
+ "engines": {
67
+ "node": ">=18.0.0"
68
+ }
69
+ }