* fix(ui): avoid tooltip trigger overlap when a side fits
* feat(ui): add navigation entry customization
* fix(test): keep tooltip geometry independent of JSX types
* fix(ui): align customization catalogs and integration fixtures
* test(ui): complete customization lifecycle and release integration coverage
* fix(ui): return entry discovery to the installed plugin list
* docs: refresh module graph for entry customization
* build: refresh workspace links for the moved entry customization package
* docs: regenerate catalogs and pairing hashes for the moved entry customization package
* test(web): cover default-loaded entry customization in the Web e2e
* test(ui): describe entry customization as a browser plugin in the host entry spec
* build: order entry customization publication files as workspace constraints require
* test(release): drop the moved entry customization package from the experimental family list
* style(ui): use the shared focus ring color on entry customization triggers
* test(web): re-record goldens for the default-loaded More navigation menus
* test(web): add the More conversation views trigger to the remaining CI-reported goldens
* docs: record region-owned pins for plugin entry customization
* refactor(ui): rebuild entry customization on region-owned pins and More menus
- Each navigation region (left sidebar, Conversation header, right sidebar
guide) persists its own unpinned list under
dsh.slot.manual-order.<list slot key>.v1, filters its own launchers, and
draws its own More button and Menu around its actions slot.
- ui-entry-customization only registers the shared menu rows (entries with
pin buttons, Browse other plugins, Create your plugin) into the three
actions slots and keeps no state.
- Remove ctx.layout.entryVisibility, the plugin store, left-sidebar drag
reordering, and agentPresetNavigation; ui-layout and ui-agent-preset match
release/dsh-0.2.1 again.
- Keep the release <nav> and Conversation tab-bar visibility conditions.
- Move the More glyph into ui-primitives as IconAppsAddOutline{Regular,Medium}.
* docs: compile the entry customization owner props example
* docs(ui): describe the wrapping Conversation tab row in the header comment
* fix(ui): return New Session to the Workspace blank and its unsent draft
- New Session (startSession without options) takes the blank-reuse path
again instead of creating a fresh Session on every call, which hid the
previous blank and its unsent draft since a5c9c2aaeef (#5775).
- A request that names an Agent preset skips blanks listing a different
preset, so Creator entries no longer take over an ordinary draft.
- Record the change in a v0.2.1-rc.2 upgrade guide; the Host refresh of a
stale loaded blank stays deferred (see the Agent Note).
* docs: regenerate the Cordis inspect catalog for New Session blank reuse
* fix(ui): keep the selected entry visible while unpinned
- Left-sidebar rows and View tabs keep the selected entry, with aria-current or aria-selected, until another entry is selected.
- Entry menu Creator action takes no region argument; the registration's region selects the prompt.
- Document the 2px panel-row and 32px View-tab gaps; drop commit hashes from the New Session Agent Note.
* fix(ui): leave a blank of another preset unstaged when starting Creator
startCreatorDraft stages cordis only when the main blank lists no preset or already lists cordis; navigation opens a separate Creator blank otherwise, so a Standard draft blank keeps its preset.
* feat(ui): choose whether a draft prompt replaces, appends to, or keeps an existing draft
- DraftInitializationOptions gains whenDraftExists ('replace' | 'append' | 'keep', default 'keep'); clearPreviousDraft stays and maps to 'replace' only when whenDraftExists is omitted.
- Append adds the prompt as new paragraphs after the existing text and references; attachments stay in every mode.
- The three Create your plugin entries append their regional prompt.
* test(web): align e2e with New Session blank reuse and the visible selected entry
* refactor(ui): share the draft paragraph writer between setDraft and appendDraft
---------
Co-authored-by: Yif <877193178@qq.com>
Co-authored-by: imccyu <276526105+imccyu@users.noreply.github.com>
9.9 KiB
description, kind
| description | kind |
|---|---|
| Package map for the web GUI browser half: shell boot, browser-host communication, shared client services, localization, development reload, and the UI feature plugins. | package-group |
client/ — web-GUI browser half
English | 中文
Summary
The client/ group provides the browser experience for the dsh web GUI, including conversation, navigation, settings, approvals, file access, and other interactive features. Choose packages from this family when adding browser-visible behavior; use host/ for server-side page delivery and host integration. Packages cover both the shared browser foundation and focused UI features, while each child README owns its configuration and behavior. Authoring rules live in AGENTS.md, and the related documentation below explains cross-package composition.
Table of Contents
Packages
The kernel packages boot and serve the page; the UI feature packages present it. Each package README owns its contract and configuration.
| Package | Role | ctx key |
|---|---|---|
web/ |
Boots the browser shell | — |
modules/ |
Loads browser-side client modules | ctx.clientModules / ctx.modules |
connection/ |
Maintains browser-host RPC communication and event delivery | ctx.connection |
file-upload/ |
Sends raw Blob and byte-stream request bodies outside the page thread | ctx.fileUpload |
shortcuts/ |
Registers application keyboard commands | ctx.shortcuts |
ui-shortcuts/ |
Presents the keyboard shortcut reference | — |
store/ |
Provides React-free observable and snapshot-store primitives | — |
hmr/ |
Refreshes client plugins during development | — |
locale/ |
Provides localization preferences and message dictionaries | ctx.locale |
test-runtime/ |
Shared repository test support for client feature packages | — |
ui-renderer/ |
Binds slot data to React and mounts the assembled application | ctx.uiRenderer |
ui-slots/ |
Defines typed extension Slots and reusable Component Factories | — |
ui-session/ |
Adapts Session Controller state into standard Slot sources and hooks | — |
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-dockkit/ |
Provides docking layout operations and React components | — |
ui-sidebar/ |
Presents workspace and session navigation | — |
ui-sidebar-right/ |
Owns the right Sidebar and its tab types | ctx.sidebarRight, ctx.sidebarRightTabs |
ui-sidebar-documentpreview/ |
Displays documents in right Sidebar tabs | ctx.documentPreviews |
ui-sidebar-browser/ |
Browses sandboxed HTTP(S) pages, including loopback services, in right-Sidebar tabs | — |
resources/ |
Unified resource model: protocol providers behind the useResource session standard hook |
ctx.resources |
ui-sidebar-files/ |
Right-Sidebar workspace file tree tab type | — |
ui-brand-official/ |
Fills the generic browser-brand slots with the official name and marks | — |
ui-workspace/ |
Provides workspace selection and creation surfaces | — |
ui-conversation/ |
Presents the active conversation and its input surface | — |
ui-chat/ |
Projects and renders the Chat conversation target | — |
ui-approval/ |
Presents approval requests and returns user decisions | — |
ui-tool/ |
Composes Tool call trees and keyed per-Tool views | — |
ui-workflow-run/ |
Replays durable workflow runs as nested chat disclosures | — |
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-reference/ |
Unified Web @file / @session reference source |
— |
ui-secret-mask/ |
Masks recognized credentials in sent user text | — |
ui-subagent/ |
Provides subagent navigation, child transcript states, and inline references | — |
ui-jobs/ |
Lists this session's background jobs with on-demand streaming record panels | — |
ui-schedule/ |
Lists the current Session's active reminders in a read-only header catalog | — |
ui-model-selection/ |
Provides model selection in conversation surfaces | — |
ui-deepseek-model-label-1017/ |
Adds the temporary 1017 badge to official DeepSeek Flash model labels | — |
ui-permission-presets/ |
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 Built-in plugins settings section shell and its tab extension point | — |
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-shell/ |
Provides the shell settings page on the Plugins page | — |
ui-settings-agent-loop/ |
Provides the agent-loop settings page on the Plugins page | — |
ui-settings-session-log/ |
Controls API Session-log upload in General settings | — |
ui-settings-subagent/ |
Provides the Subagent settings page on the Plugins page | — |
ui-settings-web-search/ |
Provides the web-search settings page on the Plugins page | — |
ui-plugin-manager/ |
Contributes the sidebar Plugins panel: install, enable, disable, retry, and compose installed packages | — |
ui-entry-customization/ |
Adds region-local More menus that pin or unpin plugin launchers and start a plugin draft | — |
ui-plugin-market/ |
Contributes the Discover tab to the Plugins page: browse market indexes and install their bundles | — |
ui-settings-plugin-inventory/ |
Contributes the read-only Host Loader inventory tab to Plugins settings | — |
ui-deliverables/ |
Produces the changed-files card with its comparison tabs, delivery cards, and clickable final-response file references | — |
ui-message-feedback/ |
Provides message ratings and feedback dialogs opened from ratings, /feedback, or the Session Header menu |
ctx.feedbackUi |
ui-directory-picker-browse/ |
In-app directory browsing surface for the workspace directory flow | — |
ui-directory-picker-native/ |
Native directory-picker surface driving the local Desktop or Host OS chooser | — |
ui-open-in-app/ |
Session-header split button opening the workspace directory in an installed application, and the document preview's default-application controls for one file | — |
Related documentation
Start with the subsystem reference and the two notes that own the cross-package composition decisions, then the host half that serves this page.
- Client modules subsystem — the web plugin table:
dsh.clientdeclarations, the boot graph wire, and the bundle route. - Slot system standard — the definitive slot model: registration, props shares, and stores.
- Web client architecture reference — the loading chain, object layer, and client services.
- Host group map — the host half that serves this browser half.
Dev Note
Working context for maintainers — click to expand
None.