Files
qwen-code/docs
samuelhsinandyungsen.hys 752e399b3b feat(web-shell): surface task Q&A activity above the composer (#16037)
* feat(web-shell): add a waiting minigame to the composer

Show a dismissible horizontal-Tetris strip above the main composer while a
prompt is streaming. The game closes when the turn ends, ignores editor
keyboard targets, and stays out of split panes and coarse-pointer devices.

Add engine and component tests, EN/ZH copy, design docs with page
screenshots, and a Chromium E2E scenario.

Refs #16036

* docs(web-shell): point the waiting minigame design at the committed E2E spec

* fix(web-shell): move the waiting minigame trigger into the status line

Replace the full-width waiting strip with a compact gamepad button at the
end of the streaming status row. The main composer now owns the open
state, and the board mounts above the status row only while open.

Keep the game's window keydown listener stable through a ref so rerenders
cannot drop the Escape that collapses the board, and update the component
tests, E2E scenario, screenshots, and both design docs.

* fix(web-shell): keep the waiting minigame scoped and recoverable

Pause and resume correctly after the tab is hidden, scope game keys to
the focused card so Escape no longer arms stream cancellation, let
focused buttons keep Space, restore the sound toggle, and keep the
board grid out of the aria-hidden wrapper that also held the overlays.

* fix(web-shell): keep the waiting minigame recoverable and scoped

Resume gravity after the tab becomes visible again, create the audio
context when sound is enabled, let the card's own buttons keep
Space/Enter, leave Escape to open dialogs, and keep the restart button
out of the aria-hidden board. The main composer now lets the open game
own Escape so the first press collapses it without arming stream cancel.

* feat(web-shell): add a waiting card with activity, usage and games

Open a waiting card from the streaming status button. The card starts on the
task's 44-bucket Q&A activity heatmap, switches to token usage instead of a
credits balance, and places a Qwen mark that opens a Tetris/Snake picker.
Games share the 44x7 grid and offer back-to-activity and switch-game actions.

Add the activity and Snake engines, component and E2E coverage, a local
harness with sample data, and design docs with page screenshots.

Refs #16036

* feat(web-shell): refine waiting card activity and game intros

Add hover details and click-to-locate to the activity heatmap, start a
random game from a delayed cold-cell Qwen entry, and play a QWEN CODE
intro that flies the blocks into the Tetris start cluster. Snake keeps
its intro static, eats an apple emoji, and starts at a slower speed.

* feat(web-shell): show task activity in a daily calendar

Replace the task-span buckets with a fixed 44-week day calendar, including
month labels, per-day hover details, click-to-locate and a stable card frame
across activity, usage, intro and game views. Gate the Qwen game entry behind
the waiting games configuration so the activity card stays the default
experience.

* fix(web-shell): show a gamepad icon on the configured game entry

Replace the Qwen brand mark in the calendar's game entry with a gamepad
icon, remove the now-unused Qwen logo component, and let the local harness
read the waiting games config so ?waitingGames=1 opens the preview with the
entry visible. Game screenshots and docs now describe the gamepad mark.

* fix(web-shell): read cached tokens from the connection fallback

The usage card falls back to the connection's token usage before any
assistant usage frame arrives, but the fallback read the message-level
cachedTokens field while the connection object carries cachedReadTokens.
Accept both names and pin the connection shape in the unit test.

* fix(web-shell): keep the game entry hit area inside its cell

Give the calendar game entry a positioning context so its forgiving hit
area stays bounded when prefers-reduced-motion disables the intro
animation and removes the transform that used to establish it. Cover the
reduced-motion path with an E2E that hovers and clicks a day while the
entry is visible.

Also reuse one Intl formatter pair per locale, format task token totals
above 1M as M, and drop the unused no-activity copy.

---------

Co-authored-by: yungsen.hys <[email protected]>
2026-11-07 15:32:23 +08:00
..
2025-12-05 10:51:57 +08:00
2025-12-19 15:52:11 +08:00