From 3b0c207d4a541b4b7af07bafd76fe4f55fde8ec0 Mon Sep 17 00:00:00 2001 From: Ariane Emory Date: Thu, 19 Feb 2026 01:36:51 -0500 Subject: [PATCH] feat(tui): return to session list after renaming session After renaming a session from the session_list dialog, instead of closing all dialogs, the session_list dialog reopens with the renamed session selected. - Add onSuccess/onCancel callbacks to DialogSessionRename - Add initialSessionID prop to DialogSessionList for selection - Pass callbacks to return to session list after rename --- .../cli/cmd/tui/component/dialog-session-list.tsx | 7 ++++--- .../cmd/tui/component/dialog-session-rename.tsx | 14 ++++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx index 775969bfcb38..80a4ad01c910 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx @@ -12,7 +12,7 @@ import { useKV } from "../context/kv" import { createDebouncedSignal } from "../util/signal" import { Spinner } from "./spinner" -export function DialogSessionList() { +export function DialogSessionList(props: { initialSessionID?: string } = {}) { const dialog = useDialog() const route = useRoute() const sync = useSync() @@ -30,7 +30,7 @@ export function DialogSessionList() { return result.data ?? [] }) - const currentSessionID = createMemo(() => (route.data.type === "session" ? route.data.sessionID : undefined)) + const currentSessionID = createMemo(() => props.initialSessionID ?? (route.data.type === "session" ? route.data.sessionID : undefined)) const sessions = createMemo(() => searchResults() ?? sync.data.session) @@ -99,7 +99,8 @@ export function DialogSessionList() { keybind: keybind.all.session_rename?.[0], title: "rename", onTrigger: async (option) => { - dialog.replace(() => ) + const back = () => dialog.replace(() => ) + dialog.replace(() => ) }, }, ]} diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx index 141340d55625..75a3b0090ef8 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-session-rename.tsx @@ -6,6 +6,8 @@ import { useSDK } from "../context/sdk" interface DialogSessionRenameProps { session: string + onSuccess?: () => void + onCancel?: () => void } export function DialogSessionRename(props: DialogSessionRenameProps) { @@ -18,14 +20,18 @@ export function DialogSessionRename(props: DialogSessionRenameProps) { { - sdk.client.session.update({ + onConfirm={async (value) => { + await sdk.client.session.update({ sessionID: props.session, title: value, }) - dialog.clear() + if (props.onSuccess) props.onSuccess() + else dialog.clear() + }} + onCancel={() => { + if (props.onCancel) props.onCancel() + else dialog.clear() }} - onCancel={() => dialog.clear()} /> ) }