From 94273a5a674652f4343683e2746559f25674dd62 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Mon, 17 Nov 2025 02:23:25 +0000 Subject: [PATCH 01/17] feat: implement `AI Bridge` heading to `/deployment/observability` --- .../ObservabilitySettingsPage.tsx | 3 ++- .../ObservabilitySettingsPageView.tsx | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx index 31bfb4d940bc0..844ae41bff326 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx @@ -8,7 +8,7 @@ import { ObservabilitySettingsPageView } from "./ObservabilitySettingsPageView"; const ObservabilitySettingsPage: FC = () => { const { deploymentConfig } = useDeploymentConfig(); const { entitlements } = useDashboard(); - const { multiple_organizations: hasPremiumLicense } = useFeatureVisibility(); + const { multiple_organizations: hasPremiumLicense, aibridge: hasAIBridgeEnabled } = useFeatureVisibility(); return ( <> @@ -18,6 +18,7 @@ const ObservabilitySettingsPage: FC = () => { options={deploymentConfig.options} featureAuditLogEnabled={entitlements.features.audit_log.enabled} isPremium={hasPremiumLicense} + isAIBridgeEnabled={hasAIBridgeEnabled} /> ); diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 011db7f954912..f10a0d66f490c 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -27,6 +27,7 @@ type ObservabilitySettingsPageViewProps = { options: SerpentOption[]; featureAuditLogEnabled: boolean; isPremium: boolean; + isAIBridgeEnabled: boolean; }; export const ObservabilitySettingsPageView: FC< @@ -97,6 +98,25 @@ export const ObservabilitySettingsPageView: FC< )} /> + +
+ + }> + + AI Bridge + + + Monitor and manage AI requests across your deployment. + + + + + deploymentGroupHasParent(o.group, "AIBridge"), + )} + /> +
); }; From 0e77551e3b4c33062dd6e51bd92484f5dee8529d Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Mon, 17 Nov 2025 02:38:32 +0000 Subject: [PATCH 02/17] chore: `lint`/`fmt` fix --- .../ObservabilitySettingsPage.tsx | 5 ++++- .../ObservabilitySettingsPageView.tsx | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx index 844ae41bff326..dae92217f73da 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx @@ -8,7 +8,10 @@ import { ObservabilitySettingsPageView } from "./ObservabilitySettingsPageView"; const ObservabilitySettingsPage: FC = () => { const { deploymentConfig } = useDeploymentConfig(); const { entitlements } = useDashboard(); - const { multiple_organizations: hasPremiumLicense, aibridge: hasAIBridgeEnabled } = useFeatureVisibility(); + const { + multiple_organizations: hasPremiumLicense, + aibridge: hasAIBridgeEnabled, + } = useFeatureVisibility(); return ( <> diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index f10a0d66f490c..dec752ab3b293 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -100,9 +100,11 @@ export const ObservabilitySettingsPageView: FC<
- - }> + + } + > AI Bridge From 53ee00fc50ccec450f2574b259e5571be02e2d31 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Mon, 17 Nov 2025 02:45:06 +0000 Subject: [PATCH 03/17] fix: dont show `AI Bridge` heading unless enabled --- .../ObservabilitySettingsPageView.tsx | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index dec752ab3b293..17e592274c0ba 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -32,7 +32,7 @@ type ObservabilitySettingsPageViewProps = { export const ObservabilitySettingsPageView: FC< ObservabilitySettingsPageViewProps -> = ({ options, featureAuditLogEnabled, isPremium }) => { +> = ({ options, featureAuditLogEnabled, isPremium, isAIBridgeEnabled }) => { return (
@@ -99,26 +99,28 @@ export const ObservabilitySettingsPageView: FC< />
-
- - } - > - - AI Bridge - - - Monitor and manage AI requests across your deployment. - - + {isAIBridgeEnabled && ( +
+ + } + > + + AI Bridge + + + Monitor and manage AI requests across your deployment. + + - - deploymentGroupHasParent(o.group, "AIBridge"), - )} - /> -
+ + deploymentGroupHasParent(o.group, "AIBridge"), + )} + /> +
+ )}
); }; From 51cb6b9ec1ab7f1d0fe698586f78ede47081395c Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Mon, 17 Nov 2025 02:47:33 +0000 Subject: [PATCH 04/17] fix: prefer to use `entitlement` over `featureVisibility` --- .../ObservabilitySettingsPage.tsx | 7 ++----- .../ObservabilitySettingsPageView.tsx | 11 ++++++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx index dae92217f73da..1d2c9da8bd804 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx @@ -8,10 +8,7 @@ import { ObservabilitySettingsPageView } from "./ObservabilitySettingsPageView"; const ObservabilitySettingsPage: FC = () => { const { deploymentConfig } = useDeploymentConfig(); const { entitlements } = useDashboard(); - const { - multiple_organizations: hasPremiumLicense, - aibridge: hasAIBridgeEnabled, - } = useFeatureVisibility(); + const { multiple_organizations: hasPremiumLicense } = useFeatureVisibility(); return ( <> @@ -20,8 +17,8 @@ const ObservabilitySettingsPage: FC = () => { ); diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 17e592274c0ba..aadc4ac1ed695 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -26,13 +26,18 @@ import OptionsTable from "../OptionsTable"; type ObservabilitySettingsPageViewProps = { options: SerpentOption[]; featureAuditLogEnabled: boolean; + featureAIBridgeEnabled: boolean; isPremium: boolean; - isAIBridgeEnabled: boolean; }; export const ObservabilitySettingsPageView: FC< ObservabilitySettingsPageViewProps -> = ({ options, featureAuditLogEnabled, isPremium, isAIBridgeEnabled }) => { +> = ({ + options, + featureAuditLogEnabled, + isPremium, + featureAIBridgeEnabled, +}) => { return (
@@ -99,7 +104,7 @@ export const ObservabilitySettingsPageView: FC< />
- {isAIBridgeEnabled && ( + {featureAIBridgeEnabled && (
Date: Tue, 18 Nov 2025 04:41:39 +0000 Subject: [PATCH 05/17] chore: commit bump From 8f9179e39a17bb06ec6fecf7b0511e4bc566ffb1 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Wed, 19 Nov 2025 06:02:39 +0000 Subject: [PATCH 06/17] feat: add testcase for `AIBridge` --- .../ObservabilitySettingsPageView.stories.tsx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx index f52def7cd6036..836718f098852 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx @@ -54,3 +54,18 @@ type Story = StoryObj; export const Page: Story = {}; export const Premium: Story = { args: { isPremium: true } }; + +export const AIBridge: Story = { + args: { + featureAIBridgeEnabled: true, + options: [ + { + name: "AIBridge Enabled", + value: true, + group: { name: "AIBridge" }, + flag: "aibridge-enabled", + hidden: false, + }, + ], + }, +}; From 48aa5b5a267b04bf1390871a6e435af69e9afa0d Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Thu, 27 Nov 2025 04:35:12 +0000 Subject: [PATCH 07/17] fix: rename `AIBridge` to `AI Bridge` --- codersdk/deployment.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 073ab7faede3e..2d034408b55ce 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -3240,7 +3240,7 @@ Write out the current server config as YAML to stdout.`, // AIBridge Options { - Name: "AIBridge Enabled", + Name: "AI Bridge Enabled", Description: "Whether to start an in-memory aibridged instance.", Flag: "aibridge-enabled", Env: "CODER_AIBRIDGE_ENABLED", @@ -3250,7 +3250,7 @@ Write out the current server config as YAML to stdout.`, YAML: "enabled", }, { - Name: "AIBridge OpenAI Base URL", + Name: "AI Bridge OpenAI Base URL", Description: "The base URL of the OpenAI API.", Flag: "aibridge-openai-base-url", Env: "CODER_AIBRIDGE_OPENAI_BASE_URL", @@ -3260,7 +3260,7 @@ Write out the current server config as YAML to stdout.`, YAML: "openai_base_url", }, { - Name: "AIBridge OpenAI Key", + Name: "AI Bridge OpenAI Key", Description: "The key to authenticate against the OpenAI API.", Flag: "aibridge-openai-key", Env: "CODER_AIBRIDGE_OPENAI_KEY", @@ -3270,7 +3270,7 @@ Write out the current server config as YAML to stdout.`, YAML: "openai_key", }, { - Name: "AIBridge Anthropic Base URL", + Name: "AI Bridge Anthropic Base URL", Description: "The base URL of the Anthropic API.", Flag: "aibridge-anthropic-base-url", Env: "CODER_AIBRIDGE_ANTHROPIC_BASE_URL", @@ -3280,7 +3280,7 @@ Write out the current server config as YAML to stdout.`, YAML: "anthropic_base_url", }, { - Name: "AIBridge Anthropic Key", + Name: "AI Bridge Anthropic Key", Description: "The key to authenticate against the Anthropic API.", Flag: "aibridge-anthropic-key", Env: "CODER_AIBRIDGE_ANTHROPIC_KEY", @@ -3290,7 +3290,7 @@ Write out the current server config as YAML to stdout.`, YAML: "anthropic_key", }, { - Name: "AIBridge Bedrock Region", + Name: "AI Bridge Bedrock Region", Description: "The AWS Bedrock API region.", Flag: "aibridge-bedrock-region", Env: "CODER_AIBRIDGE_BEDROCK_REGION", @@ -3300,7 +3300,7 @@ Write out the current server config as YAML to stdout.`, YAML: "bedrock_region", }, { - Name: "AIBridge Bedrock Access Key", + Name: "AI Bridge Bedrock Access Key", Description: "The access key to authenticate against the AWS Bedrock API.", Flag: "aibridge-bedrock-access-key", Env: "CODER_AIBRIDGE_BEDROCK_ACCESS_KEY", @@ -3310,7 +3310,7 @@ Write out the current server config as YAML to stdout.`, YAML: "bedrock_access_key", }, { - Name: "AIBridge Bedrock Access Key Secret", + Name: "AI Bridge Bedrock Access Key Secret", Description: "The access key secret to use with the access key to authenticate against the AWS Bedrock API.", Flag: "aibridge-bedrock-access-key-secret", Env: "CODER_AIBRIDGE_BEDROCK_ACCESS_KEY_SECRET", @@ -3320,7 +3320,7 @@ Write out the current server config as YAML to stdout.`, YAML: "bedrock_access_key_secret", }, { - Name: "AIBridge Bedrock Model", + Name: "AI Bridge Bedrock Model", Description: "The model to use when making requests to the AWS Bedrock API.", Flag: "aibridge-bedrock-model", Env: "CODER_AIBRIDGE_BEDROCK_MODEL", @@ -3330,7 +3330,7 @@ Write out the current server config as YAML to stdout.`, YAML: "bedrock_model", }, { - Name: "AIBridge Bedrock Small Fast Model", + Name: "AI Bridge Bedrock Small Fast Model", Description: "The small fast model to use when making requests to the AWS Bedrock API. Claude Code uses Haiku-class models to perform background tasks. See https://docs.claude.com/en/docs/claude-code/settings#environment-variables.", Flag: "aibridge-bedrock-small-fastmodel", Env: "CODER_AIBRIDGE_BEDROCK_SMALL_FAST_MODEL", From 9cd6621d640c405bfadaabf75cefabeed0c0ad52 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Thu, 27 Nov 2025 05:38:48 +0000 Subject: [PATCH 08/17] fix: hide `access key` and `openai` key --- codersdk/deployment.go | 12 ++++++++++-- .../ObservabilitySettingsPageView.tsx | 6 +++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/codersdk/deployment.go b/codersdk/deployment.go index a51e3e9247e58..2288e8a61bc49 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -139,7 +139,7 @@ func (n FeatureName) Humanize() string { case FeatureSCIM: return "SCIM" case FeatureAIBridge: - return "AI Bridge" + return "AIBridge" default: return strings.Title(strings.ReplaceAll(string(n), "_", " ")) } @@ -1174,7 +1174,7 @@ func (c *DeploymentValues) Options() serpent.OptionSet { YAML: "inbox", } deploymentGroupAIBridge = serpent.Group{ - Name: "AI Bridge", + Name: "AIBridge", YAML: "aibridge", } ) @@ -3268,6 +3268,8 @@ Write out the current server config as YAML to stdout.`, Default: "", Group: &deploymentGroupAIBridge, YAML: "openai_key", + Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), + Hidden: true, }, { Name: "AI Bridge Anthropic Base URL", @@ -3288,6 +3290,8 @@ Write out the current server config as YAML to stdout.`, Default: "", Group: &deploymentGroupAIBridge, YAML: "anthropic_key", + Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), + Hidden: true, }, { Name: "AI Bridge Bedrock Region", @@ -3308,6 +3312,8 @@ Write out the current server config as YAML to stdout.`, Default: "", Group: &deploymentGroupAIBridge, YAML: "bedrock_access_key", + Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), + Hidden: true, }, { Name: "AI Bridge Bedrock Access Key Secret", @@ -3318,6 +3324,8 @@ Write out the current server config as YAML to stdout.`, Default: "", Group: &deploymentGroupAIBridge, YAML: "bedrock_access_key_secret", + Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), + Hidden: true, }, { Name: "AI Bridge Bedrock Model", diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index bf4c3dc52acc9..501852080cdb5 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -117,9 +117,9 @@ export const ObservabilitySettingsPageView: FC< - deploymentGroupHasParent(o.group, "AIBridge"), - )} + options={options + .filter((o) => deploymentGroupHasParent(o.group, "AIBridge")) + .filter((o) => !o.hidden)} />
)} From eebd45762bd039fad81f0b14120197100701cd71 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Thu, 27 Nov 2025 05:47:16 +0000 Subject: [PATCH 09/17] chore: lint debug `AIBridge` --- codersdk/deployment.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 2288e8a61bc49..6ad1683489c93 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -3304,7 +3304,7 @@ Write out the current server config as YAML to stdout.`, YAML: "bedrock_region", }, { - Name: "AI Bridge Bedrock Access Key", + Name: "AIBridge Bedrock Access Key", Description: "The access key to authenticate against the AWS Bedrock API.", Flag: "aibridge-bedrock-access-key", Env: "CODER_AIBRIDGE_BEDROCK_ACCESS_KEY", From 31ad801bc01c8b0692813c71cfd11b122faf0224 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Thu, 27 Nov 2025 07:03:03 +0000 Subject: [PATCH 10/17] fix: restore `hidden` values --- codersdk/deployment.go | 4 ---- .../ObservabilitySettingsPageView.tsx | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 6ad1683489c93..1eb6aa839a361 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -3269,7 +3269,6 @@ Write out the current server config as YAML to stdout.`, Group: &deploymentGroupAIBridge, YAML: "openai_key", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), - Hidden: true, }, { Name: "AI Bridge Anthropic Base URL", @@ -3291,7 +3290,6 @@ Write out the current server config as YAML to stdout.`, Group: &deploymentGroupAIBridge, YAML: "anthropic_key", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), - Hidden: true, }, { Name: "AI Bridge Bedrock Region", @@ -3313,7 +3311,6 @@ Write out the current server config as YAML to stdout.`, Group: &deploymentGroupAIBridge, YAML: "bedrock_access_key", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), - Hidden: true, }, { Name: "AI Bridge Bedrock Access Key Secret", @@ -3325,7 +3322,6 @@ Write out the current server config as YAML to stdout.`, Group: &deploymentGroupAIBridge, YAML: "bedrock_access_key_secret", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), - Hidden: true, }, { Name: "AI Bridge Bedrock Model", diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 501852080cdb5..bf4c3dc52acc9 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -117,9 +117,9 @@ export const ObservabilitySettingsPageView: FC<
deploymentGroupHasParent(o.group, "AIBridge")) - .filter((o) => !o.hidden)} + options={options.filter((o) => + deploymentGroupHasParent(o.group, "AIBridge"), + )} />
)} From dd864682ce5804f1a9acdffc0a11f91be8f0b25a Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Thu, 27 Nov 2025 07:09:38 +0000 Subject: [PATCH 11/17] fix: hide `secret`ly annotated keys from observability --- .../ObservabilitySettingsPageView.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index bf4c3dc52acc9..0cada8601e31c 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -117,9 +117,9 @@ export const ObservabilitySettingsPageView: FC< - deploymentGroupHasParent(o.group, "AIBridge"), - )} + options={options + .filter((o) => deploymentGroupHasParent(o.group, "AIBridge")) + .filter((o) => !o.annotations?.secret === true)} /> )} From a289020ac477753880503d7b86957ba69ec30e04 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Thu, 27 Nov 2025 07:51:56 +0000 Subject: [PATCH 12/17] chore: `AIBridge` -> `AI Bridge` --- codersdk/deployment.go | 6 +++--- .../ObservabilitySettingsPageView.stories.tsx | 4 ++-- .../ObservabilitySettingsPageView.tsx | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 1eb6aa839a361..5882b5596d916 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -139,7 +139,7 @@ func (n FeatureName) Humanize() string { case FeatureSCIM: return "SCIM" case FeatureAIBridge: - return "AIBridge" + return "AI Bridge" default: return strings.Title(strings.ReplaceAll(string(n), "_", " ")) } @@ -1174,7 +1174,7 @@ func (c *DeploymentValues) Options() serpent.OptionSet { YAML: "inbox", } deploymentGroupAIBridge = serpent.Group{ - Name: "AIBridge", + Name: "AI Bridge", YAML: "aibridge", } ) @@ -3302,7 +3302,7 @@ Write out the current server config as YAML to stdout.`, YAML: "bedrock_region", }, { - Name: "AIBridge Bedrock Access Key", + Name: "AI Bridge Bedrock Access Key", Description: "The access key to authenticate against the AWS Bedrock API.", Flag: "aibridge-bedrock-access-key", Env: "CODER_AIBRIDGE_BEDROCK_ACCESS_KEY", diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx index 836718f098852..bd04b2dcd2ea3 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx @@ -60,9 +60,9 @@ export const AIBridge: Story = { featureAIBridgeEnabled: true, options: [ { - name: "AIBridge Enabled", + name: "AI Bridge Enabled", value: true, - group: { name: "AIBridge" }, + group: { name: "AI Bridge" }, flag: "aibridge-enabled", hidden: false, }, diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 0cada8601e31c..d70e44698fb79 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -118,7 +118,7 @@ export const ObservabilitySettingsPageView: FC< deploymentGroupHasParent(o.group, "AIBridge")) + .filter((o) => deploymentGroupHasParent(o.group, "AI Bridge")) .filter((o) => !o.annotations?.secret === true)} /> From 9fe4f1151da1f6a014a0cb637b4e8f799f616907 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Thu, 27 Nov 2025 07:54:20 +0000 Subject: [PATCH 13/17] chore: `AIBridge` -> `AI_Bridge` --- .../ObservabilitySettingsPageView.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx index bd04b2dcd2ea3..4c4275aa2ce7a 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.stories.tsx @@ -55,7 +55,7 @@ export const Page: Story = {}; export const Premium: Story = { args: { isPremium: true } }; -export const AIBridge: Story = { +export const AI_Bridge: Story = { args: { featureAIBridgeEnabled: true, options: [ From afc8296f5ef8d89498cf66b8ae812c2a6d5c0bd0 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Fri, 28 Nov 2025 01:16:51 +0000 Subject: [PATCH 14/17] fix: remove yaml keys for security --- codersdk/deployment.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 5882b5596d916..9b8585d98ad95 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -3267,7 +3267,6 @@ Write out the current server config as YAML to stdout.`, Value: &c.AI.BridgeConfig.OpenAI.Key, Default: "", Group: &deploymentGroupAIBridge, - YAML: "openai_key", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), }, { @@ -3288,7 +3287,6 @@ Write out the current server config as YAML to stdout.`, Value: &c.AI.BridgeConfig.Anthropic.Key, Default: "", Group: &deploymentGroupAIBridge, - YAML: "anthropic_key", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), }, { @@ -3309,7 +3307,6 @@ Write out the current server config as YAML to stdout.`, Value: &c.AI.BridgeConfig.Bedrock.AccessKey, Default: "", Group: &deploymentGroupAIBridge, - YAML: "bedrock_access_key", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), }, { @@ -3320,7 +3317,6 @@ Write out the current server config as YAML to stdout.`, Value: &c.AI.BridgeConfig.Bedrock.AccessKeySecret, Default: "", Group: &deploymentGroupAIBridge, - YAML: "bedrock_access_key_secret", Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), }, { From 412c4cd615e84dfd2aac171be70341125b31d49c Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Fri, 28 Nov 2025 02:19:30 +0000 Subject: [PATCH 15/17] fix: remove keys from golden tests --- cli/testdata/server-config.yaml.golden | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/cli/testdata/server-config.yaml.golden b/cli/testdata/server-config.yaml.golden index c8f1f94a85f23..8b254fe29592f 100644 --- a/cli/testdata/server-config.yaml.golden +++ b/cli/testdata/server-config.yaml.golden @@ -720,25 +720,12 @@ aibridge: # The base URL of the OpenAI API. # (default: https://api.openai.com/v1/, type: string) openai_base_url: https://api.openai.com/v1/ - # The key to authenticate against the OpenAI API. - # (default: , type: string) - openai_key: "" # The base URL of the Anthropic API. # (default: https://api.anthropic.com/, type: string) anthropic_base_url: https://api.anthropic.com/ - # The key to authenticate against the Anthropic API. - # (default: , type: string) - anthropic_key: "" # The AWS Bedrock API region. # (default: , type: string) bedrock_region: "" - # The access key to authenticate against the AWS Bedrock API. - # (default: , type: string) - bedrock_access_key: "" - # The access key secret to use with the access key to authenticate against the AWS - # Bedrock API. - # (default: , type: string) - bedrock_access_key_secret: "" # The model to use when making requests to the AWS Bedrock API. # (default: global.anthropic.claude-sonnet-4-5-20250929-v1:0, type: string) bedrock_model: global.anthropic.claude-sonnet-4-5-20250929-v1:0 From 3f10ab6ac1bee1395e6159649a1ff17e36598ac9 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Fri, 28 Nov 2025 02:26:36 +0000 Subject: [PATCH 16/17] fix: nuke keys from `server.md` (gen) --- docs/reference/cli/server.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/reference/cli/server.md b/docs/reference/cli/server.md index 951e140f3f01f..8f86ea7248aa1 100644 --- a/docs/reference/cli/server.md +++ b/docs/reference/cli/server.md @@ -1676,7 +1676,6 @@ The base URL of the OpenAI API. |-------------|-----------------------------------------| | Type | string | | Environment | $CODER_AIBRIDGE_OPENAI_KEY | -| YAML | aibridge.openai_key | The key to authenticate against the OpenAI API. @@ -1697,7 +1696,6 @@ The base URL of the Anthropic API. |-------------|--------------------------------------------| | Type | string | | Environment | $CODER_AIBRIDGE_ANTHROPIC_KEY | -| YAML | aibridge.anthropic_key | The key to authenticate against the Anthropic API. @@ -1717,7 +1715,6 @@ The AWS Bedrock API region. |-------------|-------------------------------------------------| | Type | string | | Environment | $CODER_AIBRIDGE_BEDROCK_ACCESS_KEY | -| YAML | aibridge.bedrock_access_key | The access key to authenticate against the AWS Bedrock API. @@ -1727,7 +1724,6 @@ The access key to authenticate against the AWS Bedrock API. |-------------|--------------------------------------------------------| | Type | string | | Environment | $CODER_AIBRIDGE_BEDROCK_ACCESS_KEY_SECRET | -| YAML | aibridge.bedrock_access_key_secret | The access key secret to use with the access key to authenticate against the AWS Bedrock API. From 1569749055e0d1ac7fd02a6e8b78bc683200cf22 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Fri, 28 Nov 2025 02:30:52 +0000 Subject: [PATCH 17/17] fix: ignore keys in `deployment_test.go` --- codersdk/deployment_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/codersdk/deployment_test.go b/codersdk/deployment_test.go index ee3f7365d6244..0b46320892c00 100644 --- a/codersdk/deployment_test.go +++ b/codersdk/deployment_test.go @@ -84,6 +84,20 @@ func TestDeploymentValues_HighlyConfigurable(t *testing.T) { "Notifications: Email Auth: Password": { yaml: true, }, + // We don't want these to be configurable via YAML because they are secrets. + // However, we do want to allow them to be shown in documentation. + "AI Bridge OpenAI Key": { + yaml: true, + }, + "AI Bridge Anthropic Key": { + yaml: true, + }, + "AI Bridge Bedrock Access Key": { + yaml: true, + }, + "AI Bridge Bedrock Access Key Secret": { + yaml: true, + }, } set := (&codersdk.DeploymentValues{}).Options()