Skip to content

fix(terminal): Echo von In-Band-Generatoren aus Replay-Hintergrundausgabe entfernen - #533

Merged
iret77 merged 1 commit into
mainfrom
fix/replay-in-band-generator-block
Oct 8, 2026
Merged

iret77 merged 1 commit into
mainfrom
fix/replay-in-band-generator-block

Conversation

@iret77

@iret77 iret77 commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Nach einem Reconnect zeigte ein devhost-Pane einen sichtbaren Block mit dem internen Completion-Generator:

warp_run_generator_command 1791414087539893 'COMMANDS=($(compgen -c)); TYPES=…'

Die ID entspricht 2026-10-07T23:01:27Z, zwei Sekunden nach dem Öffnen der betroffenen Daemon-Session. Diese Session wurde nach einem App-Neustart mit replay 270927 bytes from seq 0 wieder angehängt. Der Block ist also das nachgespielte ursprüngliche Echo.

Live startet der Client den aktiven Block vor dem Schreiben (start_active_block_for_in_band_command über before_write_fn), sodass das Echo im versteckten In-Band-Block landet. Beim Replay fehlt diese clientseitige Markierung. Das Echo wird zu Hintergrundausgabe. EarlyOutput::preexec holt es nur unter engen Bedingungen zurück (Typeahead-Modus, Bootstrap, Blockzustand), und finalize_block_and_advance_list schließt den Hintergrundblock bei In-Band-Blöcken nicht ab. Der Block bleibt sichtbar.

Änderung

  • Neu: BlockList::remove_echoed_in_band_command (terminal/model/blocks.rs).
  • BlockList::preexec ruft sie bei einem In-Band-Kommando auf. Entfernt wird nur ein laufender, unfertiger Hintergrundblock, dessen getrimmter Inhalt exakt die Echo-Zeile des Kommandos ist. Andere Hintergrundausgabe bleibt unverändert.
  • Live-Verhalten ändert sich nicht: Live landet das Echo im bereits gestarteten In-Band-Block, es entsteht kein solcher Hintergrundblock.

Tests

blocks_test.rs:

  • Echo ohne clientseitige Markierung, danach In-Band-preexec und command_finished_and_precmd. Erwartet: Der Hintergrundblock ist weg, der aktive Block ist In-Band, und kein sichtbarer Block enthält den Generator.
  • Negativfall: Unabhängige Hintergrundausgabe ([1]+ Done …) bleibt beim In-Band-preexec erhalten.

Restrisiken und Abgrenzung

Verifikation


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

…gabe entfernen

Beim Re-Attach einer Daemon-Session wird die PTY-Ausgabe ohne die
clientseitige In-Band-Markierung (start_active_block_for_in_band_command)
erneut geparst. Das Shell-Echo von `warp_run_generator_command …` landete
dadurch als Hintergrundausgabe in einem sichtbaren Block.

BlockList::preexec entfernt bei einem In-Band-Kommando jetzt einen
laufenden, unfertigen Hintergrundblock, dessen getrimmter Inhalt exakt
der Echo-Zeile des Kommandos entspricht. Andere Hintergrundausgabe bleibt
unverändert; das Live-Verhalten ändert sich nicht.
@iret77
iret77 merged commit 14505c0 into main Oct 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant