summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/terminal.tsx
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-02-18 23:03:24 +0800
committerGitHub <[email protected]>2026-02-18 23:03:24 +0800
commit1bb8574179bbf7c49a34ad0e5df522a752af08c2 (patch)
treed10e2ec54cc027dc8ffd76bb40031300f9eaeef8 /packages/app/src/components/terminal.tsx
parent2611c35acc3dc64582e15ad1efca36c60a2883a8 (diff)
downloadopencode-1bb8574179bbf7c49a34ad0e5df522a752af08c2.tar.gz
opencode-1bb8574179bbf7c49a34ad0e5df522a752af08c2.zip
app: refactor server management backend (#13813)
Diffstat (limited to 'packages/app/src/components/terminal.tsx')
-rw-r--r--packages/app/src/components/terminal.tsx42
1 files changed, 27 insertions, 15 deletions
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx
index 9048c481c..085a79613 100644
--- a/packages/app/src/components/terminal.tsx
+++ b/packages/app/src/components/terminal.tsx
@@ -1,14 +1,15 @@
-import type { Ghostty, Terminal as Term, FitAddon } from "ghostty-web"
-import { ComponentProps, createEffect, createSignal, onCleanup, onMount, splitProps } from "solid-js"
+import { type HexColor, resolveThemeVariant, useTheme, withAlpha } from "@opencode-ai/ui/theme"
+import { showToast } from "@opencode-ai/ui/toast"
+import type { FitAddon, Ghostty, Terminal as Term } from "ghostty-web"
+import { type ComponentProps, createEffect, createSignal, onCleanup, onMount, splitProps } from "solid-js"
+import { SerializeAddon } from "@/addons/serialize"
+import { matchKeybind, parseKeybind } from "@/context/command"
+import { useLanguage } from "@/context/language"
import { usePlatform } from "@/context/platform"
import { useSDK } from "@/context/sdk"
+import { useServer } from "@/context/server"
import { monoFontFamily, useSettings } from "@/context/settings"
-import { parseKeybind, matchKeybind } from "@/context/command"
-import { SerializeAddon } from "@/addons/serialize"
-import { LocalPTY } from "@/context/terminal"
-import { resolveThemeVariant, useTheme, withAlpha, type HexColor } from "@opencode-ai/ui/theme"
-import { useLanguage } from "@/context/language"
-import { showToast } from "@opencode-ai/ui/toast"
+import type { LocalPTY } from "@/context/terminal"
import { disposeIfDisposable, getHoveredLinkText, setOptionIfSupported } from "@/utils/runtime-adapters"
import { terminalWriter } from "@/utils/terminal-writer"
@@ -106,8 +107,14 @@ const useTerminalUiBindings = (input: {
input.container.addEventListener("pointerdown", input.handlePointerDown)
input.cleanups.push(() => input.container.removeEventListener("pointerdown", input.handlePointerDown))
- input.container.addEventListener("click", input.handleLinkClick, { capture: true })
- input.cleanups.push(() => input.container.removeEventListener("click", input.handleLinkClick, { capture: true }))
+ input.container.addEventListener("click", input.handleLinkClick, {
+ capture: true,
+ })
+ input.cleanups.push(() =>
+ input.container.removeEventListener("click", input.handleLinkClick, {
+ capture: true,
+ }),
+ )
input.term.textarea?.addEventListener("focus", handleTextareaFocus)
input.term.textarea?.addEventListener("blur", handleTextareaBlur)
@@ -148,6 +155,7 @@ export const Terminal = (props: TerminalProps) => {
const settings = useSettings()
const theme = useTheme()
const language = useLanguage()
+ const server = useServer()
let container!: HTMLDivElement
const [local, others] = splitProps(props, ["pty", "class", "classList", "onConnect", "onConnectError"])
let ws: WebSocket | undefined
@@ -372,7 +380,13 @@ export const Terminal = (props: TerminalProps) => {
serializeAddon = serializer
t.open(container)
- useTerminalUiBindings({ container, term: t, cleanups, handlePointerDown, handleLinkClick })
+ useTerminalUiBindings({
+ container,
+ term: t,
+ cleanups,
+ handlePointerDown,
+ handleLinkClick,
+ })
focusTerminal()
@@ -428,10 +442,8 @@ export const Terminal = (props: TerminalProps) => {
url.searchParams.set("directory", sdk.directory)
url.searchParams.set("cursor", String(start !== undefined ? start : local.pty.buffer ? -1 : 0))
url.protocol = url.protocol === "https:" ? "wss:" : "ws:"
- if (window.__OPENCODE__?.serverPassword) {
- url.username = "opencode"
- url.password = window.__OPENCODE__?.serverPassword
- }
+ url.username = server.current?.http.username ?? ""
+ url.password = server.current?.http.password ?? ""
const socket = new WebSocket(url)
socket.binaryType = "arraybuffer"
ws = socket