* 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 <[email protected]>
Co-authored-by: imccyu <[email protected]>
9.3 KiB
9.3 KiB
description, kind
| description | kind |
|---|---|
| web GUI 浏览器侧的包映射:外壳启动、浏览器与宿主通信、共享客户端服务、本地化、开发重载与 UI 功能插件。 | package-group |
client/ — Web GUI 浏览器侧
English | 中文
概述
client/ 组提供 dsh web GUI 的浏览器体验,包括对话、导航、设置、批准、文件访问及其他交互功能。添加浏览器中可见的行为时,请选择本系列中的包;服务端页面交付与宿主集成则使用 host/。本系列同时涵盖共享浏览器基础与专门的 UI 功能,各子包 README 拥有其配置与行为说明。编写规则见 AGENTS.md,下方相关文档解释跨包组合方式。
目录
包
内核包负责启动与服务于页面,UI 功能包负责呈现页面。各包的 README 拥有自己的约定与配置。
| 包 | 职责 | ctx 键 |
|---|---|---|
web/ |
启动浏览器外壳 | — |
modules/ |
加载浏览器侧客户端模块 | ctx.clientModules / ctx.modules |
connection/ |
维护浏览器与宿主之间的 RPC 通信与事件投递 | ctx.connection |
file-upload/ |
在页面线程之外发送原始 Blob 与字节流请求体 | ctx.fileUpload |
shortcuts/ |
注册应用键盘命令 | ctx.shortcuts |
ui-shortcuts/ |
展示快捷键速查 | — |
store/ |
提供不依赖 React 的 observable 与快照存储原语 | — |
hmr/ |
在开发期间刷新客户端插件 | — |
locale/ |
提供本地化偏好与消息词典 | ctx.locale |
test-runtime/ |
为客户端功能包提供共享的仓库测试支持 | — |
ui-renderer/ |
将 slot 数据绑定到 React,并挂载组装完成的应用 | ctx.uiRenderer |
ui-slots/ |
定义类型化扩展 Slots 与可复用 Component Factory | — |
ui-session/ |
把会话控制器状态适配为标准 Slot source 与钩子 | — |
ui-theme/ |
应用所选颜色主题 | — |
ui-primitives/ |
提供共享 React 控件、图标与内容渲染器 | — |
ui-attachment/ |
注册输入框与消息图片的附件呈现 | — |
ui-layout/ |
排列应用的主要区域 | — |
ui-dockkit/ |
提供停靠布局操作与 React 组件 | — |
ui-sidebar/ |
展示工作区与会话导航 | — |
ui-sidebar-right/ |
管理右侧 Sidebar 及其 tab 类型 | ctx.sidebarRight, ctx.sidebarRightTabs |
ui-sidebar-documentpreview/ |
在右侧 Sidebar 的 tab 中显示文档 | ctx.documentPreviews |
ui-sidebar-browser/ |
在右侧 Sidebar tab 中浏览 sandboxed HTTP(S) 页面,包括 loopback 服务 | — |
resources/ |
统一资源模型:useResource 会话标准钩子背后的协议提供方 |
ctx.resources |
ui-sidebar-files/ |
右侧 Sidebar 的工作区文件树 tab 类型 | — |
ui-brand-official/ |
用官方名称与标记填充通用浏览器品牌 slot | — |
ui-workspace/ |
提供工作区选择与创建界面 | — |
ui-conversation/ |
展示当前对话及其输入界面 | — |
ui-chat/ |
投影并渲染 Chat 对话 target | — |
ui-approval/ |
展示批准请求并返回用户决策 | — |
ui-tool/ |
编排工具调用树与按工具键控的视图 | — |
ui-workflow-run/ |
把持久工作流运行回放为嵌套对话折叠项 | — |
ui-goal/ |
展示与管理当前目标 | — |
ui-trajectory/ |
提供 agent(智能体)活动的其他视图 | — |
ui-commands/ |
提供会话感知的命令发现与分发 | — |
ui-input-trigger/ |
协调内联命令与引用建议 | — |
ui-skill/ |
向内联建议添加 skill(技能)引用 | — |
ui-reference/ |
统一的 Web @file / @session 引用 source |
— |
ui-secret-mask/ |
遮挡已发送用户文本中可识别的凭据 | — |
ui-subagent/ |
提供 subagent 导航、子级 transcript(文本记录)状态与内联引用 | — |
ui-jobs/ |
列出本会话的后台任务,并提供按需展开的流式输出面板 | — |
ui-schedule/ |
在只读标题栏目录中列出当前会话中生效的提醒 | — |
ui-model-selection/ |
在对话界面中提供模型选择 | — |
ui-deepseek-model-label-1017/ |
为官方 DeepSeek Flash 模型名称添加临时的 1017 角标 | — |
ui-permission-presets/ |
配置默认权限并切换当前会话的访问模式 | — |
ui-plan/ |
展示生效中的 plan mode 状态及其退出控件 | — |
ui-settings-plugins/ |
负责「内置插件」设置分区壳及其标签页扩展点 | — |
ui-user-questions/ |
展示 agent 请求的交互式问题 | — |
ui-agent-preset/ |
选择会话的 agent 预设并编写预设组合 | — |
ui-settings/ |
承载设置界面及其扩展区域 | — |
ui-settings-general/ |
提供常规设置分区 | — |
ui-settings-models/ |
提供模型提供方配置与 DeepSeek 引导 | — |
ui-settings-shell/ |
在插件页提供终端设置页 | — |
ui-settings-agent-loop/ |
在插件页提供 Agent 循环设置页 | — |
ui-settings-session-log/ |
在通用设置中控制随 API 上传会话日志 | — |
ui-settings-subagent/ |
在插件页提供子智能体设置页 | — |
ui-settings-web-search/ |
在插件页提供网页搜索设置页 | — |
ui-plugin-manager/ |
贡献侧栏的“插件”面板:安装、启用、停用、重试与组合已安装的包 | — |
ui-entry-customization/ |
添加分区域的“更多”菜单,固定或收起插件入口,并开始创建插件的草稿 | — |
ui-plugin-market/ |
为“插件”页面贡献“发现”标签页:浏览市场索引并安装其中的组合包 | — |
ui-settings-plugin-inventory/ |
向「插件」设置贡献只读的 Host Loader 清单标签页 | — |
ui-deliverables/ |
生成改动文件卡片及其对比 tab、交付文件卡片与可点击的最终响应文件引用 | — |
ui-message-feedback/ |
提供消息赞踩,以及从赞踩、/feedback 或会话标题栏菜单打开的反馈弹窗 |
ctx.feedbackUi |
ui-directory-picker-browse/ |
面向工作区目录流程的应用内目录浏览界面 | — |
ui-directory-picker-native/ |
驱动本地 Desktop 或 Host OS 选择器的原生目录选择界面 | — |
ui-open-in-app/ |
在已安装应用中打开工作区目录的会话标题栏拆分按钮,以及文档预览里用默认应用打开单个文件的控件 | — |
相关文档
先从子系统参考与两份拥有跨包组合决策的 Agent Note 读起,再看服务于本页的宿主半侧。
- 客户端模块子系统——web 插件表:
dsh.client声明、启动图协议与 bundle 路由。 - slot 系统标准——权威 slot 模型:注册、props 份额与存储。
- web 客户端架构 reference——加载链、对象层与客户端服务。
- 宿主组地图——服务于本浏览器半侧的宿主半侧。
开发备注
维护者的工作上下文——点击展开
无。