diff --git a/AgentCompany-New/src/renderer/src/pages/ChatPage.tsx b/AgentCompany-New/src/renderer/src/pages/ChatPage.tsx index 7ce26917..55f17ee8 100644 --- a/AgentCompany-New/src/renderer/src/pages/ChatPage.tsx +++ b/AgentCompany-New/src/renderer/src/pages/ChatPage.tsx @@ -214,6 +214,7 @@ export function ChatPage({ snapshot, actions }: PageProps) { directs={directs} agents={agents} messages={messagesAll} + presence={snapshot.chatPresence} activeSpaceId={activeSpaceId} onSelect={(spaceId) => { setSelectedSpaceId(spaceId); diff --git a/AgentCompany-New/src/renderer/src/pages/chat/ChatSidebar.tsx b/AgentCompany-New/src/renderer/src/pages/chat/ChatSidebar.tsx index f039352d..5a7aad32 100644 --- a/AgentCompany-New/src/renderer/src/pages/chat/ChatSidebar.tsx +++ b/AgentCompany-New/src/renderer/src/pages/chat/ChatSidebar.tsx @@ -1,13 +1,29 @@ import type { ReactNode } from "react"; import { Avatar, Icon, IconButton } from "../../shared/ui"; -import type { AgentRecord, ChatMessageRecord, ChatSpaceRecord } from "../../../../shared/domain"; +import type { AgentRecord, ChatMessageRecord, ChatPresenceRecord, ChatSpaceRecord } from "../../../../shared/domain"; import { countMessagesIn } from "./chat-helpers"; +function presenceColor(status: string | undefined): string | null { + switch (status) { + case "active": + case "online": + return "var(--green)"; + case "waiting_approval": + case "busy": + return "var(--amber)"; + case "thinking": + return "var(--accent)"; + default: + return null; + } +} + export function ChatSidebar({ channels, directs, agents, messages, + presence, activeSpaceId, onSelect, onCreateSpace, @@ -16,10 +32,12 @@ export function ChatSidebar({ directs: ChatSpaceRecord[]; agents: AgentRecord[]; messages: ChatMessageRecord[]; + presence: ChatPresenceRecord[]; activeSpaceId: string | null; onSelect: (spaceId: string) => void; onCreateSpace: () => void; }) { + const presenceByPrincipal = new Map(presence.map((entry) => [entry.principalId, entry.status])); return (