# 2026-05-30 终端页面全覆盖迭代
## 变更摘要
terminal.html 全面重构,新增 11 项运维效率特性:
1. **多标签会话**: 浏览器内多标签管理,每标签独立 xterm + WebSocket,支持新建/切换/关闭,最多 10 标签。恢复时自动重建上次会话
2. **快速命令栏**: 右侧面板内置 5 条命令 + 自定义命令(名称+内容),localStorage 持久化。点击发送到终端。弹窗编辑/删除
3. **字体调节**: 工具栏 A−/A+ 按钮 + Ctrl+/- 快捷键,范围 10-24,localStorage 持久化
4. **Ctrl+L 清屏**: 发送 clear\r + term.clear() 双重保障
5. **命令历史持久化**: sendCmd 后存 localStorage(最多 200 条),刷新恢复,ArrowUp/Down 浏览
6. **右键菜单**: 自定义右键菜单(复制/粘贴/清屏/全选)
7. **断开自动重连**: WebSocket 异常断开指数退避重连(1s→2s→4s→max30s),倒计时显示。手动断开不重连
8. **连接信息栏**: 工具栏显示服务器名 + 在线状态 + 连接时长(HH:MM:SS) + PING RTT
9. **终端标题路径**: 后端注入 PROMPT_COMMAND(OSC title),前端 onTitleChange 捕获显示
10. **滚动缓冲区调节**: 下拉选择器 1K/5K/10K/50K 行,xterm 5.x 热改
11. **快速切换服务器**: 右侧面板搜索框实时过滤
## 动机
terminal.html 仅具备基础 WebSSH,缺乏频繁运维所需的效率特性。用户一次连接内需切换多台服务器、快速执行常用命令、持久化历史等。
## 涉及文件
### 后端
- `server/api/webssh.py` — 轻量改动
- 新增 `MSG_PING`/`MSG_PONG` 消息类型
- shell 创建后注入 `PROMPT_COMMAND`(OSC title escape)用于路径跟踪
- PING handler: 收到 PING 立即回复 PONG(RTT 测量)
### 前端
- `web/app/terminal.html` — 全面重构(~500行新增)
- 多标签架构: sessions[] 数组 + 动态 term div
- localStorage: 字体/回滚/历史/命令/标签 5 个键
- 全新 UI: TabBar + 工具栏(字体/回滚/全屏) + 右侧面板(搜索+快速命令)
- ContextMenu: 浮层右键菜单
- AutoReconnect: 指数退避定时器
## 安全影响
- PING/PONG: 无关安全的回声确认
- PROMPT_COMMAND: 后端注入固定字符串,不走用户输入
- 快速命令: 已有 WebSocket DATA 通道,无新攻击面
- 右键菜单: 纯前端 UI,无后端交互
- 多标签: 每标签独立 WebSSH token 认证,不共享凭据
## 需要迁移/重启
- 是:后端 Python 需重启
- 否:无数据库迁移
## 验证方式
1. 多标签: 新建标签 → 切换 → 关闭 → 每标签独立 WS
2. 快速命令: 点击 → 终端执行
3. 字体: Ctrl+/− 调节,刷新保留
4. Ctrl+L: 清屏 + sterm clear
5. 历史: ArrowUp/Down,刷新保留
6. 右键: 复制/粘贴/清屏/全选
7. 重连: 异常断开 → 倒计时 → 自动重连
8. 连接信息: 时长 + PING 显示
9. 路径: cd 后工具栏更新路径
10. 回滚: 下拉切换生效
## 进度条
☑实现 ☑WSL验证 ☐审计8步 ☑部署 ☑健康检查 ☑浏览器验证 ☑changelog