Skip to content

整合:重建 ZER-404 只读 Agent 会话工作台 - #46

Merged
ZeroPointSix merged 28 commits into
mainfrom
agent/zer-404-clean-readonly-workbench-20260813
Aug 15, 2026
Merged

整合:重建 ZER-404 只读 Agent 会话工作台#46
ZeroPointSix merged 28 commits into
mainfrom
agent/zer-404-clean-readonly-workbench-20260813

Conversation

@ZeroPointSix

@ZeroPointSix ZeroPointSix commented Aug 13, 2026

Copy link
Copy Markdown
Owner

概要

重新从最新 main 建立 ZER-404 的干净整合链,只整合 W1–W5 的只读会话可观测能力,不再把所有开放 PR 粗暴堆叠,也不混入 W6 的 Agent 创建 / New chat 写能力。

  • W1:/sessions/sessions/:id 统一为 Factory / Cursor 风格三栏会话工作台。
  • W2:冷启动历史、Slack / Discord 来源 permalink、集中式状态语义。
  • W3:per-session transcript 存储、只读快照 API、统一 SSE 游标。
  • W4:AionUi 风格连续活动流,展示消息、思考、计划、工具调用、终端与文件 diff。
  • W5:snapshot → tail → live 恢复链、stable entry upsert、会话切换清理、并发锁修复、Virtuoso 长会话虚拟化。

整合策略

本 PR 从 main 重建,不以 #37 / #39 / #43 等历史整合分支为基线:

  1. 采用 ZER-404 W1: 三栏只读会话工作台骨架 #30 的 W1 组件边界和响应式 Drawer,不重复引入 feat(web): replace sessions table with workbench #31 的另一套同名工作台。
  2. 采用 fix: repair session detail history and source links #33 的 W2 数据可信度修复,不重复引入 fix: ZER-669 P1 遗留修复:详情冷启动补历史 / 来源链接语义 / 状态展示映射 #35
  3. 采用 feat(session): add transcript store and read-only stream #34 的 W3 与 feat(web): add AionUi-inspired session activity feed (ZER-671) #32 的 W4,再接入 fix(session): recover transcript streams and virtualize activity feed (ZER-673) #45 的 W5 修复。
  4. 将活动流接入 SessionMainPanel,不恢复已经下线的旧 SessionDetailPage
  5. 明确排除 [W6] 工作台可配置性:Agent 切换 + New Agent 向导 + New chat #42 / W6:页面无 Agent 切换、New Agent、New chat、发送、插话、Stop / Cancel 或参数修改。

本轮额外修复

  • 修复 sparse multi-hunk diff:1000 行文件中第 100 / 500 / 900 行的分散修改均可见;大 no-op diff 不再无界渲染。
  • 修复合法 ACP sparse tool_call_update:结果 / terminal / diff 在中间更新到达、最终 completed 仅含状态时,tool_result 仍保留完整聚合 payload。
  • 修复窄屏 Virtuoso 高度折叠为 0,390px 下活动流现在实际可见且可滚动。
  • 深链会话尚未进入列表快照时,会并入左栏;请求失败时显示明确加载错误。
  • 统一 Agent 可读名称,隐藏冗长 ACP 包名,同时保留真实 session id。
  • 搜索扩展到 session、Agent、平台、thread、workdir、Profile 与模型。

Review Contract

Goal

交付 ZER-404 W1–W5 的完整只读 Agent 会话工作台:管理员能在三栏界面中实时观察 Agent 状态、消息、思考、计划、工具调用、终端和文件差异;刷新、重连、长会话和深链场景保持数据正确,且页面不暴露任何会话写入或控制能力。

Non-goals

  • 不实现 W6 / ZER-672 的 Agent 切换、New Agent 向导或 New chat。
  • 不允许发送消息、插话、Stop / Cancel、权限审批或运行时参数修改。
  • 不引入跨进程重启的 durable transcript 持久化。
  • 不整合与 ZER-404 无关的开放 PR(例如 MCP 电路熔断)。

Accepted Residual Risks

Transcript 与统一 SSE replay history 仍是有界内存存储。客户端落后于保留窗口时会显示明确恢复提示并重新拉取快照,而不是静默补造历史;跨服务重启的完整 transcript 归档需后续独立设计。生产 bundle 仍有既有的大 chunk 警告,本 PR 不混入代码分包重构。

Acceptance Criteria

  • /sessions/sessions/:id 使用三栏工作台,旧 ProTable 主路径与旧详情页下线。
  • 左栏按 Profile / Agent 分组,支持搜索、状态、平台筛选和深链会话并入。
  • 中栏展示真实 transcript 活动流,不是 mock 或状态时间线占位。
  • 工具调用可展开查看输入、输出、终端和 bounded multi-hunk diff。
  • 右栏展示元数据、告警和生命周期事件。
  • 恢复顺序为 snapshot → tail → live SSE;revision 使用 stable entry_id upsert。
  • 路由从会话 A 切到 B 时先清空旧 transcript;统一 stream 无锁顺序反转。
  • 1440px 为 268 / 主舞台 / 292 三栏;390px 侧栏与 Inspector 进入 Drawer,无横向溢出,活动流可见。
  • 页面没有 Agent 创建、新会话、发送、停止、取消、审批或参数修改控件。
  • Web lint / tests / build、Rust workspace check 与 transcript/session 定向测试通过。

Follow-ups

  • 在测试或生产环境使用真实 ACP 会话观察 recovery 告警与 SSE 延迟。
  • 如需跨进程重启恢复完整 transcript,单独设计 durable store。
  • W6 保持独立 PR,在 ZER-568 / ZER-672 范围内评审,不与本 PR 的只读边界混合。

验证

  • pnpm --dir web lint
  • pnpm --dir web test:10 个测试文件、50 项通过
  • pnpm --dir web build
  • cargo check --workspace
  • cargo test -p openab-core --no-default-features transcript::tests:7 项通过
  • cargo test -p openab-core --no-default-features session_event::tests:6 项通过
  • cargo test -p openab-gateway --no-default-features session_admin::tests:7 项通过
  • cargo test -p openab-gateway --test admin_api_integration --no-default-features transcript:2 项通过
  • Headless Chromium 1440 / 390 实测:三栏 / Drawer、活动流、来源链接、复制链接、只读边界、无横向溢出、无 console error 均通过

关联:ZER-404、ZER-668、ZER-669、ZER-670、ZER-671、ZER-673。

替代历史整合 PR:#37#39#41#43

cursoragent and others added 17 commits August 13, 2026 11:48
Replace ProTable sessions list and detail pages with a read-only
three-column SessionWorkbenchPage using Ant Design X Conversations for
the sidebar, status bar + transcript placeholder in the main panel,
and metadata/alerts/events tabs in the inspector.

Co-authored-by: ZeroPointSix <ZeroPointSix@users.noreply.github.com>
- 左栏新增 New chat 禁用占位(会话创建 W6 开放)
- 中栏状态条补齐 Profile / workdir 字段
- 底部只读条内嵌 SSE 连接态:新增 StreamStatusContext,复用 AdminLayout 同一 SSE,不新建连接
- 新增 useMediaQuery,≤1100px 左右栏折叠为 Drawer,390 下顶栏不溢出
- 版本号 0.2.3 → 0.3.0
- 重新构建并提交 web/app.js 与 web/styles.css 产物
@linear-code

linear-code Bot commented Aug 13, 2026

Copy link
Copy Markdown

ZER-404

ZeroPointSix added a commit that referenced this pull request Aug 15, 2026
Merge W1–W5 readonly workbench and ZER-712 polish onto main.

Includes PR #46 session workbench plus thinking coalesce, shared connection status, Agent-grouped sidebar, muted tool rows, and inspector log.
@ZeroPointSix
ZeroPointSix merged commit e350363 into main Aug 15, 2026
46 of 48 checks passed
@ZeroPointSix

Copy link
Copy Markdown
Owner Author

已由用户要求把工作台 + ZER-712 打磨一并合进 main#47,merge 95d7253)。本 PR 的提交已包含在 #47 中,因此关闭以免重复合入。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants