| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /**
- * Team Discovery - Utilities for discovering teams and teammate status
- *
- * Scans ~/.claude/teams/ to find teams where the current session is the leader.
- * Used by the Teams UI in the footer to show team status.
- */
- import { isPaneBackend, type PaneBackendType } from './swarm/backends/types.js'
- import { readTeamFile } from './swarm/teamHelpers.js'
- export type TeamSummary = {
- name: string
- memberCount: number
- runningCount: number
- idleCount: number
- }
- export type TeammateStatus = {
- name: string
- agentId: string
- agentType?: string
- model?: string
- prompt?: string
- status: 'running' | 'idle' | 'unknown'
- color?: string
- idleSince?: string // ISO timestamp from idle notification
- tmuxPaneId: string
- cwd: string
- worktreePath?: string
- isHidden?: boolean // Whether the pane is currently hidden from the swarm view
- backendType?: PaneBackendType // The backend type used for this teammate
- mode?: string // Current permission mode for this teammate
- }
- /**
- * Get detailed teammate statuses for a team
- * Reads isActive from config to determine status
- */
- export function getTeammateStatuses(teamName: string): TeammateStatus[] {
- const teamFile = readTeamFile(teamName)
- if (!teamFile) {
- return []
- }
- const hiddenPaneIds = new Set(teamFile.hiddenPaneIds ?? [])
- const statuses: TeammateStatus[] = []
- for (const member of teamFile.members) {
- // Exclude team-lead from the list
- if (member.name === 'team-lead') {
- continue
- }
- // Read isActive from config, defaulting to true (active) if undefined
- const isActive = member.isActive !== false
- const status: 'running' | 'idle' = isActive ? 'running' : 'idle'
- statuses.push({
- name: member.name,
- agentId: member.agentId,
- agentType: member.agentType,
- model: member.model,
- prompt: member.prompt,
- status,
- color: member.color,
- tmuxPaneId: member.tmuxPaneId,
- cwd: member.cwd,
- worktreePath: member.worktreePath,
- isHidden: hiddenPaneIds.has(member.tmuxPaneId),
- backendType:
- member.backendType && isPaneBackend(member.backendType)
- ? member.backendType
- : undefined,
- mode: member.mode,
- })
- }
- return statuses
- }
- // Note: For time formatting, use formatRelativeTimeAgo from '../utils/format.js'
|