import { type Tool } from '../../tool';
import { type Dir, type Entry, type File, type GitRepo, type LocalDir, type LocalFile } from '../entries';
import { type Manifest } from '../manifest';
import { Capability } from './base';
export type SkillIndexEntry = {
    name: string;
    description: string;
    path?: string;
};
export type LocalDirLazySkillSource = {
    source: Dir | LocalDir | GitRepo;
    index?: SkillIndexEntry[];
    getIndex?: (manifest: Manifest, skillsPath: string) => SkillIndexEntry[];
};
export type SkillDescriptor = {
    name: string;
    description: string;
    content: string | Uint8Array | File | LocalFile;
    scripts?: Record<string, Entry>;
    references?: Record<string, Entry>;
    assets?: Record<string, Entry>;
    compatibility?: string[];
    deferred?: boolean;
};
export type SkillsArgs = {
    skills?: SkillDescriptor[];
    from?: Entry;
    lazyFrom?: LocalDirLazySkillSource;
    index?: SkillIndexEntry[];
    skillsPath?: string;
};
declare class SkillsCapability extends Capability {
    readonly type = "skills";
    readonly skills: SkillDescriptor[];
    readonly from?: Entry;
    readonly lazyFrom?: LocalDirLazySkillSource;
    readonly index?: SkillIndexEntry[];
    readonly skillsPath: string;
    constructor(args: SkillsArgs);
    tools(): Tool<any>[];
    processManifest(manifest: Manifest): Manifest;
    instructions(manifest: Manifest): Promise<string | null>;
    private resolveRuntimeMetadata;
}
export type Skills = SkillsCapability;
export declare function skills(args: SkillsArgs): Skills;
/**
 * Read string metadata, including wrapped plain values and folded/literal blocks.
 * Block indentation/chomping indicators and header comments are accepted, but
 * outer block whitespace is trimmed for the skill index regardless of chomping.
 * This is not a YAML loader: tags, aliases, collections, multiline quoted values,
 * and quoted escapes are not interpreted. Use explicit skill metadata or a lazy
 * source index for those formats. Single-line quotes and inline hashes retain
 * their existing behavior; nested fields are never promoted to root metadata.
 */
export declare function parseSkillFrontmatter(markdown: string): Record<string, string>;
export {};
