Repository navigation
Issue 135
关联:Issue #135
文件树和改动列表使用同一个菜单与操作对话框。右键或 Shift+F10/Menu 键锁定当前行,不改变既有选择。复制路径、复制相对路径为一组,重命名独立一组,删除使用危险操作组。菜单支持方向键、Enter、Esc、外部点击关闭与窗口边界调整。
仅处理当前仓库/Worktree 的单个普通文件或符号链接本身,目录、子模块、嵌套仓库和只读历史快照不开放修改。服务端重新检查工作区路径及能力,拒绝链接父目录、.git 元数据和越界路径。SSH 路径通过 SFTP 处理,不拼接 shell 文件操作。
删除为永久删除(本地和远端均不进入回收站);确认显示绝对路径和暂存影响。删除和重命名都只修改工作区,不调用 git rm/add/mv,不修改索引。已有暂存版本仍可被提交,用户需要另行暂存删除或重命名。预检令牌绑定目标、文件内容/属性及索引,外部修改后必须重新确认。
重命名预填 basename,仅支持同一父目录。按目标系统检查名称,禁止静默覆盖。本地使用非覆盖文件操作,SSH 使用 SFTP v3 非覆盖 rename;不区分大小写文件系统通过临时名称处理仅大小写改名,失败时明确报告恢复情况。
操作成功或不确定失败后刷新状态和文件树,失效预览清除或重新读取。复制使用当前工作区根路径(SSH 为远端路径),写入本机剪贴板并报告失败。
真实临时 Git 仓库和 Worktree,SSH/SFTP 测试服务覆盖未跟踪、修改、已暂存、暂存后修改、已消失、中文/空格/特殊字符、冲突、符号链接、权限拒绝、断线、外部修改、大小写改名。前端验证两个入口、被点击目标、键盘交互、边缘定位、取消和刷新。记录实际执行平台与未验证边界,不将模拟测试宣称为原生平台验收。
- 类型:功能;状态:已实现,待代码审阅。
- 日期:2026-10-01;实现提交:
451c768,最终验证提交:2657d95(分支codex/file-context-menu-135,基于 development /6a35428);PR:#141(草稿)。 - 环境:macOS arm64,Node.js 25.5.0,本机 Git;临时 loopback SSH/SFTP 服务,不访问实际远端仓库。
- 构建:shared、ssh-client、server、web 通过;Vite 仍报告已有的大 chunk 提示。
- 受影响 transport 回归:46 项通过(首轮 43 项,加 2 项子模块与删除后断线回归,以及 1 项仅大小写重命名完成后丢失响应的回归)(workspace-file-actions、local-connection、new-file-deletion、new-file-deletion-ssh、repository-files)。
- HTTP / local Git 集成:20/20 通过,包括工作区文件接口参数、令牌校验与索引保留。
- 前端:独立功能分支 197/197 通过。此前混合工作区 204/204 通过;最终截图与构建均来自独立分支,不包含并行的文件状态着色改动。
- 浏览器:两视图右键目标独立于选中文件;Shift+F10 呼出、方向键与 Enter 执行、Esc、取消、外部点击关闭、窗口右下角定位未超出可视区域;中文/空格名称重命名与列表刷新;已暂存文件永久删除后索引原 blob 保留;已消失文件禁用修改并说明原因;绝对路径与相对路径复制成功,注入剪贴板拒绝后显示失败反馈。




Windows/Linux 原生 UI、Windows OpenSSH 服务端以及真实网络断线尚未现场验证。已将工作区 HTTP 测试加入现有三平台 local-git CI,测试中的 SSH 为真实协议的临时本机服务,权限/断线还包含故障注入,不能等同真实服务器验收。
SFTP v3 不提供基于目录文件描述符的事务和原子 compare-and-delete;在校验与远端文件操作之间主动恶意替换父目录的极小竞态无法完全消除。普通外部修改通过令牌和操作前路径核验拒绝。非覆盖本地重命名使用 hard link/unlink;不支持硬链接的文件系统会明确报错,极端 unlink 失败可能保留两个路径并提示核对,不冒险删除并发替换后的目标。仅大小写改名中断时会尝试恢复,无法确认恢复结果时列出原路径、新路径和临时路径,要求核对实际文件位置,不断言文件留在临时路径。
回退代码后需单独回退本 Wiki 的功能说明。已执行的工作区删除/重命名不随代码回退恢复;暂存内容保留。
代码永久链接:实现提交。
-
2026-10-01,
451c768的全部单元测试、macOS/Linux 本地 Git 与网络代理检查通过。 -
Windows 本地 Git 首轮失败:运行记录。新测试夹具使用 JavaScript
realpathSync保留了RUNNER~1短路径,而生产适配器使用realpath.native正确返回runneradmin完整路径;断言不一致,文件操作未报错。 -
3aa0bca将夹具改为原生路径解析,并补充仅大小写重命名的 HTTP 原生文件系统验证。本机 3 项 workspace-file 测试通过;与原 local-git 合计 20 项。 -
3aa0bca的 Windows/macOS/Linux 本地 Git(含新工作区 HTTP 测试)、网络代理及全部单元测试通过:完整三平台运行。Windows 仅大小写重命名、路径规范化及暂存保留由原生 CI 验证。原生桌面 UI 仍按上文列为未现场验收。 -
2657d95修正仅大小写改名在完成后丢失响应且恢复结果无法确认时的提示,列出所有可能路径,避免错误断言文件仍在临时位置。新增跨平台回归模拟操作已成功但连接随后断开,核验文件实际位于新路径、临时路径不存在,且错误提示不误报位置。本机 workspace-file-actions 8/8 通过,shared 与 ssh-client 包构建通过。 -
最终提交
2657d95的全部单元测试、Windows/macOS/Linux 本地 Git 与网络代理检查通过:最终完整三平台运行。
设计文档首页 · Alune 品牌说明 · 维护约定 · 代码仓库