Skip to content

Terminal: an OmO pane's side panel draws ragged rows, dotted underlines and a doubled context meter #739

Closed

Description

@hong-tm

What happened

In the terminal view, an OmO pane's side panel (the panel OmO's own TUI draws: SESSION / model /
elapsed / tokens / cache / CONTEXT / FILES / MEMORY) renders wrong. Three defects, all of them
inside the panel's rows:

  1. The FILES rows are ragged. Rows that should start in one column start at x 320, 324, 331,
    299, 312, 318, 340 and 299 px in the attached crop. Measured from the PNG, where one cell is
    8.1 px wide, that is a spread of 5 cells. The same rows read from herdr itself are one column,
    each starting with the same leading cell.

  2. Every FILES row and both MEMORY rows carry a dotted line. 3 px on, 2 px off, 5 px period,
    starting just left of the row's first glyph and running to the panel's right edge, well past the
    end of the row's text. The pane's text has no such characters: the same rows in
    herdr pane read --format ansi are plain text followed by spaces, with no box or dash character
    and no underline attribute anywhere in the read. The line is drawn while rendering, it is not
    sent by the app.

  3. The CONTEXT meter is painted twice. A short bar on the used line (crop y 116-128) and the
    full bar on the line below (y 130-145), and each bar has a gap inside it (16 px in the first,
    6 px in the second). A run of block cells tiles with no gap, and the app paints one bar.

What I expected: the panel's rows in one column, one meter row, no dotted lines, matching what the
pane's own text says.

Steps:

  1. Open a pane that runs OmO with its side panel on (terminal at least 120 columns wide, omo
    tuiMode: fullscreen, so the panel is the right-hand column).
  2. Let a turn run so the FILES and MEMORY sections fill in.
  3. Look at the panel: the FILES rows drift, every file row has a dotted line under it, and the
    context meter is drawn on two lines.

How often

Every time

herdr web ui version

0.4.5

How it runs

herdr plugin

Server PC

Ubuntu 24.04.5 LTS x64 (AMD EPYC 7663), herdr 0.9.3

Device and browser

Desktop browser window. From the crop: one cell is 8.1 x 16 px, which is the default 13 px terminal
font at device pixel ratio 1.

How the device reaches the server

This PC (localhost)

How it signs in

Nothing (this PC)

Agent and PC

OmO (omo-ai 5.1.28, engine senpi 2026.10.10-10), local PC. The panel is OmO's own TUI side panel
(side_panel in omo's config, tuiMode: fullscreen).

Screenshots or logs

Evidence: a crop of the pane (718 x 564 px). Its background is exactly #181613, this app's amber
dark terminal background, which is how I know the render comes from this app and not from herdr's
own terminal. Every measurement above is taken from that image; say so and I will attach it.

Two controls, both of the same kind of pane on the same server:

  • The same pane over SSH in Termius, a native terminal: the panel looks right.
  • Read by herdr itself (not by the app), a different OmO pane, same OmO build:
$ herdr pane read w2:p27 --source visible
...
FILES  8 changed
 M .gitignore  +3/-0
 M AGENTS.md  +9/-8
?? .agents/
?? .herdr-web-ui/
?? artifacts/
?? reports/
?? skills-lock.json
?? zammad/
MEMORY  chat-efaa4c77
...
used    <bar: 3 filled cells, then 24 shaded cells> 8%

Those rows are one column with one leading cell each, no dotted line under any of them, and the
meter is one row. The same read with --format ansi carries no underline SGR around them, so the
dotted line in the screenshot exists only in the render.

Related: #289 (box-drawing lines are broken) and #268 (a wide glyph sits wrong in its two-cell
slot) look like the same family of glyph placement problems, but the defective rows here are ASCII
and the meter's block cells are the only non-ASCII glyphs involved.

Activity

  1. hong-tm commented on Oct 10, 2026

    @hong-tm
    Author

    What happened

    20261010-1401-24.7572411.mp4
  2. devswha commented on Oct 11, 2026

    @devswha
    Owner

    Thanks for the detailed report and the video. #763 fixes the dotted lines: OmO wraps each panel row in an OSC 8 link with its own scheme, herdr keeps that link open over the row's padding, and xterm.js draws a dashed underline under every linked cell. The web UI now leaves out links it cannot open.\n\nThe ragged FILES rows and the doubled context meter did not reproduce here (OmO 5.1.29 with , herdr 0.9.3, side layout at 156 columns), and the frames of your video show aligned rows too. Could you share:\n\n1. the crop you mentioned, and\n2. at the moment it looks wrong, the browser terminal's size against the pane's (for example typed in a shell pane of the same tab, and the window width)?\n\nOne possible cause is a browser grid narrower than the pane, where a cursor position past the last column wraps the rest of the row. That is unconfirmed, so the issue stays open for now.

  3. hong-tm commented on Oct 12, 2026

    @hong-tm
    Author

    I recorded in the same screen, one is from web one is from the termius. The resolution is set to 1920 * 1080 and showing the same session. The side panel keep displacement during the scroling and it is not happend in the termius.

    recording.mp4
  4. hong-tm commented on Oct 14, 2026

    @hong-tm
    Author

    The newer recording in my October 12 comment compares the same OmO session in the Web UI and Termius on the same screen at 1920 x 1080:

    #739 (comment)

    The behavior I am reporting there is displacement of the side panel while scrolling in the Web UI. It does not happen in Termius. Please check the scrolling portions of that newer recording; aligned rows in a still frame do not capture the behavior I mean. This is separate from the dotted underlines addressed by #763.

    The OmO configuration used for this setup has side_panel.enabled: true and tuiMode: "fullscreen". In the OmO 5.1.30 plugin I checked, fullscreen supplies the layout needed for the right-hand column. Regular mode puts the panel above the editor, so switching to regular mode changes the layout being tested.

    The 1920 x 1080 figure is the screen resolution, not a measurement of the browser terminal grid. I do not yet have synchronized browser grid and pane dimensions from the moment the displacement occurs, so the width-mismatch explanation remains unconfirmed.

    Could you check the scrolling/repaint behavior in the newer recording, and specify the browser-side measurement you need to compare with the pane's columns and rows?

  5. devswha commented on Oct 17, 2026

    @devswha
    Owner

    Thanks, the scrolling recording pinned it down. Chrome compresses runs of fullwidth punctuation such as ,。(), and the web terminal measured those characters while they were compressed. Every later cell of a row containing them was drawn too far right, so the side panel moved as different transcript lines scrolled beside it. Termius draws text natively, so it was not affected. A fix is in review (#1300). Once it ships, could you check whether the doubled context meter is gone too? We could not reproduce that part.

  6. devswha commented on Oct 19, 2026

    @devswha
    Owner

    Closing: the side panel shifting while scrolling is fixed by #1300 (Chrome compressed runs of fullwidth punctuation, so every later cell of those rows was drawn too far right), and the dotted underlines by #763. The doubled context meter did not reproduce and most likely was the shifted row beside it. Please reopen if it still shows on a release with #1300.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions