import type { ListConversationsResult } from './verbContract.js'; import type { DiscoverAgentsInput, DiscoverAgentsResult } from './agentDirectory.js'; /** The deliberately small policy vocabulary for principal communication. */ export type CommunicationRule = 'open' | 'approval-required' | 'closed'; /** Missing or invalid policy never widens access. */ export declare function readCommunicationRule(value: unknown): CommunicationRule; /** Canon conversation selection is principal-neutral; a conversation is a runtime session boundary. */ export type DirectConversationSelection = { mode: 'latest_or_new'; } | { mode: 'new'; } | { mode: 'specific'; conversationId: string; }; export type CommunicateInput = ({ action: 'discover_agents'; } & DiscoverAgentsInput) | { action: 'message_existing'; conversationId: string; text: string; messageId?: string; } | { action: 'start_direct' | 'start_conversation'; principalId: string; text: string; selection?: DirectConversationSelection; messageId?: string; } | { action: 'create_group' | 'create_conversation'; name?: string; memberIds: string[]; } | { action: 'forward_message'; sourceConversationId: string; targetConversationId: string; messageId: string; text?: string; } | { action: 'share_contact'; conversationId: string; contactUserId: string; text?: string; messageId?: string; } | { action: 'manage_group_members' | 'manage_participants'; conversationId: string; userId: string; operation: 'add' | 'remove'; } | { action: 'list_conversations'; limit?: number; } | { action: 'leave_conversation'; conversationId: string; }; export type CommunicateResult = ({ status: 'listed'; } & ListConversationsResult) | { status: 'left'; conversationId: string; } | ({ status: 'discovered'; } & DiscoverAgentsResult) | { status: 'messaged'; conversationId: string; messageId: string; created?: boolean; reused?: boolean; } | { status: 'requested' | 'pending'; requestId: string; } | { status: 'created'; conversationId: string; added: string[]; pending: Array<{ userId: string; requestId: string; }>; skipped: Array<{ userId: string; reason: string; }>; } | { status: 'forwarded'; messageId: string; targetConversationId: string; } | { status: 'shared'; conversationId: string; messageId: string; } | { status: 'added' | 'removed'; conversationId: string; userId: string; } | { status: 'approval_required'; reason: string; } | { status: 'blocked' | 'unavailable'; reason: string; }; /** Principal-neutral app/SDK command. Humans may open a composer before sending. */ export interface StartDirectInput { targetUserId: string; opener?: { text: string; messageId?: string; } | null; selection?: DirectConversationSelection; } export type StartDirectResult = { status: 'opened' | 'messaged'; conversationId: string; messageId?: string; created?: boolean; reused?: boolean; } | { status: 'requested' | 'pending'; requestId: string; } | { status: 'blocked' | 'unavailable'; reason: string; }; export declare function parseDirectConversationSelection(value: unknown): DirectConversationSelection;