Skip to content

fix: mobile session header duplication, composer overflow, stuck mock state - #10

Merged
danielglh merged 1 commit into
mainfrom
fix/mobile-header-dup-and-composer-overflow
Aug 29, 2026
Merged

fix: mobile session header duplication, composer overflow, stuck mock state#10
danielglh merged 1 commit into
mainfrom
fix/mobile-header-dup-and-composer-overflow

Conversation

@danielglh

Copy link
Copy Markdown
Owner

Seen in the wild

Two visible bugs on a 390px viewport (plus one mock bug found while reproducing them):

Duplicated header actions. On narrow screens the theme/settings/logout buttons appeared twice — once in the mobile top bar, once in the session header. The session header now only renders them on lg+ (the session list page already followed this pattern; the session page didn't).

Composer overflow. The composer's control row was entirely shrink-0; on a phone the plus/mode/model/thinking/primary buttons summed wider than the box, so the row overflowed and the round send/stop button poked out of the composer border (bottom-right box in the report). The button group is now elastic: the model chip carries min-w-0 and truncates its label as space gets tight, while the badge, thinking chip, and primary button keep fixed width. Verified at 390px in idle, queueing (stop), and after reload.

Mock host lied about its state (found while reproducing).

  • The canned turn never cleared its stream timer, so get_state reported isStreaming: true forever after the first prompt — every reload locked the UI into "Queue a prompt + stop" mode.
  • The echoed user message got message_start but never message_end, so it stayed streaming: true and the transcript's "agent is working…" indicator never cleared.

Screenshots

chat.png, assistant.png, and mobile-chat.png are regenerated from the fixed build — the previous ones captured the broken header, the overflow, and the stuck state. Others are untouched.

… state

- Session header: theme/settings/logout were rendered both in the mobile
  top bar and the session header; the copy here now only shows on lg+
  (same pattern the session list page already uses).
- Composer: the control row was all shrink-0, so on narrow screens the
  chips (model + thinking + primary button) exceeded the composer box and
  pushed the button out of it. The group is now elastic (min-w-0) and the
  model chip truncates instead; badge/thinking/button keep fixed width.
- Mock host: clear the stream timer when the canned turn finishes, so
  get_state stops reporting isStreaming forever after the first prompt
  (that locked the UI into queue/stop mode after every reload); and send
  message_end for the echoed user message, which otherwise stayed
  streaming=true and kept "agent is working…" alive.
- Regenerate chat/assistant/mobile-chat screenshots with the fixes (the
  old ones showed the broken header, overflow, and stuck state).
@danielglh
danielglh merged commit c0cf10d into main Aug 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant