You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Independent tab bar per pane (always visible, Chrome-style shrinking, max 10)
- ⌘T creates instant new tab (clone trick — no reload), ⌘W closes, ⌃Tab/⌃⇧Tab cycles
- {#key} destroy/recreate for clean tab switches, cursor restored by filename
- Native context menu: pin/unpin, close others (skips pinned), close with confirmation for pinned
- Top menu too
- Persistence with migration from old scalar keys, debounced saveAppStatus
- MCP: activate_tab and pin_tab tools, tab list in cmdr://state YAML, debounced frontend→backend sync
- Rust: menu items replace "Close Window", tab context menu popup, update_pane_tabs command
Collateral:
- Sort is per-tab now (removed global columnSortOrders)
- Confirmation dialog now cancels on ESC
@@ -48,17 +49,17 @@ Constants and configuration for the MCP server (port, bind address, transport se
48
49
49
50
### State stores
50
51
51
-
-`PaneStateStore`: Current state of left/right panes (path, files, cursor, selection)
52
+
-`PaneStateStore`: Current state of left/right panes (path, files, cursor, selection, tabs)
52
53
-`SoftDialogTracker`: Which dialogs MCP thinks are open (in `dialog_state.rs`)
53
54
-`SettingsStateStore`: Current settings window state (section, settings, shortcuts)
54
55
55
-
Frontend syncs state to these stores via Tauri commands (`update_left_pane_state`, `mcp_update_settings_sections`, etc.).
56
+
Frontend syncs state to these stores via Tauri commands (`update_left_pane_state`, `update_pane_tabs`, `mcp_update_settings_sections`, etc.).
56
57
57
58
## Key decisions
58
59
59
60
### Why agent-centric API?
60
61
61
-
The original design mirrored keyboard shortcuts (43 tools like `nav_up`, `nav_down`). This forced agents to make dozens of calls to find a file. The agent-centric redesign (Jan 2026) consolidated to 19 semantic tools (`move_cursor(index=42)`, `nav_to_path("/Users")`). This reduced round-trips from 6+ reads to 1 (`cmdr://state` resource).
62
+
The original design mirrored keyboard shortcuts (43 tools like `nav_up`, `nav_down`). This forced agents to make dozens of calls to find a file. The agent-centric redesign (Jan 2026) consolidated to 20 semantic tools (`move_cursor(index=42)`, `nav_to_path("/Users")`). This reduced round-trips from 6+ reads to 1 (`cmdr://state` resource).
62
63
63
64
### Why YAML over JSON for resources?
64
65
@@ -132,6 +133,10 @@ This separation keeps main window overhead minimal.
132
133
133
134
`INVALID_PARAMS = -32602`, `INTERNAL_ERROR = -32603`, etc. These are defined by the JSON-RPC spec, not MCP. Don't change them.
134
135
136
+
### Tab state is synced separately from pane state
137
+
138
+
Tab info (id, path, pinned, active) is synced to `PaneState.tabs` via a separate `update_pane_tabs` command, debounced at ~100ms in the frontend. The `cmdr://state` resource shows a `tabs:` section per pane only when tabs are synced (non-empty). The `activate_tab` tool emits an `mcp-activate-tab` Tauri event that the frontend handles by switching to the specified tab.
139
+
135
140
### Schema version doesn't apply to MCP state
136
141
137
142
MCP state stores don't have `_schemaVersion` fields. They're runtime-only, not persisted. If the state format changes, just restart the app.
0 commit comments