feat(cli): add sticky todo panel to app layouts#3507
Conversation
wenshao
left a comment
There was a problem hiding this comment.
No issues found. LGTM! ✅ — gpt-5.5 via Qwen Code /review
|
Hi @shenyankm, this PR currently has merge conflicts with |
Okay, please wait a moment. |
wenshao
left a comment
There was a problem hiding this comment.
No issues found. LGTM! ✅ — gpt-5.5 via Qwen Code /review
|
This PR currently has merge conflicts. Please resolve the conflicts with the latest |
wenshao
left a comment
There was a problem hiding this comment.
No issues found. LGTM! ✅ — gpt-5.5 via Qwen Code /review
|
@shenyankm This PR is approved and ready to merge — the only remaining blocker is the merge conflict with Could you rebase onto the latest |
3910fc8 to
e74ade8
Compare
| const hasAgents = agents.size > 0; | ||
| const isAgentTab = activeView !== 'main' && agents.has(activeView); | ||
| const stickyTodoWidth = Math.min(uiState.mainAreaWidth, 64); | ||
| const shouldShowStickyTodos = |
There was a problem hiding this comment.
[Suggestion] The sticky todo visibility predicate hides the panel for dialogsVisible and WaitingForConfirmation, but it does not account for uiState.isFeedbackDialogOpen. The feedback dialog is rendered inside Composer, not through DialogManager, so dialogsVisible remains false and the sticky todo panel can stay visible above the feedback dialog, stealing vertical space and visually competing with it. The same condition should also be reflected in the AppContainer measurement predicate and screen-reader layout if this predicate is centralized.
| const shouldShowStickyTodos = | |
| const shouldShowStickyTodos = | |
| uiState.stickyTodos !== null && | |
| !uiState.dialogsVisible && | |
| !uiState.isFeedbackDialogOpen && | |
| uiState.streamingState !== StreamingState.WaitingForConfirmation; |
— gpt-5.5 via Qwen Code /review
There was a problem hiding this comment.
Thanks for the suggestion. I’ve addressed it in 654930c by hiding the sticky todo panel when uiState.isFeedbackDialogOpen is true, and kept the AppContainer measurement predicate and both default/screen-reader layouts consistent. CI is green now. Could you please re-review when convenient?
wenshao
left a comment
There was a problem hiding this comment.
No issues found. LGTM! ✅ — gpt-5.5 via Qwen Code /review
|
Verified the sticky todo behavior locally with
Squashing in. Thanks for the contribution! |
* feat(cli): add sticky todo panel to app layouts * fix(cli): hide sticky todos during feedback dialog


TLDR
This PR adds a sticky todo panel to the CLI so the latest task list stays visible while the conversation continues.
It addresses the request in #2987 by making task progress easier to track without scrolling back through prior output.
Screenshots / Video Demo
Dive Deeper
This change introduces a dedicated sticky todo rendering path in the CLI UI.
Key points:
UIStatefixture shapeReviewer Test Plan
Run the targeted tests:
cd packages/clinpx vitest run src/ui/App.test.tsx src/ui/layouts/DefaultAppLayout.test.tsx src/ui/layouts/ScreenReaderAppLayout.test.tsx src/ui/components/StickyTodoList.test.tsx src/ui/utils/todoSnapshot.test.tsBuild the CLI:
npm run buildManually verify the behavior in the CLI:
Example prompt:
Create a todo list with three implementation steps, mark one step in progress, and continue updating it while you work.Testing Matrix
Linked issues / bugs
Closes #2987