feat(版本): 优化概览与只读状态
关键改动: - 增加需求排序和版本只读状态规则及测试 - 完善版本概览阶段耗时、项目页和工作台展示 - 优化小宝预警请求节流、建议状态和风险过滤 Co-Authored-By: Codex GPT-5 <codex@openai.com>
This commit is contained in:
@@ -9,7 +9,7 @@ type RiskInsightCurrent = Pick<
|
||||
'riskLevel' | 'riskScore' | 'confidence' | 'forecastReleaseDate' | 'signals' | 'trend'
|
||||
>;
|
||||
|
||||
type RiskInsightPrevious = Pick<
|
||||
export type RiskInsightPrevious = Pick<
|
||||
XiaobaoRiskSnapshot,
|
||||
| 'riskScore'
|
||||
| 'confidence'
|
||||
@@ -103,6 +103,35 @@ export function shouldRequestRiskInsightWithCacheGate(
|
||||
return shouldRequestRiskInsightWithCooldown(current, previous, latestInsight, now);
|
||||
}
|
||||
|
||||
export interface RiskInsightRequestGateInput {
|
||||
riskCacheLoaded: boolean;
|
||||
cache: XiaobaoRiskInsightCacheItem[];
|
||||
current: XiaobaoVersionRisk;
|
||||
previous?: RiskInsightPrevious;
|
||||
lastRequestedAt?: string;
|
||||
now?: Date;
|
||||
}
|
||||
|
||||
export function shouldRequestRiskInsightWithRequestGate(input: RiskInsightRequestGateInput): boolean {
|
||||
const now = input.now ?? new Date();
|
||||
if (isRiskInsightRequestCoolingDown(input.lastRequestedAt, now)) return false;
|
||||
return shouldRequestRiskInsightWithCacheGate(
|
||||
input.riskCacheLoaded,
|
||||
input.cache,
|
||||
input.current,
|
||||
input.previous,
|
||||
now,
|
||||
);
|
||||
}
|
||||
|
||||
export function isRiskInsightRequestCoolingDown(lastRequestedAt: string | undefined, now: Date = new Date()): boolean {
|
||||
if (!lastRequestedAt) return false;
|
||||
const requestedAt = getTime(lastRequestedAt);
|
||||
const nowTime = now.getTime();
|
||||
if (!Number.isFinite(requestedAt) || !Number.isFinite(nowTime)) return false;
|
||||
return nowTime - requestedAt < RISK_INSIGHT_COOLDOWN_MS;
|
||||
}
|
||||
|
||||
export function buildRiskInsightSignature(risk: XiaobaoVersionRisk): string {
|
||||
return JSON.stringify({
|
||||
versionId: risk.versionId,
|
||||
|
||||
Reference in New Issue
Block a user