Repository navigation
Conversation
|
@C0mberry is attempting to deploy a commit to the Solana Foundation Team on Vercel. A member of the Team first needs to authorize it. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
| setStatus({ | ||
| ms: Math.round(performance.now() - started), | ||
| state: probeState(response.status), | ||
| state: response.status === 503 ? 'disabled' : 'ready', |
There was a problem hiding this comment.
Restricted endpoints appear ready
If a deployment requires an MCP access key, GET /mcp returns 401; a blocked IP gets 403. This probe labels both responses ready, while the page says no key is needed and offers only keyless configurations. Those configurations cannot connect. Preserve the restricted and blocked states and their setup guidance.
Knowledge Base Used: MCP service and telemetry
| setStatus({ | ||
| ms: Math.round(performance.now() - started), | ||
| state: probeState(response.status), | ||
| state: response.status === 503 ? 'disabled' : 'ready', |
There was a problem hiding this comment.
If MCP handler construction or processing fails, GET /mcp can return 500. The new probe maps that response to ready, so visitors see a green “Ready” indicator for a service that cannot handle requests. Server errors need to be shown as unavailable.
Knowledge Base Used: MCP service and telemetry
| onClick={() => setExpanded(value => !value)} | ||
| className={cn( | ||
| 'flex w-full cursor-pointer items-center justify-center border-0 border-t border-solid border-dark-border', | ||
| 'bg-transparent py-3 font-mono text-xs uppercase tracking-widest text-heavy-metal-300 hover:text-dark-foreground sm:hidden', |
There was a problem hiding this comment.
Tablet instructions cannot expand
At widths from roughly 577 to 767px, isMobile limits the agent-instructions snippet to 168px, but sm:hidden hides its “Show more” button. Readers at those widths cannot view the rest of the instructions. The content clamp and its control need matching breakpoints.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| <CodeCard | ||
| code={active.snippet(origin)} | ||
| header={<CardTabs items={SETUP_CLIENTS} onChange={setClient} value={client} />} | ||
| /> | ||
| <p className="m-0 flex w-full items-start gap-2.5 text-sm leading-5 text-heavy-metal-300"> | ||
| <Check size={14} aria-hidden className="mt-1 shrink-0 text-dark-accent" /> | ||
| {active.verify} |
There was a problem hiding this comment.
Setup destinations are missing
The setup card displays the snippet and verification text but no longer displays active.where. That field contains the config-file paths for Cursor and Windsurf and the UI steps for VS Code. Visitors receive a configuration or URL without being told where to put it, leaving those setup instructions incomplete.
Knowledge Base Used: MCP service and telemetry
| ['metadataPointer', 'points at the mint itself', 'authority: null — nobody'], | ||
| ['tokenMetadata', 'name, symbol, uri; no extra fields', 'updateAuthority: null — nobody'], | ||
| ], | ||
| }, | ||
| { | ||
| kind: 'text', | ||
| text: 'Mint and freeze authorities are null too, and the extensions that carry real issuer power — permanentDelegate, transferHook, transferFeeConfig, confidential transfers — are simply absent.', |
There was a problem hiding this comment.
The Token-2022 answer says nobody can change the metadata and lists absent issuer powers, but no longer explains that control of the referenced off-chain metadata domain can still change the displayed name, image, and description. Restoring that distinction would keep readers from mistaking renounced on-chain authority for immutable presentation metadata.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| const handleReset = () => { | ||
| pendingBottom.current = boxRef.current?.getBoundingClientRect().bottom; | ||
| setPicked(undefined); | ||
| }; |
There was a problem hiding this comment.
Activating “Ask other question” removes the focused button and replaces its answer view with the picker, but focus is not moved to a new control. Keyboard users lose their place and must navigate back to the question buttons. Restore focus to the picker or its first choice after reset.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| const { onKeyDown, tabRefs } = useTablistKeyboard<HTMLAnchorElement>( | ||
| SECTIONS.length, | ||
| SECTIONS.findIndex(section => section.id === active), | ||
| index => scrollToSection(SECTIONS[index].id), |
There was a problem hiding this comment.
Arrow navigation calculates the next section from the scroll-spy selection, which updates only as smooth scrolling progresses. Two quick ArrowRight presses can therefore target the same section twice instead of advancing twice. Use the focused tab as the starting point, or update selection when navigation begins.
| const seed = () => { | ||
| const cap = restingCap(resolveCtaField(phone ? 'base' : desktopScope).density); | ||
| while (dots.length < cap) spawn(true); | ||
| }; | ||
| seed(); |
There was a problem hiding this comment.
Both full-width CTAs seed hundreds to thousands of dots as soon as the page mounts, including the off-screen closing CTA. When visible, each also draws and processes its dots every animation frame. This adds initial work and risks scroll jank on constrained devices; defer seeding until visible and reduce the per-frame workload.
…r/1353/feat/hoo-1564-update-design-for-mcp-page # Conflicts: # app/shared/ui/navigation-tabs/ui/BaseNavigationTabs.tsx
| window.addEventListener('wheel', takeOver, { passive: true }); | ||
| window.addEventListener('touchmove', takeOver, { passive: true }); | ||
| window.addEventListener('keydown', onKey); |
There was a problem hiding this comment.
While an example answer is appearing, clicking a section tab or dragging the scrollbar does not stop useStickToBottom. It only stops for wheel, touch, and certain key events. Its next frame scrolls back toward the answer, fighting the reader's navigation.
Stop following when the reader uses those other controls, while distinguishing the hook's own scrolling.
| <div className="flex w-full items-stretch gap-2.5 border-0 border-b border-solid border-dark-border px-5"> | ||
| <CardTabs items={TOOL_VIEWS} onChange={setView} value={view} /> | ||
| </div> | ||
| <div className="w-full">{view === 'request' ? request : response}</div> |
There was a problem hiding this comment.
The replacement for the Radix tabs gives the buttons role="tab", but the content in Tools is a plain, unfocusable div. No IDs link the tabs to their content. Screen readers lose the named tab panel, and pressing Tab skips the static request or response content.
Give each panel role="tabpanel", a focus target, and matching aria-controls and aria-labelledby links.
| const toThinking = setTimeout(() => setPhase('thinking'), SENDING_MS); | ||
| const toTyping = setTimeout(() => setPhase('typing'), SENDING_MS + THINKING_MS); | ||
| return () => { | ||
| clearTimeout(toThinking); | ||
| clearTimeout(toTyping); | ||
| }; | ||
| }, [reduced]); |
There was a problem hiding this comment.
Turning reduced motion off while an answer is open schedules thinking and typing again, even if the answer is complete. The typing loop then starts from zero, hiding and replaying the answer.
Keep completed answers in done; changing the motion preference should not restart them.
9b96adf
Description
Type of change
Screenshots
Testing
mcp page
Related Issues
HOO-1564
Checklist
pnpm test,pnpm lint,pnpm typecheck)build:infoscript to update build information