authorgravatar for jakeleventhal@me.comJake Leventhal <jakeleventhal@me.com> 2026-10-03 10:54:10-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-10-03 09:54:10-05:00
loga0bf1eee48d1537ec38e0f1fa5243f10ffd4e870
tree90a2b645f7bdaa4d310f12555354ead7890ef6d7
parent44b49650170a76e6171642d6f8de946cf1d1c821
signature Signed by PGP key B5690EEEBB952194

fix(mobile): a dev server left running no longer shows the waiting bolt (#15194)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

3 files changed, 15 insertions(+), 6 deletions(-)

apps/mobile/src/features/threads/ThreadDetailScreen.tsx+2-1
......@@ -474,11 +474,12 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread
474474 }
475475 if (pendingBackgroundWork !== null && contentPresentationKind === "ready") {
476476 return {
477 kind: "waiting",
477 kind: "background",
478478 label: pendingBackgroundWork.title,
479479 accessibilityLabel: `${pendingBackgroundWork.title}: ${pendingBackgroundWork.items
480480 .map((item) => item.label)
481481 .join(", ")}`,
482 waiting: pendingBackgroundWork.waiting,
482483 };
483484 }
484485 return null;
apps/mobile/src/features/threads/floating-working-control.tsx+5-3
......@@ -385,16 +385,18 @@ function FloatingStatusLabel(props: {
385385 </StatusLabelRow>
386386 );
387387 }
388 if (props.status.kind === "waiting") {
388 if (props.status.kind === "background") {
389389 return (
390390 <StatusLabelRow
391 key="waiting"
391 key="background"
392392 accessibilityLabel={props.status.accessibilityLabel}
393393 className="gap-2"
394394 onLayout={props.onLayout}
395395 >
396 {/* A dev server can run for hours after the agent is done, so only work
397 that will wake the agent gets the bolt. */}
396398 <SymbolView
397 name={{ ios: "bolt", android: "bolt" }}
399 name={props.status.waiting ? { ios: "bolt", android: "bolt" } : "terminal"}
398400 size={13}
399401 tintColorClassName="foreground"
400402 type="monochrome"
apps/mobile/src/features/threads/floating-working-status.ts+8-2
......@@ -9,8 +9,14 @@ export type FloatingWorkingStatus =
99 | { readonly kind: "working"; readonly startedAt: string }
1010 | { readonly kind: "syncing"; readonly label: string }
1111 | { readonly kind: "compacting" }
12 // The turn settled while background work it started still runs.
13 | { readonly kind: "waiting"; readonly label: string; readonly accessibilityLabel: string }
12 // The turn settled while background work it started still runs. `waiting`
13 // is false when only commands remain, such as a dev server: the agent is done.
14 | {
15 readonly kind: "background";
16 readonly label: string;
17 readonly accessibilityLabel: string;
18 readonly waiting: boolean;
19 }
1420 // A task whose thread the server has not created yet: the worktree may
1521 // still be checking out, so there is no turn to time.
1622 | { readonly kind: "preparing"; readonly label: string }