diff --git a/packages/app/src/pages/session/use-session-commands.tsx b/packages/app/src/pages/session/use-session-commands.tsx index 461351878b6..c3b2d698dcb 100644 --- a/packages/app/src/pages/session/use-session-commands.tsx +++ b/packages/app/src/pages/session/use-session-commands.tsx @@ -17,9 +17,11 @@ import { DialogSelectMcp } from "@/components/dialog-select-mcp" import { DialogFork } from "@/components/dialog-fork" import { showToast } from "@opencode-ai/ui/toast" import { findLast } from "@opencode-ai/util/array" +import { base64Encode } from "@opencode-ai/util/encode" import { extractPromptFromParts } from "@/utils/prompt" import { UserMessage } from "@opencode-ai/sdk/v2" import { canAddSelectionContext } from "@/pages/session/session-command-helpers" +import { DialogSelectDirectory } from "@/components/dialog-select-directory" export type SessionCommandContext = { navigateMessageByOffset: (offset: number) => void @@ -87,6 +89,10 @@ export const useSessionCommands = (actions: SessionCommandContext) => { const navigateMessageByOffset = actions.navigateMessageByOffset const setActiveMessage = actions.setActiveMessage const focusInput = actions.focusInput + const openDir = (dir: string) => { + layout.projects.open(dir) + navigate(`/${base64Encode(dir)}/session`) + } const sessionCommand = withCategory(language.t("command.category.session")) const fileCommand = withCategory(language.t("command.category.file")) @@ -106,6 +112,23 @@ export const useSessionCommands = (actions: SessionCommandContext) => { slash: "new", onSelect: () => navigate(`/${params.dir}/session`), }), + sessionCommand({ + id: "project.cd", + title: language.t("command.project.open"), + description: language.t("dialog.directory.search.placeholder"), + slash: "cd", + onSelect: () => { + dialog.show(() => ( + { + if (!result || Array.isArray(result)) return + openDir(result) + }} + /> + )) + }, + }), ]) const fileCommands = createMemo(() => [