目录:ACP 协议API 网关与控制器附件启动与插件管理客户端运行时客户端 UI 包上下文压缩上下文注入核心运行时凭据与授权交付物文档处理实验特性宿主扩展反馈通道文件系统目标与计划工具守卫Hooks 扩展宿主服务交互命令作业调度LLM 适配LSP 集成MCP 协议规划模式Agent 预设代码执行运行时运行时诊断沙箱定时调度SDK 与协议会话核心会话检索设置Shell 执行技能溢出存储SSH 远程执行存储子代理子进程终端待办类型契约框架 vendorWeb 访问Webhook工作流工作区
依赖链 · 上游(该插件依赖的前驱):
dsh-api-gatewaydsh-api-remotesdsh-api-session-controllerdsh-client-localedsh-client-shortcutsdsh-client-ui-conversationdsh-client-ui-deliverablesdsh-client-ui-layoutdsh-client-ui-primitivesdsh-client-ui-rendererdsh-client-ui-sessiondsh-client-ui-sidebar-documentpreviewdsh-host-open-in-app
依赖链 · 下游(依赖该插件的节点):
无下游(叶子/被消费端)
同一拓扑层(Layer 18,层次遍历层序):
↑ Layer 17(6 插件)Layer 18
插件信息
| 包名 | @deepseek-ai/dsh-client-ui-open-in-app |
|---|---|
| 分组 | G06 · 客户端 UI 包 |
| 拓扑层 | Layer 18(层次遍历:被依赖方先于依赖方) |
| 源码路径 | packages/client/ui-open-in-app |
| 来源层 | L2 web-app bundle(base 之上装配) |
① 实现逻辑
apply 构造 OpenInAppController(加载 Host 应用列表/持久化选择)与 OpenInAppPathController(经 Session Remote 判定桌面可用性、查关联应用、执行 open/reveal),并把二者分发到五处槽(src/client/index.ts:123-125)。会话头部 utilities 槽注册「Open In...」分体按钮,注入应用列表/选择/启动进度 hooks 与图标 URL(src/client/index.ts:80-99);侧栏文档预览的两个槽与 deliverables 两个槽注册路径动作,失败经 Toast 播报(src/client/open-failure-toast.tsx:4)。另注册 workspace.openLocal 快捷键,busy/无目标时给出阻塞原因(src/client/index.ts:59-77)。
内部结构动态 DAG(深色主题:橙色=上游依赖 · 绿色=下游依赖 · 棕色=外部seam · 蓝=本插件)
本插件
上游依赖
下游依赖
外部 seam
② 注册/提供(provides)
- conversation.session.header.utilities 条目 'open-in-app'(会话头部「在应用中打开」分体按钮)
- sidebar.right.tab.document.actions / sidebar.right.tab.document.unpreviewable 条目(文档预览的打开/定位路径动作)
- deliverables.file.actions / deliverables.review.file.actions 条目(交付与变更文件卡的路径动作)
- ctx.shortcuts 命令 workspace.openLocal(在本地应用中打开当前工作区)
③ 依赖(depends_on · 上游前驱)
dsh-api-remotesE1+E2
ctx.remote 与 Remote 结果类型
src/client/index.ts:15 import type + src/client/open-path.ts:6 import
dsh-api-session-controllerE1+E2
调用 session Remote 打开工作区路径/查询关联应用
src/client/index.ts:16 import remote + src/client/open-path.ts:7 import types
dsh-client-localeE2
注册 open-in-app 文案
src/client/index.ts:9 import + src/client/index.ts:50 ctx.locale.register(NS)
dsh-client-shortcutsE2
注册 workspace.openLocal 快捷键命令
src/client/index.ts:7 import + src/client/index.ts:59 ctx.shortcuts.register
dsh-client-ui-conversationE2
使用 ui-conversation 声明的会话头部槽
src/client/OpenInAppAction.tsx:3 import + src/client/index.ts:80 slots.inject('conversation.session.header.utilities')
dsh-client-ui-deliverablesE2
使用 deliverables 声明的文件动作槽
src/client/FileRouteAction.tsx:3 import type + src/client/index.ts:116/index.ts:119 slots.inject
dsh-client-ui-layoutE1+E2
读主面板选择以判断当前无全局面板时才有打开目标
src/client/index.ts:11 import type + src/client/index.ts:53 ctx.layout.panelInfo
dsh-client-ui-primitivesE1
复用 Toast/图标/按钮控件
src/client/open-failure-toast.tsx:4 import + src/client/OpenTargetButton.tsx:6
dsh-client-ui-rendererE1+E2
ctx.slots 槽注册表
src/client/index.ts:10 import type + src/client/index.ts:39 inject 'slots'
dsh-client-ui-sidebar-documentpreviewE2
使用文档预览声明的路径动作槽
src/client/index.ts:13 import type + src/client/index.ts:104 slots.inject('sidebar.right.tab.document.actions')
dsh-host-open-in-appE1
复用 Host 侧共用的图标路由前缀常量
src/client/index.ts:17 import { OPEN_IN_APP_ICON_PREFIX_ROUTE }
④ 被依赖(dependents · 下游消费者)
无下游(叶子/被消费端)