feat(ui): surface WaitingForChildren status (chip, color, agent-strip, labels)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-06-04 16:19:31 +02:00
parent f60becaf06
commit 5363570fb4
8 changed files with 35 additions and 14 deletions

View File

@@ -17,6 +17,7 @@ public class StatusColorConverter : IValueConverter
"running" => Brushes.Orange,
"waitingforreview" => Brushes.MediumPurple,
"waiting_for_review" => Brushes.MediumPurple,
"waitingforchildren" => Brushes.DarkOrange,
"done" => Brushes.Green,
"failed" => Brushes.Red,
"manual" => Brushes.Gray,

View File

@@ -174,6 +174,14 @@
<Setter Property="Foreground" Value="{StaticResource StatusReviewBrush}" />
</Style>
<Style Selector="Border.chip.children">
<Setter Property="Background" Value="#332A1A" />
<Setter Property="BorderBrush" Value="#4D3A1A" />
</Style>
<Style Selector="Border.chip.children > TextBlock">
<Setter Property="Foreground" Value="#E0A030" />
</Style>
<Style Selector="Border.chip.error">
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource ErrorTintBorderBrush}" />
@@ -388,6 +396,10 @@
<Setter Property="Background" Value="{StaticResource ReviewTintBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource ReviewTintBorderBrush}" />
</Style>
<Style Selector="Border.agent-strip.children">
<Setter Property="Background" Value="#332A1A" />
<Setter Property="BorderBrush" Value="#4D3A1A" />
</Style>
<Style Selector="Border.agent-strip.error">
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource ErrorTintBorderBrush}" />

View File

@@ -110,11 +110,12 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
[NotifyCanExecuteChangedFor(nameof(ContinueCommand))]
private string _agentState = "idle";
public string AgentStatusLabel => Loc.T($"vm.agentStatus.{AgentState}");
public bool IsIdle => AgentState == "idle";
public bool IsQueued => AgentState == "queued";
public bool IsRunning => AgentState == "running";
public bool IsWaitingForReview => AgentState == "review";
public bool IsDone => AgentState == "done";
public bool IsIdle => AgentState == "idle";
public bool IsQueued => AgentState == "queued";
public bool IsRunning => AgentState == "running";
public bool IsWaitingForReview => AgentState == "review";
public bool IsWaitingForChildren => AgentState == "children";
public bool IsDone => AgentState == "done";
public bool IsFailed => AgentState == "failed";
public bool IsCancelled => AgentState == "cancelled";
@@ -134,6 +135,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
OnPropertyChanged(nameof(IsQueued));
OnPropertyChanged(nameof(IsRunning));
OnPropertyChanged(nameof(IsWaitingForReview));
OnPropertyChanged(nameof(IsWaitingForChildren));
OnPropertyChanged(nameof(IsDone));
OnPropertyChanged(nameof(IsFailed));
OnPropertyChanged(nameof(IsCancelled));
@@ -281,7 +283,8 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
{
ClaudeDo.Data.Models.TaskStatus.Queued => "queued",
ClaudeDo.Data.Models.TaskStatus.Running => "running",
ClaudeDo.Data.Models.TaskStatus.WaitingForReview => "review",
ClaudeDo.Data.Models.TaskStatus.WaitingForReview => "review",
ClaudeDo.Data.Models.TaskStatus.WaitingForChildren => "children",
ClaudeDo.Data.Models.TaskStatus.Done => "done",
ClaudeDo.Data.Models.TaskStatus.Failed => "failed",
ClaudeDo.Data.Models.TaskStatus.Cancelled => "cancelled",
@@ -293,7 +296,8 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
"done" => "done",
"failed" => "failed",
"cancelled" => "cancelled",
"waiting_for_review" => "review",
"waiting_for_review" => "review",
"waiting_for_children" => "children",
_ => status.ToLowerInvariant(),
};

View File

@@ -90,7 +90,8 @@ public sealed partial class TaskRowViewModel : ViewModelBase
TaskStatus.Idle => Loc.T("vm.taskStatus.idle"),
TaskStatus.Queued => Loc.T("vm.taskStatus.queued"),
TaskStatus.Running => Loc.T("vm.taskStatus.running"),
TaskStatus.WaitingForReview => Loc.T("vm.taskStatus.waitingForReview"),
TaskStatus.WaitingForReview => Loc.T("vm.taskStatus.waitingForReview"),
TaskStatus.WaitingForChildren => Loc.T("vm.taskStatus.waitingForChildren"),
TaskStatus.Done => Loc.T("vm.taskStatus.done"),
TaskStatus.Failed => Loc.T("vm.taskStatus.failed"),
TaskStatus.Cancelled => Loc.T("vm.taskStatus.cancelled"),
@@ -99,8 +100,9 @@ public sealed partial class TaskRowViewModel : ViewModelBase
public string StatusChipClass => (Status, IsBlocked: !string.IsNullOrEmpty(BlockedByTaskId)) switch
{
(TaskStatus.Running, _) => "running",
(TaskStatus.WaitingForReview, _) => "review",
(TaskStatus.Running, _) => "running",
(TaskStatus.WaitingForReview, _) => "review",
(TaskStatus.WaitingForChildren, _) => "children",
(TaskStatus.Failed, _) => "error",
(TaskStatus.Done, _) => "done",
(TaskStatus.Queued, true) => "waiting",

View File

@@ -6,6 +6,7 @@
x:DataType="vm:DetailsIslandViewModel">
<Border Classes="agent-strip"
Classes.running="{Binding IsRunning}"
Classes.children="{Binding IsWaitingForChildren}"
Margin="18,8,18,0">
<StackPanel Margin="12,10" Spacing="6">

View File

@@ -140,6 +140,7 @@
<Border Classes="chip"
Classes.running="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Running}"
Classes.review="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=WaitingForReview}"
Classes.children="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=WaitingForChildren}"
Classes.done="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Done}"
Classes.error="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Failed}"
Classes.queued="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Queued}">