You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Disconnect-tolerant streaming. A vanished WebView used to block the generation thread forever inside the response pipe - one leaked thread + buffer per disconnect, the main crash vector. Streams now write through a sink that detaches on failure, a watchdog closes pipes that stall for 45s, and a reconnect replays the text so far instead of starting a duplicate (paid) upstream call.
Model list no longer hangs. Fetch attempts are throttled (failures included), the request never blocks, timeouts are short, and the last good listing is cached on device.
Crash logs. A global handler writes stack traces to the app log, with a new Share Logs menu item - future crashes are no longer unexplained.
Update dialogs/toasts are guarded against a destroyed screen, request bodies are capped, the server binds loopback only, and Activity/WebView callbacks are cleaned up on exit.
Media
Native photo attach. New gallery button next to the paperclip opens the system photo picker (camera when the page requests capture).
Uploads actually work./api/files and /api/files/images store multipart uploads on device and serve them back; images are inlined into the model request in the shape each route expects (chat completions, Anthropic, Responses) and attachments survive reloads.
Context tracker & tools
The composer now reports token usage (on_token_usage / on_context_usage events, persisted per message) and serves /api/endpoints/token-config, so the context gauge works.
/api/roles grants the client's permission checks, restoring the composer toolset; web search is implemented on-device via a keyless DuckDuckGo lookup, and artifacts render client-side.
Android
versionCode 10 / versionName 1.0.9, signed with the same release key.