import * as React from 'react' import { Text } from '@anthropic/ink' import { toInkColor } from '../../utils/ink.js' import type { BackgroundTaskState } from 'src/tasks/types.js' import type { DeepImmutable } from 'src/types/utils.js' import { truncate } from 'src/utils/format.js' import { plural } from 'src/utils/stringUtils.js' import { DIAMOND_FILLED, DIAMOND_OPEN } from '../../constants/figures.js' import { RemoteSessionProgress } from './RemoteSessionProgress.js' import { ShellProgress, TaskStatusText } from './ShellProgress.js' import { describeTeammateActivity } from './taskStatusUtils.js' type Props = { task: DeepImmutable maxActivityWidth?: number } export function BackgroundTask({ task, maxActivityWidth, }: Props): React.ReactNode { const activityLimit = maxActivityWidth ?? 40 switch (task.type) { case 'local_bash': return ( {truncate( task.kind === 'monitor' ? task.description : task.command, activityLimit, true, )}{' '} ) case 'remote_agent': { // Lite-review renders its own rainbow line (title + live counts), // so we don't prefix the title — the rainbow already includes it. if (task.isRemoteReview) { return ( ) } const running = task.status === 'running' || task.status === 'pending' return ( {running ? DIAMOND_OPEN : DIAMOND_FILLED} {truncate(task.title, activityLimit, true)} · ) } case 'local_agent': return ( {truncate(task.description, activityLimit, true)}{' '} ) case 'in_process_teammate': { const activity = describeTeammateActivity(task) return ( @{task.identity.agentName} : {truncate(activity, activityLimit, true)} ) } case 'local_workflow': { const _task = task as Record return ( {truncate( ((_task.workflowName as string) ?? task.summary ?? task.description) as string, activityLimit, true, )}{' '} ) } case 'monitor_mcp': return ( {truncate(task.description, activityLimit, true)}{' '} ) case 'dream': { const n = task.filesTouched.length const detail = task.phase === 'updating' && n > 0 ? `${n} ${plural(n, 'file')}` : `${task.sessionsReviewing} ${plural(task.sessionsReviewing, 'session')}` return ( {task.description}{' '} · {task.phase} · {detail} {' '} ) } } }