refactor: deprecate AIGatewayRoutingEnabled, remove direct chat routing (#26862)

This PR removes the now-dead direct-routing code:

- Deletes the direct routing implementation.
- Collapses the resolvedModelRoute discriminated union into aiGatewayModelRoute.
- Removes the dead providerKeys cascade.
- Deletes the preferredShortTextCandidates quickgen function.
- Simplifies the advisor override error handling.
- Deprecates the AIGatewayRoutingEnabled deployment option. It is now a no-op so as to not break existing deployments on upgrade.

Once direct routing was gone, the AI Gateway became mandatory for chat, which surfaced gaps in how the product behaves with the gateway disabled:

- Exposes ai-gateway-enabled to the frontend via embedded page metadata.
- Disables the chat composer via the existing AgentSetupNotice when the gateway is disabled, for both new and existing chats.
- Fixes nil/typed-nil chatDaemon panics on startup and shutdown when gateway is disabled.
- Fixes chat WebSocket from retrying the still-gated stream endpoint forever when the gateway is disabled.
This commit is contained in:
Cian Johnston
2026-07-01 20:15:03 +01:00
committed by GitHub
parent 3e0875d236
commit 4936ff9808
47 changed files with 1075 additions and 869 deletions
+23
View File
@@ -263,6 +263,29 @@ func TestHealthz(t *testing.T) {
assert.Equal(t, "OK", string(body))
}
// TestAIGatewayDisabledStartupAndShutdown verifies the server starts and
// shuts down cleanly when the AI Gateway is disabled, leaving api.chatDaemon
// nil. It exercises the startup path (git sync worker callback binding, see
// chatDaemonPublishDiffStatusChangeFunc) and the shutdown path (Close on a
// nil daemon), both of which panicked before the nil guards were added.
func TestAIGatewayDisabledStartupAndShutdown(t *testing.T) {
t.Parallel()
dv := coderdtest.DeploymentValues(t)
require.NoError(t, dv.AI.BridgeConfig.Enabled.Set("false"))
// Constructing the client starts the server; t.Cleanup (registered by
// coderdtest.New) closes it at the end of the test, exercising the
// shutdown path that used to panic.
client := coderdtest.New(t, &coderdtest.Options{
DeploymentValues: dv,
})
res, err := client.Request(context.Background(), http.MethodGet, "/healthz", nil)
require.NoError(t, err)
defer res.Body.Close()
require.Equal(t, http.StatusOK, res.StatusCode)
}
func TestSwagger(t *testing.T) {
t.Parallel()