目录:ACP 协议API 网关与控制器附件启动与插件管理客户端运行时客户端 UI 包上下文压缩上下文注入核心运行时凭据与授权交付物文档处理实验特性宿主扩展反馈通道文件系统目标与计划工具守卫Hooks 扩展宿主服务交互命令作业调度LLM 适配LSP 集成MCP 协议规划模式Agent 预设代码执行运行时运行时诊断沙箱定时调度SDK 与协议会话核心会话检索设置Shell 执行技能溢出存储SSH 远程执行存储子代理子进程终端待办类型契约框架 vendorWeb 访问Webhook工作流工作区
依赖链 · 上游(该插件依赖的前驱):
dsh-agentdsh-api-session-controllerdsh-api-workspace-controllerdsh-client-file-uploaddsh-client-localedsh-client-shortcutsdsh-client-ui-layoutdsh-client-ui-primitivesdsh-client-ui-rendererdsh-client-ui-sessiondsh-client-ui-settingsdsh-commandsdsh-goaldsh-llmdsh-llm-retrydsh-plan-modedsh-sessiondsh-settingsdsh-token-meterdsh-tool-tododsh-workspace
依赖链 · 下游(依赖该插件的节点):
dsh-client-ui-agent-presetdsh-client-ui-approvaldsh-client-ui-attachmentdsh-client-ui-chatdsh-client-ui-commandsdsh-client-ui-deliverablesdsh-client-ui-goaldsh-client-ui-input-triggerdsh-client-ui-jobsdsh-client-ui-message-feedbackdsh-client-ui-model-selectiondsh-client-ui-open-in-appdsh-client-ui-permission-presetsdsh-client-ui-plandsh-client-ui-scheduledsh-client-ui-sidebar-rightdsh-client-ui-sidebar-terminaldsh-client-ui-subagentdsh-client-ui-tooldsh-client-ui-trajectorydsh-client-ui-user-questionsdsh-client-ui-workflow-rundsh-client-ui-workspacedsh-experimental-client-ui-agent-teamdsh-experimental-client-ui-voice-inputdsh-session-log-export
同一拓扑层(Layer 13,层次遍历层序):
插件信息
| 包名 | @deepseek-ai/dsh-client-ui-conversation |
|---|---|
| 分组 | G06 · 客户端 UI 包 |
| 拓扑层 | Layer 13(层次遍历:被依赖方先于依赖方) |
| 源码路径 | packages/client/ui-conversation |
| 来源层 | L2 web-app bundle(base 之上装配) |
① 实现逻辑
目标中立会话装配与输入核心:apply 建 UiConversation 与 InputHub,用 ctx.uiSession.provide 为每会话解析出 conversation/input hooks 与 inputActions (src/client/apply.ts:283-299)。骨架经 slots.registerFactory('conversation.content') 与 register('conversation.session'/'conversation.header'/'conversation.session.header'/'conversation.composer.bar') 声明整棵会话树及子槽 (src/client/apply.ts:308-529)。输入侧实现 Enter/Shift+Enter 等固定快捷键与停转快捷键 (src/client/apply.ts:236-265),并实现文件选择/拖入的 addFiles 与 draft 上传(含 Desktop 桥 __DSH_HOST_PATHS__)(src/client/apply.ts:100-108, 459-497)。最后 ctx.plugin(ConversationController) 与 todoDockEntry/queueDockEntry (src/client/apply.ts:545-551);宿主半暴露 busyEnter 设置字段 (src/index.ts:17-32)。
内部结构动态 DAG(深色主题:橙色=上游依赖 · 绿色=下游依赖 · 棕色=外部seam · 蓝=本插件)
本插件
上游依赖
下游依赖
外部 seam
② 注册/提供(provides)
- ctx.conversation (IConversation:按 session scope 寻址的会话动作与输入注册表)
- ctx.uiConversation (UiConversation:目标中立的会话注册表与每会话装配)
- 槽位骨架:main#conversation、conversation.content(factory)、conversation.session、conversation.header、conversation.session.header、conversation.composer.bar
- 子槽声明:conversation.view(list)、conversation.composer(chain)、conversation.input.attachments/overlay/permission/left/plan/right/model/activity、conversation.input.dock(list)、conversation.composer.dock(list)、conversation.hero.*
- ctx.uiSession 标准 hooks conversation/input 与 props inputActions
- settings.general.item#composer-enter (Enter 行为偏好)
- Locale 命名空间 conversation
- 上抛 ConversationNodeDefinition/ConversationViewDefinition/ConversationStore/UiConversation/ConversationController 等公开类型与 createConversationStore/inspectRequestPrompt
③ 依赖(depends_on · 上游前驱)
dsh-api-session-controllerE1+E2
按会话解析 scope 与 conversation 服务
src/client/apply.ts:4 + src/client/apply.ts:130-137 scopedConversation(sessions, id)
dsh-api-workspace-controllerE1
工作区状态以渲染工作区标题
src/client/contract/slots.ts:6 + src/client/skeleton/ConversationContent.tsx:4
dsh-client-localeE1+E2
注册 conversation 字典
src/client/apply.ts:10 merge + src/client/apply.ts:159 ctx.locale.register(NS)
dsh-client-shortcutsE1+E2
注册输入与停转固定快捷键
src/client/apply.ts:14 ShortcutCommandId + src/client/apply.ts:236 ctx.inject(['shortcuts'])
dsh-client-ui-layoutE1
会话内容布局约束
src/client/contract/slots.ts:15 import @deepseek-ai/dsh-client-ui-layout/client
dsh-client-ui-sessionE1+E2
向会话 UI provide 会话/输入 hooks
src/client/apply.ts:12 merge + src/client/apply.ts:283 ctx.uiSession.provide
dsh-client-ui-settingsE1+E2
读取 Enter 行为等运行时设置
src/client/apply.ts:13 merge + src/client/input/submission-policy.ts:9 configForms
dsh-settingsE1+E2
宿主侧投影 busyEnter 为设置字段
src/index.ts:2 import @deepseek-ai/dsh-settings + src/index.ts:31 settings.configure
dsh-token-meterE1
上下文占用计量显示
src/client/context-occupancy.ts:1 import @deepseek-ai/dsh-token-meter/client
dsh-tool-todoE1+E2
Todo 记录与 Todo 停靠面板
src/client/contract/records.ts:10 + src/client/apply.ts:550 ctx.plugin(todoDockEntry)
dsh-workspaceE1
工作区实体类型
src/client/contract/slots.ts:17 + src/client/skeleton/ConversationContent.tsx:3
④ 被依赖(dependents · 下游消费者)
dsh-client-ui-agent-preset
获取 conversation.hero.*/session.header.actions 槽声明与 conversation 作用域
src/client/AgentPresetLabel.tsx:16 import @deepseek-ai/dsh-client-ui-conversation/client + src/client/index.ts:153 ctx.inject(['slots','conversation',...])
dsh-client-ui-approval
占用会话编辑器槽位以接管审批
src/client/index.ts:5 ComposerChainProps + src/client/index.ts:91 ctx.slots.inject('conversation.composer')
dsh-client-ui-attachment
占据 composer/message/trajectory 图片槽位
src/client/drop-events.ts:2 ComposerAttachmentsProps + src/client/index.ts:16-27 ctx.slots.inject('conversation.*')
dsh-client-ui-chat
消耗 conversation 视图与节点注册表,注册 Chat 视图
src/client/apply.ts:6 ctx.uiConversation + src/client/apply.ts:177 ctx.slots.inject('conversation.view')
dsh-client-ui-commands
占据输入浮层槽位
src/client/index.ts:13 SlotMap merge + src/client/index.ts:64 slots.inject('conversation.input.overlay')
dsh-client-ui-deliverables
注册交付物 ConversationNode 定义
src/client/index.ts:17 + src/client/index.ts:59 ctx.uiConversation.events.register
dsh-client-ui-goal
注册 goal 命令输入节点定义并占用 input.dock 槽
src/client/index.ts:21 merge + src/client/index.ts:68 ctx.uiConversation.events.register
dsh-client-ui-input-trigger
依赖 Conversation 声明的输入浮层槽
src/client/slots.ts:2 + src/core/contract.ts:7 (conversation.input.overlay 槽)
dsh-client-ui-jobs
依赖 Conversation 声明的会话头动作槽
src/client/JobListAction.tsx:10 + src/client/index.ts:36 (conversation.session.header.actions 槽声明方)
dsh-client-ui-message-feedback
使用 ui-conversation 声明的 assistant-actions 与 input.overlay 槽
src/client/index.ts:16 import type + src/client/index.ts:98/index.ts:115 slots.inject
dsh-client-ui-model-selection
使用 ui-conversation 声明的 input.model 座位
src/client/index.ts:19 import type + src/client/index.ts:182 scope.slots.inject('conversation.input.model')
dsh-client-ui-open-in-app
使用 ui-conversation 声明的会话头部槽
src/client/OpenInAppAction.tsx:3 import + src/client/index.ts:80 slots.inject('conversation.session.header.utilities')
dsh-client-ui-permission-presets
使用 ui-conversation 声明的权限座位
src/client/index.ts:31 import type + src/client/index.ts:167 slots.inject('conversation.input.permission')
dsh-client-ui-plan
使用会话 UI 的 Turn 末尾槽与 uiConversation 事件注册面
src/client/index.ts:6 import type + src/client/index.ts:79 slots.inject('conversation.chat.turnTail')
dsh-client-ui-schedule
注册 Turn 级日程定义并渲染 Turn 末尾卡
src/client/index.ts:33 import type + src/client/index.ts:188 ctx.uiConversation.events.register
dsh-client-ui-sidebar-terminal
引入会话头部动作槽类型,用于终端恢复入口(当前 index 中已注释)
src/client/TerminalRecovery.tsx:4 import type
dsh-client-ui-subagent
复用 ComposerChainProps/ConversationViewsProps 与内嵌 conversation slot
src/client/index.ts:5 import + src/client/sidebar-chat/index.tsx:7 ConversationViewsProps
dsh-client-ui-tool
引入 MessageImageLoader/OpenFileOptions 与 conversation 节点类型
src/client/apply.ts:6 import + src/client/apply.ts:10
dsh-client-ui-trajectory
读取 trajectory target 并注册 conversation view Definition
src/client/index.ts:14 import + src/client/index.ts:53 ctx.uiConversation.binding
dsh-client-ui-user-questions
接入 conversation.composer 链与 matched 货币
src/client/index.ts:18 ComposerChainProps
dsh-client-ui-workflow-run
注册会话节点定义并读取 ConversationNodeContext
src/client/index.ts:7 import + src/client/index.ts:27 ctx.uiConversation.events.register
dsh-client-ui-workspace
引入 conversation.hero.workspace 槽声明类型
src/client/contract/slots.ts:47 import type
dsh-experimental-client-ui-agent-team
在会话头部动作区渲染 Team 入口
src/client/TeamAction.tsx:16 import '@deepseek-ai/dsh-client-ui-conversation/client' + src/client/mount.ts:6 import
dsh-experimental-client-ui-voice-input
在输入区渲染麦克风控件
src/client/VoiceInput.tsx:4 import '@deepseek-ai/dsh-client-ui-conversation/client' + src/client/mount.ts:7 import
dsh-session-log-export
声明会话头部工具插槽的运行时 props 类型
src/client/index.ts:7 import; src/client/Dialog.tsx:16 PropsRuntime<'conversation.session.header.utilities'>