import type { RuntimeConfig } from "./runtime-config.js"; import type { SharedArtifactContract } from "../scanners/artifacts.js"; import type { ScannerLogger } from "../scanners/protocol/context.js"; import type { ScannerContextDependency, ScannerDefinition } from "../scanners/scanner-definition.js"; import type { ScannerId } from "../scanners/types.js"; type ScannerDefinitionSummary = Pick; export interface ScannerCompositionNode { id: ScannerId; outputs: ScannerDefinition["outputs"]; dependsOn: ScannerContextDependency[]; producedContext: SharedArtifactContract | null; } export interface ScannerComposition { scanners: ReadonlyMap; dependencyGraph: ReadonlyMap; dependencySources: ReadonlySet; topologicalOrder: readonly ScannerId[]; producedContextByScanner: ReadonlyMap; getRunChain(scannerId: ScannerId): ScannerId[]; } /** * Builds the runtime scanner dependency graph from normalized scanner * definitions. * * Composition intentionally keys off outputs metadata and declared retained * context contracts rather than scanner implementation type. That lets * `external_scanner` context producers participate in `depends_on` and * action-context wiring exactly like built-in scanners once they declare * `outputs.context=true`. */ export declare function buildScannerComposition(config: RuntimeConfig, definitions: ScannerDefinitionSummary[], logger?: ScannerLogger): ScannerComposition; export {}; //# sourceMappingURL=scanner-composition.d.ts.map