From c93a20f20c3534155a552e7c76447aa3a3413a4e Mon Sep 17 00:00:00 2001 From: Mika Kuns Date: Mon, 27 Jul 2026 13:35:17 +0200 Subject: [PATCH] feat(ui): Interactive chip for tasks with an open ConPTY session MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A task driven by hand in Mission Control is Idle with an Active worktree, so its lifecycle chip read "Parked" — indistinguishable from a task genuinely set aside. The shell now mirrors Mission Control's open panes onto the rows, which show an accent "Interactive" chip instead; tapping it surfaces Mission Control and focuses that pane (the open command already dedupes by task id). --- src/ClaudeDo.Localization/locales/de.json | 3 +- src/ClaudeDo.Localization/locales/en.json | 3 +- src/ClaudeDo.Ui/Design/IslandStyles.axaml | 15 ++++++++ .../ViewModels/Islands/TaskRowViewModel.cs | 38 ++++++++++++++++--- .../Islands/TasksIslandViewModel.cs | 15 ++++++++ .../ViewModels/IslandsShellViewModel.cs | 12 ++++++ .../Views/Islands/TaskRowView.axaml | 6 ++- .../Views/Islands/TaskRowView.axaml.cs | 9 +++++ 8 files changed, 92 insertions(+), 9 deletions(-) diff --git a/src/ClaudeDo.Localization/locales/de.json b/src/ClaudeDo.Localization/locales/de.json index 195d61e7..e4e661f5 100644 --- a/src/ClaudeDo.Localization/locales/de.json +++ b/src/ClaudeDo.Localization/locales/de.json @@ -152,6 +152,7 @@ "removeFromQueueTip": "Aus Warteschlange entfernen", "toggleSubtasksTip": "Unteraufgaben ein-/ausklappen", "agentSuggestedTip": "Vom Agenten vorgeschlagen", + "interactiveChipTip": "Interaktive Sitzung offen — klicken, um im Mission Control dorthin zu springen", "scheduleTitle": "Aufgabe planen", "scheduleWhen": "WANN", "scheduleConfirm": "Planen", @@ -523,7 +524,7 @@ "connection": { "online": "Online", "connecting": "Verbinden…", "offline": "Offline" }, "shell": { "restartingWorker": "Worker wird neu gestartet…" }, "agentStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "review": "Prüfung", "children": "Wartet auf Teilaufgaben", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen" }, - "taskStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "waitingForReview": "Wartet auf Prüfung", "waitingForChildren": "Wartet auf Teilaufgaben", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen", "parked": "Geparkt" }, + "taskStatus": { "idle": "Leerlauf", "queued": "In Warteschlange", "running": "Läuft", "waitingForReview": "Wartet auf Prüfung", "waitingForChildren": "Wartet auf Teilaufgaben", "done": "Fertig", "failed": "Fehlgeschlagen", "cancelled": "Abgebrochen", "parked": "Geparkt", "interactive": "Interaktiv" }, "planningBadge": { "active": "PLANUNG", "finalized": "GEPLANT" }, "taskRow": { "createdPrefix": "Erstellt {0}", "stepsText": "{0}/{1} Schritte" }, "tasksIsland": { "completedHeader": "ABGESCHLOSSEN", "completedHeaderCount": "ABGESCHLOSSEN · {0}", "planningOpenFailed": "Planungssitzung konnte nicht geöffnet werden: {0}", "planningResumeFailed": "Planungssitzung konnte nicht fortgesetzt werden: {0}", "pickUpInTerminalFailed": "Im Terminal fortsetzen fehlgeschlagen: {0}", "approveFailed": "Genehmigen & Mergen fehlgeschlagen: {0}" }, diff --git a/src/ClaudeDo.Localization/locales/en.json b/src/ClaudeDo.Localization/locales/en.json index 251147da..70f26da1 100644 --- a/src/ClaudeDo.Localization/locales/en.json +++ b/src/ClaudeDo.Localization/locales/en.json @@ -152,6 +152,7 @@ "removeFromQueueTip": "Remove from queue", "toggleSubtasksTip": "Expand / collapse subtasks", "agentSuggestedTip": "Suggested by the agent", + "interactiveChipTip": "Interactive session open — click to jump to it in Mission Control", "scheduleTitle": "Schedule task", "scheduleWhen": "WHEN", "scheduleConfirm": "Schedule", @@ -523,7 +524,7 @@ "connection": { "online": "Online", "connecting": "Connecting…", "offline": "Offline" }, "shell": { "restartingWorker": "Restarting worker…" }, "agentStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "review": "Review", "children": "Waiting for Subtasks", "done": "Done", "failed": "Failed", "cancelled": "Cancelled" }, - "taskStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "waitingForReview": "Waiting for Review", "waitingForChildren": "Waiting for Subtasks", "done": "Done", "failed": "Failed", "cancelled": "Cancelled", "parked": "Parked" }, + "taskStatus": { "idle": "Idle", "queued": "Queued", "running": "Running", "waitingForReview": "Waiting for Review", "waitingForChildren": "Waiting for Subtasks", "done": "Done", "failed": "Failed", "cancelled": "Cancelled", "parked": "Parked", "interactive": "Interactive" }, "planningBadge": { "active": "PLANNING", "finalized": "PLANNED" }, "taskRow": { "createdPrefix": "Created {0}", "stepsText": "{0}/{1} steps" }, "tasksIsland": { "completedHeader": "COMPLETED", "completedHeaderCount": "COMPLETED · {0}", "planningOpenFailed": "Couldn't open planning session: {0}", "planningResumeFailed": "Couldn't resume planning session: {0}", "pickUpInTerminalFailed": "Pick up in terminal failed: {0}", "approveFailed": "Approve & merge failed: {0}" }, diff --git a/src/ClaudeDo.Ui/Design/IslandStyles.axaml b/src/ClaudeDo.Ui/Design/IslandStyles.axaml index 3169b4e9..bf78db41 100644 --- a/src/ClaudeDo.Ui/Design/IslandStyles.axaml +++ b/src/ClaudeDo.Ui/Design/IslandStyles.axaml @@ -247,6 +247,21 @@ + + + + +