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