From cb864a10996dd4c409b198989152f315ef54af3a Mon Sep 17 00:00:00 2001 From: Theo Browne Date: Sat, 3 Oct 2026 02:03:15 -0700 Subject: [PATCH] fix(clients): a command left running no longer says the thread is waiting When only commands remain after a turn, such as a dev server, the composer strip now says "Running: " with a still dot. Work that wakes the agent (subagents, monitors) keeps "Waiting on ..." and the pulse. Mobile reads the same title. Co-Authored-By: Claude Opus 5.5 (1M context) --- apps/web/src/components/ChatView.tsx | 9 +++-- .../src/state/threadExecution.test.ts | 30 +++++++++++++++-- .../src/state/threadExecution.ts | 33 ++++++++++++++----- 3 files changed, 60 insertions(+), 12 deletions(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 8e105a49f37f..fe72ec446d34 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -6859,7 +6859,7 @@ export default function ChatView(props: ChatViewProps) { // The stack renders items[0] front-most and tucks the rest behind hover, so // ordering is priority: system banners, then the branch-mismatch notice, // and the informational parked-thread banner last — it must never cover another. - // Background work (subagent fleets, workflow runs, watch loops) can outlive + // Background work (subagent fleets, workflow runs, watch loops, dev servers) can outlive // the turn; once it settles, the composer stop button is gone, so this // banner is the only visible stop affordance. The interrupt path also // accepts a completed run while its provider still has background work. @@ -6907,9 +6907,14 @@ export default function ChatView(props: ChatViewProps) { id: `background-work:${activeThread.id}`, variant: "default", priority: "activity", + // A dev server can run for hours after the agent is done, so only work + // that will wake the agent pulses. icon: (