Commit Graph
112 Commits
Author SHA1 Message Date
TanXin 579314b77c Merge pull request #9 from newbietan/test
feat: 双环境部署支持、SSH 协议稳定性修复及文档更新
2026-06-24 12:27:58 +08:00
TanXin eb99a8eef1 fix: 移除 env.test 中多余的 workers_dev 配置,修复首次部署失败 2026-06-24 12:01:20 +08:00
TanXin 59497b88a7 feat: 支持 production/test 双环境部署
- wrangler.toml: 新增 [env.test] 环境配置,移除硬编码自定义域名
- package.json: 新增 deploy:test 脚本
- .github/workflows/deploy.yml: 支持 test/main 双分支部署
- README/README_en: 更新部署流程和本地开发说明
2026-06-24 11:47:22 +08:00
TanXin 6b63900b4a refactor: 拆分断开连接逻辑,避免 onclose 回调重入问题
- 将 closeTerminalOrReturn 拆分为 showOfflineUI,仅负责 UI 清理
- onSessionClosed 回调不再调用 disconnect,避免在 onclose 中重入
- 手动断开按钮先 disconnect 再 showOfflineUI
- 使用可选链替代部分非空断言,提高安全性
2026-06-24 10:56:43 +08:00
David xu 0163f46af7 feat: exit命令和手动关闭按钮使用相同逻辑 2026-06-24 03:36:52 +08:00
TanXin 6d02dad079 feat: 添加调试模式支持,可通过 DEBUG_MODE 环境变量控制日志输出到前端 2026-06-23 22:59:56 +08:00
TanXin 15dba9acf5 refactor: 移除控制台日志输出,统一使用前端页面日志 2026-06-23 21:51:00 +08:00
TanXin 9b483f4601 chore: 关闭 SSH 会话调试日志输出 2026-06-23 21:47:03 +08:00
TanXin 8db135b3b5 Merge branch 'pr-6' into test
# Conflicts:
#	frontend/src/terminal.ts
#	src/worker/durable-object.ts
#	src/worker/html.ts
#	src/worker/ssh-session.ts
2026-06-23 21:35:59 +08:00
David xu e30e1e6707 fix: 修复后端固定PTY尺寸导致输出被清空 2026-06-23 20:33:35 +08:00
TanXin 06a79a33c2 feat: SSH 协议增强、文件传输优化及多标签页支持
SSH 协议层:
- 新增 Curve25519 密钥交换算法支持
- 新增 AES-CTR 加密模式 (aes256-ctr, aes192-ctr, aes128-ctr)
- 新增 HMAC 完整性校验 (hmac-sha2-256, hmac-sha2-512, hmac-sha1)
- 优化算法协商和密钥派生流程

前端:
- 文件传输从 Zmodem 迁移到 trzsz,支持拖拽上传和 tmux 兼容
- 新增多标签页 SSH 支持(登录用户可在新标签页打开独立终端)
- 修复 WebSocket 二进制数据处理问题

后端:
- 恢复 Hibernation API 支持长连接
- 兼容 Dropbear 等不发送 shell 确认的 SSH 服务器
- 关闭调试日志

构建:
- 迁移到 pnpm 包管理器
- 添加 GitHub Actions 自动部署
2026-06-23 13:57:11 +08:00
TanXin 9ef1f428d8 fix: 升级 Node.js 至 v22 以兼容最新 pnpm 2026-06-23 13:33:15 +08:00
TanXin b1432173c6 fix: CI 环境使用 pnpm 构建前端 2026-06-23 13:32:13 +08:00
TanXin f14453435e fix: 构建脚本改用 npm 替代 pnpm,修复 CI 环境依赖问题 2026-06-23 13:31:28 +08:00
TanXin cc1af808be ci: 添加 GitHub Actions 自动部署到 Cloudflare Workers 2026-06-23 13:28:31 +08:00
TanXin 0190cdaf0a fix: 修复终端无法显示 shell 输出的问题
- 修复 WebSocket 未设置 binaryType 导致 SSH 二进制数据丢失的 bug
- 回滚 Durable Object 至 Hibernation API,恢复 webSocketMessage/Close/Error 处理
- 启用 sendDebug 调试日志(后续部署前需关闭)
- 新增多标签页 SSH 支持:登录用户可在新标签页打开独立终端
2026-06-23 12:58:33 +08:00
GreenhandTan 118d712ad2 fix: 弃用 Hibernation API 解决 TCP Stream 被意外取消的问题
Cloudflare Durable Object 的 Hibernation API (acceptWebSocket) 会在空闲时休眠 DO,
导致底层的 SSH TCP socket 被意外销毁(报错 Stream was cancelled)。
现切换回原生的 WebSocket API (server.accept()),确保 SSH 连接能够长期保持不被中断。
2026-06-23 08:37:18 +08:00
GreenhandTan cdd145d025 fix: 修复 shell 请求后状态卡在 shell-requested 导致终端无法输入的问题
添加 3 秒超时兜底机制,当服务器未发送 CHANNEL_SUCCESS 或 CHANNEL_DATA
确认时,自动进入 ready 状态,确保终端可正常使用。
2026-06-23 08:19:19 +08:00
TanXin 4b6af5d4b4 fix: 修复 Dropbear 等服务器不发送 shell 确认导致终端卡住的问题
- 某些 SSH 服务器(如 Dropbear)不会为 shell 请求发送 CHANNEL_SUCCESS,
  而是直接发送 shell 输出数据(CHANNEL_DATA)
- 在 shell-requested 状态下收到 CHANNEL_DATA 时自动转为 ready 状态
- 同时修复 CHANNEL_FAILURE 未处理 shell-requested 状态的问题
2026-06-23 08:10:30 +08:00
TanXin f2d4850c6e fix: 修复终端卡在 shell 已就绪的问题
- 添加 shell-requested 中间状态,区分 PTY 确认和 shell 确认
- 修复状态机在 shell 请求被服务器确认前就进入 ready 状态的问题
- 确保只有在 shell 请求被确认后才处理用户输入
2026-06-23 08:01:33 +08:00
TanXin 00861d0219 chore: 优化部署配置,提升新用户体验
- wrangler.toml: 启用 workers_dev 默认域名,新用户无需配置自定义域名即可部署
- wrangler.toml: 添加构建监视路径配置,仅源代码变动时触发重新构建
- wrangler.toml: 注释掉自定义域名路由,改为在 Dashboard 中手动绑定
- 新增 .cfignore 文件,排除文档、图片等文件变动触发构建
- 更新中英文 README 文档,简化部署流程说明
2026-06-23 07:48:06 +08:00
TanXin 3dd43eb60d docs: 更新 README 文档,反映项目最新架构和功能特性
- 更新安全可靠部分:添加 Curve25519 密钥交换、多算法主机密钥验证、凭据零暴露等特性
- 更新核心特性部分:添加纯 TypeScript SSH-2.0 实现、多算法密钥交换、GitHub OAuth 集成等
- 重构架构说明:添加系统架构图、核心组件表、SSH 协议实现详情、数据流说明
- 更新开发说明:添加项目结构、本地开发指南、技术栈表格
- 同步更新英文版 README_en.md
2026-06-23 07:34:35 +08:00
TanXin 53531c5fb9 fix: 修复 Cloudflare 构建失败问题
- 将 scripts/build-html.js 中的 npm 命令改为 pnpm,统一包管理器
- 移除 package.json 中 wrangler 命令的 npx 前缀
- 更新中英文 README 文档中的 Cloudflare 构建命令为 pnpm run build:frontend
- 解决因 Cloudflare 环境已预装 pnpm 导致重复安装的 EEXIST 错误
2026-06-23 07:28:00 +08:00
GreenhandTan a702b266b8 chore: update pnpm-lock.yaml to resolve Cloudflare build error 2026-06-23 07:18:00 +08:00
GreenhandTan 079772ce3a fix: resolve pnpm workspace package missing error for Cloudflare build 2026-06-23 07:13:57 +08:00
GreenhandTan fcd06908c5 chore: 拥抱 pnpm 架构迁移及补充 PR 遗漏的 Bug 修复
1. 移除过期的 package-lock.json 文件,全面转向 pnpm workspace。2. 更新中英文文档中的开发与部署命令适配 pnpm。3. 补充由于解决合并冲突时被意外覆盖的前端代码,修复断线重连后导致的键盘双倍输入 bug。
2026-06-23 07:05:52 +08:00
GreenhandTan 9565e53e5a Merge pull request #4 and resolve conflicts
# Conflicts:
#	README.md
#	README_en.md
#	frontend/package-lock.json
#	frontend/src/terminal.ts
2026-06-23 06:57:22 +08:00
GreenhandTan 22e33c99da feat(frontend): 将文件传输从 zmodem 迁移到 trzsz,支持拖拽上传和 tmux 兼容
1. 移除过期的 zmodem.js 依赖及补丁文件。2. 引入 trzsz.js 并使用 TrzszFilter 替换原有的 ZmodemHandler。3. 添加终端拖拽文件上传支持。4. 更新中英文 README 文档以反映 trzsz 带来的新特性。
2026-06-23 06:40:05 +08:00
David xu 87bb7007b3 replace: legacy lrzsz with trzsz 2026-06-23 05:16:11 +08:00
David xu 664723d8d3 fix: dropbear support & after reconnect input double for one keydown & use pnpm 2026-06-23 04:40:23 +08:00
TanXin 0c16e3ca93 fix: 修复 sz 下载文件内容为数字字符串的问题
zmodem.js 的 input 事件回调接收的是 number[] 类型,
直接传给 Blob 构造函数会被转成数字字符串而非二进制数据。
在回调中显式转换为 Uint8Array 再保存。
2026-06-22 16:39:25 +08:00
TanXin 91b5f32bfb fix: 修复 Zmodem 文件传输数据损坏问题
zmodem.js 的 send_files 函数中 reader.onload 回调存在 bug,
错误地将 xfer 对象作为 Uint8Array 的 byteOffset 参数传入,
导致上传/下载的文件内容变成数字数组的字符串表示。

使用 patch-package 修补 zmodem.js 依赖,正确使用 xfer.get_offset() 获取偏移量。
2026-06-22 16:23:48 +08:00
TanXin 54e5e2c356 fix: 修复 sz 下载文件损坏问题
Blob 构造函数需要 Uint8Array 而非 number[],移除错误的 Array.from() 转换
2026-06-22 16:14:44 +08:00
TanXin bdc8d0da17 fix: 修复前端多个问题
- 修复 favicon 未加载:构建脚本未内联 public/favicon.svg
- 修复终端重连残留:断开连接后清空终端内容和状态
- 修复 sz 下载文件损坏:将 Uint8Array 转为普通数组传给 save_to_disk
- 修复 rz 上传失败:input 元素过早移除导致 onchange 无法触发
2026-06-22 16:04:02 +08:00
TanXin 0871b64426 fix(ssh): 修复 IPv6 地址连接失败和重连计数器不递增的问题
- IPv6 地址传入 connect() API 前自动添加方括号包裹,避免冒号被误解析为 host:port 分隔符
- 移除 WebSocket onopen 中的 reconnectAttempts 重置,改为 SSH 认证成功时才重置,修复重连计数始终显示 1/5 的问题
2026-06-21 17:23:51 +08:00
TanXin 4c4476cf5e fix(security): 主机密钥签名验证失败时阻断连接,修复sendMutex乱序,移除本地速率限制,消除any类型
- 主机密钥签名验证失败/异常/不支持算法时默认阻断连接(STRICT_HOST_KEY_VERIFY=false 可跳过)
- 修复 sendMutex 的 .catch(() => {}) 导致后续操作可能乱序的问题
- 移除分布式环境下无效的本地内存速率限制(rateLimitMap)
- 替换 ssh-session.ts 和 user-db.ts 中 18 处 any 类型为具体类型
- 移除未使用的 findCRLF 死代码
- 移除 enableEncryption 中泄露密钥/IV 的调试日志
- connectTokens 增加 MAX_CONNECT_TOKENS=1000 上限防止内存泄漏
2026-06-21 12:43:22 +08:00
TanXin 702a564d9b 更新README技术栈描述:移除React,更新为TypeScript + Vite 2026-06-21 11:43:03 +08:00
TanXin 067dbb6428 更新README License徽章为Apache 2.0 2026-06-21 11:39:35 +08:00
TanXin c7bd10aa77 修复安全漏洞:实现分布式速率限制和HMAC-SHA256令牌签名 2026-06-21 11:35:18 +08:00
TanXin 8a2ab79e36 更新README文档,新增演示图片demo3.png 2026-06-21 11:23:57 +08:00
GreenhandTan aa62391997 fix(ui): 修复匿名断开后点击 GitHub 登录导致表单意外提交刷新的 BUG 2026-06-21 11:06:57 +08:00
GreenhandTan 6ac398accb fix(ui): 修复从终端返回用户空间后连接按钮状态未重置的 BUG 2026-06-21 10:55:57 +08:00
GreenhandTan 3980184304 docs: 修正 README 中关于机密变量的配置描述
- 将 Cloudflare Dashboard 设置界面中的操作由「点击锁图标」更正为「Type 选项选择 Secret (机密)」
- 移除了 wrangler.toml 中对 SESSION_SECRET 的过时配置说明
2026-06-21 10:47:15 +08:00
GreenhandTan 557444dff9 feat: 自动生成并持久化 SESSION_SECRET
- 在 UserDBDO 中新增 system_config 表用于持久化系统级配置
- 当环境变量未提供 SESSION_SECRET 时,自动生成安全的随机密钥并保存,提升易用性和安全性
- 移除中英文 README 及 wrangler.toml 中手动设置 SESSION_SECRET 的指引
2026-06-21 10:38:11 +08:00
GreenhandTan c60b004fb4 feat: 新增 GitHub OAuth 登录与个人空间服务器管理功能
- 引入 SQLite (UserDBDO) 存储用户、会话与服务器凭据
- 实现基于 GitHub 的 OAuth 授权登录工作流
- 新增用户个人空间界面,支持服务器节点的增删改查
- 支持服务器凭据的一键连接(通过 one-time-token 安全传递凭据)
- 修改开源协议为 Apache License 2.0
- 更新中英文 README,添加新增功能的配置与部署说明
2026-06-21 10:25:45 +08:00
TanXin a367627ed5 Enhance star history display with responsive design
Updated star history section with responsive images for dark and light themes.
2026-06-19 11:29:51 +08:00
TanXin d9ba9ad238 Fix duplicate section in README
Removed duplicate 'Star History' section from README.
2026-06-19 11:29:32 +08:00
TanXin fe304db6f9 Enhance Star History display in README
Updated Star History section with responsive images.
2026-06-19 11:29:05 +08:00
TanXin eeb028d077 feat: 添加 SVG 格式 favicon,匹配项目赛博朋克风格 2026-06-18 08:22:31 +08:00
TanXin 8da7a97e31 fix: 用户 exit 时不再触发自动重连
- 区分正常关闭(用户 exit、会话结束)和异常关闭(网络错误等)
- 正常关闭使用 WebSocket close code 1000
- 客户端仅在 close code !== 1000 时触发重连
2026-06-17 18:02:35 +08:00