diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 5105ee3c639..08c1f4d0b2c 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -96,7 +96,7 @@ async function getTerminalBackgroundColor(): Promise<"dark" | "light"> { }) } -export function tui(input: { url: string; args: Args; onExit?: () => Promise }) { +export function tui(input: { url: string; args: Args; attached?: boolean; onExit?: () => Promise }) { // promise to prevent immediate exit return new Promise(async (resolve) => { const mode = await getTerminalBackgroundColor() @@ -116,7 +116,7 @@ export function tui(input: { url: string; args: Args; onExit?: () => Promise - + diff --git a/packages/opencode/src/cli/cmd/tui/attach.ts b/packages/opencode/src/cli/cmd/tui/attach.ts index 5d1a4ded206..a4e25bfc52d 100644 --- a/packages/opencode/src/cli/cmd/tui/attach.ts +++ b/packages/opencode/src/cli/cmd/tui/attach.ts @@ -25,6 +25,7 @@ export const AttachCommand = cmd({ await tui({ url: args.url, args: { sessionID: args.session }, + attached: true, }) }, }) diff --git a/packages/opencode/src/cli/cmd/tui/context/directory.ts b/packages/opencode/src/cli/cmd/tui/context/directory.ts index 17e5c180a19..f710f9a509f 100644 --- a/packages/opencode/src/cli/cmd/tui/context/directory.ts +++ b/packages/opencode/src/cli/cmd/tui/context/directory.ts @@ -1,13 +1,17 @@ import { createMemo } from "solid-js" import { useSync } from "./sync" +import { useSDK } from "./sdk" import { Global } from "@/global" export function useDirectory() { const sync = useSync() + const sdk = useSDK() return createMemo(() => { + const remote = sdk.remoteHost const directory = sync.data.path.directory || process.cwd() - const result = directory.replace(Global.Path.home, "~") - if (sync.data.vcs?.branch) return result + ":" + sync.data.vcs.branch - return result + const cwd = remote ? sync.data.path.directory || "..." : directory.replace(Global.Path.home, "~") + const prefix = remote ? `${remote} ` : "" + if (sync.data.vcs?.branch) return prefix + cwd + ":" + sync.data.vcs.branch + return prefix + cwd }) } diff --git a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx index 3ea7c90b700..9e42a22d468 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx @@ -3,14 +3,22 @@ import { createSimpleContext } from "./helper" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { batch, onCleanup, onMount } from "solid-js" +function parseRemoteHost(url: string): string { + const parsed = new URL(url) + const host = parsed.hostname + const port = parsed.port + return port ? `${host}:${port}` : host +} + export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ name: "SDK", - init: (props: { url: string }) => { + init: (props: { url: string; attached?: boolean }) => { const abort = new AbortController() const sdk = createOpencodeClient({ baseUrl: props.url, signal: abort.signal, }) + const remoteHost = props.attached ? parseRemoteHost(props.url) : undefined const emitter = createGlobalEmitter<{ [key in Event["type"]]: Extract @@ -69,6 +77,6 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ abort.abort() }) - return { client: sdk, event: emitter, url: props.url } + return { client: sdk, event: emitter, url: props.url, remoteHost } }, })