import { type CommunicationRule } from './communication.js'; /** Shared social membership semantics; presentation and runtime ownership are separate. */ export type ConversationRole = 'admin' | 'member'; export type ConversationParticipantType = 'human' | 'ai_agent'; export interface ConversationParticipantSummary { humanCount: number; agentCount: number; totalCount: number; } /** `owner` is a read-only legacy spelling, never superior to another admin. */ export declare function normalizeConversationRole(value: unknown): ConversationRole | null; export declare function isConversationAdminRole(value: unknown): boolean; export declare function readMembershipRevision(value: unknown): number; /** Behavioral scope follows the current roster, never the legacy shape label. */ export declare function resolveConversationPolicyScope(memberIdsOrCount: unknown): 'direct' | 'group' | 'unknown'; export declare function buildConversationParticipantSummary(participants: readonly { userId: string; userType: unknown; }[]): { participantTypes: Record; participantSummary: ConversationParticipantSummary; isAgentChat: boolean; }; /** Legacy fields are compatibility inputs to one conservative invitation policy. */ export declare function readConversationInvitationPolicy(data: { inboundPolicy?: unknown; groupJoinPolicy?: unknown; } | null | undefined): CommunicationRule;