import { WebClient } from '@slack/web-api'; /** Runtime-only Slack operations. Control commands never construct a second client. */ export declare function configureSlackClient(next: WebClient, configuredChannelId: string): void; export declare function clearSlackClient(): void; /** Reconciles only gateway-owned reactions; Slack removes only the caller's own reaction. */ export declare function reconcileInboxReactions(limit?: number): Promise; /** Coalesces post-transition reconciliation without blocking a control response. */ export declare function scheduleReactionReconciliation(): void; type SlackPage = { items: unknown[]; nextCursor: string | null; }; /** Leaves framing/error-envelope headroom beneath the 1 MiB control limit. */ export declare const SLACK_RESPONSE_BUDGET_BYTES: number; export type SlackUser = { id: string; label: string; }; /** Validates a Slack user and derives the non-authoritative cosmetic display label. */ export declare function slackUser(userId: string): Promise; /** Fetches only live messages in the configured conversation. */ export declare function slackHistory(limit: number, nextCursor?: string): Promise; /** Looks up an exact timestamp without ever searching another conversation. */ export declare function slackMessage(messageTs: string): Promise; /** Fetches one configured-conversation thread with Slack's cursor unchanged. */ export declare function slackThread(threadTs: string, limit: number, nextCursor?: string): Promise; type UploadFile = { path: string; dev: number; ino: number; size: number; mtimeMs: number; }; /** Validates local upload paths before any Slack operation is started. */ export declare function validateUploadFiles(paths: string[]): UploadFile[]; /** Sends text and, when supplied, one Slack V2 multi-file message. */ export declare function sendSlackMessage(text: string, threadTs?: string, paths?: string[]): Promise<{ ts: string; }>; export declare function replyToInbox(threadTs: string, text: string, paths?: string[]): Promise; /** Produces one safe leaf name; the file ID is kept separately in the destination. */ export declare function sanitizeSlackFilename(value: unknown): string; /** * Fetches a Slack file only after its live metadata proves it is shared in the * configured conversation. File content is written directly to private disk; * it never enters the control-socket response. */ export declare function downloadSlackFile(fileId: string): Promise<{ fileId: string; localPath: string; name: string; size: number; mediaType: string; }>; export {};