feat(claude-do): merge feat(ui): WorkConsole, DescriptionStepsCard und ROADBLOCK-La
ClaudeDo-Task: 6c91f950-f93b-44be-abb4-b12f65fb68ba
This commit is contained in:
@@ -307,7 +307,36 @@
|
|||||||
"steps": "Schritte",
|
"steps": "Schritte",
|
||||||
"files": "Dateien"
|
"files": "Dateien"
|
||||||
},
|
},
|
||||||
"emptyState": "Wähle eine Aufgabe aus, um Details zu sehen"
|
"emptyState": "Wähle eine Aufgabe aus, um Details zu sehen",
|
||||||
|
"roadblockLabel": "ROADBLOCK",
|
||||||
|
"stepsCard": {
|
||||||
|
"preview": "Vorschau",
|
||||||
|
"edit": "Bearbeiten",
|
||||||
|
"addStepPlaceholder": "Schritt hinzufügen…"
|
||||||
|
},
|
||||||
|
"workConsole": {
|
||||||
|
"continue": "Fortsetzen",
|
||||||
|
"resetAndRetry": "Zurücksetzen & erneut versuchen",
|
||||||
|
"tabOutput": "Ausgabe",
|
||||||
|
"tabGit": "Git",
|
||||||
|
"tabSession": "Sitzung",
|
||||||
|
"outcomeLabel": "ERGEBNIS",
|
||||||
|
"reviewLabel": "REVIEW",
|
||||||
|
"mergeLabel": "MERGE",
|
||||||
|
"targetBranch": "Zielbranch",
|
||||||
|
"openDiff": "Diff öffnen",
|
||||||
|
"worktree": "Worktree",
|
||||||
|
"reviewCombinedDiff": "Kombinierten Diff prüfen",
|
||||||
|
"openDiffHint": "Diff öffnen, um Mergen freizuschalten",
|
||||||
|
"approveMerge": "Genehmigen & Mergen",
|
||||||
|
"park": "Parken",
|
||||||
|
"parkTip": "Zurückstellen — zurück auf Leerlauf, Worktree bleibt erhalten",
|
||||||
|
"cancel": "Abbrechen",
|
||||||
|
"resetDiscardBranch": "Zurücksetzen (Branch verwerfen)…",
|
||||||
|
"submitForReviewHint": "Von Hand daran gearbeitet? Den Worktree zum Review einreichen, um ihn zu mergen.",
|
||||||
|
"submitForReview": "Zum Review einreichen",
|
||||||
|
"outcomesLabel": "ERGEBNISSE"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"agent": {
|
"agent": {
|
||||||
"openWorktreeTip": "Worktree im Datei-Explorer öffnen — benötigt einen aktiven Worktree",
|
"openWorktreeTip": "Worktree im Datei-Explorer öffnen — benötigt einen aktiven Worktree",
|
||||||
|
|||||||
@@ -307,7 +307,36 @@
|
|||||||
"steps": "Steps",
|
"steps": "Steps",
|
||||||
"files": "Files"
|
"files": "Files"
|
||||||
},
|
},
|
||||||
"emptyState": "Select a task to see its details"
|
"emptyState": "Select a task to see its details",
|
||||||
|
"roadblockLabel": "ROADBLOCK",
|
||||||
|
"stepsCard": {
|
||||||
|
"preview": "Preview",
|
||||||
|
"edit": "Edit",
|
||||||
|
"addStepPlaceholder": "Add step…"
|
||||||
|
},
|
||||||
|
"workConsole": {
|
||||||
|
"continue": "Continue",
|
||||||
|
"resetAndRetry": "Reset & Retry",
|
||||||
|
"tabOutput": "Output",
|
||||||
|
"tabGit": "Git",
|
||||||
|
"tabSession": "Session",
|
||||||
|
"outcomeLabel": "OUTCOME",
|
||||||
|
"reviewLabel": "REVIEW",
|
||||||
|
"mergeLabel": "MERGE",
|
||||||
|
"targetBranch": "Target branch",
|
||||||
|
"openDiff": "Open Diff",
|
||||||
|
"worktree": "Worktree",
|
||||||
|
"reviewCombinedDiff": "Review Combined Diff",
|
||||||
|
"openDiffHint": "Open the diff to enable merge",
|
||||||
|
"approveMerge": "Approve & Merge",
|
||||||
|
"park": "Park",
|
||||||
|
"parkTip": "Set aside — back to Idle, keeps the worktree",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"resetDiscardBranch": "Reset (discard branch)…",
|
||||||
|
"submitForReviewHint": "Worked on this by hand? Submit the worktree for review to merge it.",
|
||||||
|
"submitForReview": "Submit for review",
|
||||||
|
"outcomesLabel": "OUTCOMES"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"agent": {
|
"agent": {
|
||||||
"openWorktreeTip": "Open worktree in file explorer — requires an active worktree",
|
"openWorktreeTip": "Open worktree in file explorer — requires an active worktree",
|
||||||
|
|||||||
@@ -88,8 +88,8 @@
|
|||||||
ToolTip.Tip="{loc:Tr details.toggleEditPreviewTip}"
|
ToolTip.Tip="{loc:Tr details.toggleEditPreviewTip}"
|
||||||
Command="{Binding ToggleEditDescriptionCommand}">
|
Command="{Binding ToggleEditDescriptionCommand}">
|
||||||
<Panel>
|
<Panel>
|
||||||
<TextBlock Text="Preview" IsVisible="{Binding IsEditingDescription}"/>
|
<TextBlock Text="{loc:Tr details.stepsCard.preview}" IsVisible="{Binding IsEditingDescription}"/>
|
||||||
<TextBlock Text="Edit" IsVisible="{Binding !IsEditingDescription}"/>
|
<TextBlock Text="{loc:Tr details.stepsCard.edit}" IsVisible="{Binding !IsEditingDescription}"/>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
<!-- Steps -->
|
<!-- Steps -->
|
||||||
<StackPanel IsVisible="{Binding IsStepsSection}" Spacing="6">
|
<StackPanel IsVisible="{Binding IsStepsSection}" Spacing="6">
|
||||||
<TextBox Text="{Binding NewSubtaskTitle, Mode=TwoWay}"
|
<TextBox Text="{Binding NewSubtaskTitle, Mode=TwoWay}"
|
||||||
PlaceholderText="Add step…"
|
PlaceholderText="{loc:Tr details.stepsCard.addStepPlaceholder}"
|
||||||
Padding="8"
|
Padding="8"
|
||||||
Background="{DynamicResource Surface3Brush}"
|
Background="{DynamicResource Surface3Brush}"
|
||||||
BorderBrush="{DynamicResource LineBrush}"
|
BorderBrush="{DynamicResource LineBrush}"
|
||||||
|
|||||||
@@ -172,12 +172,12 @@
|
|||||||
TextWrapping="Wrap" VerticalAlignment="Center" />
|
TextWrapping="Wrap" VerticalAlignment="Center" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<Button Classes="btn accent" Content="Continue"
|
<Button Classes="btn accent" Content="{loc:Tr details.workConsole.continue}"
|
||||||
Command="{Binding ContinueCommand}"
|
Command="{Binding ContinueCommand}"
|
||||||
IsVisible="{Binding ShowContinue}"
|
IsVisible="{Binding ShowContinue}"
|
||||||
ToolTip.Tip="{loc:Tr session.continueNoSessionTip}"
|
ToolTip.Tip="{loc:Tr session.continueNoSessionTip}"
|
||||||
ToolTip.ShowOnDisabled="True" />
|
ToolTip.ShowOnDisabled="True" />
|
||||||
<Button Classes="btn" Content="Reset & Retry"
|
<Button Classes="btn" Content="{loc:Tr details.workConsole.resetAndRetry}"
|
||||||
Command="{Binding ResetAndRetryCommand}"
|
Command="{Binding ResetAndRetryCommand}"
|
||||||
IsVisible="{Binding ShowResetAndRetry}"
|
IsVisible="{Binding ShowResetAndRetry}"
|
||||||
ToolTip.Tip="{loc:Tr session.resetAndRetryInteractiveTip}"
|
ToolTip.Tip="{loc:Tr session.resetAndRetryInteractiveTip}"
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Button Classes="tab-btn"
|
<Button Classes="tab-btn"
|
||||||
Classes.active="{Binding IsOutputTab}"
|
Classes.active="{Binding IsOutputTab}"
|
||||||
Content="Output"
|
Content="{loc:Tr details.workConsole.tabOutput}"
|
||||||
Command="{Binding SelectTabCommand}"
|
Command="{Binding SelectTabCommand}"
|
||||||
CommandParameter="output" />
|
CommandParameter="output" />
|
||||||
<Button Classes="tab-btn"
|
<Button Classes="tab-btn"
|
||||||
@@ -202,7 +202,7 @@
|
|||||||
Command="{Binding SelectTabCommand}"
|
Command="{Binding SelectTabCommand}"
|
||||||
CommandParameter="git">
|
CommandParameter="git">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="6">
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
||||||
<TextBlock Text="Git" VerticalAlignment="Center" />
|
<TextBlock Text="{loc:Tr details.workConsole.tabGit}" VerticalAlignment="Center" />
|
||||||
<!-- Review-pending dot: where to act when a task awaits review -->
|
<!-- Review-pending dot: where to act when a task awaits review -->
|
||||||
<Ellipse Width="6" Height="6" VerticalAlignment="Center"
|
<Ellipse Width="6" Height="6" VerticalAlignment="Center"
|
||||||
Fill="{DynamicResource AccentBrush}"
|
Fill="{DynamicResource AccentBrush}"
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
</Button>
|
</Button>
|
||||||
<Button Classes="tab-btn"
|
<Button Classes="tab-btn"
|
||||||
Classes.active="{Binding IsSessionTab}"
|
Classes.active="{Binding IsSessionTab}"
|
||||||
Content="Session"
|
Content="{loc:Tr details.workConsole.tabSession}"
|
||||||
IsVisible="{Binding HasChildOutcomes}"
|
IsVisible="{Binding HasChildOutcomes}"
|
||||||
Command="{Binding SelectTabCommand}"
|
Command="{Binding SelectTabCommand}"
|
||||||
CommandParameter="session" />
|
CommandParameter="session" />
|
||||||
@@ -233,7 +233,7 @@
|
|||||||
BorderBrush="{DynamicResource LineBrush}"
|
BorderBrush="{DynamicResource LineBrush}"
|
||||||
BorderThickness="1" CornerRadius="8">
|
BorderThickness="1" CornerRadius="8">
|
||||||
<StackPanel Spacing="6">
|
<StackPanel Spacing="6">
|
||||||
<TextBlock Classes="section-label" Text="OUTCOME" />
|
<TextBlock Classes="section-label" Text="{loc:Tr details.workConsole.outcomeLabel}" />
|
||||||
<ScrollViewer MaxHeight="160" VerticalScrollBarVisibility="Auto">
|
<ScrollViewer MaxHeight="160" VerticalScrollBarVisibility="Auto">
|
||||||
<SelectableTextBlock Text="{Binding SessionOutcome}"
|
<SelectableTextBlock Text="{Binding SessionOutcome}"
|
||||||
TextWrapping="Wrap"
|
TextWrapping="Wrap"
|
||||||
@@ -309,9 +309,9 @@
|
|||||||
<!-- Merge controls — shown whenever there's a worktree / unit to merge.
|
<!-- Merge controls — shown whenever there's a worktree / unit to merge.
|
||||||
Header reads REVIEW while a decision is pending, otherwise MERGE. -->
|
Header reads REVIEW while a decision is pending, otherwise MERGE. -->
|
||||||
<StackPanel Spacing="14" IsVisible="{Binding Merge.ShowMergeSection}">
|
<StackPanel Spacing="14" IsVisible="{Binding Merge.ShowMergeSection}">
|
||||||
<TextBlock Classes="section-label" Text="REVIEW"
|
<TextBlock Classes="section-label" Text="{loc:Tr details.workConsole.reviewLabel}"
|
||||||
IsVisible="{Binding IsWaitingForReview}" />
|
IsVisible="{Binding IsWaitingForReview}" />
|
||||||
<TextBlock Classes="section-label" Text="MERGE"
|
<TextBlock Classes="section-label" Text="{loc:Tr details.workConsole.mergeLabel}"
|
||||||
IsVisible="{Binding !IsWaitingForReview}" />
|
IsVisible="{Binding !IsWaitingForReview}" />
|
||||||
|
|
||||||
<!-- Change summary (review only) -->
|
<!-- Change summary (review only) -->
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
|
|
||||||
<!-- Target branch + pre-flight mergeability -->
|
<!-- Target branch + pre-flight mergeability -->
|
||||||
<StackPanel Spacing="4">
|
<StackPanel Spacing="4">
|
||||||
<TextBlock Classes="field-label" Text="Target branch" />
|
<TextBlock Classes="field-label" Text="{loc:Tr details.workConsole.targetBranch}" />
|
||||||
<ComboBox ItemsSource="{Binding Merge.MergeTargetBranches}"
|
<ComboBox ItemsSource="{Binding Merge.MergeTargetBranches}"
|
||||||
SelectedItem="{Binding Merge.SelectedMergeTarget, Mode=TwoWay}"
|
SelectedItem="{Binding Merge.SelectedMergeTarget, Mode=TwoWay}"
|
||||||
HorizontalAlignment="Stretch" />
|
HorizontalAlignment="Stretch" />
|
||||||
@@ -344,7 +344,7 @@
|
|||||||
|
|
||||||
<!-- Inspect: diff / worktree / combined diff -->
|
<!-- Inspect: diff / worktree / combined diff -->
|
||||||
<WrapPanel Orientation="Horizontal">
|
<WrapPanel Orientation="Horizontal">
|
||||||
<Button Classes="btn" Content="Open Diff" Margin="0,0,8,8"
|
<Button Classes="btn" Content="{loc:Tr details.workConsole.openDiff}" Margin="0,0,8,8"
|
||||||
ToolTip.Tip="{loc:Tr agent.openDiffTip}"
|
ToolTip.Tip="{loc:Tr agent.openDiffTip}"
|
||||||
ToolTip.ShowOnDisabled="True"
|
ToolTip.ShowOnDisabled="True"
|
||||||
Command="{Binding Merge.OpenDiffCommand}" />
|
Command="{Binding Merge.OpenDiffCommand}" />
|
||||||
@@ -353,11 +353,11 @@
|
|||||||
ToolTip.ShowOnDisabled="True"
|
ToolTip.ShowOnDisabled="True"
|
||||||
Command="{Binding Merge.OpenWorktreeCommand}">
|
Command="{Binding Merge.OpenWorktreeCommand}">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="5">
|
<StackPanel Orientation="Horizontal" Spacing="5">
|
||||||
<TextBlock Text="Worktree" />
|
<TextBlock Text="{loc:Tr details.workConsole.worktree}" />
|
||||||
<PathIcon Data="{StaticResource Icon.ArrowOut}" Width="11" Height="11" />
|
<PathIcon Data="{StaticResource Icon.ArrowOut}" Width="11" Height="11" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Classes="btn" Content="Review Combined Diff" Margin="0,0,8,8"
|
<Button Classes="btn" Content="{loc:Tr details.workConsole.reviewCombinedDiff}" Margin="0,0,8,8"
|
||||||
ToolTip.Tip="{loc:Tr agent.reviewCombinedDiffTip}"
|
ToolTip.Tip="{loc:Tr agent.reviewCombinedDiffTip}"
|
||||||
ToolTip.ShowOnDisabled="True"
|
ToolTip.ShowOnDisabled="True"
|
||||||
Command="{Binding Merge.ReviewCombinedDiffCommand}" />
|
Command="{Binding Merge.ReviewCombinedDiffCommand}" />
|
||||||
@@ -377,7 +377,7 @@
|
|||||||
Foreground="{DynamicResource AmberBrush}" VerticalAlignment="Center" />
|
Foreground="{DynamicResource AmberBrush}" VerticalAlignment="Center" />
|
||||||
<TextBlock Classes="meta" VerticalAlignment="Center"
|
<TextBlock Classes="meta" VerticalAlignment="Center"
|
||||||
Foreground="{DynamicResource AmberBrush}"
|
Foreground="{DynamicResource AmberBrush}"
|
||||||
Text="Open the diff to enable merge" />
|
Text="{loc:Tr details.workConsole.openDiffHint}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Classes="meta" Margin="17,0,0,0"
|
<TextBlock Classes="meta" Margin="17,0,0,0"
|
||||||
Text="{loc:Tr session.approveMergesUnitHint}" />
|
Text="{loc:Tr session.approveMergesUnitHint}" />
|
||||||
@@ -396,23 +396,23 @@
|
|||||||
|
|
||||||
<WrapPanel Orientation="Horizontal">
|
<WrapPanel Orientation="Horizontal">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="{StaticResource SpaceSm}" Margin="0,0,8,8">
|
<StackPanel Orientation="Horizontal" Spacing="{StaticResource SpaceSm}" Margin="0,0,8,8">
|
||||||
<Button Classes="btn accent" Content="Approve & Merge"
|
<Button Classes="btn accent" Content="{loc:Tr details.workConsole.approveMerge}"
|
||||||
Command="{Binding ApproveReviewCommand}" />
|
Command="{Binding ApproveReviewCommand}" />
|
||||||
<controls:OperationIndicator Status="{Binding ApproveOp}" />
|
<controls:OperationIndicator Status="{Binding ApproveOp}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" Spacing="{StaticResource SpaceSm}" Margin="0,0,8,8">
|
<StackPanel Orientation="Horizontal" Spacing="{StaticResource SpaceSm}" Margin="0,0,8,8">
|
||||||
<Button Classes="btn" Content="Park"
|
<Button Classes="btn" Content="{loc:Tr details.workConsole.park}"
|
||||||
ToolTip.Tip="Set aside — back to Idle, keeps the worktree"
|
ToolTip.Tip="{loc:Tr details.workConsole.parkTip}"
|
||||||
Command="{Binding ParkReviewCommand}" />
|
Command="{Binding ParkReviewCommand}" />
|
||||||
<controls:OperationIndicator Status="{Binding ParkOp}" />
|
<controls:OperationIndicator Status="{Binding ParkOp}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Button Classes="btn" Content="Cancel" Margin="0,0,8,8"
|
<Button Classes="btn" Content="{loc:Tr details.workConsole.cancel}" Margin="0,0,8,8"
|
||||||
ToolTip.Tip="{loc:Tr session.mergeDrainHint}"
|
ToolTip.Tip="{loc:Tr session.mergeDrainHint}"
|
||||||
ToolTip.ShowOnDisabled="True"
|
ToolTip.ShowOnDisabled="True"
|
||||||
Command="{Binding CancelReviewCommand}" />
|
Command="{Binding CancelReviewCommand}" />
|
||||||
</WrapPanel>
|
</WrapPanel>
|
||||||
|
|
||||||
<Button Classes="prompt-action" Content="Reset (discard branch)…"
|
<Button Classes="prompt-action" Content="{loc:Tr details.workConsole.resetDiscardBranch}"
|
||||||
ToolTip.Tip="{loc:Tr session.reviewResetTip}"
|
ToolTip.Tip="{loc:Tr session.reviewResetTip}"
|
||||||
Command="{Binding ResetReviewCommand}" />
|
Command="{Binding ResetReviewCommand}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -434,9 +434,9 @@
|
|||||||
<Border Height="1" Background="{DynamicResource LineBrush}" />
|
<Border Height="1" Background="{DynamicResource LineBrush}" />
|
||||||
<TextBlock Classes="meta" TextWrapping="Wrap"
|
<TextBlock Classes="meta" TextWrapping="Wrap"
|
||||||
Foreground="{DynamicResource TextMuteBrush}"
|
Foreground="{DynamicResource TextMuteBrush}"
|
||||||
Text="Worked on this by hand? Submit the worktree for review to merge it." />
|
Text="{loc:Tr details.workConsole.submitForReviewHint}" />
|
||||||
<StackPanel Orientation="Horizontal" Spacing="{StaticResource SpaceSm}">
|
<StackPanel Orientation="Horizontal" Spacing="{StaticResource SpaceSm}">
|
||||||
<Button Classes="btn accent" Content="Submit for review" HorizontalAlignment="Left"
|
<Button Classes="btn accent" Content="{loc:Tr details.workConsole.submitForReview}" HorizontalAlignment="Left"
|
||||||
Command="{Binding SubmitForReviewCommand}" />
|
Command="{Binding SubmitForReviewCommand}" />
|
||||||
<controls:OperationIndicator Status="{Binding SubmitOp}" />
|
<controls:OperationIndicator Status="{Binding SubmitOp}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -466,7 +466,7 @@
|
|||||||
|
|
||||||
<!-- Child outcomes -->
|
<!-- Child outcomes -->
|
||||||
<StackPanel Spacing="6" IsVisible="{Binding HasChildOutcomes}">
|
<StackPanel Spacing="6" IsVisible="{Binding HasChildOutcomes}">
|
||||||
<TextBlock Classes="section-label" Text="OUTCOMES" />
|
<TextBlock Classes="section-label" Text="{loc:Tr details.workConsole.outcomesLabel}" />
|
||||||
<ItemsControl ItemsSource="{Binding ChildOutcomes}">
|
<ItemsControl ItemsSource="{Binding ChildOutcomes}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate x:DataType="vm:ChildOutcomeRowViewModel">
|
<DataTemplate x:DataType="vm:ChildOutcomeRowViewModel">
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
<PathIcon Data="{StaticResource Icon.Warning}"
|
<PathIcon Data="{StaticResource Icon.Warning}"
|
||||||
Foreground="{DynamicResource StatusReviewBrush}"
|
Foreground="{DynamicResource StatusReviewBrush}"
|
||||||
Width="14" Height="14" VerticalAlignment="Center"/>
|
Width="14" Height="14" VerticalAlignment="Center"/>
|
||||||
<TextBlock Classes="section-label" Text="ROADBLOCK"
|
<TextBlock Classes="section-label" Text="{loc:Tr details.roadblockLabel}"
|
||||||
Foreground="{DynamicResource StatusReviewBrush}"
|
Foreground="{DynamicResource StatusReviewBrush}"
|
||||||
VerticalAlignment="Center"/>
|
VerticalAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
Reference in New Issue
Block a user