面板 id 曾直接复用 pty 会话 id(`addPanel({ id: sessionId })`),而 `updateParameters` 只能换会话、不能改面板 id。于是恢复时面板 id 指向一个 已不存在的会话:分屏少一个、剩下的 pane 背后没有 pty,界面看起来是空白, 也无法输入。 - 新增 `panelId()`,面板 id 与会话 id 彻底分离,并用于所有建面板处 (新建终端、SSH 连接、分屏复制) - 新增 `breakIdCoincidence()`:旧快照仍带 `panelId === sessionId`, 在 `fromJSON` 之前重写 grid/panels/views/activeView 中的 id, 返回 old→new 映射 - `rebindSessionPanels` 用该映射回查快照,恢复每个 pane 自己的目录 (否则新 id 查不到记录,cwd 会静默退回 home) 验证(重启恢复 E2E,legacy 快照 + 2 分屏): 2/2 pane 挂载、2 个独立存活会话、输入可回环、 cwd 分别回到 D:/AIGC/OpenTerminal 与 C:/Windows、回写快照无 id 冲突; restoreSession=false 时正确忽略快照只建 1 个终端。
Open-source terminal app (local + SSH): split panes, themes, SFTP, server monitoring, broadcast input, ZMODEM, system tray, single instance. Electron + React + TypeScript. MIT License.