refactor: extract roleLabels to shared constants

Move duplicated roleLabels map from AgentProperties.tsx, Agents.tsx,
OrgChart.tsx, and agent-config-primitives.tsx into AGENT_ROLE_LABELS
in packages/shared/src/constants.ts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt Van Horn
2026-03-07 17:07:14 -08:00
parent b886eb3cf0
commit 2639184f46
6 changed files with 23 additions and 23 deletions

View File

@@ -49,6 +49,20 @@ export const AGENT_ROLES = [
] as const; ] as const;
export type AgentRole = (typeof AGENT_ROLES)[number]; export type AgentRole = (typeof AGENT_ROLES)[number];
export const AGENT_ROLE_LABELS: Record<AgentRole, string> = {
ceo: "CEO",
cto: "CTO",
cmo: "CMO",
cfo: "CFO",
engineer: "Engineer",
designer: "Designer",
pm: "PM",
qa: "QA",
devops: "DevOps",
researcher: "Researcher",
general: "General",
};
export const AGENT_ICON_NAMES = [ export const AGENT_ICON_NAMES = [
"bot", "bot",
"cpu", "cpu",

View File

@@ -6,6 +6,7 @@ export {
AGENT_STATUSES, AGENT_STATUSES,
AGENT_ADAPTER_TYPES, AGENT_ADAPTER_TYPES,
AGENT_ROLES, AGENT_ROLES,
AGENT_ROLE_LABELS,
AGENT_ICON_NAMES, AGENT_ICON_NAMES,
ISSUE_STATUSES, ISSUE_STATUSES,
ISSUE_PRIORITIES, ISSUE_PRIORITIES,

View File

@@ -1,6 +1,6 @@
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { Link } from "@/lib/router"; import { Link } from "@/lib/router";
import type { Agent, AgentRuntimeState } from "@paperclipai/shared"; import { AGENT_ROLE_LABELS, type Agent, type AgentRuntimeState } from "@paperclipai/shared";
import { agentsApi } from "../api/agents"; import { agentsApi } from "../api/agents";
import { useCompany } from "../context/CompanyContext"; import { useCompany } from "../context/CompanyContext";
import { queryKeys } from "../lib/queryKeys"; import { queryKeys } from "../lib/queryKeys";
@@ -25,11 +25,7 @@ const adapterLabels: Record<string, string> = {
http: "HTTP", http: "HTTP",
}; };
const roleLabels: Record<string, string> = { const roleLabels = AGENT_ROLE_LABELS as Record<string, string>;
ceo: "CEO", cto: "CTO", cmo: "CMO", cfo: "CFO",
engineer: "Engineer", designer: "Designer", pm: "PM",
qa: "QA", devops: "DevOps", researcher: "Researcher", general: "General",
};
function PropertyRow({ label, children }: { label: string; children: React.ReactNode }) { function PropertyRow({ label, children }: { label: string; children: React.ReactNode }) {
return ( return (

View File

@@ -15,6 +15,7 @@ import {
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { HelpCircle, ChevronDown, ChevronRight } from "lucide-react"; import { HelpCircle, ChevronDown, ChevronRight } from "lucide-react";
import { cn } from "../lib/utils"; import { cn } from "../lib/utils";
import { AGENT_ROLE_LABELS } from "@paperclipai/shared";
/* ---- Help text for (?) tooltips ---- */ /* ---- Help text for (?) tooltips ---- */
export const help: Record<string, string> = { export const help: Record<string, string> = {
@@ -60,11 +61,7 @@ export const adapterLabels: Record<string, string> = {
http: "HTTP", http: "HTTP",
}; };
export const roleLabels: Record<string, string> = { export const roleLabels = AGENT_ROLE_LABELS as Record<string, string>;
ceo: "CEO", cto: "CTO", cmo: "CMO", cfo: "CFO",
engineer: "Engineer", designer: "Designer", pm: "PM",
qa: "QA", devops: "DevOps", researcher: "Researcher", general: "General",
};
/* ---- Primitive components ---- */ /* ---- Primitive components ---- */

View File

@@ -18,7 +18,7 @@ import { PageTabBar } from "../components/PageTabBar";
import { Tabs } from "@/components/ui/tabs"; import { Tabs } from "@/components/ui/tabs";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Bot, Plus, List, GitBranch, SlidersHorizontal } from "lucide-react"; import { Bot, Plus, List, GitBranch, SlidersHorizontal } from "lucide-react";
import type { Agent } from "@paperclipai/shared"; import { AGENT_ROLE_LABELS, type Agent } from "@paperclipai/shared";
const adapterLabels: Record<string, string> = { const adapterLabels: Record<string, string> = {
claude_local: "Claude", claude_local: "Claude",
@@ -31,11 +31,7 @@ const adapterLabels: Record<string, string> = {
http: "HTTP", http: "HTTP",
}; };
const roleLabels: Record<string, string> = { const roleLabels = AGENT_ROLE_LABELS as Record<string, string>;
ceo: "CEO", cto: "CTO", cmo: "CMO", cfo: "CFO",
engineer: "Engineer", designer: "Designer", pm: "PM",
qa: "QA", devops: "DevOps", researcher: "Researcher", general: "General",
};
type FilterTab = "all" | "active" | "paused" | "error"; type FilterTab = "all" | "active" | "paused" | "error";

View File

@@ -10,7 +10,7 @@ import { EmptyState } from "../components/EmptyState";
import { PageSkeleton } from "../components/PageSkeleton"; import { PageSkeleton } from "../components/PageSkeleton";
import { AgentIcon } from "../components/AgentIconPicker"; import { AgentIcon } from "../components/AgentIconPicker";
import { Network } from "lucide-react"; import { Network } from "lucide-react";
import type { Agent } from "@paperclipai/shared"; import { AGENT_ROLE_LABELS, type Agent } from "@paperclipai/shared";
// Layout constants // Layout constants
const CARD_W = 200; const CARD_W = 200;
@@ -422,11 +422,7 @@ export function OrgChart() {
); );
} }
const roleLabels: Record<string, string> = { const roleLabels = AGENT_ROLE_LABELS as Record<string, string>;
ceo: "CEO", cto: "CTO", cmo: "CMO", cfo: "CFO",
engineer: "Engineer", designer: "Designer", pm: "PM",
qa: "QA", devops: "DevOps", researcher: "Researcher", general: "General",
};
function roleLabel(role: string): string { function roleLabel(role: string): string {
return roleLabels[role] ?? role; return roleLabels[role] ?? role;