Affected area
- Gateway WebUI (
agent-gateway/web)
- Desktop UI shared layer (
agent-ui / agent-gui)
- Agent sessions / streaming
Problem statement (what should this solve)
桌面端已通过 #357 支持 Session Workbench 多会话分屏,但 Gateway WebUI 仍以单一“当前会话”为页面级状态:侧栏会话、工作区和 Right Dock 终端无法拖入中央画布形成独立 Pane,用户也无法在浏览器中同时观察或操作多个会话与终端。
如果只在 WebUI 外层增加分屏容器,会继续存在以下问题:
- 背景 Pane 的发送、停止、队列、附件、工具审批可能被错误路由到当前焦点会话。
- 切换焦点可能重新挂载会话宿主,导致流式订阅、Composer 草稿和滚动状态丢失。
- 同一终端会话可能同时被 Right Dock 与 Workbench 消费,造成输出流重复订阅或输入竞争。
- 桌面端与 WebUI 各自维护拖拽状态机、终端绑定和布局 reducer,长期会产生行为漂移。
需要在保留 #357 桌面端既有语义的基础上,把可复用的 Workbench 能力下沉到共享 UI 层,并为 Gateway WebUI 提供完整的多 Pane 宿主和按会话路由。
Proposed behavior
1. 桌面端与 WebUI 共用 Workbench 核心
- 将窗口布局 reducer、拖拽状态机、拖放提交、终端运行时绑定、视图租约和终端 Pane 宿主迁移到
@liveagent/ui。
- Desktop 仅注入 Tauri 终端 client 与窗口级单例;WebUI 注入 Gateway 终端 client 与内存绑定。
- 侧栏、项目、Right Dock 和 SSH Overlay 使用同一种拖拽起点与 pointer capture 语义。
2. Gateway WebUI 支持多会话 Pane
- 会话侧栏支持拖拽和“在分屏中打开”。
- 工作区行可拖入画布,在目标 Pane 中创建对应项目的新会话。
- 每个会话 Pane 保持稳定宿主,焦点变化只切换 primary/background 绑定,不重新挂载 DOM。
- 草稿会话获得真实 conversation ID 后,承载它的 Pane 原位重绑,不关闭或闪回只读历史。
- 会话被删除时关闭对应 Pane;切换、关闭 Pane 不应停止后台运行。
3. 按 conversationId 隔离交互状态
每个 Pane 的以下行为必须显式按 conversation ID 路由:
- 流式订阅与历史窗口
- Composer 草稿与发送/停止
- 排队消息及队列编辑
- 上传文件与粘贴导入
- 工具审批
- 模型选择、运行状态与轨迹视图
背景 Pane 的操作不得依赖页面级 displayedConversationId。
4. Gateway WebUI 支持终端 Pane
- Right Dock 的既有终端和“新建终端”入口可拖入画布,也提供菜单式分屏入口。
- 本地终端 Pane 按持久化 launch spec 恢复;显式关闭的会话不能被自动复活。
- 使用窗口级 binding store 与 view lease,确保一个终端输出流同时只由一个交互视图消费。
- 终端关闭、幽灵会话、应用重启和 Pane 关闭需要有确定的解绑/恢复语义。
5. 布局与降级
- 支持 Pane 边缘四向分屏、画布边缘停靠、Pane 重排和分隔线调整。
- 窄画布无法满足最小 Pane 尺寸时自动停靠或给出明确提示,不能生成非法布局。
- 保留
VITE_LIVEAGENT_SESSION_WORKBENCH=0 逃生开关,可回退单 Pane 模式。
Acceptance criteria
Estimated change scope
crates/agent-ui/src/lib/workbench/**
crates/agent-ui/src/components/workbench/**
crates/agent-ui/src/components/chat/ChatHistorySidebar*
crates/agent-ui/src/components/project-tools/RightDock*
crates/agent-ui/src/components/workspace-editor/**
crates/agent-gui/src/pages/chat/workbench/**
crates/agent-gui/src/pages/chat/surfaces/**
crates/agent-gateway/web/src/app/GatewayApp*
crates/agent-gateway/web/src/app/workbench/**
crates/agent-gateway/test/webui/**
Alternatives considered
- WebUI 单独复制桌面 Workbench 实现:短期直接,但布局、拖拽、终端租约和恢复语义会形成两套实现,不采用。
- 只支持两个固定会话栏位:无法复用现有 PaneTree、终端 Pane 和四向分屏能力,也不能覆盖项目/终端拖放场景。
- 焦点切换时复用单一页面级会话宿主:背景会话无法独立保持 Composer、订阅与交互状态,不满足多 Pane 目标。
Related issue
Pre-submit checklist
Affected area
agent-gateway/web)agent-ui/agent-gui)Problem statement (what should this solve)
桌面端已通过 #357 支持 Session Workbench 多会话分屏,但 Gateway WebUI 仍以单一“当前会话”为页面级状态:侧栏会话、工作区和 Right Dock 终端无法拖入中央画布形成独立 Pane,用户也无法在浏览器中同时观察或操作多个会话与终端。
如果只在 WebUI 外层增加分屏容器,会继续存在以下问题:
需要在保留 #357 桌面端既有语义的基础上,把可复用的 Workbench 能力下沉到共享 UI 层,并为 Gateway WebUI 提供完整的多 Pane 宿主和按会话路由。
Proposed behavior
1. 桌面端与 WebUI 共用 Workbench 核心
@liveagent/ui。2. Gateway WebUI 支持多会话 Pane
3. 按 conversationId 隔离交互状态
每个 Pane 的以下行为必须显式按 conversation ID 路由:
背景 Pane 的操作不得依赖页面级
displayedConversationId。4. Gateway WebUI 支持终端 Pane
5. 布局与降级
VITE_LIVEAGENT_SESSION_WORKBENCH=0逃生开关,可回退单 Pane 模式。Acceptance criteria
Estimated change scope
crates/agent-ui/src/lib/workbench/**crates/agent-ui/src/components/workbench/**crates/agent-ui/src/components/chat/ChatHistorySidebar*crates/agent-ui/src/components/project-tools/RightDock*crates/agent-ui/src/components/workspace-editor/**crates/agent-gui/src/pages/chat/workbench/**crates/agent-gui/src/pages/chat/surfaces/**crates/agent-gateway/web/src/app/GatewayApp*crates/agent-gateway/web/src/app/workbench/**crates/agent-gateway/test/webui/**Alternatives considered
Related issue
Pre-submit checklist