# WebSSH xterm ANSI 彩色输出 — 验证报告

**日期**: 2026-06-08  
**变更**: `docs/changelog/2026-06-08-webssh-xterm-ansi-output-fix.md`

## 自动化

| 检查 | 结果 |
|------|------|
| `.venv/bin/python -m pytest tests/test_webssh_terminal_payload.py -q` | 3/3 PASS |
| `bash scripts/local_verify.sh` | 26/26 PASS |
| `cd frontend && npm run build` | PASS |
| `bash deploy/pre_deploy_check.sh` | 7/7 PASS |

## 代码要点

1. **后端** `create_process(env=WEBSSH_PTY_ENV)` — PTY 级 `TERM=xterm-256color`，不再依赖 stdin export 竞态
2. **后端** DATA 帧使用 `data_b64`，保留 ANSI ESC 字节
3. **前端** `decodeTerminalPayload()` → `term.write(Uint8Array)`
4. **样式** Shell 语法高亮 `.sh-*` 仅在 `TerminalCmdBar.vue`，与 xterm 黑屏分离

## 浏览器验收步骤（生产/本地均需 **重连 SSH 会话**）

1. 打开 `#/terminal`，新建或重连一台服务器
2. 在**上方黑屏 xterm**（非底部命令栏）执行：
   ```bash
   printf '\033[31mred \033[32mgreen \033[33myellow \033[0m\n'
   ```
   预期：红 / 绿 / 黄 字
3. 执行 `ls --color=auto` 或 `grep --color=always root /etc/passwd | head`
   预期：目录、匹配词分色
4. 在底部命令栏输入 `ls` + Enter
   预期：输出出现在黑屏区且带颜色

## 部署

- Commit: `8312a6c` — fix(terminal): WebSSH xterm SSH 交互区 ANSI 彩色输出
- 生产 `/health` → ok，`/app/` → 200
- 后端 WebSocket relay 已随 Docker 重建生效
- **请 Ctrl+Shift+R 强刷并重连 SSH 会话**后再做浏览器终验

## 回滚

恢复 `webssh.py` stdin export + `data` 字段；前端移除 `data_b64` 解码。
