import type { AgentProfile } from '../types' import { getTierForScore } from '../types' import { getConfig } from '../config' export function riskPenalty(agent: AgentProfile): number { const cfg = getConfig().scoring const now = Date.now() const last60s = agent.requestTimestamps.filter(t => now - t < 60_000).length const maxFreqPenalty = cfg?.maxFrequencyPenalty ?? 10 const freqSpike = last60s > 15 ? maxFreqPenalty : last60s > 10 ? Math.min(7, maxFreqPenalty) : last60s > 5 ? Math.min(3, maxFreqPenalty) : 0 const failedTx = Math.min(5, agent.failedRequests * 2) const hoursInactive = (now - agent.lastActive) / (60 * 60 * 1000) const decayRate = cfg?.inactivityDecayRate ?? 0.5 const inactivity = Math.min(5, hoursInactive * decayRate) const dailyLimit = getTierForScore(agent.trustScore).dailyLimit const spendRatio = dailyLimit > 0 ? agent.dailySpent / dailyLimit : 0 const spendPressure = spendRatio > 0.85 && agent.consecutiveApprovals > 0 ? 5 : 0 const denialStreak = Math.min(5, agent.consecutiveDenials * 2.5) return Math.min(30, freqSpike + failedTx + inactivity + spendPressure + denialStreak) }