Add flat folders with manual ordering to the chat sidebar #43

Open
opened 2026-08-23 09:32:20 +00:00 by kayg · 0 comments
Owner

Ask

Add flat, single-containment folders with manual ordering to the chat sidebar. Folders must not nest because onMove does not work on hierarchical macOS lists. A folder must be a row, never a Section, because a Section cannot be a drop target.

Files and APIs

  • Sources/Hermternal/Views/SidebarView.swift: the sidebar List, folder rows, and drop/reorder actions.
  • Sources/HermternalCore/Sidebar/SidebarOrdering.swift: sidebar section and row placement.
  • Sources/Hermternal/AppModel.swift: session and folder state integration.
  • ~/.config/hermternal/config.json: persisted folder definitions, memberships, and manual order.

Acceptance

  • A user can create, rename, delete, and manually reorder folders in the native sidebar list.
  • Each chat belongs to at most one folder; folders are flat and cannot contain folders.
  • A folder is rendered as a native row and can receive a chat move; no folder is represented as a Section drop target.
  • Folder definitions, memberships, and order survive refresh and relaunch through ~/.config/hermternal/config.json.
  • Moving a chat updates its visible folder placement without changing the durable session selection.
## Ask Add flat, single-containment folders with manual ordering to the chat sidebar. Folders must not nest because `onMove` does not work on hierarchical macOS lists. A folder must be a row, never a `Section`, because a `Section` cannot be a drop target. ## Files and APIs - `Sources/Hermternal/Views/SidebarView.swift`: the sidebar `List`, folder rows, and drop/reorder actions. - `Sources/HermternalCore/Sidebar/SidebarOrdering.swift`: sidebar section and row placement. - `Sources/Hermternal/AppModel.swift`: session and folder state integration. - `~/.config/hermternal/config.json`: persisted folder definitions, memberships, and manual order. ## Acceptance - A user can create, rename, delete, and manually reorder folders in the native sidebar list. - Each chat belongs to at most one folder; folders are flat and cannot contain folders. - A folder is rendered as a native row and can receive a chat move; no folder is represented as a `Section` drop target. - Folder definitions, memberships, and order survive refresh and relaunch through `~/.config/hermternal/config.json`. - Moving a chat updates its visible folder placement without changing the durable session selection.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/hermternal-apple#43
No description provided.