import type { DiscoveredFile, ScanResult, ScanOptions } from './types'; import { CacheManager } from './cache'; export declare class ScanEngine { private cache; private options; constructor(cache?: CacheManager, options?: ScanOptions); /** Analyze a batch of discovered files and return grouped results */ analyze(files: DiscoveredFile[]): ScanResult; /** Get the cache manager (for serialization) */ getCache(): CacheManager; private analyzeFile; /** Group file-level signals into project-level results */ private groupByProject; /** Walk up from a file path to find the nearest project root */ private findProjectRoot; /** * Corroboration: downgrade construction/config signals that have no matching * installed framework or provider. * * Gate 2 rules: * - agent_construction (weight 60) without a matching dependency or code_usage * signal → downgrade to weight 15 (dead code, comment, or fake construction) * - framework_config (weight 80) without a matching dependency or code_usage * signal → downgrade to weight 40 (config file dropped with no framework installed) * - framework_config (weight 100) — workspace configs stand alone, never downgraded * * This blocks two adversarial patterns: * 1. Commented-out or dead agent construction code (no framework installed) * 2. Dropping a crew.yaml / agents.yaml without actually using the framework */ private applyCorroboration; /** Package names/keywords that indicate an SDK, observability tool, or monitoring library — not an agent */ private static SDK_INDICATORS; /** Check if a project is an SDK/tool that wraps agents, not an agent itself */ private isSDKProject; /** Extract agent definitions from a project's signals */ private extractAgents; /** Extract a human-readable project name — prefers package.json/pyproject.toml name over dir */ private extractProjectName; /** Detect the primary language from signals */ private detectLanguage; /** Compute overall confidence from signals */ private computeConfidence; } //# sourceMappingURL=scanner.d.ts.map