Problem (one or two sentences)
When a user scrolls upward while Zoo Code is working, the scroll-to-bottom control replaces pending approval controls. If a child task then requests finishTask approval, the child appears stuck because Complete subtask and return is no longer rendered.
Context (who is affected and when)
This affects users who require manual approval for subtask completion or other blocking actions and browse earlier chat output while a task is still running. The backend continues waiting normally, but the only control that can unblock it is hidden.
Reproduction steps
- Run Zoo Code in VS Code with subtask auto-approval disabled.
- Start a parent task that delegates to a child task.
- Let the child produce enough output for the chat to scroll.
- Scroll upward while the child is still working.
- Let the child call
attempt_completion, which creates a finishTask approval request.
- Observe the action row at the bottom of the chat.
This was reproduced deterministically in the real VS Code Extension Host using the repository's Playwright/Electron harness. The harness confirmed that the backend emitted a live finishTask ask while the webview rendered the down-chevron and omitted the completion button.
Expected result
Pending approval controls remain visible while the scroll-to-bottom action is available, so the user can approve the action without changing scroll position first.
Actual result
The scroll-to-bottom action replaces the approval controls. For finishTask, the child remains open indefinitely and appears to have failed to return to its parent.
Variations tried (optional)
App Version
3.80.1 / current main
API Provider (optional)
Not Applicable / Other
Model Used (optional)
Deterministic local mock
Zoo Code Task Links (optional)
Discord report: https://discord.com/channels/1497384592494297201/1513140102929453096/1543429204949991557
Relevant logs or errors (optional)
No backend error is emitted. The task is blocked waiting for the hidden approval.
Root cause
webview-ui/src/components/chat/ChatView.tsx renders the action row with a mutually exclusive branch: when showScrollToBottom is true, it renders scroll controls instead of primaryButtonText / secondaryButtonText approval controls.
Problem (one or two sentences)
When a user scrolls upward while Zoo Code is working, the scroll-to-bottom control replaces pending approval controls. If a child task then requests
finishTaskapproval, the child appears stuck because Complete subtask and return is no longer rendered.Context (who is affected and when)
This affects users who require manual approval for subtask completion or other blocking actions and browse earlier chat output while a task is still running. The backend continues waiting normally, but the only control that can unblock it is hidden.
Reproduction steps
attempt_completion, which creates afinishTaskapproval request.This was reproduced deterministically in the real VS Code Extension Host using the repository's Playwright/Electron harness. The harness confirmed that the backend emitted a live
finishTaskask while the webview rendered the down-chevron and omitted the completion button.Expected result
Pending approval controls remain visible while the scroll-to-bottom action is available, so the user can approve the action without changing scroll position first.
Actual result
The scroll-to-bottom action replaces the approval controls. For
finishTask, the child remains open indefinitely and appears to have failed to return to its parent.Variations tried (optional)
finishTaskask through the test API immediately closed the child and reopened the parent, confirming the parent-child lifecycle is healthy in this reproduction.finishTaskis the most disruptive case.App Version
3.80.1 / current
mainAPI Provider (optional)
Not Applicable / Other
Model Used (optional)
Deterministic local mock
Zoo Code Task Links (optional)
Discord report: https://discord.com/channels/1497384592494297201/1513140102929453096/1543429204949991557
Relevant logs or errors (optional)
No backend error is emitted. The task is blocked waiting for the hidden approval.
Root cause
webview-ui/src/components/chat/ChatView.tsxrenders the action row with a mutually exclusive branch: whenshowScrollToBottomis true, it renders scroll controls instead ofprimaryButtonText/secondaryButtonTextapproval controls.