diff --git a/packages/ui/src/components/session/SessionDialogs.tsx b/packages/ui/src/components/session/SessionDialogs.tsx index b3163ea7..23f23675 100644 --- a/packages/ui/src/components/session/SessionDialogs.tsx +++ b/packages/ui/src/components/session/SessionDialogs.tsx @@ -28,6 +28,7 @@ import { cn, formatPathForDisplay } from '@/lib/utils'; import type { Session } from '@opencode-ai/sdk'; import type { WorktreeMetadata } from '@/types/worktree'; import { + archiveWorktree, createWorktree, getWorktreeStatus, listWorktrees as listGitWorktrees, @@ -591,13 +592,30 @@ export const SessionDialogs: React.FC = () => { setIsProcessingDelete(true); try { - const archiveWorktree = shouldArchiveWorktree; - const removeRemoteBranch = archiveWorktree && deleteDialogShouldRemoveRemote; + const shouldArchive = shouldArchiveWorktree; + const removeRemoteBranch = shouldArchive && deleteDialogShouldRemoveRemote; + + if (deleteDialog.sessions.length === 0 && isWorktreeDelete && deleteDialog.worktree) { + const shouldRemoveRemote = deleteDialogShouldRemoveRemote && canRemoveRemoteBranches; + await archiveWorktree({ + projectDirectory: projectDirectory, + path: deleteDialog.worktree.path, + branch: deleteDialog.worktree.branch, + force: true, + deleteRemote: shouldRemoveRemote, + }); + const archiveNote = shouldRemoveRemote ? 'Worktree and remote branch removed.' : 'Worktree removed.'; + toast.success('Worktree removed', { + description: renderToastDescription(archiveNote), + }); + closeDeleteDialog(); + return; + } if (deleteDialog.sessions.length === 1) { const target = deleteDialog.sessions[0]; const success = await deleteSession(target.id, { - archiveWorktree, + archiveWorktree: shouldArchive, deleteRemoteBranch: removeRemoteBranch, }); if (!success) { @@ -605,7 +623,7 @@ export const SessionDialogs: React.FC = () => { setIsProcessingDelete(false); return; } - const archiveNote = archiveWorktree + const archiveNote = shouldArchive ? removeRemoteBranch ? 'Worktree and remote branch removed.' : 'Attached worktree archived.' @@ -616,12 +634,12 @@ export const SessionDialogs: React.FC = () => { } else { const ids = deleteDialog.sessions.map((session) => session.id); const { deletedIds, failedIds } = await deleteSessions(ids, { - archiveWorktree, + archiveWorktree: shouldArchive, deleteRemoteBranch: removeRemoteBranch, }); if (deletedIds.length > 0) { - const archiveNote = archiveWorktree + const archiveNote = shouldArchive ? removeRemoteBranch ? 'Archived worktrees and removed remote branches.' : 'Attached worktrees archived.' @@ -653,7 +671,7 @@ export const SessionDialogs: React.FC = () => { } finally { setIsProcessingDelete(false); } - }, [deleteDialog, deleteDialogShouldRemoveRemote, deleteSession, deleteSessions, closeDeleteDialog, shouldArchiveWorktree]); + }, [deleteDialog, deleteDialogShouldRemoveRemote, deleteSession, deleteSessions, closeDeleteDialog, shouldArchiveWorktree, isWorktreeDelete, canRemoveRemoteBranches, projectDirectory]); const worktreeManagerBody = (