fix(tui): fixed audited scrollback tail rows
Separated audited offerable transcript rows from durable snapshot rows so lower finalized content below a live block can be repaired instead of duplicated when the live block grows. Added transcript and virtual-terminal regressions for the lower finalized tail case. Fixes #4326
This commit is contained in:
@@ -2,6 +2,16 @@ import { describe, expect, it } from "bun:test";
|
||||
import { TranscriptContainer } from "@oh-my-pi/pi-coding-agent/modes/components/transcript-container";
|
||||
import type { Component } from "@oh-my-pi/pi-tui";
|
||||
|
||||
class FinalizedBlock implements Component {
|
||||
#lines: string[];
|
||||
constructor(lines: string[]) {
|
||||
this.#lines = [...lines];
|
||||
}
|
||||
render(width: number): string[] {
|
||||
return this.#lines.map(line => line.slice(0, width));
|
||||
}
|
||||
}
|
||||
|
||||
class MutableLiveBlock implements Component {
|
||||
#lines: string[];
|
||||
constructor(lines: string[]) {
|
||||
@@ -34,4 +44,19 @@ describe("transcript streaming commit (assistant text)", () => {
|
||||
// off head must be committable to native scrollback (tmux pane history).
|
||||
expect(chat.getNativeScrollbackCommitSafeEnd()).toBe(3);
|
||||
});
|
||||
|
||||
it("offers lower finalized siblings without making them durable", () => {
|
||||
const chat = new TranscriptContainer();
|
||||
const top = new FinalizedBlock(["top-0"]);
|
||||
const live = new MutableLiveBlock(["live-0"]);
|
||||
const tail = new FinalizedBlock(["tail-0", "tail-1"]);
|
||||
chat.addChild(top);
|
||||
chat.addChild(live);
|
||||
chat.addChild(tail);
|
||||
|
||||
expect(chat.render(80)).toEqual(["top-0", "", "live-0", "", "tail-0", "tail-1"]);
|
||||
expect(chat.getNativeScrollbackLiveRegionStart()).toBe(2);
|
||||
expect(chat.getNativeScrollbackSnapshotSafeEnd()).toBe(3);
|
||||
expect(chat.getNativeScrollbackOfferSafeEnd()).toBe(6);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user