authorgravatar for maria@kuuro.netmaria <maria@kuuro.net> 2026-10-04 08:55:44-03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-10-04 08:55:44-03:00
log2dfef8779e046dc9b3fe87668022f4ed0907adbb
treea382acb2e77353da16d5bc8e4bea3178b0bf9191
parent836098543c6ecdf66734596df0ea3a8f6513f2a6
signature Signed by PGP key B5690EEEBB952194

fix(web): restore project action preview opening (#15490)


1 files changed, 29 insertions(+), 7 deletions(-)

apps/web/src/components/ChatView.tsx+29-7
...@@ -252,7 +252,8 @@ import {...@@ -252,7 +252,8 @@ import {
252 setActivePreviewTab,252 setActivePreviewTab,
253 useThreadPreviewState,253 useThreadPreviewState,
254} from "../previewStateStore";254} from "../previewStateStore";
255import { BrowserSettingsReadError } from "../browser/openFileInPreview";255import { BrowserSettingsReadError, openUrlInPreview } from "../browser/openFileInPreview";
256import { resolveDiscoveredServerUrl } from "../browser/browserTargetResolver";
256import { previewRuntimeTabId } from "../browser/previewRuntimeTabId";257import { previewRuntimeTabId } from "../browser/previewRuntimeTabId";
257import { addBrowserSurface } from "./preview/addBrowserSurface";258import { addBrowserSurface } from "./preview/addBrowserSurface";
258import { closePreviewSession } from "./preview/closePreviewSession";259import { closePreviewSession } from "./preview/closePreviewSession";
...@@ -4892,12 +4893,32 @@ export default function ChatView(props: ChatViewProps) {...@@ -4892,12 +4893,32 @@ export default function ChatView(props: ChatViewProps) {
4892 data: `${script.command}\r`,4893 data: `${script.command}\r`,
4893 },4894 },
4894 });4895 });
4895 if (writeResult._tag === "Failure" && !isAtomCommandInterrupted(writeResult)) {4896 if (writeResult._tag === "Failure") {
4896 const error = squashAtomCommandFailure(writeResult);4897 if (!isAtomCommandInterrupted(writeResult)) {
4897 setThreadError(4898 const error = squashAtomCommandFailure(writeResult);
4898 activeThreadId,4899 setThreadError(
4899 error instanceof Error ? error.message : `Failed to run script "${script.name}".`,4900 activeThreadId,
4900 );4901 error instanceof Error ? error.message : `Failed to run script "${script.name}".`,
4902 );
4903 }
4904 return;
4905 }
4906 if (script.autoOpenPreview && script.previewUrl && isPreviewSupportedInRuntime()) {
4907 const previewResult = await openUrlInPreview({
4908 threadRef: activeThreadRef,
4909 url: resolveDiscoveredServerUrl(activeThreadRef.environmentId, script.previewUrl),
4910 openPreview,
4911 });
4912 if (previewResult._tag === "Failure" && !isAtomCommandInterrupted(previewResult)) {
4913 const error = squashAtomCommandFailure(previewResult);
4914 toastManager.add(
4915 stackedThreadToast({
4916 type: "error",
4917 title: "Could not open preview",
4918 description: error instanceof Error ? error.message : "An unexpected error occurred.",
4919 }),
4920 );
4921 }
4901 }4922 }
4902 },4923 },
4903 [4924 [
...@@ -4913,6 +4934,7 @@ export default function ChatView(props: ChatViewProps) {...@@ -4913,6 +4934,7 @@ export default function ChatView(props: ChatViewProps) {
4913 setLastInvokedScriptByProjectId,4934 setLastInvokedScriptByProjectId,
4914 environmentId,4935 environmentId,
4915 openTerminal,4936 openTerminal,
4937 openPreview,
4916 activeKnownTerminalIds,4938 activeKnownTerminalIds,
4917 allocatableActiveTerminalIds,4939 allocatableActiveTerminalIds,
4918 runningTerminalIds,4940 runningTerminalIds,