/**
 * TelegramLiveSender — the real Telegram `SurfaceSender` for the live-test harness
 * (docs/specs/live-user-channel-proof-standard.md §5.4). It posts a message into a
 * Telegram forum topic AS A NON-AGENT IDENTITY (a DEMO bot / second account in a demo
 * group — NOT the agent's own bot, which the agent would not treat as inbound), then
 * waits for the AGENT's reply by polling the topic history for the next agent-authored
 * message.
 *
 * Same shape as SlackLiveSender: the send transport (the demo-bot post) and the
 * history read are INJECTED, so the CODE is complete + unit-testable here and the only
 * wiring-time dependency is the demo-bot CREDENTIAL + a demo group/topic (provisioning).
 *
 * The agent's reply is identified DETERMINISTICALLY: the earliest history entry with
 * `fromUser === false` (an agent outbound) whose messageId is strictly after the one we
 * sent. Null on timeout. The responder-MACHINE attribution (the cross-machine proof) is
 * the RealChannelDriver's injected placement reader, not this sender.
 */
import type { SurfaceSender } from './RealChannelDriver.js';
import type { SendResult, ReplyResult } from './LiveTestHarness.js';
/** The subset of TelegramAdapter.getTopicHistory's LogEntry this sender reads. */
export interface TelegramHistoryEntry {
    messageId: number;
    text: string;
    /** true = inbound user message; false = an agent (bot) outbound — the reply we wait for. */
    fromUser: boolean;
}
export interface TelegramLiveSenderDeps {
    /** Post a message into the topic AS THE DEMO identity (demo-bot token). Returns the new message id. */
    postAsDemoUser: (topicId: number, text: string) => Promise<{
        messageId: number;
    }>;
    /** Read recent topic history (Echo's getTopicHistory), newest-or-oldest order tolerated. */
    getHistory: (topicId: number, limit?: number) => TelegramHistoryEntry[] | Promise<TelegramHistoryEntry[]>;
    pollIntervalMs?: number;
    sleep?: (ms: number) => Promise<void>;
    now?: () => number;
    logger?: (m: string) => void;
}
export declare class TelegramLiveSender implements SurfaceSender {
    private readonly d;
    constructor(deps: TelegramLiveSenderDeps);
    private now;
    private sleep;
    private log;
    private topicNum;
    send(channelId: string, text: string): Promise<SendResult>;
    awaitReply(channelId: string, opts: {
        timeoutMs: number;
        afterMessageId?: string;
    }): Promise<Omit<ReplyResult, 'responderMachineId'> | null>;
    private findAgentReply;
}
//# sourceMappingURL=TelegramLiveSender.d.ts.map