From 1cda873cb58e422313afd1db55ebe8cb27026dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Thu, 28 May 2026 22:43:33 -0400 Subject: [PATCH] Render audit events as readable labels instead of raw codes --- .../src/renderer/src/pages/chat/ChatThreadPanel.tsx | 4 ++-- .../src/renderer/src/pages/settings/AccountPanels.tsx | 6 +++--- AgentCompany-New/src/renderer/src/pages/types.ts | 10 ++++++++++ AgentCompany-New/tests/e2e/desktop.spec.ts | 4 ++-- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/AgentCompany-New/src/renderer/src/pages/chat/ChatThreadPanel.tsx b/AgentCompany-New/src/renderer/src/pages/chat/ChatThreadPanel.tsx index 11b65777..0aa627a9 100644 --- a/AgentCompany-New/src/renderer/src/pages/chat/ChatThreadPanel.tsx +++ b/AgentCompany-New/src/renderer/src/pages/chat/ChatThreadPanel.tsx @@ -10,7 +10,7 @@ import type { ChatThreadRecord, FileObjectRecord, } from "../../../../shared/domain"; -import { formatTime } from "../types"; +import { auditEventLabel, formatTime } from "../types"; import { ChatMessageRow } from "./ChatMessageRow"; import { senderName, type MessageContext } from "./chat-helpers"; @@ -241,7 +241,7 @@ function AuditReplay({ events }: { events: AuditEventRecord[] }) { > {formatTime(event.createdAt)} - {event.entityType}.{event.action} + {auditEventLabel(event.entityType, event.action)} ))} diff --git a/AgentCompany-New/src/renderer/src/pages/settings/AccountPanels.tsx b/AgentCompany-New/src/renderer/src/pages/settings/AccountPanels.tsx index 465bae11..8905587b 100644 --- a/AgentCompany-New/src/renderer/src/pages/settings/AccountPanels.tsx +++ b/AgentCompany-New/src/renderer/src/pages/settings/AccountPanels.tsx @@ -1,6 +1,6 @@ import { Avatar, Pill } from "../../shared/ui"; import type { AuditEventRecord, EmployeeRecord } from "../../../../shared/domain"; -import { formatRelative } from "../types"; +import { formatRelative, humanizeToken } from "../types"; export function ProfilePanel({ employee }: { employee: EmployeeRecord }) { return ( @@ -43,7 +43,7 @@ export function NotificationsPanel({ events, employee }: { events: AuditEventRec style={{ padding: "12px 18px", borderBottom: index === visible.length - 1 ? "none" : "1px solid var(--border-soft)" }} > {event.entityType.replaceAll("_", " ")} - {event.action} + {humanizeToken(event.action)} {formatRelative(event.createdAt)} ))} @@ -68,7 +68,7 @@ export function SecurityPanel({ events }: { events: AuditEventRecord[] }) { style={{ padding: "12px 18px", borderBottom: index === security.length - 1 ? "none" : "1px solid var(--border-soft)" }} > {event.entityType.replaceAll("_", " ")} - {event.action} + {humanizeToken(event.action)} {formatRelative(event.createdAt)} ))} diff --git a/AgentCompany-New/src/renderer/src/pages/types.ts b/AgentCompany-New/src/renderer/src/pages/types.ts index 19bde80a..5525b995 100644 --- a/AgentCompany-New/src/renderer/src/pages/types.ts +++ b/AgentCompany-New/src/renderer/src/pages/types.ts @@ -46,6 +46,16 @@ export function formatTime(iso: string): string { return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", hour12: false }); } +export function humanizeToken(value: string): string { + const spaced = value.replace(/_/g, " ").trim(); + if (!spaced) return spaced; + return spaced.charAt(0).toUpperCase() + spaced.slice(1); +} + +export function auditEventLabel(entityType: string, action: string): string { + return `${humanizeToken(entityType)} ${action.replace(/_/g, " ")}`.trim(); +} + export function formatBytes(bytes: number): string { if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`; diff --git a/AgentCompany-New/tests/e2e/desktop.spec.ts b/AgentCompany-New/tests/e2e/desktop.spec.ts index e63c812e..ab86a932 100644 --- a/AgentCompany-New/tests/e2e/desktop.spec.ts +++ b/AgentCompany-New/tests/e2e/desktop.spec.ts @@ -90,8 +90,8 @@ test("onboards, hires, and creates work in the Electron shell", async () => { await expect(page.getByText("/escalate").first()).toBeVisible(); await page.getByRole("button", { name: "Open thread" }).first().click(); await expect(page.getByText("Audit")).toBeVisible(); - await expect(page.getByText("chat_message.sent").first()).toBeVisible(); - await expect(page.getByText("approval.requested").first()).toBeVisible(); + await expect(page.getByText("Chat message sent").first()).toBeVisible(); + await expect(page.getByText("Approval requested").first()).toBeVisible(); await page.getByRole("button", { name: "Approvals" }).click(); await expect(page.getByText("Escalate release").first()).toBeVisible();