import { Plugin, BlockDefinition, ExecutionContext } from './types';
export declare function registerPlugin(plugin: Plugin): void;
export declare function getPlugin(name: string): Plugin | undefined;
export declare function getAllPlugins(): Plugin[];
export declare function getAllPluginBlocks(): BlockDefinition[];
export declare function unregisterPlugin(name: string): boolean;
export declare function createPlugin(config: {
    name: string;
    version: string;
    description?: string;
    blocks?: BlockDefinition[];
    hooks?: Plugin['hooks'];
}): Plugin;
export declare function createBlock(config: {
    type: string;
    category: string;
    color?: string;
    tooltip?: string;
    helpUrl?: string;
    inputs: BlockDefinition['inputs'];
    output?: BlockDefinition['output'];
    previousStatement?: boolean;
    nextStatement?: boolean;
    execute: BlockDefinition['execute'];
}): BlockDefinition;
/**
 * Create an action block - executes an action, can be chained with other blocks
 * Has previous/next statements, no output value
 */
export declare function createActionBlock(config: {
    type: string;
    category: string;
    color?: string;
    tooltip?: string;
    inputs: BlockDefinition['inputs'];
    execute: (params: Record<string, unknown>, context: ExecutionContext) => Promise<unknown>;
}): BlockDefinition;
/**
 * Create a value block - returns a value that can be used as input to other blocks
 * Has output, no previous/next statements
 */
export declare function createValueBlock(config: {
    type: string;
    category: string;
    color?: string;
    tooltip?: string;
    inputs: BlockDefinition['inputs'];
    outputType: string | string[];
    execute: (params: Record<string, unknown>, context: ExecutionContext) => Promise<unknown>;
}): BlockDefinition;
/**
 * Create an assertion block - validates a condition
 * Throws an error if assertion fails
 */
export declare function createAssertionBlock(config: {
    type: string;
    category?: string;
    color?: string;
    tooltip?: string;
    inputs: BlockDefinition['inputs'];
    assert: (params: Record<string, unknown>, context: ExecutionContext) => Promise<{
        pass: boolean;
        message?: string;
    }>;
}): BlockDefinition;
export type { Plugin, BlockDefinition, ExecutionContext };
