diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx index b159ac84d..0be1e45a2 100644 --- a/apps/web/src/components/Sidebar.tsx +++ b/apps/web/src/components/Sidebar.tsx @@ -6,6 +6,7 @@ import { EyeOffIcon, ZapIcon, FolderIcon, + GitBranchIcon, GitMergeIcon, GitPullRequestIcon, XCircleIcon, @@ -121,6 +122,7 @@ import { resolvePackageManagerResolution, } from "~/projectScriptDefaults"; import { useClientMode } from "~/hooks/useClientMode"; +import { CloneRepositoryDialog } from "~/components/CloneRepositoryDialog"; import { getProjectColor } from "~/projectColors"; import type { Thread } from "../types"; @@ -398,6 +400,7 @@ export default function Sidebar() { const [isAddingProject, setIsAddingProject] = useState(false); const [addProjectError, setAddProjectError] = useState(null); const [manualProjectPathEntry, setManualProjectPathEntry] = useState(false); + const [cloneDialogOpen, setCloneDialogOpen] = useState(false); const addProjectInputRef = useRef(null); const [expandedThreadListsByProject, setExpandedThreadListsByProject] = useState< ReadonlySet @@ -680,6 +683,13 @@ export default function Sidebar() { setAddingProject((prev) => !prev); }; + const handleCloneComplete = useCallback( + async (result: { path: string; branch: string; repoName: string }) => { + await addProjectFromPath(result.path); + }, + [addProjectFromPath], + ); + /** * Delete a single thread: stop session, close terminal, dispatch delete, * clean up drafts/state, and optionally remove orphaned worktree. @@ -2044,6 +2054,15 @@ export default function Sidebar() { {isPickingFolder ? "Picking folder..." : "Browse for folder"} + {!manualProjectPathEntry && ( +