Skip to content

feat(app): 0.1.5 UI polish — sidebar collapse, chat pane min/max, About version, lucide icons#356

Closed
fujibee wants to merge 2 commits into
mainfrom
feat/app-about-version
Closed

feat(app): 0.1.5 UI polish — sidebar collapse, chat pane min/max, About version, lucide icons#356
fujibee wants to merge 2 commits into
mainfrom
feat/app-about-version

Conversation

@fujibee

@fujibee fujibee commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Summary

Three 0.1.5 backlog items, bundled into one PR (all minor display-type changes, shipped together by owner decision):

  1. Sidebar (team pane) collapse — collapses to a 44px icon-only rail so panes get more width. Rail: agmsg mark (click to expand) → + (new team/agent) → team icon (opens a team-switch popup, replacing the <select>) → spacer → app-user avatar (also expands) + settings button. Spawning/messaging is not offered from the collapsed rail (accepted trade-off). The collapse toggle sits level with the macOS traffic lights when expanded; the collapsed state expands via the mark/avatar instead (a 44px-wide toggle would overlap the lights).
  2. App-user chat pane tri-state — Windows-style minimize/maximize header buttons. Minimized: history collapses away leaving just the composer row (fixes the "my own messages show twice" fatigue reported by real users once the room already shows everything). Maximized: fills the whole content area, hiding the team room and agent panes for a focused 1:1 view. Session-only state, no persistence. i18n tooltips in all 9 locales.
  3. About dialog versions — shows both the app version and the bundled agmsg-core version (e.g. "0.1.4 (core 1.1.6)"); previously Windows showed just "Name: agmsg" with no version at all. A single combined string in AboutMetadata.version (not the separate version/short_version fields, which map to platform-divergent About-panel slots) so both platforms show identical text. The bundled-core reader is a new agmsg::pinned_core_version() helper shared with agmsg_core_version_status's pinned field so the two can never disagree. The Windows About icon stays OS-default regardless — muda 0.19.3 hardcodes MB_ICONINFORMATION / TD_INFORMATION_ICON, ignoring AboutMetadata.icon (confirmed in muda's Windows impl); not fixable from app code.

Also introduces lucide-react for the icons this round touches (sidebar collapse/team/settings, chat min/max/restore) rather than more ad-hoc unicode glyphs, and swaps the pre-existing settings gear for the same Settings icon so both sidebar states match. Broader glyph replacement (pane/tab close ×, tab arrow ▸) is out of scope.

Testing

  • tsc --noEmit pass, pnpm test 81/81 pass, cargo test 21/21 pass (on this head, re-verified today)
  • UI behavior (all three items) manually verified on macOS by the owner on a local build
  • Windows visual check (About string, rail rendering) rides the 0.1.5 real-Windows gate round

fujibee added 2 commits July 5, 2026 13:26
…ut version, lucide icons

Three 0.1.5 backlog items bundled into one PR (koit: these are all
minor display-type changes, ship together):

- Sidebar (team pane) collapses to a 44px icon-only rail so panes get
  more width. Rail: agmsg mark (click to expand) → + (new team/agent,
  same menu as full view) → team icon (click opens a team-switch
  popup, replacing the <select>) → spacer → app-user avatar (also
  expands) + a direct settings button. Spawning/messaging isn't
  offered from the collapsed rail at all (koit: acceptable trade-off).
  The collapse toggle sits in its own slim strip level with the
  overlaid macOS traffic lights when expanded; the collapsed state
  has no separate toggle button there since it would overlap the
  lights at 44px wide — expanding is via the mark/avatar instead.

- App-user chat pane gets Windows-style minimize/maximize header
  buttons (3 states: normal / minimized — history collapses away,
  leaving just the composer row, fixing the "my own messages show
  twice" fatigue real users reported once the room already shows
  everything / maximized — fills the whole content area, hiding the
  team room and agent panes for a focused 1:1 view). Session-only
  state, no persistence.

- About dialog now shows both the app version and the bundled
  agmsg-core version (e.g. "0.1.4 (core 1.1.6)") — previously just
  "Name: agmsg" with no version at all on Windows. A single combined
  string in AboutMetadata.version (not muda's separate version/
  short_version fields, which map to different, platform-divergent
  About-panel slots) so both platforms show identical text. The
  bundled-core reader is a new agmsg::pinned_core_version() helper,
  shared with agmsg_core_version_status's "pinned" field so the two
  can never disagree. (About dialog's ICON stays the OS default on
  Windows regardless — muda 0.19.3 hardcodes MB_ICONINFORMATION /
  TD_INFORMATION_ICON there, ignoring AboutMetadata.icon entirely; not
  fixable from app code, confirmed by reading muda's Windows impl.)

- Introduces lucide-react for the new icons this round touches
  (sidebar collapse/team/settings, chat min/max/restore) rather than
  more ad-hoc unicode glyphs/hand-drawn SVGs (koit) — also swapped the
  pre-existing expanded-view settings gear for the same Settings icon
  so both sidebar states match. Broader replacement of older glyphs
  (pane/tab close ×, tab arrow ▸) is out of scope for this pass.
…hide interaction

Show Team Room: companion to Show User Chat — toggles the team-room tab
itself (not just its content) via a new TeamRoomVisible state on the Rust
side, mirrored to the frontend the same way showUserChat already is.
Switching it off while the room tab is active falls back to whichever
pane tab is active, or an empty-state hint if none exist yet. Also fixes
both View-menu checkboxes going stale after a language switch (menu
rebuild previously hardcoded them back to checked regardless of actual
state) via try_state, since the very first menu-build call happens
before either state is registered.

Also folds in the co1 static-review fix for #356: maximizing the chat
pane hides tabs/stage based on chatPaneState alone, so turning off Show
User Chat while maximized left tabs/stage hidden too with no chat
controls left to recover from — gated the hidden condition on
showUserChat as well.
@fujibee fujibee closed this Jul 13, 2026
@fujibee fujibee deleted the feat/app-about-version branch July 13, 2026 01:08
fujibee added a commit that referenced this pull request Jul 13, 2026
…m Room toggle, About version, lucide icons (#377)

* feat(app): 0.1.5 UI polish — sidebar collapse, chat pane min/max, About version, lucide icons

Three 0.1.5 backlog items bundled into one PR (koit: these are all
minor display-type changes, ship together):

- Sidebar (team pane) collapses to a 44px icon-only rail so panes get
  more width. Rail: agmsg mark (click to expand) → + (new team/agent,
  same menu as full view) → team icon (click opens a team-switch
  popup, replacing the <select>) → spacer → app-user avatar (also
  expands) + a direct settings button. Spawning/messaging isn't
  offered from the collapsed rail at all (koit: acceptable trade-off).
  The collapse toggle sits in its own slim strip level with the
  overlaid macOS traffic lights when expanded; the collapsed state
  has no separate toggle button there since it would overlap the
  lights at 44px wide — expanding is via the mark/avatar instead.

- App-user chat pane gets Windows-style minimize/maximize header
  buttons (3 states: normal / minimized — history collapses away,
  leaving just the composer row, fixing the "my own messages show
  twice" fatigue real users reported once the room already shows
  everything / maximized — fills the whole content area, hiding the
  team room and agent panes for a focused 1:1 view). Session-only
  state, no persistence.

- About dialog now shows both the app version and the bundled
  agmsg-core version (e.g. "0.1.4 (core 1.1.6)") — previously just
  "Name: agmsg" with no version at all on Windows. A single combined
  string in AboutMetadata.version (not muda's separate version/
  short_version fields, which map to different, platform-divergent
  About-panel slots) so both platforms show identical text. The
  bundled-core reader is a new agmsg::pinned_core_version() helper,
  shared with agmsg_core_version_status's "pinned" field so the two
  can never disagree. (About dialog's ICON stays the OS default on
  Windows regardless — muda 0.19.3 hardcodes MB_ICONINFORMATION /
  TD_INFORMATION_ICON there, ignoring AboutMetadata.icon entirely; not
  fixable from app code, confirmed by reading muda's Windows impl.)

- Introduces lucide-react for the new icons this round touches
  (sidebar collapse/team/settings, chat min/max/restore) rather than
  more ad-hoc unicode glyphs/hand-drawn SVGs (koit) — also swapped the
  pre-existing expanded-view settings gear for the same Settings icon
  so both sidebar states match. Broader replacement of older glyphs
  (pane/tab close ×, tab arrow ▸) is out of scope for this pass.

* feat(app): Show Team Room toggle in the View menu; fix chat-maximize/hide interaction

Show Team Room: companion to Show User Chat — toggles the team-room tab
itself (not just its content) via a new TeamRoomVisible state on the Rust
side, mirrored to the frontend the same way showUserChat already is.
Switching it off while the room tab is active falls back to whichever
pane tab is active, or an empty-state hint if none exist yet. Also fixes
both View-menu checkboxes going stale after a language switch (menu
rebuild previously hardcoded them back to checked regardless of actual
state) via try_state, since the very first menu-build call happens
before either state is registered.

Also folds in the co1 static-review fix for #356: maximizing the chat
pane hides tabs/stage based on chatPaneState alone, so turning off Show
User Chat while maximized left tabs/stage hidden too with no chat
controls left to recover from — gated the hidden condition on
showUserChat as well.

* fix(app): view-menu checkboxes now actually reflect Show Team Room / Show User Chat state

Two related bugs surfaced testing the new Show Team Room toggle:

1. The frontend's showTeamRoom/showUserChat state defaulted to true
   unconditionally with no way to query the real value on mount. Rust
   holds the only durable copy of these flags, so a webview remount that
   doesn't restart the Rust process (Vite HMR during tauri dev, or any
   future webview reload) would silently diverge — the frontend resets to
   true while Rust and the menu checkbox keep whatever was last set.
   Added a view_visibility query command the frontend now calls once on
   mount to seed its state from Rust instead of guessing.

2. Hiding Team Room or User Chat from the frontend (tab/chat-header
   right-click) never updated the native menu's checkbox. Root cause:
   Menu::get()/Submenu::get() only search a menu's own direct children,
   never nested submenus — since these checkboxes live inside the View
   submenu, app.menu().get(TEAM_ROOM_MENU_ID) can never find them, so
   set_checked() silently no-op'd. This was invisible when toggling from
   the native menu itself (macOS already flips the checkbox's own visual
   state on click, regardless of whether our code's call landed), but any
   external sync attempt failed outright. Now holds Arc-cloned handles to
   both CheckMenuItems in managed state (ViewMenuCheckboxes, rebuilt
   alongside the menu on every language switch) so every call site
   (on_menu_event and both set_*_visible commands) flips the actual item
   directly instead of re-searching a tree that doesn't contain it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant