import type { IndexingDiagnostic } from '../../contracts/indexing.js'; import type { ExtractionData, ExtractionNode } from '../../contracts/types.js'; import type { PipelineStageDiagnostic, PipelineStageObserver } from '../../core/pipeline/stage.js'; import type { ExtractionFileOutcome } from './dispatch.js'; export type ExtractionPipelineStage = 'discovery_outcome' | 'capability_selection' | 'per_language_extraction' | 'framework_augmentation' | 'fragment_merge' | 'cross_file_relationships' | 'diagnostics_projection'; export type ExtractionStageDiagnostic = PipelineStageDiagnostic; export type ExtractionStageObserver = PipelineStageObserver; export interface ExtractionFileDiagnostic { filePath: string; status: ExtractionFileOutcome['status']; reason: ExtractionFileOutcome['reason']; capability: string | null; diagnostic: IndexingDiagnostic; } export interface ExtractionPipelineResult { data: ExtractionData; fileOutcomes: ExtractionFileOutcome[]; diagnostics: ExtractionFileDiagnostic[]; } export interface ExtractionDiscoveryInput { files: readonly string[]; allowedTargets?: Iterable; contextNodes?: readonly ExtractionNode[]; } export interface ExtractionDiscoveryPlan { files: string[]; stemContextFiles: string[]; allowedTargets: ReadonlySet; } /** Normalize the already-discovered file set before any capability is selected. */ export declare const buildExtractionDiscoveryPlan: (input: ExtractionDiscoveryInput) => ExtractionDiscoveryPlan; export interface CrossFileResolutionInput { files: readonly string[]; data: ExtractionData; contextNodes?: ExtractionNode[]; } /** Resolve corpus-wide relationships after all per-file fragments have been merged. */ export declare const resolveCrossFileExtraction: (input: CrossFileResolutionInput) => ExtractionData; /** Project local parser diagnostics without hiding their owning file outcome. */ export declare const projectExtractionDiagnostics: (outcomes: readonly ExtractionFileOutcome[]) => ExtractionFileDiagnostic[];