feat(app): mark composer pills that open a menu and keep the pill track's space

Plugin composer pills with a menu or popover now show an upward chevron at
every width, so a pill that opens a surface reads differently from a one-tap
action pill. Built-in Tasks and Subagents pills are unchanged.

The transcript's bottom inset used to be reserved only while some pill
existed. Plugins that add pills when a turn ends and remove them when the next
starts moved the transcript every turn. The inset is now reserved whenever the
agent has an active composer.
This commit is contained in:
Mohamed Boudra
2026-11-03 13:00:47 +01:00
parent 1c4400194a
commit 7065252d4d
10 changed files with 100 additions and 101 deletions
+2 -2
View File
@@ -144,8 +144,8 @@ pill.remove();
```
Move dynamic text from the former component into updates from your model or SDK subscription.
Custom icon components may still use hooks. Composer pills always show icon and label and never
show chevrons. See [buttons](./reference.md#button-descriptor) for menus, popovers, and visibility.
Custom icon components may still use hooks. Composer pills always show icon and label; menus and
popovers add a chevron. See [buttons](./reference.md#button-descriptor) for menus, popovers, and visibility.
## 4. Separate imports
+4 -1
View File
@@ -1897,7 +1897,10 @@ decisions.
`client.addComposerPill({ id, workspaceId, agentId, button })` uses the same [button descriptor](#button-descriptor)
and returns the same registration. It targets one agent's composer track alongside Tasks and
Subagents. Composer pills always show the icon and `label` (or `title` when `label` is omitted).
They never show a chevron, including for menus and popovers.
Menus and popovers add an upward chevron on every layout, because their surface opens above the
pill; actions show none, so a pill that runs on tap reads differently from one that opens something.
The track keeps its space above the composer whether or not it has pills, so adding and removing
pills does not move the transcript.
```tsx
const pill = client.addComposerPill({