/**
 * Service augment catalog.
 *
 * Loads service manifests from `templates/services/<id>/manifest.json` at
 * module init time and exposes the catalog as a typed, ordered array.
 *
 * Adding a new service is purely additive: drop a directory under
 * `templates/services/` with a manifest, files, and snippets — no edits
 * to this file or to existing services.
 *
 * Service order is fixed by `manifest.order` (lower runs first when
 * snippets are concatenated at a marker). It is independent of how the
 * user picks services in the multi-select.
 */
/** Frameworks a service may target. */
export type FrameworkId = 'nextjs' | 'nuxt' | 'sveltekit' | 'astro' | 'hono';
/** Single env var contribution. */
export interface ServiceEnvVar {
    name: string;
    placeholder: string;
    comment?: string;
}
/** A service augment's declarative manifest. */
export interface ServiceAugment {
    id: string;
    label: string;
    hint: string;
    description: string;
    /** Lower numbers run first. Determines snippet concatenation order. */
    order: number;
    /** Other service ids this one requires. */
    requires?: string[];
    /** Packages added to dependencies. */
    packages: string[];
    /** Packages added to devDependencies. */
    devPackages?: string[];
    /** Scripts merged into package.json. */
    scripts?: Record<string, string>;
    /** Env vars to append to .env.example. */
    envVars?: ServiceEnvVar[];
    /** Frameworks this service supports. */
    frameworks: FrameworkId[];
}
/**
 * Returns the service catalog, ordered ascending by `order`.
 *
 * The catalog is built lazily and cached. Manifests are parsed on
 * first access and validated against required fields; any invalid
 * manifest aborts catalog construction with a thrown error rather
 * than silently dropping the service — service definitions are
 * shipped, not user input, so a bad manifest is a build bug.
 */
export declare function getServiceCatalog(): ServiceAugment[];
/**
 * Load and validate a service catalog from an arbitrary services
 * directory. Used by tests with a synthetic templates tree.
 */
export declare function loadCatalog(servicesDir: string): ServiceAugment[];
/** Reset the cached catalog. Tests use this to switch between fixtures. */
export declare function _resetCatalogCache(): void;
/** Look up a service by id. Returns undefined if not in the catalog. */
export declare function getService(id: string): ServiceAugment | undefined;
/**
 * Resolve a selection of service ids into the full ordered list of
 * services to apply, including transitively-required services.
 *
 * Throws if any id is unknown.
 *
 * If `catalog` is omitted, the default (bundled) catalog is used.
 */
export declare function resolveSelection(selectedIds: string[], catalog?: ServiceAugment[]): ServiceAugment[];
//# sourceMappingURL=services-catalog.d.ts.map