feat: Add DNS timings and resolution overrides (#360)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Gregory Schier
2026-01-13 08:42:22 -08:00
committed by GitHub
parent 822d52a57e
commit 306e6f358a
35 changed files with 625 additions and 149 deletions

View File

@@ -188,6 +188,35 @@ function EventDetails({
);
}
// DNS Resolution - show hostname, addresses, and timing
if (e.type === 'dns_resolved') {
return (
<div className="flex flex-col gap-2">
<EventDetailHeader
title={e.overridden ? 'DNS Override' : 'DNS Resolution'}
timestamp={event.createdAt}
actions={actions}
/>
<KeyValueRows>
<KeyValueRow label="Hostname">{e.hostname}</KeyValueRow>
<KeyValueRow label="Addresses">{e.addresses.join(', ')}</KeyValueRow>
<KeyValueRow label="Duration">
{e.overridden ? (
<span className="text-text-subtlest">--</span>
) : (
`${String(e.duration)}ms`
)}
</KeyValueRow>
</KeyValueRows>
{e.overridden && (
<KeyValueRows>
<KeyValueRow label="Source">Workspace Override</KeyValueRow>
</KeyValueRows>
)}
</div>
);
}
// Default - use summary
const { summary } = getEventDisplay(event.event);
return (
@@ -219,6 +248,11 @@ function formatEventRaw(event: HttpResponseEventData): string {
return `[${formatBytes(event.bytes)} sent]`;
case 'chunk_received':
return `[${formatBytes(event.bytes)} received]`;
case 'dns_resolved':
if (event.overridden) {
return `DNS override ${event.hostname}${event.addresses.join(', ')}`;
}
return `DNS resolved ${event.hostname}${event.addresses.join(', ')} (${event.duration}ms)`;
default:
return '[unknown event]';
}
@@ -297,6 +331,15 @@ function getEventDisplay(event: HttpResponseEventData): EventDisplay {
label: 'Chunk',
summary: `${formatBytes(event.bytes)} chunk received`,
};
case 'dns_resolved':
return {
icon: 'globe',
color: event.overridden ? 'success' : 'secondary',
label: event.overridden ? 'DNS Override' : 'DNS',
summary: event.overridden
? `${event.hostname}${event.addresses.join(', ')} (overridden)`
: `${event.hostname}${event.addresses.join(', ')} (${event.duration}ms)`,
};
default:
return {
icon: 'info',