Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/types/src/global-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,11 @@ export const globalSettingsSchema = z.object({
* Used by the worktree feature to open the Roo Code sidebar in a new window.
*/
worktreeAutoOpenPath: z.string().optional(),
/**
* Whether to show the worktree selector in the home screen.
* @default true
*/
showWorktreesInHomeScreen: z.boolean().optional(),
})

export type GlobalSettings = z.infer<typeof globalSettingsSchema>
Expand Down
6 changes: 5 additions & 1 deletion packages/types/src/vscode-extension-host.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ export interface ExtensionMessage {
| "worktreeDefaults"
| "worktreeIncludeStatus"
| "branchWorktreeIncludeResult"
| "folderSelected"
text?: string
payload?: any // eslint-disable-line @typescript-eslint/no-explicit-any
checkpointWarning?: {
Expand All @@ -119,7 +120,6 @@ export interface ExtensionMessage {
| "historyButtonClicked"
| "marketplaceButtonClicked"
| "cloudButtonClicked"
| "worktreesButtonClicked"
| "didBecomeVisible"
| "focusInput"
| "switchTab"
Expand Down Expand Up @@ -257,6 +257,8 @@ export interface ExtensionMessage {
copyProgressBytesCopied?: number
copyProgressTotalBytes?: number
copyProgressItemName?: string
// folderSelected
path?: string
}

export interface OpenAiCodexRateLimitsMessage {
Expand Down Expand Up @@ -332,6 +334,7 @@ export type ExtensionState = Pick<
| "includeCurrentCost"
| "maxGitStatusFiles"
| "requestDelaySeconds"
| "showWorktreesInHomeScreen"
> & {
version: string
clineMessages: ClineMessage[]
Expand Down Expand Up @@ -600,6 +603,7 @@ export interface WebviewMessage {
| "checkBranchWorktreeInclude"
| "createWorktreeInclude"
| "checkoutBranch"
| "browseForWorktreePath"
text?: string
editedMessageContent?: string
tab?: "settings" | "history" | "mcp" | "modes" | "chat" | "marketplace" | "cloud"
Expand Down
1 change: 0 additions & 1 deletion packages/types/src/vscode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ export const commandIds = [
"popoutButtonClicked",
"cloudButtonClicked",
"settingsButtonClicked",
"worktreesButtonClicked",

"openInNewTab",

Expand Down
6 changes: 0 additions & 6 deletions src/activate/registerCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,6 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt
if (!visibleProvider) return
visibleProvider.postMessageToWebview({ type: "action", action: "marketplaceButtonClicked" })
},
worktreesButtonClicked: () => {
const visibleProvider = getVisibleProviderOrLog(outputChannel)
if (!visibleProvider) return
TelemetryService.instance.captureTitleButtonClicked("worktrees")
visibleProvider.postMessageToWebview({ type: "action", action: "worktreesButtonClicked" })
},
newTask: handleNewTask,
setCustomStoragePath: async () => {
const { promptForCustomStoragePath } = await import("../utils/storage")
Expand Down
28 changes: 28 additions & 0 deletions src/core/webview/webviewMessageHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3556,6 +3556,34 @@ export const webviewMessageHandler = async (
break
}

case "browseForWorktreePath": {
try {
const options: vscode.OpenDialogOptions = {
canSelectFiles: false,
canSelectFolders: true,
canSelectMany: false,
openLabel: t("worktrees:selectWorktreeLocation"),
title: t("worktrees:selectFolderForWorktree"),
defaultUri: vscode.workspace.workspaceFolders?.[0]?.uri
? vscode.Uri.joinPath(vscode.workspace.workspaceFolders[0].uri, "..")
: undefined,
}

const result = await vscode.window.showOpenDialog(options)
if (result && result[0]) {
await provider.postMessageToWebview({
type: "folderSelected",
path: result[0].fsPath,
})
}
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error)
provider.log(`Error opening folder picker: ${errorMessage}`)
}

break
}

default: {
// console.log(`Unhandled message type: ${message.type}`)
//
Expand Down
4 changes: 4 additions & 0 deletions src/i18n/locales/ca/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/de/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/en/worktrees.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"selectWorktreeLocation": "Select Worktree Location",
"selectFolderForWorktree": "Select folder for new worktree"
}
4 changes: 4 additions & 0 deletions src/i18n/locales/es/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/fr/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/hi/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/id/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/it/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/ja/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/ko/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/nl/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/pl/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/pt-BR/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/ru/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/tr/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/vi/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/zh-CN/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/i18n/locales/zh-TW/worktrees.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 0 additions & 5 deletions src/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,6 @@
"title": "%command.settings.title%",
"icon": "$(settings-gear)"
},
{
"command": "roo-cline.worktreesButtonClicked",
"title": "%command.worktrees.title%",
"icon": "$(git-branch)"
},
{
"command": "roo-cline.openInNewTab",
"title": "%command.openInNewTab.title%",
Expand Down
1 change: 0 additions & 1 deletion src/package.nls.ca.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.de.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.es.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.fr.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.hi.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.id.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.it.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.ja.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
"command.openInEditor.title": "Open in Editor",
"command.cloud.title": "Cloud",
"command.settings.title": "Settings",
"command.worktrees.title": "Worktrees",
"command.documentation.title": "Documentation",
"command.openInNewTab.title": "Open In New Tab",
"command.explainCode.title": "Explain Code",
Expand Down
1 change: 0 additions & 1 deletion src/package.nls.ko.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.nl.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.pl.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.pt-BR.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.ru.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.tr.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.vi.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.zh-CN.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion src/package.nls.zh-TW.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 1 addition & 4 deletions webview-ui/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@ import { CheckpointRestoreDialog } from "./components/chat/CheckpointRestoreDial
import { DeleteMessageDialog, EditMessageDialog } from "./components/chat/MessageModificationConfirmationDialog"
import ErrorBoundary from "./components/ErrorBoundary"
import { CloudView } from "./components/cloud/CloudView"
import { WorktreesView } from "./components/worktrees"
import { useAddNonInteractiveClickListener } from "./components/ui/hooks/useNonInteractiveClick"
import { TooltipProvider } from "./components/ui/tooltip"
import { STANDARD_TOOLTIP_DELAY } from "./components/ui/standard-tooltip"

type Tab = "settings" | "history" | "chat" | "marketplace" | "cloud" | "worktrees"
type Tab = "settings" | "history" | "chat" | "marketplace" | "cloud"

interface DeleteMessageDialogState {
isOpen: boolean
Expand All @@ -51,7 +50,6 @@ const tabsByMessageAction: Partial<Record<NonNullable<ExtensionMessage["action"]
historyButtonClicked: "history",
marketplaceButtonClicked: "marketplace",
cloudButtonClicked: "cloud",
worktreesButtonClicked: "worktrees",
}

const App = () => {
Expand Down Expand Up @@ -247,7 +245,6 @@ const App = () => {
organizations={cloudOrganizations}
/>
)}
{tab === "worktrees" && <WorktreesView onDone={() => switchTab("chat")} />}
<ChatView
ref={chatViewRef}
isHidden={tab !== "chat"}
Expand Down
Loading
Loading