Skip to content

v20260621-nightly

@gnachman gnachman tagged this 21 Jun 02:07
The orchestrator's get_screen_contents tool flattened the terminal grid
to plain text, discarding every cell's rendering attributes. Inline shell
suggestions and ghost completions (zsh-autosuggestions, fish autosuggest,
Claude Code's suggested reply) are rendered faint, so they came through
byte-for-byte identical to text the user actually typed, which routinely
fooled an agent into mistaking a suggestion for an entered command.

Capture the per-cell faint bit (via a new ScreenCharIsFaint accessor,
since Swift can't read C bitfields) and the per-character grid coords,
then weave markup into the extracted text:
  - faint runs wrapped in dim markers
  - a cursor marker spliced at the cursor position
  - images collapsed to an image placeholder
All three use U+27E8/U+27E9 angle brackets, which effectively never occur
in real terminal output. The tool description documents the tokens.

extractScreenText/cursorMarkupIndex now take a VT100Screen instead of a
PTYSession so the logic is unit-testable; added tests covering each
markup end-to-end and composed.
Assets 2
Loading