/**
 * Shared agent-side types that subsystems (executors, image generator,
 * frontends) need to reference without taking a dependency on Agent
 * itself — avoids circular imports through the Agent class.
 */
export interface AttachmentSendPayload {
    path: string;
    caption?: string;
    asImage?: boolean;
}
/**
 * Callback a frontend (e.g. TelegramBot) registers with the Agent so the LLM
 * can deliver files/images back to the current user. Must resolve only after
 * the frontend has accepted the file (or reject with an error the tool can
 * report back to the LLM). Frontends typically use AsyncLocalStorage to pin
 * the delivery to the chat that triggered the tool call.
 */
export type AttachmentSender = (payload: AttachmentSendPayload) => Promise<void>;
/**
 * Callback a frontend registers so tools can send interim text messages
 * (e.g. "🎨 generating image..." before a long fetch). Optional — tools
 * should no-op silently when not registered.
 */
export type ProgressNotifier = (text: string) => Promise<void>;
/**
 * Opaque identifier for a registered frontend (e.g. "telegram", "center", "tui").
 * Plain string for now — Agent doesn't need the dp-shared FrontendId enum
 * constraint because frontends self-name on register.
 */
export type FrontendId = string;
/**
 * Sentinel error a frontend's sender/notifier throws when its own
 * AsyncLocalStorage scope is empty — i.e. the current call stack didn't
 * originate from this frontend's chat handler, so it has no chat to deliver
 * to. The Agent's multiplexer treats this as "not my turn, try the next
 * frontend"; non-NoChatContext errors propagate.
 *
 * Frontends MUST throw NoChatContext rather than silently broadcasting or
 * returning, otherwise the multiplexer can't tell who should handle the
 * call when multiple frontends are registered.
 */
export declare class NoChatContext extends Error {
    constructor(message?: string);
}
