mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-22 00:00:27 +00:00
feat(tui): add PI_DEBUG_REDRAW=1 env var for debugging full redraws
Logs redraw triggers to ~/.pi/agent/pi-debug.log when enabled.
This commit is contained in:
parent
0925fafe3b
commit
0d934091f4
1 changed files with 13 additions and 0 deletions
|
|
@ -867,14 +867,24 @@ export class TUI extends Container {
|
||||||
this.previousWidth = width;
|
this.previousWidth = width;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const debugRedraw = process.env.PI_DEBUG_REDRAW === "1";
|
||||||
|
const logRedraw = (reason: string): void => {
|
||||||
|
if (!debugRedraw) return;
|
||||||
|
const logPath = path.join(os.homedir(), ".pi", "agent", "pi-debug.log");
|
||||||
|
const msg = `[${new Date().toISOString()}] fullRender: ${reason} (prev=${this.previousLines.length}, new=${newLines.length}, height=${height})\n`;
|
||||||
|
fs.appendFileSync(logPath, msg);
|
||||||
|
};
|
||||||
|
|
||||||
// First render - just output everything without clearing (assumes clean screen)
|
// First render - just output everything without clearing (assumes clean screen)
|
||||||
if (this.previousLines.length === 0 && !widthChanged) {
|
if (this.previousLines.length === 0 && !widthChanged) {
|
||||||
|
logRedraw("first render");
|
||||||
fullRender(false);
|
fullRender(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Width changed - full re-render (line wrapping changes)
|
// Width changed - full re-render (line wrapping changes)
|
||||||
if (widthChanged) {
|
if (widthChanged) {
|
||||||
|
logRedraw(`width changed (${this.previousWidth} -> ${width})`);
|
||||||
fullRender(true);
|
fullRender(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -883,6 +893,7 @@ export class TUI extends Container {
|
||||||
// (overlays need the padding, so only do this when no overlays are active)
|
// (overlays need the padding, so only do this when no overlays are active)
|
||||||
// Configurable via setClearOnShrink() or PI_CLEAR_ON_SHRINK=0 env var
|
// Configurable via setClearOnShrink() or PI_CLEAR_ON_SHRINK=0 env var
|
||||||
if (this.clearOnShrink && newLines.length < this.maxLinesRendered && this.overlayStack.length === 0) {
|
if (this.clearOnShrink && newLines.length < this.maxLinesRendered && this.overlayStack.length === 0) {
|
||||||
|
logRedraw(`clearOnShrink (maxLinesRendered=${this.maxLinesRendered})`);
|
||||||
fullRender(true);
|
fullRender(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -931,6 +942,7 @@ export class TUI extends Container {
|
||||||
// Clear extra lines without scrolling
|
// Clear extra lines without scrolling
|
||||||
const extraLines = this.previousLines.length - newLines.length;
|
const extraLines = this.previousLines.length - newLines.length;
|
||||||
if (extraLines > height) {
|
if (extraLines > height) {
|
||||||
|
logRedraw(`extraLines > height (${extraLines} > ${height})`);
|
||||||
fullRender(true);
|
fullRender(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -961,6 +973,7 @@ export class TUI extends Container {
|
||||||
const previousContentViewportTop = Math.max(0, this.previousLines.length - height);
|
const previousContentViewportTop = Math.max(0, this.previousLines.length - height);
|
||||||
if (firstChanged < previousContentViewportTop) {
|
if (firstChanged < previousContentViewportTop) {
|
||||||
// First change is above previous viewport - need full re-render
|
// First change is above previous viewport - need full re-render
|
||||||
|
logRedraw(`firstChanged < viewportTop (${firstChanged} < ${previousContentViewportTop})`);
|
||||||
fullRender(true);
|
fullRender(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue