export declare function defaultDataDir(): string; export declare function resolveConfigPath(): string; declare const VALID_DM_POLICIES: readonly ["open", "allowlist", "disabled"]; export type DmPolicy = (typeof VALID_DM_POLICIES)[number]; export declare const config: { /** Slack bot token, xoxb- prefix (required) */ readonly slackBotToken: string; /** Slack app-level token for Socket Mode, xapp- prefix (required) */ readonly slackAppToken: string; /** Pi binary path */ readonly piBin: string; /** Default model for pi */ readonly piModel: string; /** Thinking level for pi */ readonly piThinking: string; /** Base directory for per-channel session folders */ readonly sessionsDir: string; /** Days to retain archived sessions (0 = never clean) */ readonly archiveRetentionDays: number; /** Hours to retain downloaded attachment media for path-based agent access */ readonly mediaRetentionHours: number; /** SQLite database path */ readonly dbPath: string; /** Bot trigger name (default: bot's own display name) */ readonly triggerName: string; /** Max concurrent agent invocations */ readonly maxConcurrency: number; /** Max scheduled tasks enqueued per scheduler tick */ readonly maxScheduledConcurrency: number; /** Poll interval for message queue (ms) */ readonly pollInterval: number; /** Graceful shutdown timeout before aborting in-flight tasks (ms) */ readonly shutdownTimeoutMs: number; /** Log level */ readonly logLevel: string; /** Working directory for pi agent */ readonly piCwd: string; /** Extra pi flags (space-separated) */ readonly piExtraFlags: string; /** DM access policy: open (auto-register), allowlist, or disabled */ readonly dmPolicy: "open" | "allowlist" | "disabled"; /** Post responses into the triggering message's thread when it has one */ readonly replyInThread: boolean; /** Channel access policy: open, open-trigger, or allowlist */ readonly channelPolicy: "open" | "open-trigger" | "allowlist"; /** Comma-separated channel IDs to exclude from auto-registration */ readonly excludedChannels: Set; /** Max size for a single Slack attachment in bytes (0 disables the limit) */ readonly maxAttachmentBytes: number; /** Max combined attachment size per Slack message in bytes (0 disables the limit) */ readonly maxTotalAttachmentBytes: number; }; export type Config = typeof config; /** * Validate the Slack token pair. Returns human-readable problems (empty when * valid); callers decide whether to throw (gateway startup) or report (status). */ export declare function validateSlackTokens(cfg: Pick): string[]; export {};