fix(小宝预警): 稳定风险证据与建议更新
关键改动: - 优化风险证据的日报工时与静默风险计算 - 稳定 AI 触发签名,避免证据细节变化造成重复请求 - 调整预警建议更新状态与相关测试 Co-Authored-By: Codex GPT-5 <codex@openai.com>
This commit is contained in:
@@ -11,9 +11,13 @@ import { sanitizeRiskInsight } from './xiaobao-warning-view';
|
||||
interface AttachXiaobaoRiskSuggestionInput {
|
||||
insights: XiaobaoRiskInsightCacheItem[];
|
||||
pendingInsightKeys: string[];
|
||||
pendingInsightAttempts?: Record<string, string>;
|
||||
pendingInsightVisibleMs?: number;
|
||||
now?: Date;
|
||||
}
|
||||
|
||||
const DEFAULT_PENDING_INSIGHT_VISIBLE_MS = 3 * 60 * 1000;
|
||||
|
||||
const RISK_LEVEL_LABEL: Record<XiaobaoVersionRisk['riskLevel'], string> = {
|
||||
on_track: '按期',
|
||||
attention: '需关注',
|
||||
@@ -31,7 +35,7 @@ export function attachXiaobaoRiskSuggestion(
|
||||
input: AttachXiaobaoRiskSuggestionInput,
|
||||
): XiaobaoVersionRisk {
|
||||
const pendingKey = buildXiaobaoRiskInsightPendingKey(risk);
|
||||
const isUpdating = input.pendingInsightKeys.includes(pendingKey);
|
||||
const isUpdating = isFreshPendingInsight(pendingKey, input);
|
||||
const reusable = getReusableInsight(input.insights, risk);
|
||||
if (reusable) {
|
||||
return {
|
||||
@@ -60,6 +64,19 @@ export function attachXiaobaoRiskSuggestion(
|
||||
};
|
||||
}
|
||||
|
||||
function isFreshPendingInsight(pendingKey: string, input: AttachXiaobaoRiskSuggestionInput): boolean {
|
||||
if (!input.pendingInsightKeys.includes(pendingKey)) return false;
|
||||
const requestedAt = input.pendingInsightAttempts?.[pendingKey];
|
||||
if (!requestedAt) return true;
|
||||
|
||||
const requestedTime = new Date(requestedAt).getTime();
|
||||
const nowTime = (input.now ?? new Date()).getTime();
|
||||
if (!Number.isFinite(requestedTime) || !Number.isFinite(nowTime)) return false;
|
||||
|
||||
const visibleMs = input.pendingInsightVisibleMs ?? DEFAULT_PENDING_INSIGHT_VISIBLE_MS;
|
||||
return nowTime - requestedTime < visibleMs;
|
||||
}
|
||||
|
||||
export function buildRuleBasedRiskInsight(risk: XiaobaoVersionRisk, now = new Date()): XiaobaoRiskInsight {
|
||||
const firstReason = risk.reasons[0];
|
||||
const why = risk.reasons.length > 0
|
||||
|
||||
Reference in New Issue
Block a user