inspector/clients/web/src/components/groups
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Cliff Hall 4a927d3978
fix(web): defer issuer validation to onBlur, block silent-drop on close, require a real host URL (closes #1544) (#1545)
* fix(web): defer IdP issuer URL error to onBlur in Client Settings (#1544)

The Enterprise-Managed Authorization Issuer field validated its URL inline on
every render, so the 'Must be an http(s) URL' error nagged while the user was
still mid-typing (e.g. before 'https:/…' is complete).

Gate the issuer error display on an issuerTouched flag set onBlur; once
touched it tracks the value live, so the error clears as soon as a valid URL
is entered. The persist gate (canPersistClientSettingsDraft → validateClientSettings)
is unchanged and still validates independently, so an invalid issuer is never
written to the backend regardless of touched state.

Closes #1544

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

* fix(web): reveal issuer error and block close on invalid issuer (#1544)

Extend the on-blur deferral so an invalid issuer can't be silently dropped on
modal close (the auto-save flush would otherwise discard it with no feedback).

ClientSettingsModal now intercepts its close (X / Esc / overlay): if the issuer
is invalid it reveals the field error (via the form's revealIssuerError prop,
overriding on-blur gating) and keeps the modal open instead of closing. The
user can fix the URL or clear the field — an empty issuer is valid to leave.
The block lives in the modal (unit-tested) rather than App, so App.tsx stays a
thin flush+close that only runs when the close is allowed; the persist gate is
unchanged. Reveal state resets via the modal's open/close remount key.

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

* fix(core): require a real host in isAbsoluteHttpUrl, not just an http(s) scheme (#1544)

The issuer validation used URL.canParse + an http(s) protocol check, which the
WHATWG parser accepts for bare/degenerate values that aren't actually usable
URLs — e.g. https://foo, https://example, https://. , https://.. all passed.

Tighten the shared rule (used by both the Zod config schema and the form's
inline validation): after parsing and the http(s) scheme check, require the
host to actually look like a host — localhost, an IPv6 literal, or a dotted
domain/IPv4 with at least two non-empty labels. Single-label, bare-dot, and
empty-label hosts are now rejected. Add core tests for the accepted
(dotted/IPv4/IPv6/localhost) and newly-rejected cases.

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

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 11:56:27 -04:00
..
AppControls test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
AppDetailPanel feat(web): render pending sampling/elicitation requests (#1407) (#1411) 2026-06-02 17:52:20 -04:00
AppListItem feat(apps): add AppListItem and AppDetailPanel groups (#1261) (#1273) 2026-05-04 10:28:58 -04:00
ClientSettingsForm fix(web): defer issuer validation to onBlur, block silent-drop on close, require a real host URL (closes #1544) (#1545) 2026-06-29 11:56:27 -04:00
ClientSettingsModal fix(web): defer issuer validation to onBlur, block silent-drop on close, require a real host URL (closes #1544) (#1545) 2026-06-29 11:56:27 -04:00
ConnectionInfoContent test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ConnectionInfoModal feat(web,core): enterprise-managed authorization (EMA) (#1509) (#1512) 2026-06-24 22:15:12 -04:00
ElicitationFormPanel feat(web): render pending sampling/elicitation requests (#1407) (#1411) 2026-06-02 17:52:20 -04:00
ElicitationUrlPanel feat(web): URL elicitation — explicit completion step + error-path (-32042) handling (#1415) (#1436) 2026-06-06 18:25:01 -04:00
ExperimentalFeaturesPanel test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
HistoryControls fix(web): section-header hover outline + clear buttons out of tab order (#1487) (#1488) 2026-06-14 22:27:46 -04:00
HistoryEntry feat(web): History — Pin & Replay, plus two history-status fixes (#1438) (#1441) 2026-06-07 20:21:52 -04:00
HistoryListPanel fix(web): section-header hover outline + clear buttons out of tab order (#1487) (#1488) 2026-06-14 22:27:46 -04:00
ImportServerJsonPanel feat(web,core): import client configs and registry server.json (#1348) (#1511) 2026-06-23 19:52:08 -04:00
InlineElicitationRequest test(coverage): bootstrap vitest unit infra and add tests at 90%+ per file (#1245) (#1269) 2026-05-01 15:15:32 -04:00
InlineSamplingRequest test(coverage): bootstrap vitest unit infra and add tests at 90%+ per file (#1245) (#1269) 2026-05-01 15:15:32 -04:00
LogControls test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
LogStreamPanel fix(web): give History/Network/Logging list scrollbars a gutter, hide when idle (#1474) (#1475) 2026-06-14 10:03:30 -04:00
MessageDirectionFilter fix(web): filter toggle hover as border, not background (#1460) (#1461) 2026-06-13 19:52:27 -04:00
NetworkControls fix(web): section-header hover outline + clear buttons out of tab order (#1487) (#1488) 2026-06-14 22:27:46 -04:00
NetworkEntry feat(web): History — Pin & Replay, plus two history-status fixes (#1438) (#1441) 2026-06-07 20:21:52 -04:00
NetworkStreamPanel fix(web): give History/Network/Logging list scrollbars a gutter, hide when idle (#1474) (#1475) 2026-06-14 10:03:30 -04:00
OutputValidationModal feat(apps): render running MCP Apps end-to-end (#1370) (#1403) 2026-06-01 18:01:44 -04:00
PendingClientRequestModal feat(web): add Mantine clear buttons to text inputs app-wide (#1333) (#1448) 2026-06-12 09:51:05 -04:00
PendingClientRequests test(coverage): bootstrap vitest unit infra and add tests at 90%+ per file (#1245) (#1269) 2026-05-01 15:15:32 -04:00
PromptArgumentsForm test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
PromptControls test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
PromptListItem test(coverage): bootstrap vitest unit infra and add tests at 90%+ per file (#1245) (#1269) 2026-05-01 15:15:32 -04:00
PromptMessagesDisplay Port resource preview UX improvements to PromptsScreen (#1328) (#1331) 2026-05-23 09:20:20 -04:00
ResourceControls fix(web): section-header hover outline + clear buttons out of tab order (#1487) (#1488) 2026-06-14 22:27:46 -04:00
ResourceLink test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ResourceListItem feat(apps): AppsScreen and InspectorView wiring (#1263) (#1286) 2026-05-07 14:18:27 -04:00
ResourcePreviewPanel fix(web): hide resource subscription UI when server lacks subscribe capability (#1479) 2026-06-14 12:54:19 -04:00
ResourceSubscribedItem test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ResourceTemplatePanel test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
RootsTable fix(web): section-header hover outline + clear buttons out of tab order (#1487) (#1488) 2026-06-14 22:27:46 -04:00
SamplingRequestPanel fix(web): section-header hover outline + clear buttons out of tab order (#1487) (#1488) 2026-06-14 22:27:46 -04:00
SchemaForm test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ServerAddMenu feat(web,core): import client configs and registry server.json (#1348) (#1511) 2026-06-23 19:52:08 -04:00
ServerCard fix(web): remove mantine-border-animate, use green highlight border (#1536) 2026-06-27 17:04:25 -04:00
ServerConfigModal test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ServerImportConfigModal test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ServerImportJsonModal feat(web,core): import client configs and registry server.json (#1348) (#1511) 2026-06-23 19:52:08 -04:00
ServerListControls feat(web): catalog vs read-only session launch model + apply --header (#1481, #1483) (#1496) 2026-06-16 14:24:58 -04:00
ServerRemoveConfirmModal test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ServerSettingsForm test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ServerSettingsModal test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
SortableServerCard test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
TaskCard feat(web): History — Pin & Replay, plus two history-status fixes (#1438) (#1441) 2026-06-07 20:21:52 -04:00
TaskControls test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
TaskListPanel feat(web): tool progress toasts + persist all per-screen state across navigation (#1414, #1417) (#1420) 2026-06-03 12:46:37 -04:00
ToolControls test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
ToolDetailPanel fix(web): collapsible tool description in ToolDetailPanel — shown by default (#1381) (#1459) 2026-06-13 19:13:29 -04:00
ToolListItem feat(apps): render tool.icons on ToolListItem and ToolDetailPanel (#1264) (#1293) 2026-05-09 15:45:53 -04:00
ToolResultPanel feat(web): expandable resource_link with read-on-demand (#1449) (#1456) 2026-06-13 17:15:25 -04:00
UrlElicitationErrorModal feat(web): URL elicitation — explicit completion step + error-path (-32042) handling (#1415) (#1436) 2026-06-06 18:25:01 -04:00
ViewHeader test: raise per-file coverage gate to 90 across all clients (closes #1271) (#1532) 2026-06-27 15:26:03 -04:00
historyUtils.test.ts test(coverage): bootstrap vitest unit infra and add tests at 90%+ per file (#1245) (#1269) 2026-05-01 15:15:32 -04:00
historyUtils.ts feat(web): History — Pin & Replay, plus two history-status fixes (#1438) (#1441) 2026-06-07 20:21:52 -04:00