/** * Assessment Orchestrator Helpers * * Pure functions extracted from AssessmentOrchestrator for testability. * These functions handle: * - AUP violation enrichment for JSONL events * - Module progress/started event emission * - Overall status determination * - Summary and recommendations generation * * @internal * @module orchestratorHelpers */ import { MCPDirectoryAssessment, AssessmentStatus } from "../../lib/assessmentTypes.js"; export declare const moduleStartTimes: Map; /** * Emit module_started event and track start time for duration calculation. * Emits JSONL to stderr with version field for consistent event structure. */ export declare function emitModuleStartedEvent(moduleName: string, estimatedTests: number, toolCount: number): void; /** * Supported module names for enrichment. */ export type EnrichableModule = "aup" | "authentication" | "resources" | "prompts" | "prohibitedLibraries" | "manifestValidation"; /** * Build enrichment data for a module using the registry. * * @param moduleName - The normalized module key (e.g., "aup", "authentication") * @param result - The module's assessment result * @returns Enrichment data to merge into event, or null if no builder registered */ export declare function buildEnrichment(moduleName: string, result: unknown): Record | null; /** * Check if a module has an enrichment builder registered. * * @param moduleName - The module key to check * @returns true if an enrichment builder exists for this module */ export declare function hasEnrichmentBuilder(moduleName: string): boolean; /** * Get all module names that have enrichment builders. * * @returns Array of module names with registered builders */ export declare function getEnrichableModules(): EnrichableModule[]; /** * Emit module_complete event with score and duration. * Uses shared score calculator for consistent scoring logic. * For AUP module, includes enriched violation data for Claude analysis. */ export declare function emitModuleProgress(moduleName: string, status: string, result: unknown, testsRun?: number): void; /** * Build AUP enrichment data from an AUP compliance assessment result. * Samples violations prioritizing by severity (CRITICAL > HIGH > MEDIUM). * Issue #194: Now includes toolInventory, patternCoverage, and flagsForReview * from the enrichmentData field for Stage B Claude validation. */ export declare function buildAUPEnrichment(aupResult: { violations?: Array<{ severity: string; category: string; categoryName?: string; matchedText?: string; location?: string; confidence?: string; }>; scannedLocations?: { toolNames: boolean; toolDescriptions: boolean; readme: boolean; sourceCode: boolean; }; highRiskDomains?: string[]; enrichmentData?: { toolInventory?: Array<{ name: string; description: string; capabilities: string[]; }>; patternCoverage?: { totalPatterns: number; categoriesCovered: string[]; samplePatterns: string[]; severityBreakdown: { critical: number; high: number; medium: number; flag: number; }; }; flagsForReview?: Array<{ toolName: string; reason: string; capabilities: string[]; confidence: string; }>; }; }, maxSamples?: number): { violationsSample: Array<{ category: string; categoryName: string; severity: string; matchedText: string; location: string; confidence: string; }>; samplingNote: string; violationMetrics: { total: number; critical: number; high: number; medium: number; byCategory: Record; }; scannedLocations: { toolNames: boolean; toolDescriptions: boolean; readme: boolean; sourceCode: boolean; }; highRiskDomains: string[]; toolInventory?: Array<{ name: string; description: string; capabilities: string[]; }>; patternCoverage?: { totalPatterns: number; categoriesCovered: string[]; samplePatterns: string[]; severityBreakdown: { critical: number; high: number; medium: number; flag: number; }; }; flagsForReview?: Array<{ toolName: string; reason: string; capabilities: string[]; confidence: string; }>; }; /** * Build authentication enrichment data from an authentication assessment result. * Issue #195: Provides context for Stage B Claude validation of auth findings. * * Note: Using inline parameter type instead of AuthenticationAssessment import * because this is called with `result: unknown` from emitModuleProgress(). * TypeScript structural typing ensures compatibility while avoiding type assertions. */ export declare function buildAuthEnrichment(authResult: { authMethod?: string; hasLocalDependencies?: boolean; transportType?: string; appropriateness?: { isAppropriate: boolean; concerns: string[]; explanation: string; }; transportSecurity?: { usesTLS: boolean; tlsEnforced: boolean; hasInsecurePatterns: boolean; insecurePatterns: string[]; corsConfigured: boolean; corsPermissive: boolean; sessionSecure: boolean; }; authConfigAnalysis?: { totalFindings: number; hasHighSeverity: boolean; envDependentAuthCount: number; failOpenPatternCount: number; failOpenLogicCount: number; devModeWarningCount: number; hardcodedSecretCount: number; }; enrichmentData?: { toolInventory?: Array<{ name: string; description: string; authCapabilities: string[]; isSensitive: boolean; }>; oauthPatternCoverage?: { totalPatterns: number; matchedPatterns: string[]; flowType: string; pkceDetected: boolean; }; apiKeyPatternCoverage?: { totalPatterns: number; matchedPatterns: string[]; envVarManaged: boolean; }; transportSecurity?: { transportType: string; tlsEnforced: boolean; corsConfigured: boolean; sessionSecure: boolean; insecurePatternCount: number; securePatternCount: number; }; flagsForReview?: Array<{ toolName: string; reason: string; capabilities: string[]; riskLevel: string; }>; metrics?: { totalTools: number; authSensitiveTools: number; oauthIndicators: number; apiKeyIndicators: number; localDependencyIndicators: number; }; }; }): { authMethod: string; authMetrics: { hasLocalDependencies: boolean; tlsEnforced: boolean; corsConfigured: boolean; sessionSecure: boolean; authConfigFindings: number; hasHighSeverityFindings: boolean; }; oauthCoverage?: { totalPatterns: number; matchedPatterns: string[]; flowType: string; pkceDetected: boolean; }; apiKeyCoverage?: { totalPatterns: number; matchedPatterns: string[]; envVarManaged: boolean; }; concerns: string[]; toolInventory?: Array<{ name: string; description: string; authCapabilities: string[]; isSensitive: boolean; }>; flagsForReview?: Array<{ toolName: string; reason: string; capabilities: string[]; riskLevel: string; }>; }; /** * Build resource enrichment data from a resource assessment result. * Issue #196: Provides context for Stage B Claude validation of resource findings. */ export declare function buildResourceEnrichment(resourceResult: { resourcesTested?: number; resourceTemplatesTested?: number; accessibleResources?: number; securityIssuesFound?: number; pathTraversalVulnerabilities?: number; sensitiveDataExposures?: number; promptInjectionVulnerabilities?: number; blobDosVulnerabilities?: number; polyglotVulnerabilities?: number; mimeValidationFailures?: number; enrichmentData?: { resourceInventory?: Array<{ uri: string; name?: string; mimeType?: string; resourceType: string; securityFlags: string[]; dataClassification: string; }>; patternCoverage?: { sensitiveUriPatterns: number; pathTraversalPayloads: number; uriInjectionPayloads: number; hiddenResourcePatterns: number; samplePatterns: string[]; }; flagsForReview?: Array<{ resourceUri: string; reason: string; flags: string[]; riskLevel: string; }>; metrics?: { totalResources: number; totalTemplates: number; sensitiveResources: number; accessibleResources: number; vulnerableResources: number; }; }; }): { resourceMetrics: { totalResources: number; totalTemplates: number; accessibleResources: number; vulnerableResources: number; pathTraversalVulnerabilities: number; sensitiveDataExposures: number; promptInjectionVulnerabilities: number; }; patternCoverage?: { sensitiveUriPatterns: number; pathTraversalPayloads: number; uriInjectionPayloads: number; hiddenResourcePatterns: number; samplePatterns: string[]; }; resourceInventory?: Array<{ uri: string; name?: string; mimeType?: string; resourceType: string; securityFlags: string[]; dataClassification: string; }>; flagsForReview?: Array<{ resourceUri: string; reason: string; flags: string[]; riskLevel: string; }>; }; /** * Build prompt enrichment data from a prompt assessment result. * Issue #197: Provides context for Stage B Claude validation of prompt findings. */ export declare function buildPromptEnrichment(promptResult: { promptsTested?: number; aupViolations?: number; injectionVulnerabilities?: number; argumentValidationIssues?: number; enrichmentData?: { promptInventory?: Array<{ name: string; description?: string; argumentCount: number; requiredArgs: string[]; optionalArgs: string[]; category: string; securityFlags: string[]; }>; patternCoverage?: { injectionPatternsChecked: number; aupPatternsChecked: number; argumentValidationChecks: number; samplePatterns: string[]; }; flagsForReview?: Array<{ promptName: string; reason: string; flags: string[]; riskLevel: string; }>; metrics?: { totalPrompts: number; aupViolations: number; injectionVulnerabilities: number; argumentValidationIssues: number; promptsWithDynamicContent: number; }; }; }): { promptMetrics: { totalPrompts: number; aupViolations: number; injectionVulnerabilities: number; argumentValidationIssues: number; }; patternCoverage?: { injectionPatternsChecked: number; aupPatternsChecked: number; argumentValidationChecks: number; samplePatterns: string[]; }; promptInventory?: Array<{ name: string; description?: string; argumentCount: number; requiredArgs: string[]; optionalArgs: string[]; category: string; securityFlags: string[]; }>; flagsForReview?: Array<{ promptName: string; reason: string; flags: string[]; riskLevel: string; }>; }; /** * Build prohibited libraries enrichment data from a prohibited libraries assessment result. * Issue #198: Provides context for Stage B Claude validation of library findings. */ export declare function buildProhibitedLibrariesEnrichment(librariesResult: { matches?: Array<{ name: string; category: string; severity: string; location: string; usageStatus?: string; importCount?: number; }>; scannedFiles?: string[]; hasFinancialLibraries?: boolean; hasMediaLibraries?: boolean; enrichmentData?: { libraryInventory?: Array<{ name: string; category: string; severity: string; location: string; usageStatus: string; importCount: number; importFiles: string[]; policyReference: string; }>; policyCoverage?: { totalProhibitedLibraries: number; scannedFiles: number; policiesChecked: string[]; sampleLibraries: string[]; }; flagsForReview?: Array<{ libraryName: string; reason: string; flags: string[]; riskLevel: string; }>; metrics?: { totalMatches: number; blockingCount: number; highCount: number; mediumCount: number; activeCount: number; unusedCount: number; hasFinancialLibraries: boolean; hasMediaLibraries: boolean; }; }; }): { libraryMetrics: { totalMatches: number; blockingCount: number; highCount: number; mediumCount: number; activeCount: number; unusedCount: number; hasFinancialLibraries: boolean; hasMediaLibraries: boolean; }; policyCoverage?: { totalProhibitedLibraries: number; scannedFiles: number; policiesChecked: string[]; sampleLibraries: string[]; }; libraryInventory?: Array<{ name: string; category: string; severity: string; location: string; usageStatus: string; importCount: number; importFiles: string[]; policyReference: string; }>; flagsForReview?: Array<{ libraryName: string; reason: string; flags: string[]; riskLevel: string; }>; }; /** * Build manifest validation enrichment data from a manifest validation assessment result. * Issue #199: Provides context for Stage B Claude validation of manifest findings. */ export declare function buildManifestEnrichment(manifestResult: { hasManifest?: boolean; manifestVersion?: string; hasRequiredFields?: boolean; hasIcon?: boolean; missingFields?: string[]; validationResults?: Array<{ field: string; valid: boolean; value?: unknown; issue?: string; severity: "ERROR" | "WARNING" | "INFO"; }>; privacyPolicies?: { declared: string[]; validationResults: Array<{ url: string; accessible: boolean; error?: string; }>; allAccessible: boolean; }; contactInfo?: { email?: string; url?: string; name?: string; source: string; }; enrichmentData?: { fieldInventory?: Array<{ field: string; valid: boolean; value?: unknown; issue?: string; severity: string; category: string; }>; fieldCoverage?: { totalRequired: number; requiredPresent: number; recommendedChecked: number; sampleFields: string[]; policiesChecked: string[]; }; flagsForReview?: Array<{ field: string; reason: string; flags: string[]; riskLevel: string; }>; metrics?: { totalChecks: number; passedChecks: number; errorCount: number; warningCount: number; hasManifest: boolean; hasRequiredFields: boolean; hasIcon: boolean; hasContactInfo: boolean; privacyPoliciesAccessible: boolean; toolsMatch: boolean; }; }; }): { manifestMetrics: { hasManifest: boolean; hasRequiredFields: boolean; hasIcon: boolean; hasContactInfo: boolean; privacyPoliciesAccessible: boolean; totalChecks: number; passedChecks: number; errorCount: number; warningCount: number; }; fieldCoverage?: { totalRequired: number; requiredPresent: number; recommendedChecked: number; sampleFields: string[]; policiesChecked: string[]; }; fieldInventory?: Array<{ field: string; valid: boolean; value?: unknown; issue?: string; severity: string; category: string; }>; flagsForReview?: Array<{ field: string; reason: string; flags: string[]; riskLevel: string; }>; }; /** * Determine overall status from assessment results. * Priority: FAIL > NEED_MORE_INFO > PASS */ export declare function determineOverallStatus(results: Partial): AssessmentStatus; /** * Generate summary text from assessment results. */ export declare function generateSummary(results: Partial): string; /** * Generate recommendations from assessment results. * Aggregates, deduplicates, and limits to 10 recommendations. */ export declare function generateRecommendations(results: Partial): string[]; //# sourceMappingURL=orchestratorHelpers.d.ts.map