import type { SKYKOIConfig } from "../config/config.js"; export type RoutePeerKind = "dm" | "group" | "channel"; export type RoutePeer = { kind: RoutePeerKind; id: string; }; export type ResolveKoiRouteInput = { cfg: SKYKOIConfig; channel: string; accountId?: string | null; peer?: RoutePeer | null; /** Parent peer for threads — used for binding inheritance when peer doesn't match directly. */ parentPeer?: RoutePeer | null; guildId?: string | null; teamId?: string | null; }; export type ResolvedKoiRoute = { koiId: string; channel: string; accountId: string; /** Internal session key used for persistence + concurrency. */ sessionKey: string; /** Convenience alias for direct-chat collapse. */ mainSessionKey: string; /** Match description for debugging/logging. */ matchedBy: "binding.peer" | "binding.peer.parent" | "binding.guild" | "binding.team" | "binding.account" | "binding.channel" | "default"; }; export { DEFAULT_ACCOUNT_ID, DEFAULT_KOI_ID } from "./session-key.js"; export declare function buildKoiSessionKey(params: { koiId: string; channel: string; accountId?: string | null; peer?: RoutePeer | null; /** DM session scope. */ dmScope?: "main" | "per-peer" | "per-channel-peer" | "per-account-channel-peer"; identityLinks?: Record; }): string; export declare function resolveKoiRoute(input: ResolveKoiRouteInput): ResolvedKoiRoute;