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 @@
-
-
+
+
+