// --- OWS Policy Types --- export interface PolicyContext { chain_id: string wallet_id: string api_key_id: string transaction: { to: string value: string raw_hex: string data: string } spending: { daily_total: string date: string } timestamp: string policy_config?: Record } export interface PolicyResult { allow: boolean reason?: string } // --- Scoring Types --- export interface TrustBreakdown { identity: number onChain: number behavior: number compliance: number network: number risk: number total: number } export interface SpendingTier { name: 'Sovereign' | 'Trusted' | 'Building' | 'Cautious' | 'Restricted' | 'Frozen' color: string dailyLimit: number perTxLimit: number minScore: number } // --- Agent Profile --- export interface AgentProfile { address: string walletId?: string apiKeyId?: string chainId?: string isOWSWallet: boolean worldIdVerified: boolean webBotAuthVerified: boolean nullifierHash?: string trustScore: number breakdown: TrustBreakdown tier: string totalRequests: number successfulRequests: number failedRequests: number dailySpent: number dailyDate: string consecutiveApprovals: number consecutiveDenials: number totalApproved: number totalDenied: number humanOverrides: number counterparties: string[] pendingOverride?: { tx: PolicyContext['transaction']; amount: number; createdAt: number } lastOnChainRefresh?: number requestTimestamps: number[] lastActive: number consecutiveCleanDays: number cleanDayDate: string createdAt: number } // --- WebSocket Event Types --- export interface PolicyDecisionEvent { type: 'POLICY_DECISION' agent: string amount: number trustScore: number tier: string decision: 'APPROVE' | 'DENY' | 'OVERRIDE' reason: string dailyLimit: number dailySpent: number timestamp: number } export interface TrustChangeEvent { type: 'TRUST_CHANGE' agent: string oldScore: number newScore: number oldTier: string newTier: string reason: string timestamp: number } export interface BudgetWarningEvent { type: 'BUDGET_WARNING' agent: string spent: number limit: number percentage: number timestamp: number } export type TriageEvent = PolicyDecisionEvent | TrustChangeEvent | BudgetWarningEvent // --- Spending Tiers --- export let SPENDING_TIERS: SpendingTier[] = [ { name: 'Sovereign', color: '#fff8e1', dailyLimit: 1000, perTxLimit: 500, minScore: 80 }, { name: 'Trusted', color: '#ffd700', dailyLimit: 200, perTxLimit: 100, minScore: 60 }, { name: 'Building', color: '#4caf50', dailyLimit: 50, perTxLimit: 25, minScore: 40 }, { name: 'Cautious', color: '#00bcd4', dailyLimit: 10, perTxLimit: 5, minScore: 20 }, { name: 'Restricted', color: '#2196f3', dailyLimit: 2, perTxLimit: 1, minScore: 1 }, { name: 'Frozen', color: '#1a1a4e', dailyLimit: 0, perTxLimit: 0, minScore: 0 }, ] export function updateSpendingTiers(tiers: SpendingTier[]): void { SPENDING_TIERS = tiers } export function getTierForScore(score: number): SpendingTier { for (const tier of SPENDING_TIERS) { if (score >= tier.minScore) return tier } return SPENDING_TIERS[SPENDING_TIERS.length - 1] }