/**
 * Supported language identifiers for style packs.
 * Adding a new language: add the id here, add a marker entry to MARKERS,
 * and add the pack content in `style-packs/packs.ts`.
 */
export type LanguageId = "typescript" | "javascript" | "python" | "go" | "rust" | "java" | "kotlin" | "csharp" | "cpp" | "c" | "ruby" | "php" | "swift" | "scala" | "elixir" | "haskell" | "ocaml" | "fsharp" | "clojure" | "dart" | "lua" | "zig" | "sql" | "bash" | "terraform";
/**
 * Detect active languages in a project root.
 *
 * Pure, synchronous, side-effect free. Cheap: a bounded number of fs stats
 * and one directory listing per scanned subdir. Safe to call after every
 * tool result — see `App.tsx` integration.
 */
export declare function detectLanguages(cwd: string): Set<LanguageId>;
/**
 * Stable, deterministic ordering of a language set — used for cache-key
 * equality checks and consistent style-pack section ordering.
 */
export declare function languagesToSortedArray(set: Set<LanguageId>): LanguageId[];
/**
 * Human-facing display names for each language id. Used by the TUI badge
 * (`StylePackItem` in App.tsx) so the user sees "TypeScript" rather than
 * `typescript`. Keep these short — they're rendered inline.
 */
export declare const LANGUAGE_DISPLAY_NAMES: Readonly<Record<LanguageId, string>>;
/**
 * Detect a project's tech stack as a short, human-readable string
 * (e.g. "Next.js, TypeScript, Tailwind CSS" or "Rust" or "Python, Django").
 *
 * Cheap + best-effort: reuses `detectLanguages` for the language base and adds a
 * light framework sniff from package.json deps (JS/TS) plus a few manifest
 * content checks (Rails, Django/Flask/FastAPI, Laravel). Returns "" when nothing
 * recognizable is found. Used by the prompt enhancer to bias terminology toward
 * the stack the user actually works in — facts only, never invented scope.
 */
export declare function detectProjectStack(cwd: string): string;
/**
 * Returns true iff `next` contains every member of `prev` plus at least one
 * additional language. Used to gate system-prompt rebuilds: we only re-inject
 * when the active set grows, never when it merely changes order.
 */
export declare function isStrictSuperset(next: Set<LanguageId>, prev: Set<LanguageId>): boolean;
//# sourceMappingURL=language-detector.d.ts.map