/**
 * Spec summary for `spv validate --json`.
 *
 * Builds the curated "useful" metadata block from the canonical parsed AST —
 * the single source of truth is the parser, NOT a second `.specly` reader. The
 * CLI emits parse FACTS (component names/versions/counts, imports/exports for
 * scope, deployment + manifest names, capability/factory presence). Consumers
 * (e.g. the registry) classify their own notion of "library type" from these
 * facts; this module deliberately does not impose that classification.
 */
import type { SpecVerseAST } from './types/ast.js';
export interface SpecImportSummary {
    from?: string;
    package?: string;
    file?: string;
    version?: string;
    select: string[];
}
export interface SpecComponentSummary {
    name: string;
    version?: string;
    /** Human-readable component description (for registry listing). */
    description?: string;
    /** Component tags (for registry categorization / search). */
    tags: string[];
    models: number;
    controllers: number;
    services: number;
    views: number;
    events: number;
    /** What this component depends on (scope-in / dependency edges). */
    imports: SpecImportSummary[];
    /** What this component exposes (scope-out). */
    exports: string[];
}
export interface SpecSummary {
    /** Top-level `name:`, when declared. */
    name?: string;
    /** SpecVerse schema version (`specVersion:`) the spec targets. */
    specVersion?: string;
    components: SpecComponentSummary[];
    deployments: string[];
    manifests: string[];
    hasCapabilityMappings: boolean;
    hasInstanceFactories: boolean;
}
/**
 * Build the `--json` "useful" summary from a parsed AST + the source's
 * top-level name/specVersion (which the AST root drops — the parser threads
 * them onto its result).
 */
export declare function summarizeSpecForCli(ast: SpecVerseAST | undefined, opts?: {
    specVersion?: string;
    specName?: string;
}): SpecSummary;
//# sourceMappingURL=spec-summary.d.ts.map