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 e16893353a80..480dfaf44f08 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 @@ -7,7 +7,6 @@ import { Locale } from "@/util/locale" import { useProject } from "@tui/context/project" import { useTheme } from "../context/theme" import { useSDK } from "../context/sdk" -import { useLocal } from "../context/local" import { Flag } from "@opencode-ai/core/flag/flag" import { DialogSessionRename } from "./dialog-session-rename" import { createDebouncedSignal } from "../util/signal" @@ -26,13 +25,10 @@ export function DialogSessionList() { const project = useProject() const { theme } = useTheme() const sdk = useSDK() - const local = useLocal() const toast = useToast() const [toDelete, setToDelete] = createSignal() const [search, setSearch] = createDebouncedSignal("", 150) const deleteHint = useCommandShortcut("session.delete") - const quickSwitch1 = useCommandShortcut("session.quick_switch.1") - const quickSwitch9 = useCommandShortcut("session.quick_switch.9") const [searchResults, { refetch }] = createResource( () => ({ query: search(), filter: sync.session.query() }), @@ -141,16 +137,7 @@ export function DialogSessionList() { const [browseOrder] = createSignal(orderByRecency(sync.data.session)) - const quickSwitchHint = createMemo(() => { - const first = quickSwitch1() - const last = quickSwitch9() - if (!first || !last) return undefined - return quickSwitchRange(first, last) - }) - const quickSwitchFooterHints = createMemo(() => { - const hint = quickSwitchHint() - return hint && local.session.slots().length > 0 ? [{ title: "switch", label: hint }] : [] - }) + const options = createMemo(() => { const today = new Date().toDateString() @@ -163,9 +150,7 @@ export function DialogSessionList() { const searchResult = searchResults() const displayOrder = searchResult ? orderByRecency(searchResult) : browseOrder() - const pinned = local.session.pinned().filter((id) => sessionMap.has(id)) - const pinnedSet = new Set(pinned) - const slotByID = new Map(local.session.slots().map((id, i) => [id, i + 1])) + function buildOption(id: string, category: string) { const x = sessionMap.get(id) @@ -192,12 +177,7 @@ export function DialogSessionList() { const isDeleting = toDelete() === x.id const status = sync.data.session_status?.[x.id] const isWorking = status?.type === "busy" || status?.type === "retry" - const slot = slotByID.get(x.id) - const gutter = isWorking - ? () => - : slot !== undefined - ? () => {slot} - : undefined + const gutter = isWorking ? () => : undefined return { title: isDeleting ? `Press ${deleteHint()} again to confirm` : x.title, bg: isDeleting ? theme.error : undefined, @@ -208,8 +188,7 @@ export function DialogSessionList() { } } - const remaining = displayOrder - .filter((id) => !pinnedSet.has(id)) + return displayOrder .map((id) => { const x = sessionMap.get(id) if (!x) return undefined @@ -217,8 +196,6 @@ export function DialogSessionList() { return buildOption(id, label === today ? "Today" : label) }) .filter((x) => x !== undefined) - - return [...pinned.map((id) => buildOption(id, "Pinned")).filter((x) => x !== undefined), ...remaining] }) onMount(() => { @@ -242,15 +219,7 @@ export function DialogSessionList() { }) dialog.clear() }} - actions={[ - { - command: "session.pin.toggle", - title: "pin/unpin", - onTrigger: (option: { value: string }) => { - local.session.togglePin(option.value) - }, - }, - { + actions={[{ command: "session.delete", title: "delete", onTrigger: async (option) => { @@ -306,13 +275,6 @@ export function DialogSessionList() { }, }, ]} - footerHints={quickSwitchFooterHints()} /> ) } - -function quickSwitchRange(first: string, last: string) { - const prefix = first.slice(0, -1) - if (first.endsWith("1") && last === `${prefix}9`) return `${prefix}1-9` - return `${first} through ${last}` -} diff --git a/packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx b/packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx index a40798352bab..63e5c60c2b7c 100644 --- a/packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +++ b/packages/opencode/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx @@ -33,9 +33,6 @@ type Shortcuts = { sessionList: TipShortcut sessionNew: TipShortcut sessionParent: TipShortcut - sessionPinToggle: TipShortcut - sessionQuickSwitch1: TipShortcut - sessionQuickSwitch9: TipShortcut sessionSidebarToggle: TipShortcut sessionTimeline: TipShortcut statusView: TipShortcut @@ -123,9 +120,6 @@ export function Tips(props: { api: TuiPluginApi; connected?: boolean }) { sessionList: useCommandShortcut("session.list"), sessionNew: useCommandShortcut("session.new"), sessionParent: configShortcut(props.api, "session.parent"), - sessionPinToggle: configShortcut(props.api, "session.pin.toggle"), - sessionQuickSwitch1: useCommandShortcut("session.quick_switch.1"), - sessionQuickSwitch9: useCommandShortcut("session.quick_switch.9"), sessionSidebarToggle: configShortcut(props.api, "session.sidebar.toggle"), sessionTimeline: configShortcut(props.api, "session.timeline"), statusView: useCommandShortcut("opencode.status"), @@ -175,12 +169,7 @@ const TIPS: Tip[] = [ (shortcuts) => `Use ${commandText("/models", shortcuts.modelList())} to see and switch between available AI models`, (shortcuts) => `Use ${commandText("/themes", shortcuts.themeList())} to switch between ${themeCount} built-in themes`, (shortcuts) => `Use ${commandText("/new", shortcuts.sessionNew())} to start a fresh conversation session`, - (shortcuts) => `Use ${commandText("/sessions", shortcuts.sessionList())} to list, pin, and continue sessions`, - (shortcuts) => press(shortcuts.sessionPinToggle(), "in the session list to pin a session so it stays at the top"), - (shortcuts) => - shortcuts.sessionQuickSwitch1() && shortcuts.sessionQuickSwitch9() - ? `Pinned sessions are assigned quick slots; use ${shortcutText(shortcuts.sessionQuickSwitch1())} through ${shortcutText(shortcuts.sessionQuickSwitch9())} to switch` - : undefined, + (shortcuts) => `Use ${commandText("/sessions", shortcuts.sessionList())} to list and continue sessions`, "Run {highlight}/compact{/highlight} to summarize long sessions near context limits", (shortcuts) => `Use ${commandText("/export", shortcuts.sessionExport())} to save the conversation as Markdown`, (shortcuts) => press(shortcuts.messagesCopy(), "to copy the assistant's last message to clipboard"),