diff --git a/src/renderer/components/team/dialogs/CreateTeamDialog.tsx b/src/renderer/components/team/dialogs/CreateTeamDialog.tsx index b533f78e..f06274a6 100644 --- a/src/renderer/components/team/dialogs/CreateTeamDialog.tsx +++ b/src/renderer/components/team/dialogs/CreateTeamDialog.tsx @@ -28,7 +28,7 @@ import { useFileListCacheWarmer } from '@renderer/hooks/useFileListCacheWarmer'; import { cn } from '@renderer/lib/utils'; import { normalizePath } from '@renderer/utils/pathNormalize'; import { getMemberColor } from '@shared/constants/memberColors'; -import { AlertTriangle, CheckCircle2, Info, Loader2 } from 'lucide-react'; +import { AlertTriangle, CheckCircle2, Info, Loader2, X } from 'lucide-react'; import { ExtendedContextCheckbox } from './ExtendedContextCheckbox'; import { ProjectPathSelector } from './ProjectPathSelector'; @@ -225,6 +225,7 @@ export const CreateTeamDialog = ({ const [launchTeam, setLaunchTeam] = useState(true); const [soloTeam, setSoloTeam] = useState(false); const [teamColor, setTeamColor] = useState(''); + const [conflictDismissed, setConflictDismissed] = useState(false); const [selectedModel, setSelectedModelRaw] = useState(() => { const stored = localStorage.getItem('team:lastSelectedModel') ?? ''; return stored === '__default__' ? '' : stored; @@ -250,6 +251,7 @@ export const CreateTeamDialog = ({ setPrepareState('idle'); setPrepareMessage(null); setPrepareWarnings([]); + setConflictDismissed(false); }; const resetFormState = (): void => { @@ -492,6 +494,11 @@ export const CreateTeamDialog = ({ return activeTeams.find((t) => normalizePath(t.projectPath) === norm) ?? null; }, [activeTeams, effectiveCwd]); + // Reset dismiss when conflict target changes + useEffect(() => { + setConflictDismissed(false); + }, [conflictingTeam?.teamName, effectiveCwd]); + const handleSubmit = (): void => { if (existingTeamNames.includes(sanitizedTeamName)) { setFieldErrors({ teamName: 'Team name already exists' }); @@ -565,11 +572,11 @@ export const CreateTeamDialog = ({ - {conflictingTeam ? ( + {conflictingTeam && !conflictDismissed ? (
-
+

Team “{conflictingTeam.displayName}” is already running in this project @@ -579,6 +586,13 @@ export const CreateTeamDialog = ({ same files. Consider using a different directory or a git worktree for isolation.

+
) : null} diff --git a/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx b/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx index d675305f..bf285fd6 100644 --- a/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx +++ b/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx @@ -21,7 +21,7 @@ import { useStore } from '@renderer/store'; import { formatAgentRole } from '@renderer/utils/formatAgentRole'; import { buildMemberColorMap } from '@renderer/utils/memberHelpers'; import { normalizePath } from '@renderer/utils/pathNormalize'; -import { AlertTriangle, CheckCircle2, Loader2, RotateCcw } from 'lucide-react'; +import { AlertTriangle, CheckCircle2, Loader2, RotateCcw, X } from 'lucide-react'; import { ProjectPathSelector } from './ProjectPathSelector'; import { computeEffectiveTeamModel, TeamModelSelector } from './TeamModelSelector'; @@ -79,6 +79,7 @@ export const LaunchTeamDialog = ({ () => localStorage.getItem('team:lastExtendedContext') === 'true' ); const [clearContext, setClearContext] = useState(false); + const [conflictDismissed, setConflictDismissed] = useState(false); const setSelectedModel = (value: string): void => { setSelectedModelRaw(value); @@ -100,6 +101,7 @@ export const LaunchTeamDialog = ({ setSelectedProjectPath(''); setCustomCwd(''); setClearContext(false); + setConflictDismissed(false); chipDraft.clearChipDraft(); }; @@ -245,6 +247,11 @@ export const LaunchTeamDialog = ({ ); }, [activeTeams, effectiveCwd, teamName]); + // Reset dismiss when conflict target changes (different path or different conflicting team) + useEffect(() => { + setConflictDismissed(false); + }, [conflictingTeam?.teamName, effectiveCwd]); + const colorMap = useMemo(() => buildMemberColorMap(members), [members]); const mentionSuggestions = useMemo( () => @@ -305,11 +312,11 @@ export const LaunchTeamDialog = ({ - {conflictingTeam ? ( + {conflictingTeam && !conflictDismissed ? (
-
+

Team “{conflictingTeam.displayName}” is already running in this project @@ -319,6 +326,13 @@ export const LaunchTeamDialog = ({ same files. Consider using a different directory or a git worktree for isolation.

+
) : null}