Added
- Stability Score — new composite 0–100 metric combining p95 latency (30%), jitter/σ (30%), spike rate (20%), and uptime (20%). Displayed as a color-coded column in the TUI (green ≥80, cyan ≥60, yellow ≥40, red <40).
- p95 latency (
getP95) — 95th percentile latency from successful pings. Answers "95% of requests are faster than X ms." - Jitter (
getJitter) — standard deviation of latency. Low jitter = predictable, high jitter = erratic/spiky. - "Spiky" verdict — new verdict that catches models with good average latency but terrible tail latency (p95 spikes). A model with avg 250ms but p95 6000ms now gets flagged as "Spiky 📈" instead of "Perfect 🚀".
- Stability sorting — press
Bto sort by stability score. Most stable models rise to the top.Bkey now listed in the footer bar sort keys. - 24 new unit tests covering p95, jitter, stability score, Spiky verdict, and stability sorting.
- README: TUI Columns reference table — full 12-column table documenting every column (Rank, Tier, SWE%, Model, Origin, Latest, Avg, Health, Verdict, Stability, Context, Up%).
- README: Stability Score section — documents the formula, weights, color thresholds, and an example calculation.
- README: Verdict values table — lists all 7 verdict categories with their emoji, meaning, and criteria.
Changed
- "Stab" column renamed to "Stability" — column header widened from 6 to 11 characters; header text now reads
StaBilitywith theBsort-key letter in uppercase bold yellow. - SWE% column: 8-band color gradient — replaced the old 3-band color scheme (green ≥50, yellow ≥30, dim otherwise) with an 8-band gradient matching
TIER_COLOR: ≥70% bright neon green, ≥60% green, ≥50% yellow-green, ≥40% yellow, ≥35% amber, ≥30% orange-red, ≥20% red, <20% dark red. getVerdict()is now stability-aware: models in "Perfect" or "Normal" avg range get downgraded to "Spiky" when p95 shows extreme tail latency (requires ≥3 pings to avoid false positives).findBestModel()now uses a 4-key sort: status → avg latency → stability score → uptime (was 3-key: status → avg → uptime).sortResults()supports new'stability'column.VERDICT_ORDERupdated to include "Spiky" between "Slow" and "Very Slow".- README: keyboard shortcuts updated to include
Bfor Stability sort; "How it works" diagram updated. - Default ping interval → 3 seconds (was 2s) for a calmer default pace; still adjustable with W/X keys.
- Verdict colors unified with TIER_COLOR gradient — Perfect (cyan-green) → Normal (lime) → Spiky (yellow-green) → Slow (orange) → Very Slow (red-orange) → Overloaded (red) → Unstable (dark red) → Unusable (darkest red). Best→worst ordering in code.
- Footer cleanup — Removed the BETA TUI warning line. Renamed "Join our Discord" to just "Discord" and placed it next to Contributors on the "Made with love" line.
- Footer link colors — Star on GitHub: yellow, Contributors: orange, Discord: light purple. Ctrl+C Exit moved to end of "Made with love" line.
- Discord plain URL — Shows
Discord → https://discord.gg/5MbTnDC3Mdso terminals without OSC 8 link support can still see the URL. - K Help styling — Changed from green background badge to neon green text (
rgb(0,255,80)) with no background. - Z Mode styling — Red-orange color (
rgb(255,100,50)) matching OpenClaw branding. - Selection row styling — Darker backgrounds: favorite rows
bgRgb(35,20,0), cursor rowsbgRgb(50,0,60). Model name and Origin rendered in white bold when selected. - README — Updated all ping interval references from 2s to 3s; removed BETA warning line.
Fixed
- Column alignment: Health/Status emoji width — Health column used
.padEnd()which miscounted emoji width (✅, 🔥, ⏳ etc. are 2 terminal columns but counted as fewer). Switched topadEndDisplay()so Verdict, Stability, and Up% columns now align correctly. - Verdict emojis moved to end of text — emojis now appear after the word (e.g.,
Perfect 🚀instead of🚀 Perfect) for cleaner left-alignment. - Empty cell placeholders — changed from single
—to———in Latest Ping, Avg Ping, and Stability columns so empty cells have more visual weight and don't look like blank space.