You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Apply the display name to the remaining surfaces: operator queue, monitoring, executions, the collaboration graph, tab titles, and prose/toast strings. Lowest value per site and safely deferrable — until this lands these surfaces keep showing the slug, which is correct behavior, just not the polished version.
Follow-up 5 of 5 from the design decision on #964.
Context
Per the #964 render rule, these split across three surface classes:
Dense operational tables (machine-facing) — the slug stays primary; the display name is supplementary at most. Executions rows, operator queue rows, monitoring alerts, and RoleMatrix (a 100px column header — extremely tight).
Prose / toasts (identity already established) — display name alone reads better than a concat.
Collaboration graph — needs a store change before it can show anything.
Most of these components read agent_name out of API payloads, not the agents store, so the backend payloads need the field or the frontend needs a slug→display resolver. That decision is the main design work in this issue.
Acceptance Criteria
Decision recorded: add display_name to operator/monitoring/executions payloads, or build a frontend slug→display resolver from the agents store (with the tradeoff stated)
Collaboration graph shows the display name without breaking actions:
Sibling field added in src/frontend/src/stores/network.js (both the agent and system-agent node data)
data.label remains the slug — it is the API key for router.push / toggleAutonomy / toggleAgentRunning in AgentNode.vue
Prose / toast strings use the display name alone — Agents.vue notifications, Settings.vue confirms, PortalChat.vue empty state, PortalFilesPanel.vue headings
Router tab titles in src/frontend/src/router/index.js resolve the display name via a store lookup (they currently derive from the route param, so they only ever have the slug) — or an explicit decision to keep slug-only there
Remaining :title= / :alt= / aria-label strings reviewed — accessibility labels should carry the display name where it aids comprehension
ReplayTimeline.vue, FoldersPanel.vue, ExecutionDetail.vue breadcrumb + source-agent attribution, PermissionsPanel.vue, TerminalPanelContent.vue, AgentWorkspace.vue, AgentBrainOrb.vue reviewed against the render rule
AgentAvatar still receives the slug everywhere (including the duplicate initials/tint implementation in ClientPortal.vue)
Technical Notes
Comment in src/frontend/src/router/index.js explicitly calls :name "the canonical agent identifier" — that stays true; only the rendered title changes.
ReplayTimeline.vue and the operator cards already render an avatar beside the name, so they have marginally more room than a bare table cell — worth a case-by-case call rather than a blanket rule.
Comma-joined agent lists (e.g. the GitHub PAT propagation failure list in Settings.vue) get unreadable fast with long display names — slug is probably right there.
Depends on: the #964 schema/API/MCP issue. Independent of the roomy-surfaces and pickers issues; can land last or in parallel.
Summary
Apply the display name to the remaining surfaces: operator queue, monitoring, executions, the collaboration graph, tab titles, and prose/toast strings. Lowest value per site and safely deferrable — until this lands these surfaces keep showing the slug, which is correct behavior, just not the polished version.
Follow-up 5 of 5 from the design decision on #964.
Context
Per the #964 render rule, these split across three surface classes:
RoleMatrix(a 100px column header — extremely tight).Most of these components read
agent_nameout of API payloads, not the agents store, so the backend payloads need the field or the frontend needs a slug→display resolver. That decision is the main design work in this issue.Acceptance Criteria
display_nameto operator/monitoring/executions payloads, or build a frontend slug→display resolver from the agents store (with the tradeoff stated)src/frontend/src/components/ExecutionsPanel.vuetable rowssrc/frontend/src/components/operator/—QueueCard,QueueList,QueueItemDetail,ResolvedCard,NotificationsPanelsrc/frontend/src/components/MonitoringPanel.vuealert + health rowssrc/frontend/src/components/process/RoleMatrix.vue(100px column — slug only)src/frontend/src/views/MobileAdmin.vueops rowssrc/frontend/src/stores/network.js(both the agent and system-agent node data)data.labelremains the slug — it is the API key forrouter.push/toggleAutonomy/toggleAgentRunninginAgentNode.vueAgents.vuenotifications,Settings.vueconfirms,PortalChat.vueempty state,PortalFilesPanel.vueheadingssrc/frontend/src/router/index.jsresolve the display name via a store lookup (they currently derive from the route param, so they only ever have the slug) — or an explicit decision to keep slug-only there:title=/:alt=/aria-labelstrings reviewed — accessibility labels should carry the display name where it aids comprehensionReplayTimeline.vue,FoldersPanel.vue,ExecutionDetail.vuebreadcrumb + source-agent attribution,PermissionsPanel.vue,TerminalPanelContent.vue,AgentWorkspace.vue,AgentBrainOrb.vuereviewed against the render ruleAgentAvatarstill receives the slug everywhere (including the duplicate initials/tint implementation inClientPortal.vue)Technical Notes
Comment in
src/frontend/src/router/index.jsexplicitly calls:name"the canonical agent identifier" — that stays true; only the rendered title changes.ReplayTimeline.vueand the operator cards already render an avatar beside the name, so they have marginally more room than a bare table cell — worth a case-by-case call rather than a blanket rule.Comma-joined agent lists (e.g. the GitHub PAT propagation failure list in
Settings.vue) get unreadable fast with long display names — slug is probably right there.Depends on: the #964 schema/API/MCP issue. Independent of the roomy-surfaces and pickers issues; can land last or in parallel.