loop-benchmarking

Controlled experiments across agentic coding configurations. Same task, one variable, what actually works.
git clone https://git.shiptheloop.com/loop-benchmarking.git
Log | Files | Refs | README

commit bfd97a203969e55db8b901dd4e9779c27b575264
parent 03e902b2a6cd15b9a3ea19d8800e869d6dafb602
Author: Brian Graham <brian@buildingbetterteams.de>
Date:   Tue,  7 Apr 2026 07:20:20 +0200

Add rich UI widget for api_retry rate limit events in transcript

Shows red RATE LIMITED badge with status code, error type,
attempt count, and retry delay. Replaces raw JSON fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Diffstat:
Mdashboard/src/components/TranscriptViewer.tsx | 27+++++++++++++++++++++++++++
1 file changed, 27 insertions(+), 0 deletions(-)

diff --git a/dashboard/src/components/TranscriptViewer.tsx b/dashboard/src/components/TranscriptViewer.tsx @@ -441,6 +441,33 @@ function renderEvent(event: TranscriptEvent, index: number): ReactNode { ); } + // API retry / rate limit + if (type === "system" && event.subtype === "api_retry") { + const attempt = (event.attempt as number) || 0; + const maxRetries = (event.max_retries as number) || 10; + const delay = (event.retry_delay_ms as number) || 0; + const errorStatus = (event.error_status as number) || 0; + const error = (event.error as string) || ""; + return ( + <EventCard key={index} borderColor={theme.red} bgTint="rgba(239, 68, 68, 0.06)" compact> + <div style={{ display: "flex", alignItems: "center", gap: 10, fontSize: "0.75rem", fontFamily: theme.fontMono }}> + <span style={{ color: theme.red, fontWeight: 700, fontSize: "0.7rem", textTransform: "uppercase", letterSpacing: "0.05em" }}> + RATE LIMITED + </span> + <span style={{ color: theme.textMuted }}> + {errorStatus} {error} + </span> + <span style={{ color: theme.textMuted }}> + attempt {attempt}/{maxRetries} + </span> + <span style={{ color: theme.textMuted }}> + retry in {(delay / 1000).toFixed(1)}s + </span> + </div> + </EventCard> + ); + } + // Harness config event if (type === "harness" && event.subtype === "config") { const tools = Array.isArray(event.tools) ? (event.tools as string[]).join(", ") : "";

Impressum · Datenschutz