Repository navigation
Releases: takora-dev/bentomux
Releases · takora-dev/bentomux
Release list
v0.2.70
hermes --tuiand other agent CLIs could leave a stray character on
screen after a long session: scrolling away cleared it, scrolling back
brought it back.- Cause one: xterm 6.0.0 measures emoji with the Unicode 6 width table, where
a glyph like 🔥 is one cell wide. Every TUI counts it as two, so each cursor
move after an emoji landed a column off, and the cell it shifted over kept
the old contents. The terminal now loads the Unicode 11 table, the same one
VS Code uses. - Cause two: a multi-byte glyph split across two pty reads reached the
daemon's parser as bare continuation bytes, one junk cell each, shifting the
rest of the row. The parser now receives the decoded text.
v0.2.69
- Scrolling no longer drags the whole window. After switching to another app
and coming back, a wheel or trackpad gesture over a terminal pane moved the
titlebar and sidebar instead of the pane, and only a restart brought
scrolling back. - xterm consumes a wheel event in two places — its own scrollback viewport and
the mouse-report listener it binds when the app enables wheel tracking — and
its generic handler does nothing for a buffer that has scrollback. When both
of those declined the same event, nothing cancelled it, so it left the pane
and landed on #tabbody, which was scrollable. - The document itself is never a scroller now, and a terminal route fills
#tabbody exactly, so the only scroller inside a pane is the xterm viewport. - A pane-level guard consumes any wheel xterm did not take and applies it to
the buffer, so scrolling still works when xterm's viewport has stopped
following it. The configured sensitivity of 3 is unchanged, so trackpad
scrolling feels exactly as it did in v0.2.68.
v0.2.68
- Scrolling with a trackpad works again. xterm's scrollSensitivity defaulted
to 1, and a macOS trackpad reports deltas of only a few pixels per event:
at 1 nearly every event moved less than one cell and was swallowed by the
fractional accumulator before anything reached the screen. A gentle flick
scrolled a couple of lines at most, or nothing at all. - Agent CLIs were hit hardest. Claude Code, codex, pi, opencode and droid all
run in the alternate screen with mouse tracking on, so the wheel arrives as
an SGR button 4/5 report that the same function gates: a dropped event is a
scroll the app never sees. Gemini stays on the main screen and keeps using
xterm's own scrollback, so it was never affected. - 3 is the multiplier VS Code ships for its own xterm panes.
v0.2.67
- Panes no longer garble their text. xterm rethrows a parser error on a
microtask, far from the write that caused it, and the chunk's callback
never fires - so the pane kept writing every later byte into a screen one
frame of escape state short. A pane whose oldest chunk has not been parsed
after a few seconds is now replayed from the pty host, which owns the
authoritative screen. - A replay no longer turns text into box characters or puts lines in the
wrong rows. vt100 keeps no charset state, so a pane left in DEC graphics
mode rendered the replay as line-drawing glyphs, and a scroll region or
origin mode left by a TUI moved every line. The replay now resets both
before the grid lands. - A replay no longer discards scrollback. It clears the visible screen only;
the saved lines above it are your history and they stay. - Panes no longer drift to a different width than the shell. A resize is a
request the pty host can clamp or drop, and the renderer used to keep the
grid it asked for. The host now reports the grid it actually applied and
the renderer reconciles before falling back to drawing at the pty's size. - Output for a mounted pane is written even when a frame is very large, and
a queued frame is never written twice.
Settings -> Updates
- Release notes link: opens the GitHub tag page for the version on offer, or
for the version you run when nothing is pending. - The installed version line no longer clings to the status card.
v0.2.66
- Panes no longer garble when you come back to a background tab. A hidden
pane's buffered output was truncated to its tail, and that tail starts
mid-escape and lands on a screen that scrolled on without those bytes.
The pty host already owns the authoritative vt100 screen per pane, so the
renderer now asks for a replay instead of writing a fragment. - Panes no longer flicker while an agent streams. The fit addon clears the
renderer before it compares sizes, so refitting an already-correct grid
repainted every cell on every layout pass - and a sidebar status tick is
one. The pty was also resized twice per change, and a TUI answers each
resize with a full redraw. - Panes no longer freeze and then dump output in one burst. Chunks were
queued behind requestAnimationFrame, which does not run while the window
is hidden or minimized, and the queue had no cap: a background run grew
it until a single enormous write blocked the parser. - A refused write now asks for a screen replay instead of being swallowed,
which used to drop a frame of escape state and render every later byte
into the wrong cells.
v0.2.65
- Terminal panes no longer garble or freeze. The vt100 parser panicked on
one-row and one-column grids, which poisoned the pty host's mutexes and
killed the daemon thread by thread. Grids are clamped to at least two
rows and two columns, a parser panic now costs one pane instead of the
daemon, and an unresponsive daemon is restarted instead of left hanging. - hermes is recognised as an agent again. Its /bin/sh shim execs python
with an inline bootstrap, so no argument token ever said "hermes"; the
install root and the hermes module paths identify it now. - The app no longer crashes with SIGSEGV when an agent changes state. The
macOS notification code mixed the legacy NSUserNotification client with
the modern UNUserNotificationCenter, and an Objective-C exception
unwinding into Rust killed the process. One client per process now: the
modern one inside a real .app bundle, the legacy one everywhere else.
v0.2.64
- Notifications now carry the default macOS sound instead of appearing
silently; the delivered request previously had no sound at all. - Foreground notifications keep asking for banner, list and sound, so a
test sent from the app's own window makes a sound too. - tauri dev's fallback path sets the same default sound.
If the banner is still silent, check System Settings > Notifications >
Bentomux > Play sound.
v0.2.63
- macOS deliveries now go through UserNotifications. The previous legacy
path was denied by usernoted once the permission check opened a modern
connection, which is why test notifications never arrived. - Notifications sent while the Bentomux window is focused are now shown
instead of being handed to a delegate that did not exist. - Windows: the permission check reads the right registry keys again, so a
blocked toast is detected and the user is pointed at the system settings. - Linux: repaired the notification settings command.
v0.2.62
- Working -> idle and working -> blocked now raise a native OS notification (macOS, Windows, Linux).
- New Settings toggle: Agent state notifications.
- Denied permissions now warn and offer to open the system notification settings.
- Send test notification button reports succeeded or failed inline.
- macOS bundles are ad-hoc signed instead of unsigned.