Files
Explorer-Workbench/README.md
netquick e9aba73552 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>
2026-08-22 12:43:05 +02:00

107 lines
4.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.