import type { NarrativeQaReport, StoryEngineMemoryState, } from '../../types'; export interface NarrativeTelemetrySnapshot { averageActiveThreadCount: number; companionReactionDensity: number; endingFamilyCount: number; unresolvedPayoffCount: number; } export function buildTelemetrySnapshot(params: { memory: StoryEngineMemoryState; qaReport?: NarrativeQaReport | null; }) { return { averageActiveThreadCount: params.memory.activeThreadIds.length, companionReactionDensity: params.memory.recentCompanionReactions?.length ?? 0, endingFamilyCount: params.memory.endingState ? 1 : 0, unresolvedPayoffCount: params.qaReport?.issues.filter((issue) => issue.category === 'payoff').length ?? 0, } satisfies NarrativeTelemetrySnapshot; } export function captureNarrativeTelemetry(params: { memory: StoryEngineMemoryState; qaReport?: NarrativeQaReport | null; }) { const snapshot = buildTelemetrySnapshot(params); return { ...snapshot, summary: `当前平均活跃线程 ${snapshot.averageActiveThreadCount},队友反应密度 ${snapshot.companionReactionDensity},未回收 payoff ${snapshot.unresolvedPayoffCount}。`, }; }