import type { RuntimeEventBus, RuntimeEventEnvelope, AnyRuntimeEvent } from '../runtime/events/index.js';
import type { ChannelRenderEvent, ChannelRenderResult, ChannelSurface } from '@pellux/goodvibes-sdk/platform/channels/types';
import type { ChannelPluginRegistry } from './plugin-registry.js';
import type { RouteBindingManager } from './route-manager.js';
export interface TrackedChannelReply {
    readonly agentId: string;
    readonly surfaceKind: ChannelSurface;
    readonly task: string;
    readonly createdAt: number;
    readonly sessionId?: string;
    readonly routeId?: string;
    readonly [key: string]: unknown;
}
interface ReplyPipelineDeps {
    readonly channelPlugins: ChannelPluginRegistry;
    readonly routeBindings: RouteBindingManager;
    readonly runtimeBus?: RuntimeEventBus | null;
    readonly now?: () => number;
}
export declare function normalizeChannelRenderEventFromRuntime(envelope: RuntimeEventEnvelope<AnyRuntimeEvent['type'], AnyRuntimeEvent>): ChannelRenderEvent[];
export declare class ChannelReplyPipeline {
    private readonly channelPlugins;
    private readonly routeBindings;
    private readonly now;
    private readonly buffers;
    private readonly unsubscribers;
    constructor(deps: ReplyPipelineDeps);
    attachRuntimeBus(runtimeBus: RuntimeEventBus | null): void;
    dispose(): void;
    trackPending(pending: TrackedChannelReply): void;
    untrack(agentId: string): void;
    has(agentId: string): boolean;
    getPending(agentId: string): TrackedChannelReply | null;
    deliverProgress(agentId: string, explicitText?: string, force?: boolean): Promise<ChannelRenderResult | null>;
    deliverFinal(agentId: string, explicitText: string): Promise<ChannelRenderResult | null>;
    private handleEnvelope;
    private resolvePolicy;
    private dispatch;
    private disposeSubscriptions;
}
export {};
//# sourceMappingURL=reply-pipeline.d.ts.map