Skip to content

Stage 385 / v0.51.92 — Release BP — 7-PR full sweep batch#2570

Merged
nesquena-hermes merged 18 commits into
masterfrom
stage-385
May 19, 2026
Merged

Stage 385 / v0.51.92 — Release BP — 7-PR full sweep batch#2570
nesquena-hermes merged 18 commits into
masterfrom
stage-385

Conversation

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Stage 385 / v0.51.92 — Release BP — 7-PR full sweep batch

Seven contributor PRs across runtime adapter docs, workspace tree polish, project move UX, compression handoff metadata, Grok OAuth catalog, anonymous custom endpoint picker fallback, and PWA-standalone affordances.

PRs in this batch

Fixed

Added

Documentation

Verification

Pre-Opus 7-point gate — green

  • JS syntax, Python ast.parse, merge markers, CHANGELOG TBD placeholders, CJK escapes, Docker surface, concurrent primitives — all clean.

Tests

  • Pytest: 5985 passed, 6 skipped, 3 xpassed, 8 subtests passed in 127.84s baseline; re-run after followup 5985 passed in 114.40s (+16 tests vs v0.51.91).
  • Browser API sanity (port 8789): 11/11 PASS.

Opus advisor — GO-WITH-FOLLOWUP (one applied inline, one filed)

Verified each of five self-verify concerns with file:line citations:

  1. fix: surface auto-compression handoff #2567 compression session-id continuityput('compressed', …) writes to the live SSE queue but is NOT journaled today, so a PWA pageshow reload after rotation simply misses the event entirely. The eventSid !== activeSid guard was moot because the event never reached late-attached browsers. Followup applied inline: widened the compressed listener at static/messages.js:1813 to also accept d.new_session_id === activeSid and d.continuation_session_id === activeSid, so the listener is robust if/when this event is added to journal replay. Updated two source-string tests (test_auto_compression_card.py:225,237) to match the new guard.

  2. fix: add Grok OAuth provider catalog support #2568 + fix(config): keep anonymous custom endpoints in picker when /v1/models probe fails #2550 composition on api/config.py — Clean. elif pid == "custom" and cfg_base_url: (api/config.py:3859) is strictly gated on pid == "custom"; xai-oauth uses its own static fallback path and never enters this branch. ✅

  3. feat(ui): add PWA standalone reload button and pull-to-refresh gesture #2548 PWA pull-to-refresh — Acceptable. static/ui.js:1921 runtime gate covers iOS navigator.standalone + media-query for Android. el.scrollTop>0 exit-on-touchstart + 80px threshold + smooth-scroll-to-top fallback is sound. .messages has overscroll-behavior-y:contain which suppresses iOS rubber-band where PWA standalone is supported. Indicator overlays the top via position:absolute; top:0; transform:translateY(-100%)→0 — matches standard Twitter/Reddit PTR convention. Note: not device-tested on iOS, inferred from spec.

  4. fix: refresh project move cache #2561 _allSessions cache mutation — Safe. _allSessions entries are plain mutable JSON-parsed objects, no identity-based memoization observed. Other write paths use shallow rebuild as convention only, not requirement. ✅

  5. fix: align workspace tree file icons #2563 placeholder width — Works as shipped. Both .file-tree-toggle and .file-tree-toggle-placeholder use literal 10px. Followup filed as separate issue for optional polish: extract to --file-tree-toggle-width: 10px at :root.

Triage actions taken this sweep (not in the batch)

Notes on CHANGELOG mechanics

The resolver script auto-merged five new contributor entries into the [Unreleased] block, but their attribution lines and ordering needed cleanup before stamping. Resolved by rebuilding the v0.51.92 section structure inline with proper "Fixed / Added / Documentation" subheadings.

keyos and others added 18 commits May 18, 2026 18:10
Adds a reload button to the app titlebar visible only in PWA standalone
or fullscreen mode, and a pull-to-refresh gesture on the messages container
that smooth-scrolls to the top before activating.

The reload button sits next to the message count label and provides a
one-tap refresh for users who installed the WebUI as a home-screen app
where browser navigation controls are unavailable.

The pull-to-refresh gesture detects downward drag at the top of the
message list, shows a visual indicator ('Pull to refresh' / 'Release to refresh'),
and reloads on release past the 80px threshold. When triggered mid-conversation,
it smooth-scrolls to the top first.
…s probe fails

When an anonymous custom endpoint (bare base_url, not a named custom_providers[] entry) fails its /v1/models probe, the provider group was silently dropped from the model picker entirely. This made the endpoint unusable even when /v1/chat/completions would work fine.

The fix adds an elif branch: if pid == 'custom', a cfg_base_url is configured, but no models were returned by the probe, the group is still added with an empty model list. Users can then select the Custom group and type a model ID manually in the picker's free-form input.

Closes #2542.
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
@nesquena-hermes nesquena-hermes merged commit 71c7035 into master May 19, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants