mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-21 10:00:39 +00:00
36 lines
No EOL
3.4 KiB
Markdown
36 lines
No EOL
3.4 KiB
Markdown
# Agent/TUI: Ctrl+C Display Artifact
|
|
**Status:** Done
|
|
**Agent PID:** 36116
|
|
|
|
## Original Todo
|
|
agent/tui: when pressing ctrl + c, the editor gets pushed down by one line, after a second it gets pushed up again, leaving an artifact (duplicate bottom border). Should replicate this in a test:
|
|
Press Ctrl+C again to exit
|
|
╭────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
│ > │
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
↑967 ↓12 ⚒ 4
|
|
|
|
## Description
|
|
Create a test in the TUI package that reproduces the rendering artifact issue when components dynamically shift positions (like when a status message appears and disappears). The test will verify that when components move back to their original positions after a temporary layout change, no visual artifacts (duplicate borders) remain. If the test reveals a bug in the TUI's differential rendering, fix it.
|
|
|
|
*Read [analysis.md](./analysis.md) in full for detailed codebase research and context*
|
|
|
|
## Implementation Plan
|
|
Create a test that reproduces the layout shift artifact issue in the TUI differential rendering, then fix the rendering logic if needed to properly clear old content when components shift positions.
|
|
|
|
- [x] Create test file `packages/tui/test/layout-shift-artifacts.test.ts` that reproduces the issue
|
|
- [x] Test should create components in vertical layout, add a temporary component causing shifts, remove it, and verify no artifacts
|
|
- [x] Run test to confirm it reproduces the artifact issue
|
|
- [x] Fix the differential rendering logic in `packages/tui/src/tui.ts` to properly clear content when components shift
|
|
- [x] Verify all tests pass (including the new one) after fix
|
|
- [x] Run `npm run check` to ensure code quality
|
|
|
|
## Notes
|
|
The issue was NOT in the differential rendering strategy as initially thought. The real bug was in the Container component:
|
|
|
|
When a Container is cleared (has 0 children), it wasn't reporting as "changed" because the render method only checked if any children reported changes. Since there were no children after clearing, `changed` remained false, and the differential renderer didn't know to re-render that area.
|
|
|
|
The fix: Container now tracks `previousChildCount` and reports as changed when the number of children changes (especially important for going from N children to 0).
|
|
|
|
This ensures that when statusContainer.clear() is called in the agent, the differential renderer properly clears and re-renders that section of the screen. |