/**
 * Shared helper for collecting the operator's relayable sessions used by the
 * /relay picker. Same selection criteria used both at first render
 * (command-handler) and on each card-update click (card-handler re-render),
 * so factor it out to keep both paths in sync.
 *
 * Selection rules:
 *   • same bot (this larkAppId — only this daemon's sessions are visible)
 *   • NOT in the current chat (can't relay into the chat it already lives in)
 *   • operator is the session owner (owner-only access)
 *   • not an adopt session (those wrap a user-attached tmux pane, refused
 *     by transferSession anyway)
 *
 * Resolves friendly chat names and modes via getChatNameAndMode in parallel
 * (1 API call per unique source chatId). Failure modes are tolerant:
 * unresolved chats fall back to the raw chatId for chatLabel and the
 * session's own chatType for mode.
 */
import type { DaemonSession } from '../core/types.js';
import type { RelayPickerEntry } from '../im/lark/card-builder.js';
export declare function collectRelayPickerEntries(activeSessions: Map<string, DaemonSession>, myAppId: string, 
/** The relay TARGET anchor (chatId for chat-scope, rootMessageId for a 话题).
 *  We exclude only the session sitting AT this anchor (can't relay onto
 *  itself); same-chat other-topic sessions have a different anchor and stay
 *  in the candidate list — that's what enables 同群话题间搬运. */
currentAnchor: string, operatorOpenId: string): Promise<RelayPickerEntry[]>;
//# sourceMappingURL=relay-picker.d.ts.map