export interface GenericToolSchema {
    name: string;
    description: string;
    parameters: {
        type: string;
        properties: Record<string, ParameterDefinition>;
        required?: string[];
    };
}
export interface ParameterDefinition {
    type: string;
    description?: string;
    enum?: string[];
    items?: ParameterDefinition;
    properties?: Record<string, ParameterDefinition>;
    required?: string[];
}
export interface StandardTool {
    name: string;
    description?: string;
    execute(params: any, context: ActionContext): Promise<any>;
}
export interface IToolManager {
    registerTool(tool: StandardTool): void;
    getTool(name: string): StandardTool | undefined;
    getAllTools(): StandardTool[];
}
export interface StandardizedToolCall {
    name: string;
    arguments: Record<string, any>;
}
export interface Tool extends StandardTool {
    getSchema(): GenericToolSchema;
    validate(args: Record<string, any>): boolean;
}
export interface ActionSchema<TInput, TOutput> {
    input: {
        type: string;
        properties: {
            [key: string]: {
                type: string;
                description?: string;
            };
        };
        required: string[];
    };
    output: {
        type: string;
        properties: {
            [key: string]: {
                type: string;
                description?: string;
            };
        };
    };
}
export interface ActionContext {
    user: {
        id: string;
        name: string;
    };
    session: {
        id: string;
        timestamp: string;
    };
}
export interface Action<TInput, TOutput> {
    name: string;
    schema: ActionSchema<TInput, TOutput>;
    description: string;
    execute(params: TInput, context: ActionContext): Promise<TOutput>;
}
