Dashboard › attaquer-framework › Distillation
03cda095-1e75-4cdd-91ad-a3507239eb73["06126bc10843cded8d4365e9f26d97a4","b46d317dcdaff638594e043465bcf438"]
src/index.tsx (main app, provider setup), src/ThermalStatus/ThermalStatus.tsx (full component), src/CurrentApps/icon-cache.ts (icon extraction module)src/index.tsx details: providers defined — glazewm, cpu (5000ms), memory (5000ms), weather, network (2000ms), battery (10000ms), date (format: "HH:mm ccc d LLLL y"), media, audio, systray; layout: left (WindowsButton, SearchButton, Workspaces, TilingBinding, MediaStatus), center (CurrentApps), right (Systray, ThermalStatus, CpuStatus, MemoryStatus, WeatherStatus, NetworkStatus, BatteryStatus, VolumeStatus, TimeStatus)src/ThermalStatus/ThermalStatus.tsx details: BASE_URL = "http://127.0.0.1:30912/api", FC_UI_URL = "http://127.0.0.1:30912", THERMAL_POLL_MS = 2000; types: ThermalSample, FanCalibration, FanConfig, Config; temp color thresholds: <60→low-usage, <75→medium-usage, <90→high-usage, ≥90→extreme-usage; fan% thresholds: <35→low-usage, <55→medium-usage, <80→high-usage, ≥80→extreme-usage; polls ${BASE_URL}/thermal/history and ${BASE_URL}/config; openFC() launches msedge.exe with --app=${FC_UI_URL}; fetches calibration once on mount, polls thermal every 2000ms; shows raw RPM if no calibration points; rpmToPercent() inverts calibration points [duty%, rpm] → [rpm, duty%] then interpolatessrc/CurrentApps/icon-cache.ts details: in-memory Map iconState (processName → base64 data URL | "pending" | "failed"); listener Map for pending callbacks; PowerShell script uses Get-Process -Name, System.Drawing.Icon::ExtractAssociatedIcon, resizes to 32x32 via HighQualityBicubic, outputs base64 PNG to stdout; success condition: code === 0 || code === null AND b64.length > 100; failures marked permanently (no retry/TTL); getProcessIcon(processName, onChange) returns cached value immediately or null if pending/failed