Repository navigation
Issue 126
- 类型:功能 / 缺陷修复
- 状态:已实现,待 PR 审阅
- Issue:https://github.com/ShaoClean/Alune/issues/126
- PR:https://github.com/ShaoClean/Alune/pull/132
- 最近更新:2026-09-30
- 代码基线:development / 547e3f369c9107486acbd581dfb36adc9186ab15
- 实现提交:b695fc7
v0.5.1 的已打开标签与当前仓库仅在 repositoryStore 内存中保存。网页刷新只能通过地址重新打开当前仓库,其他标签丢失;桌面每次启动进入根地址,再跳转到仓库列表。2026-09-30 的验收复现了三标签刷新后只剩一个、根地址重开后没有标签的问题。
保存本地、SSH 与 Worktree 的标签集合、顺序及最后激活项;刷新、桌面正常重启和强制结束后恢复。恢复只加载登记信息,仓库工作区继续由激活页面按需读取。提交草稿、视图类型、文件选择及滚动位置不属于本次恢复范围。
- 现有
alune-workspace的 version 1 新增repositorySession: { ids, activeId }。只持久化 ID,不保存名称、路径和仓库状态;旧文件缺少该字段时默认空标签,不改变外观、布局、树展开和排序设置。 - 打开、切换、关闭、批量关闭、重排、移除登记时即时更新偏好。桌面通过受信任主窗口的同步 IPC 保存;主进程使用既有临时文件加重命名写入,返回时已完成磁盘写入。浏览器继续使用 localStorage。
- 全量仓库列表成功返回后,按保存顺序从当前登记重建标签,并剔除已经移除的 ID。激活项移除时优先选择原位置右侧仍存在的标签,再选择左侧;没有剩余项时回到列表。列表失败不清理状态;从根地址启动时显示重试入口。
-
/用于恢复上次工作区;/repositories/:id的显式地址优先,并保留其他标签。桌面“文件 → 连接”改为显式/connections,避免触发根路由恢复。 - 设置页、仓库列表和连接页保留最后激活仓库;下次从根地址启动会进入该仓库。关闭全部标签后保存空集合。默认启用,不新增开关。浏览器多个页面共享存储,以最后一次写入为准。
- 恢复标签不发起各仓库的工作区加载请求。现有侧栏可见条目的状态观察仍按原规则运行,只有当前仓库挂载详情页面。
- 本地、SSH、Worktree 混合标签跨桌面进程和随机端口恢复集合、顺序和激活项。
- 网页刷新、根地址重开和指定仓库地址优先。
- 打开、关闭、批量关闭、重排和关闭全部后立即 SIGKILL,再启动恢复最新状态。
- 已移除登记不恢复,并选中相邻标签;没有剩余标签时回到列表。
- SSH 连接拒绝时保留标签;列表请求失败不清理,重试后恢复。
- 恢复 store 不请求仓库详情或状态,只恢复登记对象。
- version 1 旧外观和布局偏好在升级、写入与跨进程重启后保留;树排序回归通过。
- Windows/Linux 原生桌面验收(本次环境为 macOS arm64)。
环境:2026-09-30,macOS arm64,Node.js v25.5.0,Electron 44.2.0;隔离临时 SQLite、Git 仓库和本机 SSH 测试服务,不访问用户仓库或真实远端。
| 命令 / 场景 | 结果 |
|---|---|
npm test -w web |
193/193 通过;含 9 个新增标签会话用例及异步桌面水合测试 |
npm run desktop:test:unit |
45/45 通过,含同步写入、权限拒绝、磁盘错误与旧文件校验 |
npm run desktop:build |
通过;TypeScript、Web、Server、共享包及桌面暂存构建通过;保留既有大 chunk 提示 |
npm run desktop:test |
通过;原有桌面两阶段 smoke、外观、布局、树排序、Diff、历史、AI、凭据和更新回归 |
npm run test:repository-session -w desktop |
完整 11 次独立 Electron 进程连续两轮通过;包含设置页退出、变端口重启、刷新、地址优先、菜单、列表失败重试、5 次强杀、关闭全部、删除登记、SSH 拒绝连接和旧偏好兼容 |
| ego-browser 网页复验 | gamma / alpha / beta 的顺序及 beta 激活项在刷新和根地址重开后不变;指定 alpha 地址保留全部标签并激活 alpha |
测试期间发现并修正了测试脚本把 DELETE 的空响应当 JSON 解析的问题。最终强杀复验还暴露了快速切换时旧页面的后台状态更新可能写回旧激活项的竞态:现已将地址选择与登记核对分离,在点击时保存激活项,并阻止已过期页面的详情响应重新激活旧仓库;增加连续切换和强杀后的磁盘断言。
修复前(v0.5.1):刷新后只剩当前标签。

修复后:刷新前、刷新后均为 gamma / alpha / beta,beta 激活。


直接访问 alpha:标签顺序保持,alpha 激活。

同步 IPC 将偏好写盘时间计入用户操作,以保证强杀前写入完成;当前偏好文件很小,但极慢或故障磁盘可能增加等待,写入错误沿用现有反馈。强杀验证覆盖进程终止,不代表断电时的存储硬件持久性保证。
Windows/Linux 原生桌面、真实远端 SSH 恢复及操作系统断电未实测。恢复过程和磁盘结构不提高偏好版本;回退旧代码仍可读取既有偏好,但旧版本下一次保存会去掉新的标签状态。设置开关、分仓库视图恢复、浏览器多窗口独立会话可另开需求。
设计文档首页 · Alune 品牌说明 · 维护约定 · 代码仓库