-
🐢 Multi-minute tool-call hangs under parallel load — fixed — under heavy parallel file I/O, tool calls (even in-memory ones like
list_processes) could stall ~4 minutes then recover. Stats persistence is now non-blocking, the libuv threadpool is raised to 16, and stalled reads are cancelled via a flat 3-minute abortable timeout that fails before the client's opaque cutoff. #535 -
🔌 Remote: device no longer wedges offline after sleep/wifi loss — a half-open socket could park the realtime channel in
joiningforever, leaving the device offline until restart. Time-in-joiningis now bounded, forcing a channel recreate instead of wedging. #528 -
🛡️
write_filewon't silently clobber a file on a missing mode — an omittedmodeused to default torewriteand replace the whole file, so a dropped param on an intended append could destroy content. Writes to existing non-empty files now require an explicitappend/rewrite. Creating new or empty files keeps the zero-friction default. #546 -
🖼️ More reliable file previews — the preview widget now renders every file type from its own
read_filepull, withstructuredContentreturned as metadata-only on UI reads (no content duplication for the model). An 8s RPC bound and 10s watchdog replace a preview that could spin forever. #536
Contributors: @wonderwhy-er, @edgarsskore