|
|
@@ -58,6 +58,11 @@ public sealed partial class MissionControlViewModel : ViewModelBase, IDisposable
|
|
|
|
// View-layer seam: open the app Settings modal from the Mission Control window.
|
|
|
|
// View-layer seam: open the app Settings modal from the Mission Control window.
|
|
|
|
public Action? OpenSettingsRequested { get; set; }
|
|
|
|
public Action? OpenSettingsRequested { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Set by the shell: bring Mission Control on screen. A ConPTY pane only launches its process once
|
|
|
|
|
|
|
|
// its view is attached, so a run started from outside the UI (start_list_handler MCP tool) or a
|
|
|
|
|
|
|
|
// handoff arriving while Mission Control is closed would otherwise sit there without a process.
|
|
|
|
|
|
|
|
public Action? OpenRequested { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public bool HasPanes => Panes.Count > 0;
|
|
|
|
public bool HasPanes => Panes.Count > 0;
|
|
|
|
|
|
|
|
|
|
|
|
// Read-only activity strip. Beyond the queue itself (Queued/Running) it also carries the rows
|
|
|
|
// Read-only activity strip. Beyond the queue itself (Queued/Running) it also carries the rows
|
|
|
@@ -100,7 +105,7 @@ public sealed partial class MissionControlViewModel : ViewModelBase, IDisposable
|
|
|
|
_onHandoffRequested = (taskId, survivingTaskIds, nextPhase) => { _ = OpenMergeHelperHandoffConPtySessionAsync(taskId, survivingTaskIds, nextPhase); };
|
|
|
|
_onHandoffRequested = (taskId, survivingTaskIds, nextPhase) => { _ = OpenMergeHelperHandoffConPtySessionAsync(taskId, survivingTaskIds, nextPhase); };
|
|
|
|
_worker.HandoffRequestedEvent += _onHandoffRequested;
|
|
|
|
_worker.HandoffRequestedEvent += _onHandoffRequested;
|
|
|
|
|
|
|
|
|
|
|
|
_onListHandlerStartRequested = (listId, taskIds) => { _ = OpenMergeHelperConPtySessionAsync(listId, taskIds); };
|
|
|
|
_onListHandlerStartRequested = (listId, taskIds) => { OpenRequested?.Invoke(); _ = OpenMergeHelperConPtySessionAsync(listId, taskIds); };
|
|
|
|
_worker.ListHandlerStartRequestedEvent += _onListHandlerStartRequested;
|
|
|
|
_worker.ListHandlerStartRequestedEvent += _onListHandlerStartRequested;
|
|
|
|
_onHandlerUsageWarning = (taskId, message) => { _ = WarnHandlerSessionAsync(taskId, message); };
|
|
|
|
_onHandlerUsageWarning = (taskId, message) => { _ = WarnHandlerSessionAsync(taskId, message); };
|
|
|
|
_worker.HandlerUsageWarningEvent += _onHandlerUsageWarning;
|
|
|
|
_worker.HandlerUsageWarningEvent += _onHandlerUsageWarning;
|
|
|
@@ -390,6 +395,7 @@ public sealed partial class MissionControlViewModel : ViewModelBase, IDisposable
|
|
|
|
string taskId, IReadOnlyList<string> survivingTaskIds, string nextPhase)
|
|
|
|
string taskId, IReadOnlyList<string> survivingTaskIds, string nextPhase)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (string.IsNullOrEmpty(taskId) || survivingTaskIds is not { Count: > 0 }) return;
|
|
|
|
if (string.IsNullOrEmpty(taskId) || survivingTaskIds is not { Count: > 0 }) return;
|
|
|
|
|
|
|
|
OpenRequested?.Invoke();
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var stale in ConPtySessions.Where(s => s.TaskId == taskId).ToList())
|
|
|
|
foreach (var stale in ConPtySessions.Where(s => s.TaskId == taskId).ToList())
|
|
|
|
CloseConPtySession(stale);
|
|
|
|
CloseConPtySession(stale);
|
|
|
|