Skip to content

Redesign web UI + cancellable long-running jobs#3

Merged
izzoa merged 3 commits into
masterfrom
redesign-webui
Jun 1, 2026
Merged

Redesign web UI + cancellable long-running jobs#3
izzoa merged 3 commits into
masterfrom
redesign-webui

Conversation

@izzoa

@izzoa izzoa commented Jun 1, 2026

Copy link
Copy Markdown
Owner

Summary

Brings master up to date with the redesign-webui branch: a full web UI redesign, cancellable long-running jobs, and supporting fixes.

Web UI redesign

  • Glass icon-rail shell + ⌘K command palette (page search, action runner, quick vibes, g+key navigation).
  • Generator reimagined as an "AI-thinking" showpiece: live particle vector-field, four-phase progress tracker bound to the real generation pipeline, streaming terminal log, and a results playlist with removable tracks.
  • New Settings → Appearance (theme toggle, density, accent intensity; persisted across reloads). UI now defaults to light mode.
  • Refreshed logos/favicon/brand assets and regenerated README hero screenshots.

Cancellable long-running jobs

  • Every long-running job — library sync, embedding generation, MusicBrainz enrichment, audio analysis, Doctor fixes, and tagging — is now cancellable from the UI behind a single shared, shell-level confirmation that works from any page and the command palette.
  • Work loops stop cooperatively at their next checkpoint; the cancelled outcome is surfaced (no longer reported as completed).
  • Global "Cancel running task" command (⌘K) stops all TaskStore jobs plus an in-progress playlist generation.
  • Backend: generate_embeddings_for_tracks and generate_tags_batch honor a cancel_event between batches.

Fixes / cleanup

  • TaskStore.cancel / cancel_all_running now resume a paused loop so cancellation can't hang on await pause_event.wait().
  • Removed orphaned per-page cancel-confirm machinery in LibraryState (superseded by the shared shell dialog).
  • Also includes the earlier feat: Refresh AI model defaults and fix provider SDK compatibility commit (was never pushed to origin/master).

Verification

  • Black ✓ · Ruff ✓ · py_compile ✓
  • Full Reflex app graph builds (every event-handler reference resolves)
  • UI test suite: 97 passed, 1 skipped (incl. new TaskStore cancel-pause tests)

The corresponding OpenSpec changes (redesign-webui, cancel-running-jobs) are archived locally under openspec/changes/archive/.

Note: live interactive click-through of each job's cancel against a populated Plex library is deferred to pre-release QA (verified by code-trace + automated checks here).

izzoa added 3 commits May 29, 2026 13:45
Update default models to the current generation (balanced, cost-aware
tier): Gemini 3.5 Flash, GPT-5.4-mini, Claude Sonnet 4.6, Command A.
Remove the end-of-life gemini-2.0-flash-001 and the invalid
claude-opus-4-1 model ID.

Adapt provider request construction so the newer model families work
instead of returning 400s or empty output:
- OpenAI GPT-5/o-series: use max_completion_tokens + reasoning_effort and
  omit the unsupported temperature (shared is_openai_reasoning_model)
- Gemini 3: set thinking_level=LOW and use the model-default temperature
- Claude Opus 4.7+: omit sampling params (temperature/top_p/top_k), which
  those models reject with a 400; Sonnet/Haiku keep temperature
- Settings UI preselects the registry default instead of the
  alphabetically-first model; the "Test OpenAI" path is reasoning-safe

Embeddings are unchanged, so no FAISS re-index is required. Adds
request-compatibility tests; updates CHANGELOG and README.
Redesign the web UI around a glass icon-rail and a ⌘K command palette
(page search, action runner, quick vibes, g+key navigation). The
Generator becomes an "AI-thinking" showpiece: a live particle
vector-field, a four-phase progress tracker bound to the real generation
pipeline, a streaming terminal log, and a results playlist with removable
tracks. Add Settings → Appearance (theme toggle, density, accent
intensity; persisted across reloads) and default the UI to light mode.

Make every long-running job cancellable from the UI — library sync,
embedding generation, MusicBrainz enrichment, audio analysis, Doctor
fixes, and tagging — behind a single shared, shell-level confirmation that
works from any page and the command palette. Work loops stop cooperatively
at their next checkpoint and the "cancelled" outcome is surfaced (no longer
reported as completed). Add a global "Cancel running task" command (⌘K)
that stops all TaskStore-backed jobs plus an in-progress playlist
generation. Backend: generate_embeddings_for_tracks and generate_tags_batch
now honor a cancel_event between batches.

Remove the orphaned per-page cancel-confirm machinery in LibraryState
(request_cancel_sync / cancel_sync / request_cancel_audio /
cancel_audio_analysis, their dismiss siblings, and the show_*_confirm
vars), superseded by the shared AppState.request_cancel / confirm_cancel
dialog mounted in the shell.

Also: refresh logos, favicon, and brand assets; regenerate README hero
screenshots; add the Claude Design handoff bundle under docs/design/; and
gitignore .codex/.
TaskStore.cancel and cancel_all_running now also resume the job's pause
event, so a worker blocked on `await pause_event.wait()` wakes up, observes
the cancel signal, and exits — instead of staying stuck. Mirrors the
existing JobManager.cancel_stale_clients behavior. Add TaskStore tests
covering both cancel paths.

Latent today (audio pause has no UI control), but future-proofs the global
"Cancel running task" command and any re-exposed pause.
@izzoa izzoa merged commit b2633e7 into master Jun 1, 2026
3 checks passed
@izzoa izzoa deleted the redesign-webui branch June 1, 2026 18:56
izzoa added a commit that referenced this pull request Jun 1, 2026
Cut the v0.11.0 release. The feature work (web UI redesign + cancellable
long-running jobs) already landed on master via #3; this commit performs
the release bookkeeping:

- Bump version 0.10.0 -> 0.11.0 (pyproject.toml + src/plexmix/__init__.py)
- Promote Unreleased CHANGELOG entries to [0.11.0] - 2026-06-01
- Swap the central README logo to the new light app icon (assets/logo-light.svg)
- Refresh stale Docker image tag examples (:0.5.5 -> :0.11.0)

Breaking Changes: None
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