Skip to content

Port resource preview UX improvements to PromptsScreen #1328

@cliffhall

Description

@cliffhall

Background

#1326 wired up the resources subscription hook (#1325) and on the way reshaped the resource preview UX. The Prompts screen still has the older shape: the prompt argument form sits stretched across the main area, stays mounted after a prompt is fetched, doesn't scroll its result body, and doesn't fire `completion/complete` against prompt arguments. Bringing it up to parity is the next obvious follow-up.

Scope

Mirror the resource-side fixes onto `PromptsScreen` / `PromptArgumentsPanel` / `PromptResultPanel` (or whatever the equivalents are named).

  • Argument form width cap. Apply `maw="40%"` (or equivalent) to the prompt-argument form pane so it doesn't stretch the full viewport.
  • Auto-hide form after fetch. When the user clicks "Get Prompt", drop the selected prompt from the form pane so the result is shown alone — same pattern as `handleReadResource` clearing `selectedTemplateUri` in `ResourcesScreen`.
  • Auto-fetch on sidebar selection. Clicking a prompt in the sidebar should call `onGetPrompt` for prompts with no arguments (or that have all defaults filled). For prompts with required args, render the form. The current "Click to fetch this prompt" placeholder should be unreachable / removed.
  • Sized-to-content preview with viewport cap. Use the same `PreviewCard` (variant="preview") + `PreviewPane mah={SCROLL_MAX_HEIGHT}` pattern: when the prompt result fits, the card hugs its content; when it doesn't, an inner `ScrollArea` (`flex: 0 1 auto`, `mih: 0`) takes over and the header / meta / footer rows stay pinned via `flex: 0 0 auto`.
  • Markdown rendering for text content. `ContentViewer` already handles `mimeType: text/markdown`; the prompt result panel just needs to pass `mimeType` through per content item.
  • Live `completion/complete` on argument inputs. When `capabilities.completions` is set, swap each prompt-argument `TextInput` for Mantine `Autocomplete` and debounce (300ms) keystrokes into `inspectorClient.getCompletions({ type: 'ref/prompt', name }, argName, value, context)`, surfacing returned values as dropdown options. Mirror the per-arg `AbortController` + per-arg timer pattern from `ResourceTemplatePanel`. The protocol surface is already there (`InspectorClientProtocol.getCompletions`).

Acceptance criteria

  • Selecting a prompt in the sidebar with no required arguments triggers `onGetPrompt` immediately.
  • For prompts with arguments, the form pane is ≤ 40% wide and disappears after the user clicks Get Prompt.
  • The result panel header (prompt name + meta) stays at the top, the footer stays at the bottom, and the messages scroll in the middle when long.
  • Markdown content in prompt messages renders as markdown (not as preformatted code).
  • When the connected server advertises `completions`, each prompt argument input is an autocomplete that fetches and shows server-side suggestions as the user types.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    v2Issues and PRs for v2

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions