# 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
