diff --git a/docs/ai-coder/ai-gateway/providers.md b/docs/ai-coder/ai-gateway/providers.md index c849c6aac0..8d21ab4c9c 100644 --- a/docs/ai-coder/ai-gateway/providers.md +++ b/docs/ai-coder/ai-gateway/providers.md @@ -30,8 +30,8 @@ handling, and how to monitor providers. > configuration that is ineffectual.** > > The environment variables can be safely removed once seeding has -> completed. Visit `https:///ai/settings` to see which -> providers have been seeded. +> completed. Visit `https:///ai/settings/providers` to see +> which providers have been seeded. After seeding, manage providers through the dashboard or API. A provider that has been edited or removed there is not recreated or overwritten diff --git a/docs/install/releases/esr-2.29-2.34-upgrade.md b/docs/install/releases/esr-2.29-2.34-upgrade.md index 21bbf6dc10..9baee0b73d 100644 --- a/docs/install/releases/esr-2.29-2.34-upgrade.md +++ b/docs/install/releases/esr-2.29-2.34-upgrade.md @@ -184,7 +184,7 @@ updates, or change administrator expectations: | Tasks is the primary AI coding workflow. | Coder Agents is the long-term replacement, and Tasks is supported through the 2.34 ESR window (into 2026). | Plan migration from the Tasks API to the Chats API and Coder Agents. See [Migrating from the Tasks API to the Chats API](../../ai-coder/agents/tasks-to-chats-migration.md). | | AI Gateway injected MCP tools can be used for tool exposure. | Injected MCP tools are deprecated. | Move new integrations toward Coder Agents MCP server configuration or the MCP server flow. See [AI Gateway MCP](../../ai-coder/ai-gateway/mcp.md) and [MCP servers](../../ai-coder/agents/platform-controls/mcp-servers.md). | | AI Bridge is opt-in via `CODER_AIBRIDGE_ENABLED` (default `false`). | The toggle is renamed to `CODER_AI_GATEWAY_ENABLED` and now defaults to `true`. | The in-memory AI Gateway now starts on every deployment. Set `CODER_AI_GATEWAY_ENABLED=false`, or the deprecated `CODER_AIBRIDGE_ENABLED` alias which still works, to keep the old behavior. | -| AI Gateway providers are configured with `CODER_AIBRIDGE_PROVIDER_*` or `CODER_AI_GATEWAY_PROVIDER_*` env vars. | Provider configuration is stored in the database. Env vars seed the database once on first startup, then are deprecated. | After upgrade, visit `/ai/settings` to verify seeded providers, then remove the env vars. Coderd fails to start if env vars drift from the seeded database row. See [AI Gateway providers](../../ai-coder/ai-gateway/providers.md). | +| AI Gateway providers are configured with `CODER_AIBRIDGE_PROVIDER_*` or `CODER_AI_GATEWAY_PROVIDER_*` env vars. | Provider configuration is stored in the database. Env vars seed the database once on first startup, then are deprecated. | After upgrade, visit `/ai/settings/providers` to verify seeded providers, then remove the env vars. Coderd fails to start if env vars drift from the seeded database row. See [AI Gateway providers](../../ai-coder/ai-gateway/providers.md). | | Regular users can read their own AI Gateway interceptions. | Only owners and auditors can read AI Gateway interception data. | Update dashboards, scripts, or user workflows that expected self-service interception reads. This intentionally narrows the RBAC surface. | | `coder groups list -o json` returns the old command output shape. | `coder groups list -o json` returns a flat structure matching other list commands. | Update scripts that parse this command output. | | `coder tokens rm` deletes token records by default. | `coder tokens rm` expires tokens by default and keeps records for auditability. | Use `coder tokens rm --delete` only when the token record must be deleted. Update scripts that expect removed tokens to disappear from token history. | @@ -257,7 +257,7 @@ The Coder team recommends taking the following steps when performing the upgrade starts with changed parameters. - **Audit AI Gateway integrations:** Update experimental API routes, check permissions for interception/session data, migrate provider configuration - from env vars to the database via `/ai/settings`, verify proxy mode behavior, + from env vars to the database via `/ai/settings/providers`, verify proxy mode behavior, and review any injected MCP usage. - **Plan the Tasks to Agents migration:** Tasks remains available during the support window, but new automation should use Coder Agents and the Chats API. diff --git a/site/src/modules/management/AISettingsSidebarView.tsx b/site/src/modules/management/AISettingsSidebarView.tsx index c20005ff4f..cc1887adf7 100644 --- a/site/src/modules/management/AISettingsSidebarView.tsx +++ b/site/src/modules/management/AISettingsSidebarView.tsx @@ -28,7 +28,7 @@ const AISettingsSidebarView: FC = ({ )} {permissions.viewAnyAIProvider && ( - + Providers )} diff --git a/site/src/pages/AISettingsPage/ProvidersPage/AddProviderPage/AddProviderPage.tsx b/site/src/pages/AISettingsPage/ProvidersPage/AddProviderPage/AddProviderPage.tsx index 74df05f479..10a993bcba 100644 --- a/site/src/pages/AISettingsPage/ProvidersPage/AddProviderPage/AddProviderPage.tsx +++ b/site/src/pages/AISettingsPage/ProvidersPage/AddProviderPage/AddProviderPage.tsx @@ -18,7 +18,7 @@ const AddProviderPage: React.FC = () => { if (!provider) { return (
- + diff --git a/site/src/pages/AgentsPage/AgentChatPageView.stories.tsx b/site/src/pages/AgentsPage/AgentChatPageView.stories.tsx index d8ebbad85d..f8411e752c 100644 --- a/site/src/pages/AgentsPage/AgentChatPageView.stories.tsx +++ b/site/src/pages/AgentsPage/AgentChatPageView.stories.tsx @@ -544,7 +544,7 @@ export const MissingProviderAndModelSetup: Story = { }); expect(canvas.getByRole("link", { name: "provider" })).toHaveAttribute( "href", - "/ai/settings", + "/ai/settings/providers", ); expect(canvas.getByRole("link", { name: "model" })).toHaveAttribute( "href", @@ -607,7 +607,7 @@ export const MissingProviderSetup: Story = { }); expect(canvas.getByRole("link", { name: "provider" })).toHaveAttribute( "href", - "/ai/settings", + "/ai/settings/providers", ); }, }; diff --git a/site/src/pages/AgentsPage/components/AgentCreateForm.stories.tsx b/site/src/pages/AgentsPage/components/AgentCreateForm.stories.tsx index 8ba97d6b84..71ce472948 100644 --- a/site/src/pages/AgentsPage/components/AgentCreateForm.stories.tsx +++ b/site/src/pages/AgentsPage/components/AgentCreateForm.stories.tsx @@ -490,7 +490,7 @@ export const MissingProviderAndModelSetup: Story = { }); expect(canvas.getByRole("link", { name: "provider" })).toHaveAttribute( "href", - "/ai/settings", + "/ai/settings/providers", ); expect(canvas.getByRole("link", { name: "model" })).toHaveAttribute( "href", diff --git a/site/src/pages/AgentsPage/components/AgentSetupNotice.tsx b/site/src/pages/AgentsPage/components/AgentSetupNotice.tsx index dbd1966d20..dccb235f16 100644 --- a/site/src/pages/AgentsPage/components/AgentSetupNotice.tsx +++ b/site/src/pages/AgentsPage/components/AgentSetupNotice.tsx @@ -35,7 +35,7 @@ export const AgentSetupNotice: FC = ({ To chat with Coder Agents, set up a{" "} provider diff --git a/site/src/pages/AgentsPage/components/ChatsSidebar/settings/SettingsPanel.tsx b/site/src/pages/AgentsPage/components/ChatsSidebar/settings/SettingsPanel.tsx index 29fc8fe476..463f98d2f3 100644 --- a/site/src/pages/AgentsPage/components/ChatsSidebar/settings/SettingsPanel.tsx +++ b/site/src/pages/AgentsPage/components/ChatsSidebar/settings/SettingsPanel.tsx @@ -167,7 +167,7 @@ export const SettingsPanel: FC = ({ icon={PlugIcon} label="Providers" active={false} - to="/ai/settings" + to="/ai/settings/providers" trailingIcon={ArrowUpRightIcon} /> { +const AISettingsIndexRedirect = () => { const { permissions } = useAuthenticated(); if (permissions.viewAnyAIProvider) { - return ; + return ; } if (permissions.viewAIGatewayKeys) { @@ -487,7 +487,7 @@ const AISettingsIndexPage = () => { return ; } - return ; + return ; }; const GlobalLayout = () => { @@ -770,7 +770,7 @@ export const router = createBrowserRouter( path="gateway-keys" element={} /> - } /> + } /> } /> } /> - } /> + } /> } + /> + } /> @@ -882,7 +886,7 @@ export const router = createBrowserRouter( } /> } + element={} />