68 Commits
Author SHA1 Message Date
TanXin fe2b5f00ed release: 发布 v2.2.1 AI Agent 连续记忆合并与交互增强版本 (#127)
## 版本概述

发布 **v2.2.1** 版本,核心聚焦于 **AI Agent
连续运维记忆合并、实体对齐演进与前端交互体验增强**。彻底解决在复杂运维场景下,连续排查导致工作日志碎片化刷屏、记忆提炼过于草率简写、配置更新冲突并存以及前端卡片展示等痛点。

---

### 更新内容

1. **任务快照锚定与连续运维任务合并**:
   - 逆序定位本轮任务起点用户诉求,确保复杂长交互(超过 16 步)不丢失初始核心目标与显式参数;
- 引入时序紧邻度与连续任务强合并指引(30分钟内),指导大模型优先采用 `mode: "update_latest"`
承前启后地合并上一阶段成果,彻底解决排障过程中工作日志碎片化与 10 条配额被刷爆的问题;
   - 数据库 `UserDBDO` 支持原子合并更新最新一条工作历程,并在模型缺省时自动容错兜底。

2. **知识实体对齐与版本平滑演进**:
   - 提炼时注入当前服务器已存的知识项与凭据清单,强制约束修改配置或更换凭据时复用完全相同的 key 名;
- 结合底层 SQLite 原生 `UNIQUE(user_id, server_id, key)` 与 `ON CONFLICT DO
UPDATE` 实现原子更新,杜绝同一配置产生多条冲突脏数据;
   - 支持 `action: "delete"` 标记,允许用户明确废弃某项实体时在后台原子清理。

3. **长短时记忆职责彻底解耦**:
   - 会话内摘要(`this.state.summary`)专职保留未完结的任务目标、用户决策与待办上下文,彻底剔除冗长具体的命令流水账;
- System Prompt
中对“当前会话未决任务与决策摘要”与“服务器近期工作历程与操作备忘”进行语义与注入层隔离,消除同类信息双份冗余堆叠。

4. **真实凭据流通与通用协议规范**:
   - 彻底移除 Agent 工具输出中的破坏性正则硬脱敏代码,解除密钥与 Token 自动回填流转的阻碍;
- 移除非标准 `reasoning_effort` 参数,仅保留标准 `temperature: 0.1`,杜绝 OpenAI 官方
GPT-4o 等模型报 HTTP 400 校验错误;
   - 前置清洗 `<think>` 思考标签,避免 DeepSeek-R1 / QwQ 等推理模型思考阶段的草稿代码块被错误截获;
   - 补充循环步数上限与异常终止时的阶段性记忆提炼兜底,并增加纯问候本地快速熔断与并发排队补偿。

5. **前端工作历程呈现与交互增强**:
- 放宽提炼摘要字数限制至 100 字内(title 扩至 20
字内),引导大模型在不超过限制的前提下详实具体地记录排查背景、配置变更、服务状态及验证结果,消除草率简略;
   - 前端工作历程卡片应用 `-webkit-line-clamp: 2` 配合文本省略(`...`),保持整洁紧凑布局;
   - 支持鼠标悬停浮动展示完整文本 Tooltip,并支持点击直接展开/收起完整摘要内容。

---

### 提交列表

- `d99bd7b` release: 发布 v2.2.1 AI Agent 连续记忆合并与交互增强版本
- `542381a` feat: 放宽工作历程摘要长度至100字并支持前端两行截断悬停与点击展开
- `8d55927` refactor: 重构与优化 AI Agent 上下文管理与长期记忆系统

---

### 验证结果

全套本地门禁全部通过(`pnpm run verify`):
- **TypeScript 类型检查**:双端全部通过(0 errors)
- **单元与集成测试**:69 个测试文件、784 项用例全部通过(100% pass)
- **前端生产构建**:Vite 生产构建与单文件 HTML 内联成功
- **Playwright E2E & 无障碍测试**:75 个端到端测试全部通过(100% pass)
2026-09-08 22:36:58 +08:00
TanXinandTanXin b7c1a0a5b2 release: 发布 v2.2.0 AI Agent 工作备忘与知识记忆系统版本 (#126)
## 版本概述

发布 **v2.2.0** 版本,核心聚焦于 **AI Agent
服务器工作备忘与知识凭据记忆系统**。彻底解决跨会话“遗忘历史操作与关键输入参数”的痛点,具备时间精准感知、用户关键输入与凭据留存复用、全量操作工作流记录以及清爽内敛的抽屉式交互体验。

---

### 更新内容

1. **全能双轨记忆系统(Work Log & Context Knowledge)**:
- **工作历程(Work
Log)**:带时间锚点的活动日志,真实记录用户在服务器上的所有操作与巡检(涵盖硬件查看、软件更新、服务管理、环境配置、故障排查等),废弃对只读操作的生硬拦截。
- **知识与凭据备忘(Context Knowledge)**:允许提炼并沉淀用户在对话中显式告知的部署 Token(如 GitHub
Token)、API Key、数据库密码、映射端口与自定义偏好,在后续执行任务时直接自动复用,严禁再次向用户重复索取。

2. **精准时间感知与时区自适应**:
   - System Prompt 显式注入当前系统基准时间(带用户当地时区与星期)。
- 工作历程记录全面携带绝对时间与相对时间标签(如 `[2026-09-08 16:04 (今天)]`、`[昨天]`、`[前天]`),AI
能够精准理解时态并回答“昨天干了什么”、“几点执行了某任务”。
- 客户端通过 `Intl.DateTimeFormat().resolvedOptions().timeZone`
动态感知并透传用户电脑真实时区,服务端按用户时区精确换算,彻底解决云端 UTC 与客户端时区不一致的时间偏差问题。
   - 在多轮连续会话中动态刷新 System Prompt,保持时钟基准与历史记忆最新。

3. **前端 UI 与交互体验全面优化**:
   - 面板重塑为「工作备忘与记忆」抽屉,包含「工作历程」时间线与「知识与凭据」卡片双标签页。
- 知识卡片样式重塑:采用胶囊属性标签与代码引用块形态,彻底移除易引起“可点击/可编辑”歧义的按钮与输入框边框质感;机密凭据默认以
`••••••••` 掩码呈现,支持一键切换显隐明文、一键复制及快捷删除。
   - 彻底移除聊天主视口顶部的常驻提示条(Banner),保持问答区域纯粹干净,记忆查阅完全内敛至抽屉面板。

4. **非对称容量配额与存储安全性**:
   - 工作历程保持 10 条严格滚动上限,稳定控制上下文 Token 预算;
   - 知识与凭据采用致密键值存储,放宽至 50 条上限,为服务器环境变量、多个端口与服务密钥留足充足沉淀空间;
- `UserDBDO` 增加 `server_work_logs` 与 `server_knowledge`
表,并自动幂等清理旧版废弃表(`server_memories`、`server_task_checkpoints`),解除外键依赖阻碍,确保服务器删除与修改安全顺畅。

---

### 提交列表

- `af4562c` release: 发布 v2.2.0 AI Agent 工作备忘与知识记忆系统版本
- `c0a3684` perf: 优化记忆配额策略,将知识与凭据上限放宽至50条
- `427590e` fix: 确保时区全球化自适应并以客户端动态时区为准格式化记忆
- `46f3381` fix: 依据用户本地时区动态校准记忆时间并优化知识卡片样式消除歧义
- `f9f1076` refactor: 移除聊天面板顶部的上次任务提示条,保持问答区域清爽纯粹
- `d2487a0` feat: 重构升级 AI 记忆模块为全能服务器工作备忘与知识凭据系统
- `b308771` fix: 彻底清理废弃的 server_memories 表并修复服务器删除 500 外键约束错误
- `4b145f7` refactor: 重构 AI 记忆模块为时序运维断点与任务接续系统
- `9b34c5f` fix: 优化 AI Agent 记忆模块边界处理并增强安全性与成本控制
- `2201230` feat: 实现 AI Agent 服务器长期记忆档案与自动反思模块

---

### 验证结果

全套本地门禁全部通过(`pnpm run verify`):
- **TypeScript 类型检查**:Worker 与前端双端全部通过(0 errors)
- **单元与集成测试**:69 个测试文件、775 个用例全部通过(100% pass)
- **前端生产构建**:Vite 生产构建与单文件 HTML 内联成功
- **Playwright E2E & 无障碍测试**:75 个端到端测试全部通过(100% pass)

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-09-08 17:27:52 +08:00
TanXin d59b9c350c release: 发布 v2.1.0 命令片段库抽屉式面板重构与分类管理版本 (#125)
## 版本发布概述

本次版本为 **v2.1.0**,核心聚焦于**命令片段库的交互体验重构(全面对齐 SFTP
右侧抽屉规范)**与**片段分类管理体系**的完整落地,并优化前端非按钮状态标识与搜索排版细节。

---

### 核心变更要点

1. **命令片段库抽屉式面板重构(对齐 SFTP 规范)**:
- 彻底摒弃原有居中小弹窗(Modal)设计,重构为右侧滑出抽屉面板(`Slide-over Drawer
Panel`),宽度弹性自适应(`min(clamp(440px, 45vw, 680px), 100vw)`,移动端铺满屏幕)。
   - 展开时左侧终端保持可见,用户可在同一视口内快速查找、填入并验证命令。
   - 表单重构为内联折叠卡片(`Collapsible Form`),默认收起,大幅提升垂直可视空间,单屏可完整展示 10+ 条片段卡片。

2. **命令片段分类管理体系**:
- 顶部增加横向无滚动条滑动的分类筛选胶囊栏(`Category Chips`):`[全部 (N)] [分类A (x)] ... [未分类
(z)]`,自动去重聚合各分类片段数量并联动高亮。
   - 录入表单新增分类输入字段,支持 `<datalist>` 建议自动联想已有分类,亦支持直接输入新分类。
   - 联动检索:分类筛选胶囊与搜索框关键词(名称/命令/分类)组合交集检索。

3. **后端与存储层无缝迁移**:
- `src/snippet-schema.ts`:扩展 `SNIPPET_CATEGORY_MAX_LENGTH = 30`
与分类归一化校验。
- `src/worker/user-db.ts`:SQLite `command_snippets` 表动态追加 `category`
列,通过 `PRAGMA table_info` 实现幂等自动迁移,旧数据自动归为“未分类”,零风险零停机。
   - `frontend/src/snippet-store.ts`:云端及本地存储层全面支持 `category` 字段持久化。

4. **UI 交互与终端原生细节优化**:
- 将 Header“云端同步 / 本地存储”优化为小圆点状态指示器,卡片分类重构为 `#tag` 格式、动态参数重构为 `{ }`
元数据格式,彻底消除与操作按钮的视觉混淆。
- 修复搜索输入框内边距与居中定位,解决放大镜图标因简写 padding 导致的字形裁剪(呈现为“c”)与文字重叠问题,并补全一键清空按钮。
   - 移除前端展示文案中的 emoji(将 `💡` 替换为终端原生风格的 `[!]` 提示符)。

---

### 提交列表

- `c5e0f4d` release: 发布 v2.1.0 命令片段库抽屉式面板重构与分类管理版本
- `b469311` fix: 修复命令片段库搜索框图标与占位文本重叠问题
- `cedb613` fix: 优化命令片段库搜索图标、非按钮标签样式与文案符号
- `4fc8395` feat: 重构命令片段库为抽屉式UI并支持分类管理 (#124)

---

### 关联 Issue

- 关联 Issue:#124

---

### 验证结果

- `pnpm run typecheck`: 通过(Worker & Frontend,0 错误)
- `pnpm test`: 66 个测试文件全部通过(760 passed)
- `pnpm run build:frontend`: 构建并内联到 `src/worker/html.ts` 成功
- `pnpm run test:e2e`: 75 passed, 1 skipped
2026-09-05 10:28:36 +08:00
TanXinandTanXin 1ce345d61b release: 发布 v2.0.0 Gem-Alpha 架构解耦与交互体验升级版本 (#123)
## 本次版本更新内容(v2.0.0 — Gem-Alpha 重大里程碑版本)

本次发布为 CloudSSH **v2.0.0** 重大版本更新(代号
**Gem-Alpha**),包含后端与前端大文件深层次架构解耦瘦身、核心交互体验升级、SFTP
路径面包屑与三向排列表头、命令片段动态占位符与模糊搜索、多标签页内联重命名与上下文操作、以及 AI Agent 助手响应式窗口与移动端深度适配。

---

### 一、核心更新要点

#### 1. 架构深度解耦瘦身与代码健康治理
- **分享审计持久化管道解耦(`src/worker/share-audit-writer.ts`)**:抽离
`ShareAuditWriter`,统一封装审计记录排空、防抖刷新与排他写入锁;
- **RFC 4256 交互式键盘认证状态机解耦(`src/worker/ssh-interactive-auth.ts`)**:抽离
`KeyboardInteractiveAuthHandler`,独立管理多轮挑战 ID、超时看门狗及响应组包;
- **弱网断线保持与重连缓冲解耦(`src/worker/ssh-detached-buffer.ts`)**:抽离
`DetachedSessionBuffer`,独立负责 128KB 有界环形缓冲队列与重连补偿逻辑;
- **远端操作系统探测执行器解耦(`src/worker/os-detect.ts`)**:抽离
`detectAndPersistRemoteOS`,封装探测执行、解析与 UserDB 持久化;
- **SFTP 前端大文件解耦**:
- 抽离
`SFTPEditorCoordinator`(`frontend/src/sftp-editor-session.ts`):独立管理编辑器挂载、编码探测、冲突检测与覆盖保存;
  - 抽离 `sftp-dialogs.ts`:管理文件/目录创建、重命名与删除交互对话框及路径合法性校验;
  - 抽离 `sftp-helpers.ts` 与 `sftp-transfer.ts`:封装面包屑解析、多维排序算法与异步传输状态模型;
- **代码健康规范治理**:全局显式补充 `parseInt` 10 进制基数,清理冗余构造函数与导入,收敛严格类型断言与类型告警。

#### 2. SFTP 与核心交互体验优化
- **SFTP
路径面包屑与可排列表头**:支持可点击直达的面包屑导航,保留文本框快速跳转与失焦自动恢复;表头支持文件名、大小、修改时间三向排序,目录智能置顶;
- **SFTP 工具栏新建文件**:点击工具栏「新建文件」按钮弹出命名弹窗,通过 0 字节探测上传后无缝调起在线编辑器;
- **命令片段模糊搜索与一键复制**:片段库新增实时搜索过滤,支持名称与命令模糊匹配;列表项增加一键复制到剪贴板按钮;
- **终端快捷键增强**:macOS 新增 `Cmd+F` 调出搜索栏,`Cmd+K` / `Ctrl+Shift+K`
清除终端屏幕缓冲区(`terminal.clear()`),并完好保留 Linux/Bash 默认的 `Ctrl+K` 剪切行尾逻辑。

#### 3. 易用性增强与多标签/Agent 体验
- **服务器卡片一键克隆**:提供一键克隆操作,完整复用主机、端口、用户名、跳板机关系与标签,安全清空敏感凭据,自动附加 `(Copy)`
后缀;
- **片段动态参数占位符**:支持 `{{variable}}` 语法,插入或执行前自动解析变量并弹出输入弹窗,支持默认值与输入记忆;
- **多标签页双击内联重命名与上下文菜单**:双击标签页标题直接进行内联编辑(`Enter` 保存,`Esc`
取消,空值/纯空白自动恢复原名);右键标签弹出操作菜单(重命名、克隆会话、关闭其他、关闭当前);
- **AI Agent 助手体验全面升级**:
- **动态 Clamp 响应式窗口**:参考 SFTP 采用 `min(clamp(420px, 40vw, 600px), 100%)`
弹性自适应宽度,顶栏对齐 `h-12` 规范并内联 `smart_toy` 助手图标;
- **桌面端严格限制在终端区域**:分栏高度严格限制在 `#terminal-area`
内部,绝不遮挡顶部状态栏右上方的双端延迟展示(`#term-info`)与连接状态;
- **移动端全屏覆盖与软键盘联动**:移动端保持全屏覆盖(`position: fixed; top:
48px;`)保证小屏下充裕的对话阅读空间;打开 Agent
时联动隐藏底部软键盘终端快捷工具栏,彻底解决输入框和发送按钮被遮挡问题;退出返回终端后自动恢复工具栏;
- **诊断 Prompt 预设与触控热区强化**:提供 4 组一键场景诊断 Prompt 胶囊(分析报错、系统负载、端口网络、Docker
状态),移动端全面优化 Prompt
胶囊(`32px`)、发送按钮(`40px`)、代码块操作(`30px`)和高危命令确认弹窗按钮触控热区;支持按 `Esc` 快速退出
Agent 返回终端。

---

### 二、提交列表

- `70042c2` feat: 提交 Gem-Alpha 版本(SFTP增强/片段占位符/标签菜单/大文件解耦瘦身) (#120)
- `78dca39` feat: Gem-Alpha 增量迭代(AI Agent 窗口响应式与移动端优化 / 标签重命名缺陷修复 /
文档同步) (#122)
- `0b04480` fix: 恢复移动端 AI Agent 全屏覆盖布局以保障小屏交互空间
- `0c19ac2` fix: 移动端打开 AI Agent 时自动隐藏底部终端快捷键工具栏
- `50171c7` release: 发布 v2.0.0 Gem-Alpha 架构解耦与交互体验升级版本

---

### 三、关联 Issue / PR

- 关联 PR:#120, #122

---

### 四、验证结果

- ✅ `pnpm run typecheck`:通过(Worker + Frontend 0 错误)
- ✅ `pnpm test`:通过(66 个测试文件,755 项测试全数通过)
- ✅ `pnpm run build:frontend`:通过(单 bundle 确定性构建并内联至
`src/worker/html.ts`)
- ✅ `pnpm run test:e2e`:通过(75 项 Playwright 端到端及 axe 无障碍测试全部通过,1
项按平台条件跳过)
- ✅ `pnpm run verify`:完整本地质量门禁验证全绿通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-09-04 14:14:08 +08:00
TanXinandTanXin f793442a3e release: 发布 v1.14.4 编辑错误横幅边界校验修复版本 (#117)
## 本次版本更新内容

### fix: SFTP 编辑错误横幅统一使用边界校验后的 message(1d1022b)

- `handleSFTPError` 的 edit 分支在无待决请求时此前调用
`showError(msg.message)`,绕过了上方已生成的边界校验变量;改用校验后的 `message`,与
`rejectEditRead` 保持一致
- 保留 hadPending 以 waiter 为准的判定并补充注释:超时回调置空 waiter 后 finally 在同一微任务级联中复位
`editReadActive`,迟到错误帧不可能于读取在途时被处理,横幅兜底不构成双重报错
- 经核实:Copilot 提出的"基于 editReadActive 判断"建议相应对生产不可达窗口,且不能改变其描述的现象,未采纳

### release: 版本号与 CHANGELOG(d99fddd)

- `package.json` / `frontend/package.json` → 1.14.4
- CHANGELOG 追加 v1.14.4 条目(Fixed 段,Keep a Changelog 规范)

## 提交列表

- `1d1022b` fix: SFTP 编辑错误横幅统一使用边界校验后的 message
- `d99fddd` release: 发布 v1.14.4 编辑错误横幅边界校验修复版本

## 验证结果

- ✅ `pnpm run typecheck`(worker + frontend + tests,含 e2e)
- ✅ `pnpm test`:59 个测试文件 / 704 用例全部通过
- ✅ Playwright:sftp-dblclick + sftp-editor 相关 e2e 12/12 通过
- ✅ `pnpm run build:frontend` 可复现构建成功(html.ts 已随修复提交再生成)

## 关联 Issue

无(本次修复来自代码审查反馈,无需关闭 Issue)。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-09-02 19:04:37 +08:00
TanXinandTanXin 3ed3300613 release: 发布 v1.14.3 SFTP 双击智能打开版本 (#116)
## 本次版本更新内容

### feat: SFTP 双击智能打开,不可编辑文件自动转下载(7d74d0f)

- 双击文件优先尝试在线编辑:文本文件直接打开编辑器,明确不可编辑(超大/二进制/无法解码)时自动回退下载,目录双击仍为导航
- 回退下载统一走既有串行下载队列,避免与在途下载并发占用二进制流
- `sftp_error` 增加结构化
`code`(`binary`/`too_large`),消息边界白名单校验后进入回退判定;超时/权限等错误保持提示不静默下载
- 编辑读取增加互斥保护,防止并发请求覆盖 waiter/二进制分块归属
- 新增双击智能打开单元测试(`tests/sftp-panel.test.ts`)与 4 条 e2e
回归(`tests/e2e/sftp-dblclick.spec.ts`)
- 同步 AGENTS.md #32 双击智能打开行为契约

### release: 版本号与 CHANGELOG(1c9afb3)

- `package.json` / `frontend/package.json` → 1.14.3
- CHANGELOG 追加 v1.14.3 条目(Keep a Changelog 规范)

## 提交列表

- `7d74d0f` feat: SFTP 双击智能打开,不可编辑文件自动转下载
- `1c9afb3` release: 发布 v1.14.3 SFTP 双击智能打开版本

## 验证结果

- ✅ `pnpm run typecheck`(worker + frontend + tests,含 e2e)
- ✅ `pnpm test`:59 个测试文件 / 704 用例全部通过
- ✅ Playwright:新增 `sftp-dblclick` 4/4 通过;SFTP
关联回归(editor/panel-actions/overwrite)13/13 通过
- ✅ `pnpm run build:frontend` 可复现构建成功(html.ts 已随功能提交再生成)

## 关联 Issue

无(本次需求来自直接反馈,无需关闭 Issue)。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-09-02 18:50:04 +08:00
TanXin e1891a3a69 release: 发布 v1.14.2 匿名连接表单安全修复版本 (#115)
## 版本更新内容

**v1.14.2 匿名连接表单安全修复版本**

### 提交列表

| 提交 | 说明 |
|------|------|
| `b9809af` | fix: 修复匿名连接页删除最近记录误触发建立连接 |
| `c6e0ba0` | release: 发布 v1.14.2 匿名连接表单安全修复版本(版本号 + CHANGELOG + 构建产物) |

### 更新要点

- **修复匿名连接页删除最近记录误触发建立连接**:最近连接列表的删除按钮未声明 `type`,位于 `connection-form`
内默认按 `type="submit"` 处理,点击「x」在删除记录的同时会误提交表单并触发 `handleConnect()`
建立新连接;`stopPropagation` 无法阻止按钮的默认表单提交动作,删除按钮显式补上 `type="button"` 根治误触连接。
- **连接成功后清空敏感凭据字段**:连接成功后清空密码/私钥输入框,避免关闭 SSH
会话返回匿名连接页时密码仍残留于输入框(此前密码残留会放大删除按钮误触连接问题)。
- **回归测试**:新增源码级断言,守护删除按钮必须显式 `type="button"`、敏感字段清空语句必须位于
`terminal.connect` 之后,防止该问题回归。

### 验证结果

- `typecheck`:通过
- `test`:58 文件 / 700 用例全部通过
- `build:frontend`:通过(可复现构建)
- `test:e2e`:62 passed / 1 skipped
- 完整门禁 `pnpm run verify`:exit=0

### 关联

本版本无关联 Issue(由对话中反馈的问题驱动修复)。
2026-08-30 13:18:40 +08:00
TanXin 90b570569d release: 发布 v1.14.1 自动换行功能版本 (#114)
## 发布说明

**v1.14.1 自动换行功能版本**

### 版本要点

- **SFTP 编辑器自动换行**(关联 #113):编辑器页脚新增「自动换行」开关,基于 CodeMirror 6
`EditorView.lineWrapping` 经 `Compartment`
动态切换(不重建编辑器、不丢状态);触屏/窄屏默认开启、桌面端默认关闭由用户手动开启(检测口径与 16px 字号媒体查询一致);偏好持久化于
`localStorage`(`cloudssh_editor_wrap`),隐私模式回退设备默认值;移动端页脚三按钮空间优化;i18n 双语
+ 桌面/移动双视口 e2e 守护默认值、切换与持久化。

### 提交列表

| 提交 | 说明 |
| ------ | ------ |
| ddb7925 | feat: SFTP 编辑器新增自动换行开关(移动端默认开启)(#113) |
| 1479a5f | release: 发布 v1.14.1 自动换行功能版本(版本号 + CHANGELOG + 构建产物) |

### 关联 Issue

- #113(sftp文件编辑移动端自动换行)——保持 open,待用户后续手动关闭

### 验证结果

- ✅ `pnpm run verify` 全绿:typecheck(worker + frontend)/ test 58 文件 698 用例
/ build:frontend(单 JS + CSS 内联)/ test:e2e 62 用例
- ✅ test 环境 CI 部署成功
- ✅ 新增 e2e:桌面默认不换行可开启并持久化、移动端默认换行可关闭并持久化
2026-08-30 10:50:58 +08:00
TanXin ac6e7d8f6a release: 发布 v1.14.0 SFTP 在线编辑功能版本 (#112)
## 发布说明

**v1.14.0 SFTP 在线编辑功能版本**

### 版本要点

- **SFTP 在线编辑文件**(Closes #111):在 SFTP 文件管理器中直接编辑远端文本文件。CodeMirror 6
编辑器(shell/YAML/JSON/Python/Markdown/HTML/CSS/Dockerfile/systemd
等语法高亮,配色跟随主题);≤2MB 上限 + 空字节嗅探拒绝二进制;保存前 mtime+size 冲突检测与显式覆盖确认;保留 LF/CRLF
与 BOM(字节级往返);UTF-8 可编辑、GBK/GB18030 只读;随分享会话 \`allowSftp\` 门控并纳入审计
- **编辑器移动端适配**:窄屏近全屏 + 安全区,软键盘弹出跟随可视视口收缩;44px 触摸目标;16px 字号规避 iOS 聚焦强制缩放
- **SFTP 面板桌面宽度有界弹性**:\`clamp(420px, 40vw, 600px)\`,1280 笔记本
512px、1500px 起 600px 封顶
- **修复 SFTP 操作栏按钮文字 WebKit 竖排换行**:全局 nowrap + 整栏横向滚动,新增 webkit-mobile 项目
e2e 守护
- **wrangler 升级至 4.125.0**:修复 CI 部署 Dashboard 元数据获取失败(4.127.1 因
minimumReleaseAge 策略暂缓)

### 提交列表

| 提交 | 说明 |
| ------ | ------ |
| 9ec38d3 | feat: SFTP 文件管理器新增在线编辑文件功能(#111) |
| bf45ee0 | chore: 升级 wrangler 至 4.125.0 修复 Dashboard 元数据获取失败 |
| ed985bd | feat: SFTP 在线编辑器移动端适配 |
| 0bdb1c8 | fix: SFTP 操作栏按钮文字在 WebKit 下竖排换行 |
| a3fbeff | feat: SFTP 面板桌面宽度改为有界弹性 clamp(420px, 40vw, 600px) |
| e7877d3 | release: 发布 v1.14.0 SFTP 在线编辑功能版本(版本号 + CHANGELOG + 构建产物) |

### 关联 Issue / PR

- Closes #111(能添加个在线编辑文件功能吗?)

### 验证结果

- ✅ \`pnpm run verify\` 全绿:typecheck(worker + frontend)/ test 58 文件 698
用例 / build:frontend(单 JS + CSS 内联,84 modules)/ test:e2e 60 用例
- ✅ test 环境 CI 部署成功(wrangler 4.125.0)
- ✅ 新增测试:editor-content 纯函数 20 用例、worker editReadFile 8 用例、e2e 编辑器 5 用例
+ 窄视口 1 用例、操作栏布局双视口 × 双引擎 4 用例
2026-08-30 01:00:22 +08:00
b61f16524d release: 发布 v1.13.1 跳板连接修复与私钥格式支持版本 (#110)
## 发布说明

**v1.13.1 跳板连接修复与私钥格式支持版本**

### 版本要点

- 修复 v1.11.0 起跳板机连接必现失败的问题:恢复跳板循环中的 `await
hopSession.waitUntilAuthenticated()`,跳板会话需完成认证进入 `tunnel-ready` 后才可开
direct-tcpip 通道;补充跳板会话就绪时序回归测试,锁定 SSHSession 与 DO 跳板循环时序契约,防止同类回归漏过 CI
- 支持直接粘贴 PKCS#1/PKCS#8/SEC1 封装的 PEM 私钥(RSA/EC/Ed25519):新增最小 DER/ASN.1
读取器(`src/ssh/der.ts`)与 PKCS 解析器(`src/ssh/pkcs.ts`),兼容 macOS `ssh-keygen
-m PEM` 显式曲线参数与 Ed25519 PKCS#8 嵌套 OCTET STRING(RFC 8410),误贴公钥/证书/PPK
给出指向性提示
- 更新贡献者名单

### 提交列表

| 提交 | 说明 |
| ---- | ---- |
| 66480c5 | feat: 支持直接粘贴 PKCS#1/PKCS#8/SEC1 格式私钥 |
| 77e87e2 | fix: 修复 v1.11.0 起跳板机连接必现失败的问题(恢复等待跳板认证完成) |
| bb16371 | test: 补充跳板会话就绪时序回归测试 |
| f7a0554 | docs: 更新贡献者名单(补充 @xuthuslei 跳板认证时序修复贡献) |
| c207aa8 | release: 发布 v1.13.1(版本号 + CHANGELOG) |

### 关联 Issue / PR

- Fixes #108(跳板机连接必现失败)
- Refs PR #109(作者 @xuthuslei,保留原始署名)

### 验证结果

- typecheck(worker + frontend + tests 三工程)通过
- vitest 56 文件 / 668 用例通过(含新增跳板就绪时序与私钥格式回归测试)

---------

Co-authored-by: TanXin <tanxin@example.com>
Co-authored-by: Leon Xu <learxu@gmail.com>
2026-08-28 22:19:13 +08:00
TanXinandTanXin 7e20e2d117 release: 发布 v1.13.0 Theme V3 主题系统版本 (#107)
## 发布说明

**v1.13.0 Theme V3 主题系统版本**

### 关联 Issue

- 关联 #99(「能不能直接在网页加个密码?」):本版本实现其中**主题苹果风**部分——新增 Apple 内置主题(macOS
风格浅色)并落地 Theme V3 主题系统;**网页访问密码**部分未包含在本版本,issue 保持开启、留待后续版本。

### 版本亮点

- **内置主题 5 → 7 款**:新增 CRT Amber(CRT 磷光深色:径向暗角背景 + 扫描线/闪烁/辉光/噪点全开 + 方形
mono 造型)与 Glass(蓝紫浅色玻璃态:mesh 粉彩漂移背景 + 强表面模糊 + 1.4× 圆角 + 分段控件);Glacier
替换为 Apple(macOS 风格浅色,完整 ANSI 16 色无障碍变体)
- **Theme V3 声明式令牌系统**(schemaVersion
3):`background`(solid/linear/radial/mesh 四类型、停靠点白名单、读性遮罩下限
0.25/0.35、drift 动画)、`effects`(scanline/flicker/glow/noise 强度钳制
0-1、data-fx-* 门控、Cyberpunk
默认视觉不变)、`typography`(字号/圆角缩放)、`appearance.blur` 独立表面模糊档位
- **零 DOM 操作、前后端同源校验**:背景/效果全部 CSS 变量 + 属性驱动;V2 主题数据自动升级、glacier
baseTheme 优雅降级;导入/导出双向兼容
- **在线主题编辑器支持 V3**:背景层/效果/版式三组面板 + blur 档位,导出 schemaVersion 3
- **全量文档对齐**:README/tests README/AGENTS/CHANGELOG 与当前实现同步

### 提交列表

| 提交 | 说明 |
| ---- | ---- |
| 268a892 | feat: 内置主题 Glacier 替换为 Apple 浅色主题 |
| 86e3ddf | feat: Theme V3 主题系统落地——背景层、效果注册表与版式缩放 |
| 9092e2a | release: 发布 v1.13.0(版本号 + CHANGELOG) |
| c098a7c | docs: 全量文档与当前实现对齐(测试清单 + 措辞修正) |

### 验证结果

- ✅ typecheck(worker + frontend + tests 三工程)
- ✅ vitest 54 文件 / 649 用例
- ✅ build:frontend 可复现内联构建(html.ts 再生成)
- ✅ 主题 e2e 6/6(含 CRT/Glass 切换、drift 属性、强模糊与 body::before 背景计算值断言)

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-27 16:05:14 +08:00
TanXinandTanXin 185011066b release: 发布 v1.12.2 分享审计详情视图完善版本 (#105)
## 版本内容

-
分享管理弹窗审计详情改为面板内独立视图:点击「查看审计」立即切换至占满面板的详情视图并展示加载占位,消除长列表下审计在底部展开需手动滚动才能看到而导致的“点击无响应”错觉
- 详情视图自带返回按钮,返回后恢复列表滚动位置;重新打开弹窗重置为列表视图
- 审计内容独占面板高度:结构化事件/终端记录展示高度提升至 max-h-64 / max-h-[50vh]
- 查看审计按钮点击后进入禁用加载态,防止重复点击
- 新增 common.back 中英词条(返回 / Back)
- 纯前端展示层改动,零后端/API 变更

## 提交列表

- 81f6932 `release: 发布 v1.12.2 分享审计详情视图完善版本`
- 65443d1 `fix: 分享审计详情改为面板内独立视图消除长列表"无响应"错觉`

## 验证结果

- pnpm run typecheck 通过(worker + frontend)
- pnpm test 通过(54 文件 644 用例)
- build:frontend 构建成功并内联
- 关联 Issue/PR:无(基于 v1.12.1 #104)

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-27 11:25:57 +08:00
TanXinandTanXin 23de6f6957 release: 发布 v1.12.1 审计清理记录时间展示完善版本 (#104)
## 版本内容

- 审计清理记录折叠区每行扩展展示审计生成时间:「清理时间 + 状态(审计时间)· 方式」
- 审计时间取首次审计事件时间(`claimed_at`,认领时写入 `share.claimed`),`created_at` 兜底
- 新增 `share.auditCleanupStatus` 中英词条(`{status}(审计 {time})` / `{status}
(audit {time})`)
- 纯前端展示层改动,零后端/API 变更

## 提交列表

- 3cae999 `release: 发布 v1.12.1 审计清理记录时间展示完善版本`
- acde66c `feat: 审计清理记录行展示审计生成时间`

## 验证结果

- typecheck:frontend 通过
- i18n 对齐测试 16/16
- build:frontend 构建成功并内联
- 关联 Issue/PR:无(基于 v1.12.0 #103)

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-26 13:41:08 +08:00
TanXinandTanXin 52fec4e00f release: 发布 v1.12.0 分享审计保留与清理完善版本 (#103)
## 版本内容

### 分享审计保留与清理
- 审计记录保留与清理能力:终态会话由所有者整体清空(写入墓碑事件保留追责线索)或导出完整 JSON 归档;终态满默认 90 天由 alarm
自动清理
- 审计保留期创建时自定义(7–365 天,白名单校验,默认 90)
-
清理留痕集中展示:清理时间与方式(手动/自动)同步用户库(`audit_purged_at`/`audit_purge_type`),折叠面板展示;已清理分享等同删除效果,不再提供查看审计入口
- 手动清空后取消已排期的自动清理闹钟;保留期服务端校验统一为 7–365 天;修复闹钟设置失败导致"有排期无闹钟"的幽灵状态

### 工程与质量
- 新增审计清理回归测试 8 用例(墓碑隔离、归属/终态校验、同步失败容错、排期回滚、留痕接缝、迁移幂等)
- UserDBDO SQL 查询类型化封装(`query<T>`/`one<T>`),消除 22 处 `as unknown as`
- 测试类型检查纳入门禁:`tests/` 拆分
`tsconfig.worker`/`tsconfig.frontend`(workers-types 与 DOM lib 的 Element
接口冲突无法单配置共存)
- 弱随机数加固(会话名 `crypto.randomUUID`);pnpm
供应链策略(`blockExoticSubdeps`/`minimumReleaseAge` 7 天/`no-downgrade`);CI
权限收敛 `contents: read`;`.gitleaks.toml` 误报豁免
- pi-lens 项目策略口径(AGENTS.md #31):XSS 类规则刻意不做项目级禁用,仅行内逐处豁免

## 提交列表

- 1c38c7a `release: 发布 v1.12.0 分享审计保留与清理完善版本`
- 4dd7c63 `feat: 审计清理回归测试、UserDBDO 类型化查询与测试类型门禁`
- 50389f3 `fix: 消除 pi-lens 剩余告警——SAFETY 注释/测试类型/XSS 抑制/空 catch 说明`
- 23a3e8e `chore: 代码质量审查整改——弱随机数/测试类型检查/供应链加固等 7 项`
- 1cf0ef9 `chore: 配置 pi-lens 项目策略降低风格类噪音并清理用户库遗留项`
- 0f27a50 `fix: 审计清理后完全隐藏分享卡片,仅保留集中式清理记录`
- 7c42e8e `feat: 审计清理改为删除效果并新增集中式清理记录留痕区`
- a3847ee `fix: 审计清理后改用折叠面板展示清理记录并补齐中英文词条`
- b730219 `fix: 审计保留期服务端校验统一为 7–365 天并修复清理闹钟静默失败`
- a68a6c8 `feat: 分享审计保留期支持创建时自定义(7–365 天)`
- 158b205 `fix: 手动清空审计后取消已排期的自动清理唤醒`
- 618f63c `feat: 分享审计记录保留与清理能力(清空/导出/自动保留期)`

## 验证结果

- typecheck 全绿(src + tests.worker + tests.frontend + frontend 四段)
- 全量测试 644/644(54 文件)
- build:frontend 构建成功并内联
- 关联 Issue/PR:无(基于 v1.11.0 #102)

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-26 12:35:58 +08:00
TanXinandTanXin 2dc1f5f290 release: 发布 v1.11.0 会话秒级恢复与分享设备绑定版本 (#102)
## 发布 v1.11.0 会话秒级恢复与分享设备绑定版本

### 版本要点

- **Durable Object 会话保持**:异常断线进入 60 秒保持期,有界缓冲 + SSH 背压暂停,恢复后一次性补发并续借
Window 额度
- **分享会话设备绑定秒级恢复**:认领时绑定非可导出 ECDSA P-256 公钥,断线重连需挑战签名验签(nonce
单次防重放);token 每次轮换并容忍上一代(覆盖轮换帧丢失)
- **严格恢复口径**:分享会话仅绑定设备后可恢复,未绑定环境断线即提示并终结,绝不走完整重连兜底(与二次消费隔离)
- **体验完善**:指数退避铺满 58s 保持窗口、到期前 1 分钟预警、恢复后延迟基线重发、全链路中英文本地化、恢复失败友善提示
- **质量**:新增 9 例分享恢复安全测试矩阵;撤销盲区、SFTP 断链、GitHub 鉴权门等缺陷修复

### 提交列表(17 个,fa24813..5aff4bf 含 1bdd80d 后续)

```
1bdd80d feat: 实现 Durable Object 会话保持与单设备断线秒级无缝重连
f17f15b feat: 分享会话秒级恢复与设备绑定验证
8be962c fix: 修复分享恢复测试中时间戳二次取值导致的验签偶发失败
3e2ad36 fix: 分享会话恢复改为指数退避铺满宽限窗口
749d281 refactor: 分享落地页改用 DOM API 构建替代 innerHTML 拼接
1fe0c2e fix: 补全分享链路的中英文本地化缺口
97a7797 fix: 修复分享错误映射层泄漏词条键名导致的 E2E 失败
3c6c946 refactor: 清理分享管理器存量告警并固化内联抑制策略说明
b23ca94 fix: 恢复会话后补发双段延迟基线并增强分享恢复失败诊断
0d4039d fix: 分享恢复失败原因的友善提示与设备绑定可靠性校验
0d5ffb7 fix: 分享恢复末次尝试的窗口边界处理与明确提示
d0a0b01 fix: 设备绑定状态随会话下发并更正提示语义
d702d80 fix: 分享会话恢复统一要求设备绑定并即时提示不支持场景
9511fa8 fix: 分享会话到期预警、终端终态识别与严格恢复口径收尾
b78e317 fix: 分享恢复容忍上一代 token,修复弱网轮换帧丢失导致的永久锁死
0db34bb fix: 更正无痕环境认领提示以对齐严格恢复口径
fa24813 refactor: 移除认领时设备绑定失败的落地页提示(方案 B)
5aff4bf release: 发布 v1.11.0 会话秒级恢复与分享设备绑定版本
```

### 验证结果

- typecheck 双端通过(worker + frontend)
- 全量测试 636/636(53 文件,含新增分享恢复安全矩阵)
- CI 门禁(deploy.yml):typecheck → test → build:frontend → test:e2e →
按分支部署,已在 test 分支历次推送中通过

### 说明

- CHANGELOG 与版本号(package.json / frontend/package.json)已更新至
1.11.0(2026-08-25)
- 合入 main 后将自动部署生产环境 `cloudssh`

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-25 11:38:12 +08:00
TanXin 2690e95aed release: 发布 v1.10.5 AI Agent 架构完善版本 (#101)
## 发布说明

v1.10.5 相较于 v1.10.4 进行了进一步关于AI Agent的设计完善,彻底移除 `respond_to_user`
反模式虚拟工具,将 AI Agent 控制循环与前端交互全面重构为标准 ReAct 架构,实现零 JSON
转义风险与极致丝滑的实时逐字流式打字输出。

### 提交列表

- `4bb5fd0` refactor: 彻底移除 respond_to_user 虚拟工具并回归标准 ReAct 原生流式输出
- `a1a174d` release: 发布 v1.10.5 AI Agent 架构重构版本

### 本次版本更新要点

**Removed**

- **彻底移除 `respond_to_user` 工具**:消除长文本 Markdown 序列化为 JSON
字符串引起的转义崩溃、截断语法错误以及界面十几秒无响应等待的假死现象。工具列表精简为 7 个纯粹的系统运维工具。

**Changed**

- **标准 ReAct 原生流式输出**:大模型在完成工具执行后直接以自然语言 Markdown
形式回复,实现实时逐字打字(Typewriter Effect)输出。
- **System Prompt 引导优化**:明确规范大模型在完成信息收集后直接输出分析报告。
- **前端交互精简**:移除“正在生成回复”冗余虚拟步骤的特判,工具执行完毕后直接无缝进入流式 Markdown 呈现。

**Docs**

- **维护文档同步**:`AGENTS.md` 工具数量定义同步更新(8 ➔ 7)。

### 验证结果

- `pnpm run typecheck`(worker + frontend):全部通过(0 错误)
- `pnpm test`:50 个测试文件 / 619 项用例全部通过(100% Pass)
- `pnpm run build:frontend`:前端生产构建成功并内联至 `src/worker/html.ts`
- 代码已推送 `test` 分支并在云端 CI 自动触发测试环境验证
2026-08-22 19:13:35 +08:00
TanXin 059c850b2d release: 发布 v1.10.4 AI Agent 会话稳定性修复版本 (#100)
## 发布说明

v1.10.4 核心修复 AI Agent 在多步任务或使用特定大模型时,会话直接异常终止且无最终回复输出的问题,并优化了流式解析与
System Prompt 工作流约束。

### 提交列表

- `a57f6bb` fix: 修复 AI Agent 异常终止与最终回复缺失问题
- `77906a0` release: 发布 v1.10.4 AI Agent 会话稳定性修复版本

### 本次版本更新要点

**Fixed(AI 会话稳定性,核心防线)**

- **`runLoop` 响应派发兜底**:修复当大模型直接以自然语言文本总结(无 `tool_calls`)时,后端控制循环直接
return 导致漏发响应帧、任务执行一半静默终止且无任何输出的问题。
- **流式空数组误判修复**:修正流式解析中将 `delta.tool_calls: []` 空数组误判为工具调用、导致文本流被拦截的问题。
- **推理模型思维链兼容**:收集 `delta.reasoning_content` /
`delta.reasoning`,当仅有推理内容时自动回退作为回复输出,并在模型极端返回空内容时提供多语言安全兜底(“任务已执行完成。” /
"Task completed.")。

**Changed**

- **工作流约束优化**:优化 System Prompt 第 6 步,允许模型在任务完成时直接以 Markdown 形式输出总结报告,消除对
`respond_to_user` 虚拟工具的强制要求,对齐业界标准 Agent 范式。

**Added**

- **自动化测试套件**:新增 4 个针对 AgentCore
响应交付与异常终止场景的单元测试(`tests/worker/agent-core-response.test.ts`)。

### 验证结果

- `pnpm run typecheck`(worker + frontend):全部通过(0 错误)
- `pnpm test`:50 个测试文件 / 619 项用例全部通过(100% Pass)
- `pnpm run build:frontend`:前端生产构建成功并内联至 `src/worker/html.ts`
- 代码已推送 `test` 分支并在云端 CI 自动触发测试环境验证
2026-08-22 12:34:19 +08:00
TanXinandTanXin c5055008d4 release: 发布 v1.10.3 弱网会话稳定性修复版本 (#98)
## 发布说明

v1.10.3 核心修复弱网环境下 AI Agent 执行大输出命令导致的会话挂死与站点不可达问题。

### 提交列表

- `57a9779` fix: 修复弱网下 Agent 大输出导致会话挂死与站点不可达的问题
- `3e60d07` release: 发布 v1.10.3 弱网会话稳定性修复版本

### 本次版本更新要点

**Fixed(弱网稳定性,核心防线)**

- Agent exec 输出有界化:4MB 硬上限(`MAX_EXEC_CAPTURE_BYTES`),超限不再续 SSH window
并由会话层关闭通道击杀远端命令(如无界输出的 `docker logs`);保留头 128KB / 尾 256KB 环形视图并附截断说明,跨块
UTF-8 流式解码不乱码。
- `docker_manage(logs)` 强制 `--tail 200`,拒绝 `-f/--follow` 无限流式输出。
- 工具结果进 LLM 上下文前按 64K 字符中间截断(token budget),`trimMessages` 阈值 60→40。
- Socket 写增加 15s deadline,超时关闭底层连接以解挂 `sendMutex`。
- 新增独立于写路径的被动 idle 看门狗:60s 无入站数据即断开,弱网下会话必然收敛。
- 终端输入队列 4MB 上限,浏览器卡死时主动收敛会话。
- 消除 exec 输出整块拷贝内存开销(subarray 视图零拷贝)。

**Added**

- `idle_timeout` / `input_backlog_closed` 两个 SSH 错误事件 i18n
词条(zh-CN/en-US 对齐)。
- 12
个回归测试(`tests/worker/agent-exec-channel.test.ts`、`tests/worker/agent-tool-executor.test.ts`):截断语义、硬上限、UTF-8
跨块、docker logs 守卫、工具结果 token budget。

**Docs**

- `AGENTS.md` 新增第 30 条维护约定(Agent exec 输出有界性防线)。

### 验证结果

- `pnpm run typecheck`(worker + frontend):通过
- `pnpm test`:49 文件 / 615 用例全部通过
- `pnpm run build:frontend`:通过(html.ts 已同步)
- 变更已推送 `test` 分支并触发测试环境自动部署(CI 门禁:typecheck + test + build + e2e)

### 关联

- 无关联 Issue;由线上求助定位并修复。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-21 13:20:59 +08:00
TanXinandTanXin 6374080281 release: 发布 v1.10.2 工作流和文档更新版本 (#97)
## 版本内容

v1.10.2 为文档与 CI 工作流更新版本(无代码变更),包含以下提交:

| 提交 | 说明 |
| --- | --- |
| `11149d7` | docs: 全面更新项目文档并精简 README 结构 |
| `2b36ff4` | ci: 修复文档变更误触发部署的 paths-ignore 作用域 |
| `ee8f048` | ci: 按 SHA 锁定 GitHub Actions 引用以加固供应链 |
| `1f2a6b7` | docs: 完善发布流程规范(release 提交与 PR 标题主题化) |
| `cbdae18` | release: 发布 v1.10.2 工作流和文档更新版本 |

## 更新要点

**文档(README 中英双语)**
- 核心优势要点化:重点、全面、不啰嗦
- 架构说明仅保留系统架构图,移除核心组件 / SSH 协议实现 / 数据流三个小节
- 快速部署移除本地命令行部署方式,新增「可配置环境变量」汇总表
- 更新演示视频时长 8:27 → 19:48

**维护文档**
- AGENTS.md:补齐目录树、环境变量、tests/ 结构与新坑位(DNS 防重绑定、Biome、i18n、CI 作用域、发布流程主题化)
- tests/README.md:补充 7 个新测试文件与覆盖范围

**CI 修复与加固**
- `paths-ignore` 作用域:`*` 不匹配 `/`,原 `*.md` 仅忽略根目录文档,导致 `tests/README.md`
等子目录文档变更误触发完整部署;改为 `**/*.md` 等跨目录模式
- GitHub Actions 引用按 40 位 commit SHA 锁定(checkout / setup-node / pnpm /
configure-pages / upload-pages-artifact / deploy-pages),消除 tag 可变引用风险
- 新增 `.yamllint`:放宽行宽限制(SHA 引用天然超 80 字符)并统一 YAML 双引号规范,消除 pi-lens 格式化漂移

## 验证结果

- `pnpm run typecheck` 通过
- `pnpm test` 通过(47 个测试文件 / 603 个用例)
- `pnpm run build:frontend` 构建成功
- 两份 workflow 经 yamllint 校验无错误
- CI 完整门禁(typecheck + test + 可复现构建 + Playwright E2E + axe)在 `2b36ff4`
已绿色通过,`cbdae18` 运行中

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-20 17:06:37 +08:00
TanXinandTanXin 21c2845ca6 release: 发布 v1.10.1 版本 (#95)
合并 `test` 的 v1.10.1 提交到 `main`。

**更新内容**
- 新增“返回终端”能力:标签栏右侧“+”进入服务器列表或匿名连接页后,可通过工具栏/表单顶部按钮一键返回已建立的 SSH
会话,终端界面隐藏时亦可按 `Esc` 快速返回;返回按钮按标签数量联动显隐,窄屏下仅保留图标。
- 重构标签栏与状态栏渲染:以 `replaceChildren()` 与 `createElement` 取代 10 处
`innerHTML`,消除 XSS 隐患。
- 为 `TabManager` 新增 `setTabsChangedHandler` 回调,取代对实例方法的手工包装。
- 补充 AGENTS.md 发布流程与 `release` 提交类型规范;格式化 CHANGELOG 满足 markdownlint
MD022。

**包含提交**
- `0c67a54` feat: 标签页右侧新建连接后支持返回已有终端会话
- `23122b0` release: 发布 v1.10.1 版本
- `a6f0016` chore: 格式化 CHANGELOG,补充标题后空行以满足 markdownlint MD022
- `8022603` docs: 补充 AGENTS.md 发布流程与 release 提交类型

**验证**
- `pnpm run typecheck` 通过
- `pnpm test` 47/47 文件、603/603 用例通过
- `pnpm run verify` 50 通过 / 1 跳过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-20 15:10:24 +08:00
TanXinandTanXin 4eeb050576 release: 发布 v1.10.0 自定义命令片段库版本 (#93)
合并 `test` 的 v1.10.0 提交到 `main`。

**包含提交**
- `28c9433` feat: 添加自定义命令片段库
- `9aa2e80` release: 发布 v1.10.0 自定义命令片段库版本

**关联**
- Related to #90

> 本 PR 仅关联 #90,不自动关闭该 Issue。

**验证**
- `pnpm run typecheck` 0 错
- `pnpm test` 47/47 603/603 通过
- `pnpm run build:frontend` 成功

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-20 11:42:28 +08:00
901e4b0125 release: 发布 v1.9.1 SSH 密钥切换兼容修复版本 (#89)
## 发布说明

本次发布将 CloudSSH 升级至 `v1.9.1`,修复 SSH 密钥切换后同一 TCP 数据块内首个加密包可能被旧分包参数解析的问题。

## 主要变更

- `processPackets()` 在每个数据包解析前重新读取当前加密算法、块大小、AEAD 标签和 MAC 长度。
- 修复服务端将 `SSH_MSG_NEWKEYS` 与首个加密包合并返回时可能出现的超大 `packet_length` 错误。
- 新增 AES-GCM、AES-CTR/HMAC 状态切换及真实 CTR/HMAC 同批数据回归测试。
- 更新中英文兼容性说明,并补充贡献者 Leon Xu(@xuthuslei)。
- 稳定移动端服务器卡片布局 E2E,在读取布局前等待最终渲染样式生效。

## 验证

- `pnpm run verify`:通过
- Worker 与前端类型检查:通过
- 单元及集成测试:44 个测试文件、587 项测试通过
- Chromium/WebKit E2E 与无障碍测试:50 项通过,1 项按条件跳过
- 前端生产构建:通过
- `git diff --check`:通过
- `test` 环境 CI
与部署:通过(https://github.com/newbietan/CloudSSH/actions/runs/32107868226)

Closes #87

包含 #88 的原作者提交。

---------

Co-authored-by: Leon Xu <learxu@gmail.com>
Co-authored-by: TanXin <tanxin@example.com>
2026-08-18 14:43:25 +08:00
TanXin 82643b9460 release: 发布 v1.9.0 一次性 SSH 分享版本 (#86)
## 发布说明

本次发布将 CloudSSH 升级至 `v1.9.0`,新增默认关闭、可选启用的一次性 SSH 授权分享与分享会话专用审计。

## 主要变更

- 使用仅含 256 位随机能力凭证的分享链接,持久层只保存哈希,链接只能领取一次。
- 支持独立的领取有效期、最长会话时间、所有者实时撤销和连接到期关闭。
- 接收者明确同意审计后进入受限会话,仅可使用终端与 SFTP。
- 分享会话禁用 AI Agent、自动重连、OS 检测、元数据更新、主机指纹替换及全链路 `keyboard-interactive`。
- 新增 `SSHShareDO`,记录会话生命周期、SFTP 请求/结果和终端 PTY 输出;审计失败或达到容量上限时关闭会话。
- 增加 `ENABLE_SSH_SHARING` 部署配置、中英文说明和完整安全回归。

## 安全边界

- 原始分享凭证不会进入 SSH Durable Object 或持久层,领取后仅签发 60 秒有效的连接票据。
- 分享链要求目标及全部跳板节点已有可信路径级主机指纹,并始终启用严格主机密钥签名验证。
- PTY 输出审计不是目标机级强审计,文档已明确其覆盖范围和限制。

## 验证

- Worker 与前端类型检查:通过
- 单元与集成测试:584 项通过
- Chromium/WebKit 浏览器回归:通过(1 项按测试条件跳过)
- 前端生产构建:通过
- Wrangler 干运行:通过,正确识别 3 个 Durable Object 绑定
- `git diff --check`:通过

Refs #84

Issue #84 保持开启,用于继续收集分享功能的实际使用反馈和后续需求。
2026-08-16 12:35:58 +08:00
TanXinandTanXin 2eb7139d1d release: 发布 v1.8.2 跳板区域调度优化版本 (#83)
## 发布说明

本次发布将 CloudSSH 版本升级至 `v1.8.2`,优化 SSH 跳板链的区域推断策略,避免对不会由 Cloudflare
直接连接的内网目标执行无效 IPinfo 查询。

## 主要变更

- 仅对 Cloudflare 直接连接的跳板链最外层入口执行区域推断。
- 带有 `jump_server_id` 的下游服务器不再查询或保存自身区域信息。
- 从直连切换为跳板连接时清理失效的手动区域和推断结果。
- 从跳板连接切回直连时,自动模式仅对新的直连入口推断一次。
- 选择跳板服务器后停用区域选项,并在列表中显示“由跳板入口决定”“随跳板”。
- 更新中英文 README、IPinfo 隐私说明和维护规范。

## 问题原因与影响

SSH 跳板功能接入后,连接阶段已经正确使用最外层入口的
`locationHint`,但服务器保存逻辑仍沿用旧的直连模型,导致下游内网主机也会触发 IPinfo
请求。此次调整以后端保存后的有效跳板关系为准,不改变现有 SSH 跳转链和连接协议,也不新增数据库迁移。

## 版本与文档

- `package.json`:`1.8.1` → `1.8.2`
- `CHANGELOG.md`:新增 `1.8.2` 发布记录
- `README.md` / `README_en.md`:补充跳板链区域推断与隐私行为说明

## 验证

- `pnpm run typecheck`:通过
- `pnpm test`:573 项通过
- `pnpm run build:frontend`:通过
- `pnpm run test:e2e`:49 项通过,1 项按项目配置预期跳过
- `git diff --check`:通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-14 13:00:45 +08:00
TanXinandTanXin 5936cf734c release: 发布 v1.8.1 主机指纹安全修复版本 (#82)
## 发布说明

本次发布将 CloudSSH 版本升级至 `v1.8.1`,完善 SSH 主机指纹验证和主机密钥变更后的重新信任流程。

关联 issue:#81(等待用户使用新版本验证,不自动关闭)

## 主要变更

- 将首次主机指纹持久化调整到 SSH 密钥交换签名验证成功之后,避免未验证指纹污染信任记录。
- 主机指纹变化时展示目标主机、已知指纹与新指纹,只有用户明确确认后才替换记录并重新连接。
- 用户取消确认或信任记录写入失败时保留旧指纹,不进行自动替换。
- 已保存服务器确认新指纹后先更新云端记录,再申请新的一次性连接令牌。
- 匿名连接更新本地记录与当前内存配置;多级跳板继续按完整路由身份隔离主机指纹。
- 签名未验证的首次或变更指纹不会持久化,也不能通过确认流程替换旧指纹。

## 版本与文档

- `package.json`:`1.8.0` → `1.8.1`
- `CHANGELOG.md`:新增 `1.8.1` 发布记录

## 验证

- `pnpm run typecheck`:通过
- `pnpm test`:568 项通过
- `pnpm run build:frontend`:通过
- `pnpm run test:e2e`:49 项通过,1 项按项目配置预期跳过
- `git diff --check`:通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-13 13:51:03 +08:00
TanXinandTanXin 6ae1922b5c release: 发布 v1.8.0 SSH 跳板连接版本 (#80)
## 发布说明

发布 CloudSSH v1.8.0,将 `test` 分支中已经完成线上测试的功能合并到 `main`。

关联 issue:#72。本 PR 不使用自动关闭关键字,待用户后续反馈确认后再决定 issue 状态。

## 主要更新

### 多级 SSH 跳板连接

- 登录用户可以为已保存服务器选择跳板服务器,通过标准 RFC 4254 `direct-tcpip` 通道逐层建立嵌套 SSH。
- 支持最多 3 台跳板服务器;中间节点仅执行 SSH 认证和 TCP 转发,最终目标统一承载终端、SFTP、AI Agent exec
和操作系统识别。
- 后端解析不可变的外层入口到最终目标连接链,拒绝匿名注入、跨用户引用、自引用、循环和超深链路。
- 每一跳独立认证和验证路径级主机指纹,避免不同内网中相同地址的 known-host 记录冲突。
- Durable Object 区域调度和公网地址检查以 Cloudflare 直接连接的最外层入口为准。
- 前端支持配置跳板服务器、过滤非法候选项并展示多级连接路径。

### 移动端连接恢复优化

- 手机和平板从后台返回后继续执行带随机 ID 的有界 WebSocket 心跳,失活连接沿用既有安全重连流程。
- 后台恢复监听仅在设备具备触点且主指针为粗粒度时启用。
- 修复普通 PC 切换浏览器标签页时误输出恢复提示并发送不必要探测的问题。

### 版本与文档

- `package.json` 版本更新为 `1.8.0`。
- `CHANGELOG.md` 按 Keep a Changelog 补充 v1.8.0 发布记录。
- 中英文 README 已补充 SSH 跳板机的配置方式、安全边界和使用限制。

## 包含的变更

- #78:支持多级 SSH 跳板连接
- #79:限制移动端后台恢复检查
- `2d336d0`:发布 v1.8.0 SSH 跳板连接版本

## 验证结果

已完成 test 环境实际 SSH 跳板连接测试,并执行完整质量门禁:

```bash
pnpm run verify
```

结果:

- Worker 与前端 TypeScript 类型检查通过。
- 39 个测试文件、559 项单元及集成测试通过。
- 前端生产构建和资源内联通过。
- 47 项 Chromium/WebKit E2E 测试通过,1 项跨项目预期跳过。
- `git diff --check` 通过。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-13 11:25:50 +08:00
TanXinandTanXin 1e3b61e18b release: 发布 v1.7.3 移动端稳定性修复版本 (#77)
## 发布概述

发布 CloudSSH v1.7.3,修复移动浏览器后台恢复后的失活连接,以及 iOS Safari 中文输入法无法输入空格和部分标点的问题。

## 主要变化

- 页面从后台返回后使用带随机 ID 的有界心跳验证 WebSocket,不再仅凭 readyState 判断 SSH 会话可用。
- 匿名会话使用当前内存配置重建 SSH;已保存服务器重新申请一次性令牌后连接。
- 仅在新会话收到 shell_ready 后恢复在线状态和终端输入,避免“显示已连接但无法操作”。
- iOS IME 回退在 keydown=229 后接受 Safari 实际返回的任意对应 keyup 键码,并保留 xterm onData
优先去重。
- 新增 Chromium 与 iPhone WebKit 回归,覆盖空格、英文/中文标点、连续空格替换和后台连接恢复。

## 根因与影响

移动浏览器进入后台后可能冻结页面定时器并使 WebSocket 表面保持 OPEN,但其对应 SSH
会话已不可用;已保存服务器原有重连路径也无法刷新一次性令牌。另一方面,iOS 中文输入法的 keydown 常为 229,而空格和标点的
keyup 可能变为 32、0 或其他键码,旧兼容条件因此丢弃输入。

本次修复限制在移动页面生命周期与 iOS-like IME 补偿路径,桌面输入、SSH 协议、SFTP 和 Agent 数据通道保持不变。

## 版本与文档

- package.json 版本更新为 1.7.3。
- CHANGELOG.md 新增 1.7.3 发布记录(2026-08-12)。
- README 中英文更新日志入口保持有效。

## 验证

- Worker 与前端 TypeScript 类型检查通过
- 36 个测试文件、553 项单元与集成测试通过
- 43 项 Chromium/iPhone WebKit E2E 与无障碍测试通过
- 生产前端构建及 Worker HTML 内联成功
- git diff --check 通过

本 PR 不自动关闭任何 Issue,待真实设备或用户环境验证后再单独处理。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-12 13:50:40 +08:00
TanXinandTanXin 4884b4b0a5 release: 发布 v1.7.2 Serv00 认证兼容版本 (#76)
## 发布概述

发布 CloudSSH v1.7.2,完善 Serv00 等仅通过 `keyboard-interactive` 暴露密码验证的 SSH
服务兼容性,并补强浏览器挑战确认、认证超时和跨浏览器回归覆盖。

## 主要变化

- 用户认证前发送 RFC 4252 `none` 探测,根据服务端实际声明的方法选择普通密码、公钥或
`keyboard-interactive`。
- 对认证失败响应未携带方法列表的非标准服务端保留有界兼容回退。
- 交互式挑战增加浏览器展示确认:先等待弹窗显示确认,再开始计算用户响应时间。
- 区分浏览器未展示挑战与用户已看到但未响应两类超时,认证超时使用正常关闭,避免旧版前端反复重连并触发服务商侧限制。
- 修复认证控制消息处理异常被误当作终端文本,以及无效挑战未可靠取消的问题。
- 新增 Chromium 与移动 WebKit 认证回归测试,并将 WebKit 纳入部署质量门禁。

## 版本与文档

- `package.json` 版本更新为 `1.7.2`。
- `CHANGELOG.md` 新增 `1.7.2` 发布记录(2026-08-12)。
- README 中英文更新日志入口保持有效。

## 验证

- Worker 与前端 TypeScript 类型检查通过
- 36 个测试文件、552 项单元与集成测试通过
- 38 项 Chromium/WebKit E2E 与无障碍测试通过
- 生产前端构建与 Worker 内嵌生成通过
- `git diff --check` 通过
- test 分支发布提交 `1708f18` 的 GitHub Actions 检查通过

## Issue 关联

关联 #67。本版本包含针对现有反馈的兼容性完善,但该 Issue 保持开放,等待用户在真实 Serv00
环境中升级验证并反馈后,再决定是否关闭。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-12 11:32:45 +08:00
TanXinandTanXin da283d1aba release: 发布 v1.7.1 移动端终端修复版本 (#75)
## 发布概述

发布 CloudSSH v1.7.1,修复移动端软键盘打开后终端内容被遮挡、视口跳动,以及无法通过单指滑动查看终端历史的问题。

## 主要变化

- 统一使用 VisualViewport 的高度和顶部偏移计算移动端终端可视区域。
- 等待软键盘动画稳定后再调整终端行列数,避免向远端 PTY 连续发送中间 resize。
- 终端尺寸变化时保留滚动锚点:底部用户继续跟随提示符,历史阅读位置不被重置。
- 在正常缓冲区增加单指垂直滑动 scrollback,并与移动选区、备用屏幕和远端鼠标协议隔离。
- 键盘打开时收起非必要状态栏并避免重复叠加底部安全区。
- 增加软键盘动画、触摸滑动、短按聚焦和滚动位置的 Chromium 回归覆盖。

## 版本与文档

- package.json 版本更新为 1.7.1。
- CHANGELOG.md 新增 1.7.1 发布记录(2026-08-11)。
- README 中英文更新日志入口保持有效。

## 验证

- Worker 与前端 TypeScript 类型检查通过
- 36 个测试文件、548 项单元与集成测试通过
- 34 项 Chromium E2E 与无障碍测试通过
- 生产前端构建与 Worker 内嵌生成通过
- git diff --check 通过

## Issue 关联

关联 #74。该 Issue 保持开放,等待用户在 v1.7.1 环境中完成验证并反馈后,再决定是否关闭。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-11 18:22:01 +08:00
TanXinandTanXin db4bbcfc44 release: 发布 v1.7.0 (#73)
## 发布概述

发布 CloudSSH v1.7.0,增加可选的 GitHub 用户访问限制与私有实例模式,并包含同期的依赖、构建和类型安全加固。

## 主要变化

- 新增 `GITHUB_ALLOWED_USER_IDS`,按稳定的 GitHub 数字用户 ID 限制允许登录的账号。
- 新增 `REQUIRE_GITHUB_AUTH`,启用后禁止匿名 SSH;与白名单组合后仅允许指定 GitHub 用户使用实例。
- 在 OAuth 回调、既有 session、一次性连接令牌和 WebSocket 升级路径持续执行后端访问策略校验。
- 强制登录模式下校验一次性连接令牌与当前 GitHub 用户的归属关系。
- 未登录页面新增强制 GitHub 登录状态,并同步更新中英文部署与配置文档。
- DOMPurify 升级至 3.4.13,并完善前端构建产物校验、忽略规则和服务器保存响应类型。

## 版本与文档

- `package.json` 版本更新为 `1.7.0`。
- `CHANGELOG.md` 新增 `1.7.0` 发布记录(2026-08-11)。

## 验证

- Worker 与前端 TypeScript 类型检查通过
- 36 个测试文件、548 项单元与集成测试通过
- 32 项 Chromium E2E 与无障碍测试通过
- 生产前端构建与 Worker 内嵌生成通过
- test 分支 CI
与测试环境部署通过:https://github.com/newbietan/CloudSSH/actions/runs/31460428306
- `git diff --check` 通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-11 13:19:41 +08:00
TanXin c95c7b3d6f release: 发布 v1.6.4 安全加固版本 (#71)
## 发布概述

发布 CloudSSH v1.6.4,完成两项低成本安全与规范性加固,不引入复杂安全架构或兼容性破坏。

## 主要变化

- 完善 Agent 危险命令边界识别,覆盖位于分号、逻辑运算符、管道、括号和换行后的无空格组合命令。
- 保持既有拦截与用户确认策略,不扩大 Agent 权限,也不增加新的确认流程。
- 匿名 SSH、一次性令牌 SSH 与 SFTP attach WebSocket 统一要求同源 Origin。
- 缺失或不匹配的 Origin 返回 403,正常浏览器连接保持不变。
- 更新版本号、变更日志与项目维护约束。

## 兼容性与影响

- 正常同源浏览器用户不受影响。
- 普通 Agent 命令行为不变,仅修复危险命令边界漏检。
- 不支持缺失 Origin 的非浏览器 WebSocket 客户端。

## 验证

- Worker 与前端 TypeScript 类型检查通过
- 36 个测试文件、532 项单元与集成测试通过
- 生产前端构建通过
- 31 项 Chromium E2E 与无障碍回归测试通过
- git diff --check 通过
2026-08-09 21:23:41 +08:00
TanXinandTanXin 617b06353b release: v1.6.3 — 支持交互式认证并修复回退兼容性 (#69)
## 发布概述

发布 CloudSSH v1.6.3,新增 RFC 4256 keyboard-interactive
交互式认证,并修复普通认证被错误回退到交互式认证的问题。

## 主要变化

- 支持单轮、多轮、零提示和多提示的 keyboard-interactive 挑战。
- 支持基于 partial_success 的有界多因素认证流程。
- 新增独立认证弹窗,challenge ID 与来源 WebSocket 绑定。
- 支持超时、取消及用户明确选择后使用已保存密码。
- 仅当主认证方式不再可用或上一因子部分成功时进入交互式认证。
- 普通服务端凭据拒绝不再以 WebSocket 1011 表示内部错误。
- 修复 Alpine 等服务器上普通认证失败被误判为交互式认证失败的问题。

## 兼容性与影响

- 普通密码和密钥认证仍保持优先。
- 不增加额外重试机制。
- 协议格式错误、状态异常、超时和超限保护保持不变。

## 验证

- pnpm run verify
- Worker 与前端类型检查通过
- 36 个测试文件、527 项单元与集成测试通过
- 生产前端构建通过
- 31 项 Chromium E2E 与无障碍回归测试通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-09 12:38:21 +08:00
TanXinandTanXin 04dbf196c3 release: v1.6.2 — 修复移动端复制与 Windows 主题兼容 (#66)
## 发布概述

发布 CloudSSH v1.6.2,重点修复移动端终端文本无法可靠选择和复制的问题,同时完善 Windows
环境下赛博朋克主题的原生下拉列表样式,并同步更新项目文档。

## 主要变化

### 移动端终端复制

- 为移动端增加明确的终端文本选择模式。
- 没有选区时点击“复制”按钮进入选择模式,拖动选择终端文本后再次点击即可复制。
- 复制成功后自动清除选区并退出选择模式。
- 切换终端标签、离开终端或断开连接时自动重置选择状态。
- 触摸选区继续保持显式复制,不影响桌面端鼠标选区自动复制逻辑。
- 完善旧版剪贴板回退路径的文本选中、异常清理和焦点恢复。

### Windows 主题兼容

- 修复 Windows Chromium 下赛博朋克主题原生下拉列表仍显示白色背景的问题。
- 下拉选项和选项分组的背景色、文字颜色现在会跟随当前主题变量。
- 保留原生下拉框的键盘操作和无障碍能力。

### 文档与版本

- 精简中文 README 中重复或过细的内容。
- 同步调整英文 README,保持中英文功能、部署和维护说明一致。
- 更新 `package.json` 版本号至 `1.6.2`。
- 按 Keep a Changelog 规范补充 v1.6.2 更新日志。

## 用户体验影响

- 移动端用户可以稳定地选择并复制终端文本。
- 剪贴板 API 受限或不可用时,复制失败反馈和回退行为更加可靠。
- Windows 深色主题下的原生下拉列表不再出现突兀的白色背景。
- 桌面端终端复制、SSH、SFTP 和 AI 助手现有行为不受影响。

## 兼容性

- 不涉及后端 API、数据库结构或 Durable Object 迁移。
- 不改变 SSH、SFTP 和 WebSocket 通信协议。
- 不改变用户配置及已保存服务器数据。
- 现有主题和自定义 Theme V2 配置保持兼容。

## 验证

- `pnpm run verify`
- Worker 与前端 TypeScript 类型检查通过
- 33 个测试文件、495 项单元与集成测试通过
- 生产前端构建通过
- 31 项 Chromium E2E 与无障碍回归测试通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-05 11:47:08 +08:00
TanXinandTanXin 86fd261fc2 release: v1.6.1 — 优化 RTT 延迟采样体验 (#65)
## 发布概述

发布 CloudSSH v1.6.1,优化终端状态栏的 RTT 延迟采样体验,使网络延迟变化能够更及时、准确地反馈给用户。

## 主要变化

- 将浏览器到 Cloudflare 节点的 RTT 采样间隔由 30 秒缩短至 5 秒。
- 上一次 RTT 探测尚未返回时跳过新探测,避免弱网环境下重复采样覆盖计时。
- 更新 `package.json` 版本号至 `1.6.1`。
- 按 Keep a Changelog 规范补充 v1.6.1 更新日志。

## 用户体验与性能影响

- RTT 变化最多约 5 秒即可反映到终端状态栏。
- 每次探测仅包含一组轻量的 WebSocket `ping/pong` 消息。
- 未完成的探测不会重复发送,兼顾弱网环境下的准确性和性能。
- Cloudflare 节点到 SSH 服务器的连接延迟仍只在建立 SSH 连接时测量,不受本次改动影响。

## 兼容性

- 不改变 SSH、SFTP 和 AI 助手的连接与通信协议。
- 不涉及数据库结构、Durable Object 迁移或部署配置变更。
- 对现有用户配置和已保存服务器数据无影响。

## 验证

- `pnpm run verify`
- Worker 与前端类型检查通过
- 33 个测试文件、495 项单元与集成测试通过
- 生产前端构建通过
- 31 项 Chromium E2E 与无障碍回归测试通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-04 11:31:16 +08:00
73477ed71b release: v1.6.0 — 添加服务器操作系统自动识别 (#64)
## 发布概述

发布 CloudSSH v1.6.0,新增已保存服务器的远端操作系统自动识别和卡片系统图标,并完善持久化、失效策略与兼容性。

## 主要变化

- 登录用户连接尚未识别的已保存服务器后,通过独立、非阻塞 SSH exec 通道读取系统信息。
- UserDBDO 持久化规范 OS key,前端通过 `os_detected` 消息即时更新服务器卡片图标。
- `unknown` 不持久化、不主动重试,用户下次连接时自然重新探测。
- 修改服务器主机地址或端口时清除旧 OS,后台识别不更新 `updated_at`,避免改变列表排序。
- 完善 Windows cmd 输出识别,并为没有独立品牌图标的系统提供通用图标回退。
- 更新中英文 README、架构说明、贡献者记录和维护规范。
- 更新 `package.json` 至 1.6.0,并补充 Keep a Changelog 格式更新日志。

## 兼容性与影响

- 仅对登录用户尚未识别的已保存服务器执行,匿名连接不受影响。
- 检测在 Shell 就绪后异步运行,不阻塞终端连接;失败不会中断 SSH 会话。
- 自动执行的是只读系统信息命令,可能出现在目标服务器 SSH 审计日志中。

## 验证

- `pnpm run verify`
- Worker 与前端类型检查通过
- 33 个测试文件、495 个单元与集成测试通过
- 生产前端构建通过
- 31 个 Chromium E2E 与无障碍回归测试通过

---------

Co-authored-by: vonl1 <911959129@qq.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-08-03 21:49:29 +08:00
TanXinandTanXin 1a91050ef1 release: 发布 v1.5.2 响应式一致性修复版本 (#62)
## 变更说明

发布 CloudSSH v1.5.2,修复 v1.5.1 中 AI 助手按钮语义和响应式断点不一致的问题。

## 修复内容

### AI 助手按钮语义

- 将 AI 助手关闭按钮的提示统一为“返回终端”
- 统一按钮可见文案、工具提示和无障碍语义
- 英文环境对应显示为 `Back to terminal`
- 保持桌面端和移动端原有关闭面板行为不变

### 响应式断点

- 将 CSS 移动端断点从 `max-width: 768px` 调整为 `max-width: 767px`
- 与 JavaScript 中 `< 768` 的设备判断保持一致
- 768px 精细指针设备统一使用桌面布局和每页 9 张卡片
- 768px 触屏粗指针设备继续使用平板布局和每页 6 张卡片
- 避免恰好 768px 时布局样式与分页逻辑不一致

## 测试完善

- 增加 AI 助手“返回终端”按钮提示文案回归断言
- 增加 768px 精细指针设备布局与分页边界测试
- 重新生成并验证生产环境内联前端文件

## 验证结果

- Worker 与前端 TypeScript 类型检查通过
- 31 个测试文件、471 项单元测试全部通过
- 30 项 Chromium E2E 与无障碍回归测试全部通过
- 生产前端构建通过
- `git diff --check` 通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-08-03 12:35:40 +08:00
TanXinandTanXin 0b66a64391 release: v1.5.1 — 完善移动端布局与终端体验 (#61)
## 变更说明

发布 CloudSSH v1.5.1,重点完善移动端用户空间、服务器列表、终端显示与 AI 助手交互体验。

## 主要改动

### 响应式分页

- 手机端每页展示 3 张服务器卡片
- 触屏平板每页展示 6 张服务器卡片
- 桌面端每页展示 9 张服务器卡片
- 视口跨越设备断点后自动重算分页

### 移动端用户空间

- 保持顶部导航栏单行显示
- 将次要操作收纳到更多菜单
- 优化服务器卡片、页脚及长文本溢出处理
- 优化服务器和 AI 配置弹窗的窄屏、安全区及内部滚动表现

### 移动端终端

- 手机、触屏平板和桌面端分别使用 12px、13px、14px 终端字号
- 禁止移动浏览器自动放大 xterm 文本
- 视口大小或屏幕方向变化后重新适配终端行列数
- 调整终端快捷工具栏,使常用操作在移动端更容易访问

### AI 助手交互

- 避免移动端助手标题栏被应用顶部导航遮挡
- 新增明确的“返回终端”按钮
- 保留桌面端原有的关闭操作

### 版本与文档

- 更新项目版本号至 `1.5.1`
- 补充 v1.5.1 更新日志

## 修复的问题

- 修复移动端终端字符过大、可显示列数过少及输出严重换行的问题
- 修复进入 AI 助手后无法返回终端的问题
- 修复长服务器名称、主机名或用户名可能撑破移动端布局的问题
- 修复 Google 图标字体加载失败时图标名称可能影响页面布局的问题

## 验证结果

- Worker 与前端 TypeScript 类型检查通过
- 31 个测试文件、471 项单元测试全部通过
- 生产构建通过
- 29 项 Chromium E2E 与无障碍回归测试全部通过

Co-authored-by: TanXin <tanxin@example.com>
2026-08-03 12:11:24 +08:00
TanXin 92353dd054 release: v1.5.0 — 优化移动端终端体验 (#60)
## 发布内容

- 针对手机和平板优化动态视口、软键盘、安全区和触摸交互
- 新增移动端终端快捷工具栏、一次性 Ctrl/Alt、常用功能键与剪贴板操作
- 新增用户主动触发的全屏横屏入口,并完善 Agent/SFTP 移动端布局
- 修复 iOS 中文输入法延迟字符可能漏发,以及旋转、全屏后终端尺寸未及时适配的问题
- 明确移动端定位为临时操作和应急访问;长期、高频或复杂任务仍推荐桌面端
- 将项目版本升级至 `1.5.0` 并更新 CHANGELOG 与中英文 README

## 兼容性

- 不修改 SSH、SFTP、WebSocket、认证、Worker 路由或 Durable Objects 协议
- 桌面端布局、鼠标选区自动复制和右键粘贴行为保持不变
- 移动端方向锁定仅由用户主动触发,浏览器不支持时提示手动旋转

## 验证

- Worker 与前端 TypeScript 类型检查通过
- 31 个测试文件、469 项单元与集成测试通过
- 前端生产构建及内联产物生成成功
- 23 项 Chromium E2E 与无障碍测试通过
2026-08-02 15:32:22 +08:00
TanXin 6fdb12a620 release: v1.4.3 — 完善上游同步结果反馈 (#58)
## 发布内容

- 解析 GitHub Fork 同步接口返回结果,明确区分无需同步、fast-forward、merge 和失败状态
- 在 Actions 日志及执行摘要中提供简洁中文反馈
- 冲突或权限异常时保留失败退出码,并输出可操作的诊断建议
- 减少同步结果中的 Emoji 图标,避免原始 JSON 带来的歧义
- 将项目版本升级至 `1.4.3` 并更新 CHANGELOG

## 验证

- 工作流 YAML 和内嵌 Bash 语法检查通过
- Worker 与前端 TypeScript 类型检查通过
- 30 个测试文件、463 项单元与集成测试通过
- 前端生产构建及内联产物生成成功
- 19 项 Chromium E2E 与无障碍测试通过
2026-08-02 09:35:04 +08:00
TanXin bba10313f0 release: v1.4.2 — 添加 Fork 上游自动同步 (#57)
## 发布内容

- 新增默认关闭的 Fork 上游自动同步 GitHub Actions 工作流
- 支持通过 `AUTO_SYNC_UPSTREAM=true` 开启每日定时同步,也可手动触发
- 使用 GitHub Fork 同步接口更新 `main`,无需 PAT,冲突时不强制覆盖
- 同步成功后由 Cloudflare Git 集成自动构建部署,无需额外部署开关
- 更新中英文 README,补充开启步骤、部署条件及冲突处理说明
- 将项目版本升级至 `1.4.2` 并更新 CHANGELOG

## 验证

- Worker 与前端 TypeScript 类型检查通过
- 30 个测试文件、463 项单元与集成测试通过
- 前端生产构建及内联产物生成成功
- 19 项 Chromium E2E 与无障碍测试通过
2026-08-02 00:05:44 +08:00
4555f3a878 release: v1.4.1 — 完善终端粘贴与 IP 隐私展示 (#56)
## 发布内容

- 修复 Vim 右键粘贴多行文本时的自动缩进、注释续行和异常空行问题
- 改用 xterm.js 原生粘贴管线,仅在远端启用时发送 bracketed paste 控制序列
- 在服务器列表和连接状态栏加入 IPv4/IPv6 隐私掩码及完整地址快捷复制
- 完善键盘操作、焦点样式、复制失败反馈和共享 IP 校验逻辑
- 更新中英文 README、架构说明、贡献者信息及 CHANGELOG

## 验证

- `pnpm run verify`
- 463 个单元与集成测试通过
- 19 个 Chromium E2E 与无障碍测试通过
- 前端生产构建及内联产物生成成功

---------

Co-authored-by: vonl1 <911959129@qq.com>
Co-authored-by: Claude 4.7 <noreply@anthropic.com>
2026-08-01 21:20:17 +08:00
TanXin e5fcddce7f release: v1.4.0 — 升级 Theme V2 与在线主题编辑体验 (#52)
升级 Theme V2 界面风格系统、GitHub Pages 在线主题编辑器与登录账号主题同步,并补齐主题数据安全校验、首屏性能优化和相关回归测试。

完整变更请参阅 CHANGELOG.md。
2026-07-30 15:11:09 +08:00
TanXinandTanXin 3f38fe35dc release: v1.3.4 — 完善连接与 SFTP 交互及主题体验 (#50)
## 版本概览

发布 CloudSSH v1.3.4,重点修复连接凭据一致性、SFTP 同名文件覆盖、AI 配置首次打开和 Turnstile
浅色主题适配,并同步完善项目文档与原作者署名。

## 主要变更

- 修复切换认证方式后沿用旧凭据、私钥输入框 Enter 误提交和端口校验不严格的问题
- IPinfo 查询增加超时,并仅在主机变化且需要自动推断区域时调用
- 完善 SFTP 中英文文案;上传同名文件前明确确认,后端阻止未经确认的覆盖
- 修复 AI 配置弹窗首次点击仍隐藏、需要再次点击才能显示的问题
- Turnstile 根据应用明暗模式渲染,Standard Light 使用浅色组件
- 更新 README、AGENTS、测试文档和 NOTICE,使实现说明、迁移方式、安全边界及原作者署名保持准确
- 更新版本号和 CHANGELOG 至 v1.3.4

## 验证

- Worker 与前端 TypeScript 类型检查通过
- Vitest:29 个测试文件、442 项测试通过
- 生产前端构建与内联产物生成通过
- Playwright:10 项 Chromium E2E/无障碍测试通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-29 17:36:40 +08:00
86a415a4c6 release: v1.3.3 — 完善终端复制兼容性与贡献者说明 (#49)
## 版本概览

发布 CloudSSH v1.3.3,重点完善 Windows/Linux 浏览器环境下的终端文本复制体验,并补充项目贡献者说明。

## 主要变更

- 鼠标正常结束终端文本选区时自动复制到系统剪贴板,并提供中英文反馈
- Clipboard API 不可用或被拒绝时回退到 `document.execCommand('copy')`
- 终端选区与 Agent 代码块复制统一复用公共剪贴板模块
- 修复回退复制后终端焦点丢失、复制失败误报成功、`pointercancel` 意外触发复制的问题
- 新增剪贴板单元测试及 Chromium 自动复制、回退和焦点恢复回归
- 中英文 README 新增贡献者名单和完整贡献记录入口
- 更新版本号和 CHANGELOG 至 v1.3.3

## 验证

- Worker 与前端 TypeScript 类型检查通过
- Vitest:27 个测试文件、424 项测试通过
- 生产前端构建与内联产物生成通过
- Playwright:6 项 Chromium E2E/无障碍测试通过

---------

Co-authored-by: vonl1 <911959129@qq.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: TanXin <tanxin@example.com>
2026-07-29 11:47:14 +08:00
TanXinandTanXin 2a93044850 release: v1.3.2 — 完善质量门禁、服务器与 SFTP 管理及 Agent 上下文 (#46)
## 版本概述

发布 CloudSSH v1.3.2。

本版本建立完整的发布前质量门禁,增强服务器标签与分页、SFTP 多选批处理,并将终端选区询问 Agent
调整为可预览、可移除的上下文附件,避免未经用户补充问题就直接发送。

## 主要变更

### 质量门禁与可复现构建

- `test` 与 `main` 部署前执行冻结锁文件安装、Worker/前端类型检查、单元与集成测试、生产构建、Playwright 浏览器
E2E 和 axe 无障碍回归。
- 构建流程不再隐式安装依赖,并校验唯一 JS/CSS 入口,保证 Worker 内联产物可复现。
- 新增服务器分页、Agent 上下文及无障碍浏览器回归。

### 服务器管理

- 服务器配置支持最多 10 个规范化标签,并持久化到 UserDBDO SQLite。
- 服务器列表支持标签筛选,搜索与标签变化时自动回到第一页。
- 每页固定展示 9 张服务器卡片。

### SFTP 文件管理

- 支持普通单选、`Cmd/Ctrl` 切换选择、`Shift` 连选及全选。
- 支持批量文件下载和批量删除。
- 批量下载复用顺序下载队列,批量删除等待全部结果后统一刷新。

### Agent 终端选区上下文

- “询问 AI 助手”不再自动发送终端选区。
- 选区作为当前标签独立的上下文附件加入输入区,支持来源和大小展示、展开预览、替换及移除。
- 用户必须补充问题后才能发送;选区被明确标记为非可信分析数据,不代表操作授权,也不能覆盖用户指令。
- 补充成功发送清理、失败保留、会话隔离和无障碍回归。

### 文档与版本

- 根版本号升级至 `1.3.2`。
- 按 Keep a Changelog 规范更新 `CHANGELOG.md`。
- 同步更新中英文 README、测试说明和项目维护索引。

## 验证结果

- `pnpm run typecheck`:通过。
- `pnpm test`:26 个测试文件、421 个测试用例全部通过。
- `pnpm run build:frontend`:生产前端构建及 Worker HTML 内联成功。
- `pnpm run test:e2e`:4 项 Chromium E2E 与 axe 无障碍回归全部通过。
- `git diff --check`:通过。

## 备注

- 构建仍存在原有的 JavaScript 单包体积和动态/静态导入提示,不影响本次发布。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-28 13:57:03 +08:00
TanXinandTanXin 681aac551a release: v1.3.1 — 本地构建 Tailwind 并稳定安全回归测试 (#45)
## 版本概述

发布 CloudSSH v1.3.1。

本版本重点完善安全回归测试的确定性,并将生产环境 Tailwind CSS 从运行时 CDN
迁移为本地构建,提升页面加载稳定性、供应链安全性和自部署一致性。

## 主要变更

### 安全验证与回归测试

- 修复 `cf_verified` 篡改测试可能未真正改变签名的问题,避免用例偶发进入后续连接流程。
- 改为根据原字符生成必然不同的签名,并显式断言篡改结果。
- 收紧验证 Token 的输入格式:
  - 必须为严格的两段式结构。
  - 时间戳必须为安全整数。
  - HMAC 签名必须为 64 位十六进制字符串。
- 补充签名长度错误、非十六进制和缺少分隔符等畸形 Token 回归用例。
- 保持安全降级行为:无效 Token 稳定回退到 Turnstile 验证。

### Tailwind CSS 本地构建

- 移除生产页面中的 `cdn.tailwindcss.com` 运行时脚本和内联 Tailwind 配置。
- 使用 Tailwind CSS 3、PostCSS 和 Autoprefixer 接入 Vite 本地构建。
- 保留 `@tailwindcss/forms` 和 `@tailwindcss/container-queries` 插件。
- 将现有主题变量、颜色映射和字体配置迁移至独立 Tailwind 配置文件。
- 使用基于配置文件目录的绝对路径,确保从仓库根目录或前端目录执行构建时结果一致。
- 新增生产产物回归测试,验证:
  - 主题工具类正确生成。
  - 响应式工具类正确生成。
  - 表单插件样式正确生成。
  - 生产 HTML 不再包含 Tailwind CDN 和运行时配置。

### 文档与版本

- 更新中英文 README 中的前端技术栈说明。
- 更新项目开发规范和 Tailwind 构建注意事项。
- 项目版本号升级至 `1.3.1`。
- 按 Keep a Changelog 规范更新 `CHANGELOG.md`。

## 影响

- 消除 Tailwind 运行时 CDN 依赖,减少外部请求和浏览器端运行时编译。
- 提升弱网、跨境网络和自部署环境中的页面加载稳定性。
- 降低生产环境供应链风险,并为后续实施严格 CSP 提供基础。
- 消除安全测试假阳性,使畸形验证 Token 能够稳定、可预测地被拒绝。

## 验证结果

- `pnpm test`:21 个测试文件、404 个测试用例全部通过。
- `pnpm run build:frontend`:生产前端构建及 Worker HTML 内联成功。
- 浏览器生产页面验证:本地 CSS、主题色、字体、表单和布局正常生效。
- 页面不再加载 `cdn.tailwindcss.com`,不存在运行时 `tailwind.config`。
- `git diff --check`:通过。

## 备注

- 构建仍存在原有的 JavaScript 单包体积和动态/静态导入提示,不影响本次发布。
- Google Fonts、Material Symbols 和 Cloudflare Turnstile 属于独立外部资源,本次未调整。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-27 17:55:20 +08:00
TanXinandTanXin f0b3bbb035 release: v1.3.0 — 增强 Agent 交互、主题系统与服务器体验 (#44)
## 版本概述

发布 CloudSSH v1.3.0。

本版本重点完善 AI Agent 与终端之间的协作体验,增强危险操作确认安全性,并补充服务器搜索、网络质量提示、Standard
深浅主题及在线主题编辑器同步。

## 主要变更

### Agent 与终端交互

- 完善 Agent 危险操作确认框:
  - 使用无障碍 `alertdialog` 语义。
  - 默认聚焦拒绝按钮。
  - 支持 `Escape` 快速拒绝和对话框内焦点限制。
  - 关闭 Agent、销毁会话或切换标签时自动拒绝待确认操作。
- 用户选择终端内容后,在选区末端显示“询问 AI 助手”入口。
- 点击入口后直接将完整选区发送给当前会话的 Agent。
- Agent 所有代码块新增一键复制功能。
- 明确标注的安全 Shell 单行命令可填入当前活动终端,但不会自动执行。
- 非 Shell、多行或包含控制字符的代码不会提供终端填入入口。

### 服务器与网络体验

- 服务器列表新增前端即时搜索。
- 支持按服务器名称、主机地址和用户名进行不区分大小写的过滤。
- CF 物理延迟和 WebSocket RTT 新增绿、黄、红三色网络质量提示。
- 网络质量仅通过颜色表达,不增加“良好/一般/较差”等额外文字。

### 主题系统

- 新增 Standard Dark 和 Standard Light 两款常用主题。
- 将 CSS 变量、终端调色板和自定义主题同步逻辑收敛至统一主题模块。
- 保留 Cyberpunk、Glacier 和 Gruvbox,当前共提供五款内置主题。

### 在线主题编辑器

- 预设主题选择改为下拉框,修复主题展示不完整和部分主题无法选择的问题。
- 同步当前项目的服务器搜索、区域选择、网络质量提示、终端选区入口和 Agent 代码块操作 UI。
- 补齐 Standard Dark/Light 主题预览。

### 发布文档

- 项目版本号升级至 `1.3.0`。
- 更新 `CHANGELOG.md`。
- 同步更新中英文 README。

## 验证结果

- `pnpm test`:21 个测试文件、400 个测试用例全部通过。
- `pnpm run build:frontend`:生产前端构建及 Worker HTML 内联成功。
- `git diff --check`:通过。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-27 13:46:33 +08:00
TanXinandTanXin 18e5624d43 release: v1.2.1 — 同步主题编辑器 UI 并完善 SFTP 国际化 (#42)
## 变更概述

本次更新发布 v1.2.1,主要同步在线主题编辑器与主项目的最新 UI 和国际化能力,并修复 SFTP 右键菜单在中文模式下仍显示英文的问题。

## 主要变更

### 主题编辑器

- 同步主项目最新 UI 风格。
- 补全登录页、服务器列表、终端、SFTP 和 AI Agent 的主题预览。
- 支持简体中文与英文切换。
- 复用主项目语言偏好,并支持 URL 参数和浏览器语言自动解析。
- 使用统一的非阻塞 Toast 操作反馈。
- 同步最新主题变量和操作标签风格。

### SFTP 国际化修复

- 修复中文模式下右键菜单仍显示 `Open`、`Download`、`Rename`、`Delete` 的问题。
- 为右键菜单补充完整的中英文词典。
- 语言变化时主动关闭已打开的菜单,避免保留切换前的语言。
- 增加词典完整性和防止菜单文案再次硬编码的回归测试。

### 版本发布

- 项目版本升级至 `v1.2.1`。
- 按 Keep a Changelog 规范更新 `CHANGELOG.md`。

## 验证情况

- [x] 375 项自动化测试全部通过
- [x] TypeScript 编译通过
- [x] Vite 生产构建通过
- [x] Worker 内联前端产物生成成功
- [x] 中英文词典键保持一致
- [x] SFTP 右键菜单国际化回归测试通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-24 17:36:21 +08:00
TanXinandTanXin d157ba7963 release: v1.2.0 — 添加中英文国际化支持并完善终端双语体验 (#40)
## 概述

本 PR 发布 CloudSSH v1.2.0,主要完成简体中文与英文国际化适配,并完善终端、SFTP 文件管理器及 SSH
状态消息在不同语言下的显示体验。

## 主要变更

- 新增简体中文与英文界面切换
- 支持语言偏好持久化及 URL 参数覆盖
- 将语言切换入口改为醒目的目标语言按钮
- 优化匿名模式下语言按钮的位置
- 在终端会话页面隐藏语言切换入口,避免会话过程中切换语言造成状态不一致
- 补充匿名连接、服务器管理、终端、SFTP、AI 设置、Agent、弹窗及操作反馈的双语文案
- Agent 根据当前界面语言生成对应语言的回复

## 体验优化

- 精简 SFTP 英文工具栏文案
- 统一使用 `UPLOAD`、`MKDIR` 等紧凑的大写操作标签
- SSH 状态消息改用结构化事件码及参数化翻译
- 保留对旧服务端原始状态消息的兼容回退

## 问题修复

- 修复中文终端连接横幅因 CJK 字符双列宽导致边框错位、无法闭合的问题
- 修复英文模式下认证、主机密钥、通道及会话状态仍显示中文的问题

## 发布信息

- 版本号更新至 `1.2.0`
- 更新 `CHANGELOG.md`,记录本次国际化功能及相关修复

## 验证结果

- 370 项自动化测试全部通过
- 前后端 TypeScript 类型检查通过
- Vite 生产构建通过

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-22 14:15:27 +08:00
TanXinandTanXin 1e06f3d17b release: v1.1.0 — 修复 Vim 终端交互并统一前端弹窗体验 (#39)
## 概述

发布 CloudSSH v1.1.0。本版本修复了生产环境中 Vim/Vi
无法正常交互的问题,并将项目中的浏览器原生弹窗替换为统一的主题化反馈组件。

## 主要变更

### 修复 Vim/Vi 无法交互

- 修复进入 Vim 后无法切换插入模式、无法退出命令模式、键盘输入无响应的问题。
- 根因是 Vite/esbuild 对 xterm.js 6.0.0 预压缩 ESM 再次执行语法压缩时,错误删除了
`InputHandler.requestMode` 中的局部变量声明。
- Vim 发送 DECRQM 终端模式查询后触发 `ReferenceError`,导致终端输入链中断。
- 禁用会触发错误转换的 esbuild `minifySyntax` 阶段,同时保留其他压缩能力。
- 新增生产构建回归测试,确保 xterm.js `requestMode` 的局部变量声明不会再次丢失。

相关问题:https://github.com/xtermjs/xterm.js/issues/5800

### 统一前端弹窗与操作反馈

- 将连接表单、服务器管理、主题导入和 SFTP 文件操作中的原生 `alert`、`confirm`、`prompt` 全部替换。
- 普通提示和错误信息使用非阻塞 Toast。
- 删除等危险操作使用主题化确认框,并默认聚焦安全的取消选项。
- 重命名、新建目录等操作使用带校验的输入对话框。
- 支持 `Escape` 取消、`Enter` 提交、焦点恢复、ARIA 语义、移动端布局和减少动画。
- 完善 SFTP 文件名校验,拒绝空名称、`.`、`..`、路径分隔符和空字符。
- 新增回归测试,防止重新引入浏览器原生阻塞弹窗。

### 版本发布

- 版本号由 `1.0.9` 更新至 `1.1.0`。
- 按 Keep a Changelog 规范补充 v1.1.0 更新日志。
- 重新生成 Worker 使用的内联前端生产产物。

## 验证结果

- [x] Vim/Vi 实际终端交互测试通过
- [x] Toast、确认框和输入框浏览器交互测试通过
- [x] Escape、Enter 和焦点恢复测试通过
- [x] 移动端弹窗布局测试通过
- [x] 前端 TypeScript 检查通过
- [x] 15 个测试文件、356 项测试全部通过
- [x] 正式生产构建通过
- [x] Cloudflare 测试环境部署成功

## 兼容性与影响

- 不涉及 API、数据库结构或 Durable Object 迁移。
- 不影响现有 SSH、SFTP 和 AI Agent 协议。
- 仅关闭 esbuild 的语法压缩阶段,其他压缩能力保持启用。
- 可直接合并至 `main`,由现有 CI 自动部署生产环境。

---------

Co-authored-by: TanXin <tanxin@example.com>
2026-07-20 13:26:10 +08:00