fix(site): fix provider link on models page pointing to stale path (#26011)

Fixes https://linear.app/codercom/issue/CODAGT-547

The "Connect a provider" link shown on `/agents/settings/models` when no
providers are configured was pointing to `/agents/settings/providers` (a
stale duplicate view) instead of `/ai/settings` (the canonical provider
configuration page).

Audited all frontend source files for references to the stale path. This
was the only link; other references to `/ai/settings` already point to
the correct page.

<details><summary>Generated by Coder Agents</summary>
This PR was generated by Coder Agents on behalf of @tracyjohnsonux.
</details>

---------

Co-authored-by: Jaayden Halko <jaayden@coder.com>
This commit is contained in:
TJ
2026-06-02 23:19:33 -07:00
committed by GitHub
co-authored by Jaayden Halko
parent b49344519b
commit 8a9580a294
6 changed files with 6 additions and 115 deletions
@@ -1,101 +0,0 @@
import type { FC } from "react";
import { useMutation, useQuery, useQueryClient } from "react-query";
import {
chatModelConfigs,
chatModels,
chatProviderConfigs,
createChatModelConfig,
createChatProviderConfig,
deleteChatModelConfig,
deleteChatProviderConfig,
updateChatModelConfig,
updateChatProviderConfig,
} from "#/api/queries/chats";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { RequirePermission } from "#/modules/permissions/RequirePermission";
import { ChatModelAdminPanel } from "./components/ChatModelAdminPanel/ChatModelAdminPanel";
const AgentSettingsProvidersPage: FC = () => {
const { permissions } = useAuthenticated();
const queryClient = useQueryClient();
// Queries.
const providerConfigsQuery = useQuery({
...chatProviderConfigs(),
enabled: permissions.editDeploymentConfig,
});
const modelConfigsQuery = useQuery(chatModelConfigs());
const modelCatalogQuery = useQuery(chatModels());
// Mutations.
const createProviderMutation = useMutation(
createChatProviderConfig(queryClient),
);
const updateProviderMutation = useMutation(
updateChatProviderConfig(queryClient),
);
const deleteProviderMutation = useMutation(
deleteChatProviderConfig(queryClient),
);
const createModelMutation = useMutation(createChatModelConfig(queryClient));
const updateModelMutation = useMutation(updateChatModelConfig(queryClient));
const deleteModelMutation = useMutation(deleteChatModelConfig(queryClient));
return (
<RequirePermission isFeatureVisible={permissions.editDeploymentConfig}>
<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 conversations."
providerConfigsData={providerConfigsQuery.data}
modelConfigsData={modelConfigsQuery.data}
modelCatalogData={modelCatalogQuery.data}
isLoading={
providerConfigsQuery.isLoading ||
modelConfigsQuery.isLoading ||
modelCatalogQuery.isLoading
}
providerConfigsError={
providerConfigsQuery.isError ? providerConfigsQuery.error : null
}
modelConfigsError={
modelConfigsQuery.isError ? modelConfigsQuery.error : null
}
modelCatalogError={
modelCatalogQuery.isError ? modelCatalogQuery.error : null
}
onCreateProvider={(req) => createProviderMutation.mutateAsync(req)}
onUpdateProvider={(providerConfigId, req) =>
updateProviderMutation.mutateAsync({ providerConfigId, req })
}
onDeleteProvider={(id) => deleteProviderMutation.mutateAsync(id)}
isProviderMutationPending={
createProviderMutation.isPending ||
updateProviderMutation.isPending ||
deleteProviderMutation.isPending
}
providerMutationError={
createProviderMutation.error ??
updateProviderMutation.error ??
deleteProviderMutation.error
}
onCreateModel={(req) => createModelMutation.mutateAsync(req)}
onUpdateModel={(modelConfigId, req) =>
updateModelMutation.mutateAsync({ modelConfigId, req })
}
onDeleteModel={(id) => deleteModelMutation.mutateAsync(id)}
isCreatingModel={createModelMutation.isPending}
isUpdatingModel={updateModelMutation.isPending}
isDeletingModel={deleteModelMutation.isPending}
modelMutationError={
createModelMutation.error ??
updateModelMutation.error ??
deleteModelMutation.error
}
/>
</RequirePermission>
);
};
export default AgentSettingsProvidersPage;
@@ -164,7 +164,7 @@ export const LinksToProvidersFromEmptyState: Story = {
await expect(canvas.getByText("No models configured yet.")).toBeVisible();
await expect(providerLink).toBeVisible();
expect(providerLink).toHaveAttribute("href", "/agents/settings/providers");
expect(providerLink).toHaveAttribute("href", "/ai/settings");
},
};
@@ -311,7 +311,7 @@ export const ModelsSection: FC<ModelsSectionProps> = ({
<p className="m-0 text-xs text-content-secondary">
Connect a{" "}
<Link
to="/agents/settings/providers"
to="/ai/settings"
className="underline transition-colors hover:text-content-primary"
>
provider
@@ -53,13 +53,6 @@ describe("sidebarViewFromPath", () => {
});
});
it("returns the providers admin settings section", () => {
expect(sidebarViewFromPath("/agents/settings/providers")).toEqual({
panel: "settings-admin",
section: "providers",
});
});
it("normalizes the admin index route to an undefined section", () => {
expect(sidebarViewFromPath("/agents/settings/admin")).toEqual({
panel: "settings-admin",
@@ -7,7 +7,6 @@ type SidebarView =
const ADMIN_SETTINGS_SECTIONS = new Set([
"agents",
"templates",
"providers",
"models",
"mcp-servers",
"spend",
+4 -4
View File
@@ -384,9 +384,6 @@ const AgentSettingsUserAgentsPage = lazy(
const AgentSettingsPersonalSkillsPage = lazy(
() => import("./pages/AgentsPage/AgentSettingsPersonalSkillsPage"),
);
const AgentSettingsProvidersPage = lazy(
() => import("./pages/AgentsPage/AgentSettingsProvidersPage"),
);
const AgentSettingsAPIKeysPage = lazy(
() => import("./pages/AgentsPage/AgentSettingsAPIKeysPage"),
);
@@ -791,7 +788,10 @@ export const router = createBrowserRouter(
<Route path="admin" element={<AgentSettingsAgentsPage />} />
<Route path="agents" element={<AgentSettingsAgentsPage />} />
<Route path="api-keys" element={<AgentSettingsAPIKeysPage />} />
<Route path="providers" element={<AgentSettingsProvidersPage />} />
<Route
path="providers"
element={<Navigate to="/ai/settings" replace />}
/>
<Route path="models" element={<AgentSettingsModelsPage />} />
<Route
path="mcp-servers"