From 244199c51290b159f914b4582b590f4a00beadb8 Mon Sep 17 00:00:00 2001 From: Bill Date: Thu, 24 Sep 2026 22:16:49 +0800 Subject: [PATCH] chore: release v1.0.17 --- CHANGELOG.en.md | 22 ++++++++++++++++++++++ CHANGELOG.ja.md | 22 ++++++++++++++++++++++ CHANGELOG.md | 22 ++++++++++++++++++++++ CHANGELOG.zh-TW.md | 22 ++++++++++++++++++++++ package.json | 6 ++++-- 5 files changed, 92 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.en.md b/CHANGELOG.en.md index b27a72a..a38b10a 100644 --- a/CHANGELOG.en.md +++ b/CHANGELOG.en.md @@ -1,5 +1,27 @@ # OpenTerminal Changelog +## v1.0.17 - 2026-09-24 + +- **New Settings → Lock tab**: set, change or remove a lock password (stored on this machine only, scrypt one-way hash — no plaintext, no account system) +- **Three ways to lock**: lock now, auto-lock after the system is idle for a chosen time (1/5/15/30/60 minutes, off by default), and lock at startup +- The mask is fully opaque; terminal sessions keep running behind it and stay connected — unlocking restores everything +- Wrong attempts enter a growing cooldown (1s→30s) to stop guessing at the keyboard +- **The lock survives quitting and relaunching**: tray exit, task-manager kill or a crash do not get around it +- While locked, reload (Ctrl+R / F5), DevTools and zoom shortcuts are disabled, so the sessions behind the mask cannot be killed by accident +- A forgotten password cannot be recovered; the only way back in is deleting this machine's `%APPDATA%\OpenTerminal\lock.json` and setting a new one + +- Packaged builds no longer honour `ELECTRON_RENDERER_URL` / `OT_UPDATE_URL`, closing an injection path that could point the app or its update feed at a hostile address +- The renderer preload runs sandboxed again +- An unreadable or corrupt known-hosts store now refuses connections and asks for the file to be repaired or deleted, instead of silently overwriting every pinned host fingerprint +- Connect-time password/passphrase prompts now match the bookmark's auth method (a key/agent bookmark no longer pops a password dialog or offers a leftover stored password) +- Fixed missing or duplicate session-exit broadcasts when an SSH connection dies — the terminal no longer hangs on "connecting" +- Closing one split-pane monitor no longer stops the sibling pane's polling +- Session-log index entries are path-validated, so a tampered index cannot write outside the log directory +- Settings are saved atomically, with a retry for Windows file-lock errors + +- Added CI (GitHub Actions): typecheck + 10 offline tests + build +- The freeze-detection log no longer reports timer throttling as a ~1-minute "stall" while the window is hidden in the tray + ## v1.0.16 - 2026-09-23 - **Built-in rules 11 → 22**: new dangerous/destructive commands (`rm -rf`, `mkfs`, `dd if=`, `chmod 777`, `drop database`, piping into `sh`, …), suspected secret/token reminders, delete/move/overwrite operations, create operations, log levels, exit codes, HTTP status codes, durations (ms), percentage progress, network & IP addresses, timestamps, `root@` prompts, shell keywords, quoted strings, environment variables and more diff --git a/CHANGELOG.ja.md b/CHANGELOG.ja.md index b036626..1c2bcdf 100644 --- a/CHANGELOG.ja.md +++ b/CHANGELOG.ja.md @@ -1,5 +1,27 @@ # OpenTerminal 更新履歴 +## v1.0.17 - 2026-09-24 + +- **設定 → ロック を新設**:ロック画面のパスワードを設定・変更・削除できます(このマシンにのみ保存、scrypt 一方向ハッシュ。平文なし・アカウント体系なし) +- **3 つのロック方法**:今すぐロック、システムが一定時間アイドルで自動ロック(1/5/15/30/60 分、既定はオフ)、起動時にロック +- ロック中は完全に不透明なマスクでウィンドウを覆い、裏で動くターミナルセッションは切断されません。ロック解除すると元の状態に戻ります +- 誤入力には段階的なクールダウン(1 秒→30 秒)で総当たりを防止します +- **アプリを終了して再起動してもロックは維持**されます。トレイ終了・タスクマネージャー強制終了・クラッシュでも回避できません +- ロック中は Ctrl+R / F5 の再読み込み・開発者ツール・ズームのショートカットを無効化し、マスクの裏のセッションを誤って終了させないようにします +- パスワードを忘れた場合の復元はできません。このマシンの `%APPDATA%\OpenTerminal\lock.json` を削除して再設定する以外に方法はありません + +- パッケージ版は `ELECTRON_RENDERER_URL` / `OT_UPDATE_URL` 環境変数を無視するようにしました(アプリや更新チャネルを悪意あるアドレスへ向ける注入経路を遮断) +- レンダラーの preload を再びサンドボックス化 +- known_hosts が読み取れない/壊れている場合は接続を拒否し、ファイルの修復または削除を求めます(固定済みフィンガープリントの全消去を防ぐため) +- 接続時のパスワード/パスフレーズ入力をブックマークの認証方式と統一(鍵/エージェント認証のブックマークでパスワードダイアログが出たり、残った保存済みパスワードが送られたりしない) +- SSH 接続が異常切断されたときのセッション終了通知の欠落・重複を修正(ターミナルが「接続中」のまま固まるのを防ぐ) +- 分割ペインのシステムモニターで、片方を閉じてももう片方の監視が止まらないようにしました +- セッションログのインデックスにパス検証を追加し、改ざされたインデックスがログディレクトリの外へ書き込むのを防止 +- 設定の保存をアトミック書き込みに変更し、Windows でファイルが占有されている場合にリトライします + +- CI(GitHub Actions)を追加:型チェック + 10 個のオフラインテスト + ビルド +- ウィンドウをトレイに隠している間、凍結検出ログがタイマー絞り込みを約 1 分の「フリーズ」と誤報告しないようにしました + ## v1.0.16 - 2026-09-23 - **内蔵ルール 11 件 → 22 件**:危険/破壊的なコマンド(`rm -rf`、`mkfs`、`dd if=`、`chmod 777`、`drop database`、`sh` へのパイプなど)、疑わしいシークレット/トークンの警告、削除/移動/上書き操作、作成操作、ログレベル、終了コード、HTTP ステータスコード、処理時間(ミリ秒)、パーセント進捗、ネットワークと IP アドレス、日時、`root@` プロンプト、Shell キーワード、引用文字列、環境変数などを追加 diff --git a/CHANGELOG.md b/CHANGELOG.md index a7d2765..3b6ebaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # OpenTerminal 更新日志 +## v1.0.17 - 2026-09-24 + +- **新增 设置 → 锁屏 选项卡**:可设置、修改、移除锁屏密码(仅存本机,scrypt 单向哈希,不存明文、无账号体系) +- **三种锁定方式**:立即锁屏、系统闲置指定时长后自动锁定(1/5/15/30/60 分钟,默认关闭)、启动时锁屏 +- 锁定后以完全不透明的遮罩覆盖窗口,背后的终端会话保持运行、不会断开,解锁后恢复原状 +- 密码输错进入渐进冷却(1 秒→30 秒),防止在键盘前暴力猜测 +- **退出并重新启动应用后锁定仍然生效**:托盘退出、任务管理器强杀、崩溃都绕不过锁屏 +- 锁定期间停用 Ctrl+R / F5 重新加载、开发者工具与缩放快捷键,避免误触终止遮罩背后的会话 +- 忘记密码无法找回,只能删除本机 `%APPDATA%\OpenTerminal\lock.json` 后重新设置 + +- 打包版本不再读取 `ELECTRON_RENDERER_URL` / `OT_UPDATE_URL` 环境变量,阻断把应用或更新通道指向恶意地址的注入路径 +- 渲染进程 preload 重新启用沙箱隔离 +- known_hosts 储存无法读取或损坏时改为拒绝连接、提示修复或删除文件,不再静默覆盖全部已固定的主机指纹 +- 连接时的密码/口令输入与书签的认证方式统一(密钥/agent 认证的书签不再弹出密码框、不再送出残留的已存密码) +- 修复 SSH 连接异常中断时会话退出通知漏发或重发的问题,终端不再卡在「连接中」 +- 分割面板的系统监控在一侧关闭后不再误停另一侧的监控 +- 会话日志索引加入路径校验,防止被篡改的索引把日志写到目录之外 +- 设置保存改为原子写入,Windows 下文件被占用时自动重试,修复偶发的设置保存失败 + +- 新增 CI(GitHub Actions):类型检查 + 10 个离线测试 + 构建 +- 窗口隐藏到托盘时,冻结检测日志不再把定时器节流误报为约 1 分钟的「卡死」 + ## v1.0.16 - 2026-09-23 - **内置规则 11 条 → 22 条**:新增危险/破坏性命令(`rm -rf`、`mkfs`、`dd if=`、`chmod 777`、`drop database`、管道给 `sh` 等)、疑似密钥/令牌提醒、删除/移动/覆盖操作、新建/创建操作、日志级别、退出码、HTTP 状态码、耗时(毫秒)、百分比进度、网络与 IP 地址、时间日期、`root@` 提示符、Shell 关键字、字符串、环境变量等 diff --git a/CHANGELOG.zh-TW.md b/CHANGELOG.zh-TW.md index 4e22a60..d396cca 100644 --- a/CHANGELOG.zh-TW.md +++ b/CHANGELOG.zh-TW.md @@ -1,5 +1,27 @@ # OpenTerminal 更新日誌 +## v1.0.17 - 2026-09-24 + +- **新增 設定 → 鎖定 分頁**:可設定、修改、移除鎖定畫面密碼(僅存於本機、scrypt 單向雜湊,不存明文、無帳號體系) +- **三種鎖定方式**:立即鎖定、系統閒置指定時長後自動鎖定(1/5/15/30/60 分鐘,預設關閉)、啟動時鎖定 +- 鎖定後以完全不透明的遮罩覆蓋視窗,背後的終端機工作階段保持執行、不會中斷,解鎖後恢復原狀 +- 密碼輸錯進入漸進冷卻(1 秒→30 秒),防止在鍵盤前暴力猜測 +- **結束並重新啟動應用後鎖定仍然生效**:系統匣退出、工作管理員強制結束、當機都繞不過鎖定畫面 +- 鎖定期間停用 Ctrl+R / F5 重新載入、開發者工具與縮放快捷鍵,避免誤觸終止遮罩背後的工作階段 +- 忘記密碼無法找回,只能刪除本機 `%APPDATA%\OpenTerminal\lock.json` 後重新設定 + +- 打包版本不再讀取 `ELECTRON_RENDERER_URL` / `OT_UPDATE_URL` 環境變數,阻斷把應用或更新通道指向惡意位址的注入路徑 +- 繪製程序 preload 重新啟用沙箱隔離 +- known_hosts 儲存無法讀取或損壞時改為拒絕連線、提示修復或刪除檔案,不再靜默覆蓋全部已固定的主機指紋 +- 連線時的密碼/通關密語輸入與書籤的認證方式統一(金鑰/agent 認證的書籤不再彈出密碼框、不再送出殘留的已存密碼) +- 修正 SSH 連線異常中斷時工作階段結束通知漏發或重發的問題,終端機不再卡在「連線中」 +- 分割面板的系統監控在一側關閉後不再誤停另一側的監控 +- 工作階段日誌索引加入路徑校驗,防止被竄改的索引把日誌寫到目錄之外 +- 設定儲存改為原子寫入,Windows 下檔案被佔用時自動重試,修正偶發的設定儲存失敗 + +- 新增 CI(GitHub Actions):型別檢查 + 10 個離線測試 + 建置 +- 視窗隱藏到系統匣時,凍結偵測日誌不再把計時器節流誤報為約 1 分鐘的「當機」 + ## v1.0.16 - 2026-09-23 - **內建規則 11 條 → 22 條**:新增危險/破壞性命令(`rm -rf`、`mkfs`、`dd if=`、`chmod 777`、`drop database`、管線給 `sh` 等)、疑似金鑰/權杖提醒、刪除/移動/覆蓋操作、新建/建立操作、日誌級別、結束代碼、HTTP 狀態碼、耗時(毫秒)、百分比進度、網路與 IP 位址、時間日期、`root@` 提示字元、Shell 關鍵字、字串、環境變數等 diff --git a/package.json b/package.json index e1cab92..a7a975f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "open-terminal", "productName": "OpenTerminal", - "version": "1.0.16", + "version": "1.0.17", "description": "Open-source terminal with SSH, split panes, themes and fonts", "main": "out/main/index.js", "author": "CodingPlan.Site", @@ -12,7 +12,9 @@ "build": "electron-vite build", "preview": "electron-vite preview", "typecheck": "tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.web.json", - "test": "node tests/build-bundles.cjs && node tests/ssh-loopback.mjs && node tests/commands-store.mjs && node tests/settings-store.mjs && node tests/.hl-split-smoke.cjs && node tests/.hl-rules.cjs && node tests/zmodem-e2e.mjs && node tests/ssh-session-e2e.mjs && node tests/sysinfo-e2e.mjs", + "pretest": "npm run typecheck", + "test": "node tests/build-bundles.cjs && node tests/ssh-loopback.mjs && node tests/commands-store.mjs && node tests/settings-store.mjs && node tests/lock-store.mjs && node tests/lock-controller.mjs && node tests/.hl-split-smoke.cjs && node tests/.hl-rules.cjs && node tests/zmodem-e2e.mjs && node tests/ssh-session-e2e.mjs && node tests/sysinfo-e2e.mjs", + "predist": "npm test", "dist": "electron-vite build && electron-builder --win msi nsis", "dist:dir": "electron-vite build && electron-builder --win --dir" },