diff --git a/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml b/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml
index b6f28f0..7267e1f 100644
--- a/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml
+++ b/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml
@@ -4,77 +4,177 @@
x:Class="ClaudeDo.Ui.Views.Modals.ListSettingsModalView"
x:DataType="vm:ListSettingsModalViewModel"
Title="List settings"
- Width="520" Height="600"
+ Width="520" Height="720"
+ CanResize="True"
+ MinWidth="460" MinHeight="520"
+ SystemDecorations="None"
+ ExtendClientAreaToDecorationsHint="True"
WindowStartupLocation="CenterOwner"
- CanResize="False">
-
-
-
-
-
+ Background="{DynamicResource SurfaceBrush}">
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
+ HorizontalAlignment="Stretch">
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml.cs b/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml.cs
index fb91984..0ab8f3d 100644
--- a/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml.cs
+++ b/src/ClaudeDo.Ui/Views/Modals/ListSettingsModalView.axaml.cs
@@ -1,6 +1,8 @@
using Avalonia.Controls;
+using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Platform.Storage;
+using ClaudeDo.Data.Models;
using ClaudeDo.Ui.ViewModels.Modals;
namespace ClaudeDo.Ui.Views.Modals;
@@ -12,6 +14,63 @@ public partial class ListSettingsModalView : Window
InitializeComponent();
}
+ private void TitleBar_PointerPressed(object? sender, PointerPressedEventArgs e)
+ {
+ if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
+ BeginMoveDrag(e);
+ }
+
+ private async void BrowseAgentClicked(object? sender, RoutedEventArgs e)
+ {
+ if (DataContext is not ListSettingsModalViewModel vm) return;
+ var top = TopLevel.GetTopLevel(this);
+ if (top is null) return;
+
+ var files = await top.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
+ {
+ Title = "Choose agent file",
+ AllowMultiple = false,
+ FileTypeFilter = new[]
+ {
+ new FilePickerFileType("Agent files (*.md)") { Patterns = new[] { "*.md" } },
+ new FilePickerFileType("All files") { Patterns = new[] { "*" } },
+ },
+ });
+ if (files.Count == 0) return;
+
+ var path = files[0].Path.LocalPath;
+ var existing = vm.Agents.FirstOrDefault(a => string.Equals(a.Path, path, StringComparison.OrdinalIgnoreCase));
+ if (existing is not null)
+ {
+ vm.SelectedAgent = existing;
+ return;
+ }
+
+ var (name, description) = ReadFrontmatter(path);
+ var agent = new AgentInfo(name, description, path);
+ vm.Agents.Add(agent);
+ vm.SelectedAgent = agent;
+ }
+
+ private static (string name, string description) ReadFrontmatter(string filePath)
+ {
+ var fallback = System.IO.Path.GetFileNameWithoutExtension(filePath);
+ try
+ {
+ using var reader = new System.IO.StreamReader(filePath);
+ if (reader.ReadLine()?.Trim() != "---") return (fallback, "");
+ string name = fallback, description = "";
+ while (reader.ReadLine() is { } line)
+ {
+ if (line.Trim() == "---") break;
+ if (line.StartsWith("name:")) name = line["name:".Length..].Trim();
+ else if (line.StartsWith("description:")) description = line["description:".Length..].Trim();
+ }
+ return (name, description);
+ }
+ catch { return (fallback, ""); }
+ }
+
private async void BrowseClicked(object? sender, RoutedEventArgs e)
{
if (DataContext is not ListSettingsModalViewModel vm) return;
diff --git a/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml b/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml
index 9c41418..68dd089 100644
--- a/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml
+++ b/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml
@@ -4,77 +4,135 @@
x:Class="ClaudeDo.Ui.Views.Modals.MergeModalView"
x:DataType="vm:MergeModalViewModel"
Title="Merge worktree"
- Width="560" Height="420"
+ Width="560" Height="460"
CanResize="False"
- WindowStartupLocation="CenterOwner">
-
+ SystemDecorations="None"
+ ExtendClientAreaToDecorationsHint="True"
+ WindowStartupLocation="CenterOwner"
+ Background="{DynamicResource SurfaceBrush}">
-
+
+
+
-
-
-
-
+
+
+
+
-
+
+
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml.cs b/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml.cs
index 6beb7b6..ada6471 100644
--- a/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml.cs
+++ b/src/ClaudeDo.Ui/Views/Modals/MergeModalView.axaml.cs
@@ -1,4 +1,5 @@
using Avalonia.Controls;
+using Avalonia.Input;
using ClaudeDo.Ui.ViewModels.Modals;
namespace ClaudeDo.Ui.Views.Modals;
@@ -16,4 +17,10 @@ public partial class MergeModalView : Window
}
};
}
+
+ private void TitleBar_PointerPressed(object? sender, PointerPressedEventArgs e)
+ {
+ if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
+ BeginMoveDrag(e);
+ }
}