import type { XiaobaoRiskSnapshot } from './xiaobao-risk-trend'; export interface XiaobaoRiskInsight { summary: string; why: string[]; forecast: string; recommendedReleaseWindow?: string; suggestedActions: string[]; ownerHints: string[]; generatedAt: string; } export interface XiaobaoRiskInsightCacheItem { versionId: string; riskSignature: string; insight: XiaobaoRiskInsight; generatedAt: string; providerInfo?: { providerId?: string; model?: string }; } export function findCachedInsight( rows: XiaobaoRiskInsightCacheItem[], versionId: string, riskSignature: string, ): XiaobaoRiskInsightCacheItem | undefined { return rows.find((row) => row.versionId === versionId && row.riskSignature === riskSignature); } export function upsertInsight( rows: XiaobaoRiskInsightCacheItem[], item: XiaobaoRiskInsightCacheItem, ): XiaobaoRiskInsightCacheItem[] { return [ item, ...rows.filter((row) => row.versionId !== item.versionId || row.riskSignature !== item.riskSignature), ]; } export function upsertDailySnapshot( rows: XiaobaoRiskSnapshot[], item: XiaobaoRiskSnapshot, ): XiaobaoRiskSnapshot[] { return [ item, ...rows.filter((row) => row.versionId !== item.versionId || row.date !== item.date), ]; }