import { Context, Session } from "koishi"; import { ChatMessage, Interaction } from "../../types/model"; import { Scenario } from "./Scenario"; declare module "koishi" { interface Events { "scenario/clear": (channelId: string) => void; "scenario/clearAll": () => void; } } /** * 统一的场景管理器 */ export declare class ScenarioManager { private ctx; private multimodalConfig; private config?; private scenarios; private contextProcessor?; constructor(ctx: Context, multimodalConfig: any, config?: { UseModel: [number, number]; enableEnhancedContext?: boolean; contextWindowTokens?: number; }); /** * 获取或创建场景实例 */ getScenario(session: Session, limit?: number): Promise; /** * 更新场景中的消息 */ updateMessage(message: ChatMessage, session: Session, isNewMessage: boolean): Promise; /** * 更新场景中的交互记录 * 当工具调用或结果返回时调用。 * @param interaction 交互对象 * @param session 关联的会话 * @param isNewMessage 是否为新交互,机器人尚未处理 */ updateInteraction(interaction: Interaction, session: Session, isNewMessage: boolean): Promise; /** * 处理交互记录的生命周期:递减 'life' 值并移除过期记录。 * 此函数在 Koishi LLMChain 处理之前调用,确保上下文中的交互记录是最新的。 * 优化:使用批处理 SQL 语句。 * 新增:同步更新内存中 Scenario 实例的 Interaction 生命周期。 * @param channelId 频道ID */ processInteractions(channelId: string): Promise; /** * 设置指定频道的最后回复时间。 * 在机器人成功回复后调用,用于标记已读消息的截止时间。 * @param channelId 频道ID */ setLastReplyTime(channelId: string): Promise; /** * 清除指定频道的场景 */ clearScenario(channelId: string): void; /** * 清除所有场景 */ clearAllScenarios(): void; /** * 获取所有活跃的 Scenario 实例列表,供 PromptBuilder 渲染。 */ getActiveScenariosForRender(allowedChannels: string[]): Scenario[]; /** * 获取所有不活跃的 Scenario 实例列表(主要指群聊),供 PromptBuilder 渲染。 */ getInactiveScenariosForRender(allowedChannels: string[]): Scenario[]; }