/**
 * Skill Loader — prompt skills for the Studiograph agent.
 *
 * Skills come from two sources:
 *
 *   1. Bundled filesystem skills — shipped with the app. Two formats:
 *        Directory skill:   skills/create-deck/skill.md (+ optional sub-files)
 *        Single-file skill: skills/quick-tip.md
 *      Frontmatter fields: name, description, loading ("eager" | "on-demand").
 *
 *   2. Graph skills — authored by users as `skill` entities in any folder
 *      (personal or shared). The entity id IS the skill name; `description`
 *      and `loading` are frontmatter fields; the body markdown is the
 *      instruction content. Graph skills use a `graph://<repo>/<id>`
 *      entrypoint sentinel and are resolved via an optional graphResolver
 *      callback passed to `loadSkillContent` / `loadEagerSkills`.
 */
export interface SkillMeta {
    name: string;
    description: string;
    loading: 'eager' | 'on-demand';
    dir: string;
    entrypoint: string;
    isDirectory: boolean;
}
/**
 * Scan one or more skill directories and return a de-duplicated skill index.
 * Directories are processed in order — first occurrence of a name wins,
 * so workspace-level skills override app-bundled skills.
 */
export declare function loadSkillIndex(skillsDirs: string[]): SkillMeta[];
/** Resolver callback that loads a graph-authored skill's body by (repo, id). */
export type GraphSkillResolver = (repo: string, id: string) => string;
/**
 * Parse a `graph://<repo>/<id>` entrypoint into its components.
 * Returns null for filesystem paths.
 */
export declare function parseGraphSkillEntrypoint(entrypoint: string): {
    repo: string;
    id: string;
} | null;
/**
 * Load the full content of a skill's entrypoint or a named sub-file.
 * Sanitises the file parameter to prevent path traversal. Graph-authored
 * skills route through the provided resolver; filesystem skills read from
 * disk.
 */
export declare function loadSkillContent(meta: SkillMeta, file?: string, graphResolver?: GraphSkillResolver): string;
/**
 * Build the skill index section to append to the system prompt.
 * Eager skills are inlined separately; this lists only on-demand skills.
 */
export declare function buildSkillIndexPrompt(skills: SkillMeta[]): string;
/** Cap on total eager-skill content inlined into the system prompt. */
export declare const EAGER_SKILL_BYTE_CAP = 20000;
/**
 * Return the full content of all eager skills, to be injected directly
 * into the system prompt at startup. Respects `EAGER_SKILL_BYTE_CAP` —
 * skills beyond the cap are dropped with a warning to stderr.
 */
export declare function loadEagerSkills(skills: SkillMeta[], graphResolver?: GraphSkillResolver): string;
