Add Explorer Workbench with hierarchical, off-UI Storage analysis.

Storage queries run in the background with cancellation and covering indexes so switching views no longer freezes the UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-22 12:43:05 +02:00
commit e9aba73552
130 changed files with 15110 additions and 0 deletions

106
README.md Normal file
View File

@@ -0,0 +1,106 @@
# Explorer Workbench
Working name for a Windows file manager with **persistent memory**: live Explorer browsing plus a SQLite index for search, folder sizes, offline media and storage analysis.
Mental model:
> Open Explorer → see files → manage files → search immediately → analyze storage.
The index is infrastructure. You never need to know about SQLite, FTS or change journals to use the app.
## Requirements
- Windows 10 version 1809 or later, or Windows 11
- [.NET 10 SDK](https://dotnet.microsoft.com/download) (this repo pins `10.0.301` in `global.json`)
- No administrator privileges required
## Build
```powershell
dotnet build Explorer.slnx -c Release
```
## Run
```powershell
dotnet run --project src/Explorer.App -c Release
```
The executable is `src/Explorer.App/bin/Release/net10.0-windows/Explorer.App.exe`.
## Tests
```powershell
dotnet test Explorer.slnx -c Release
```
## Architecture overview
Modular monolith (see `docs/ARCHITECTURE.md`):
| Project | Role |
|---|---|
| `Explorer.App` | WPF shell, themes, composition |
| `Explorer.Presentation` | ViewModels (no WPF types) |
| `Explorer.Application` | Use-cases (browse, sources) |
| `Explorer.Domain` | Entities, identity, excludes |
| `Explorer.Indexing` | Full scan, folder reconcile, USN apply, watchers |
| `Explorer.Search` | Structured `SearchQuery` → index |
| `Explorer.Analysis` | Top-N, types, duplicates, history rollups |
| `Explorer.FileOperations` | Transfer queue, copy/move/delete |
| `Explorer.Storage.Sqlite` | Schema, WAL, FTS5 |
| `Explorer.Windows` | Volumes, USN, Recycle Bin, `CopyFileEx` |
Listing is **hybrid**: the open folder always comes from the live filesystem when the location is online. Folder sizes, search, analysis and offline media come from the index.
## Database location
`%LocalAppData%\ExplorerWorkbench\index.db`
Never stored beside the executable.
## Logging location
`%LocalAppData%\ExplorerWorkbench\logs\explorer-YYYYMMDD.log`
## Indexing behavior
- Browsing local drives works immediately with an empty index.
- Initial indexing is **user-triggered** (banner **Build index** or the toolbar **Index** button).
- Scans run in the background, write in batches, skip inaccessible paths, and can be cancelled.
- Local NTFS volumes use the USN change journal when the process can open it; otherwise folder reconcile + `FileSystemWatcher` (best effort; overflow marks the location as possibly out of date).
- SMB/UNC paths are added manually (address bar or **Add network**). The Windows Network neighborhood is not enumerated.
- Default excludes include `C:\Windows`, recycle bins, `node_modules`, `.git`, and similar.
## Keyboard shortcuts
| Shortcut | Action |
|---|---|
| `Alt+Left` / `Back` | Back |
| `Alt+Right` | Forward |
| `Alt+Up` | Up |
| `F5` | Refresh |
| `Enter` | Open |
| `F2` | Rename |
| `Ctrl+C` / `Ctrl+X` / `Ctrl+V` | Copy / Cut / Paste |
| `Delete` | Delete to Recycle Bin |
| `Ctrl+T` | New tab |
| `Ctrl+W` | Close tab |
Drag and drop copies by default; hold `Shift` to move.
## Known limitations
- Product name `Explorer` is temporary; app data uses `ExplorerWorkbench`.
- UI strings are English in this build; resource structure can take German later.
- Everything-like search syntax is not implemented; name/glob plus size/type/date filters are.
- USN requires privileges Windows does not grant to a normal desktop process on many volumes — fallback is used then.
- Duplicate hashing is staged (size → partial hash → full hash only when partial hashes still collide) and runs in the background; confirmed groups appear after hashing finishes.
- No treemap, no document full-text, no cloud providers, no installer/MSIX in this run.
- Very large folders rely on WPF virtualization; search results are paged (500, hard cap 10000).
- `mmap_size` is not applied; it caused unreliable native SQLite startup under concurrent test hosts.
- UI chrome is English; German `.resx` files are not wired through every control in this run.
## License
Use as a private/local project unless otherwise specified.