Commit Graph

621 Commits

Author SHA1 Message Date
Taylor Ho
3d09cd9d92 fix: Add button px-3 → px-1 2026-05-21 19:17:30 -07:00
Taylor Ho
cae7f6ec2a fix: Add button pb-1.5 → pb-1 2026-05-21 19:17:30 -07:00
Taylor Ho
a6074150eb fix: bump More options button py-2 → py-2.5 2026-05-21 19:17:30 -07:00
Taylor Ho
16dc0094d0 fix: reduce bottom padding on floating Add button 2026-05-21 19:17:30 -07:00
Taylor Ho
bcc45872b1 fix: remove gap-2.5 from row, animate marginRight on checkbox, wrap content in gapped div — no extra left padding when checkbox hidden 2026-05-21 19:17:30 -07:00
Taylor Ho
6481789bd3 fix: team filter row always mounted — animate height continuously, no mount/unmount jank 2026-05-21 19:17:29 -07:00
Taylor Ho
8e6608c174 fix: checkbox animates width continuously instead of mount/unmount — no more jank on exit 2026-05-21 19:17:29 -07:00
Taylor Ho
30e7097ff3 feat: animated checkbox with layout transitions, absolute Add button with gradient, remove 's' animation and border-2 2026-05-21 19:17:29 -07:00
Taylor Ho
7b4c1de075 fix: border-2 on subtle toggle pressed state 2026-05-21 19:17:29 -07:00
Taylor Ho
b01411543d Add bg-primary/10 to subtle toggle selected state, fix row spacing
- Subtle variant pressed: bg-primary/10 tint behind the colored border
- Toggle row: pt-0.5 pb-1 to balance spacing (was more above than below)
2026-05-21 19:17:29 -07:00
Taylor Ho
d5f3db1291 fix: colored border-primary on subtle toggle pressed state, reduce toggle row py 2026-05-21 19:17:29 -07:00
Taylor Ho
cb7b83b85a feat: add subtle toggle variant (outline-only state change), use it for team chips at h-6 2026-05-21 19:17:28 -07:00
Taylor Ho
afa4abd3dd Move team toggles to own row between header and list with layout animation
- Toggles sit in a separate row that slides in/out (height animation)
- Agent list uses motion layout to smoothly translate down when row appears
- Header stays clean: just title + Select/Cancel button
- Gradient scroll affordance on the toggle row's right edge
2026-05-21 19:17:28 -07:00
Taylor Ho
f15c436cd2 Fix 's' animation: opacity only, no width transition
The width:0→auto animation caused the 's' to render broken.
Just fade it in with opacity — it's one character, doesn't need
a width transition.
2026-05-21 19:17:28 -07:00
Taylor Ho
b682fb70e2 Keep title visible, toggles to the right, gradient scroll affordance
- 'Add agent' title stays visible always; 's' fades in when select mode
  activates ('Add agents')
- Team toggles appear to the right of the title, scroll horizontally
- Right-edge gradient (from-popover to-transparent) hints at more
  content when overflowing
2026-05-21 19:17:28 -07:00
Taylor Ho
df7838496c Rethink: Select button always outline, label toggles Select/Cancel, default toggle colors
- Button stays ghost+border (outline look) in both states
- Label changes: 'Select' → 'Cancel' when active
- Toggle chips use default data-[state=on]:bg-primary (removed accent override)
2026-05-21 19:17:28 -07:00
Taylor Ho
5bad647f11 Fix button hierarchy: toggles use accent, Select uses secondary
Three primary buttons competing looked unfocused. New hierarchy:
- Add (N) button: primary (the CTA)
- Toggle chips selected: bg-accent (visible but not competing)
- Select button active: secondary (subtle elevation, not primary)
2026-05-21 19:17:27 -07:00
Taylor Ho
1054ca6959 fix: remove extra py-1.5 on team-chips container causing header height shift in select mode 2026-05-21 19:17:27 -07:00
Taylor Ho
c1717da6a4 Match Toggle height to Button sm (h-8) for visual parity 2026-05-21 19:17:27 -07:00
Taylor Ho
e0a5b25d7c fix: match header right padding to top padding on Select button 2026-05-21 19:17:27 -07:00
Taylor Ho
e0045b476b Polish: first team fades only, 2nd+ translate+fade; fix header padding
- First team chip: opacity-only animation (no x translate)
- Second+ chips: translate from x:12 + fade, staggered by index
- Header container: px-3 py-1.5 with gap-2 for consistent spacing
  around the Select button on all sides
2026-05-21 19:17:27 -07:00
Taylor Ho
596c6323bd Restore checkbox without animation — static div, no motion 2026-05-21 19:17:27 -07:00
Taylor Ho
dcf0655330 Remove agent checkboxes from select mode, keep it clean
Checkboxes were too busy in the agent list. Selection is now
indicated only by the bg-accent/50 highlight on selected rows.
Button already uses size=sm.
2026-05-21 19:17:26 -07:00
Taylor Ho
ff513e9cdc Fix Select button: ghost+border for transparent bg, no bg-background clash
The outline variant includes bg-background which creates a visible
contrast block against bg-popover. Use ghost variant with explicit
border-input border for a truly transparent-bg outlined button.
2026-05-21 19:17:26 -07:00
Taylor Ho
f54727e57b Fix Select button: keep label as 'Select', use outline variant for visibility
- Label stays 'Select' in both states (no more 'Cancel' label)
- Inactive: variant='outline' (visible against bg-popover)
- Active: variant='default' (primary) for clear state change
- Popover uses bg-popover token (hsl 220 23% 95% light / 232 23% 18% dark)
2026-05-21 19:17:26 -07:00
Taylor Ho
a3b425db4e Polish: secondary→primary Select button, animated checkboxes, truncation fix
- Select button uses Button variant='secondary', switches to 'default'
  (primary) when active for clear visual state change
- Checkboxes animate in with fade + scale (motion.div) when entering
  select mode
- Agent name uses min-w-0 + truncate for proper text overflow when
  checkbox pushes content over
2026-05-21 19:17:26 -07:00
Taylor Ho
85da5ddee1 Fix: stay in select mode when deselecting agents, stagger toggle animation
- Remove auto-exit from select mode when selectedKeys empties — only
  Cancel button exits select mode now.
- Stagger team Toggle animations: first chip fades in immediately,
  subsequent chips delay by index * 50ms for a fan-out effect.
2026-05-21 19:17:26 -07:00
Taylor Ho
917398f302 Use Toggle for team chips, move Add button below More Options
- Team chips now use shadcn Toggle component (outline variant) with
  visual pressed state via data-[state=on]
- Toggles are selectable/deselectable — clicking again removes the team
- 'Select' button becomes 'Cancel' when active — clears all selections
  and exits select mode
- 'Add (N)' button moved to the bottom of the popover, below More Options
- Full-width button, only visible when items are selected
2026-05-21 19:17:26 -07:00
Taylor Ho
2e09796e9c Add Select button with animated team chips to popover header
- 'Select' button in the header reveals team filter chips on click
- Title fades out, team chips animate in from right using motion/react
- Clicking a team chip auto-selects all its member agents
- Multi-select mode shows checkboxes + 'Add (N)' confirm button
- Single-click fast path preserved when not in select mode
- Team chips scroll horizontally when overflowing
- Exiting: deselect all returns to default title state
2026-05-21 19:17:25 -07:00
Taylor Ho
3acc220679 Reshape AddChannelBotDialog with progressive disclosure
Restructure the dialog from a flat wall of fields into three layers:

1. Primary (always visible): Persona/team selection + runtime picker.
   These are the two decisions that matter most.

2. Customize (collapsed): Bot name, system prompt, respond-to allowlist.
   Power user controls that don't block the happy path.

3. Advanced (collapsed): Backend provider selection, provider config.
   Expert territory hidden by default.

Uses a simple DisclosureSection component with chevron toggle. All
existing functionality preserved — just layered behind progressive
disclosure. Description updated to match the new vibe.
2026-05-21 19:17:25 -07:00
Taylor Ho
923bb3897d Simplify popover: strip teams/multi-select, back to flat quick-add list
Remove team headers, nesting, multi-select mode, checkboxes, batch
mutations, and team-related imports. The popover returns to its core
purpose: a flat, smartly-ordered list where single-click immediately
adds an agent. Teams and batch selection will live in the 'More options'
dialog instead.

Keeps: overflow-hidden fix, role=menu, smart ordering (running first,
recents, then available), scroll container with mid-item clip.
2026-05-21 19:16:14 -07:00
Taylor Ho
82ca654d02 Reorganize popover: nest agents under team headers, hover-reveal checkboxes
- Agents now appear indented under their team header as a visual unit
- Ungrouped agents (not in any team) show in a separate section below
- Checkboxes hidden by default, fade in on hover (group-hover)
- Clicking checkbox enters multi-select mode; clicking row still does
  single-add (fast path preserved for ungrouped agents)
- Team header click selects all members and enters multi-select mode
- Once in multi-select mode, all checkboxes stay visible
- Running agents still sort to top within their section
2026-05-21 19:16:14 -07:00
Taylor Ho
170a22921c Move Add button inline with header, show only in multi-select mode
Relocate the batch confirm button from the bottom sticky area into the
'Add agent' header row, anchored right. Uses Button size=sm (smallest
variant). Only renders when multi-select mode is active with 1+ items
selected.
2026-05-21 19:16:14 -07:00
Taylor Ho
d8771fe720 feat: hybrid multi-select with team support in QuickAddAgentPopover
Transform the Quick Add Agent popover into a hybrid interaction model:

- Single-click on an individual agent still adds immediately (fast path)
- Clicking a team row selects all its personas and enters multi-select mode
- In multi-select mode, clicking agents toggles checkbox selection
- Sticky 'Add (N)' confirm button appears at the bottom in multi-select
- Teams section at the top shows usable teams with member count
- Scroll container clips mid-item (max-h-[13.75rem]) to hint at more content
- Nothing pre-selected; running agents still sort to top via recency
- Batch add uses useCreateChannelManagedAgentsMutation for new personas
  and individual attach for already-running agents
2026-05-21 19:16:13 -07:00
Taylor Ho
940935f563 fix: clip QuickAddAgentPopover items to container border-radius
Add overflow-hidden to PopoverContent so hover backgrounds on the
bottom item stay clipped within the rounded corners. Also restore
role=menu on the keyboard-navigable container (lost during revert).
2026-05-21 19:16:13 -07:00
Taylor Ho
91f398f68e fix: clip dropdown menu items to container border-radius
Change DropdownMenuContent from overflow-y-auto to overflow-hidden so
hover/focus backgrounds on menu items are clipped by the container's
rounded corners. Instances that need scrolling (e.g. PulseView) already
pass overflow-y-auto via className which overrides the y-axis.

Matches the existing SubContent pattern which already uses overflow-hidden.
2026-05-21 19:16:13 -07:00
Taylor Ho
f6b3c5d004 Move Add agent trigger to Members sidebar header row
Add a compact '+' icon button immediately left of the ellipsis (⋯)
bulk-actions menu in the Bots section header of the Members side pane.
Remove the old full-width 'Add agent' button from below the bots list.

The trigger opens the same QuickAddAgentPopover as before — just in a
more discoverable, compact location matching the ⋯ button style.
2026-05-21 19:16:13 -07:00
Taylor Ho
c1bc5dcdb3 Revert "Move Add agent button to sit immediately left of settings gear"
This reverts commit bde1fc270ffb9e988407e8f0f4e159418483f35b.
2026-05-21 19:16:13 -07:00
Taylor Ho
0bb63ae2a0 Move Add agent button to sit immediately left of settings gear
Reorder header action buttons so the Quick Add Agent popover trigger
(+ icon) is positioned directly before the manage channel button,
making it more discoverable next to the channel settings.

Also fix pre-existing lint: add role=menu to popover container and
format QuickAddAgentPopover.tsx per biome rules.
2026-05-21 19:16:13 -07:00
Taylor Ho
138ea9b613 fix: move role=listbox to item list wrapper for valid ARIA
The 'More options…' button is not a listbox option, so the listbox
role belongs on the inner div that contains only the agent option items.
2026-05-21 19:16:12 -07:00
Taylor Ho
d1b7aeb538 fix: address review feedback — criticals + mediums
Critical fixes:
1. Null channelId guard — popover renders children-only (no popover
   content) when channelId is null. Action handlers also early-return.
2. pickBotName fallback — safeBotName() wraps pickBotName with a
   defensive fallback to persona.displayName or 'Agent'.
3. E2E test updates — tests now click through the quick-add popover's
   'More options…' button before asserting on the full dialog.
4. Duplicate AddChannelBotDialog — removed the sidebar's own dialog
   instance. Dialog state is now lifted to ChannelScreen and passed
   down via props. Only one dialog instance exists (in ChannelMembersBar).

Medium fixes:
5. Discriminated union types — QuickAddAgentItem is now a proper
   tagged union (RunningAvailableItem | RunningInChannelItem | PersonaItem).
   No more optional agent?/persona? fields.
6. Extracted sortProviders utility — shared between ChannelMembersBar
   and any future consumer. Single source of truth for provider ordering.
7. Emerald colors kept — matches existing presence pattern (bg-emerald-500)
   used throughout the codebase. No design token exists for 'running' status.
8. Keyboard navigation — added arrow-key roving focus via onKeyDown handler
   on the popover container, targeting [data-quick-add-item] buttons.
9. Eager queries — channel members query already gated by popover open state.
   Other queries (agents, personas, providers) are globally cached by
   ChannelMembersBar which is always mounted — no extra network cost.
2026-05-21 19:16:12 -07:00
Taylor Ho
0d56b5805f feat: quick-add agent popover with two entry points
Replace the direct + → full dialog flow with a lightweight Radix popover
that shows available agents sorted by state (running > configured > catalog).
One click to add. The full AddChannelBotDialog is still accessible via
'More options…' at the bottom of the popover.

Two trigger points:
- The existing + button in ChannelMembersBar now opens the popover
- A new 'Add agent' button at the bottom of the sidebar Bots section

The sidebar already had People/Bots section headers — the inline add
affordance lives at the bottom of the Bots section.

Actions:
- Running agent not in channel → useAttachManagedAgentToChannelMutation
- Persona without running agent → useCreateChannelManagedAgentMutation
  (leverages existing reuse logic from agentReuse.ts)

The popover uses useBotRecents for smart ordering and pickBotName for
instance naming. Force-new-instance stays buried in the full dialog.
2026-05-21 19:16:12 -07:00
Will Pfleger
4e060bfec2 fix(deps): upgrade Vite v8 and @vitejs/plugin-react v6 (#710) 2026-05-21 19:03:59 -04:00
Will Pfleger
5b75ce4755 fix(deps): upgrade pnpm to v11 with versioned patch keys (#709) 2026-05-21 18:53:26 -04:00
Taylor Ho
ee4ee5f850 fix: composer UX improvements (cursor, upload guard, scroll, paste, perf) (#694) 2026-05-21 22:53:10 +00:00
Will Pfleger
cfd5a82c7b fix(infra): pin PGDATA path for forward-compatible Postgres upgrades (#707) 2026-05-21 17:57:03 -04:00
Will Pfleger
d0d2670fe2 fix(deps): upgrade redis 1.0 and deadpool-redis 0.23 together (#703) 2026-05-21 17:55:44 -04:00
Will Pfleger
091e38ff0a Fix SPROUT_SHARE_IDENTITY worktree dev workflow breaks (#702) 2026-05-21 17:53:20 -04:00
Will Pfleger
4404162f0e fix(mobile): rename IOSOptions/MacOsOptions to AppleOptions (#706) 2026-05-21 17:41:16 -04:00
Will Pfleger
6fe557852c fix(frontend): remove deprecated baseUrl for TypeScript 6 compatibility (#705) 2026-05-21 17:40:54 -04:00