The credential input fields on the proposal/consent modal (e.g. the
DataForSEO API login/email and password for HTTP Basic Auth) were
rendered with type="password", masking the entered value as dots. Per
team decision, these fields on the proposal modal should render as plain
text instead. Switch the non-OAuth credential input to type="text".
The credential value continues to live only in React state and is sent
on approve exactly as before; autoComplete stays "off", so nothing is
newly persisted in the browser.
Refs: AGE2-72
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQ2u1cmRonWhEEXF9VyjJ4
Requested by Saifur Rahman · Slack thread
Summary
On the proposal/consent modal (the "Connect to …" prompt shown when an agent requests credentials for a service), the credential entry fields were masked with dots. For an HTTP Basic Auth service like DataForSEO, this meant the API login field — which holds an email address, not a secret — was rendered as password dots, making it awkward to review and confirm.
Per the team decision, the fields on this modal should no longer be masked and should render as plain, visible text like the other fields on the page.
Before: the "DATAFORSEO API LOGIN (EMAIL ADDRESS…)" field (and the password field) rendered the typed value as dots.
After: these fields render the value in plain text, matching the rest of the proposal modal.
How
The non-OAuth credential input in the proposal modal is a single
<Input>inweb/src/pages/vault/ProposalsTab.tsx(insideProposalModal, the block that renders each requested credential slot). It was hard-coded totype="password"; the fix changes it totype="text". This is the only input that rendered the basic-auth login/password fields, so no reveal toggle or sharedsecret/maskedflag was involved and no masking behavior elsewhere in the app is affected.The change is purely visual. The entered value continues to live only in React component state (
credentialValues) and is sent to the approve endpoint exactly as before — it is not written tolocalStorage/sessionStorageor any persisted store.autoComplete="off"is kept on the input, so the browser will not offer to save or autofill the value; nothing is newly persisted in plaintext as a result of this change.Refs: AGE2-72
Type of change
Test plan
cd web && npm ci && npm run build(tsc + vite build) passes cleanlySecurity checklist
Generated by Claude Code