Skip to content

fix(web): honor autoOpenPreview when running a project action - #5223

Open
matthias-trip wants to merge 1 commit into
pingdotgg:mainfrom
matthias-trip:fix/action-auto-open-preview
Open

fix(web): honor autoOpenPreview when running a project action#5223
matthias-trip wants to merge 1 commit into
pingdotgg:mainfrom
matthias-trip:fix/action-auto-open-preview

Conversation

@matthias-trip

@matthias-trip matthias-trip commented Aug 2, 2026

Copy link
Copy Markdown

The "Open preview automatically when this action runs" toggle in the Add action modal has had no effect since #2978. That rewrite moved runProjectScript onto the atom command API and dropped the block that opened the preview panel once the command was written to the terminal. #3842 later restored persistence of previewUrl / autoOpenPreview, so the setting saves and reloads correctly — nothing reads it at run time.

Fixes #5221.

What Changed

  • runProjectScript opens the preview again when a script carries both autoOpenPreview and previewUrl, the runtime supports preview, and a thread ref exists — the same four conditions the original code checked.
  • It goes through the existing openUrlInPreview helper rather than re-adding the hand-rolled version: that helper already opens the session, applies the snapshot, remembers the URL, and reveals the tab, and the terminal-link and markdown-link paths use it too.
  • A failed terminal write now returns instead of falling through, so a script that never started cannot open a preview.

Why

The setting is currently documented behavior that does nothing. Both schemas promise it — "automatically open the preview panel pointed at previewUrl the moment this script starts" (orchestration.ts, and the same wording in t3ProjectFile.ts) — and the modal's own helper text promises it for the Preview URL field. Since #4317 put both fields in the shared t3.json schema, a team can commit autoOpenPreview to a repo and get nothing.

Two details worth calling out, since they go slightly beyond reverting:

The early return on write failure. Previously that branch set the thread error and then hit the end of the function anyway, so returning was equivalent — it only starts to matter once something is appended after it. Making it explicit keeps "the script never started" from reaching the auto-open, and matches how the openTerminal failure directly above is handled.

The preview result is awaited and ignored. Preview failures surface in the panel itself, and by that point the script is running — reporting one as Failed to run script would be wrong. This mirrors the original code's catch {} with the comment that said the same thing.

UI Changes

No visual or layout change: the preview panel, its chrome and its empty state are all untouched. What changes is when an existing panel opens — with the toggle on, running the action reveals the preview at the configured URL instead of leaving the panel closed. I don't have a recording to attach; happy to add one if you'd like to see the interaction.

Validation

  • vp run --filter @t3tools/web typecheck
  • vp lint apps/web/src/components/ChatView.tsx
  • vp run --filter @t3tools/web test — 1765 passed (201 files)
  • Built a local macOS arm64 desktop artifact and confirmed the restored call is present in the packaged app.asar

No regression test. runProjectScript is a useCallback inside ChatView with no existing harness, and the only extraction I could make honestly (a shouldAutoOpenPreview predicate) would still pass with the call site deleted again — which is the failure mode here. Building a ChatView harness for it seemed well outside "small and focused"; glad to add one if you'd rather have it.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no visual change; see UI Changes above
  • I included a video for animation/interaction changes — not attached; say the word and I'll record the toggle in action

🤖 Generated with Claude Code


Note

Low Risk
Single-path UI behavior fix in ChatView with no auth or data-model changes; preview errors are intentionally ignored after the script starts.

Overview
Restores auto-open preview when a project action runs with Open preview automatically enabled and a Preview URL configured — behavior that stopped working after runProjectScript moved to the atom command API.

After a successful terminal write in runProjectScript, the flow calls openUrlInPreview (same helper as markdown/terminal links) when autoOpenPreview, previewUrl, preview runtime support, and a thread ref are all present. Preview open failures are awaited but not surfaced as script failures.

A failed terminal write now returns immediately so a script that never started cannot trigger preview open; write-failure handling is structured explicitly instead of only setting thread error and falling through.

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

Note

Honor autoOpenPreview when running a project action in ChatView

  • When a script has autoOpenPreview and a previewUrl set, the script-run handler in ChatView.tsx now calls openUrlInPreview after successfully writing the command to the terminal (in supported runtimes with an active thread).
  • Fixes a bug where a terminal write failure did not exit early, potentially allowing the preview-open logic to run incorrectly.

Macroscope summarized 742c1ef.

The "Open preview automatically when this action runs" toggle has had no
effect since pingdotgg#2978: that rewrite moved runProjectScript onto the atom
command API and dropped the block that opened the preview panel after the
command was written to the terminal. pingdotgg#3842 later restored persistence of
previewUrl/autoOpenPreview, so the setting saves and reloads correctly —
it simply is not read at run time by anything.

Restore the auto-open through the existing openUrlInPreview helper, which
already does what the deleted code did by hand (open the session, apply
the snapshot, remember the URL, reveal the tab in the right panel).

A failed terminal write now returns instead of falling through, so a
script that never started cannot open a preview. Preview failures stay
silent for the caller: they are surfaced by the panel itself, and the
script is already running, so they are not the script's failure.

Fixes pingdotgg#5221

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 2, 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: 3ef3d6a7-985e-4ea3-afd2-9a584475d034

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

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-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 2, 2026

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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

Fix All in Cursor

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

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

Reviewed by Cursor Bugbot for commit 742c1ef. Configure here.

threadRef: activeThreadRef,
url: script.previewUrl,
openPreview,
});

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.

Preview URL skips env rewrite

Medium Severity

Auto-open passes the raw script.previewUrl into openUrlInPreview, so loopback URLs are never rewritten for the thread environment. The same configured script URLs go through resolveDiscoveredServerUrl when opened from the preview empty state, so remote and 0.0.0.0 targets open the wrong host here while manual open works.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 742c1ef. Configure here.

@macroscopeapp

macroscopeapp Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR adds new runtime behavior for auto-opening previews, and there's an unresolved medium-severity review comment about preview URLs not being properly rewritten for the thread environment (raw URL passed instead of going through resolveDiscoveredServerUrl).

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: "Open preview automatically when this action runs" has no effect

1 participant