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
π Chat streaming no longer drops final content. Fixed a race where the done socket event arrived before the DB commit, causing a transient blank message. The streamed content now stays visible until the reload confirms it.
π Unflushed text no longer lost at end of chat responses. The final text buffer is now properly flushed and emitted before marking a message as done, across all exit paths (normal completion, cancellation, and errors).
π Intermediate chat state persisted during tool loops. Content and output items are now saved to the database between tool call iterations, so progress survives crashes or disconnects.
π§Ή In-memory task state cleaned up on completion. The _task_state dict entry is now removed when a chat task finishes (done, cancelled, errored, or max iterations), preventing unbounded memory growth.
π± Sidebar stays closed on mobile. The sidebar default breakpoint was raised to 1024px and an auto-close listener now collapses it whenever the viewport shrinks below 768px.
π Stale chat loads discarded. Rapid chat switches no longer apply data from a slow earlier load, fixing a race condition that could show the wrong conversation.
Changed
β‘ All blocking filesystem I/O offloaded to threads. File reads, writes, directory walks, search, archive creation, uploads, renames, and deletions in the workspace and tool routers now run via asyncio.to_thread(), preventing event-loop stalls under heavy file operations.
β‘ Port scanner made fully async. Platform-specific port scanning (Darwin lsof, Linux /proc, Windows netstat) and PID-to-process lookups now use asyncio.create_subprocess_exec or asyncio.to_thread instead of blocking subprocess.run.
β‘ Welcome endpoint system info collected off the event loop. The /welcome handler now gathers hostname, memory, disk, CPU, network, and process data in a background thread.