Skip to content

feat(workbench): 支持 Desktop 与 WebUI 的多会话和终端分屏 - #662

Open
yovinchen wants to merge 14 commits into
mainfrom
feat/session-workbench-web
Open

feat(workbench): 支持 Desktop 与 WebUI 的多会话和终端分屏#662
yovinchen wants to merge 14 commits into
mainfrom
feat/session-workbench-web

Conversation

@yovinchen

@yovinchen yovinchen commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

关联 Issue

Closes #659

功能摘要

  • 将 Workbench 布局 reducer、拖拽状态机、拖放提交、终端运行时绑定、视图租约和终端 Pane 宿主下沉到 @liveagent/ui,Desktop 与 WebUI 复用同一套核心语义。
  • 为 Gateway WebUI 接入完整多 Pane 宿主:支持侧栏会话、工作区、Right Dock 既有终端和“新建终端”通过拖拽或菜单进入中央画布,并支持四向分屏、Pane 重排、焦点切换和分隔线调整。
  • 每个 Web 会话 Pane 保持稳定宿主,按 conversationId 隔离历史、流式订阅、Composer、发送/停止、队列、上传、工具审批、模型与轨迹状态;草稿转正式会话时原位重绑。
  • Web 拖拽与粘贴附件按事件落点的 data-file-upload-conversation-id 和对应工作目录路由,不再误投到当前焦点会话。
  • Workbench primary composer 恢复完整禁用边界:离线、历史加载、压缩及传输锁定时禁止编辑与发送,多 Pane 不再绕过历史加载保护。
  • Right Dock 终端拖拽的全局 pointer move/up/cancel 监听改为 capture 阶段,嵌套菜单或终端控件即使阻止冒泡,也不会吞掉拖拽提交和分屏创建。
  • Desktop 会话 Pane 以 paneId 作为唯一 Host 解析键,会话与项目身份只读取注册表;拖拽提交、焦点同步或恢复期间短暂保留的旧 Host 不再因双重身份校验触发整页 Error Boundary。
  • 补齐删除/归档/缺失工作区、陈旧拖放 revision、工作区异步建会话、终端关闭和幽灵会话等生命周期边界,避免背景 Pane 串线或非法布局覆盖。
  • 统一 Desktop 与 WebUI 的终端绑定和 view lease:同一终端只由一个交互视图消费;修复新建分屏终端在绑定更新早于 session 列表事件时被误判为陈旧绑定、长期停在“正在启动终端…”的问题。
  • WebUI 打开或刷新时始终进入当前会话的单 Pane 首页,不恢复上一次 Web 布局和运行时绑定;Desktop 继续保留原有窗口布局与终端重挂能力。
  • 保留 VITE_LIVEAGENT_SESSION_WORKBENCH=0 回退路径,关闭后继续使用原有单 Pane WebUI。

改动范围

  • 模块:agent-uiagent-guiagent-gateway/web
  • 主要路径:
    • 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-gui/src/pages/ChatPage.tsx
    • crates/agent-gateway/web/src/app/GatewayApp*
    • crates/agent-gateway/web/src/app/hooks/fileUploadDropRouting.ts
    • crates/agent-gateway/web/src/app/workbench/**
    • crates/agent-gateway/web/test/**

截图与运行预览

WebUI 会话与终端分屏

WebUI 会话与终端分屏

本地 WebUI 实测:

  1. 刷新页面后显示单 Pane 首页:1 个会话区域、0 个终端区域、0 条分屏分隔线,不恢复上一次 Web 布局。
  2. 打开带工作目录的历史会话,从 Right Dock 选择“在分屏中新建终端”。
  3. 在稳定的单 Agent 会话下,终端 Pane 用时 445 ms 切换到可交互的 Terminal input,5 秒后仍保持可见和可交互。
  4. 截图展示了会话 Pane、终端 Pane、项目文件树、Pane 头部、分隔线和聚焦态的实际 WebUI 样式。

Desktop 与 WebUI 的 Pane 样式和交互骨架来自共享 @liveagent/ui 组件;跨端回归测试覆盖共享布局、拖放和终端租约语义。本 PR 不将 Web 截图冒充 Desktop 原生截图。

验证结果

  • make check-all
    • 21/21 检查全部通过。
    • 包含 Shared UI / GUI / WebUI TypeScript、Vite 生产构建、Biome、Gateway golangci-lint 与 Go 测试、GUI/WebUI 前端测试、Release 脚本测试、Rust 全目标与文档测试、Proto lint/breaking 检查。
    • Rust 全目标测试:982 项通过,3 项忽略,0 项失败。
  • Desktop 前端测试:2675/2675 通过。
  • WebUI 前端测试:661/661 通过。
  • 新增高优先级回归测试:
    • 背景 Pane 拖拽/粘贴附件按落点会话和工作目录路由。
    • primary composer 在离线、历史加载、压缩和传输锁定时禁用,发送入口遵循相同边界。
    • 嵌套控件阻止 pointer 事件冒泡时,Workbench 仍能在 capture 阶段收到终端拖拽的 move/up 并完成提交。
    • Desktop Host 按 paneId 获取权威注册身份,已移除 Pane 返回可恢复的空解析,不再因旧 identity props 崩溃。
  • Workbench/终端定向回归测试:42/42 通过,覆盖拖拽事件传播、布局状态机、终端提交和 Pane 注册边界。
  • Chrome WebUI 实测:冷启动单 Pane 首页与新建分屏终端均通过。
  • git diff --check origin/main...HEAD:通过。
  • 已合并并包含 origin/maindbca2cd1,不存在剩余冲突。

提交前检查

  • 已关联需求 Issue。
  • 已同步目标分支,不存在合并冲突。
  • 改动范围聚焦,不包含无关修改。
  • 不包含密钥、令牌或个人数据。
  • 已补充实际 WebUI 运行截图,并明确 Desktop 原生截图边界。
  • Issue [Feature] Gateway WebUI 支持 Session Workbench 多会话与终端分屏 #659、PR 说明与现有 Workbench 架构文档已覆盖本次行为和降级边界。

将终端 Pane、运行时绑定与租约、拖拽状态机和窗口布局迁入 @liveagent/ui,桌面端保留宿主注入与兼容导出。

统一侧栏、Right Dock 和 SSH Overlay 的拖拽起点,并修复多 Pane 聚焦时的 composer 引用与草稿状态切换。
为 Gateway WebUI 增加稳定的会话 Pane 宿主、终端 Pane 运行时与窗口级 Workbench 控制器,支持会话和终端并行操作。

接通侧栏、项目与 Right Dock 的拖拽/菜单入口,并按 conversationId 隔离草稿、上传、审批、队列和流式订阅。
补充 Web 多会话流隔离、草稿转正、终端租约、拖放 CAS 与关闭联动测试。

同步桌面端 composer 聚焦、终端恢复、画布契约和拖拽安全回归断言。
@yovinchen
yovinchen marked this pull request as ready for review August 28, 2026 20:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Gateway WebUI 支持 Session Workbench 多会话与终端分屏

1 participant