Explorer
Two things in one window: the filesystem, and every session file that lives under dox-data/agent/sessions/.
Views
| View | Notes |
|---|---|
| List | One row per entry, directories first, case-insensitive sort |
| Grid | Image thumbnails for files under 10 MB; everything else shows its icon |
The toggle shows the current mode, not the other one.
Opening
| Double-click | Result |
|---|---|
| A folder | A new explorer window rooted there |
A .sss file |
The agent opens that session |
| An image | An image window |
| Any other file | The app that declares the extension in its manifest |
| A file with no renderer | The editor |
The last two are the renderer registry doing its job — the explorer does not have a hardcoded list of file types. It asks /api/app, collects each app's renders.extensions, and builds the mapping at runtime. Add an app that renders .csv and CSV files start opening there, with no change to the explorer.
Sessions look like files
Rows for .sss files show more than a filename: the session's title, turn count and timestamps, fetched from the app's renders.meta endpoint (/app/agent/api/session-meta?path=…). It is the same registry mechanism, one level up: not just "which app", but "what does this app want to say about the file".
Selecting
| Input | Effect |
|---|---|
| Click | Select one row |
Ctrl / Cmd + click |
Add to the selection |
Shift + click |
Range |
| Drag from blank space | Marquee select |
Rows are draggable, blank space is for the marquee — dragging a row starts a drag, dragging the background draws a selection box.
Clipboard
| Input | Effect |
|---|---|
Ctrl / Cmd + C |
Copy the selection. Also writes the paths to the system clipboard as text, one per line |
Ctrl / Cmd + X |
Cut (internal clipboard only — the system clipboard is not touched) |
Ctrl / Cmd + V |
Paste into the current folder |
Copy is deliberately dual: paste inside dox, or paste the path list into a terminal.
Dragging onto the canvas
Dragging rows out of the window drops a payload under the custom MIME type application/x-dox-paths:
[{ "path": "/abs/path/file.png", "dir": false }]
The window manager decides what to do with it:
| Dropped item | Result |
|---|---|
| Image | An image window at the drop point |
.sss file |
The agent, opening that session |
| Folder | A new explorer window rooted there |
| Anything else | Dropped onto the canvas as a path for the editor |
This is the one place where the explorer and the canvas agree on a format, and it is a MIME type rather than a shared module — so either side can change independently.
Context menu
Right-click a row: Copy, Cut, Rename, Delete. The commands act on the row under the cursor, not on the current selection — a small detail that matters when the selection is stale.
Paths
The default root comes from /api/root (the filesystem root, or DOX_FS_ROOT if set). Everything is addressed by absolute path in requests; the UI keeps them absolute so windows can be reopened across reloads.
HTTP
The explorer's routes — list, stat, file, mkdir, mkfile, rename, delete, copy, move — are documented in HTTP API.