Files
buzz/desktop/src/features/agents/ui/personaLibraryCopy.ts
Taylor Ho 02f640bc45 feat(desktop): unify add agent flows (#5015)
**Category:** improvement
**User Impact:** Users can create, discover, and import agents from one
consistent Add agent dialog.

**Problem:** Agent creation, discovery, and import were split across a
dropdown and separate dialogs, making the Add agent flow fragmented. The
existing E2E suite also continued targeting the deleted dropdown after
the flows were unified.

**Solution:** Route the new-agent card directly into a unified dialog
with dedicated Create, catalog, and Import navigation, then update the
affected E2E coverage to exercise that interface and its current empty
state.

<details>
<summary>File changes</summary>

**desktop/src/features/agents/ui/AgentDefinitionDialog.tsx**
Supports rendering the agent definition form inside the unified Add
agent experience while retaining the standalone dialog behavior.

**desktop/src/features/agents/ui/AgentDefinitionDialogShell.tsx**
Adds the shared shell used to present agent-definition content
consistently in embedded and standalone contexts.

**desktop/src/features/agents/ui/AgentDialog.tsx**
Passes the revised dialog state and close behavior through the existing
agent dialog entry point.

**desktop/src/features/agents/ui/AgentsView.tsx**
Connects the Agents page to the unified Add agent dialog and opens newly
added catalog agents in their profile panel.

**desktop/src/features/agents/ui/PersonaCatalogDialog.tsx**
Combines catalog browsing, agent creation, and snapshot import behind
persistent navigation, including dirty-navigation confirmation.

**desktop/src/features/agents/ui/UnifiedAgentsSection.tsx**
Replaces the new-agent dropdown with a direct Add agent entry point and
adjusts the responsive card grid.

**desktop/src/features/agents/ui/personaLibraryCopy.ts**
Updates catalog-facing copy for the unified experience.

**desktop/src/features/agents/ui/usePersonaActions.ts**
Returns the resolved local persona after catalog activation so the
caller can open the added agent.

**desktop/tests/e2e/agent-readiness-screenshots.spec.ts**
Opens the embedded create pane directly for readiness screenshots.

**desktop/tests/e2e/agents.spec.ts**
Covers unified Create, catalog, and Import navigation and asserts the
current shared-agent empty state.

**desktop/tests/e2e/global-agent-config-screenshots.spec.ts**
Updates global configuration screenshot setup for direct create-pane
entry.

**desktop/tests/e2e/inline-custom-harness.spec.ts**
Updates custom harness setup for the embedded create form.

**desktop/tests/e2e/persona-env-vars.spec.ts**
Updates environment-variable and model-provider scenarios for direct
create-pane entry.

**desktop/tests/e2e/persona-model-combobox-screenshots.spec.ts**
Updates model combobox screenshot setup for direct create-pane entry.

**desktop/tests/e2e/smoke.spec.ts**
Updates agent-creation smoke coverage for the unified Add agent dialog.

**desktop/tests/e2e/where-to-run-config.spec.ts**
Updates provider-selection coverage for the embedded create form.

</details>

## Reproduction steps

1. Open the Agents page and select the new-agent card.
2. Confirm the Add agent dialog opens directly on Create without an
intermediate dropdown.
3. Use the left navigation to browse shared agents and open Import.
4. Select a catalog agent and confirm the dialog closes and the added
agent's profile panel opens.
5. Run the affected desktop Playwright smoke and integration specs and
confirm all scenarios pass.

---------

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz>
2026-08-07 16:25:49 -07:00

65 lines
2.3 KiB
TypeScript

export const personaLibraryCopy = {
title: "My agents",
description:
"The agents you have chosen for this app. Use them to create teams and launch agents.",
chooseFromCatalog: "Choose from catalog",
createNew: "New agent",
import: "Import snapshot",
emptyTitle: "No agents yet",
emptyDescription:
"Choose one from Agent Catalog, create your own, or import one to get started.",
emptyImportHint:
"Or drop an .agent.json or .agent.png snapshot here to import.",
} as const;
export const personaCatalogCopy = {
title: "Agent Catalog",
description: "Browse agents shared to this relay.",
dialogTitle: "Add agent",
dialogDescription: "Browse agents shared to this relay.",
emptyTitle: "You're all set",
emptyDescription: "Everything in Agent Catalog is already in My Agents.",
emptyCatalogDescription: "Shared agents will appear here.",
emptyCatalogTitle: "No agents are being shared",
detailsAction: "View details",
selectAction: "Choose",
deselectAction: "Deselect",
selectedState: "Selected",
availableState: "Available",
detailSelectedTitle: "Selected for My Agents",
detailSelectedDescription:
"Turn this off to remove the agent from teams and agent creation in this app.",
detailAvailableTitle: "Available in Agent Catalog",
detailAvailableDescription:
"Turn this on to make the agent available for teams and agent creation.",
useAction: "Add agent",
addedAction: "Added to My Agents",
teamEmptyState:
"No agents in My Agents yet. Create one or choose one from Agent Catalog first.",
} as const;
export function getPersonaCatalogSelectionActionCopy(isActive: boolean) {
return isActive
? personaCatalogCopy.deselectAction
: personaCatalogCopy.selectAction;
}
export function getPersonaCatalogSelectionAriaLabel(
displayName: string,
isActive: boolean,
) {
return `${isActive ? "Deselect" : "Select"} ${displayName} in My Agents`;
}
export function getPersonaCatalogDetailSelectionCopy(isActive: boolean) {
return isActive
? {
title: personaCatalogCopy.detailSelectedTitle,
description: personaCatalogCopy.detailSelectedDescription,
}
: {
title: personaCatalogCopy.detailAvailableTitle,
description: personaCatalogCopy.detailAvailableDescription,
};
}