1.8 KiB
Handoff-Compose Footer Chip Filtering — Tech Spec
Product spec: specs/REMOTE-1595/PRODUCT.md
Linear: REMOTE-1595
Context
AgentInputFooter::render_toolbar_item (app/src/ai/blocklist/agent_view/agent_input_footer/mod.rs:1945) is called for each user-configured left/right toolbar item during footer rendering. It already filters by available_in() and available_to_session_viewer(). The footer already has access to handoff_compose_state: ModelHandle<HandoffComposeState> (added in the REMOTE-1558 PR).
The environment selector for & mode is rendered separately at mod.rs:2108, outside the toolbar item loop, so it is unaffected by toolbar filtering.
Proposed changes
1. Add AgentToolbarItemKind::is_available_during_handoff_compose
Add a method on AgentToolbarItemKind in toolbar_item.rs that returns whether the item should render during & handoff-compose mode:
fn is_available_during_handoff_compose(&self) -> bool {
matches!(
self,
Self::ModelSelector | Self::VoiceInput | Self::FileAttach
)
}
2. Guard in render_toolbar_item
At the top of render_toolbar_item (mod.rs:1945), after the existing available_in() / available_to_session_viewer() guard, add:
if self.handoff_compose_state.as_ref(app).is_active()
&& !item.is_available_during_handoff_compose()
{
return None;
}
This is purely a render-time filter; it does not mutate the user's configured layout.
Testing
- Unit test: verify
is_available_during_handoff_composereturnstrueonly forModelSelector,VoiceInput,FileAttach. - Integration/manual: enter
&mode, confirm only those three items plus the environment selector render. Exit&, confirm full footer restores.