2026-07-28 15:04:59 +08:00
# client/ — web-GUI browser half
English | [中文 ](README.zh.md )
2026-08-05 12:46:38 +08:00
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 ](AGENTS.md ); the host half is [`host/` ](../host/README.md ). All except `test-runtime` are **product** packages named `@deepseek-ai/dsh-client-<name>` .
2026-07-28 15:04:59 +08:00
2026-08-05 12:46:38 +08:00
| Package | Purpose |
|---|---|
| [`web/` ](web/README.md ) | Boots the browser shell from the client entry graph. |
2026-08-17 14:21:34 +08:00
| [`ui-renderer/` ](ui-renderer/README.md ) | Binds slot data to React and mounts the assembled application after client boot settles. |
2026-08-05 12:46:38 +08:00
| [`modules/` ](modules/README.md ) | Loads browser-side client modules. |
| [`connection/` ](connection/README.md ) | Maintains browser-host RPC communication and event delivery. |
| [`hmr/` ](hmr/README.md ) | Refreshes client plugins during development. |
| [`locale/` ](locale/README.md ) | Provides localization preferences and message dictionaries. |
2026-08-23 13:15:20 +08:00
| [`store/` ](store/README.md ) | Provides React-free observable and snapshot-store primitives. |
2026-08-13 00:36:22 +08:00
| [`test-runtime/` ](../test-support/client-runtime/README.md ) | Provides shared repository test support for client feature packages. |
2026-08-05 12:46:38 +08:00
| [`ui-slots/` ](ui-slots/README.md ) | Defines how UI features register and compose extension slots. |
2026-08-23 13:15:20 +08:00
| [`ui-session/` ](ui-session/README.md ) | Adapts Session Controller state into standard Slot sources and hooks. |
2026-08-05 12:46:38 +08:00
| [`ui-theme/` ](ui-theme/README.md ) | Applies the selected color theme. |
| [`ui-primitives/` ](ui-primitives/README.md ) | Provides shared React controls, icons, and content renderers. |
2026-08-17 13:39:18 +08:00
| [`ui-attachment/` ](ui-attachment/README.md ) | Registers composer and message-image attachment presentation. |
2026-08-05 12:46:38 +08:00
| [`ui-layout/` ](ui-layout/README.md ) | Arranges the main application regions. |
| [`ui-sidebar/` ](ui-sidebar/README.md ) | Presents workspace and session navigation. |
2026-08-19 12:53:57 +08:00
| [`ui-brand-official/` ](ui-brand-official/README.md ) | Fills the generic browser-brand slots with the official name and marks. |
2026-08-05 12:46:38 +08:00
| [`ui-workspace/` ](ui-workspace/README.md ) | Provides workspace selection and creation surfaces. |
| [`ui-conversation/` ](ui-conversation/README.md ) | Presents the active conversation and its input surface. |
2026-08-23 13:15:20 +08:00
| [`ui-chat/` ](ui-chat/README.md ) | Projects and renders the Chat conversation target. |
| [`ui-approval/` ](ui-approval/README.md ) | Presents approval requests and returns user decisions. |
2026-08-08 15:18:52 +08:00
| [`ui-tool/` ](ui-tool/README.md ) | Composes Tool call trees and keyed per-Tool views. |
2026-08-10 18:37:30 +08:00
| [`ui-workflow-run/` ](ui-workflow-run/README.md ) | Replays durable workflow runs as nested Chat disclosures with live-only child navigation. |
2026-08-05 12:46:38 +08:00
| [`ui-goal/` ](ui-goal/README.md ) | Presents and manages the current goal. |
| [`ui-trajectory/` ](ui-trajectory/README.md ) | Presents alternate views of agent activity. |
2026-08-13 00:36:22 +08:00
| [`ui-commands/` ](ui-commands/README.md ) | Provides session-aware command discovery and dispatch. |
| [`ui-input-trigger/` ](ui-input-trigger/README.md ) | Coordinates inline command and reference suggestions. |
2026-08-05 12:46:38 +08:00
| [`ui-skill/` ](ui-skill/README.md ) | Adds skill references to inline suggestions. |
refactor(reference): serve discovery through typert Remote faces
Replace the legacy reference.* API Proxy domain with @Remote methods on the
owning services, following the typert gateway design master adopted on
2026-08-02 (message-feedback and plugin-inventory precedents):
- FileReferenceService and SessionReferenceResolver extend TypertRemoteService;
fileReferences/list and sessionReferenceResolver/candidates are unary Remote
methods cancelled through the reserved trailing signal, and the candidates
face attaches each candidate's canonical mention under the configured limit
- move the wire types to type-only ./types subpaths (FileReferenceCandidate,
SessionReferenceMentionCandidate) and export ./typert plus ./remote artifacts
- mount both contributions in the api-remotes client assembly; ui-reference
consumes ctx.remote instead of connection.api.references and registers zh/en
locale dictionaries for its sections and labels
- delete the reference.* routes, schemas, map rows, client stubs, and fixtures;
the connection fixture serves the Remote endpoints instead
- release deliverPrompt admission listeners when the agent is disposed with the
prepared prompt still pending, and cover the reference-* RpcError codes in
the schema spec
- add the missing tsconfig paths for the /grammar and /types subpaths (clean-
tree vitest could not resolve @deepseek-ai/dsh-file-reference/grammar)
- regenerate the cordis catalog, capability seams, and event matrix; update the
owning bilingual READMEs, Agent Notes, and the reference-composer golden
2026-08-17 18:35:04 +08:00
| [`ui-reference/` ](ui-reference/README.md ) | Unified Web `@file` / `@session` reference source. |
2026-08-05 12:46:38 +08:00
| [`ui-subagent/` ](ui-subagent/README.md ) | Provides subagent navigation, child transcript states, and inline references. |
2026-08-13 00:36:22 +08:00
| [`ui-jobs/` ](ui-jobs/README.md ) | Lists this session's background jobs in the conversation header. |
| [`ui-model-selection/` ](ui-model-selection/README.md ) | Provides model selection in conversation surfaces. |
| [`ui-permission/` ](ui-permission-presets/README.md ) | Configures default permissions and switches the current session's access. |
2026-08-05 12:46:38 +08:00
| [`ui-plan/` ](ui-plan/README.md ) | Presents active plan-mode status and its exit control. |
2026-08-13 00:36:22 +08:00
| [`ui-settings-plugins/` ](ui-settings-plugins/README.md ) | Owns the Plugins settings section, its tab extension point, and configurable host-plane plugin cards. |
| [`ui-user-questions/` ](ui-user-questions/README.md ) | Presents interactive questions requested by the agent. |
feat(web): choose the agent preset on the new-session screen
The composer seat spent nearly all its life disabled: a session's
composition is fixed once a turn has run. Move the choice to the
new-session screen beside the workspace picker, where it still works,
and let the session header report what a running session runs.
The hero pick is staged rather than applied — that screen precedes the
session it belongs to. It lands when a session becomes current and is
still blank, which covers both the session a workspace connect creates
and the blank one it reuses; riding `sessions.create` would miss the
second. It is spent on first use, matching the workspace picker.
Fix the durability the header field claimed but never had: `agentPreset`
was declared on `SessionHeader` and dropped by the JSONL header line, the
SQLite sessions row, the derived query index, and the cold list
projection, so every resumed session came back composed from nothing.
Add the web e2e lane that would have caught it — the one lane that mounts
the shipped roster, which needed `cordis:group` in the scaffold's Loader
builtins, as `mountRootInclude` already registers.
2026-08-05 18:51:11 +08:00
| [`ui-agent-preset/` ](ui-agent-preset/README.md ) | Selects a session's agent preset and authors preset compositions. |
2026-08-05 12:46:38 +08:00
| [`ui-settings/` ](ui-settings/README.md ) | Hosts the settings interface and its extension areas. |
| [`ui-settings-general/` ](ui-settings-general/README.md ) | Provides the general settings section. |
2026-08-13 00:36:22 +08:00
| [`ui-settings-models/` ](ui-settings-models/README.md ) | Provides model-provider configuration and DeepSeek onboarding. |
| [`ui-settings-plugin-inventory/` ](ui-settings-plugin-inventory/README.md ) | Contributes the read-only Host Loader inventory tab to Plugins settings. |
2026-07-28 15:04:59 +08:00
2026-08-05 12:46:38 +08:00
Each child reference owns its contract and detailed behavior. The [slot system standard ](../../.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.md ) and [web client architecture note ](../../.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md ) own the cross-package composition and loading decisions.
docs: anchor each subsystem page to its package group; make group READMEs thin tables
core.md read as a type grab-bag: LLM wire vocabulary up front, the agent/loop story buried, and no correspondence to packages/core. It now opens on the packages/core control spine — the package-by-package loop map with a Page column into session/system-prompt/tools/scope — and keeps only what the spine group declares plus the repo-wide patterns: the Agent handle with its delivery/cancellation/interception contracts, the SessionEvent envelope, branded ids, the …Map pattern. The conversation vocabulary (Message/ContentBlock, the model request, adapters — 17 type-equiv blocks) moves to llm-streaming.md, which now declares packages/llm end-to-end; the duplicate ContentBlockMap paste near its seam section folds into the moved section, and the manifest, LINK_MAP, README table rows, website label (Core data structures → Core), and inbound anchors follow.
Every packages/<group>/README pair is now a thin front door in one shape: a why-first intro (bash's seam-pattern-first paragraph rewritten as 'shell execution for the agent'), the package table, and a closing pointer to the owning docs/subsystems page — the bash-style table stays the load-bearing middle. Load-bearing trailing paragraphs relocate rather than vanish: the fs no-timeout rationale becomes a filesystem.md section (both languages), session's four sectioned tables merge into one 12-row table, examples' legacy-bin H2 collapses to a pointer at jsonrpc-demo's README, and design rationale that already lives in an Agent Note or subsystem page is now linked instead of restated. All 40 pair records re-recorded.
2026-08-02 05:54:15 +08:00
The subsystem reference is [client-modules.md ](../../docs/subsystems/client-modules.md ); the [slot system standard ](../../.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.md ) is the definitive slot model, and the [web client architecture note ](../../.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md ) owns the loading chain and object layer.