Kontext: src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs ist mit 1431 Zeilen ein God-VM mit ~12 Concerns (Log-Streaming, Titel/Description-Editing, Subtasks, Child-Outcomes, Merge-Preview/-Targets, Diff, Agent-Settings-Overrides, Notes-Mode, Prep-Mode, Tabs, Session-Outcome/Roadblocks, Worktree-Info). Jedes neue Feature landet dort. Änderungen — drei klar abgrenzbare Sektionen als ei ClaudeDo-Task: 483e419f-1ec8-46ba-986b-8b90d6596b49
126 lines
6.5 KiB
XML
126 lines
6.5 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
|
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
|
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
|
x:Class="ClaudeDo.Ui.Views.Islands.Detail.TaskHeaderBar"
|
|
x:DataType="vm:DetailsIslandViewModel">
|
|
|
|
<Grid ColumnDefinitions="*,Auto,Auto">
|
|
|
|
<!-- Column 0: id badge + editable title -->
|
|
<StackPanel Grid.Column="0" Spacing="0">
|
|
<TextBlock Classes="meta"
|
|
Text="{Binding TaskIdBadge}"
|
|
Margin="0,0,0,4"
|
|
Cursor="Hand"
|
|
ToolTip.Tip="{loc:Tr details.copyTaskIdTip}"
|
|
Tapped="OnTaskIdTapped"/>
|
|
<TextBox Text="{Binding EditableTitle, Mode=TwoWay}"
|
|
Background="Transparent"
|
|
BorderThickness="0"
|
|
FontSize="{StaticResource FontSizeTaskTitle}"
|
|
FontWeight="Medium"
|
|
Foreground="{DynamicResource TextBrush}"
|
|
TextWrapping="Wrap"
|
|
AcceptsReturn="False"
|
|
Padding="0"/>
|
|
</StackPanel>
|
|
|
|
<!-- Column 1: trash button (not running) -->
|
|
<Button Grid.Column="1" Classes="icon-btn"
|
|
Command="{Binding DeleteTaskCommand}"
|
|
ToolTip.Tip="{loc:Tr details.deleteTaskTip}"
|
|
IsVisible="{Binding !IsRunning}"
|
|
VerticalAlignment="Top"
|
|
Margin="6,0,0,0">
|
|
<PathIcon Data="{StaticResource Icon.Trash}" Width="14" Height="14"
|
|
Foreground="{DynamicResource BloodBrush}"/>
|
|
</Button>
|
|
|
|
<!-- Column 1: skull button (running) -->
|
|
<Button Grid.Column="1" Classes="icon-btn"
|
|
Command="{Binding StopCommand}"
|
|
ToolTip.Tip="{loc:Tr details.killSessionTip}"
|
|
IsVisible="{Binding IsRunning}"
|
|
VerticalAlignment="Top"
|
|
Margin="6,0,0,0">
|
|
<PathIcon Data="{StaticResource Icon.Skull}" Width="14" Height="14"
|
|
Foreground="{DynamicResource BloodBrush}"/>
|
|
</Button>
|
|
|
|
<!-- Column 2: gear button with agent settings flyout -->
|
|
<Button Grid.Column="2" Classes="icon-btn"
|
|
ToolTip.Tip="{loc:Tr details.agentSettingsTip}"
|
|
IsEnabled="{Binding AgentSettings.IsAgentSectionEnabled}"
|
|
VerticalAlignment="Top"
|
|
Margin="6,0,0,0">
|
|
<TextBlock Text="⚙" FontSize="{StaticResource FontSizeTaskTitle}"/>
|
|
<Button.Flyout>
|
|
<Flyout Placement="BottomEdgeAlignedRight" ShowMode="Standard">
|
|
<StackPanel Width="340" Spacing="10" Margin="4">
|
|
<TextBlock Text="{loc:Tr details.agentSettingsHeading}" FontWeight="SemiBold"/>
|
|
|
|
<StackPanel Spacing="2">
|
|
<Grid ColumnDefinitions="Auto,Auto,*,Auto" ColumnSpacing="6">
|
|
<TextBlock Grid.Column="0" Classes="field-label" Text="{loc:Tr details.modelLabel}" VerticalAlignment="Center"/>
|
|
<ctl:InheritedBadge Grid.Column="1" BadgeText="{Binding AgentSettings.ModelBadge}"/>
|
|
<Button Grid.Column="3" Classes="icon-btn" Content="↺" ToolTip.Tip="{loc:Tr settings.inherit.resetToInherited}"
|
|
Command="{Binding AgentSettings.ResetTaskModelCommand}"/>
|
|
</Grid>
|
|
<ComboBox ItemsSource="{Binding AgentSettings.TaskModelOptions}"
|
|
SelectedItem="{Binding AgentSettings.TaskModelSelection, Mode=TwoWay}"
|
|
PlaceholderText="{Binding AgentSettings.ModelInheritedHint}"
|
|
HorizontalAlignment="Stretch"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Spacing="2">
|
|
<Grid ColumnDefinitions="Auto,Auto,*,Auto" ColumnSpacing="6">
|
|
<TextBlock Grid.Column="0" Classes="field-label" Text="{loc:Tr details.maxTurnsLabel}" VerticalAlignment="Center"/>
|
|
<ctl:InheritedBadge Grid.Column="1" BadgeText="{Binding AgentSettings.TurnsBadge}"/>
|
|
<Button Grid.Column="3" Classes="icon-btn" Content="↺" ToolTip.Tip="{loc:Tr settings.inherit.resetToInherited}"
|
|
Command="{Binding AgentSettings.ResetTaskTurnsCommand}"/>
|
|
</Grid>
|
|
<NumericUpDown Value="{Binding AgentSettings.TaskMaxTurns, Mode=TwoWay}"
|
|
PlaceholderText="{Binding AgentSettings.TurnsInheritedHint}"
|
|
Minimum="1" Maximum="200" Increment="1" FormatString="0"
|
|
HorizontalAlignment="Stretch"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Spacing="2">
|
|
<TextBlock Classes="field-label" Text="{loc:Tr details.systemPromptLabel}"/>
|
|
<TextBox Text="{Binding AgentSettings.TaskSystemPrompt, Mode=TwoWay}"
|
|
AcceptsReturn="True" TextWrapping="Wrap" MinHeight="70"/>
|
|
<TextBlock Classes="meta" Opacity="0.6"
|
|
Text="{loc:Tr details.systemPromptPrepended}"
|
|
IsVisible="{Binding AgentSettings.EffectiveSystemPromptHint, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
|
<TextBlock Classes="meta" Opacity="0.6" TextWrapping="Wrap"
|
|
Text="{Binding AgentSettings.EffectiveSystemPromptHint}"
|
|
IsVisible="{Binding AgentSettings.EffectiveSystemPromptHint, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Spacing="2">
|
|
<Grid ColumnDefinitions="Auto,Auto,*,Auto" ColumnSpacing="6">
|
|
<TextBlock Grid.Column="0" Classes="field-label" Text="{loc:Tr details.agentFileLabel}" VerticalAlignment="Center"/>
|
|
<ctl:InheritedBadge Grid.Column="1" BadgeText="{Binding AgentSettings.AgentBadge}"/>
|
|
<Button Grid.Column="3" Classes="icon-btn" Content="↺" ToolTip.Tip="{loc:Tr settings.inherit.resetToInherited}"
|
|
Command="{Binding AgentSettings.ResetTaskAgentCommand}"/>
|
|
</Grid>
|
|
<ComboBox ItemsSource="{Binding AgentSettings.TaskAgentOptions}"
|
|
SelectedItem="{Binding AgentSettings.TaskSelectedAgent, Mode=TwoWay}"
|
|
HorizontalAlignment="Stretch">
|
|
<ComboBox.ItemTemplate>
|
|
<DataTemplate>
|
|
<TextBlock Text="{Binding Name}"/>
|
|
</DataTemplate>
|
|
</ComboBox.ItemTemplate>
|
|
</ComboBox>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Flyout>
|
|
</Button.Flyout>
|
|
</Button>
|
|
|
|
</Grid>
|
|
</UserControl>
|