import { APIResource } from "../../../core/resource.js";
import { APIPromise } from "../../../core/api-promise.js";
import { Cursor, type CursorParams, PagePromise } from "../../../core/pagination.js";
import { RequestOptions } from "../../../internal/request-options.js";
export declare class Tools extends APIResource {
    /**
     * Create a new tool for an agent. Tools allow the agent to call external webhooks.
     *
     * @example
     * ```ts
     * const tool = await client.senders.agent.tools.create(
     *   'senderId',
     *   {
     *     description: 'Get the status of a customer order',
     *     name: 'get_order_status',
     *     parameters: {
     *       type: 'object',
     *       properties: {
     *         order_id: {
     *           type: 'string',
     *           description: 'The order ID to look up',
     *         },
     *       },
     *       required: ['order_id'],
     *     },
     *     webhookUrl:
     *       'https://api.example.com/webhooks/order-status',
     *     webhookSecret: 'whsec_...',
     *   },
     * );
     * ```
     */
    create(senderID: string, body: ToolCreateParams, options?: RequestOptions): APIPromise<ToolCreateResponse>;
    /**
     * Get a specific tool.
     *
     * @example
     * ```ts
     * const tool = await client.senders.agent.tools.retrieve(
     *   'toolId',
     *   { senderId: 'senderId' },
     * );
     * ```
     */
    retrieve(toolID: string, params: ToolRetrieveParams, options?: RequestOptions): APIPromise<ToolRetrieveResponse>;
    /**
     * Update a tool.
     *
     * @example
     * ```ts
     * const tool = await client.senders.agent.tools.update(
     *   'toolId',
     *   { senderId: 'senderId' },
     * );
     * ```
     */
    update(toolID: string, params: ToolUpdateParams, options?: RequestOptions): APIPromise<ToolUpdateResponse>;
    /**
     * List tools for an agent.
     *
     * @example
     * ```ts
     * // Automatically fetches more pages as needed.
     * for await (const agentTool of client.senders.agent.tools.list(
     *   'senderId',
     * )) {
     *   // ...
     * }
     * ```
     */
    list(senderID: string, query?: ToolListParams | null | undefined, options?: RequestOptions): PagePromise<AgentToolsCursor, AgentTool>;
    /**
     * Delete a tool.
     *
     * @example
     * ```ts
     * await client.senders.agent.tools.delete('toolId', {
     *   senderId: 'senderId',
     * });
     * ```
     */
    delete(toolID: string, params: ToolDeleteParams, options?: RequestOptions): APIPromise<void>;
    /**
     * Test a tool by triggering its webhook with test parameters.
     *
     * @example
     * ```ts
     * const response = await client.senders.agent.tools.test(
     *   'toolId',
     *   {
     *     senderId: 'senderId',
     *     testParams: { order_id: 'ORD-12345' },
     *   },
     * );
     * ```
     */
    test(toolID: string, params: ToolTestParams, options?: RequestOptions): APIPromise<ToolTestResponse>;
}
export type AgentToolsCursor = Cursor<AgentTool>;
export interface AgentTool {
    id: string;
    agentId: string;
    createdAt: string;
    /**
     * Description for the LLM to understand when to use this tool.
     */
    description: string;
    enabled: boolean;
    name: string;
    parameters: AgentTool.Parameters;
    updatedAt: string;
    /**
     * HTTPS URL to call when the tool is executed.
     */
    webhookUrl: string;
}
export declare namespace AgentTool {
    interface Parameters {
        properties: {
            [key: string]: Parameters.Properties;
        };
        required: Array<string>;
        type: 'object';
    }
    namespace Parameters {
        interface Properties {
            description?: string;
            type?: string;
        }
    }
}
export interface ToolCreateResponse {
    tool: AgentTool;
}
export interface ToolRetrieveResponse {
    tool: AgentTool;
}
export interface ToolUpdateResponse {
    tool: AgentTool;
}
export interface ToolTestResponse {
    scheduled: boolean;
}
export interface ToolCreateParams {
    description: string;
    name: string;
    parameters: ToolCreateParams.Parameters;
    /**
     * Must be HTTPS.
     */
    webhookUrl: string;
    enabled?: boolean;
    /**
     * Optional secret for webhook signature verification.
     */
    webhookSecret?: string;
}
export declare namespace ToolCreateParams {
    interface Parameters {
        properties: {
            [key: string]: Parameters.Properties;
        };
        required: Array<string>;
        type: 'object';
    }
    namespace Parameters {
        interface Properties {
            description?: string;
            type?: string;
        }
    }
}
export interface ToolRetrieveParams {
    senderId: string;
}
export interface ToolUpdateParams {
    /**
     * Path param
     */
    senderId: string;
    /**
     * Body param
     */
    description?: string;
    /**
     * Body param
     */
    enabled?: boolean;
    /**
     * Body param
     */
    name?: string;
    /**
     * Body param
     */
    parameters?: ToolUpdateParams.Parameters;
    /**
     * Body param
     */
    webhookSecret?: string | null;
    /**
     * Body param
     */
    webhookUrl?: string;
}
export declare namespace ToolUpdateParams {
    interface Parameters {
        properties: {
            [key: string]: Parameters.Properties;
        };
        required: Array<string>;
        type: 'object';
    }
    namespace Parameters {
        interface Properties {
            description?: string;
            type?: string;
        }
    }
}
export interface ToolListParams extends CursorParams {
    enabled?: boolean;
}
export interface ToolDeleteParams {
    senderId: string;
}
export interface ToolTestParams {
    /**
     * Path param
     */
    senderId: string;
    /**
     * Body param: Parameters to pass to the tool for testing.
     */
    testParams: {
        [key: string]: unknown;
    };
}
export declare namespace Tools {
    export { type AgentTool as AgentTool, type ToolCreateResponse as ToolCreateResponse, type ToolRetrieveResponse as ToolRetrieveResponse, type ToolUpdateResponse as ToolUpdateResponse, type ToolTestResponse as ToolTestResponse, type AgentToolsCursor as AgentToolsCursor, type ToolCreateParams as ToolCreateParams, type ToolRetrieveParams as ToolRetrieveParams, type ToolUpdateParams as ToolUpdateParams, type ToolListParams as ToolListParams, type ToolDeleteParams as ToolDeleteParams, type ToolTestParams as ToolTestParams, };
}
//# sourceMappingURL=tools.d.ts.map