Skip to content

fix(web-terminal): 修复 Herdr 只读终端小窗展示#419

Open
luw2007 wants to merge 4 commits into
deepcoldy:masterfrom
luw2007:fix/web-terminal-mobile-fullscreen
Open

fix(web-terminal): 修复 Herdr 只读终端小窗展示#419
luw2007 wants to merge 4 commits into
deepcoldy:masterfrom
luw2007:fix/web-terminal-mobile-fullscreen

Conversation

@luw2007

@luw2007 luw2007 commented Jul 9, 2026

Copy link
Copy Markdown

改了什么

  • 保留移动端网页终端全屏 CSS 修复。
  • 为托管的 Herdr 会话增加网页终端尺寸所有权:首个只读查看者通过 herdr agent attach 驱动真实 agent TTY 尺寸,后续查看者复用同一网格。
  • 首个查看者关闭后自动把尺寸所有权交给下一个查看者;最后一个查看者关闭后释放 attach。
  • attach 输出仅排空、不转发,终端内容仍由现有轮询链路提供,避免重复输出。

根因

原修复只处理了浏览器容器和 xterm 画布。HerdrBackend.resize() 只更新了本地缓存,没有改变 OpenCode 所在的真实 TTY,因此页面虽然全屏,OpenCode 仍按恢复时的 54×23 小终端绘制,表现为内容只占页面一小块。

影响面

  • 生效范围:所有 botmux 托管的 Herdr CLI 会话(实现与具体 CLI 无关)。
  • 不受影响:external/adopt Herdr 会话、PTY、tmux、zellij 后端,以及网页终端写入权限逻辑。
  • 多查看者:只有一个尺寸 owner;跟随者不会抢占 Herdr attach,owner 关闭后按连接顺序接管。

验证

  • pnpm vitest run --project unit test/herdr-backend.test.ts:33/33 通过。
  • pnpm vitest run --project e2e test/herdr-backend.e2e.ts:9/9 通过,其中真实 Herdr + SIGWINCH/stty 用例验证 TTY 从 80×24 变为 150×42
  • pnpm build:通过。
  • 全量单测:7431 通过、6 跳过;4 个与本 PR 无关的既有失败位于 prompt-builderdashboard-create-sessionsandbox

浏览器验收

在 OpenCode 只读页面、已知真实 TTY 为 54×23 的前置状态下实测:

场景 浏览器 xterm OpenCode 真实 TTY 结果
桌面 1280×720 158×40 158×40 内容铺满页面,状态为 connected
第二查看者 158×40 复用 owner 的 158×40 无第二个 Herdr attach
owner 关闭 158×40 158×40 跟随者成功接管
移动端 390×844 47×46 47×46 全屏重排,真实 TTY 同步
最后页面关闭 attach 进程释放

桌面和移动端均已在本地浏览器截图核对:页面显示“只读模式 · 无写入权限”和 connected,终端容器覆盖完整视口。

@luw2007 luw2007 requested a review from deepcoldy as a code owner July 9, 2026 14:38
@luw2007

luw2007 commented Jul 9, 2026

Copy link
Copy Markdown
Author

先关闭,待本地验证通过后再重新提交。

@luw2007 luw2007 closed this Jul 9, 2026
@luw2007 luw2007 changed the title fix(web-terminal): 修复移动端终端全屏展示 fix(web-terminal): 修复 Herdr 只读终端小窗展示 Jul 9, 2026
@luw2007 luw2007 reopened this Jul 9, 2026
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.

1 participant