+ {renderHeader()}
- {filteredTeams.length === 0 && searchQuery.trim() ? (
-
- No teams matching "{searchQuery.trim()}"
-
- ) : (
-
- {filteredTeams.map((team) => {
- const status = resolveTeamStatus(team.teamName, aliveTeams, provisioningRuns);
- const teamColorSet = team.color ? getTeamColorSet(team.color) : null;
- return (
-
openTeamTab(team.teamName, team.projectPath)}
- onKeyDown={(e) => {
- if (e.key === 'Enter' || e.key === ' ') {
- e.preventDefault();
- openTeamTab(team.teamName, team.projectPath);
+ {filteredTeams.length === 0 && searchQuery.trim() ? (
+
+ No teams matching "{searchQuery.trim()}"
+
+ ) : (
+
+ {filteredTeams.map((team) => {
+ const status = resolveTeamStatus(team.teamName, aliveTeams, provisioningRuns);
+ const teamColorSet = team.color ? getTeamColorSet(team.color) : null;
+ return (
+
- {teamColorSet ? (
-
- ) : null}
-
-
-
-
- {team.displayName}
-
-
-
-
-
-
-
-
-
- {team.description || 'No description'}
-
-
- {team.members && team.members.length > 0 ? (
- team.members.map((m) => {
- const memberColor = m.color ? getTeamColorSet(m.color) : null;
- return (
-
- openTeamTab(team.teamName, team.projectPath)}
+ onKeyDown={(e) => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ openTeamTab(team.teamName, team.projectPath);
+ }
+ }}
+ >
+ {teamColorSet ? (
+
+ ) : null}
+
+
+
+
+ {team.displayName}
+
+
+
+
+
+
+
+
+ Copy team
+
+
+
+
+
+ Delete team
+
+
+
+
+ {team.description || 'No description'}
+
+
+ {team.members && team.members.length > 0 ? (
+ team.members.map((m) => {
+ const memberColor = m.color ? getTeamColorSet(m.color) : null;
+ return (
+
+
+ {m.name}
- ) : null}
-
- );
- })
- ) : (
-
- Members: {team.memberCount}
-
- )}
- {(() => {
- const tc = taskCountsByTeam.get(team.teamName);
- if (!tc || (tc.pending === 0 && tc.inProgress === 0 && tc.completed === 0)) {
+ {m.role ? (
+
+ {m.role}
+
+ ) : null}
+
+ );
+ })
+ ) : (
+
+ Members: {team.memberCount}
+
+ )}
+ {(() => {
+ const tc = taskCountsByTeam.get(team.teamName);
+ if (
+ !tc ||
+ (tc.pending === 0 && tc.inProgress === 0 && tc.completed === 0)
+ ) {
+ return (
+
+ Tasks: 0
+
+ );
+ }
return (
-
- Tasks: 0
-
+ <>
+ {tc.inProgress > 0 && (
+
+ {tc.inProgress} active
+
+ )}
+ {tc.pending > 0 && (
+
+ {tc.pending} pending
+
+ )}
+ {tc.completed > 0 && (
+
+ {tc.completed} done
+
+ )}
+ >
);
- }
+ })()}
+
+ {(() => {
+ const recentPaths = getRecentProjects(team);
+ if (recentPaths.length === 0) return null;
return (
- <>
- {tc.inProgress > 0 && (
-
- {tc.inProgress} active
-
- )}
- {tc.pending > 0 && (
-
- {tc.pending} pending
-
- )}
- {tc.completed > 0 && (
-
- {tc.completed} done
-
- )}
- >
+
+
+
+ {recentPaths.map((p, i) => (
+
+ {i === 0 && status === 'running' ? (
+ {folderName(p)}
+ ) : (
+ folderName(p)
+ )}
+ {i < recentPaths.length - 1 ? ', ' : ''}
+
+ ))}
+
+
);
})()}
- {(() => {
- const recentPaths = getRecentProjects(team);
- if (recentPaths.length === 0) return null;
- return (
-
-
-
- {recentPaths.map((p, i) => (
-
- {i === 0 && status === 'running' ? (
- {folderName(p)}
- ) : (
- folderName(p)
- )}
- {i < recentPaths.length - 1 ? ', ' : ''}
-
- ))}
-
-
- );
- })()}
-
- );
- })}
-
- )}
- {createDialogElement}
-
+ );
+ })}
+
+ )}
+ {createDialogElement}
+
+
);
};
diff --git a/src/renderer/components/team/TeamSessionsSection.tsx b/src/renderer/components/team/TeamSessionsSection.tsx
index ba0966ba..cff780c7 100644
--- a/src/renderer/components/team/TeamSessionsSection.tsx
+++ b/src/renderer/components/team/TeamSessionsSection.tsx
@@ -1,5 +1,6 @@
import { useCallback, useMemo } from 'react';
+import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip';
import { useStore } from '@renderer/store';
import { formatDistanceToNowStrict } from 'date-fns';
import {
@@ -205,29 +206,40 @@ const SessionRow = ({
-
-
+
+
+
+
+
+ {isSelected ? 'Remove filter' : 'Filter by this session'}
+
+
+
+
+
+
+ Open session
+
);
diff --git a/src/renderer/components/team/dialogs/SendMessageDialog.tsx b/src/renderer/components/team/dialogs/SendMessageDialog.tsx
index cd827969..120bc8b4 100644
--- a/src/renderer/components/team/dialogs/SendMessageDialog.tsx
+++ b/src/renderer/components/team/dialogs/SendMessageDialog.tsx
@@ -19,6 +19,7 @@ import {
SelectTrigger,
SelectValue,
} from '@renderer/components/ui/select';
+import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip';
import { getTeamColorSet } from '@renderer/constants/teamColors';
import { useDraftPersistence } from '@renderer/hooks/useDraftPersistence';
import { buildReplyBlock } from '@renderer/utils/agentMessageFormatting';
@@ -180,13 +181,18 @@ export const SendMessageDialog = ({
{quote ? (