Summary
After the unified jobs.Supervisor landed (#684), background shells and subagents appear in the input status-bar background-jobs indicator (the "gear" indicator below the input) because it reads backgroundTaskRegistry.CountRunningJobs(kind) from the supervisor. Active A2A tasks do NOT appear there, even though the A2A submit path registers an a2aJob of JobKindA2A with the supervisor.
Root cause is dual tracking: an A2A task is registered in BOTH the A2A task tracker (taskTracker.StartPolling, which backs the /tasks active list via backgroundTaskService.GetBackgroundTasks()) AND the supervisor (submitter.Submit(&a2aJob{...})). The status bar and the /tasks active list therefore source A2A state from two different places that can diverge - the exact divergence the supervisor unification was meant to remove. Note backgroundTaskRegistry.HasPending() (reads the embedded trackers) and the supervisor's per-kind counts are also two independent computations of "what is running".
Steps to Reproduce
- Configure a remote A2A agent and delegate a long-running task via
A2A_SubmitTask.
- While it runs, watch the input status-bar background-jobs indicator and open
/tasks.
- The task shows in
/tasks but the status-bar indicator does not count it (running shells and subagents do show).
Expected Behavior
Active A2A tasks are reflected in the status-bar indicator the same way running shells and subagents are, sourced from a single source of truth for "what background work is running".
Actual Behavior
A2A tasks are invisible in the status-bar indicator; the supervisor count and the /tasks A2A list are populated by separate, potentially divergent paths.
Notes / proposed direction
Summary
After the unified
jobs.Supervisorlanded (#684), background shells and subagents appear in the input status-bar background-jobs indicator (the "gear" indicator below the input) because it readsbackgroundTaskRegistry.CountRunningJobs(kind)from the supervisor. Active A2A tasks do NOT appear there, even though the A2A submit path registers ana2aJobofJobKindA2Awith the supervisor.Root cause is dual tracking: an A2A task is registered in BOTH the A2A task tracker (
taskTracker.StartPolling, which backs the/tasksactive list viabackgroundTaskService.GetBackgroundTasks()) AND the supervisor (submitter.Submit(&a2aJob{...})). The status bar and the/tasksactive list therefore source A2A state from two different places that can diverge - the exact divergence the supervisor unification was meant to remove. NotebackgroundTaskRegistry.HasPending()(reads the embedded trackers) and the supervisor's per-kind counts are also two independent computations of "what is running".Steps to Reproduce
A2A_SubmitTask./tasks./tasksbut the status-bar indicator does not count it (running shells and subagents do show).Expected Behavior
Active A2A tasks are reflected in the status-bar indicator the same way running shells and subagents are, sourced from a single source of truth for "what background work is running".
Actual Behavior
A2A tasks are invisible in the status-bar indicator; the supervisor count and the
/tasksA2A list are populated by separate, potentially divergent paths.Notes / proposed direction
/tasksactive A2A rows and the supervisor'sCountRunningJobs(JobKindA2A)come from one place; e.g. routebackgroundTaskRegistry.HasPending()and the/tasksA2A rows through the supervisor snapshot instead of the parallelA2ATaskTracker/backgroundTaskServicepath.internal/ui/components/input_status_bar.go(getBackgroundJobsInfo),internal/agent/tools/a2a_task.go(dual registration),internal/services/background_task_registry.go(HasPending).