fix: rename user-facing 'chats' to 'Coder Agents' (#23905)

Refs #23897

- Rename user-facing "chats" to "Coder Agents" (feature name) or
"conversations" (individual instances)
- Covers UI strings, docs prose, Storybook stories, and aria labels
- API paths, internal code identifiers, and the "Chats API" docs page
name are intentionally left unchanged
- TaskPage / AI Tasks are out of scope

> 🤖 Written by a Coder Agent. Will be reviewed by a human.
This commit is contained in:
Cian Johnston
2026-04-01 14:30:04 +01:00
committed by GitHub
parent ddafdbcbce
commit 7198f9040d
18 changed files with 54 additions and 51 deletions
@@ -24,7 +24,7 @@ export const AgentAnalyticsPageView: FC<AgentAnalyticsPageViewProps> = ({
<div className="mx-auto w-full max-w-3xl">
<SectionHeader
label="Analytics"
description="Review your personal chat usage and cost breakdowns."
description="Review your personal Coder Agents usage and cost breakdowns."
action={
<div className="flex items-center gap-2 text-xs text-content-secondary">
<BarChart3Icon className="h-4 w-4" />
@@ -249,7 +249,7 @@ export const AgentSettingsBehaviorPageView: FC<
<>
<SectionHeader
label="Behavior"
description="Custom instructions that shape how the agent responds in your chats."
description="Custom instructions that shape how the agent responds in your conversations."
/>
{/* ── Personal prompt (always visible) ── */}
<form
@@ -260,7 +260,7 @@ export const AgentSettingsBehaviorPageView: FC<
Personal Instructions
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Applied to all your chats. Only visible to you.
Applied to all your conversations. Only visible to you.
</p>
<TextareaAutosize
className={cn(
@@ -462,8 +462,8 @@ export const AgentSettingsBehaviorPageView: FC<
<p className="!mt-0.5 m-0 flex-1 text-xs text-content-secondary">
Set a default autostop for agent-created workspaces that don't
have one defined in their template. Template-defined autostop
rules always take precedence. Active chats will extend the stop
time.
rules always take precedence. Active conversations will extend
the stop time.
</p>
<Switch
checked={isAutostopEnabled}
@@ -25,7 +25,7 @@ const AgentSettingsMCPServersPage: FC = () => {
<RequirePermission isFeatureVisible={permissions.editDeploymentConfig}>
<MCPServerAdminPanel
sectionLabel="MCP Servers"
sectionDescription="Configure external MCP servers that provide additional tools for AI chat sessions."
sectionDescription="Configure external MCP servers that provide additional tools for Coder Agents."
sectionBadge={<AdminBadge />}
serversData={serversQuery.data}
isLoadingServers={serversQuery.isLoading}
@@ -45,7 +45,7 @@ const AgentSettingsProvidersPage: FC = () => {
<ChatModelAdminPanel
section="providers"
sectionLabel="Providers"
sectionDescription="Connect third-party LLM services like OpenAI, Anthropic, or Google. Each provider supplies models that users can select for their chats."
sectionDescription="Connect third-party LLM services like OpenAI, Anthropic, or Google. Each provider supplies models that users can select for their conversations."
sectionBadge={<AdminBadge />}
providerConfigsData={providerConfigsQuery.data}
modelConfigsData={modelConfigsQuery.data}
@@ -188,8 +188,8 @@ export const AgentSettingsUsagePageView: FC<
label="Usage"
description={
selectedUserId
? "Review deployment chat usage for a specific user."
: "Review deployment chat usage and drill into individual users."
? "Review deployment Coder Agents usage for a specific user."
: "Review deployment Coder Agents usage and drill into individual users."
}
badge={<AdminBadge />}
action={
@@ -611,7 +611,7 @@ export const OpensAnalyticsForAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Review your personal chat usage and cost breakdowns.",
"Review your personal Coder Agents usage and cost breakdowns.",
),
).toBeInTheDocument();
});
@@ -633,7 +633,7 @@ export const OpensAnalyticsForNonAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Review your personal chat usage and cost breakdowns.",
"Review your personal Coder Agents usage and cost breakdowns.",
),
).toBeInTheDocument();
});
@@ -650,7 +650,7 @@ export const OpensSettingsForAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -670,7 +670,7 @@ export const OpensSettingsForNonAdmins: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -688,7 +688,7 @@ export const SettingsViewResets: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -698,13 +698,13 @@ export const SettingsViewResets: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Review deployment chat usage and drill into individual users.",
"Review deployment Coder Agents usage and drill into individual users.",
),
).toBeInTheDocument();
});
// Go back to chats
const backButton = screen.getByLabelText("Back to chats");
// Go back to conversations
const backButton = screen.getByLabelText("Back to Agents");
await userEvent.click(backButton);
// Re-open settings, should reset to Behavior
@@ -712,7 +712,7 @@ export const SettingsViewResets: Story = {
await waitFor(() => {
expect(
screen.getByText(
"Custom instructions that shape how the agent responds in your chats.",
"Custom instructions that shape how the agent responds in your conversations.",
),
).toBeInTheDocument();
});
@@ -24,7 +24,7 @@ const mock403Error = Object.assign(
statusText: "Forbidden",
data: {
message: "Forbidden.",
detail: "Insufficient permissions to create chat.",
detail: "Insufficient permissions to use Coder Agents.",
},
headers: {},
config: {},
@@ -30,7 +30,7 @@ export const ChatAccessDeniedAlert: FC = () => {
>
<p className="m-0 font-medium">Permission required</p>
<p className="m-0 mt-1 text-sm text-content-secondary">
You don't have permission to create chats. Contact your Coder
You don't have permission to use Coder Agents. Contact your Coder
administrator for access. Refresh this page after access has been
granted.
</p>
@@ -298,10 +298,13 @@ export const ChatCostSummaryView: FC<ChatCostSummaryViewProps> = ({
</div>
<div className="overflow-x-auto rounded-lg border border-border-default">
<Table className="text-sm" aria-label="Cost breakdown by chat">
<Table
className="text-sm"
aria-label="Cost breakdown by conversation"
>
<TableHeader>
<TableRow className="text-left text-xs font-medium uppercase tracking-wide text-content-secondary">
<TableHead className="px-4 py-3">Chat</TableHead>
<TableHead className="px-4 py-3">Conversation</TableHead>
<TableHead className="px-4 py-3 text-right">Cost</TableHead>
<TableHead className="px-4 py-3 text-right">
Messages
@@ -325,7 +328,7 @@ export const ChatCostSummaryView: FC<ChatCostSummaryViewProps> = ({
<TableCell className="px-4 py-3">
{chat.chat_title || (
<span className="italic text-content-secondary">
Untitled chat
Untitled conversation
</span>
)}
</TableCell>
@@ -39,7 +39,7 @@ export const ChatSummarizedTool: React.FC<{
<TriangleAlertIcon className="h-3.5 w-3.5 shrink-0 text-content-secondary" />
</TooltipTrigger>
<TooltipContent>
{errorMessage || "Failed to summarize chat"}
{errorMessage || "Failed to summarize conversation"}
</TooltipContent>
</Tooltip>
)}
@@ -341,8 +341,8 @@ export const ModelsSection: FC<ModelsSectionProps> = ({
{!modelConfig.enabled
? "Cannot set a disabled model as default"
: modelConfig.is_default
? "Pinned as default for new chats"
: "Pin as default for new chats"}
? "Pinned as default for new conversations"
: "Pin as default for new conversations"}
</TooltipContent>
</Tooltip>
<ChevronRightIcon className="h-5 w-5 shrink-0 text-content-secondary" />
@@ -64,7 +64,7 @@ const AVAILABILITY_OPTIONS = [
{
value: "force_on",
label: "Force On",
description: "Always injected into every chat session.",
description: "Always injected into every conversation.",
},
{
value: "default_on",
@@ -158,7 +158,7 @@ const ServerList: FC<ServerListProps> = ({
label={sectionLabel ?? "MCP Servers"}
description={
sectionDescription ??
"Configure external MCP servers that provide additional tools for AI chat sessions."
"Configure external MCP servers that provide additional tools for Coder Agents."
}
badge={sectionBadge}
action={
@@ -744,7 +744,7 @@ const ServerForm: FC<ServerFormProps> = ({
<Field
label="Availability"
htmlFor={`${formId}-availability`}
description="Controls how this server appears in new chats."
description="Controls how this server appears in new conversations."
>
<Select
value={form.values.availability}
@@ -1221,7 +1221,7 @@ export const AgentsSidebar: FC<AgentsSidebarProps> = (props) => {
asChild
variant="subtle"
size="icon"
aria-label="Back to chats"
aria-label="Back to Agents"
className="relative z-10 h-7 w-7 min-w-0 text-content-secondary hover:text-content-primary"
>
<Link
@@ -182,8 +182,8 @@ export const UserCompactionThresholdSettings: FC<
Context Compaction
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Control when chat context is automatically summarized for each model.
Setting 100% means the chat will never auto-compact.
Control when conversation context is automatically summarized for each
model. Setting 100% means the conversation will never auto-compact.
</p>
<div className="flex items-center gap-2 text-sm text-content-secondary">
<Spinner loading className="h-4 w-4" />
@@ -200,8 +200,8 @@ export const UserCompactionThresholdSettings: FC<
Context Compaction
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Control when chat context is automatically summarized for each model.
Setting 100% means the chat will never auto-compact.
Control when conversation context is automatically summarized for each
model. Setting 100% means the conversation will never auto-compact.
</p>
<p className="m-0 text-xs text-content-destructive">
{getErrorMessage(
@@ -219,8 +219,8 @@ export const UserCompactionThresholdSettings: FC<
Context Compaction
</h3>
<p className="!mt-0.5 m-0 text-xs text-content-secondary">
Control when chat context is automatically summarized for each model.
Setting 100% means the chat will never auto-compact.
Control when conversation context is automatically summarized for each
model. Setting 100% means the conversation will never auto-compact.
</p>
{isLoadingModelConfigs ? (
<div className="flex items-center gap-2 text-sm text-content-secondary">
@@ -29,7 +29,7 @@ const roleDescriptions: Record<string, string> = {
"user-admin": "User admin can manage all users and groups.",
"template-admin": "Template admin can manage all templates and workspaces.",
auditor: "Auditor can access the audit logs.",
"agents-access": "Coder Agents User allows creating and using AI chats.",
"agents-access": "Coder Agents User allows creating and using Coder Agents.",
member:
"Everybody is a member. This is a shared and default role for all users.",
};
@@ -227,7 +227,7 @@ export const WorkspacesTable: FC<WorkspacesTableProps> = ({
<Link
to={`/agents/${chatsByWorkspace[workspace.id]}`}
onClick={(e) => e.stopPropagation()}
aria-label={`View agent chat for ${workspace.name}`}
aria-label={`View agent conversation for ${workspace.name}`}
>
Agent
</Link>