From fcbfe677b543a1cdbd365217f0c90a604e04b24c Mon Sep 17 00:00:00 2001 From: J Date: Wed, 15 Jul 2026 02:20:53 +0800 Subject: [PATCH] feat(attribution): accountable-member avatar on agent task rows + transcript header (MUL-4302) Surface who each agent run is on behalf of where runs are actually browsed: - Agent detail activity tab: an avatar-only AttributionBadge on every task row's meta line (Now + Recent work), tooltip carries the name + resolution source. - Execution-record (transcript) dialog header: the full on-behalf-of badge next to the status pill. Adds a compact variant="avatar" mode to AttributionBadge, reusing its source-label mapping and degraded-attribution tone. Renders nothing when a run has no resolved accountable member. Co-authored-by: multica-agent --- .../agents/components/tabs/activity-tab.tsx | 9 +++ .../agent-transcript-dialog.tsx | 4 ++ .../components/attribution-badge.test.tsx | 27 +++++++ .../issues/components/attribution-badge.tsx | 72 +++++++++++++++++-- 4 files changed, 107 insertions(+), 5 deletions(-) diff --git a/packages/views/agents/components/tabs/activity-tab.tsx b/packages/views/agents/components/tabs/activity-tab.tsx index 9018b42fb0..44770704e4 100644 --- a/packages/views/agents/components/tabs/activity-tab.tsx +++ b/packages/views/agents/components/tabs/activity-tab.tsx @@ -37,6 +37,7 @@ import { useWorkspacePaths } from "@multica/core/paths"; import { issueDetailOptions } from "@multica/core/issues/queries"; import { AppLink } from "../../../navigation"; import { TranscriptButton } from "../../../common/task-transcript"; +import { AttributionBadge } from "../../../issues/components/attribution-badge"; import { taskStatusConfig } from "../../config"; import { failureReasonLabel } from "./task-failure"; import { Sparkline } from "../sparkline"; @@ -639,6 +640,14 @@ function TaskRow({ {failureLabel} )} + {/* Accountable member (MUL-4302 §9): whose behalf this run is on. + Avatar-only keeps the meta line tight; renders nothing when the + run has no resolved responsible member. */} + diff --git a/packages/views/common/task-transcript/agent-transcript-dialog.tsx b/packages/views/common/task-transcript/agent-transcript-dialog.tsx index 4fa8078862..c44b60a580 100644 --- a/packages/views/common/task-transcript/agent-transcript-dialog.tsx +++ b/packages/views/common/task-transcript/agent-transcript-dialog.tsx @@ -34,6 +34,7 @@ import { DropdownMenuItem, } from "@multica/ui/components/ui/dropdown-menu"; import { ActorAvatar } from "../actor-avatar"; +import { AttributionBadge } from "../../issues/components/attribution-badge"; import { api } from "@multica/core/api"; import { useTranscriptViewStore, @@ -500,6 +501,9 @@ export function AgentTranscriptDialog({ {statusBadge} + {/* Accountable member (MUL-4302 §9): whose behalf this run is on. */} + +
{detailSeqs.length > 0 && (