Merge claudedo/5d8e6246af9444afa500fbb4546873e7

This commit is contained in:
mika kuns
2026-08-05 22:43:41 +02:00
5 changed files with 29 additions and 1 deletions
@@ -133,6 +133,7 @@
"tasks": {
"showCompletedTip": "Abgeschlossene anzeigen",
"letClaudeTip": "Claude machen lassen",
"quickClaudeTip": "Schnelle Claude-Sitzung",
"listSettingsTip": "Listeneinstellungen",
"addPlaceholder": "Aufgabe hinzufügen…",
"enterKey": "ENTER",
@@ -133,6 +133,7 @@
"tasks": {
"showCompletedTip": "Show completed",
"letClaudeTip": "Let Claude handle it",
"quickClaudeTip": "Quick Claude session",
"listSettingsTip": "List settings",
"addPlaceholder": "Add a task…",
"enterKey": "ENTER",
@@ -73,12 +73,25 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable
[ObservableProperty] private bool _showNotesRow;
[ObservableProperty] private bool _isMyDayList;
[ObservableProperty] private bool _isLetClaudeVisible;
[ObservableProperty] private bool _isQuickClaudeVisible;
public event EventHandler? LetClaudeHandleRequested;
[RelayCommand]
private void LetClaudeHandle() => LetClaudeHandleRequested?.Invoke(this, EventArgs.Empty);
// Opens a task-less ConPTY session directly in the current list's working dir. The shell owns
// Mission Control, so this just raises an event for it to act on (mirrors OpenConPtySessionRequested).
public event Action<string>? OpenQuickClaudeSessionRequested;
[RelayCommand]
private void OpenQuickClaudeSession()
{
var dir = _currentList?.WorkingDir;
if (string.IsNullOrWhiteSpace(dir) || !System.IO.Directory.Exists(dir)) return;
OpenQuickClaudeSessionRequested?.Invoke(dir);
}
internal Task? LoadTask { get; private set; }
public Func<UnfinishedPlanningModalViewModel, Task>? ShowUnfinishedPlanningModal { get; set; }
@@ -221,7 +234,10 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable
if (e.PropertyName == nameof(ListNavItemViewModel.Name))
HeaderTitle = vm.Name;
else if (e.PropertyName == nameof(ListNavItemViewModel.WorkingDir))
{
IsLetClaudeVisible = vm.Kind == ListKind.User && !string.IsNullOrWhiteSpace(vm.WorkingDir);
IsQuickClaudeVisible = IsLetClaudeVisible;
}
}
public void LoadForList(ListNavItemViewModel? list)
@@ -259,13 +275,14 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable
ShowOpenLabel = false;
ShowNotesRow = false;
if (listChanged) SelectedTask = null;
if (list is null) { IsLetClaudeVisible = false; LoadTask = Task.CompletedTask; return; }
if (list is null) { IsLetClaudeVisible = false; IsQuickClaudeVisible = false; LoadTask = Task.CompletedTask; return; }
HeaderTitle = list.Name;
HeaderEyebrow = DateTime.Now.ToString("dddd · MMM dd", CultureInfo.InvariantCulture).ToUpperInvariant();
ShowNotesRow = list.Id == "smart:my-day";
IsMyDayList = list.Id == "smart:my-day";
IsLetClaudeVisible = list.Kind == ListKind.User && !string.IsNullOrWhiteSpace(list.WorkingDir);
IsQuickClaudeVisible = IsLetClaudeVisible;
LoadTask = LoadForListAsync(list, ct, reusable);
}
@@ -242,6 +242,11 @@ public sealed partial class IslandsShellViewModel : ViewModelBase, IDisposable
OpenMissionControl();
_ = MissionControl.OpenConPtySessionAsync(taskId);
};
Tasks.OpenQuickClaudeSessionRequested += dir =>
{
OpenMissionControl();
_ = MissionControl.OpenAdHocConPtySessionAsync(dir);
};
Tasks.OpenPlanningConPtyRequested += (taskId, resume) =>
{
OpenMissionControl();
@@ -37,6 +37,10 @@
Command="{Binding LetClaudeHandleCommand}" ToolTip.Tip="{loc:Tr tasks.letClaudeTip}">
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.AgentSuggested}"/>
</Button>
<Button Classes="icon-btn" IsVisible="{Binding IsQuickClaudeVisible}"
Command="{Binding OpenQuickClaudeSessionCommand}" ToolTip.Tip="{loc:Tr tasks.quickClaudeTip}">
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Plus}"/>
</Button>
<Button Classes="icon-btn" IsVisible="{Binding IsMyDayList}"
Command="{Binding ClearDayCommand}" ToolTip.Tip="{loc:Tr tasks.clearDayTip}">
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Broom}"/>