import { z } from 'zod';
export declare const ParserTypeSchema: z.ZodEnum<{
    typescript: "typescript";
    vue: "vue";
    python: "python";
    go: "go";
    rust: "rust";
    generic: "generic";
}>;
export type ParserType = z.infer<typeof ParserTypeSchema>;
export declare const TreeSitterDescriptorSchema: z.ZodObject<{
    grammar: z.ZodString;
    functionNodeTypes: z.ZodArray<z.ZodString>;
    classNodeTypes: z.ZodArray<z.ZodString>;
    callNodeTypes: z.ZodArray<z.ZodString>;
}, z.core.$strip>;
export type TreeSitterDescriptor = z.infer<typeof TreeSitterDescriptorSchema>;
export declare const LanguageSpecSchema: z.ZodObject<{
    name: z.ZodString;
    extensions: z.ZodArray<z.ZodString>;
    parser: z.ZodEnum<{
        typescript: "typescript";
        vue: "vue";
        python: "python";
        go: "go";
        rust: "rust";
        generic: "generic";
    }>;
    capabilities: z.ZodObject<{
        definitions: z.ZodBoolean;
        imports: z.ZodBoolean;
        calls: z.ZodBoolean;
        inheritance: z.ZodBoolean;
        content: z.ZodBoolean;
        templateUses: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>;
    treeSitter: z.ZodOptional<z.ZodObject<{
        grammar: z.ZodString;
        functionNodeTypes: z.ZodArray<z.ZodString>;
        classNodeTypes: z.ZodArray<z.ZodString>;
        callNodeTypes: z.ZodArray<z.ZodString>;
    }, z.core.$strip>>;
}, z.core.$strip>;
export type LanguageSpec = z.infer<typeof LanguageSpecSchema>;
export declare const LANGUAGE_SPECS: LanguageSpec[];
export declare const CODE_EXTENSIONS: string[];
export declare function getLanguageSpec(filePath: string): LanguageSpec | null;
export declare function getModuleName(repoRoot: string, filePath: string): string;
export declare function normalizePath(value: string): string;
export declare function isLocalSpecifier(specifier: string): boolean;
export declare function stripImportSuffix(specifier: string): string;
export declare function isAssetSpecifier(specifier: string): boolean;
/**
 * Drop memoized path mappings after a tsconfig/jsconfig content change.
 * Callers pass a repository root so unrelated concurrent indexes keep their
 * warm entries; omitting it is reserved for tests and process-wide resets.
 */
export declare function invalidateTsConfigResolutionCache(repoRoot?: string): void;
export declare function resolveTsconfigImport(repoRoot: string, specifier: string): string | undefined;
export declare function resolveLocalImport(repoRoot: string, fromFile: string, specifier: string): string | undefined;
export declare function resolvePythonImport(repoRoot: string, fromFile: string, specifier: string): string | undefined;
