* fix(tui): repaint composer after macOS input
* feat(tui): add compact conversation history
* fix(tui): repaint messages after streaming and scroll
* fix(tui): polish history focus and scrollbar styling
GAnet 0.5.0 ships macOS sidecars, so the SOP no longer stops on non-Windows
desktops. The flow itself is unchanged; the edits are the platform facts GA
needs to follow it on a Mac:
- default component location moves to ~/.genericagent/components/GAnet on
every platform; a checkout under the GA root's temp/ is wiped by the temp
rewind mechanism
- launcher is ganet.cmd on Windows and ganet.sh on macOS; the bound Python
shim is ga_python.cmd / ga_python.sh
- sidecar data lives in %LOCALAPPDATA%\GenericAgent\GAnet or
~/Library/Application Support/GenericAgent/GAnet; login autostart is the
HKCU Run entry or a LaunchAgent; both are removed by remove_environment()
- release entries for macOS use platform "darwin", and verify_release checks
Mach-O as well as PE
- on macOS, setup and upgrades request the screen-recording permission at the
end and report it in screen_access; it is advisory and never blocks
- macOS needs no sudo; git/python placeholders without Xcode CLT must not be
invoked
_start_conductor built DETACHED_PROCESS/CREATE_NEW_PROCESS_GROUP before the
os.name=='nt' branch, causing AttributeError and crashing Conductor autostart
on Ubuntu. Keep those flags Windows-only; Linux uses start_new_session.
Rebuild the compiled renderer from abraxas914/GenericAgent source
commit 9fe5d69b85cfad8778ace84b6f69bc75f9e0d392, refreshing:
- New-chat default model tag: the selected-model badge in Settings
and the composer now read '新会话默认' / 'New chat default'.
- Model selectors display the configured profile name (备注名) so the
same model served by different providers is distinguishable.
- desktop_bridge: syncing mixin llm_nos references when a profile is
renamed, preventing orphan references in the mixin config.
- Release publisher sets GH_REPO so 'gh release create' resolves the
target repository without checking out source, satisfying the
publisher security contract while fixing the prerelease step.
Provenance and verifier updated to the new source commit and the
LF-normalized content manifest (98 generated assets).
Streamlit >=1.62 resets a fragment's outside-container wrapper cursor to 0
on every fragment rerun and GCs children not re-emitted, so incremental
appends (_stream_frozen) lost folded expanders mid-stream. Merge _stream_ls
into the single _stream_fh host and repaint expanders + live tail every
tick; the unconditional write also claims the slot on the initial run
(no 'could not reserve a stable position') and removes the empty
placeholder that pushed the first reply's bubble down.
HTTP 200 SSE/body overload/rate-limit now raises ConnectionError via
shared _raise_if_retryable_overload so _stream_with_retry can backoff.
Covers OpenAI error/response.failed/json failed; Claude error reuses helper.