fix(canvas/concierge): truncate agent role to one line, full text on hover #2436

Merged
agent-reviewer merged 1 commits from fix/concierge-role-truncate into main 2026-06-08 19:50:42 +00:00
2 changed files with 8 additions and 4 deletions
@@ -134,9 +134,9 @@
.ws.active .wsAv .dot { border-color: var(--card); }
.wsMeta { min-width: 0; flex: 1; }
.wsName { font-weight: 600; font-size: 13.5px; letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wsSub { display: flex; align-items: center; gap: 6px; margin-top: 1px; }
.wsRole { font-family: var(--mono); font-size: 10.5px; color: var(--tx-3); }
.wsStatus { font-size: 10.5px; font-weight: 500; display: flex; align-items: center; gap: 4px; }
.wsSub { display: flex; align-items: center; gap: 6px; margin-top: 1px; min-width: 0; }
.wsRole { font-family: var(--mono); font-size: 10.5px; color: var(--tx-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 0 1 auto; }
.wsStatus { font-size: 10.5px; font-weight: 500; display: flex; align-items: center; gap: 4px; flex: 0 0 auto; }
.wsStatus .sdot { width: 6px; height: 6px; border-radius: 50%; }
.rootTag { margin-left: auto; font-family: var(--mono); font-size: 9px; letter-spacing: .1em; text-transform: uppercase; color: var(--accent-2); background: var(--accent-soft); padding: 3px 6px; border-radius: 6px; border: 1px solid rgba(139,92,246,.28); }
.wsQ { margin-left: auto; flex: 0 0 auto; font-family: var(--mono); font-size: 10px; font-weight: 700; color: var(--tx-2); background: var(--hair); border: 1px solid var(--hair-2); padding: 2px 7px; border-radius: 20px; display: inline-flex; align-items: center; gap: 4px; }
@@ -227,6 +227,10 @@ export function ConciergeShell() {
const isRoot = depth === 0;
const isPlatform = n.id === platformRoot?.id;
const q = (n.data.activeTasks as number) ?? 0;
// Role can be a long descriptor (e.g. "Coding Executor (Kimi) — …"); render
// it compact (single-line, truncated by .wsRole) and surface the full text
// on hover via the native tooltip.
const roleLabel = isPlatform ? "platform" : n.data.role || "agent";
const row = (
<div
role="button"
@@ -251,7 +255,7 @@ export function ConciergeShell() {
<div className={s.wsMeta}>
<div className={s.wsName}>{n.data.name}</div>
<div className={s.wsSub}>
<span className={s.wsRole}>{isPlatform ? "platform" : n.data.role || "agent"}</span>
<span className={s.wsRole} title={roleLabel}>{roleLabel}</span>
<span className={s.wsStatus} style={{ color: st.color }}>
<span className={s.sdot} style={{ background: st.color }} />
{st.label}