import type { WebClient } from '@slack/web-api'; import { type AgentConnectSlackRequest, type AgentConfig, type AgentSetOwnerRequest, type AgentSlackValidateRequest, type AgentSlackValidateResponse, type SlackUserCandidate } from '../../shared/agent-config.js'; import { type AgentSlackManifestUpdateInfo, type AgentSlackManifestUpgradeRequest } from '../../shared/slack-manifest.js'; import { AgentService } from './agent.service.js'; export declare class AgentSlackService { private readonly agentService; constructor(agentService: AgentService); validateTokens(input: AgentSlackValidateRequest): Promise; connect(input: AgentConnectSlackRequest): Promise; getManifestUpdateInfo(): Promise; upgradeManifestVersion(input: AgentSlackManifestUpgradeRequest): Promise; syncDisplayInfo(): Promise; /** * Refresh the bot's Slack display info (avatar, name, workspace icon) at most * once per `ttlMs`, stamping `slack.botProfileSyncedAt`. When the last sync is * still fresh this is a cheap no-op — it reads the local config only and makes * NO Slack API calls. Best-effort: callers run it fire-and-forget off the * message path and swallow errors. Pass an existing `client` to reuse the * inbound request's WebClient instead of building a new one. */ syncDisplayInfoIfStale(options: { client?: WebClient; ttlMs: number; }): Promise<{ synced: boolean; }>; private persistDisplayInfo; getWebClient(): Promise; getAgentWebClient(): Promise<{ agent: AgentConfig; client: WebClient; }>; private webClientForAgent; fetchPrivateUrl(url: string): Promise; listUsers(): Promise; setOwner(input: AgentSetOwnerRequest): Promise; getInstallUrl(): Promise; private ensureOwnerOnboardingPrompt; } export declare function agentSlackServiceForAgent(agentId: string): AgentSlackService; //# sourceMappingURL=agent-slack.service.d.ts.map