TaskDetailView now edits Model / SystemPrompt / Agent inline (LostFocus save), matching the modal editor. Both TaskEditorView and TaskDetailView gain a Browse button that opens a .md file picker — external agent paths are preserved on reload via a synthetic AgentInfo entry. Both views also render the per-task subtask checklist (CheckBox + TextBox + remove), with diff-on-save in the editor and inline-save in the detail panel. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
102 lines
5.4 KiB
XML
102 lines
5.4 KiB
XML
<Window xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:vm="using:ClaudeDo.Ui.ViewModels"
|
|
xmlns:models="using:ClaudeDo.Data.Models"
|
|
x:Class="ClaudeDo.Ui.Views.TaskEditorView"
|
|
x:DataType="vm:TaskEditorViewModel"
|
|
Title="{Binding WindowTitle}"
|
|
Width="500" Height="600"
|
|
WindowStartupLocation="CenterOwner"
|
|
CanResize="False"
|
|
Background="{StaticResource WindowBgBrush}">
|
|
<StackPanel Margin="16" Spacing="10">
|
|
<TextBlock Text="Title" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<TextBox Text="{Binding Title}" PlaceholderText="Task title..."/>
|
|
|
|
<TextBlock Text="Description" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<TextBox Text="{Binding Description}" PlaceholderText="(optional)" AcceptsReturn="True"
|
|
TextWrapping="Wrap" MinHeight="80"/>
|
|
|
|
<Grid ColumnDefinitions="*,16,*">
|
|
<StackPanel Grid.Column="0" Spacing="4">
|
|
<TextBlock Text="Status" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<ComboBox ItemsSource="{Binding StatusChoices}"
|
|
SelectedItem="{Binding StatusChoice}"
|
|
MinWidth="120"/>
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="2" Spacing="4">
|
|
<TextBlock Text="Commit Type" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<ComboBox ItemsSource="{Binding CommitTypes}"
|
|
SelectedItem="{Binding CommitType}"
|
|
MinWidth="120"/>
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
<TextBlock Text="Tags (comma-separated)" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<TextBox Text="{Binding TagsInput}" PlaceholderText="agent, manual, code, ..."/>
|
|
|
|
<!-- Sub-Tasks -->
|
|
<Border Height="1" Background="{StaticResource BorderSubtleBrush}" Margin="0,6,0,2"/>
|
|
<TextBlock Text="Sub-Tasks" FontWeight="Bold" FontSize="13"
|
|
Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
<ItemsControl ItemsSource="{Binding Subtasks}">
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate x:DataType="vm:SubtaskItemViewModel">
|
|
<StackPanel Orientation="Horizontal" Spacing="6" Margin="0,2,0,2">
|
|
<CheckBox IsChecked="{Binding Completed}" VerticalAlignment="Center"/>
|
|
<TextBox Text="{Binding Title}" PlaceholderText="Subtask title..." Width="320"
|
|
VerticalAlignment="Center"/>
|
|
<Button Content="✕" Padding="6,2"
|
|
Background="Transparent" BorderThickness="0"
|
|
Foreground="{StaticResource TextMutedBrush}"
|
|
Command="{Binding $parent[Window].((vm:TaskEditorViewModel)DataContext).RemoveSubtaskCommand}"
|
|
CommandParameter="{Binding}"/>
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
<Button Content="+ Add Sub-Task" Command="{Binding AddSubtaskCommand}"
|
|
Background="Transparent" BorderThickness="0"
|
|
Foreground="{StaticResource AccentLightBrush}" HorizontalAlignment="Left"/>
|
|
|
|
<!-- Divider -->
|
|
<Border Height="1" Background="{StaticResource BorderSubtleBrush}" Margin="0,6,0,2"/>
|
|
|
|
<TextBlock Text="Agent Config (overrides)" FontWeight="Bold" FontSize="13"
|
|
Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
|
|
<TextBlock Text="Model" FontWeight="SemiBold"
|
|
Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<ComboBox ItemsSource="{Binding ModelChoices}"
|
|
SelectedItem="{Binding ModelChoice}"
|
|
MinWidth="150"/>
|
|
|
|
<TextBlock Text="System Prompt" FontWeight="SemiBold"
|
|
Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<TextBox Text="{Binding SystemPromptOverride}"
|
|
PlaceholderText="(inherits from list)"
|
|
AcceptsReturn="True" TextWrapping="Wrap" MinHeight="50"/>
|
|
|
|
<TextBlock Text="Agent File" FontWeight="SemiBold"
|
|
Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
|
<ComboBox ItemsSource="{Binding AvailableAgents}"
|
|
SelectedItem="{Binding SelectedAgent}"
|
|
MinWidth="150">
|
|
<ComboBox.ItemTemplate>
|
|
<DataTemplate x:DataType="models:AgentInfo">
|
|
<TextBlock Text="{Binding Name}"/>
|
|
</DataTemplate>
|
|
</ComboBox.ItemTemplate>
|
|
</ComboBox>
|
|
<Button Content="…" Click="OnBrowseAgent" ToolTip.Tip="Browse for agent .md file"/>
|
|
</StackPanel>
|
|
|
|
<StackPanel Orientation="Horizontal" Spacing="8" HorizontalAlignment="Right" Margin="0,10,0,0">
|
|
<Button Content="Save" Command="{Binding SaveCommand}" IsDefault="True" MinWidth="80"
|
|
Background="{StaticResource AccentBrush}" Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
<Button Content="Cancel" Command="{Binding CancelCommand}" IsCancel="True" MinWidth="80"/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Window>
|