import { type DeferredTopicBinding } from '../core/deferred-topic-binding.js'; export interface DeferredScheduleRunData { taskId: string; turnId: string; routingAnchor: string; topicTitle?: string; createdAt: string; } export interface DeferredTopicSendSession { sessionId: string; chatId: string; larkAppId: string; deferredScheduleRun?: DeferredScheduleRunData; } export interface DeferredTopicSendResult { handled: boolean; messageId?: string; rootMessageId?: string; materializedNow?: boolean; } export declare function deferredTopicBindingMatches(session: DeferredTopicSendSession, binding: DeferredTopicBinding): boolean; /** Existing deferred runs reply into their materialized topic before the * nominal send target is considered. Mirror that precedence for advisory * reachability without materializing a new topic. */ export declare function reusableDeferredTopicRoot(input: { session: DeferredTopicSendSession; binding: DeferredTopicBinding | undefined; explicitTopLevel: boolean; reuseBoundRootWhenTopLevel?: boolean; }): string | undefined; /** Route one `botmux send` effect for a lazily-materialized schedule topic. * The per-session file lock spans the provider request so two concurrent CLI * processes cannot both create a root. A stable provider UUID (sessionId) * makes retry-after-local-write-failure converge on the same Lark message. */ export declare function dispatchDeferredTopicSend(opts: { dataDir: string; session: DeferredTopicSendSession; currentTurnId?: string; explicitTopLevel: boolean; reuseBoundRootWhenTopLevel?: boolean; content: string; msgType: string; uuid?: string; sendRoot: (content: string, msgType: string, uuid: string) => Promise; sendTitleSeed: (title: string, uuid: string) => Promise; replyRoot: (rootMessageId: string, content: string, msgType: string, uuid?: string) => Promise; }): Promise; //# sourceMappingURL=deferred-topic-send.d.ts.map