Skip to content

Latest commit

 

History

History
29 lines (24 loc) · 2.16 KB

File metadata and controls

29 lines (24 loc) · 2.16 KB

AGENTS.md

项目定位

Windows 多标签页文件管理器(Wails v2 + Go + 原生 JS),可接管资源管理器:原生右键菜单、回收站、发送到、外壳扩展。

跑起来

wails dev        # 开发(前端热重载)
wails build      # 生产构建 → build/bin/filemanager.exe
go test ./...    # 后端测试
npm test --prefix frontend   # 前端 Vitest

技术栈

Go 1.25 + Wails v2.13 + Vite 7 + 原生 JS(无框架,frontend/src/main.js 单文件);Win32/COM 直接调用(go-ole、syscall shell32)。

目录与约定

  • 根目录 Go 文件全部 package main,App 方法即前端 RPC;新增功能先看 app.go/ops.go 的模式。
  • shellmenu.go/shellenum.go 是 COM vtable 手写调用,易碎——改动后跑 go test ./... 和前端 menu 测试。
  • 目录枚举走 shellenum.golistDirEntries:OneDrive 等云占位目录(reparse point)必须用 IShellFolder::EnumObjects,绝不能用 os.ReadDir/FindFirstFile 枚举它们(会触发 OneDrive 下载目录全部内容)
  • 枚举目标目录前必须 SHBindToParentBindToObject:直接枚举 SHBindToParent 返回的父 folder 会枚举到父/桌面内容;OneDrive 路径在 shell 里是虚拟命名空间,不经 BindToObject 会枚举到桌面。
  • SHBindToParent 输出的 childPidl 是 absPidl 内部的借用指针,不可单独释放;os.Lstat 拿不到 OneDrive 的 REPARSE 位(被 cldflt 隐藏),检测用 FindFirstFile(见 isReparseDir)。
  • 前端业务状态都在 main.js(标签页/选中/视图);改 UI 优先复用 showError 等既有工具。
  • third_party/systray 是本地补丁版,go.modreplace,不要直接升级该依赖。
  • frontend/wailsjs/ 由 Wails 生成,勿手改;改 Go RPC 签名后跑 wails generate module(它只增量合并,已存在方法的新签名需手改 App.d.ts)。
  • 构建产物 filemanager.exefrontend/dist.reasonix/ 不入库(已在 .gitignore)。

当前状态与下一步

活跃开发中;工作区有未提交变更(回收站删除、多选右键 shell 菜单、OneDrive 枚举、autostart.go 等)。注意 data/settings.json 是运行态设置,是否入库待定。