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:
@@ -385,8 +385,8 @@
|
|||||||
"vm": {
|
"vm": {
|
||||||
"connection": { "online": "Online", "connecting": "Verbinden…", "offline": "Offline" },
|
"connection": { "online": "Online", "connecting": "Verbinden…", "offline": "Offline" },
|
||||||
"shell": { "restartingWorker": "Worker wird neu gestartet…" },
|
"shell": { "restartingWorker": "Worker wird neu gestartet…" },
|
||||||
"agentStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "review": "Prüfung", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen" },
|
"agentStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "review": "Prüfung", "children": "Wartet auf Verbesserungen", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen" },
|
||||||
"taskStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "waitingForReview": "Wartet auf Prüfung", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen" },
|
"taskStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "waitingForReview": "Wartet auf Prüfung", "waitingForChildren": "Wartet auf Verbesserungen", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen" },
|
||||||
"planningBadge": { "active": "PLANUNG", "finalized": "GEPLANT" },
|
"planningBadge": { "active": "PLANUNG", "finalized": "GEPLANT" },
|
||||||
"taskRow": { "createdPrefix": "Erstellt {0}", "stepsText": "{0}/{1} Schritte" },
|
"taskRow": { "createdPrefix": "Erstellt {0}", "stepsText": "{0}/{1} Schritte" },
|
||||||
"tasksIsland": { "completedHeader": "ABGESCHLOSSEN", "completedHeaderCount": "ABGESCHLOSSEN · {0}" },
|
"tasksIsland": { "completedHeader": "ABGESCHLOSSEN", "completedHeaderCount": "ABGESCHLOSSEN · {0}" },
|
||||||
|
|||||||
@@ -385,8 +385,8 @@
|
|||||||
"vm": {
|
"vm": {
|
||||||
"connection": { "online": "Online", "connecting": "Connecting…", "offline": "Offline" },
|
"connection": { "online": "Online", "connecting": "Connecting…", "offline": "Offline" },
|
||||||
"shell": { "restartingWorker": "Restarting worker…" },
|
"shell": { "restartingWorker": "Restarting worker…" },
|
||||||
"agentStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "review": "Review", "done": "Done", "failed": "Failed", "cancelled": "Cancelled" },
|
"agentStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "review": "Review", "children": "Waiting for Improvements", "done": "Done", "failed": "Failed", "cancelled": "Cancelled" },
|
||||||
"taskStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "waitingForReview": "Waiting for Review", "done": "Done", "failed": "Failed", "cancelled": "Cancelled" },
|
"taskStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "waitingForReview": "Waiting for Review", "waitingForChildren": "Waiting for Improvements", "done": "Done", "failed": "Failed", "cancelled": "Cancelled" },
|
||||||
"planningBadge": { "active": "PLANNING", "finalized": "PLANNED" },
|
"planningBadge": { "active": "PLANNING", "finalized": "PLANNED" },
|
||||||
"taskRow": { "createdPrefix": "Created {0}", "stepsText": "{0}/{1} steps" },
|
"taskRow": { "createdPrefix": "Created {0}", "stepsText": "{0}/{1} steps" },
|
||||||
"tasksIsland": { "completedHeader": "COMPLETED", "completedHeaderCount": "COMPLETED · {0}" },
|
"tasksIsland": { "completedHeader": "COMPLETED", "completedHeaderCount": "COMPLETED · {0}" },
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public class StatusColorConverter : IValueConverter
|
|||||||
"running" => Brushes.Orange,
|
"running" => Brushes.Orange,
|
||||||
"waitingforreview" => Brushes.MediumPurple,
|
"waitingforreview" => Brushes.MediumPurple,
|
||||||
"waiting_for_review" => Brushes.MediumPurple,
|
"waiting_for_review" => Brushes.MediumPurple,
|
||||||
|
"waitingforchildren" => Brushes.DarkOrange,
|
||||||
"done" => Brushes.Green,
|
"done" => Brushes.Green,
|
||||||
"failed" => Brushes.Red,
|
"failed" => Brushes.Red,
|
||||||
"manual" => Brushes.Gray,
|
"manual" => Brushes.Gray,
|
||||||
|
|||||||
@@ -174,6 +174,14 @@
|
|||||||
<Setter Property="Foreground" Value="{StaticResource StatusReviewBrush}" />
|
<Setter Property="Foreground" Value="{StaticResource StatusReviewBrush}" />
|
||||||
</Style>
|
</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">
|
<Style Selector="Border.chip.error">
|
||||||
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}" />
|
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}" />
|
||||||
<Setter Property="BorderBrush" Value="{StaticResource ErrorTintBorderBrush}" />
|
<Setter Property="BorderBrush" Value="{StaticResource ErrorTintBorderBrush}" />
|
||||||
@@ -388,6 +396,10 @@
|
|||||||
<Setter Property="Background" Value="{StaticResource ReviewTintBrush}" />
|
<Setter Property="Background" Value="{StaticResource ReviewTintBrush}" />
|
||||||
<Setter Property="BorderBrush" Value="{StaticResource ReviewTintBorderBrush}" />
|
<Setter Property="BorderBrush" Value="{StaticResource ReviewTintBorderBrush}" />
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style Selector="Border.agent-strip.children">
|
||||||
|
<Setter Property="Background" Value="#332A1A" />
|
||||||
|
<Setter Property="BorderBrush" Value="#4D3A1A" />
|
||||||
|
</Style>
|
||||||
<Style Selector="Border.agent-strip.error">
|
<Style Selector="Border.agent-strip.error">
|
||||||
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}" />
|
<Setter Property="Background" Value="{StaticResource ErrorTintBrush}" />
|
||||||
<Setter Property="BorderBrush" Value="{StaticResource ErrorTintBorderBrush}" />
|
<Setter Property="BorderBrush" Value="{StaticResource ErrorTintBorderBrush}" />
|
||||||
|
|||||||
@@ -110,11 +110,12 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
|||||||
[NotifyCanExecuteChangedFor(nameof(ContinueCommand))]
|
[NotifyCanExecuteChangedFor(nameof(ContinueCommand))]
|
||||||
private string _agentState = "idle";
|
private string _agentState = "idle";
|
||||||
public string AgentStatusLabel => Loc.T($"vm.agentStatus.{AgentState}");
|
public string AgentStatusLabel => Loc.T($"vm.agentStatus.{AgentState}");
|
||||||
public bool IsIdle => AgentState == "idle";
|
public bool IsIdle => AgentState == "idle";
|
||||||
public bool IsQueued => AgentState == "queued";
|
public bool IsQueued => AgentState == "queued";
|
||||||
public bool IsRunning => AgentState == "running";
|
public bool IsRunning => AgentState == "running";
|
||||||
public bool IsWaitingForReview => AgentState == "review";
|
public bool IsWaitingForReview => AgentState == "review";
|
||||||
public bool IsDone => AgentState == "done";
|
public bool IsWaitingForChildren => AgentState == "children";
|
||||||
|
public bool IsDone => AgentState == "done";
|
||||||
public bool IsFailed => AgentState == "failed";
|
public bool IsFailed => AgentState == "failed";
|
||||||
public bool IsCancelled => AgentState == "cancelled";
|
public bool IsCancelled => AgentState == "cancelled";
|
||||||
|
|
||||||
@@ -134,6 +135,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
|||||||
OnPropertyChanged(nameof(IsQueued));
|
OnPropertyChanged(nameof(IsQueued));
|
||||||
OnPropertyChanged(nameof(IsRunning));
|
OnPropertyChanged(nameof(IsRunning));
|
||||||
OnPropertyChanged(nameof(IsWaitingForReview));
|
OnPropertyChanged(nameof(IsWaitingForReview));
|
||||||
|
OnPropertyChanged(nameof(IsWaitingForChildren));
|
||||||
OnPropertyChanged(nameof(IsDone));
|
OnPropertyChanged(nameof(IsDone));
|
||||||
OnPropertyChanged(nameof(IsFailed));
|
OnPropertyChanged(nameof(IsFailed));
|
||||||
OnPropertyChanged(nameof(IsCancelled));
|
OnPropertyChanged(nameof(IsCancelled));
|
||||||
@@ -281,7 +283,8 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
|||||||
{
|
{
|
||||||
ClaudeDo.Data.Models.TaskStatus.Queued => "queued",
|
ClaudeDo.Data.Models.TaskStatus.Queued => "queued",
|
||||||
ClaudeDo.Data.Models.TaskStatus.Running => "running",
|
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.Done => "done",
|
||||||
ClaudeDo.Data.Models.TaskStatus.Failed => "failed",
|
ClaudeDo.Data.Models.TaskStatus.Failed => "failed",
|
||||||
ClaudeDo.Data.Models.TaskStatus.Cancelled => "cancelled",
|
ClaudeDo.Data.Models.TaskStatus.Cancelled => "cancelled",
|
||||||
@@ -293,7 +296,8 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
|||||||
"done" => "done",
|
"done" => "done",
|
||||||
"failed" => "failed",
|
"failed" => "failed",
|
||||||
"cancelled" => "cancelled",
|
"cancelled" => "cancelled",
|
||||||
"waiting_for_review" => "review",
|
"waiting_for_review" => "review",
|
||||||
|
"waiting_for_children" => "children",
|
||||||
_ => status.ToLowerInvariant(),
|
_ => status.ToLowerInvariant(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,8 @@ public sealed partial class TaskRowViewModel : ViewModelBase
|
|||||||
TaskStatus.Idle => Loc.T("vm.taskStatus.idle"),
|
TaskStatus.Idle => Loc.T("vm.taskStatus.idle"),
|
||||||
TaskStatus.Queued => Loc.T("vm.taskStatus.queued"),
|
TaskStatus.Queued => Loc.T("vm.taskStatus.queued"),
|
||||||
TaskStatus.Running => Loc.T("vm.taskStatus.running"),
|
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.Done => Loc.T("vm.taskStatus.done"),
|
||||||
TaskStatus.Failed => Loc.T("vm.taskStatus.failed"),
|
TaskStatus.Failed => Loc.T("vm.taskStatus.failed"),
|
||||||
TaskStatus.Cancelled => Loc.T("vm.taskStatus.cancelled"),
|
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
|
public string StatusChipClass => (Status, IsBlocked: !string.IsNullOrEmpty(BlockedByTaskId)) switch
|
||||||
{
|
{
|
||||||
(TaskStatus.Running, _) => "running",
|
(TaskStatus.Running, _) => "running",
|
||||||
(TaskStatus.WaitingForReview, _) => "review",
|
(TaskStatus.WaitingForReview, _) => "review",
|
||||||
|
(TaskStatus.WaitingForChildren, _) => "children",
|
||||||
(TaskStatus.Failed, _) => "error",
|
(TaskStatus.Failed, _) => "error",
|
||||||
(TaskStatus.Done, _) => "done",
|
(TaskStatus.Done, _) => "done",
|
||||||
(TaskStatus.Queued, true) => "waiting",
|
(TaskStatus.Queued, true) => "waiting",
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
x:DataType="vm:DetailsIslandViewModel">
|
x:DataType="vm:DetailsIslandViewModel">
|
||||||
<Border Classes="agent-strip"
|
<Border Classes="agent-strip"
|
||||||
Classes.running="{Binding IsRunning}"
|
Classes.running="{Binding IsRunning}"
|
||||||
|
Classes.children="{Binding IsWaitingForChildren}"
|
||||||
Margin="18,8,18,0">
|
Margin="18,8,18,0">
|
||||||
<StackPanel Margin="12,10" Spacing="6">
|
<StackPanel Margin="12,10" Spacing="6">
|
||||||
|
|
||||||
|
|||||||
@@ -140,6 +140,7 @@
|
|||||||
<Border Classes="chip"
|
<Border Classes="chip"
|
||||||
Classes.running="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Running}"
|
Classes.running="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Running}"
|
||||||
Classes.review="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=WaitingForReview}"
|
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.done="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Done}"
|
||||||
Classes.error="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Failed}"
|
Classes.error="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Failed}"
|
||||||
Classes.queued="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Queued}">
|
Classes.queued="{Binding Status, Converter={StaticResource EqStatus}, ConverterParameter=Queued}">
|
||||||
|
|||||||
Reference in New Issue
Block a user