kimi-code/apps/web/scripts
Luyu Cheng dda9935db8
feat(chat): restyle dock work pills and redesign work panels (#209)
* feat(chat): restyle dock work pills and redesign work panels

* fix(chat): signal non-openable task rows and subagent cards with a not-allowed cursor

* refactor(chat): extract dock work pills and panel heads into chat/dock

WorkPanelHead unifies the four work panel heads: a primary title plus a
muted meta joined by a gap (no middot), with the 44px touch rules and the
narrow-width wrap alongside. WorkPill holds the repeated workbar pill
structure (icon + label + optional meta). TasksPane, SubagentGrid,
GoalPanel, and TodoCard move into chat/dock; ChatDock keeps orchestration.

* fix(chat): token the remaining hardcoded spacing in the dock work panels

* docs(design-system): add a Dock section for work pills and panels

Consolidates the scattered dock decisions into one subsection under Chat
Interface: the pill vocabulary, panel shell and motion, the two-tone head,
per-kind bodies, filtering and sizing, and the open/cancel model — with two
live mockups and a state-vocabulary table. The composer callout and the
glassmorphism exemption now point here.

* fix(chat): replay the panel pop motion when switching work pills

The panel shell is keyed by panel kind, so a pill switch exits the old
panel and pops the new one from the newly clicked pill instead of
hard-swapping the content in place.

* fix(chat): frost the work pills with the shared menu backdrop blur

* fix(chat): match the work panel head icon to the pill's 1.5em glyph

* feat(chat): report each work surface's live status in the pill meta

The bash and sub-agent pills replace the all-time task count with a
pulsing dot + running count shown only while work runs; the todos pill
shows the done/total fraction in muted ink. The design-system Dock
section documents the rule.

* fix(chat): add a 2px trailing optical compensation to work pill padding

* fix(chat): make the dock work panel non-selectable chrome

* fix(chat): auto-space numerals and CJK in the work panel's state and time labels

* fix(chat): close only the topmost layer when Escape is pressed

* docs(changeset): rewrite the dock panel changesets as user-facing results

* fix(chat): reset the detail panel's copied state when switching tasks

* docs: move the dock open-layer exception to the root AGENTS.md

* fix(swarm): show user-cancelled members as cancelled, not failed

* fix(chat): use the caption leading token for todo row text

* fix(chat): flatten persisted tool output before extracting background task ids

* fix(chat): show the bound model and thinking effort on subagent cards

* fix(chat): rework the subagent card layout

The muted session number leads the title instead of floating at the row's
end; the bound model and thinking effort get their own icon-led line above
the status row; state and duration read as icon + label; the prompt meta
drops to caption size.

* fix(chat): rebalance subagent card type scale and unify state glyph sizes

* feat(chat): rename the task filter chips and add a done filter

活跃 becomes 最近 (recent), and a 已完成 (done: every terminal state)
chip joins between 进行中 and 全部 — each chip now leads with an icon.

* fix(chat): use the play glyph for the running filter chip

* feat(chat): collapse the panel filter into a dropdown and pills to icons when narrow

The new FilterControl measures the panel head and swaps the SegmentedControl
for a Select dropdown when the title plus chips would overflow; the head
title never wraps (truncation is the last resort); below the composer's
620px container width the work pills render icon-only.

* fix(chat): teleport the compact filter dropdown out of the work panel

The Select menu rendered inside the panel, so the panel's overflow and
backdrop-filter squeezed it into wrapping rows. The compact dropdown now
teleports to body and anchors to the trigger; menu presses are consumed on
window capture so they never dismiss the panel underneath, and Escape
closes only the menu.

* fix(chat): guarantee the panel head title by layout, not by clipping

The overflow/ellipsis fallback clipped descenders at the tab's tight
line-height (the 'g' in the head). The tab is nowrap and flex-none now —
no truncation hack anywhere; the collapsed dropdown always leaves enough
room.

* fix(chat): stop the filter menu's outside-press on the mousedown event

The dock's outside-press listener is on mousedown; the menu consumed
pointerdown — a different event that never reaches it — so picking a
filter also dismissed the work panel.

* fix(swarm): map persisted aborted results to the neutral cancelled phase

* fix(chat): recover each swarm member's own task text for the card description

* fix(chat): use the circled check glyph for the done filter chip

* fix(chat): scale the full-bleed circle-check onto the icon grid in the filter chips

SegmentedControl items now expose data-icon so a glyph can be targeted.

* fix(swarm): give cancelled members their own summary count and keep saved bodies expandable

* fix(chat): match the panel empty state to the active filter

* fix(chat): filter menu keyboard/a11y handling and accessible pill names

* fix(chat): read swarm member task text by the zero-based swarmIndex

* fix(chat): render the recovered command on bash task rows

* fix(chat): never derive task durations from observed completion stamps

* fix(chat): rebuild the compact filter on the Pill primitive and harden its menu lifecycle

The trigger is the Pill primitive (no bespoke button chrome); closing via
Escape or a selection returns focus to it; leaving compact mode closes the
menu and its window listeners; flipping back to the segmented control
remeasures it after the DOM updates.

* fix(chat): carry the estimated completion marker through every merge path

* fix(chat): drop the unbundled web copies of the new kimi icons

* refactor(chat): share the IME composition latch via app-client

* fix(chat): clamp the compact filter menu inside the viewport

* fix(chat): mark projector-stamped completion times as estimated

* fix(chat): clear the estimated completion marker once a real stamp arrives

* fix(chat): close the compact filter menu on focus leave and when an overlay opens

* fix(chat): share the todo status ring stroke via a design token

* fix(chat): derive the pill-collapse breakpoint from the --p-bp-sm token

* fix(chat): order the default task filter by recency, running first

* fix(chat): token-derived menu spacing and menuitemradio semantics for the compact filter

* fix(chat): keep subagent card numbers stable across late task arrivals

* fix(chat): let the native terminal keep its Escape keys

* fix(chat): carry subagent card numbers across the REST-to-agent rekey
2026-08-13 03:41:18 +08:00
..
check-style.mjs feat(chat): restyle dock work pills and redesign work panels (#209) 2026-08-13 03:41:18 +08:00