import type { AgentToolResult as KoiToolResult } from "@mariozechner/pi-agent-core";
import type { ChannelId, ChannelThreadingToolContext } from "../../channels/plugins/types.js";
import type { SKYKOIConfig } from "../../config/config.js";
import type { GatewayClientMode, GatewayClientName } from "../../utils/message-channel.js";
import type { OutboundSendDeps } from "./deliver.js";
import type { MessagePollResult, MessageSendResult } from "./message.js";
export type OutboundGatewayContext = {
    url?: string;
    token?: string;
    timeoutMs?: number;
    clientName: GatewayClientName;
    clientDisplayName?: string;
    mode: GatewayClientMode;
};
export type OutboundSendContext = {
    cfg: SKYKOIConfig;
    channel: ChannelId;
    params: Record<string, unknown>;
    accountId?: string | null;
    gateway?: OutboundGatewayContext;
    toolContext?: ChannelThreadingToolContext;
    deps?: OutboundSendDeps;
    dryRun: boolean;
    mirror?: {
        sessionKey: string;
        koiId?: string;
        text?: string;
        mediaUrls?: string[];
    };
    abortSignal?: AbortSignal;
};
export declare function executeSendAction(params: {
    ctx: OutboundSendContext;
    to: string;
    message: string;
    mediaUrl?: string;
    mediaUrls?: string[];
    gifPlayback?: boolean;
    bestEffort?: boolean;
}): Promise<{
    handledBy: "plugin" | "core";
    payload: unknown;
    toolResult?: KoiToolResult<unknown>;
    sendResult?: MessageSendResult;
}>;
export declare function executePollAction(params: {
    ctx: OutboundSendContext;
    to: string;
    question: string;
    options: string[];
    maxSelections: number;
    durationHours?: number;
}): Promise<{
    handledBy: "plugin" | "core";
    payload: unknown;
    toolResult?: KoiToolResult<unknown>;
    pollResult?: MessagePollResult;
}>;
