export interface DiscoveredResource {
    name: string;
    filePath: string;
    type: "local" | "external";
}
export interface LoadedResource {
    name: string;
    filePath: string;
    data: any;
    error?: string;
}
/**
 * Load the content of a resource file (.sb.js, .datasource.js, etc.)
 * Uses dynamic import to load ES modules and CommonJS
 */
export declare function loadResourceContent(filePath: string): Promise<any>;
/**
 * Load multiple resources by file path
 */
export declare function loadResources(filePaths: string[]): Promise<LoadedResource[]>;
/**
 * Options for component discovery
 */
export interface DiscoverComponentsOptions {
    /** File extensions to search for (default: [".sb.ts", ".sb.cjs"]) */
    extensions?: string[];
    /** Whether to include external (node_modules) components (default: true) */
    includeExternal?: boolean;
    /** Maximum depth to scan (default: 20, prevents runaway scanning) */
    maxDepth?: number;
}
/**
 * Discover components in the working directory
 * Prefers .ts for local files and .cjs for external (node_modules) files
 * to avoid duplicates when both ESM and CJS versions exist
 *
 * Security: Stays within project bounds and doesn't follow symlinks outside
 */
export declare function discoverComponents(workingDir: string, options?: DiscoverComponentsOptions): Promise<DiscoveredResource[]>;
/**
 * Discover datasources in the working directory
 */
export declare function discoverDatasources(workingDir: string): Promise<DiscoveredResource[]>;
/**
 * Discover roles in the working directory
 */
export declare function discoverRoles(workingDir: string): Promise<DiscoveredResource[]>;
