import type { Tag, Expression } from "../types.js";
/**
 * Merge two tag lists per the spec rules in
 * docs/superpowers/specs/2026-05-19-type-validation-and-json-schema-annotations-design.md.
 *
 * - `@validate(...)`: concatenated across both inputs (alias's validators
 *   first, then use-site's), producing a single combined `@validate` tag.
 *   Users may also stack multiple `@validate(...)` tags or pass multiple
 *   arguments to a single tag — all forms collapse to one chain.
 * - `@jsonSchema(...)`: object-literal arguments merged left-to-right
 *   with use-site keys overriding alias keys (with `description`
 *   concatenating, see `collapseLiteralDescriptions`), producing a
 *   single combined `@jsonSchema` tag. Users may stack multiple
 *   `@jsonSchema(...)` tags on the same side OR pass multiple object
 *   literals to one tag — both shapes flatten into the same merge.
 *   Spreads are preserved verbatim (their evaluation happens at
 *   module-load time).
 *
 * Tag names other than `validate` / `jsonSchema` are deliberately not
 * merged here — they have no alias-vs-use-site semantics defined and may
 * belong to a different feature entirely (e.g. `@goal` / `@optimize`).
 * They flow through `resolveType` untouched on whichever side they
 * appeared, but never combined across the two sides.
 *
 * `aliasTags` come first in the chain, `useSiteTags` apply on top.
 */
export declare function mergeTagSets(aliasTags: Tag[] | undefined, useSiteTags: Tag[] | undefined): Tag[] | undefined;
export declare function mergeJsonSchemaArgs(tags: Tag[]): Expression[];
