Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat(web): preview workspace images from chat and diffs by StiensWout · Pull Request #3259 · pingdotgg/t3code · GitHub
Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(web): preview workspace images from chat and diffs by StiensWout · Pull Request #3259 · pingdotgg/t3code · GitHub
Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(web): preview workspace images from chat and diffs by StiensWout · Pull Request #3259 · pingdotgg/t3code · GitHub
Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' feat(web): preview workspace images from chat and diffs by StiensWout · Pull Request #3259 · pingdotgg/t3code · GitHub
Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(web): preview workspace images from chat and diffs by StiensWout · Pull Request #3259 · pingdotgg/t3code · GitHub
Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(web): preview workspace images from chat and diffs by StiensWout · Pull Request #3259 · pingdotgg/t3code · GitHub
Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); feat(web): preview workspace images from chat and diffs by StiensWout · Pull Request #3259 · pingdotgg/t3code · GitHub
Skip to content

feat(web): preview workspace images from chat and diffs - #3259

Closed
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview
Closed

feat(web): preview workspace images from chat and diffs#3259
StiensWout wants to merge 12 commits into
pingdotgg:mainfrom
StiensWout:fix/workspace-image-preview

Conversation

@StiensWout

@StiensWoutStiensWout commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • route workspace image files into the existing integrated preview flow
  • expose image preview actions from file links and file surfaces
  • keep non-image file opening behavior unchanged

Root cause

The asset server already supports signed workspace image preview URLs, but the web client only treated HTML and PDF paths as previewable entry files.

Impact

Screenshots and other workspace image files can be viewed in-app from file explorer, markdown links, and diff file headers. If preview opening fails, the UI falls back to the existing file surface behavior.

Validation

  • vp test packages/shared/src/filePreview.test.ts apps/web/src/diffFileActions.test.ts
  • vp check
  • vp run typecheck
  • python3 /home/t3code/.codex/skills/.system/skill-creator/scripts/quick_validate.py /home/t3code/.codex/skills/t3-contribute

vp check reports the repository's existing unrelated warnings and no errors.

Closes#3140

Note

Add image preview support from chat and diffs with cancellation and structured errors

  • Image files opened from chat markdown links, the diff panel, and the files surface now launch in the integrated browser preview when a runtime and base URL are available, with graceful fallback to the file panel on interruption or failure.
  • Preview requests are tracked per thread; concurrent requests discard stale responses using an AbortSignal and a beginPreviewRequest guard in openFileInPreview.ts.
  • URL construction failures now return a structured BrowserPreviewAssetUrlInvalidError (with lengths and parse cause) instead of throwing a generic error, avoiding full URL leakage.
  • New typed errors (BrowserPreviewThreadContextUnavailableError, BrowserPreviewEnvironmentDisconnectedError) let callers distinguish failure modes in ChatMarkdown.tsx and ChatView.tsx.
  • Behavioral Change: onOpenInBrowser in MarkdownFileLinkProps now requires an AbortSignal argument; callers that pass a signal may receive an aborted result, which is treated as a fallback cue rather than a hard failure.

Macroscope summarized 17612cc.


Note

Medium Risk
Touches preview state, right-panel surfaces, and asset URL resolution across chat, diffs, and file UI; race/cancellation logic could affect which tab wins if mis-ordered, but failures degrade to prior open behavior.

Overview
Extends integrated browser preview beyond HTML/PDF to workspace image files (png, jpeg, gif, svg, webp, avif) when opening from the file explorer, markdown file links, and diff file headers. Preview eligibility now uses shared @t3tools/shared/filePreview helpers instead of a local HTML/PDF regex.

openFileInPreview / openUrlInPreview gain optional AbortSignal and per-thread request sequencing so an older in-flight preview cannot overwrite a newer one; invalid signed asset URLs surface as BrowserPreviewAssetUrlInvalidError with lengths/metadata only (no raw URLs in errors).

UI callers abort on navigation/thread changes. On preview failure or interruption, chat links and file/diff opens show a warning toast and fall back to the existing file surface or diff primary action instead of stopping on a hard error. Markdown browser-open errors are split into disconnected vs missing thread context; FilePreviewPanel copy shifts from “browser” to “preview” for the broader file-type button.

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

@coderabbitai

coderabbitaiBot commented Jun 20, 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

Run ID: 76553957-4cc2-47e3-b4af-48831bcfc7e5

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jun 20, 2026
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 10:00
Comment threadapps/web/src/components/ChatMarkdown.tsx
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature enabling image previews from chat and diff panels, adding new user-facing behavior across multiple components. New features with cross-cutting UI changes warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@StiensWout
StiensWout marked this pull request as draft June 20, 2026 10:12
Comment threadapps/web/src/components/ChatMarkdown.tsx Outdated
@StiensWout
StiensWout marked this pull request as ready for review June 20, 2026 16:23
@StiensWout
StiensWoutforce-pushed the fix/workspace-image-preview branch from e27816d to 7909197CompareJune 20, 2026 16:25
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 7909197 to 01b1b93CompareJune 21, 2026 00:18
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 01b1b93 to 9214cdfCompareJune 21, 2026 00:26
Comment threadapps/web/src/components/ChatMarkdown.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 4 times, most recently from e6a4567 to 7ef6bc2CompareJune 21, 2026 01:11
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from b74fe0b to 1824661CompareJune 21, 2026 01:39
Comment threadapps/web/src/components/ChatView.tsx
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch 2 times, most recently from 3c55746 to 48e11f6CompareJune 21, 2026 02:02
StiensWoutand others added 5 commits June 20, 2026 19:33
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
juliusmarmingeand others added 3 commits June 20, 2026 19:33
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the fix/workspace-image-preview branch from 48e11f6 to 881936dCompareJune 21, 2026 02:34
Comment threadapps/web/src/components/ChatMarkdown.tsx
Co-authored-by: codex <codex@users.noreply.github.com>
Comment threadapps/web/src/components/ChatMarkdown.tsx
@StiensWoutStiensWout changed the title [codex] Preview workspace image filesfeat(web): preview workspace images from chat and diffsJul 21, 2026

@cursorcursorBot 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 2 potential issues.

Fix All in Cursor

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

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0fa2ec2. Configure here.

Comment threadapps/web/src/components/ChatView.tsx
Comment threadapps/web/src/browser/openFileInPreview.test.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Image preview/render

2 participants

@StiensWout@juliusmarminge