/**
 * Per-bot, per-chat role file resolver.
 *
 * Role definitions live in botmux's session data directory, keyed by the bot's
 * Lark app id and the chat id:
 *   {config.session.dataDir}/roles/{larkAppId}/{chatId}.md
 *
 * Storing under the session data dir (rather than the bot's project workingDir)
 * keeps role config out of the user's code repo, makes it relocate together
 * with the rest of session state via SESSION_DATA_DIR, and keying on larkAppId
 * means two bots that share a workingDir still get independent personas. Role
 * content is injected into the CLI prompt as a <role> block, allowing the same
 * bot to adopt different personas in different Lark groups.
 */
/**
 * Resolve the per-chat role content for a given bot (larkAppId) and chat.
 * Returns the role markdown string, or null if no role file exists.
 */
export declare function resolveRoleFile(larkAppId: string, chatId: string): string | null;
/** Clear the in-memory cache (useful for testing or manual reload). */
export declare function clearRoleCache(): void;
/** Invalidate cache for a specific larkAppId + chatId pair. */
export declare function invalidateRoleCache(larkAppId: string, chatId: string): void;
/** Write or overwrite role content for a chat. Creates the parent directory if needed. */
export declare function writeRoleFile(larkAppId: string, chatId: string, content: string): void;
/** Delete a role file for a chat. */
export declare function deleteRoleFile(larkAppId: string, chatId: string): boolean;
export type RoleSource = 'chat' | 'team' | 'none';
/** Resolve the team-level (per-bot) role, or null. */
export declare function resolveTeamRoleFile(larkAppId: string): string | null;
/** Write or overwrite the team-level role for a bot. */
export declare function writeTeamRoleFile(larkAppId: string, content: string): void;
/** Delete the team-level role for a bot. */
export declare function deleteTeamRoleFile(larkAppId: string): boolean;
/**
 * Layered role resolution: per-chat override ＞ team-level default ＞ none.
 * Returns the effective content plus its source, so callers/UI/logs can
 * explain *why* a given role is in effect.
 */
export declare function resolveRole(larkAppId: string, chatId: string): {
    content: string | null;
    source: RoleSource;
};
//# sourceMappingURL=role-resolver.d.ts.map