diff --git a/apps/desktop/src/main/lib/agent-setup/shell-wrappers.test.ts b/apps/desktop/src/main/lib/agent-setup/shell-wrappers.test.ts
index 3baa8ab0d64..ef7be4dfb2c 100644
--- a/apps/desktop/src/main/lib/agent-setup/shell-wrappers.test.ts
+++ b/apps/desktop/src/main/lib/agent-setup/shell-wrappers.test.ts
@@ -839,7 +839,7 @@ export SUPERSET_WORKSPACE_PATH="/wrong/path"
expect(args).toEqual([
"-l",
"--init-command",
- `set -l _superset_bin "${TEST_BIN_DIR}"; contains -- "$_superset_bin" $PATH; or set -gx PATH "$_superset_bin" $PATH; function _superset_shell_ready --on-event fish_prompt; printf '\\033]777;superset-shell-ready\\007'; functions -e _superset_shell_ready; end`,
+ `set -l _superset_bin "${TEST_BIN_DIR}"; contains -- "$_superset_bin" $PATH; or set -gx PATH "$_superset_bin" $PATH; function _superset_shell_ready --on-event fish_prompt; printf '\\033]777;superset-shell-ready\\007'; functions -e _superset_shell_ready; end; function _superset_prompt_marker --on-event fish_prompt; printf '\\033]777;superset-prompt\\007'; end`,
]);
});
@@ -853,7 +853,7 @@ export SUPERSET_WORKSPACE_PATH="/wrong/path"
expect(args).toEqual([
"-l",
"--init-command",
- `set -l _superset_bin "/tmp/with space/quote\\"buck\\$slash\\\\bin"; contains -- "$_superset_bin" $PATH; or set -gx PATH "$_superset_bin" $PATH; function _superset_shell_ready --on-event fish_prompt; printf '\\033]777;superset-shell-ready\\007'; functions -e _superset_shell_ready; end`,
+ `set -l _superset_bin "/tmp/with space/quote\\"buck\\$slash\\\\bin"; contains -- "$_superset_bin" $PATH; or set -gx PATH "$_superset_bin" $PATH; function _superset_shell_ready --on-event fish_prompt; printf '\\033]777;superset-shell-ready\\007'; functions -e _superset_shell_ready; end; function _superset_prompt_marker --on-event fish_prompt; printf '\\033]777;superset-prompt\\007'; end`,
]);
});
});
diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx
index f55c819f954..bfae3b3cd4b 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx
@@ -8,7 +8,7 @@ import {
import { Skeleton } from "@superset/ui/skeleton";
import { toast } from "@superset/ui/sonner";
import { cn } from "@superset/ui/utils";
-import { useEffect, useRef, useState } from "react";
+import { useCallback, useEffect, useRef, useState } from "react";
import {
LuArrowUpRight,
LuCheck,
@@ -24,6 +24,8 @@ import remarkGfm from "remark-gfm";
import { remarkAlert } from "remark-github-blockquote-alert";
import { electronTrpc } from "renderer/lib/electron-trpc";
import { PRIcon } from "renderer/screens/main/components/PRIcon";
+import { useWorkspaceId } from "renderer/screens/main/components/WorkspaceView/WorkspaceIdContext";
+import { useTabsStore } from "renderer/stores/tabs";
import { CheckSteps } from "./components/CheckSteps";
import {
ALL_COMMENTS_COPY_ACTION_KEY,
@@ -57,6 +59,19 @@ export function ReviewPanel({
isCommentsLoading = false,
onOpenFile,
}: ReviewPanelProps) {
+ const resolvedWorkspaceId = useWorkspaceId();
+ const addBrowserTab = useTabsStore((s) => s.addBrowserTab);
+ const handleOpenUrl = useCallback(
+ (url: string, e: React.MouseEvent) => {
+ e.preventDefault();
+ e.stopPropagation();
+ if (resolvedWorkspaceId) {
+ addBrowserTab(resolvedWorkspaceId, url);
+ }
+ },
+ [resolvedWorkspaceId, addBrowserTab],
+ );
+
const [checksOpen, setChecksOpen] = useState(true);
const [commentsOpen, setCommentsOpen] = useState(true);
const [resolvedCommentsGroupOpen, setResolvedCommentsGroupOpen] =
@@ -271,6 +286,20 @@ export function ReviewPanel({