36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
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}。`,
|
|
};
|
|
}
|