Skip to content

feat(desktop): move agent management into profile sidebar#1274

Merged
tellaho merged 39 commits into
mainfrom
tho/agent-profile-sidebar
Jun 26, 2026
Merged

feat(desktop): move agent management into profile sidebar#1274
tellaho merged 39 commits into
mainfrom
tho/agent-profile-sidebar

Conversation

@tellaho

@tellaho tellaho commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

Overview

Category: improvement
User Impact: Agent management now lives inside the profile sidebar, with a cleaner read-only profile pane and a settings menu that surfaces owner-only actions.
Problem: Agent management was scattered and the profile pane mixed viewing with mutation, making it unclear what a viewer could see versus change — and easy to accidentally expose owner-only data or actions.
Solution: Move agent management into the profile sidebar and make the pane mostly read-only — the Edit modal owns actual mutations. Owner-scoped data (memory, activity, logs) and management actions (duplicate / export / autostart / delete) gate on declared ownership, while real boundaries stay server-side; the UI gate only controls what's painted. Adds first-class focused views (summary, agent details, instructions, memory, activity) and history-backed routing between them.

File changes

desktop/src/features/profile/ui/UserProfilePanel.tsx
Top-level panel: splits isOwner (key custody → edit/management) from viewerIsOwner (NIP-OA ownership → viewing owner-scoped data), and gates memory/activity/logs/add-to-channel accordingly.

desktop/src/features/profile/ui/UserProfilePanelSections.tsx
Reworked agent-detail grouping and section layout; the largest single rewrite in the feature.

desktop/src/features/profile/ui/UserProfilePanelTabs.tsx
New tabbed profile with a drag-scroll tab bar across the focused views.

desktop/src/features/profile/ui/UserProfileAgentActions.tsx + UserProfilePersonaDialogs.tsx
Settings cog menu wired to real onDelete / onDuplicate / onExport / onToggleAutoStart handlers; auto-start gated on local backend; hasActions guard hides an empty menu. Whole menu gated viewerIsOwner && managedAgent, which is why it's absent on read-only profiles.

desktop/src/features/profile/ui/UserProfilePanelAgentDetails.tsx / Fields.tsx / Frame.tsx / HeaderContent.tsx / Utils.ts / PersonaSubmit.ts
Componentized the panel into shared primitives — owner row ("Owned by" / responds-to merged into one field), harness-log (renamed from diagnostics) layout, summary info fields, identity UI.

desktop/src/features/profile/ui/ProfilePanelPrimitives.tsx / ProfileListIdentity.tsx / ProfileIdentityTrigger.tsx / AgentWorkingBadge.tsx
Extracted reusable profile/identity primitives; agent working-status badge surfaced on channels.

desktop/src/features/sidebar/ui/SidebarProfileCard.tsx + useActiveWorkingChannelsById.ts
Sidebar profile entry + working-channel indicator hook.

desktop/src/shared/context/ProfilePanelContext.tsx
History-backed routing so focused views navigate with back/forward.

desktop/tests/e2e/profile-sidebar-screenshots.spec.ts + profile.spec.ts
New screenshot harness (reproduces the shots below) and updated profile e2e navigation.

Cargo.lock
Pre-existing one-line lockfile update (adds security-framework 3.7.0) kept consistent with the branch.

(Diff also carries a routine main merge bringing unrelated mobile/web work into the branch; the profile-sidebar feature is the desktop changes above.)

Reproduction Steps

  1. Boot the desktop app and open any agent's profile from the sidebar.
  2. Walk the focused views — summary, agent details / instructions, harness log, activity, channels, memory (and expanded). All should render cleanly.
  3. As the owner, open the header settings cog: duplicate / export / autostart / delete should appear (autostart only on a local backend).
  4. Open a human / non-owner profile: the pane stays read-only and the cog menu is absent.

Screenshots/Demos

Screen.Recording.2026-06-25.at.2.22.45.PM.mov

Profile panes

Summary Runtime + owner row Agent details / instructions Harness log
Summary Runtime + owner row Agent details / instructions Harness log
Activity Channels Memory Memory (expanded)
Activity Channels Memory Memory (expanded)

Read-only (non-owner) profile

Human profile — read-only
Human read-only summary

Owner settings menu

Header settings cog (duplicate / export / autostart / delete)
Settings cog menu

Replaces #1200.

klopez4212 and others added 27 commits June 23, 2026 17:11
Merge origin/main (36d3d2e) into Kenny's agent-profile-sidebar branch
(309889d), resolving conflicts in three files:
- ManagedAgentRow.tsx
- UserProfilePanel.tsx
- UserProfilePanelSections.tsx

Ported #1198's clickable owner-avatar feature into Kenny's refactored
owner-field path (useProfileFieldBuckets/buildOwnerFields in
UserProfilePanelFields.tsx), adapting main's pre-bound onOpenOwner to
Kenny's pubkey-taking onOpenProfile handler.

Fixed a pre-existing test bug in Kenny's branch: personaManagedAgentUpdate
tests expected avatarUrl in the output, but UpdateManagedAgentInput has no
avatarUrl field and the function never sets it. Removed the impossible
expected-output assertions (the avatarUrl sync is not implemented by design).

Co-authored-by: Ned <ab176f059d100602ea25073d9a69ee9817f7b691c76a897180d48498d959faa2@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Weaves main's #1229 observability-ownership split (isOwner vs viewerIsOwner) into Kenny's agent-management-in-profile-sidebar refactor. Resolves conflicts in ManagedAgentRow.tsx and UserProfilePanel.tsx; UserProfilePanelSections.tsx auto-merged on main's MemoryFocusedView(viewerIsOwner) API.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Use the shared profile panel view parser for channel and Pulse URL search state so every focused profile subview survives navigation and reloads.
- Replace the old memories/channels-only profileView whitelist in channel and Pulse route validation.
- Expand the profile Playwright coverage to exercise agent instruction, model, settings, diagnostics/logs, channels, and memories ingress rows from a mock managed agent profile.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
(cherry picked from commit dbad796)
- Reuse managed-agent runtime defaults, provider/model env injection, and Databricks defaults when querying agent models so discovery matches normal startup behavior.
- Add a configurationError field to model discovery responses for known missing provider, model, or credential setup issues instead of treating them as generic subprocess failures.
- Update the profile model picker to render actionable setup messaging for configuration gaps and reserve the red failure state for unexpected discovery errors.
- Show provider-backed agents as remotely managed in the model focused view rather than exposing a local model picker.
- Keep E2E Tauri mocks aligned with the expanded AgentModelsResponse shape.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Replace the Agent info summary ingress with the existing ProfileFieldGroup card for Public key and Owned by.
- Preserve the shared muted background and adjacent field styling by reusing the focused profile field container.
- Remove the now-unused Agent info summary click handler and Info icon import while leaving the focused info view available for other metadata.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Replace separate profile sidebar rows for agent instructions, model, and settings with a single Agent configuration ingress.
- Add a combined configuration focused view that reuses the existing instruction, model picker, and settings sections under one destination.
- Canonicalize legacy profileView values for instructions, model, and settings to configuration so existing deep links continue to resolve.
- Update profile panel utility tests to cover the new canonical view and legacy aliases.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Move the agent activity log ingress to the top-level profile sidebar actions so Diagnostics focuses on operational status and logs.
- Render Diagnostics status with the existing agent status badge instead of plain summary text.
- Embed the Harness log directly in Diagnostics and use flex sizing so the terminal fills the available height while the log body scrolls internally.
- Collapse Harness log chrome into the terminal frame with a compact dark copy action and footer-mounted log filename.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Add a compact shared Alert primitive matching the profile sidebar density with base foreground text and soft background variants.
- Render Diagnostics last errors as a destructive alert instead of a standard metadata field row.
- Prioritize an Error badge on the top-level Diagnostics ingress when a last error is present.
- Move the Harness log filename directly under the terminal header title and remove the footer metadata row.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Move model, instructions, runtime, ACP command, and MCP command behind a profile subpage labeled Advanced
- Keep summary profile details read-only and ordered as public key, owner, respond-to, then Advanced
- Render owner-only respond-to values with the owner avatar and display name
- Split auto-start into the bottom profile actions as a switch control
- Extract advanced agent detail rows from the oversized profile sections module to satisfy desktop file-size checks

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
When a managed agent responds only to its owner, collapse the separate
Owned by and Respond to rows into a single Owned by & responds to field.
Surface the agent info summary fields regardless of viewer ownership.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Replace the inline profile agent action rows with a header settings menu in UserProfileAgentActions.
- Wire the cog into UserProfilePanel next to the close button and scope it to the summary view so interior views keep focused headers.
- Extract the profile panel frame into UserProfilePanelFrame to keep UserProfilePanel under the desktop file-size guard.
- Trim obsolete action props and rendering from ProfileSummaryView after moving duplicate, export, autostart, and delete into the menu.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Use the current user's profile avatar when an agent owner row is rendered from the local "you" ownership fallback.
- Reuse a shared owner row content node so both clickable owner links and copyable fallback rows render the owner avatar beside the label.
- Preserve the existing copy behavior for fallback owner rows while restoring the avatar treatment added for NIP-OA owners.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Move the top-level agent details card above the Memories, Channels, Diagnostics, and Activity ingress rows in the profile summary.
- Keep the existing public key, ownership, agent detail, and Advanced row rendering intact while changing only the visual order.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Replace stacked ingress rows with inline Info, Runtime, Channels, and
Memories tabs below the profile action buttons so agent details stay on
one screen.

- UserProfilePanelTabs: secondary/ghost Button tabs, momentum drag-scroll,
  Info/Runtime tab content, shared ProfileIngressRow
- UserProfilePanelSections: wire tabs into ProfileSummaryView
- Info tab: instructions first, identity fields, activity log ingress
- Runtime tab: model, runtime config, respond-to, diagnostics ingress
- Split combined owned-by/respond-to into separate fields
- Rename Advanced focused view title to Runtime
- profile.spec.ts: update E2E to click tabs instead of ingress rows

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Hide the profile tab bar when Info is the only available section, keeping simple human profiles focused on the visible fields.
- Split the agent Status diagnostics row out of the runtime details so it appears above runtime configuration.
- Preserve the existing multi-tab agent profile behavior for Runtime, Channels, and Memories.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Rename the profile Diagnostics focused view and Runtime tab ingress to Harness Log so the user-facing label matches the pane content.
- Keep agent Status in the Runtime tab summary area while filtering it out of the focused Harness Log pane.
- Normalize Harness Log casing in the managed agent log panel and update the profile E2E assertion for the new pane title and missing Status row.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Add an `instructions` profile subview so agent instructions use the same body-replacement and back-button pattern as Harness Log.
- Change the summary instructions row to a two-line preview with a chevron instead of an in-place scroll/expand region.
- Render full instructions Markdown in the focused view while keeping the preview as plain clamped text inside the clickable row.
- Extract profile panel header actions into `UserProfilePanelHeaderContent` to keep `UserProfilePanel.tsx` under the desktop file-size guard.
- Update profile view parsing tests and the profile E2E flow to cover the new instructions subview.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Keep profile-launched activity panels open by preserving profile state and resolving activity sessions outside the active channel list.
- Allow activity panels to render an unscoped feed when opened from a profile for agents outside the current channel.
- Move Activity log, Harness Log, and Instructions ingresses into the requested profile tab order.
- Make Owned by rows full-width profile actions with trailing ArrowUpRight affordances across channel, pulse, and agents profile panels.
- Extract selected agent-session resolution from ChannelPane to stay under desktop file-size limits.
- Extend the profile e2e coverage for the activity panel close/return flow.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Move the agent instructions ingress to the top of the runtime tab content.
- Keep the status diagnostics and harness log ingress below instructions so the highest-value editable guidance is visible first.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Replace visible profile quick-action labels with shadcn tooltip content above each circular button.
- Keep profile action controls centered and accessible with aria labels on the icon buttons.
- Slightly reduce the original oversized circles while preserving the active/inactive visual treatments.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Add profileTab route search parsing and validation for channel, pulse, and agents routes so profile summary tabs are reflected in browser history.
- Move channel and pulse profile panels onto controlled tab state while preserving existing profileView focused subview routing.
- Convert Agents profile panels from local React state to URL-backed profile/profilePersona/profileTab/profileView state so profile panels, persona panels, tabs, and focused views survive back/forward and reloads.
- Extend profile utility tests and the profile Playwright flow to assert URL params and back/forward restoration for tab changes.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Update the Memories tab empty view to match the ACP activity empty-state structure.
- Add the centered icon, title, description, and spacing treatment so the empty panel feels consistent with nearby profile panes.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Extract repeated profile panel row/surface patterns, runtime labels, working
badges, avatar-with-presence, popover triggers, and list identity rows into
shared components so profile, sidebar, channel, message, pulse, and forum
surfaces use one consistent visual language without changing test ids.

- Add ProfilePanelPrimitives, AgentWorkingBadge, ProfileAvatarWithPresence,
  ProfileIdentityTrigger, ProfileListIdentity, and agentLabels helper
- Refactor profile panel fields, tabs, agent details, sections, and popover
- Adopt shared primitives in sidebar, members, DM search, messages, pulse, forum
- Rename ProfileIdentityTrigger role prop to authorRole to satisfy a11y lint

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Update the agent profile ingress E2E flow to use the activity panel back action when returning to the profile panel
- Keep the test aligned with the current split-panel behavior where closing the activity panel dismisses the side panel instead of restoring profile details
- Preserve coverage for profile tab routing, activity ingress, diagnostics, channels, and memories after the branch's profile panel changes

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Add channel-level active turn aggregation in activeAgentTurnsStore so sidebar rows can subscribe to active work by channel
- Mount the managed agent observer and active-turn bridges from AppSidebar to keep channel badges live without visiting agent/profile surfaces
- Render compact working badges on channel rows across starred, custom, stream, forum, and direct-message sections
- Cover channel aggregation behavior for multi-agent activity and last-turn completion in activeAgentTurnsStore tests

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Captures PR-ready screenshots of the profile sidebar views (summary,
agent details/instructions, diagnostics, activity, channels, memory) for
both agent (owner) and human (read-only) profiles. Includes the Cargo.lock
update for the security-framework dependency.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho tellaho changed the title Move agent management into profile sidebar feat(desktop): move agent management into profile sidebar Jun 25, 2026
Resolves conflicts in channels/ui (ChannelPane, ChannelScreen, useChannelAgentSessions, useChannelPanelHistoryState). Re-applies HEAD profile-panel deltas (UserProfilePanel tab/onTabChange, AgentSessionThreadPanel activity-list ternary) on top of main's reformatted auxiliary-pane render chain. Extracts the repeated RightAuxiliaryPane wrapper into a local wrapAux helper to keep ChannelPane under the 1000-line size guard.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho tellaho closed this Jun 25, 2026
npub14vtk7pvazqrq9639qu7e560wnqtl0d53ca4gjuvq6jzf3k2el23qqlwa7f and others added 2 commits June 25, 2026 12:55
The mesh-compute restart spec still drove the old per-row agent-actions
dropdown (managed-agent-actions-<pubkey>), which PR #1200 removed in favor
of a Manage button that opens the profile sidebar. Rewrite the helper
(openManagedAgentActions -> triggerManagedAgentPrimaryAction) to click
Manage and then the user-profile-agent-primary-action toggle, preserving
the test's intent. Test-only; no product code changed.

Co-authored-by: Marge <marge@users.noreply.github.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Update the Channels empty state to use the same centered icon, title, and helper structure as Memories.
- Reduce the Channels empty-state height when the Add to channel row is present so tab switching has less visual jump.
- Rewrite the Memories empty copy to give users a concrete prompt for teaching the agent what to remember.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
tellaho and others added 2 commits June 25, 2026 14:27
- Update the profile message action to await the direct-message open and channel navigation flow before closing the profile panel.
- Add a pending state with a spinner and disabled Message action so repeated clicks do not start overlapping DM opens.
- Surface DM open failures with a toast while keeping the profile panel visible for retry.
- Move the DM-open state into a small profile hook so the profile panel stays under the desktop file-size guard.
- Widen profile and channel DM callback types to allow async open handlers.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
…ebar

* origin/main:
  fix(sidebar): non-selectable channel names + copy/leave context menu actions (#1260)
  fix(runtime): sweep node wrapper processes hosting managed agent shims (#1296)
  fix(buzz-agent): follow symlinks when discovering skill directories (#1295)
  chore: add grab-emoji.sh to register Slack emoji in Buzz (#1292)
  Fix cross-pod membership notification fanout (#1291)
  fix(buzz-acp): strengthen agent communication rules in base prompt (#1293)
  chore(release): release Buzz Desktop version 0.3.34 (#1289)
  feat(desktop): refresh Agents tab live on inbound relay sync (#1256)
  fix(buzz-acp): inject Codex network allowlist for relay hostname at spawn time (#1287)

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>

# Conflicts:
#	desktop/src-tauri/src/commands/agent_models.rs
@tellaho tellaho marked this pull request as ready for review June 25, 2026 21:47
…elper

UserProfilePopover and UserProfilePanelUtils each carried a byte-identical
copy of a last-8 truncatePubkey variant with a <=16 guard. Both now resolve to
the canonical last-4 helper in profile/lib/identity.ts (last-4 is sufficient per
tho; all call sites pass 64-char pubkeys so the dead <=16 guard is dropped).
UserProfilePanelUtils re-exports it to keep UserProfilePanel's import stable.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho tellaho marked this pull request as draft June 25, 2026 22:58
The agent profile sidebar is read-only, so the spike no longer renders a
ModelPicker. The earlier rip over-cut: it deleted main's shipping model-
discovery probe and helpers wholesale, conflating "unused by the new UI"
with "added by us." This redoes it narrowly.

Revert only what commit ba47f02 "handle model discovery setup states"
added on top of main — the runtime-env injection, Databricks defaults,
and configurationError path in agent_models.rs, the matching runtime.rs/
types.rs tweaks, the configurationError field in types.ts, the +22 lines
in ModelPicker.tsx, and the e2eBridge mock field. Everything else —
get_agent_models, resolve_persona_env, resolve_effective_prompt_model_
provider, redact_env_values_in, AgentModelsResponse/AgentModelInfo — was
already on origin/main and stays exactly as it ships there.

UserProfilePanelSections.tsx is intentionally untouched: ba47f02's 8-line
ModelFocusedView edit was already superseded by the read-only restructure
in later sidebar commits. The "Model: Auto" row and useHorizontalDragScroll
are unchanged.

Net result: desktop/src-tauri/ and desktop/src/shared/api/types.ts now
match origin/main exactly (`git diff origin/main` on those paths is empty).

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho tellaho force-pushed the tho/agent-profile-sidebar branch from ea1a9a6 to c5c0173 Compare June 25, 2026 23:04
@tellaho tellaho marked this pull request as ready for review June 25, 2026 23:50
Comment thread desktop/src/features/profile/ui/ProfileListIdentity.tsx Outdated
tellaho added 5 commits June 25, 2026 17:03
Revert the profile UI componentization commit because it expanded the PR scope more than intended.

- Revert shared profile primitives, identity triggers, working badge, avatar presence wrapper, and runtime label helper
- Restore previous profile panel, sidebar, message, pulse, forum, and DM search implementations
- Remove the additional shared component files introduced by 98c4563
- Preserve the later canonical truncatePubkey helper import while resolving the popover conflict

This reverts commit 98c4563.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Delete desktop/tests/e2e/profile-sidebar-screenshots.spec.ts, which was a PR-only screenshot harness not registered in Playwright smoke or integration projects.
- Remove duplicated profile sidebar screenshot flow that wrote to test-results/profile-sidebar and depended on external picsum avatar URLs.
- Keep the behavior coverage in profile.spec.ts as the maintained E2E path for profile sidebar navigation.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Bring the branch up to date with the latest desktop identity archive, side panel motion, mobile unread badge, and screenshot tooling changes from origin/main.
- Resolve profile sidebar conflicts by preserving the split profile panel structure while incorporating archive management controls and kind:0-derived agent identity detection.
- Update the extracted profile panel frame to use the shared side panel enter motion class from main.
- Allow the identity archive hook to handle persona-only profile summaries without a resolved pubkey.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Move archive and unarchive actions from the profile body into the top-right profile settings dropdown.
- Render archived state as the first Info row labeled Visibility, with an explanatory tooltip describing search, autocomplete, and member-add behavior.
- Update the archive confirmation copy to point users at the settings menu delete action instead of the Agents tab.
- Add a profile delete-agent confirmation modal that explains local record/key removal, channel membership cleanup, and local/provider process behavior.
- Let the profile delete path suppress the shared browser confirm after the new modal has already confirmed, while keeping the fallback confirmation for other agent surfaces.
- Extract profile settings menu branching out of UserProfilePanel to keep the file under the desktop size guard.
- Update identity archive e2e coverage to open the settings menu before archive/unarchive assertions.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
- Update archive confirmation copy to describe archiving as hiding the agent from the space.
- Align delete confirmation wording with the archive modal's calmer sentence structure.
- Move the archive alternative from a destructive-action bullet into a closing paragraph that mirrors the archive modal.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho tellaho requested a review from wesbillman June 26, 2026 07:16
@tellaho tellaho merged commit 8d40150 into main Jun 26, 2026
24 checks passed
@tellaho tellaho deleted the tho/agent-profile-sidebar branch June 26, 2026 18:39
tellaho added a commit that referenced this pull request Jun 26, 2026
…tecture

Resolves the conflict in UnifiedAgentsSection.tsx between #1199's card-grid simplification and main's #1274 move of agent/persona management into the profile sidebar. Keeps the identity-card grid layout and drives every interaction through onOpenAgentProfile/onOpenPersonaProfile; drops the now-orphaned per-card action dropdowns whose handlers main removed from AgentsView. Inline log panel, model picker, and lastError affordances preserved. Updates the mesh-compute e2e helper to open the profile panel via card click instead of the removed Manage button.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
tellaho added a commit that referenced this pull request Jun 26, 2026
…p model-label helper

- Remove inline log apparatus from UnifiedAgentsSection (onSelectLogAgent, selectedLogAgentPubkey, logContent/Error/Loading, ManagedAgentLogPanel) and its AgentsView pass-throughs; logs now live in the profile sidebar (#1274).
- Drop the unused teamId prop on TeamIdentityCard and its TeamsSection call-site.
- Dedup formatFooterModelLabel into formatAgentModelLabel and import the survivor everywhere.
- Update smoke e2e to read the harness log from the profile sidebar diagnostics view.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants