Skip to content

fix(web): open agent images in expanded preview - #8807

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/fix-agent-image-preview
Aug 30, 2026
Merged

fix(web): open agent images in expanded preview#8807
maria-rcks merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/fix-agent-image-preview

Conversation

@maria-rcks

@maria-rcks maria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Agent-authored markdown images were inert while user attachments already opened the expanded preview. This routes both direct and signed workspace image sources through the same dialog, with mouse and keyboard activation. Verified with 62 focused web tests, targeted lint and typecheck, plus real-client checks at desktop and narrow viewport sizes. Built with gpt-5.6-sol through the Codex harness.

Before:

Agent images in the message

After:

Agent workspace image in the expanded preview


Note

Low Risk
UI-only interaction wiring behind an optional callback; link-wrapped images are explicitly excluded to avoid breaking navigation.

Overview
Agent-authored markdown images can now open the same expanded image preview as user attachments, instead of staying non-interactive in assistant messages.

ChatMarkdown gains an optional onImageExpand callback. A shared expandableMarkdownImageProps helper wires click, Enter, and Space with button semantics (cursor-zoom-in, ARIA label) for both direct URL images and workspace file images loaded via signed asset URLs in ChatMarkdownWorkspaceImage.

MarkdownLinkContext marks link descendants so images inside anchors do not steal the link’s navigation—expand is disabled when an image is nested in a link. If onImageExpand is omitted, image rendering is unchanged.

The messages timeline passes ctx.onImageExpand into assistant ChatMarkdown so agent message images use the existing preview dialog.

Reviewed by Cursor Bugbot for commit 9b033f3. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add expanded image preview support for ChatMarkdown images

  • Adds an onImageExpand callback to ChatMarkdown and ChatMarkdownWorkspaceImage to trigger an expanded preview for markdown images.
  • Images become interactive via click or Enter/Space keypress using the new expandableMarkdownImageProps utility, adding cursor-zoom-in styling.
  • Uses a new MarkdownLinkContext to disable expansion for images nested inside markdown links.
  • Threads the expansion handler from MessagesTimeline through AssistantTimelineRow.
  • Behavioral Change: Images with an onImageExpand handler now render with role=button and tabIndex=0.

Macroscope summarized 9b033f3.

@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7d53af26-d582-46ae-ab8b-f5f026585c4e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Aug 30, 2026
Comment thread apps/web/src/components/ChatMarkdown.tsx Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit e780d2a. Configure here.

Comment thread apps/web/src/components/ChatMarkdown.tsx
@maria-rcks
maria-rcks force-pushed the t3code/fix-agent-image-preview branch from e780d2a to 8b615c7 Compare August 30, 2026 21:29

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: markdown images inside links get an interactive affordance that never activates. Details inline.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/ChatMarkdown.tsx
@maria-rcks
maria-rcks force-pushed the t3code/fix-agent-image-preview branch from 8b615c7 to 9b033f3 Compare August 30, 2026 21:35

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the follow-up: the linked-image affordance I flagged earlier is now correctly suppressed via MarkdownLinkContext, so [![alt](img)](url) no longer renders a tab stop / role="button" / cursor-zoom-in on the nested image. One remaining gate: the new interaction contract is untested.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeapp Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 9b033f3

Macroscope's review found this PR approvable — This is a localized web UI fix that wires assistant-rendered images into the existing expanded-preview flow, including workspace images and keyboard activation, without changing unrelated markdown behavior or product defaults. The remaining test-coverage concern is maintainability-oriented and does not indicate substantial runtime risk.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks merged commit 8f525af into pingdotgg:main Aug 30, 2026
27 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614


**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790

## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790

**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant