import { Epic, ParseError, Story, StoryStatus } from './StorySchema';
export interface RegistryLoadResult {
    stories: Story[];
    epics: Epic[];
    errors: ParseError[];
    rootsScanned: string[];
}
export interface StoryFilter {
    epicId?: string;
    status?: StoryStatus;
    cluster?: string;
    severity?: string;
}
export declare class StoryRegistry {
    private storiesById;
    private epicsById;
    private lastErrors;
    private rootsScanned;
    /**
     * Build the list of roots to scan, in priority order. First wins per
     * story id (so a per-project story overrides one from ~/.openlife/stories).
     */
    static defaultRoots(cwd?: string): string[];
    load(roots?: string[]): Promise<RegistryLoadResult>;
    refresh(): Promise<RegistryLoadResult>;
    get(id: string): Story | null;
    getEpic(id: string): Epic | null;
    list(filter?: StoryFilter): Story[];
    listEpics(): Epic[];
    findByEpic(epicId: string): Story[];
    findByStatus(status: StoryStatus): Story[];
    findByDependency(storyId: string): Story[];
    errors(): ParseError[];
    private listEpicDirs;
    private loadEpicDir;
    private ingestStoryFile;
    private ingestEpicFile;
}
