/**
 * Workflow catalog — discovery + summary load for the dashboard catalog page.
 *
 * Reuses `workflowDefinitionSearchPaths()` so the catalog list and CLI/IM
 * `loadWorkflowDefinition()` see the same files.  Two search paths today:
 *   - `<cwd>/workflows/*.workflow.json`           (per-project)
 *   - `$HOME/.botmux/workflows/*.workflow.json`   (global, daemon default)
 *
 * Dedupe rule when the same `workflowId` appears in both: cwd wins, then
 * HOME.  Matches `loadWorkflowDefinition()` which short-circuits on the first
 * search path that resolves.
 *
 * Read-only and pure: never writes or normalizes the source files — the
 * dashboard catalog list should reflect exactly what the daemon would resolve.
 */
import { type WorkflowDefinition } from './definition.js';
export type CatalogEntry = {
    workflowId: string;
    version: number;
    path: string;
    revisionId: string;
    paramCount: number;
    requiredParamCount: number;
    nodeCount: number;
};
export type CatalogDefinition = {
    definition: WorkflowDefinition;
    revisionId: string;
    path: string;
};
export declare function isValidWorkflowId(id: string): boolean;
/**
 * List every parseable workflow visible to the daemon.
 *
 * Files that fail to parse (zod errors, cycles, etc.) are skipped silently so
 * one bad authoring attempt doesn't poison the whole catalog.  The CLI's
 * `botmux workflow validate` is the right surface for line-level errors.
 *
 * Search-path priority matches `loadWorkflowDefinition`: cwd-local before
 * HOME global so per-project drafts override globals with the same id.
 *
 * `opts.dirs` is a test seam — production callers use the default search
 * paths.  Tests pass scoped tmp directories so they don't read whatever
 * happens to live under `$HOME/.botmux/workflows`.
 */
export declare function listWorkflowDefinitions(opts?: {
    dirs?: string[];
}): Promise<CatalogEntry[]>;
/**
 * Load a single workflow definition by id and surface its source path +
 * revisionId in the response envelope.  Returns `undefined` when no file in
 * any search path resolves the id, so the caller can return 404.
 *
 * `opts.searchPaths` is a test seam; production callers use the default
 * search paths derived from cwd + `$HOME/.botmux/workflows`.
 */
export declare function loadCatalogDefinition(workflowId: string, opts?: {
    searchPaths?: string[];
}): Promise<CatalogDefinition | undefined>;
//# sourceMappingURL=catalog.d.ts.map