deepseek-harness/packages/client
Chinesezjc e2ee5c0f5d feat(feedback): float the note editor in a popover, not inline in the actions row
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.
2026-08-19 13:49:30 +08:00
..
connection fix(attachment): address dimension-limit review 2026-08-18 11:30:07 +08:00
hmr release(dsh): 0.1.0-rc.7 2026-08-17 18:47:02 +08:00
locale build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
modules fix(ci): satisfy client script quality gates 2026-08-18 02:07:09 +08:00
runtime build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-agent-preset build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-attachment fix(client): tighten UI ownership boundaries 2026-08-18 01:34:25 +08:00
ui-commands build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-conversation Merge remote-tracking branch 'origin/master' into worktree/image-dimension-limit 2026-08-18 11:12:56 +08:00
ui-deliverables build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-directory-picker-browse build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-directory-picker-native fix(client): preserve dependency boundary cleanup 2026-08-18 01:34:54 +08:00
ui-goal build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-input-trigger build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-jobs build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-layout build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-message-feedback feat(feedback): float the note editor in a popover, not inline in the actions row 2026-08-19 13:49:30 +08:00
ui-model-selection build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-permission-presets fix(client): tighten UI ownership boundaries 2026-08-18 01:34:25 +08:00
ui-plan build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-primitives feat(feedback): float the note editor in a popover, not inline in the actions row 2026-08-19 13:49:30 +08:00
ui-renderer fix(client): tighten UI ownership boundaries 2026-08-18 01:34:25 +08:00
ui-settings build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-settings-general build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-settings-models fix(client): tighten UI ownership boundaries 2026-08-18 01:34:25 +08:00
ui-settings-plugin-inventory build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-settings-plugins build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-sidebar build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-skill build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-slots build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-subagent build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-theme build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-tool build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-trajectory build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-user-questions build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-workflow-run build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
ui-workspace build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00
web refactor(client): close module loader bootstrap loop 2026-08-18 01:34:55 +08:00
AGENTS.md fix(client): complete dynamic module bootstrap 2026-08-18 01:34:53 +08:00
README.i18n.yaml docs(client): synchronize UI boundary references 2026-08-18 01:34:23 +08:00
README.md refactor(client): merge React bindings into UI renderer 2026-08-18 01:34:23 +08:00
README.zh.md refactor(client): merge React bindings into UI renderer 2026-08-18 01:34:23 +08:00
tsdown.client.ts build(client): enforce client package boundaries 2026-08-18 01:34:53 +08:00

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.