The message-feedback note editor previously expanded inline inside the assistant message's shared IconActions row, overflowing the row at every viewport and pushing the branch action and the clock out of the column. Rework it into a portable popover: the note editor is a fixed-position panel portaled to document.body and anchored to the note trigger, so the row keeps its single 28px line whether the editor is open or not and the panel escapes the column's overflow clip. The like/dislike buttons and the note trigger stay in the row unchanged; the trigger toggles the popover (textarea + Save/Cancel + note-save failure) which auto-focuses the input and closes on Escape or an outside click, returning focus to the trigger. Rating/list-load failures surface in the row, note-save failures inside the popover. Reuse the Menu portal surface tokens and add @types/react-dom so the createPortal usage typechecks. Layout e2e sweeps six viewports and pins that opening the editor leaves the row's overflow, line count, and out-of-column items unchanged, and that the panel is outside the column, within the viewport, and anchored to its trigger. Unit tests cover the popover's portal-to-body, toggle, Escape/outside-click dismissal, and unmount early-returns. |
||
|---|---|---|
| .. | ||
| connection | ||
| hmr | ||
| locale | ||
| modules | ||
| runtime | ||
| ui-agent-preset | ||
| ui-attachment | ||
| ui-commands | ||
| ui-conversation | ||
| ui-deliverables | ||
| ui-directory-picker-browse | ||
| ui-directory-picker-native | ||
| ui-goal | ||
| ui-input-trigger | ||
| ui-jobs | ||
| ui-layout | ||
| ui-message-feedback | ||
| ui-model-selection | ||
| ui-permission-presets | ||
| ui-plan | ||
| ui-primitives | ||
| ui-renderer | ||
| ui-settings | ||
| ui-settings-general | ||
| ui-settings-models | ||
| ui-settings-plugin-inventory | ||
| ui-settings-plugins | ||
| ui-sidebar | ||
| ui-skill | ||
| ui-slots | ||
| ui-subagent | ||
| ui-theme | ||
| ui-tool | ||
| ui-trajectory | ||
| ui-user-questions | ||
| ui-workflow-run | ||
| ui-workspace | ||
| web | ||
| AGENTS.md | ||
| README.i18n.yaml | ||
| README.md | ||
| README.zh.md | ||
| tsdown.client.ts | ||
client/ — web-GUI browser half
English | 中文
The browser side of the dsh web GUI: shell boot, browser-host communication, shared UI services, and feature plugins. Authoring rules live in AGENTS.md; the host half is host/. All except test-runtime are product packages named @deepseek-ai/dsh-client-<name>.
| Package | Purpose |
|---|---|
web/ |
Boots the browser shell from the client entry graph. |
ui-renderer/ |
Binds slot data to React and mounts the assembled application after client boot settles. |
modules/ |
Loads browser-side client modules. |
connection/ |
Maintains browser-host RPC communication and event delivery. |
runtime/ |
Provides shared client services for sessions, workspaces, and UI composition. |
hmr/ |
Refreshes client plugins during development. |
locale/ |
Provides localization preferences and message dictionaries. |
test-runtime/ |
Provides shared repository test support for client feature packages. |
ui-slots/ |
Defines how UI features register and compose extension slots. |
ui-theme/ |
Applies the selected color theme. |
ui-primitives/ |
Provides shared React controls, icons, and content renderers. |
ui-attachment/ |
Registers composer and message-image attachment presentation. |
ui-layout/ |
Arranges the main application regions. |
ui-sidebar/ |
Presents workspace and session navigation. |
ui-workspace/ |
Provides workspace selection and creation surfaces. |
ui-conversation/ |
Presents the active conversation and its input surface. |
ui-tool/ |
Composes Tool call trees and keyed per-Tool views. |
ui-workflow-run/ |
Replays durable workflow runs as nested Chat disclosures with live-only child navigation. |
ui-goal/ |
Presents and manages the current goal. |
ui-trajectory/ |
Presents alternate views of agent activity. |
ui-commands/ |
Provides session-aware command discovery and dispatch. |
ui-input-trigger/ |
Coordinates inline command and reference suggestions. |
ui-skill/ |
Adds skill references to inline suggestions. |
ui-subagent/ |
Provides subagent navigation, child transcript states, and inline references. |
ui-jobs/ |
Lists this session's background jobs in the conversation header. |
ui-model-selection/ |
Provides model selection in conversation surfaces. |
ui-permission/ |
Configures default permissions and switches the current session's access. |
ui-plan/ |
Presents active plan-mode status and its exit control. |
ui-settings-plugins/ |
Owns the Plugins settings section, its tab extension point, and configurable host-plane plugin cards. |
ui-user-questions/ |
Presents interactive questions requested by the agent. |
ui-agent-preset/ |
Selects a session's agent preset and authors preset compositions. |
ui-settings/ |
Hosts the settings interface and its extension areas. |
ui-settings-general/ |
Provides the general settings section. |
ui-settings-models/ |
Provides model-provider configuration and DeepSeek onboarding. |
ui-settings-plugin-inventory/ |
Contributes the read-only Host Loader inventory tab to Plugins settings. |
Each child reference owns its contract and detailed behavior. The slot system standard and web client architecture note own the cross-package composition and loading decisions.
The subsystem reference is client-modules.md; the slot system standard is the definitive slot model, and the web client architecture note owns the loading chain and object layer.