import { Agent } from "@/agent";
import { ObservableData } from "@/memory/observation";
import { z, Schema, ZodTypeAny } from "zod";
export interface ActionDefinition<T> {
    name: string;
    description?: string;
    schema: Schema<T>;
    resolver: ({ input, agent }: {
        input: T;
        agent: Agent;
    }) => Promise<void | ObservableData>;
    render: (action: T) => string;
}
export declare function createAction<S extends ZodTypeAny>(action: {
    name: string;
    description?: string;
    schema?: S;
    resolver: ({ input, agent }: {
        input: z.infer<S>;
        agent: Agent;
    }) => Promise<void | ObservableData>;
    render?: (action: z.infer<S>) => string;
}): ActionDefinition<z.infer<S>>;
export type ActionPayload<A extends ActionDefinition<any>> = {
    name: A['name'];
} & z.infer<A['schema']>;
