/** * 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, 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; //# sourceMappingURL=relay-picker.d.ts.map