/** * 星环OPC中心 — 会话-任务映射管理器 * * 追踪 sessions_spawn 创建的子会话与 OPC 任务之间的对应关系。 * 当 subagent_ended 触发时,通过 childSessionKey 查找对应任务并自动更新状态。 * * 内存 Map 作为热缓存,数据库 session_key 列作为持久化。 */ export interface SessionTaskMapping { taskId: string; companyId: string; staffRole: string; title: string; runId?: string; spawnedAt: string; } /** 内存映射:childSessionKey → 任务信息 */ const sessionMap = new Map(); /** * 注册一个 spawn 出的子会话与任务的映射关系。 */ export function registerSpawnedSession( childSessionKey: string, mapping: SessionTaskMapping, ): void { sessionMap.set(childSessionKey, mapping); } /** * 根据 childSessionKey 查找对应的任务映射。 */ export function getSessionTaskMapping( childSessionKey: string, ): SessionTaskMapping | undefined { return sessionMap.get(childSessionKey); } /** * 移除已完成/已取消的会话映射。 */ export function removeSessionTaskMapping(childSessionKey: string): void { sessionMap.delete(childSessionKey); } /** * 获取当前所有活跃的会话映射数量(用于调试/监控)。 */ export function getActiveSessionCount(): number { return sessionMap.size; } /** * 清理所有映射(服务停止时调用)。 */ export function clearAllSessionMappings(): void { sessionMap.clear(); }