Favorites dock: minimized chats as bottom task bars, favorites always docked #29

Merged
ClaudiuSchuster merged 1 commit from oss-oo/observatory-favorites-dock-dock20260924 into main 2026-09-24 19:26:55 +00:00
Owner

What

  • Minimize-to-dock: every response modal / transcript panel gets a – minimize control next to ✕. Minimized = a compact item in a fixed glass dock at the page bottom: truncated title, live status dot, unread badge, expand (⤢), remove (✕). Clicking the item (or ⤢) reopens the panel in the view it was last shown in (response modal vs full transcript).
  • Favorites (the core): ★ toggle per row and inside every panel. FAVORITED sessions are ALWAYS present in the dock — persisted in observatory-state.json ("favorites" key, same pattern as "pinned"), never touching the ZCode DB, surviving reloads AND closes:
    • ✕ / Esc / backdrop on an expanded favorite panel = minimize back to the dock (never fully gone).
    • ✕ on a non-favorite panel = close fully, dock item removed.
    • Unfavoriting removes the dock item unless the panel is currently open.
  • Live items: status dot off the sessions poll; unread badge counts messages since minimizing (baseline captured at minimize time, cleared on expand); a 🔔 doorbell as the newest message adds the blue glow. Tooltips carry full name + project path.
  • Ergonomics: Esc minimizes favorites instead of closing; dock items are keyboard-focusable (Enter/Space expand); the bar hides when empty and scrolls horizontally at narrow widths (108 px item floor).
  • Concept hygiene: pinned = table ordering, favorited = dock presence — two independent flags, documented in the README with the API examples (/api/favorite, /api/unfavorite, "favorite" per row in /api/sessions).
  • Works for Running / History / Archived alike; independent of pinned-first ordering; opening an already-docked session from a row expands it (one item per session, never duplicated).

Verification

  • py_compile + --help boot check ✔
  • Pinned Super-Linter (slim v8.7.0, local podman, RUN_LOCAL) EXIT 0 ✔
  • CDP smoke on a fixture DB (free port, isolated state): 17/17 checks — dock hidden when empty, favorite-from-row, active state, minimize/expand, Esc semantics, unread badge + doorbell glow, expand clears, X-on-favorite minimizes, last-view reopen, non-favorite close-removes-item, reload persistence, keyboard expand, narrow-width floor + scroll, remove-all hides the bar. Evidence screenshots: /tmp/pinky-dock-evidence/
## What - **Minimize-to-dock:** every response modal / transcript panel gets a **– minimize** control next to ✕. Minimized = a compact item in a fixed glass dock at the page bottom: truncated title, live status dot, unread badge, expand (⤢), remove (✕). Clicking the item (or ⤢) reopens the panel in the view it was last shown in (response modal vs full transcript). - **Favorites (the core):** ★ toggle per row and inside every panel. FAVORITED sessions are ALWAYS present in the dock — persisted in `observatory-state.json` (`"favorites"` key, same pattern as `"pinned"`), never touching the ZCode DB, surviving reloads AND closes: - ✕ / Esc / backdrop on an expanded **favorite** panel = minimize back to the dock (never fully gone). - ✕ on a **non-favorite** panel = close fully, dock item removed. - Unfavoriting removes the dock item unless the panel is currently open. - **Live items:** status dot off the sessions poll; unread badge counts messages since minimizing (baseline captured at minimize time, cleared on expand); a 🔔 doorbell as the newest message adds the blue glow. Tooltips carry full name + project path. - **Ergonomics:** Esc minimizes favorites instead of closing; dock items are keyboard-focusable (Enter/Space expand); the bar hides when empty and scrolls horizontally at narrow widths (108 px item floor). - **Concept hygiene:** pinned = table ordering, favorited = dock presence — two independent flags, documented in the README with the API examples (`/api/favorite`, `/api/unfavorite`, `"favorite"` per row in `/api/sessions`). - Works for Running / History / Archived alike; independent of pinned-first ordering; opening an already-docked session from a row expands it (one item per session, never duplicated). ## Verification - `py_compile` + `--help` boot check ✔ - Pinned Super-Linter (slim v8.7.0, local podman, RUN_LOCAL) EXIT 0 ✔ - CDP smoke on a fixture DB (free port, isolated state): 17/17 checks — dock hidden when empty, favorite-from-row, active state, minimize/expand, Esc semantics, unread badge + doorbell glow, expand clears, X-on-favorite minimizes, last-view reopen, non-favorite close-removes-item, reload persistence, keyboard expand, narrow-width floor + scroll, remove-all hides the bar. Evidence screenshots: /tmp/pinky-dock-evidence/
Favorites dock: minimized chats as bottom task bars, favorites always docked
All checks were successful
Checks / Functional checks (pull_request) Successful in 14s
a3847adfaf
Every response/transcript panel gains a minimize (–) control next to its
close (X): the panel becomes a compact item in a fixed glass dock at the
bottom — title, live status dot, unread badge, expand, remove. Favorites
(row star + in-panel star) are observatory-local state (observatory-state
.json, "favorites" key, same pattern as "pinned") and are ALWAYS docked,
surviving reloads and closes: X/Esc on a favorite panel minimizes it back
to the dock, X on anything else closes fully and takes its dock-only item
with it; unfavoriting removes the item unless the panel is open.

Dock items are live on the existing cadence: status dot from the sessions
API, unread badge = messages since minimizing (captured at minimize time,
cleared on expand, doorbell-as-newest adds the blue glow). Clicking an
item reopens the last-shown view (response modal vs full transcript); the
bar hides itself when empty and scrolls horizontally at narrow widths.
Works for Running/History/Archived alike, independent of pinned-first
table ordering (pinned = table order, favorited = dock presence).

Server: load/save_favorites + /api/favorite,/api/unfavorite (shared
generic local-flag handler with pin/unpin), "favorite" per row in
/api/sessions. README gains the dock section; install.sh notes the state
carry-over covers favorites too.
Sign in to join this conversation.
No reviewers
No labels
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
OSS-Singularity/zcode-dispatch-observatory!29
No description provided.