From 2039c90c06f8431cc32dca1adc716eada02af057 Mon Sep 17 00:00:00 2001 From: Luke Parker <10430890+Hona@users.noreply.github.com> Date: Fri, 31 Jul 2026 18:02:11 +1000 Subject: [PATCH] fix(desktop): open external links in system browser (#39820) --- bun.lock | 28 +++++------- .../components/dialog-connect-provider.tsx | 22 +++++---- .../src/components/dialog-custom-provider.tsx | 6 +-- .../src/components/dialog-usage-exceeded.tsx | 2 +- packages/app/src/components/external-link.tsx | 21 +++++++++ packages/app/src/components/link.tsx | 26 ----------- .../app/src/components/settings-general.tsx | 4 +- .../src/components/settings-v2/general.tsx | 6 +-- packages/app/src/components/terminal.tsx | 6 ++- .../app/src/components/windows-app-menu.tsx | 2 +- packages/app/src/context/notification.tsx | 13 ++++-- packages/app/src/context/platform.tsx | 20 +++------ packages/app/src/entry.tsx | 25 ++++------- packages/app/src/index.ts | 1 - packages/app/src/pages/directory-layout.tsx | 1 + packages/app/src/pages/error.tsx | 2 +- .../pages/home/home-projects-controller.tsx | 2 +- packages/app/src/pages/layout-new.tsx | 4 -- packages/app/src/pages/layout.tsx | 8 ++-- .../session/timeline/message-timeline.tsx | 2 +- .../app/src/utils/notification-click.test.ts | 27 ----------- packages/app/src/utils/notification-click.ts | 13 ------ packages/desktop/package.json | 3 +- .../desktop/src/main/external-url.test.ts | 29 ++++++++++++ packages/desktop/src/main/external-url.ts | 20 +++++++++ packages/desktop/src/main/index.ts | 2 - packages/desktop/src/main/ipc.ts | 28 +++++++----- packages/desktop/src/main/markdown.ts | 16 ------- packages/desktop/src/main/menu.ts | 5 ++- packages/desktop/src/main/windows.ts | 38 +++++++++++++++- packages/desktop/src/preload/index.ts | 6 +-- packages/desktop/src/preload/types.ts | 6 +-- packages/desktop/src/renderer/index.tsx | 45 +++++-------------- packages/session-ui/package.json | 1 - .../src/components/message-part.tsx | 44 +++++++----------- .../src/components/tool-error-card.tsx | 7 ++- packages/session-ui/src/context/data.tsx | 4 ++ .../.storybook/mocks/app/context/platform.ts | 5 +-- 38 files changed, 242 insertions(+), 258 deletions(-) create mode 100644 packages/app/src/components/external-link.tsx delete mode 100644 packages/app/src/components/link.tsx delete mode 100644 packages/app/src/utils/notification-click.test.ts delete mode 100644 packages/app/src/utils/notification-click.ts create mode 100644 packages/desktop/src/main/external-url.test.ts create mode 100644 packages/desktop/src/main/external-url.ts delete mode 100644 packages/desktop/src/main/markdown.ts diff --git a/bun.lock b/bun.lock index 160958f8da2..e84726d6100 100644 --- a/bun.lock +++ b/bun.lock @@ -390,7 +390,6 @@ "electron-store": "11.0.2", "electron-updater": "6.8.9", "electron-window-state": "^5.0.3", - "marked": "^15", }, "devDependencies": { "@actions/artifact": "4.0.0", @@ -811,7 +810,6 @@ "@solid-primitives/media": "2.3.3", "@solid-primitives/resize-observer": "2.1.3", "@solidjs/meta": "catalog:", - "@solidjs/router": "catalog:", "diff": "catalog:", "dompurify": "3.3.1", "fuzzysort": "catalog:", @@ -1062,28 +1060,28 @@ }, }, "trustedDependencies": [ - "esbuild", "tree-sitter-powershell", - "protobufjs", - "electron", "web-tree-sitter", "tree-sitter-bash", + "esbuild", + "electron", + "protobufjs", ], "patchedDependencies": { + "solid-js@1.9.10": "patches/solid-js@1.9.10.patch", "@pierre/trees@1.0.0-beta.4": "patches/@pierre%2Ftrees@1.0.0-beta.4.patch", - "@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch", - "@ai-sdk/xai@3.0.102": "patches/@ai-sdk%2Fxai@3.0.102.patch", + "pacote@21.5.0": "patches/pacote@21.5.0.patch", + "@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch", "@modelcontextprotocol/sdk@1.29.0": "patches/@modelcontextprotocol%2Fsdk@1.29.0.patch", "gcp-metadata@8.1.2": "patches/gcp-metadata@8.1.2.patch", - "@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch", - "effect@4.0.0-beta.83": "patches/effect@4.0.0-beta.83.patch", - "@ai-sdk/mistral@3.0.51": "patches/@ai-sdk%2Fmistral@3.0.51.patch", - "@silvia-odwyer/photon-node@0.3.4": "patches/@silvia-odwyer%2Fphoton-node@0.3.4.patch", - "@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch", - "solid-js@1.9.10": "patches/solid-js@1.9.10.patch", "@ai-sdk/google@3.0.73": "patches/@ai-sdk%2Fgoogle@3.0.73.patch", - "pacote@21.5.0": "patches/pacote@21.5.0.patch", + "@silvia-odwyer/photon-node@0.3.4": "patches/@silvia-odwyer%2Fphoton-node@0.3.4.patch", + "@ai-sdk/mistral@3.0.51": "patches/@ai-sdk%2Fmistral@3.0.51.patch", + "@tanstack/virtual-core@3.17.3": "patches/@tanstack%2Fvirtual-core@3.17.3.patch", "@dnd-kit/dom@0.5.0": "patches/@dnd-kit%2Fdom@0.5.0.patch", + "effect@4.0.0-beta.83": "patches/effect@4.0.0-beta.83.patch", + "@npmcli/agent@4.0.2": "patches/@npmcli%2Fagent@4.0.2.patch", + "@ai-sdk/xai@3.0.102": "patches/@ai-sdk%2Fxai@3.0.102.patch", }, "overrides": { "@opentui/core": "catalog:", @@ -6045,8 +6043,6 @@ "@opencode-ai/desktop/@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="], - "@opencode-ai/desktop/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], - "@opencode-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="], "@opencode-ai/llm/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.14", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw=="], diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index 8291bfc9474..0267b4b4efc 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -29,7 +29,7 @@ import { } from "solid-js" import { createStore, produce } from "solid-js/store" import { useParams } from "@solidjs/router" -import { Link } from "@/components/link" +import { ExternalLink } from "@/components/external-link" import { useServerSDK } from "@/context/server-sdk" import { useServerSync } from "@/context/server-sync" import { useLanguage } from "@/context/language" @@ -836,12 +836,12 @@ function ProviderConnection(props: {