From d2ce9562e00cfd040e7c199d6632789451f3e300 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Mon, 23 Jun 2025 18:01:10 +0000 Subject: [PATCH 1/2] display tasks tab conditionally and remove ai-tasks experiment --- coderd/coderd.go | 1 - coderd/httpmw/csp.go | 7 ++----- coderd/httpmw/csp_test.go | 5 +---- codersdk/deployment.go | 1 - site/src/modules/dashboard/Navbar/NavbarView.tsx | 5 +---- 5 files changed, 4 insertions(+), 15 deletions(-) diff --git a/coderd/coderd.go b/coderd/coderd.go index 4507cd1dd7605..3e2e17b111469 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -1536,7 +1536,6 @@ func New(options *Options) *API { // Add CSP headers to all static assets and pages. CSP headers only affect // browsers, so these don't make sense on api routes. cspMW := httpmw.CSPHeaders( - api.Experiments, options.Telemetry.Enabled(), func() []*proxyhealth.ProxyHost { if api.DeploymentValues.Dangerous.AllowAllCors { // In this mode, allow all external requests. diff --git a/coderd/httpmw/csp.go b/coderd/httpmw/csp.go index 06897a45afd01..f39781ad51b03 100644 --- a/coderd/httpmw/csp.go +++ b/coderd/httpmw/csp.go @@ -6,7 +6,6 @@ import ( "strings" "github.com/coder/coder/v2/coderd/proxyhealth" - "github.com/coder/coder/v2/codersdk" ) // cspDirectives is a map of all csp fetch directives to their values. @@ -59,7 +58,7 @@ const ( // Example: https://github.com/coder/coder/issues/15118 // //nolint:revive -func CSPHeaders(experiments codersdk.Experiments, telemetry bool, proxyHosts func() []*proxyhealth.ProxyHost, staticAdditions map[CSPFetchDirective][]string) func(next http.Handler) http.Handler { +func CSPHeaders(telemetry bool, proxyHosts func() []*proxyhealth.ProxyHost, staticAdditions map[CSPFetchDirective][]string) func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Content-Security-Policy disables loading certain content types and can prevent XSS injections. @@ -124,9 +123,7 @@ func CSPHeaders(experiments codersdk.Experiments, telemetry bool, proxyHosts fun if len(extraConnect) > 0 { for _, extraHost := range extraConnect { // Allow embedding the app host. - if experiments.Enabled(codersdk.ExperimentAITasks) { - cspSrcs.Append(CSPDirectiveFrameSrc, extraHost.AppHost) - } + cspSrcs.Append(CSPDirectiveFrameSrc, extraHost.AppHost) if extraHost.Host == "*" { // '*' means all cspSrcs.Append(CSPDirectiveConnectSrc, "*") diff --git a/coderd/httpmw/csp_test.go b/coderd/httpmw/csp_test.go index 5fd4b5bbd38aa..7bf8b879ef26f 100644 --- a/coderd/httpmw/csp_test.go +++ b/coderd/httpmw/csp_test.go @@ -10,7 +10,6 @@ import ( "github.com/coder/coder/v2/coderd/httpmw" "github.com/coder/coder/v2/coderd/proxyhealth" - "github.com/coder/coder/v2/codersdk" ) func TestCSP(t *testing.T) { @@ -50,9 +49,7 @@ func TestCSP(t *testing.T) { r := httptest.NewRequest(http.MethodGet, "/", nil) rw := httptest.NewRecorder() - httpmw.CSPHeaders(codersdk.Experiments{ - codersdk.ExperimentAITasks, - }, false, func() []*proxyhealth.ProxyHost { + httpmw.CSPHeaders(false, func() []*proxyhealth.ProxyHost { return proxyHosts }, map[httpmw.CSPFetchDirective][]string{ httpmw.CSPDirectiveMediaSrc: expectedMedia, diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 90e8a4c879ec5..331f4566737c3 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -3369,7 +3369,6 @@ const ( ExperimentWebPush Experiment = "web-push" // Enables web push notifications through the browser. ExperimentWorkspacePrebuilds Experiment = "workspace-prebuilds" // Enables the new workspace prebuilds feature. ExperimentAgenticChat Experiment = "agentic-chat" // Enables the new agentic AI chat feature. - ExperimentAITasks Experiment = "ai-tasks" // Enables the new AI tasks feature. ) // ExperimentsSafe should include all experiments that are safe for diff --git a/site/src/modules/dashboard/Navbar/NavbarView.tsx b/site/src/modules/dashboard/Navbar/NavbarView.tsx index 7e56c9643c066..3e70d56e4aabb 100644 --- a/site/src/modules/dashboard/Navbar/NavbarView.tsx +++ b/site/src/modules/dashboard/Navbar/NavbarView.tsx @@ -1,5 +1,4 @@ import { API } from "api/api"; -import { experiments } from "api/queries/experiments"; import type * as TypesGen from "api/typesGenerated"; import { Button } from "components/Button/Button"; import { ExternalImage } from "components/ExternalImage/ExternalImage"; @@ -10,7 +9,6 @@ import { useWebpushNotifications } from "contexts/useWebpushNotifications"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; import { NotificationsInbox } from "modules/notifications/NotificationsInbox/NotificationsInbox"; import type { FC } from "react"; -import { useQuery } from "react-query"; import { NavLink, useLocation } from "react-router-dom"; import { cn } from "utils/cn"; import { DeploymentDropdown } from "./DeploymentDropdown"; @@ -145,7 +143,6 @@ const NavItems: FC = ({ className }) => { const location = useLocation(); const agenticChat = useAgenticChat(); const { metadata } = useEmbeddedMetadata(); - const experimentsQuery = useQuery(experiments(metadata.experiments)); return (