From ecbc73495cc945d4b1ad7636198f6cda6ec9557c Mon Sep 17 00:00:00 2001 From: mika kuns Date: Fri, 24 Jul 2026 14:15:24 +0200 Subject: [PATCH] feat(ui): add "Let Claude handle it" entry points --- src/ClaudeDo.Localization/locales/de.json | 4 ++- src/ClaudeDo.Localization/locales/en.json | 4 ++- .../Islands/ListsIslandViewModel.cs | 32 +++++++++++++++++++ .../Views/Islands/ListsIslandView.axaml | 16 ++++++++-- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/ClaudeDo.Localization/locales/de.json b/src/ClaudeDo.Localization/locales/de.json index 548d2eaa..ee2a7e19 100644 --- a/src/ClaudeDo.Localization/locales/de.json +++ b/src/ClaudeDo.Localization/locales/de.json @@ -173,8 +173,10 @@ "contextWorktrees": "Worktrees…", "contextOpenExplorer": "Im Explorer öffnen", "contextOpenTerminal": "Im Terminal öffnen", + "contextLetClaude": "Claude machen lassen", "newList": "Neue Liste", - "addReposTip": "Repos als Listen hinzufügen" + "addReposTip": "Repos als Listen hinzufügen", + "letClaudeAllTip": "Claude machen lassen (alle Listen)" }, "details": { "pickUpInTerminalTip": "Diese Sitzung im Terminal fortsetzen", diff --git a/src/ClaudeDo.Localization/locales/en.json b/src/ClaudeDo.Localization/locales/en.json index 2ec04a2c..72cdde68 100644 --- a/src/ClaudeDo.Localization/locales/en.json +++ b/src/ClaudeDo.Localization/locales/en.json @@ -173,8 +173,10 @@ "contextWorktrees": "Worktrees…", "contextOpenExplorer": "Open in Explorer", "contextOpenTerminal": "Open in Terminal", + "contextLetClaude": "Let Claude handle it", "newList": "New list", - "addReposTip": "Add repos as lists" + "addReposTip": "Add repos as lists", + "letClaudeAllTip": "Let Claude handle it (all lists)" }, "details": { "pickUpInTerminalTip": "Pick up this session in a terminal", diff --git a/src/ClaudeDo.Ui/ViewModels/Islands/ListsIslandViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Islands/ListsIslandViewModel.cs index 5ddba2e9..2e959a36 100644 --- a/src/ClaudeDo.Ui/ViewModels/Islands/ListsIslandViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Islands/ListsIslandViewModel.cs @@ -16,6 +16,9 @@ namespace ClaudeDo.Ui.ViewModels.Islands; public enum ListKind { Smart, Virtual, User } +/// Confirmed merge-helper run: the scope list (null = all lists) and the ordered selected task ids. +public sealed record MergeHelperRequest(string? ListId, IReadOnlyList TaskIds); + public sealed partial class ListsIslandViewModel : ViewModelBase, IDisposable { private readonly IDbContextFactory _dbFactory; @@ -80,6 +83,35 @@ public sealed partial class ListsIslandViewModel : ViewModelBase, IDisposable finally { _worktreesOverviewOpen = false; } } + /// Raised after the merge-helper selection dialog is confirmed; the shell opens the ConPTY tile. + public event Action? LetClaudeHandleRequested; + + [RelayCommand] + private async Task LetClaudeHandleListAsync(ListNavItemViewModel? row) + { + if (row is null || Dialogs is null || _services is null) return; + if (row.Kind != ListKind.User || string.IsNullOrWhiteSpace(row.WorkingDir)) return; + var rawId = row.Id.StartsWith("user:", StringComparison.Ordinal) ? row.Id["user:".Length..] : row.Id; + var vm = _services.GetRequiredService(); + vm.Configure(rawId, row.Name); + await vm.LoadAsync(); + var ids = await Dialogs.ShowMergeHelperSelectionAsync(vm); + if (ids is { Count: > 0 }) + LetClaudeHandleRequested?.Invoke(new MergeHelperRequest(rawId, ids)); + } + + [RelayCommand] + private async Task LetClaudeHandleAllAsync() + { + if (Dialogs is null || _services is null) return; + var vm = _services.GetRequiredService(); + vm.Configure(null, null); + await vm.LoadAsync(); + var ids = await Dialogs.ShowMergeHelperSelectionAsync(vm); + if (ids is { Count: > 0 }) + LetClaudeHandleRequested?.Invoke(new MergeHelperRequest(null, ids)); + } + [RelayCommand] private void OpenInExplorer(ListNavItemViewModel? row) { diff --git a/src/ClaudeDo.Ui/Views/Islands/ListsIslandView.axaml b/src/ClaudeDo.Ui/Views/Islands/ListsIslandView.axaml index 992bacf9..679781db 100644 --- a/src/ClaudeDo.Ui/Views/Islands/ListsIslandView.axaml +++ b/src/ClaudeDo.Ui/Views/Islands/ListsIslandView.axaml @@ -137,6 +137,11 @@ IsVisible="{Binding WorkingDir, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" Command="{Binding $parent[UserControl].((vm:ListsIslandViewModel)DataContext).OpenInTerminalCommand}" CommandParameter="{Binding}"/> + + @@ -176,8 +181,8 @@ - - + + +