## 版本概述 发布 **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)
CloudSSH 测试套件
本目录包含 CloudSSH 的单元测试、协议集成测试、构建回归和浏览器 E2E。测试框架以 Vitest 和 Playwright 为主。
目录结构
tests/
├── build/ # 生产构建、可复现性和原生弹窗回归
├── e2e/ # Chromium 浏览器交互与 axe 无障碍检查
├── ssh/ # SSH 算法、认证、加密、KEX、Packet 与测试密钥夹具
├── worker/ # Worker 路由、安全、DNS、UserDB 与标签测试
├── agent-code-actions.test.ts # Agent 代码块复制/填入规则
├── agent-terminal-selection.test.ts # 终端选区附件和非授权安全边界
├── api-errors.test.ts # API 错误信息边界与状态码
├── auth-challenge-dialog.test.ts # RFC 4256 认证挑战对话框交互
├── clipboard.test.ts # Clipboard API 与旧版复制回退
├── editor-content.test.ts # 在线编辑内容解码、BOM/换行符与嗅探
├── frontend-ux.test.ts # 前端关键交互源码回归(标签栏/状态栏渲染等)
├── host-display.test.ts # IPv4/IPv6 掩码与完整地址复制
├── i18n.test.ts # 中英文词条和语言解析
├── known-hosts.test.ts # 已知主机指纹 TOFU 信任与变更流程
├── mobile-input.test.ts # iOS IME diff 与一次性修饰键帮助函数
├── sftp-dialogs.test.ts # SFTP 新建/重命名/删除弹窗与名称校验
├── sftp-helpers.test.ts # SFTP 面包屑解析、多维排序与格式化
├── sftp-panel.test.ts # SFTP 面包屑与路径状态回归
├── sftp-selection.test.ts # SFTP 单选、多选、连选和全选模型
├── sftp-transfer.test.ts # SFTP 传输控制器与异步原语
├── share-session.test.ts # 分享会话确认/领取幂等与页面状态
├── snippet-local-store.test.ts # 匿名命令片段 localStorage 存储与限额
├── snippet-manager.test.ts # 命令片段搜索过滤与一键复制交互
├── snippet-schema.test.ts # 片段名称/命令/数量校验与规范化
├── snippet-variables.test.ts # 命令片段 {{var}} 参数占位符提取与替换
├── terminal-shortcuts.test.ts # 终端快捷键(Cmd+F 搜索、Cmd+K 清屏)
├── terminal-status.test.ts # SSH 状态事件翻译
├── terminal-text.test.ts # 终端文本处理
├── theme.test.ts # 内置/自定义主题
├── types.test.ts # 共享类型和终端尺寸边界
└── README.md
tests/ssh/fixtures/ 中的私钥只用于公开的协议测试,不得用于生产服务器或真实账号。
运行命令
# 运行全部 Vitest 单元与集成测试
pnpm test
# 运行指定测试文件
pnpm test tests/ssh/auth.test.ts
# 生成覆盖率报告(输出到 coverage/)
pnpm run test:coverage
# 监听模式
pnpm test --watch
# 安装并运行 Chromium E2E 与 axe 无障碍检查
pnpm exec playwright install chromium
pnpm run test:e2e
# 类型检查、测试、可复现构建和 E2E 完整门禁
pnpm run verify
测试类型检查:
pnpm run typecheck的 worker 阶段会依次执行tsc --noEmit(src)、tsc -p tests/tsconfig.worker.json(tests/worker|ssh|build, workers-types 环境)与tsc -p tests/tsconfig.frontend.json(tests 根目录 *.test.ts + e2e, DOM 环境)。两个测试配置分开的原因:@cloudflare/workers-types声明的基础 DOM 接口 (如 Element.append)与 DOM lib 合并冲突,不能在同一项目里同时加载。
当前覆盖范围
SSH 协议
- 算法协商列表与兼容性
- 密码认证
- Ed25519、ECDSA P-256/P-384/P-521、RSA-SHA2 私钥认证
- OpenSSH 私钥解析、DER/SSH 签名转换
- AES-GCM/CTR、HMAC、Packet、KEX 辅助和二进制工具
Worker 与安全边界
- Turnstile 验证 token 的结构、过期时间和 HMAC
- Origin 检查、端口范围、连接令牌和错误信息边界
- IPv4/IPv6 保留地址、DoH 解析与 DNS rebinding 防护
- Agent 危险命令拦截、确认规则和 SSRF URL 校验
- 主机密钥信任:首见指纹确认、更换指纹阻断与路由作用域隔离
- 键盘交互认证、OS 检测、跳板链、SFTP 上传冲突、分享会话策略
- UserDB 服务器标签/片段迁移、规范化、序列化、更新与隔离
前端与构建
- 服务器搜索、标签筛选、配置一键克隆(Duplicate Server)和响应式分页(桌面 9 / 平板 6 / 移动 3)
- 终端多标签:双击内联重命名(空值还原)、右键上下文菜单(重命名/克隆会话/关闭其他/关闭)与 document click 防泄漏
- 终端快捷键适配:macOS
Cmd+F搜索、Cmd+K/Ctrl+Shift+K清屏且不干扰 Shell 原生Ctrl+K - 命令片段库:实时模糊搜索、一键复制到剪贴板与
{{var}}动态参数占位符弹窗录入 - SFTP 生产力:路径面包屑分级导航、表头多维排序(文件名/大小/时间)、新建 0 字节文件与 CodeMirror 在线编辑联动
- SFTP 单选、Cmd/Ctrl 多选、Shift 连选和全选
- Agent 终端选区附件、问题组合、快捷诊断 Prompt 气泡(Chips)和非授权安全边界
- 终端选区自动复制、指针取消和旧版复制回退
- i18n、Theme V3 主题(背景/效果/版式钳制、对比度与 schema)、终端状态/文本、已知主机与片段本地存储
- 构建可复现性、xterm 生产构建兼容和原生弹窗禁用
浏览器 E2E
- 匿名连接表单 axe 检查
- 服务器弹窗的基本对话框语义、初始焦点和 Escape 关闭
- 服务器标签筛选、分页与配置快速克隆
- 多标签操作:双击内联重命名、空值与失焦恢复、右键菜单项与外部点击关闭
- Agent 终端选区附件与快捷诊断 Prompt 气泡点击填入
- 终端选区复制与焦点恢复
- 认证挑战对话框、iOS 输入法、移动端后台连接恢复与分享会话领取
- SFTP 覆盖确认、路径面包屑、表头排序、新建文件、主题样式与 UI 回归
当前限制
- Playwright 的完整界面与无障碍回归主要运行 Chromium;认证挑战、iOS 输入法和移动端后台连接恢复另在 WebKit 设备项目中执行。Firefox 尚未纳入当前质量门禁。
- 浏览器 E2E 主要通过 mock API 验证前端行为,尚未连接真实 OpenSSH/Dropbear 和 SFTP 服务。
- SSHSessionDO、SSH 会话状态机、SFTP 数据流和 AgentCore 等运行态模块的覆盖率仍偏低。
- 新增协议状态、WebSocket 消息或安全边界时,应优先补充运行时错误、取消、超时和畸形输入测试,而不仅验证成功路径。