feat(app): archive inactive channels from the channels header menu #124
- IA
Right-clicking the sidebar's **Channels** header opens a context menu with **Archive inactive**. It archives every unarchived channel in the current project on this host that has no work in progress, then shows how many it archived.
- New owner-only host op `archive-inactive { project }`. A dormant channel has no worker, so it counts as inactive. Workers retire only once idle. For a running or hosted channel, the host asks the worker for `info` and keeps the channel if any chat is busy. Archiving uses the existing `archive`, which kills the worker, and closes the channel's terminals. - `SessionSidebar` takes an optional `onArchiveInactive` prop. The "mine" group header is a `ContextMenu` trigger that stays disabled when the prop is absent. The app passes it only for a local, connected project.
Smoke-tested against a separate `ace serve` (own ACE_HOME and port) with real channels: a dormant one, an idle running one, one busy running `sleep` through claude-haiku-4-5, and one in another project. The op and the UI flow (right-click → Archive inactive) archived only the dormant and idle channels. The busy channel and the other project's channel were not touched. `bun types` and `bun run ci` pass.
### Built in Ace
Built in an Ace channel. One exception: I drove the UI check with Playwright's headless Chromium. Ace's desktop inspection of the Chrome window failed with "inconsistent response evidence: window-context window title", so it couldn't right-click the header (#8).
iamnbutlerhead-ref-force-pushed c76ddd25846blast month on GitHub
iamnbutlermerged 6e925f3e5ac0last month on GitHub
iamnbutlerreferenced this in chore(desktop): release canary 0.0.14 #130last month on GitHub