import { HttpRequestOptions } from '@ztimson/utils';
import { AssetController } from './asset-controller';
import { Meta } from './core';
import { Momentum } from './momentum';
export type ToolArgs = {
    [key: string]: {
        /** Argument type */
        type: 'array' | 'boolean' | 'number' | 'object' | 'string';
        /** Argument description */
        description: string;
        /** Required argument */
        required?: boolean;
        /** Default value */
        default?: any;
        /** Options */
        enum?: string[];
        /** Minimum value or length */
        min?: number;
        /** Maximum value or length */
        max?: number;
        /** Match pattern */
        pattern?: string;
        /** Child arguments */
        items?: {
            [key: string]: ToolArgs;
        };
    };
};
/** Action model */
export type Action = Meta & {
    /** Action name */
    name: string;
    /** Disable action */
    disabled?: boolean;
    /** Trigger with AI call, CRON, CRUD or Event */
    trigger: {
        type: ActionType;
        value: string | ToolArgs;
    };
    /** Run as system or with triggering user permissions */
    system?: boolean | null;
    /** Action code */
    fn: string;
    /** User nodes */
    notes?: string | null;
    /** Last execution timestamp */
    readonly lastRun?: null | Date;
    /** Last execution duration */
    readonly lastRunDuration?: number | null;
    /** Next scheduled run time (CRON only) */
    readonly nextRun?: null | Date;
    /** Last execution results */
    readonly response?: ActionResult | null;
};
/** Action execution result */
export type ActionResult = {
    /** ID of associated action */
    readonly action: string;
    /** Runtime */
    readonly duration: number;
    /** Start timestamp */
    readonly start: Date;
    /** Console output */
    readonly stdout: any[];
    /** Console errors */
    readonly stderr: any[];
    /** HTTP Response */
    readonly response?: any;
    /** Action return value */
    readonly return?: any;
};
/** Action triggers - Ordered to optimize filtering */
export declare enum ActionType {
    /** HTTP DELETE request */
    'DELETE' = 0,
    /** HTTP POST request */
    'POST' = 1,
    /** HTTP PATCH request */
    'PATCH' = 2,
    /** HTTP PUT request */
    'PUT' = 3,
    /** HTTP GET request */
    'GET' = 4,
    /** Internal Event */
    'EVENT' = 6,
    /** CRON Job */
    'CRON' = 5,
    /** AI tool call */
    'AI' = 7
}
/** Run cloud functions & custom code */
export declare class Actions extends AssetController<Action> {
    protected momentum: Momentum;
    constructor(momentum: Momentum);
    /**
     * Manually trigger an actions execution
     * @param {string} id Action ID
     * @param {HttpRequestOptions} opts Additional arguments
     * @return {Promise<ActionResult>} All action output including console logs & return
     */
    debug(id: string, opts?: HttpRequestOptions): Promise<ActionResult>;
    /**
     * Run an HTTP action
     * @param {string} path HTTP path excluding `/api/actions/run`
     * @param {HttpRequestOptions} opts HTTP options
     * @return {Promise<T>} HTTP response
     */
    run<T>(path: string, opts?: HttpRequestOptions): Promise<T>;
}
//# sourceMappingURL=actions.d.ts.map