feat(web-shell): improve sidebar session management - #9122
Conversation
Code reviewI formed my baseline before reading the diff: reuse the existing Radix primitives for the hover panel, cap previews via a shared constant with collapse-reset, measure overflow once on hover for a distance-proportional CSS scroll, persist expansion in localStorage, and mirror the existing No critical blockers found. Three non-blocking notes for the maintainer:
sequenceDiagram
participant P1 as WebShellSidebar
participant P2 as WorkspaceDaemonClient
participant P3 as serve metadata route
participant P4 as AcpSessionBridge
participant P5 as SessionService
P1->>P2: updateSessionMetadata(sessionId, displayName)
P2->>P3: PATCH workspace-qualified metadata
P3->>P4: updateSessionMetadata
alt live session
P4-->>P3: effective displayName
else persisted or archived session
P3->>P5: getSessionLocation then renameSession(location)
P5-->>P3: renamed
end
P3-->>P1: 200 with sessionId and displayName
Files changed (30 of 30)
Test evidence — the PR's own CI (fetched via API; no PR code executed here)No failures at fetch time. The main unit suite ( Final CI results for
One row per check name (latest run); skipped checks omitted; failures sort first. / 每个检查名一行(取最新一次运行),省略 skipped,失败项排在最前。 Not verified: live UI behavior — nobody has driven this surface yet (the author's own note says tests, builds, and manual verification were not run in the authoring session, and this review is static). The unit suite asserts the interaction logic in jsdom, but hover-pointer timing, the title scroll feel, and menu-vs-panel layering are exactly what jsdom cannot prove. Sandboxed verification would settle this: 中文说明代码审查:实现与我独立设想的方案基本一致——悬停面板复用 Radix popover 取代原先手写的 fixed 定位 tooltip;核心 未发现阻塞性问题。 三条非阻塞提醒:
时序图展示了重命名的完整链路:侧边栏 → SDK → serve 路由 → bridge(活跃会话)或 SessionService(持久化/归档会话,先定位存储再重命名)→ 200 返回。 测试证据:来自 PR 自身 CI(API 抓取,未在此执行任何 PR 代码)。抓取时无失败:ubuntu 单测套件、Serve A/B、web-shell 视觉截图、macOS SDK 仍在运行;Real daemon E2E、Desktop Shell(ubuntu/windows)、依赖 CVE 审计、密钥扫描已通过。macOS/Windows Node 测试腿与 tmux-testing/verify/集成为按需触发的跳过项,不是缺口。triage/review-pr 是机器人编排任务,不属于 PR CI。 未验证:真实 UI 交互——尚无人实际操作过该界面(作者声明创作会话中未运行测试/构建/手动验证,本审查为静态审查)。沙箱验证可以补齐: — Qwen Code · qwen3.8-max Reviewed at |
|
Confidence: 3/5 — clean review with no blocking findings, but the Stage 0 size escalation (500+ production lines on a Stepping back: this PR does what it set out to do, and does it the way I would have. The old hand-rolled fixed-position tooltip is gone in favor of Radix primitives, the core change is a single backwards-compatible parameter, the new serve route mirrors an established pattern with defense in depth (client-side capability gate and server-side trusted-runtime check), and the tests assert behavior rather than existence. The three soft spots — keyboard access to session details dropped by design, workspace sections now default-expanded on first visit, and the duplicated arrow SVG — are all judgment calls a maintainer should bless, not defects I can block on. Nobody has driven the UI yet, which is the honest gap: interaction regressions are this PR's own stated risk, and jsdom cannot reproduce them. Policy, not doubt, drives the score here: at ~1,761 production lines across four packages with a core-path touch, the workflow escalates to a maintainer for awareness instead of auto-approving, regardless of how clean the stages looked. So I'm parking it rather than approving. ⏸️ Deferring to @wenshao — (1) Stage 0 maintainer-awareness escalation for a feat of this size touching core paths, (2) the two product/a11y judgment calls above, and (3) four PR CI runs ( 中文说明置信度:3/5 —— 审查干净、无阻塞项,但 Stage 0 的规模升级( 整体来看:这个 PR 完成了它设定的目标,做法也与我的独立方案一致。手写的 fixed 定位 tooltip 被 Radix 原语取代,核心改动只是一个向后兼容的可选参数,新的 serve 路由沿用既有模式并做了纵深防御(客户端 capability 门控 + 服务端可信运行时校验),测试断言的是行为而非存在。三个软肋——按设计移除键盘访问会话详情、工作区首次访问默认改为展开、箭头 SVG 重复——都是需要维护者拍板的取舍,而不是我能拦截的缺陷。目前还没有人实际操作过这个 UI,这是如实的缺口:交互回归正是这个 PR 自己声明的主要风险,而 jsdom 无法复现。 分数由政策而非疑虑决定:约 1,761 行生产代码横跨四个包且触及核心路径,流程要求升级给维护者关注而不是自动批准——即使各阶段都很干净。因此我选择暂缓而不是批准。 ⏸️ 转交 @wenshao ——(1)Stage 0 规模升级需维护者关注;(2)上述两个产品/无障碍取舍;(3)该 commit 仍有四个 PR CI 运行中(Qwen Code CI、Serve A/B、Web-shell Visuals、SDK Java macOS)。需要人工决策。 — Qwen Code · qwen3.8-max Reviewed at |
🖼️ web-shell visual previewRendered against a mock daemon (no real backend): the PR base vs this PR head Screenshots · before / afterFull-resolution recordings (.webm) are attached to the workflow run. — Qwen Code · web-shell visuals |
|
Thanks for the PR! The design doc up front is appreciated — it makes the intent easy to follow.
Moving on to code review. 🔍 中文说明感谢贡献!PR 附带了设计文档,意图清晰。
进入代码审查。🔍 — Qwen Code · qwen3.8-max Reviewed at |
Code Coverage Summary
CLI Package - Full Text ReportCore Package - Full Text ReportFor detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run. |
🩺 serve daemon A/BBuilt the PR base vs this PR head
|
| field | PR base (before) | this PR (after) |
|---|---|---|
features[] |
— | "workspace_session_metadata" |
— Qwen Code · serve A/B
|
🤝 Takeover engaged: the autofix loop now manages this PR — it will address new review feedback and resolve base conflicts until the label is removed or the round cap is reached. Remove the 中文说明🤝 已接管:autofix 循环现在管理此 PR —— 将持续处理新的评审反馈与 base 冲突,直到移除标签或达到轮次上限。移除 |
|
🔀 Base updated: red check(s) [Test (ubuntu-latest, Node 22.x), web-shell E2E Smoke (ubuntu-latest, Node 22.x), review-pr] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [Test (ubuntu-latest, Node 22.x), web-shell E2E Smoke (ubuntu-latest, Node 22.x), review-pr] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
…details' into codex/web-shell-sidebar-session-details
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Not explored to full depth (tool budget reached): "You are review agent reverse-audit — Reverse audit agent…": none — all checks I started were completed (~20 tool calls).; "You are review agent reverse-audit — Reverse audit agent…": none — finished within the tool budget.; "You are review agent reverse-audit — Reverse audit agent…": none (finished within budget).; "You are review agent reverse-audit — Reverse audit agent…": none — all checks I started were completed within budget (~17 of ~37 calls).; "This PR (feat(web-shell): improve sidebar session…": none — all planned checks completed within budget., and 8 more.
中文说明
仅完成部分审查,审查缺口已披露。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
未探索到全部深度(达到工具调用预算):"You are review agent reverse-audit — Reverse audit agent…":none — all checks I started were completed (~20 tool calls).;"You are review agent reverse-audit — Reverse audit agent…":none — finished within the tool budget.;"You are review agent reverse-audit — Reverse audit agent…":none (finished within budget).;"You are review agent reverse-audit — Reverse audit agent…":none — all checks I started were completed within budget (~17 of ~37 calls).;"This PR (feat(web-shell): improve sidebar session…":none — all planned checks completed within budget.,另有 8 条。
— qwen3.8-max via Qwen Code /review (v0.21.11)
|
🤖 AutoFix updated a stale base — the fix did not pass verification, but this PR was behind What I found before stopping: See the Qwen Autofix agent step logs for model/tool output. Run log: https://github.com/QwenLM/qwen-code/actions/runs/31943262489 🧠 Handled by Qwen Code · model/模型 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Not explored to full depth (tool budget reached): "agent reverse-audit (round 3)": none — no checks were cut short.; chunk 9: running the new tests in WebShellSidebar.collapse-persist.test.tsx (worktree has no node_modules; skipped full monorepo install).
Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 3.
中文说明
仅完成部分审查,审查缺口已披露。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
未探索到全部深度(达到工具调用预算):"agent reverse-audit (round 3)":none — no checks were cut short.;chunk 9:running the new tests in WebShellSidebar.collapse-persist.test.tsx (worktree has no node_modules; skipped full monorepo install)。
未审查:反向审计——在 3 轮的反审轮数上限内未收敛。
— qwen3.8-max via Qwen Code /review (v0.21.12)
|
🤖 AutoFix updated a stale base — the fix did not pass verification, but this PR was behind What I found before stopping: See the Qwen Autofix agent step logs for model/tool output. Run log: https://github.com/QwenLM/qwen-code/actions/runs/31957141753 🧠 Handled by Qwen Code · model/模型 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally (it is the job that would exercise the changed integration-tests/cli/qwen-serve-routes.test.ts capability assertion).
Not explored to full depth (tool budget reached): chunk 1: run server.test.ts metadata tests (worktree and parent have no node_modules; full monorepo npm install exceeded the tool budget — verification was static); chunk 7: run the three sidebar vitest suites in packages/web-shell (review worktree has no node_modules ; a full monorepo install was not economical for this review —….
Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 3.
中文说明
仅完成部分审查,审查缺口已披露。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally (it is the job that would exercise the changed integration-tests/cli/qwen-serve-routes.test.ts capability assertion)。
未探索到全部深度(达到工具调用预算):chunk 1:run server.test.ts metadata tests (worktree and parent have no node_modules; full monorepo npm install exceeded the tool budget — verification was static);chunk 7:run the three sidebar vitest suites in packages/web-shell (review worktree has no node_modules ; a full monorepo install was not economical for this review —…。
未审查:反向审计——在 3 轮的反审轮数上限内未收敛。
— qwen3.8-max via Qwen Code /review (v0.21.12)
…ar-session-details # Conflicts: # packages/web-shell/client/components/sidebar/WebShellSidebar.tsx
|
🤖 Addressed the latest review feedback (round 11/100). What changed, and what I pushed back on: · 已处理最新评审反馈(第 11/100 轮)。改动内容与我反驳保留之处如下: Autofix round summary — no finding fixes this round (maintainer decision needed)This round made no code fixes for review findings. The workflow's Base-conflict resolution (requested by the workflow)
Feedback dispositions
Verification
中文说明Autofix 轮次总结 —— 本轮不修复任何审查发现(需要维护者决策)本轮没有对任何审查发现做代码修复。工作流的 diff 增长刹车已触发:本计数窗口已连续 6 轮以上超出预算(净增长 源码 87 / 测试 670 行,预算 400/400)且仍在增长,而增长正是审查发现本身驱动的。按刹车规则,暂停修复发现,等待维护者决定后续路线。详细选项与建议已在单独的交接说明中给出。 基线冲突解决(工作流要求)
反馈处置
验证
Deferred non-Critical feedbackCritical-only mode is active: 5 change-producing rounds are complete and the PR's diff grew src 87 / test 670 net lines beyond this counting window's baseline (budgets: 400/400). The workflow excluded the non-Critical feedback below from this round's actionable sections; the items remain open for human follow-up. Maintainer feedback is deferred only after its author has used 2 regular feedback batches in this window's Critical-only tail; authors at that budget, if any, are named below. ( 中文说明已进入仅处理 Critical 的模式:已完成 5 个产生改动的轮次,且本计数窗口内 diff 净增长已达 源码 87 / 测试 670 行(预算 400/400)。本轮可执行区域已排除下方非 Critical 反馈;这些条目保持开放,留待人工跟进。维护者反馈仅在其本人于本窗口 Critical-only 阶段已使用 2 批常规反馈预算后才会延后;达到预算的作者(如有)在下方点名。(评论 Base-conflict check · 基分支冲突检查: conflicted with main — resolved in this push. · 与 main 有冲突——已在本次推送中解决。 Re-review when you have a moment. After round 100 this bot stops and leaves the PR for a human. · 有空请复审;第 100 轮后本 bot 停止并将 PR 交给人工。 🧠 Handled by Qwen Code · model/模型 |
|
📊 Takeover milestone — round 11/100, in the current window. Census: 7 pushed fix(es), 0 no-change review(s), 0 timeout(s), 0 rejected attempt(s), 4 other round(s) (crash / model error / gate error / infra), 4 base update(s). This many rounds deserves a human look. Options: keep going (fine — nothing changes), split or reduce the PR if rounds keep accumulating, or release takeover (remove the 中文说明📊 接管里程碑 —— 第 11/100 轮(当前窗口)。统计:推送修复 7 次、审阅无需改动 0 次、超时 0 次、验证拒绝 0 次、其他轮次(崩溃/模型错误/门错误/infra)4 次、base 更新 4 次。 轮次到这个量值得人工看一眼。可选:继续(无需操作);若轮次持续累积,考虑拆分或缩减 PR;或释放接管(移除 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Not explored to full depth (tool budget reached): "agent invariant-c (packages/web-shell/client/components/sid…": none — no check was cut short.; chunk 19: none — the full 263-line range was read in one non-truncated pass..
中文说明
未探索到全部深度(达到工具调用预算):"agent invariant-c (packages/web-shell/client/components/sid…":none — no check was cut short.;chunk 19:none — the full 263-line range was read in one non-truncated pass.。
— qwen3.8-max via Qwen Code /review (v0.21.12)
|
🤖 AutoFix updated a stale base — the fix did not pass verification, but this PR was behind What I found before stopping: Round 15 of PR #9122. The growth brake has been over budget 7+ rounds and is still not shrinking (window net: src 87 / test 673 vs 400/400; overage is test-side). Six probe-witnessed Critical findings are open. Each fix is small in source but needs regression tests, and those tests are what push the window over budget. Critical-only mode cannot converge this: the Criticals ARE the growth. Per the brake, I stopped patching. DECISION — how should this PR proceed?
Recommendation: option 1 — all six findings are real and probe-witnessed, and the remaining source delta is small. If urgency wins, option 2 without the rename route. A reply here is picked up next round. Open Criti Run log: https://github.com/QwenLM/qwen-code/actions/runs/31982545916 🧠 Handled by Qwen Code · model/模型 |
chiga0
left a comment
There was a problem hiding this comment.
Code Review Overview (AI Generated)
PR: #9122 feat(web-shell): improve sidebar session management
Type: New Feature (UI) + Backend API
Change size: +4120 / -1900 across 35 files
HEAD: 6eff160
Findings Summary
- Critical: 6 items (4 backend, 2 frontend)
- Minor: 2 items
- Nit: 1 item
Key Observations
这个 PR 的功能设计总体合理:hover 详情面板、工作区展开状态持久化、折叠侧边栏时的会话浏览器、五行预览截断、后端 workspace-qualified rename 路由,几个特性都是有价值的用户体验改进。代码结构清晰,测试覆盖充分(DaemonClient、server.test.ts、integration test 都有对应用例)。
存在 4 个后端 Critical 问题(竞态条件/路由防护缺口)和 2 个前端 Critical 问题(可访问性回归、rename 竞态),已有多轮 CI bot 追踪,需要在合并前解决。
Cross-Validation
| Finding | qwen-code-ci-bot | 本次 Assessment |
|---|---|---|
'unavailable' 分支缺失 (session.ts:4864) |
Critical (latest round) | Confirmed — liveOwner.kind 只处理 'ambiguous' 和 'found','unavailable' 直接 fall-through 到 rename,cross-workspace 保护被绕过 |
| Pre-lock live-owner probe TOCTOU (R12-1, session.ts:4870) | Critical | Confirmed — resolveLiveSessionOwner 在 archiveCoordinator.runSharedMany 锁外,session 可在探针和锁之间迁移 |
| 缺失 generation guard (session.ts:4912) | Critical | Confirmed — 所有兄弟路径均在 runSharedMany 内 assert generation guard,本路由没有 |
| Same-session rename retry 被 settle 错误取消 (R11-2) | Critical | Confirmed — editingSessionIdentityRef.current === sessionIdentity 只比较 session 身份,第二次同 session rename 会被第一次请求完成时取消 |
CancelOnUnmount 跨实例 stale cancel (R12-2) |
Critical | Confirmed — pendingCancelRef 是每实例私有 ref;旧实例 timer 触发时调用 sidebar 级别的稳定 cancelRename,会取消新实例的活跃 rename |
| 无键盘路径访问 session 详情 (R11-16) | Critical (escalated) | Confirmed — SessionDetailsSubmenu 被删除后,SessionDetailsTooltip 仅有 onPointerEnter 触发,WCAG 2.1.1 回归 |
| PR 超过 2000 行未拆分/无 linked issue | — | Unique (Minor) — CONTRIBUTING.md 要求 >2000 行须拆分或说明,本 PR 约 6000 行且无 linked issue |
workspaceExpansion.ts 默认展开行为与旧实现相反 |
— | Unique (Minor) — 旧代码默认折叠;新代码无 storage key 时返回 true(展开),首次用户将看到所有工作区默认展开 |
Additional Audit Coverage
- DaemonClient.updateSessionMetadata:
mode: 'rest'正确绕过 ACP transport,URL encode 正确,测试验证了transportFetch未被调用 ✓ - sessionService.renameSession 参数新增:
archiveState = 'active'默认值保持向后兼容 ✓ - workspaceExpansion migration:
migrateWorkspaceExpansionPreference正确处理 provisional→resolved 迁移,两键都存在时保留 registered 侧值 ✓ - 控制字符校验:
code <= 31 || code === 127覆盖全部 C0+DEL ✓ - capability baseline 三处同步:
capabilities.ts、server.test.ts、DaemonClient.test.ts均同步添加了workspace_session_metadata✓
Final Verdict
Needs Changes — 后端 3 项 Critical('unavailable' 分支、TOCTOU、generation guard)是可独立修复的具体代码缺口,建议优先解决。前端 CancelOnUnmount 跨实例 cancel 和 same-session retry 问题也需要修复。Accessibility 问题已被 CI bot 升级为 maintainer 决策(接受指针专用设计或恢复键盘路径)。
This review was generated by QoderWork AI
|
👋 Takeover released: the autofix loop will no longer engage this PR (an in-flight round, if any, completes its bounded work). Re-apply 中文说明👋 已释放:autofix 循环不再介入此 PR(在飞的一轮如有,将完成其有界工作)。重新打上 |
|
已按当前 head 统一复核并收敛本 PR 的 review findings:
验证:Web Shell 定向测试 106/106 通过;metadata 路由定向测试 20/20 通过。 |
|
Superseded by #9311. The new PR contains the current reviewed implementation and moves further review to a clean discussion thread. |
* feat(web-shell): improve sidebar session management * feat(web-shell): keep sessions accessible when sidebar is collapsed * test(web-shell): cover hover session details * test(web-shell): align workspace sidebar coverage * fix(web-shell): keep collapsed session actions open * fix(web-shell): layer collapsed session menus * fix(web-shell): address sidebar session details review findings (QwenLM#9122) - sdk: route workspace session metadata PATCH through direct REST - collapsed switcher: cancel stale hover-close timers on reopen, keep the surface open while the group picker or keyboard focus is inside it, and emit the missing close signal when a tracked menu unmounts open - suppress the session menu's close focus restore when it started a rename - migrate the primary workspace expansion preference across the provisional-to-resolved cwd key change - honor a persisted workspace collapse over stale one-shot auto-expansion - drop the inert archived-row tab stop - align the constrained smoke test with the single-line details title * fix(web-shell): resolve standing sidebar session details blockers (QwenLM#9122) - collapsed switcher: resolve pointer targets through composedPath and make the close timer's focus guard shadow-DOM aware so hover-open containment works in shadowDom portal mode - reset search state when the sidebar collapses so the autofocused search input no longer mounts inside the hover popover and steals keyboard focus - rename: propagate the daemon-resolved displayName (clamped to 256) instead of the locally typed string and cap both rename inputs at 256 characters - keep the session list scrollable clear of the fixed footer so rows stay hoverable, and close the details popover before each constrained re-hover in the smoke test - projects section: write the expansion preference outside the state updater, never lock hideProjectHeader consumers behind a stored collapse, and reset the one-shot show-all per session source and primary workspace - stop a double-click inside a mounted rename input from restarting the rename and discarding the typed text * fix: address round-6 review findings in serve metadata and sidebar (QwenLM#9122) - serve: reject empty/whitespace displayName on the workspace metadata route so archived sessions never persist an empty custom_title record - serve: advertise workspace_session_metadata in the integration capability baseline to match the registry and unit baselines - sidebar: end the session scroll port above the fixed footer so rows can never park under it and block hover (drops stale clearances) - sidebar: reset search state whenever the collapsed surface closes so a stale autofocused input cannot steal composer focus on hover-open - sidebar: keep keyboard-opened collapsed switcher in keyboard semantics; a pointer graze no longer suppresses focus restoration - sidebar: busy-guard the archived rename menu item, align the group-create icon with its siblings, and reset per-section show-all on session-source change to match the flat list Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com> * fix: address round-7 review findings in serve metadata and sidebar (QwenLM#9122) * fix: address round-8 review findings in sidebar rename and switcher (QwenLM#9122) * fix: address round-9 review findings in sidebar rename and menus (QwenLM#9122) * fix: address round-10 review findings in sidebar actions and rename (QwenLM#9122) * fix(web-shell): remove unsafe rename unmount cleanup * fix(web-shell): stabilize sidebar session mutations * fix(web-shell): polish sidebar session interactions * feat(web-shell): complete collapsed sidebar navigation --------- Co-authored-by: 钉萁 <dingqi.jww@alibaba-inc.com> Co-authored-by: Shaojin Wen <shaojin.wensj@alibaba-inc.com> Co-authored-by: qwen-code-dev-bot <qwen-code-dev@service.alibaba.com> Co-authored-by: qwen-code-dev-bot <qwen-code-dev-bot@users.noreply.github.com> Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>




















What this PR does
This PR makes Web Shell sidebar sessions easier to scan and manage. Session details now appear on pointer hover, session folders preview up to five rows before offering an expand control, long titles fade and scroll based on their actual overflow distance, running sessions use a smaller neutral spinner, and workspace expansion choices persist across refreshes. The sidebar keeps its header and footer fixed while navigation, workspace sessions, plugins, and related content share the scroll area.
When the sidebar is collapsed, hovering the Project icon shows the complete session browser with the same information and actions as the expanded sidebar. Users can browse, search, manage, and switch sessions without reopening the sidebar; clicking the icon keeps the browser open.
Session actions are also consistent across current, background, secondary-workspace, and archived sessions. Renaming targets the session's owning workspace without navigating to it, and the workspace-qualified metadata endpoint is capability-gated so older daemons do not expose unsupported actions. Overflow menus and hover details do not interfere with each other.
Why it's needed
The previous sidebar showed too much repeated metadata, made large workspaces difficult to scan, and exposed inconsistent actions for sessions outside the primary workspace. It could also load or switch the wrong workspace while acting on a background session, and opening an overflow menu could allow the hover details panel to reappear over its items. Collapsing the sidebar removed every path to switch sessions, forcing users to expand it before navigating.
Reviewer Test Plan
How to verify
Evidence (Before & After)
Not captured; manual UI verification is requested.
Tested on
Environment (optional)
N/A
Risk & Scope
Linked Issues
N/A
中文说明
本 PR 做了什么
本 PR 优化了 Web Shell 侧边栏中会话的浏览和管理体验。会话详情改为鼠标悬停展示;每个会话文件夹默认最多预览五条,超过后提供“展开显示”;长标题根据实际溢出距离显示渐隐并滚动;运行中会话使用更小的中性 loading;工作区展开状态会在刷新后保留。侧边栏的新建任务头部和底部保持固定,导航、工作区会话、插件及相关内容统一纳入中间滚动区域。
侧边栏收起后,鼠标 hover 项目图标即可展示与展开态相同的完整会话信息和操作。用户无需重新展开侧边栏,就能浏览、搜索、管理和切换会话;点击项目图标可让面板保持打开。
当前会话、后台会话、非主工作区会话和已归档会话的操作也保持一致。重命名会直接作用于会话所属工作区,不会导航到该会话;工作区限定的 metadata 接口通过 capability 控制,旧 daemon 不会展示不支持的操作。更多菜单与悬停详情互不干扰。
为什么需要
原侧边栏展示了较多重复信息,大型工作区不易浏览,并且主工作区之外的会话操作不一致。对后台会话执行操作时还可能错误加载或切换工作区;打开更多菜单后,悬停详情也可能重新覆盖菜单项。侧边栏收起后原本没有任何切换会话的入口,用户必须先重新展开侧边栏。
Reviewer 测试计划
如何验证
证据(修改前后)
未采集;请进行手动 UI 验证。
测试平台
环境(可选)
N/A
风险与范围
关联 Issue
N/A