import type { ChannelActivityRenderer } from "#channel/activity-renderer.js";
import type { ActivitySnapshotV1 } from "#protocol/activity.js";
import { type SlackBotToken } from "#public/channels/slack/api.js";
declare const SLACK_ACTIVITY_RENDERER: unique symbol;
export interface SlackActivityRenderer {
    readonly id: string;
    readonly [SLACK_ACTIVITY_RENDERER]: true;
}
/**
 * Activity snapshot passed to an experimental Slack activity renderer.
 *
 * This contract is unstable and may change or be removed in any release.
 */
export type ExperimentalSlackActivitySnapshot = ActivitySnapshotV1;
/** Slack destination passed to an experimental activity renderer. */
export interface ExperimentalSlackActivityDestination {
    readonly channelId: string | null;
    readonly installationTeamId: string | null;
    readonly teamId: string | null;
    readonly threadTs: string | null;
    readonly triggeringUserId: string | null;
}
/**
 * Experimental custom Slack activity renderer.
 *
 * Renderer state is retained by renderer id between snapshots. This contract
 * is unstable and may change or be removed in any release.
 */
export interface ExperimentalSlackActivityRenderer<State = unknown> {
    readonly id: string;
    render(input: {
        readonly destination: ExperimentalSlackActivityDestination;
        readonly snapshot: ExperimentalSlackActivitySnapshot;
        readonly state: State | undefined;
    }): Promise<State | undefined>;
    dispose?(input: {
        readonly destination: ExperimentalSlackActivityDestination;
        readonly state: State | undefined;
    }): Promise<void>;
}
/** Creates the compact Slack assistant-thread activity renderer. */
export declare function experimental_slackActivityStatus(): SlackActivityRenderer;
/** Creates one experimental update-in-place Unicode activity tree per root turn. */
export declare function experimental_slackActivityTree(): SlackActivityRenderer;
/** Creates one experimental native Slack plan stream per root turn. */
export declare function experimental_slackActivityPlan(): SlackActivityRenderer;
/**
 * Registers an experimental custom Slack activity renderer.
 *
 * The renderer contract is unstable and may change or be removed in any
 * release.
 */
export declare function experimental_slackActivityRenderer<State>(renderer: ExperimentalSlackActivityRenderer<State>): SlackActivityRenderer;
export declare function hasSlackActivityStatus(renderers: readonly SlackActivityRenderer[] | undefined): boolean;
export declare function buildSlackActivityRenderers(input: {
    readonly botToken: SlackBotToken | undefined;
    readonly renderers: readonly SlackActivityRenderer[];
}): readonly ChannelActivityRenderer[];
export declare function activityMessages(snapshot: ActivitySnapshotV1): ReadonlyMap<string, string>;
export declare function selectSlackActivityStatus(snapshot: ActivitySnapshotV1): string;
export {};
