import type { OpenClawConfig } from "../../config/types.openclaw.js"; import type { TtsAutoMode } from "../../config/types.tts.js"; import type { FinalizedMsgContext } from "../templating.js"; import type { ReplyPayload } from "../types.js"; import type { ReplyDispatchKind, ReplyDispatcher } from "./reply-dispatcher.types.js"; export type AcpDispatchDeliveryMeta = { toolCallId?: string; allowEdit?: boolean; skipTts?: boolean; }; export type AcpDispatchDeliveryCoordinator = { startReplyLifecycle: () => Promise; deliver: (kind: ReplyDispatchKind, payload: ReplyPayload, meta?: AcpDispatchDeliveryMeta) => Promise; getBlockCount: () => number; getAccumulatedBlockText: () => string; getAccumulatedVisibleBlockText: () => string; getAccumulatedBlockTtsText: () => string; settleVisibleText: () => Promise; hasDeliveredFinalReply: () => boolean; hasDeliveredVisibleText: () => boolean; hasFailedVisibleTextDelivery: () => boolean; getRoutedCounts: () => Record; applyRoutedCounts: (counts: Record) => void; }; export declare function createAcpDispatchDeliveryCoordinator(params: { cfg: OpenClawConfig; agentId?: string; ctx: FinalizedMsgContext; dispatcher: ReplyDispatcher; inboundAudio: boolean; sessionKey?: string; sessionTtsAuto?: TtsAutoMode; ttsChannel?: string; suppressUserDelivery?: boolean; suppressReplyLifecycle?: boolean; shouldRouteToOriginating: boolean; originatingChannel?: string; originatingTo?: string; onReplyStart?: () => Promise | void; }): AcpDispatchDeliveryCoordinator;