Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

@colonelpanic8@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

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

Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

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

Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

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

Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

@colonelpanic8@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

@colonelpanic8@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

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

Open generated images from tool activity - #4427

Closed
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support
Closed

Open generated images from tool activity#4427
colonelpanic8 wants to merge 5 commits into
pingdotgg:mainfrom
colonelpanic8:t3code/inline-image-support

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Recognize completed imageGeneration activities and expose only their activity ID and filename to the client timeline.
  • Resolve the provider-saved image path server-side and serve it through a signed, exact-file asset capability.
  • Render generated images as compact evidence links in the work log instead of automatically expanding thumbnails.
  • Open selected generated images in a dedicated right-panel tab alongside files, diffs, terminals, and browser previews.
  • Keep generated-image links visible across turn/work-log folding and preserve open image tabs across reloads.
  • Retry the short projection race when an image link is opened immediately after completion, while failing non-transient asset errors immediately.

Why

Generated images already arrive with a provider-saved path in completed tool activity, but that activity was rendered only as a text work-log row. The image should remain viewable after streaming finishes and after a thread is reloaded, without depending on the assistant to repeat a filename.

The interaction follows the Codex desktop pattern: images remain compact, link-like evidence in the transcript and open on demand in the existing right-side workspace. This avoids large automatic thumbnails and avoids requesting image assets until the user selects one.

This builds on the direction explored by #3984, which promotes image filenames explicitly mentioned in assistant Markdown, and #4321, which covers broader workspace/browser media references. Neither PR is included as a dependency here.

UI Changes

  • Completed image-generation activity shows an image icon and filename link under the work-log row.
  • Selecting the link opens or activates a named generated-image tab in the right panel.
  • The panel shows the full image with contained sizing, loading state, and load-error state.
  • Multiple generated images remain separate compact transcript links and separate reusable panel tabs.

Current browser evidence

Captured from the exact current PR head 9939cc9a46e6a33dbbca4961b1c755f9ed6fae21 in the combined package 0.0.29-patched-main-20260724 (integration 4dd4cef4039303179929a1dbdbf0c9b358c076f9). The fixture uses a real provider imageGeneration event in a disposable repository.

Compact work-log linkGenerated-image right panel
Generated-image work-log linkGenerated image opened in the right panel

Opening a generated image in the right panel

MP4 version of the interaction

Checklist

  • pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/chat/MessagesTimeline.test.tsx apps/web/src/components/chat/GeneratedImagePanel.test.tsx apps/server/src/assets/GeneratedImageResolver.test.ts (48 tests)
  • Targeted pnpm exec vp check for all changed server/web files
  • pnpm --filter t3 run typecheck
  • React best-practices review: no asset request before selection, no render-time store subscription, keyboard events isolated from the collapsible parent row
  • Integrated browser verification in an isolated authenticated environment against the exact combined package: real generated-image activity rendered a compact work-log link and opened the signed image in a reusable right-panel tab
  • pnpm --filter @t3tools/web run typecheck currently reports only existing unrelated errors in BranchToolbarBranchSelector.tsx, ModelPickerContent.tsx, PreviewAutomationHosts.tsx, and the atom query hooks

Note

Medium Risk
Touches signed asset issuance for absolute provider paths and WS asset URL creation with retries; path validation and exact basename checks limit exposure, but persisted right-panel state migrates to v9.

Overview
Adds end-to-end support for viewing provider-generated images from completed imageGeneration tool activity without exposing filesystem paths in the transcript.

Server & contracts: Introduces a generated-imageAssetResource (thread + activity id). assetsCreateUrl loads the thread projection, reads savedPath from the completed activity via GeneratedImageResolver, and issues signed, exact-file asset tokens after validating image preview paths. Transient “activity not projected yet” failures retry (~20× / 250ms); other errors fail immediately.

Web UI: Work log entries for completed generations get activity id + filename only (not savedPath). The timeline shows a compact filename link that opens a generated-image right-panel tab (GeneratedImagePanel fetches the signed URL on demand). Timeline folding and work-log grouping keep generated-image rows visible when surrounding tool output is collapsed.

Persistence: Right-panel store v9 adds generated-image surfaces with loadRequestId refresh on reopen.

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

Note

Add generated image viewer to the chat right panel from tool activity

  • Adds a GeneratedImagePanel component that fetches a signed asset URL for a generated-image resource and renders the image, with spinner and error states.
  • Extends AssetAccess to issue and resolve time-limited tokens for generated images, restricting paths to workspace image-preview locations and canonicalizing before serving.
  • Adds GeneratedImageResolver utilities to extract savedPath from completed imageGeneration tool activities and retry the lookup up to 20 times with 250ms spacing.
  • Adds openGeneratedImage to rightPanelStore (bumps persisted state to version 9) and wires a click link in MessagesTimeline work rows to open the panel.
  • Generated-image work entries are excluded from folded turns and contiguous work-log grouping so they stay visible in the timeline.
  • Risk: persisted right-panel state is migrated to version 9; malformed generated-image entries are dropped.

Macroscope summarized 2944f46.

@coderabbitai

coderabbitaiBot commented Jul 24, 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: 4391fcab-e7f3-423f-95a8-612dc993690b

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 Jul 24, 2026
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
Comment threadapps/web/src/components/chat/MessagesTimeline.tsx Outdated
@macroscopeapp

macroscopeappBot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new feature allowing users to open generated images from tool activity, adding new UI components, state management, server-side resolution logic, and API contracts.

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

@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from b923a8c to 3cc953fCompareJuly 24, 2026 05:28
@colonelpanic8colonelpanic8 changed the title Render generated images from tool activityOpen generated images from tool activityJul 24, 2026
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 3cc953f to f20908fCompareJuly 24, 2026 05:30
Comment threadapps/server/src/assets/GeneratedImageResolver.ts
Comment threadapps/web/src/components/chat/GeneratedImagePanel.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from f20908f to c0a41f8CompareJuly 24, 2026 05:41
Comment threadapps/server/src/ws.ts Outdated
Comment threadapps/server/src/ws.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 77a0abd to 2422be0CompareJuly 24, 2026 17:01
Comment threadapps/web/src/rightPanelStore.ts
Comment threadapps/web/src/rightPanelStore.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch 2 times, most recently from 66e1a8c to d2e6495CompareJuly 25, 2026 03:23
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 25, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 26, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from d2e6495 to 2738a59CompareJuly 27, 2026 11:14
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 27, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
… as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 2738a59 to 8d7a2efCompareJuly 28, 2026 02:07

@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 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 8d7a2efb38179f135feba25d1d31f0520f40a03c. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.tsx
@colonelpanic8
colonelpanic8force-pushed the t3code/inline-image-support branch from 14fc851 to 2944f46CompareJuly 28, 2026 02:51
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
…ity as compact evidence links)
# Conflicts:
#	apps/server/src/assets/AssetAccess.test.ts
#	apps/server/src/ws.ts
#	packages/contracts/src/assets.ts
@juliusmarminge

Copy link
Copy Markdown
Member

Closing in favor of #2829 (orchestration V2).

#2829 deletes the V1 orchestration layer this PR builds on — apps/server/src/orchestration/**, provider/Layers/*Adapter.ts and provider/Services/** are removed and replaced by apps/server/src/orchestration-v2/**, with the IPC surface renamed to ORCHESTRATION_V2_WS_METHODS. The files this PR touches either no longer exist or are rewritten, so it can't be rebased — it would need reimplementing against the V2 adapters.

This is not a judgement on the change itself. Several of these are real gaps we still want fixed; the base just moved out from under them.

Once #2829 merges, please rebase onto main, port the change to the V2 equivalent, and reopen (or open a fresh PR). Ping me and I'll prioritise the review.

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.

2 participants

@colonelpanic8@juliusmarminge