Skip to content

Commit 2a22440

Browse files
authored
chore!: patch release v2.28 to remove aibridge experiment (coder#20544)
Includes stack of PRs from coder#20520 --------- Signed-off-by: Danny Kopping <danny@coder.com>
1 parent 8b6f55c commit 2a22440

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+787
-500
lines changed

.github/workflows/dogfood.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
with:
4141
# Pinning to 2.28 here, as Nix gets a "error: [json.exception.type_error.302] type must be array, but is string"
4242
# on version 2.29 and above.
43-
nix_version: "2.28.4"
43+
nix_version: "2.28.5"
4444

4545
- uses: nix-community/cache-nix-action@135667ec418502fa5a3598af6fb9eb733888ce6a # v6.1.3
4646
with:

Makefile

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -636,16 +636,16 @@ TAILNETTEST_MOCKS := \
636636
tailnet/tailnettest/subscriptionmock.go
637637

638638
AIBRIDGED_MOCKS := \
639-
enterprise/x/aibridged/aibridgedmock/clientmock.go \
640-
enterprise/x/aibridged/aibridgedmock/poolmock.go
639+
enterprise/aibridged/aibridgedmock/clientmock.go \
640+
enterprise/aibridged/aibridgedmock/poolmock.go
641641

642642
GEN_FILES := \
643643
tailnet/proto/tailnet.pb.go \
644644
agent/proto/agent.pb.go \
645645
provisionersdk/proto/provisioner.pb.go \
646646
provisionerd/proto/provisionerd.pb.go \
647647
vpn/vpn.pb.go \
648-
enterprise/x/aibridged/proto/aibridged.pb.go \
648+
enterprise/aibridged/proto/aibridged.pb.go \
649649
$(DB_GEN_FILES) \
650650
$(SITE_GEN_FILES) \
651651
coderd/rbac/object_gen.go \
@@ -697,7 +697,7 @@ gen/mark-fresh:
697697
provisionersdk/proto/provisioner.pb.go \
698698
provisionerd/proto/provisionerd.pb.go \
699699
vpn/vpn.pb.go \
700-
enterprise/x/aibridged/proto/aibridged.pb.go \
700+
enterprise/aibridged/proto/aibridged.pb.go \
701701
coderd/database/dump.sql \
702702
$(DB_GEN_FILES) \
703703
site/src/api/typesGenerated.ts \
@@ -768,8 +768,8 @@ codersdk/workspacesdk/agentconnmock/agentconnmock.go: codersdk/workspacesdk/agen
768768
go generate ./codersdk/workspacesdk/agentconnmock/
769769
touch "$@"
770770

771-
$(AIBRIDGED_MOCKS): enterprise/x/aibridged/client.go enterprise/x/aibridged/pool.go
772-
go generate ./enterprise/x/aibridged/aibridgedmock/
771+
$(AIBRIDGED_MOCKS): enterprise/aibridged/client.go enterprise/aibridged/pool.go
772+
go generate ./enterprise/aibridged/aibridgedmock/
773773
touch "$@"
774774

775775
agent/agentcontainers/dcspec/dcspec_gen.go: \
@@ -822,13 +822,13 @@ vpn/vpn.pb.go: vpn/vpn.proto
822822
--go_opt=paths=source_relative \
823823
./vpn/vpn.proto
824824

825-
enterprise/x/aibridged/proto/aibridged.pb.go: enterprise/x/aibridged/proto/aibridged.proto
825+
enterprise/aibridged/proto/aibridged.pb.go: enterprise/aibridged/proto/aibridged.proto
826826
protoc \
827827
--go_out=. \
828828
--go_opt=paths=source_relative \
829829
--go-drpc_out=. \
830830
--go-drpc_opt=paths=source_relative \
831-
./enterprise/x/aibridged/proto/aibridged.proto
831+
./enterprise/aibridged/proto/aibridged.proto
832832

833833
site/src/api/typesGenerated.ts: site/node_modules/.installed $(wildcard scripts/apitypings/*) $(shell find ./codersdk $(FIND_EXCLUSIONS) -type f -name '*.go')
834834
# -C sets the directory for the go run command

cli/testdata/coder_server_--help.golden

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,41 @@ OPTIONS:
8080
Periodically check for new releases of Coder and inform the owner. The
8181
check is performed once per day.
8282

83+
AIBRIDGE OPTIONS:
84+
--aibridge-anthropic-base-url string, $CODER_AIBRIDGE_ANTHROPIC_BASE_URL (default: https://api.anthropic.com/)
85+
The base URL of the Anthropic API.
86+
87+
--aibridge-anthropic-key string, $CODER_AIBRIDGE_ANTHROPIC_KEY
88+
The key to authenticate against the Anthropic API.
89+
90+
--aibridge-bedrock-access-key string, $CODER_AIBRIDGE_BEDROCK_ACCESS_KEY
91+
The access key to authenticate against the AWS Bedrock API.
92+
93+
--aibridge-bedrock-access-key-secret string, $CODER_AIBRIDGE_BEDROCK_ACCESS_KEY_SECRET
94+
The access key secret to use with the access key to authenticate
95+
against the AWS Bedrock API.
96+
97+
--aibridge-bedrock-model string, $CODER_AIBRIDGE_BEDROCK_MODEL (default: global.anthropic.claude-sonnet-4-5-20250929-v1:0)
98+
The model to use when making requests to the AWS Bedrock API.
99+
100+
--aibridge-bedrock-region string, $CODER_AIBRIDGE_BEDROCK_REGION
101+
The AWS Bedrock API region.
102+
103+
--aibridge-bedrock-small-fastmodel string, $CODER_AIBRIDGE_BEDROCK_SMALL_FAST_MODEL (default: global.anthropic.claude-haiku-4-5-20251001-v1:0)
104+
The small fast model to use when making requests to the AWS Bedrock
105+
API. Claude Code uses Haiku-class models to perform background tasks.
106+
See
107+
https://docs.claude.com/en/docs/claude-code/settings#environment-variables.
108+
109+
--aibridge-enabled bool, $CODER_AIBRIDGE_ENABLED (default: false)
110+
Whether to start an in-memory aibridged instance.
111+
112+
--aibridge-openai-base-url string, $CODER_AIBRIDGE_OPENAI_BASE_URL (default: https://api.openai.com/v1/)
113+
The base URL of the OpenAI API.
114+
115+
--aibridge-openai-key string, $CODER_AIBRIDGE_OPENAI_KEY
116+
The key to authenticate against the OpenAI API.
117+
83118
CLIENT OPTIONS:
84119
These options change the behavior of how clients interact with the Coder.
85120
Clients include the Coder CLI, Coder Desktop, IDE extensions, and the web UI.

cli/testdata/server-config.yaml.golden

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -714,8 +714,7 @@ workspace_prebuilds:
714714
# (default: 3, type: int)
715715
failure_hard_limit: 3
716716
aibridge:
717-
# Whether to start an in-memory aibridged instance ("aibridge" experiment must be
718-
# enabled, too).
717+
# Whether to start an in-memory aibridged instance.
719718
# (default: false, type: bool)
720719
enabled: false
721720
# The base URL of the OpenAI API.

coderd/apidoc/docs.go

Lines changed: 3 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 3 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codersdk/aibridge.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ func (f AIBridgeListInterceptionsFilter) asRequestOption() RequestOption {
113113

114114
// AIBridgeListInterceptions returns AIBridge interceptions with the given
115115
// filter.
116-
func (c *ExperimentalClient) AIBridgeListInterceptions(ctx context.Context, filter AIBridgeListInterceptionsFilter) (AIBridgeListInterceptionsResponse, error) {
117-
res, err := c.Request(ctx, http.MethodGet, "/api/experimental/aibridge/interceptions", nil, filter.asRequestOption(), filter.Pagination.asRequestOption(), filter.Pagination.asRequestOption())
116+
func (c *Client) AIBridgeListInterceptions(ctx context.Context, filter AIBridgeListInterceptionsFilter) (AIBridgeListInterceptionsResponse, error) {
117+
res, err := c.Request(ctx, http.MethodGet, "/api/v2/aibridge/interceptions", nil, filter.asRequestOption(), filter.Pagination.asRequestOption(), filter.Pagination.asRequestOption())
118118
if err != nil {
119119
return AIBridgeListInterceptionsResponse{}, err
120120
}

codersdk/deployment.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3241,14 +3241,13 @@ Write out the current server config as YAML to stdout.`,
32413241
// AIBridge Options
32423242
{
32433243
Name: "AIBridge Enabled",
3244-
Description: fmt.Sprintf("Whether to start an in-memory aibridged instance (%q experiment must be enabled, too).", ExperimentAIBridge),
3244+
Description: "Whether to start an in-memory aibridged instance.",
32453245
Flag: "aibridge-enabled",
32463246
Env: "CODER_AIBRIDGE_ENABLED",
32473247
Value: &c.AI.BridgeConfig.Enabled,
32483248
Default: "false",
32493249
Group: &deploymentGroupAIBridge,
32503250
YAML: "enabled",
3251-
Hidden: true,
32523251
},
32533252
{
32543253
Name: "AIBridge OpenAI Base URL",
@@ -3259,7 +3258,6 @@ Write out the current server config as YAML to stdout.`,
32593258
Default: "https://api.openai.com/v1/",
32603259
Group: &deploymentGroupAIBridge,
32613260
YAML: "openai_base_url",
3262-
Hidden: true,
32633261
},
32643262
{
32653263
Name: "AIBridge OpenAI Key",
@@ -3270,7 +3268,6 @@ Write out the current server config as YAML to stdout.`,
32703268
Default: "",
32713269
Group: &deploymentGroupAIBridge,
32723270
YAML: "openai_key",
3273-
Hidden: true,
32743271
},
32753272
{
32763273
Name: "AIBridge Anthropic Base URL",
@@ -3281,7 +3278,6 @@ Write out the current server config as YAML to stdout.`,
32813278
Default: "https://api.anthropic.com/",
32823279
Group: &deploymentGroupAIBridge,
32833280
YAML: "anthropic_base_url",
3284-
Hidden: true,
32853281
},
32863282
{
32873283
Name: "AIBridge Anthropic Key",
@@ -3292,7 +3288,6 @@ Write out the current server config as YAML to stdout.`,
32923288
Default: "",
32933289
Group: &deploymentGroupAIBridge,
32943290
YAML: "anthropic_key",
3295-
Hidden: true,
32963291
},
32973292
{
32983293
Name: "AIBridge Bedrock Region",
@@ -3303,7 +3298,6 @@ Write out the current server config as YAML to stdout.`,
33033298
Default: "",
33043299
Group: &deploymentGroupAIBridge,
33053300
YAML: "bedrock_region",
3306-
Hidden: true,
33073301
},
33083302
{
33093303
Name: "AIBridge Bedrock Access Key",
@@ -3314,7 +3308,6 @@ Write out the current server config as YAML to stdout.`,
33143308
Default: "",
33153309
Group: &deploymentGroupAIBridge,
33163310
YAML: "bedrock_access_key",
3317-
Hidden: true,
33183311
},
33193312
{
33203313
Name: "AIBridge Bedrock Access Key Secret",
@@ -3325,7 +3318,6 @@ Write out the current server config as YAML to stdout.`,
33253318
Default: "",
33263319
Group: &deploymentGroupAIBridge,
33273320
YAML: "bedrock_access_key_secret",
3328-
Hidden: true,
33293321
},
33303322
{
33313323
Name: "AIBridge Bedrock Model",
@@ -3336,7 +3328,6 @@ Write out the current server config as YAML to stdout.`,
33363328
Default: "global.anthropic.claude-sonnet-4-5-20250929-v1:0", // See https://docs.claude.com/en/api/claude-on-amazon-bedrock#accessing-bedrock.
33373329
Group: &deploymentGroupAIBridge,
33383330
YAML: "bedrock_model",
3339-
Hidden: true,
33403331
},
33413332
{
33423333
Name: "AIBridge Bedrock Small Fast Model",
@@ -3347,7 +3338,6 @@ Write out the current server config as YAML to stdout.`,
33473338
Default: "global.anthropic.claude-haiku-4-5-20251001-v1:0", // See https://docs.claude.com/en/api/claude-on-amazon-bedrock#accessing-bedrock.
33483339
Group: &deploymentGroupAIBridge,
33493340
YAML: "bedrock_small_fast_model",
3350-
Hidden: true,
33513341
},
33523342
{
33533343
Name: "Enable Authorization Recordings",
@@ -3645,7 +3635,6 @@ const (
36453635
ExperimentOAuth2 Experiment = "oauth2" // Enables OAuth2 provider functionality.
36463636
ExperimentMCPServerHTTP Experiment = "mcp-server-http" // Enables the MCP HTTP server functionality.
36473637
ExperimentWorkspaceSharing Experiment = "workspace-sharing" // Enables updating workspace ACLs for sharing with users and groups.
3648-
ExperimentAIBridge Experiment = "aibridge" // Enables AI Bridge functionality.
36493638
)
36503639

36513640
func (e Experiment) DisplayName() string {
@@ -3666,8 +3655,6 @@ func (e Experiment) DisplayName() string {
36663655
return "MCP HTTP Server Functionality"
36673656
case ExperimentWorkspaceSharing:
36683657
return "Workspace Sharing"
3669-
case ExperimentAIBridge:
3670-
return "AI Bridge"
36713658
default:
36723659
// Split on hyphen and convert to title case
36733660
// e.g. "web-push" -> "Web Push", "mcp-server-http" -> "Mcp Server Http"
@@ -3686,7 +3673,6 @@ var ExperimentsKnown = Experiments{
36863673
ExperimentOAuth2,
36873674
ExperimentMCPServerHTTP,
36883675
ExperimentWorkspaceSharing,
3689-
ExperimentAIBridge,
36903676
}
36913677

36923678
// ExperimentsSafe should include all experiments that are safe for

docs/ai-coder/ai-bridge.md

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
# AI Bridge
22

3-
> [!NOTE]
4-
> AI Bridge is currently an _experimental_ feature.
5-
63
![AI bridge diagram](../images/aibridge/aibridge_diagram.png)
74

85
Bridge is a smart proxy for AI. It acts as a man-in-the-middle between your users' coding agents / IDEs
@@ -45,17 +42,14 @@ Bridge runs inside the Coder control plane, requiring no separate compute to dep
4542

4643
### Activation
4744

48-
To enable this feature, activate the `aibridge` experiment using an environment variable or a CLI flag.
49-
Additionally, you will need to enable Bridge explicitly:
45+
You will need to enable AI Bridge explicitly:
5046

5147
```sh
52-
CODER_EXPERIMENTS="aibridge" CODER_AIBRIDGE_ENABLED=true coder server
48+
CODER_AIBRIDGE_ENABLED=true coder server
5349
# or
54-
coder server --experiments=aibridge --aibridge-enabled=true
50+
coder server --aibridge-enabled=true
5551
```
5652

57-
_If you have other experiments enabled, separate them by commas._
58-
5953
### Providers
6054

6155
Bridge currently supports OpenAI and Anthropic APIs.
@@ -89,8 +83,8 @@ Once AI Bridge is enabled on the server, your users need to configure their AI c
8983

9084
The exact configuration method varies by client — some use environment variables, others use configuration files or UI settings:
9185

92-
- **OpenAI-compatible clients**: Set the base URL (commonly via the `OPENAI_BASE_URL` environment variable) to `https://coder.example.com/api/experimental/aibridge/openai/v1`
93-
- **Anthropic-compatible clients**: Set the base URL (commonly via the `ANTHROPIC_BASE_URL` environment variable) to `https://coder.example.com/api/experimental/aibridge/anthropic`
86+
- **OpenAI-compatible clients**: Set the base URL (commonly via the `OPENAI_BASE_URL` environment variable) to `https://coder.example.com/api/v2/aibridge/openai/v1`
87+
- **Anthropic-compatible clients**: Set the base URL (commonly via the `ANTHROPIC_BASE_URL` environment variable) to `https://coder.example.com/api/v2/aibridge/anthropic`
9488

9589
Replace `coder.example.com` with your actual Coder deployment URL.
9690

@@ -133,7 +127,7 @@ All of these records are associated to an "interception" record, which maps 1:1
133127

134128
These logs can be used to determine usage patterns, track costs, and evaluate tooling adoption.
135129

136-
This data is currently accessible through the API and CLI (experimental), which we advise administrators export to their observability platform of choice. We've configured a Grafana dashboard to display Claude Code usage internally which can be imported as a starting point for your tooling adoption metrics.
130+
This data is currently accessible through the API and CLI, which we advise administrators export to their observability platform of choice. We've configured a Grafana dashboard to display Claude Code usage internally which can be imported as a starting point for your tooling adoption metrics.
137131

138132
![User Leaderboard](../images/aibridge/grafana_user_leaderboard.png)
139133

docs/manifest.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,21 @@
11801180
"path": "./reference/cli/index.md",
11811181
"icon_path": "./images/icons/terminal.svg",
11821182
"children": [
1183+
{
1184+
"title": "aibridge",
1185+
"description": "Manage AIBridge.",
1186+
"path": "reference/cli/aibridge.md"
1187+
},
1188+
{
1189+
"title": "aibridge interceptions",
1190+
"description": "Manage AIBridge interceptions.",
1191+
"path": "reference/cli/aibridge_interceptions.md"
1192+
},
1193+
{
1194+
"title": "aibridge interceptions list",
1195+
"description": "List AIBridge interceptions as JSON.",
1196+
"path": "reference/cli/aibridge_interceptions_list.md"
1197+
},
11831198
{
11841199
"title": "autoupdate",
11851200
"description": "Toggle auto-update policy for a workspace",

0 commit comments

Comments
 (0)