feat(dashboard,worker): 直达入口恢复无边框工作台,并修 Web 终端滚动条样式 - #1325
Conversation
deepcoldy#948 之后 `#/agent-workbench` 只在桌面/移动客户端壳里无边框,浏览器一律套 Dashboard 外壳。这让 `/dashboard` 卡片「打开工作台」按钮、`botmux dashboard` 打印的工作台链接、 常驻链接和短票兑换这些直达入口全部落进了带侧栏的壳,与「一整屏工作台」的定位相悖。 改法:新增 `core/workbench-shell.ts` 定义沉浸式标记 `botmuxWorkbenchShell=immersive`, 三个直达入口(`/workbench` 与 `/workbench/dock` 跳板、`?t=` 登录一跳、 `/workbench-ticket/<ticket>` 兑换)302 到带标记的 hash;`workbenchSpaUrl` 生成的 无凭证 / 平台托管链接同样带标记。前端 client-shell 把标记与 `botmuxClientShell` 一样在启动时从 hash 提升进查询串(hash 导航不丢),app 壳判定认到标记就渲染 无边框壳。标记只决定工作台壳,不复用客户端壳的导航过滤与路由拦截;侧边栏 「驾驶舱」进入不带标记,保持正常壳。 验证:tsc 通过;相关 15 个测试文件 471 项全绿(新增 client-shell 标记读取 / 提升、 auth 一跳目标、票据 302 目标、源码钉死);隔离 HOME 起补丁版 dashboard,浏览器 冷登录实测 `/workbench?t=`、`/workbench/dock?t=`、短票兑换均落无边框壳且 hash 导航后保持,`/?t=#/agent-workbench` 侧栏形态仍为正常壳。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
飞书内嵌 webview(以及任何用经典非悬浮滚动条的桌面环境)会把 xterm viewport 的 原生滚动条画成白底粗条,压在暗色终端上非常扎眼。给 `#terminal .xterm-viewport` 补滚动条样式:轨道透明、拇指细且半透明、悬停加深。标准 `scrollbar-*` 覆盖 Firefox 与 Chromium 121+(后者以标准属性优先),`::-webkit-scrollbar` 覆盖旧 Chromium 与 WebKit。viewport 是 xterm 唯一的真实滚动容器,只改它。中性灰在 明暗两套终端主题上都可读。 影响面:仅 worker 提供的 Web 终端页样式(桌面浏览器、工作台 iframe、飞书内嵌页 同一份 HTML);不触及 PTY / 适配器 / 卡片。 验证:bun run build 通过;本机 fleet 重启后在工作台里打开终端 iframe, 计算样式 scrollbar-width=thin、scrollbar-color 生效,截图确认细条半透明。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
非阻断建议(不影响本 PR 合入):
本 PR 已给其余直达入口( start_url: '/#/agent-workbench?botmuxWorkbenchShell=immersive',或复用 |
deepcoldy
left a comment
There was a problem hiding this comment.
技术评审通过,0 阻断。
沉浸式壳改动:服务端三处 302(/workbench 跳板、?t= 登录一跳、短票兑换)+ workbenchSpaUrl 统一带 botmuxWorkbenchShell=immersive,常量集中在 core/workbench-shell.ts 避免服务端与 web bundle 手写字符串漂移。前端壳判定 readDashboardClientShell() || readDashboardWorkbenchShell(),且沉浸式标记不复用 botmuxClientShell——导航过滤、路由重定向、Web 终端开关仍只认 client shell,直达入口不被连带限制,边界正确。
fragment 存活机制:标记放 hash 查询串,?t= 登录跳转剥查询串时随 fragment 保留(浏览器跟随无 fragment 的 302 保留原 fragment),启动时提升进 search,之后选中会话改 hash 不丢。
验证:
tsc --noEmitrc=0- 受影响 6 个测试文件 254/254 绿
- 反变异确认
app.tsx壳判定承重(删掉|| readDashboardWorkbenchShell()测试立即变红) - 对最新 master
merge-tree无冲突;真合并后 tsc + 254/254 绿 - CI 必需的
testcheck 曾因test/unit-setup.tsafterAll 的ENOTEMPTYteardown 竞态红(master 既有、本 PR 未触碰该文件,7486 passed / 0 真实用例失败),re-run 后全绿
非阻断遗留:PWA manifest start_url 未带沉浸式标记(#948 既有缺口,manifest 注释自述意图 chrome-less),已在 PR 评论建议顺手修或开 follow-up,不阻断本 PR。
改了什么
1. 直达入口进沉浸式工作台(
feat(dashboard))src/core/workbench-shell.ts:定义工作台沉浸式标记botmuxWorkbenchShell=immersive,以及服务端三处共用的 302 目标常量(零依赖,服务端与 web bundle 共用一份)。/workbench、/workbench/dock跳板(dashboard.ts)、?t=登录一跳(dashboard/auth.ts)、/workbench-ticket/<ticket>兑换(dashboard/workbench-ticket.ts)。workbenchSpaUrl(无凭证兜底链接、平台托管时 CLI 打印的工作台链接)同样带标记。client-shell.ts新增readDashboardWorkbenchShell,启动时把标记与botmuxClientShell一样从 hash 提升进查询串(之后 hash 导航不丢);app.tsx壳判定认到标记即渲染无边框壳。docs/agent-workbench.md补充入口形态说明。2. Web 终端滚动条改细(
fix(worker))#terminal .xterm-viewport补滚动条样式:轨道透明、拇指细且半透明、悬停加深。标准scrollbar-*覆盖 Firefox 与 Chromium 121+,::-webkit-scrollbar覆盖旧 Chromium / WebKit。为什么
#/agent-workbench只在桌面/移动客户端壳里无边框,浏览器一律套 Dashboard 外壳。于是/dashboard卡片「打开工作台」按钮、botmux dashboard打印的工作台链接、常驻链接、短票兑换这些直达入口全部落进了带侧栏的壳,与「一整屏工作台」的定位相悖。改后直达入口恢复无边框;侧边栏「驾驶舱」进入不带标记,保持正常壳(保留 feat(dashboard): Calm Console 全面改造——设计 token 体系 + 注意力优先布局 + 全局反馈系统 #948「从侧栏进来要能回去」的意图)。标记不复用botmuxClientShell:客户端壳还会过滤导航、拦 Workflow / Web 终端路由,网页直达入口不该被连带限制。影响面
/workbench跳板、短票兑换)、core/dashboard-url(workbenchSpaUrl)、dashboard web(client-shell、app 壳判定)、worker 提供的 Web 终端页样式。daemon 消息链路 / adapters / 卡片内容不涉及。botmuxClientShell决定)。飞书 H5 免登的 returnTo 清洗器会丢 hash 查询串,这条路径与之前一致(未改)。终端页样式对桌面浏览器、工作台 iframe、飞书内嵌页是同一份 HTML,Reader / Classic 两种终端风格共用同一 viewport,均生效。实际测试验证
tsc --noEmit通过;bun run build(含 audit:domains / audit-dist / audit-embedded)通过。vitest run --project unit:相关 15 个测试文件 471 项全绿,含新增用例:client-shell 标记读取 / 提升 / 不是客户端壳;auth/workbench、/workbench/dock一跳目标;票据 302 目标;workbenchSpaUrl带标记;源码钉死三处服务端目标取同一常量。全量 unit 套件失败项与同机 master 基线一致(均为 spawn / 环境类既有失败,本分支同条件下反而更少)。node dist/index-dashboard.js,端口 7999),Playwright 冷登录实测:/workbench?t=、/workbench/dock?t=、/workbench-ticket/<ticket>三条都落到/?botmuxWorkbenchShell=immersive#/agent-workbench(-dock),无侧栏、有会话列表;改 hash 到#/agent-workbench/<id>后仍保持无边框;/?t=#/agent-workbench(侧栏形态)仍是正常壳。curl 核对三处 302 的 Location 与 set-cookie 与预期一致。switch:here+restart跑本分支 live 验证:真实会话下/workbench?t=打开为无边框、打开终端面板与切换会话后保持;终端 iframe 内getComputedStyle(viewport)为scrollbar-width: thin+ 自定义scrollbar-color,截图确认拇指细且半透明。