feat(ai): complete v3.2 risk watch agent

This commit is contained in:
2026-07-08 19:57:38 +08:00
parent deebc5404a
commit e949d0f5d3
10 changed files with 445 additions and 30 deletions

View File

@@ -1,5 +1,6 @@
import type { VersionWithContext } from './derive';
import type { V22XiaobaoWarningSummary } from './v22-api';
import type { XiaobaoRiskInsightCacheItem } from './xiaobao-risk-cache';
import type {
RiskReason,
SilentRisk,
@@ -37,6 +38,25 @@ export function filterV22XiaobaoSummariesForVisibleVersions(
return summaries.filter((summary) => visibleVersionIds.has(summary.versionId));
}
export function collectV22XiaobaoLatestInsights(
summaries: V22XiaobaoWarningSummary[],
): XiaobaoRiskInsightCacheItem[] {
return summaries
.map((summary) => summary.latestInsight)
.filter((item): item is XiaobaoRiskInsightCacheItem => Boolean(item));
}
export function mergeV22XiaobaoLatestInsights(
relationInsights: XiaobaoRiskInsightCacheItem[],
legacyInsights: XiaobaoRiskInsightCacheItem[],
): XiaobaoRiskInsightCacheItem[] {
const relationKeys = new Set(relationInsights.map((item) => insightKey(item)));
return [
...relationInsights,
...legacyInsights.filter((item) => !relationKeys.has(insightKey(item))),
];
}
export function buildXiaobaoRisksFromV22Summaries(
input: BuildXiaobaoRisksFromV22SummariesInput,
): XiaobaoVersionRisk[] {
@@ -118,6 +138,10 @@ function getRiskPayload(summary: unknown): Record<string, unknown> {
return Object.keys(nested).length > 0 ? nested : root;
}
function insightKey(item: XiaobaoRiskInsightCacheItem): string {
return `${item.versionId}::${item.riskSignature}`;
}
function buildCurrentSnapshot(input: {
payload: Record<string, unknown>;
row: V22XiaobaoWarningSummary;