diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0d63f842df3ed..e433a4cd48a7a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -80,6 +80,7 @@ jobs: # Main repo directories for completeness in case other files are # touched: - "agent/**" + - "aibridge/**" - "cli/**" - "cmd/**" - "coderd/**" diff --git a/.github/workflows/typos.toml b/.github/workflows/typos.toml index 0f7f9a6cc9d39..fd962da6dc669 100644 --- a/.github/workflows/typos.toml +++ b/.github/workflows/typos.toml @@ -57,4 +57,6 @@ extend-exclude = [ # notifications' golden files confuse the detector because of quoted-printable encoding "coderd/notifications/testdata/**", "agent/agentcontainers/testdata/devcontainercli/**", + # aibridge fixtures contain truncated streaming chunks that look like typos + "aibridge/fixtures/**", ] diff --git a/.golangci.yaml b/.golangci.yaml index f03007f81e847..07c12dac4f0b8 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -6,6 +6,21 @@ linters-settings: # goal: 100 threshold: 412 + depguard: + rules: + aibridge_import_isolation: + list-mode: lax + files: + - "aibridge/*.go" + - "aibridge/**/*.go" + allow: + - $gostd + - github.com/coder/coder/v2/aibridge + - github.com/coder/coder/v2/buildinfo + deny: + - pkg: github.com/coder/coder/v2 + desc: aibridge code must not import coder packages outside aibridge; buildinfo is the only exception + exhaustruct: include: # Gradually extend to cover more of the codebase. @@ -227,6 +242,7 @@ linters: - asciicheck - bidichk - bodyclose + - depguard - dogsled - errcheck - errname diff --git a/aibridge/AGENTS.md b/aibridge/AGENTS.md index 54b7d41545697..0ee141a295557 100644 --- a/aibridge/AGENTS.md +++ b/aibridge/AGENTS.md @@ -7,10 +7,10 @@ over clever ones. Readability is a primary concern. ## Tone & Relationship -We're colleagues — push back on bad ideas and speak up when something +We're colleagues. Push back on bad ideas and speak up when something doesn't make sense. Honesty over agreeableness. -- Disagree when I'm wrong — act as a critical peer reviewer. +- Disagree when I'm wrong. Act as a critical peer reviewer. - Call out bad ideas, unreasonable expectations, and mistakes. - **Ask for clarification** instead of assuming. Say when you don't know something. - Architectural decisions require discussion; routine fixes do not. @@ -18,35 +18,35 @@ doesn't make sense. Honesty over agreeableness. ## Foundational Rules - Doing it right is better than doing it fast. -- YAGNI — don't add features we don't need right now. +- YAGNI. Don't add features we don't need right now. - Make the smallest reasonable changes to achieve the goal. - Reduce code duplication, even if it takes extra effort. -- Match the style of surrounding code — consistency within a file matters. +- Match the style of surrounding code. Consistency within a file matters. - Fix bugs immediately when you find them. ## Essential Commands -| Task | Command | Notes | -| ----------- | ---------------------- | --------------------------------- | -| Test | `make test` | All tests, no race detector | -| Test (race) | `make test-race` | CGO_ENABLED=1, use for CI | -| Coverage | `make coverage` | Prints summary to stdout | -| Format | `make fmt` | gofumpt; single file: `make fmt FILE=path` | -| Mocks | `make mocks` | Regenerate from `mcp/api.go` | +| Task | Command | Notes | +|-------------|------------------|--------------------------------------------| +| Test | `make test` | All tests, no race detector | +| Test (race) | `make test-race` | CGO_ENABLED=1, use for CI | +| Coverage | `make coverage` | Prints summary to stdout | +| Format | `make fmt` | gofumpt; single file: `make fmt FILE=path` | +| Mocks | `make mocks` | Regenerate from `mcp/api.go` | **Always use these commands** instead of running `go test` or `gofumpt` directly. ## Code Navigation Use LSP tools (go to definition, find references, hover) **before** resorting to grep. -This codebase has 90+ Go files across multiple packages — LSP is faster and more accurate. +This codebase has 90+ Go files across multiple packages, so LSP is faster and more accurate. ## Architecture Overview AI Bridge is a smart gateway that sits between AI clients (Claude Code, Cursor, etc.) and upstream providers (Anthropic, OpenAI). It intercepts all AI traffic to provide centralized authn/z, auditing, token attribution, and MCP tool -administration. It runs as part of `coderd` (the Coder control plane) — users +administration. It runs as part of `coderd` (the Coder control plane). Users authenticate with their Coder session tokens. ``` @@ -68,19 +68,19 @@ authenticate with their Coder session tokens. ``` Key packages: -- `intercept/` — request/response interception, per-provider subdirs (`messages/`, `responses/`, `chatcompletions/`) -- `provider/` — upstream provider definitions (Anthropic, OpenAI, Copilot) -- `mcp/` — MCP protocol integration -- `circuitbreaker/` — circuit breaker for upstream calls -- `context/` — request-scoped context helpers -- `internal/integrationtest/` — integration tests with mock upstreams +- `intercept/`: request/response interception, per-provider subdirs (`messages/`, `responses/`, `chatcompletions/`) +- `provider/`: upstream provider definitions (Anthropic, OpenAI, Copilot) +- `mcp/`: MCP protocol integration +- `circuitbreaker/`: circuit breaker for upstream calls +- `context/`: request-scoped context helpers +- `internal/integrationtest/`: integration tests with mock upstreams ## Go Patterns - Follow the [Uber Go Style Guide](https://github.com/uber-go/guide/blob/master/style.md). - Use `gofumpt` for formatting (enforced by `make fmt`). - Prefer table-driven tests. -- **Never use `time.Sleep` in tests** — use `github.com/coder/quartz` or channels/contexts for synchronization. +- **Never use `time.Sleep` in tests**. Use `github.com/coder/quartz` or channels/contexts for synchronization. - Use unique identifiers in tests: `fmt.Sprintf("test-%s-%d", t.Name(), time.Now().UnixNano())`. - Test observable behavior, not implementation details. @@ -88,8 +88,8 @@ Key packages: This codebase heavily uses SSE streaming. When modifying interceptors: - Always handle both blocking and streaming paths. -- Test with `*_test.go` files in the same package — they cover edge cases for chunked responses. -- Be careful with goroutine lifecycle — ensure proper cleanup on context cancellation. +- Test with `*_test.go` files in the same package. They cover edge cases for chunked responses. +- Be careful with goroutine lifecycle. Ensure proper cleanup on context cancellation. ## Commit Style @@ -110,9 +110,9 @@ type(scope): message ## Common Pitfalls -| Problem | Fix | -| ------- | --- | -| Race in streaming tests | Use `t.Cleanup()` and proper synchronization, never `time.Sleep` | -| Mock not updated | Run `make mocks` after changing `mcp/api.go` | -| Formatting failures | Run `make fmt` before committing | -| `retract` directive in go.mod | Don't remove — it's intentional (v1.0.8 conflict marker) | +| Problem | Fix | +|-------------------------------|------------------------------------------------------------------| +| Race in streaming tests | Use `t.Cleanup()` and proper synchronization, never `time.Sleep` | +| Mock not updated | Run `make mocks` after changing `mcp/api.go` | +| Formatting failures | Run `make fmt` before committing | +| `retract` directive in go.mod | Don't remove. It's intentional (v1.0.8 conflict marker) | diff --git a/aibridge/README.md b/aibridge/README.md new file mode 100644 index 0000000000000..ff76138518277 --- /dev/null +++ b/aibridge/README.md @@ -0,0 +1,93 @@ +# aibridge + +aibridge is an HTTP gateway that sits between AI clients and upstream AI providers (Anthropic, OpenAI). It intercepts requests to record token usage, prompts, and tool invocations per user. Optionally supports centralized [MCP](https://modelcontextprotocol.io/) tool injection with allowlist/denylist filtering. + +## Architecture + +``` +┌─────────────────┐ ┌───────────────────────────────────────────┐ +│ AI Client │ │ aibridge │ +│ (Claude Code, │────▶│ ┌─────────────────┐ ┌─────────────┐ │ +│ Cursor, etc.) │ │ │ RequestBridge │───▶│ Providers │ │ +└─────────────────┘ │ │ (http.Handler) │ │ (Anthropic │ │ + │ └─────────────────┘ │ OpenAI) │ │ + │ └──────┬──────┘ │ + │ │ │ + │ ▼ │ ┌─────────────┐ + │ ┌─────────────────┐ ┌─────────────┐ │ │ Upstream │ + │ │ Recorder │◀───│ Interceptor │─── ───▶│ API │ + │ │ (tokens, tools, │ │ (streaming/ │ │ │ (Anthropic │ + │ │ prompts) │ │ blocking) │ │ │ OpenAI) │ + │ └────────┬────────┘ └──────┬──────┘ │ └─────────────┘ + │ │ │ │ + │ ▼ ┌──────▼──────┐ │ + │ ┌ ─ ─ ─ ─ ─ ─ ─ ┐ │ MCP Proxy │ │ + │ │ Database │ │ (tools) │ │ + │ └ ─ ─ ─ ─ ─ ─ ─ ┘ └─────────────┘ │ + └───────────────────────────────────────────┘ +``` + +### Components + +- **RequestBridge**: The main `http.Handler` that routes requests to providers +- **Provider**: Defines bridged routes (intercepted) and passthrough routes (proxied) +- **Interceptor**: Handles request/response processing and streaming +- **Recorder**: Interface for capturing usage data (tokens, prompts, tools) +- **MCP Proxy** (optional): Connects to MCP servers to list tool, inject them into requests, and invoke them in an inner agentic loop + +## Request Flow + +1. Client sends request to `/anthropic/v1/messages` or `/openai/v1/chat/completions` +2. **Actor extraction**: Request must have an actor in context (via `AsActor()`). +3. **Upstream call**: Request forwarded to the AI provider +4. **Response relay**: Response streamed/sent to client +5. **Recording**: Token usage, prompts, and tool invocations recorded + +**With MCP enabled**: Tools from configured MCP servers are centrally defined and injected into requests (prefixed `bmcp_`). Allowlist/denylist regex patterns control which tools are available. When the model selects an injected tool, the gateway invokes it in an inner agentic loop, and continues the conversation loop until complete. + +Passthrough routes (`/v1/models`, `/v1/messages/count_tokens`) are reverse-proxied directly. + +## Observability + +### Prometheus Metrics + +Create metrics with `NewMetrics(prometheus.Registerer)`: + +| Metric | Type | Description | +|--------|------|-------------| +| `interceptions_total` | Counter | Intercepted request count | +| `interceptions_inflight` | Gauge | Currently processing requests | +| `interceptions_duration_seconds` | Histogram | Request duration | +| `tokens_total` | Counter | Token usage (input/output) | +| `prompts_total` | Counter | User prompt count | +| `injected_tool_invocations_total` | Counter | MCP tool invocations | +| `passthrough_total` | Counter | Non-intercepted requests | + +### Recorder Interface + +Implement `Recorder` to persist usage data to your database: + +- `aibridge_interceptions` - request metadata (provider, model, initiator, timestamps) +- `aibridge_token_usages` - input/output token counts per response +- `aibridge_user_prompts` - user prompts +- `aibridge_tool_usages` - tool invocations (injected and client-defined) + +```go +type Recorder interface { + RecordInterception(ctx context.Context, req *InterceptionRecord) error + RecordInterceptionEnded(ctx context.Context, req *InterceptionRecordEnded) error + RecordTokenUsage(ctx context.Context, req *TokenUsageRecord) error + RecordPromptUsage(ctx context.Context, req *PromptUsageRecord) error + RecordToolUsage(ctx context.Context, req *ToolUsageRecord) error +} +``` + +## Supported Routes + +| Provider | Route | Type | +|----------|-------|------| +| Anthropic | `/anthropic/v1/messages` | Bridged (intercepted) | +| Anthropic | `/anthropic/v1/models` | Passthrough | +| Anthropic | `/anthropic/v1/messages/count_tokens` | Passthrough | +| OpenAI | `/openai/v1/chat/completions` | Bridged (intercepted) | +| OpenAI | `/openai/v1/models` | Passthrough | diff --git a/aibridge/api.go b/aibridge/api.go index f8fc60f173790..809d452fe907a 100644 --- a/aibridge/api.go +++ b/aibridge/api.go @@ -7,11 +7,11 @@ import ( "go.opentelemetry.io/otel/trace" "cdr.dev/slog/v3" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/metrics" - "github.com/coder/aibridge/provider" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/metrics" + "github.com/coder/coder/v2/aibridge/provider" + "github.com/coder/coder/v2/aibridge/recorder" ) // Const + Type + function aliases for backwards compatibility. diff --git a/aibridge/bridge.go b/aibridge/bridge.go index 27bb36456f254..f604d0a38ab0c 100644 --- a/aibridge/bridge.go +++ b/aibridge/bridge.go @@ -18,13 +18,13 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/circuitbreaker" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/metrics" - "github.com/coder/aibridge/provider" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/circuitbreaker" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/metrics" + "github.com/coder/coder/v2/aibridge/provider" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" ) const ( diff --git a/aibridge/bridge_test.go b/aibridge/bridge_test.go index c6427077a1dac..f2657ab80f5dd 100644 --- a/aibridge/bridge_test.go +++ b/aibridge/bridge_test.go @@ -10,10 +10,10 @@ import ( "go.opentelemetry.io/otel" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/provider" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/provider" ) var bridgeTestTracer = otel.Tracer("bridge_test") diff --git a/aibridge/circuitbreaker/circuitbreaker.go b/aibridge/circuitbreaker/circuitbreaker.go index 25fdb1e2476c4..0f0880b192656 100644 --- a/aibridge/circuitbreaker/circuitbreaker.go +++ b/aibridge/circuitbreaker/circuitbreaker.go @@ -12,8 +12,8 @@ import ( "github.com/sony/gobreaker/v2" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/metrics" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/metrics" ) // ErrCircuitOpen is returned by Execute when the circuit breaker is open diff --git a/aibridge/circuitbreaker/circuitbreaker_test.go b/aibridge/circuitbreaker/circuitbreaker_test.go index 84fb98ae07f67..b80bfa2debb73 100644 --- a/aibridge/circuitbreaker/circuitbreaker_test.go +++ b/aibridge/circuitbreaker/circuitbreaker_test.go @@ -11,8 +11,8 @@ import ( "github.com/sony/gobreaker/v2" "github.com/stretchr/testify/assert" - "github.com/coder/aibridge/circuitbreaker" - "github.com/coder/aibridge/config" + "github.com/coder/coder/v2/aibridge/circuitbreaker" + "github.com/coder/coder/v2/aibridge/config" ) func TestExecute_PerModelIsolation(t *testing.T) { diff --git a/aibridge/client_test.go b/aibridge/client_test.go index 923e5c0e5162f..e3fa82866e0f1 100644 --- a/aibridge/client_test.go +++ b/aibridge/client_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/coder/aibridge" + "github.com/coder/coder/v2/aibridge" ) func TestGuessClient(t *testing.T) { diff --git a/aibridge/context/context.go b/aibridge/context/context.go index ade88978a2851..ecb97d0f94152 100644 --- a/aibridge/context/context.go +++ b/aibridge/context/context.go @@ -3,7 +3,7 @@ package context import ( "context" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/recorder" ) type ( diff --git a/aibridge/context/context_test.go b/aibridge/context/context_test.go index e9ba8b07774d9..039b3a9a2528e 100644 --- a/aibridge/context/context_test.go +++ b/aibridge/context/context_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/recorder" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/recorder" ) func TestAsActor(t *testing.T) { diff --git a/aibridge/intercept/actor_headers.go b/aibridge/intercept/actor_headers.go index 4406a0bc5c132..8a94a313c7c2d 100644 --- a/aibridge/intercept/actor_headers.go +++ b/aibridge/intercept/actor_headers.go @@ -7,7 +7,7 @@ import ( ant_option "github.com/anthropics/anthropic-sdk-go/option" oai_option "github.com/openai/openai-go/v3/option" - "github.com/coder/aibridge/context" + "github.com/coder/coder/v2/aibridge/context" ) const ( diff --git a/aibridge/intercept/actor_headers_test.go b/aibridge/intercept/actor_headers_test.go index 080f09b8893a8..aa2b1a777146a 100644 --- a/aibridge/intercept/actor_headers_test.go +++ b/aibridge/intercept/actor_headers_test.go @@ -6,9 +6,9 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/require" - "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/recorder" ) func TestNilActor(t *testing.T) { diff --git a/aibridge/intercept/apidump/apidump.go b/aibridge/intercept/apidump/apidump.go index 63fccf7d9cb3a..05d1c83e48bff 100644 --- a/aibridge/intercept/apidump/apidump.go +++ b/aibridge/intercept/apidump/apidump.go @@ -17,7 +17,7 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" "github.com/coder/quartz" ) diff --git a/aibridge/intercept/apidump/headers_test.go b/aibridge/intercept/apidump/headers_test.go index 1c5bb69723e7a..7c50b990cd12e 100644 --- a/aibridge/intercept/apidump/headers_test.go +++ b/aibridge/intercept/apidump/headers_test.go @@ -5,11 +5,10 @@ import ( "net/http" "testing" - "cdr.dev/slog/v3" - "github.com/google/uuid" "github.com/stretchr/testify/require" + "cdr.dev/slog/v3" "github.com/coder/quartz" ) diff --git a/aibridge/intercept/chatcompletions/base.go b/aibridge/intercept/chatcompletions/base.go index 50b5e931ddd12..6f6ca352618ab 100644 --- a/aibridge/intercept/chatcompletions/base.go +++ b/aibridge/intercept/chatcompletions/base.go @@ -15,16 +15,15 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/apidump" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" - "github.com/coder/quartz" - "cdr.dev/slog/v3" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/apidump" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" + "github.com/coder/quartz" ) type interceptionBase struct { diff --git a/aibridge/intercept/chatcompletions/base_test.go b/aibridge/intercept/chatcompletions/base_test.go index 7094c2c4deaea..67104b9085033 100644 --- a/aibridge/intercept/chatcompletions/base_test.go +++ b/aibridge/intercept/chatcompletions/base_test.go @@ -6,7 +6,7 @@ import ( "github.com/openai/openai-go/v3" "github.com/stretchr/testify/require" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" ) func TestScanForCorrelatingToolCallID(t *testing.T) { diff --git a/aibridge/intercept/chatcompletions/blocking.go b/aibridge/intercept/chatcompletions/blocking.go index 8dd98463a3674..59c8bbb731bd5 100644 --- a/aibridge/intercept/chatcompletions/blocking.go +++ b/aibridge/intercept/chatcompletions/blocking.go @@ -14,15 +14,14 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/eventstream" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" - "cdr.dev/slog/v3" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/eventstream" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" ) type BlockingInterception struct { diff --git a/aibridge/intercept/chatcompletions/paramswrap.go b/aibridge/intercept/chatcompletions/paramswrap.go index 7c87d8fab99e3..8b9efbbf4fdfa 100644 --- a/aibridge/intercept/chatcompletions/paramswrap.go +++ b/aibridge/intercept/chatcompletions/paramswrap.go @@ -6,7 +6,7 @@ import ( "github.com/tidwall/gjson" "golang.org/x/xerrors" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" ) // ChatCompletionNewParamsWrapper exists because the "stream" param is not included in openai.ChatCompletionNewParams. diff --git a/aibridge/intercept/chatcompletions/streaming.go b/aibridge/intercept/chatcompletions/streaming.go index c03f9973b0451..8dac47dddf5eb 100644 --- a/aibridge/intercept/chatcompletions/streaming.go +++ b/aibridge/intercept/chatcompletions/streaming.go @@ -19,15 +19,14 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/eventstream" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" - "cdr.dev/slog/v3" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/eventstream" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" "github.com/coder/quartz" ) diff --git a/aibridge/intercept/chatcompletions/streaming_test.go b/aibridge/intercept/chatcompletions/streaming_test.go index 88d504613fefe..640ad197c5b0e 100644 --- a/aibridge/intercept/chatcompletions/streaming_test.go +++ b/aibridge/intercept/chatcompletions/streaming_test.go @@ -14,10 +14,10 @@ import ( "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/chatcompletions" - "github.com/coder/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/chatcompletions" + "github.com/coder/coder/v2/aibridge/internal/testutil" ) // Test that when the upstream provider returns an error before streaming starts, diff --git a/aibridge/intercept/client_headers_test.go b/aibridge/intercept/client_headers_test.go index 918ce64d5e238..f811fbecb05e2 100644 --- a/aibridge/intercept/client_headers_test.go +++ b/aibridge/intercept/client_headers_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/coder/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept" ) func TestPrepareClientHeaders(t *testing.T) { diff --git a/aibridge/intercept/credential.go b/aibridge/intercept/credential.go index c008bebafffe3..3343245e384e7 100644 --- a/aibridge/intercept/credential.go +++ b/aibridge/intercept/credential.go @@ -1,6 +1,6 @@ package intercept -import "github.com/coder/aibridge/utils" +import "github.com/coder/coder/v2/aibridge/utils" // CredentialKind identifies how a request was authenticated. // Keep in sync with the credential_kind enum in coderd's database. diff --git a/aibridge/intercept/eventstream/eventstream_test.go b/aibridge/intercept/eventstream/eventstream_test.go index f3cf104c7beb2..854b11eee0d7f 100644 --- a/aibridge/intercept/eventstream/eventstream_test.go +++ b/aibridge/intercept/eventstream/eventstream_test.go @@ -15,8 +15,7 @@ import ( "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/sloghuman" "cdr.dev/slog/v3/sloggers/slogtest" - - "github.com/coder/aibridge/intercept/eventstream" + "github.com/coder/coder/v2/aibridge/intercept/eventstream" "github.com/coder/quartz" ) @@ -86,7 +85,7 @@ func TestEventStream_NoWarning_WhenFlushIsFast(t *testing.T) { stream := eventstream.NewEventStream(ctx, logger, nil, clk) - // No clock advance — flush duration stays at 0, below threshold. + // No clock advance, flush duration stays at 0, below threshold. w := &clockAdvancingFlusher{ ResponseRecorder: httptest.NewRecorder(), clk: clk, diff --git a/aibridge/intercept/interceptor.go b/aibridge/intercept/interceptor.go index 47a61a2969ba8..33cbc51dff3b2 100644 --- a/aibridge/intercept/interceptor.go +++ b/aibridge/intercept/interceptor.go @@ -7,8 +7,8 @@ import ( "go.opentelemetry.io/otel/attribute" "cdr.dev/slog/v3" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" ) // Interceptor describes a (potentially) stateful interaction with an AI provider. diff --git a/aibridge/intercept/messages/base.go b/aibridge/intercept/messages/base.go index 7fd190df3b8b4..9853f7da5ee86 100644 --- a/aibridge/intercept/messages/base.go +++ b/aibridge/intercept/messages/base.go @@ -16,23 +16,21 @@ import ( "github.com/anthropics/anthropic-sdk-go/shared/constant" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" - "golang.org/x/xerrors" - - aibconfig "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/apidump" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" - "github.com/coder/aibridge/utils" - "github.com/coder/quartz" - "github.com/google/uuid" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" + "golang.org/x/xerrors" "cdr.dev/slog/v3" + aibconfig "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/apidump" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/utils" + "github.com/coder/quartz" ) // bedrockSupportedBetaFlags is the set of Anthropic-Beta flags that AWS Bedrock diff --git a/aibridge/intercept/messages/base_test.go b/aibridge/intercept/messages/base_test.go index 2c78adc012aeb..148c77c3fa7b6 100644 --- a/aibridge/intercept/messages/base_test.go +++ b/aibridge/intercept/messages/base_test.go @@ -12,9 +12,9 @@ import ( "github.com/tidwall/gjson" "cdr.dev/slog/v3" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/utils" ) func TestScanForCorrelatingToolCallID(t *testing.T) { @@ -257,12 +257,19 @@ func TestAWSBedrockCredentialChain(t *testing.T) { SmallFastModel: "test-small-model", }, envVars: map[string]string{ - "AWS_ACCESS_KEY_ID": "", - "AWS_SECRET_ACCESS_KEY": "", - "AWS_SESSION_TOKEN": "", - "AWS_PROFILE": "", - "AWS_SHARED_CREDENTIALS_FILE": "/dev/null", - "AWS_CONFIG_FILE": "/dev/null", + "AWS_ACCESS_KEY_ID": "", + "AWS_SECRET_ACCESS_KEY": "", + "AWS_SESSION_TOKEN": "", + "AWS_PROFILE": "", + "AWS_SHARED_CREDENTIALS_FILE": "/dev/null", + "AWS_CONFIG_FILE": "/dev/null", + "AWS_WEB_IDENTITY_TOKEN_FILE": "", + "AWS_ROLE_ARN": "", + "AWS_ROLE_SESSION_NAME": "", + "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI": "", + "AWS_CONTAINER_CREDENTIALS_FULL_URI": "", + "AWS_CONTAINER_AUTHORIZATION_TOKEN": "", + "AWS_EC2_METADATA_DISABLED": "true", }, expectError: true, errorMsg: "no AWS credentials found", diff --git a/aibridge/intercept/messages/blocking.go b/aibridge/intercept/messages/blocking.go index 7fb3f562c78bb..610f93457841a 100644 --- a/aibridge/intercept/messages/blocking.go +++ b/aibridge/intercept/messages/blocking.go @@ -15,15 +15,14 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/eventstream" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" - "cdr.dev/slog/v3" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/eventstream" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" ) type BlockingInterception struct { diff --git a/aibridge/intercept/messages/reqpayload.go b/aibridge/intercept/messages/reqpayload.go index dfe52fc80ccf7..293dca0c7f8f8 100644 --- a/aibridge/intercept/messages/reqpayload.go +++ b/aibridge/intercept/messages/reqpayload.go @@ -315,7 +315,7 @@ func (p RequestPayload) tools() ([]json.RawMessage, error) { func (RequestPayload) resultToRawMessage(items []gjson.Result) []json.RawMessage { // gjson.Result conversion to json.RawMessage is needed because - // gjson.Result does not implement json.Marshaler — would + // gjson.Result does not implement json.Marshaler. It would // serialize its struct fields instead of the raw JSON it represents. rawMessages := make([]json.RawMessage, 0, len(items)) for _, item := range items { diff --git a/aibridge/intercept/messages/reqpayload_test.go b/aibridge/intercept/messages/reqpayload_test.go index a5de61f88e619..d7cf8ba9b1d49 100644 --- a/aibridge/intercept/messages/reqpayload_test.go +++ b/aibridge/intercept/messages/reqpayload_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" "github.com/tidwall/gjson" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" ) func TestNewRequestPayload(t *testing.T) { diff --git a/aibridge/intercept/messages/streaming.go b/aibridge/intercept/messages/streaming.go index 8776d51f2138e..881e62dad599d 100644 --- a/aibridge/intercept/messages/streaming.go +++ b/aibridge/intercept/messages/streaming.go @@ -20,15 +20,14 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/eventstream" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" - "cdr.dev/slog/v3" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/eventstream" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" "github.com/coder/quartz" ) diff --git a/aibridge/intercept/responses/base.go b/aibridge/intercept/responses/base.go index daccc300a15e2..0107d2328da6f 100644 --- a/aibridge/intercept/responses/base.go +++ b/aibridge/intercept/responses/base.go @@ -22,13 +22,13 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/apidump" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/apidump" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" "github.com/coder/quartz" ) diff --git a/aibridge/intercept/responses/base_test.go b/aibridge/intercept/responses/base_test.go index ea5c87b501323..bf1fa198c82f3 100644 --- a/aibridge/intercept/responses/base_test.go +++ b/aibridge/intercept/responses/base_test.go @@ -10,8 +10,8 @@ import ( "github.com/stretchr/testify/require" "cdr.dev/slog/v3" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/recorder" ) func TestRecordPrompt(t *testing.T) { diff --git a/aibridge/intercept/responses/blocking.go b/aibridge/intercept/responses/blocking.go index d32a5f131b444..ce98219fc32c7 100644 --- a/aibridge/intercept/responses/blocking.go +++ b/aibridge/intercept/responses/blocking.go @@ -14,12 +14,12 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" ) type BlockingResponsesInterceptor struct { diff --git a/aibridge/intercept/responses/injected_tools.go b/aibridge/intercept/responses/injected_tools.go index dd44014b0bb8c..e9b8e2ee6790b 100644 --- a/aibridge/intercept/responses/injected_tools.go +++ b/aibridge/intercept/responses/injected_tools.go @@ -12,7 +12,7 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/recorder" ) func (i *responsesInterceptionBase) injectTools() { diff --git a/aibridge/intercept/responses/reqpayload_test.go b/aibridge/intercept/responses/reqpayload_test.go index 83115f085c480..15f84183d3126 100644 --- a/aibridge/intercept/responses/reqpayload_test.go +++ b/aibridge/intercept/responses/reqpayload_test.go @@ -12,8 +12,8 @@ import ( "github.com/tidwall/gjson" "cdr.dev/slog/v3" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/utils" ) func TestNewRequestPayload(t *testing.T) { diff --git a/aibridge/intercept/responses/streaming.go b/aibridge/intercept/responses/streaming.go index 030ef2a12236d..15847fb4d66d8 100644 --- a/aibridge/intercept/responses/streaming.go +++ b/aibridge/intercept/responses/streaming.go @@ -16,13 +16,13 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/eventstream" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/eventstream" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/tracing" "github.com/coder/quartz" ) diff --git a/aibridge/internal/integrationtest/apidump_test.go b/aibridge/internal/integrationtest/apidump_test.go index f2be96f36b8e3..8ec62297b0ee1 100644 --- a/aibridge/internal/integrationtest/apidump_test.go +++ b/aibridge/internal/integrationtest/apidump_test.go @@ -14,12 +14,12 @@ import ( "github.com/stretchr/testify/require" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/intercept/apidump" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/provider" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/intercept/apidump" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/provider" ) func TestAPIDump(t *testing.T) { diff --git a/aibridge/internal/integrationtest/bridge_test.go b/aibridge/internal/integrationtest/bridge_test.go index d0fdff1659442..80ebf4991595a 100644 --- a/aibridge/internal/integrationtest/bridge_test.go +++ b/aibridge/internal/integrationtest/bridge_test.go @@ -24,15 +24,15 @@ import ( "go.uber.org/goleak" "golang.org/x/xerrors" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/provider" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/provider" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/utils" ) func TestMain(m *testing.M) { diff --git a/aibridge/internal/integrationtest/circuit_breaker_test.go b/aibridge/internal/integrationtest/circuit_breaker_test.go index ec619409e6dd0..3ace843275dd4 100644 --- a/aibridge/internal/integrationtest/circuit_breaker_test.go +++ b/aibridge/internal/integrationtest/circuit_breaker_test.go @@ -16,9 +16,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/metrics" - "github.com/coder/aibridge/provider" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/metrics" + "github.com/coder/coder/v2/aibridge/provider" ) // Common response bodies for circuit breaker tests. diff --git a/aibridge/internal/integrationtest/helpers.go b/aibridge/internal/integrationtest/helpers.go index 038e6335b51c0..7b6e80c9032f5 100644 --- a/aibridge/internal/integrationtest/helpers.go +++ b/aibridge/internal/integrationtest/helpers.go @@ -5,8 +5,8 @@ import ( "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/recorder" ) // anthropicCfg creates a minimal Anthropic config for testing. diff --git a/aibridge/internal/integrationtest/metrics_test.go b/aibridge/internal/integrationtest/metrics_test.go index e941d94b34bf0..c3d61ad7154cc 100644 --- a/aibridge/internal/integrationtest/metrics_test.go +++ b/aibridge/internal/integrationtest/metrics_test.go @@ -13,11 +13,11 @@ import ( "github.com/stretchr/testify/require" "github.com/tidwall/sjson" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/metrics" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/metrics" ) func TestMetrics_Interception(t *testing.T) { diff --git a/aibridge/internal/integrationtest/mockmcp.go b/aibridge/internal/integrationtest/mockmcp.go index 812ad2e5a3aec..ffbd4fad19da6 100644 --- a/aibridge/internal/integrationtest/mockmcp.go +++ b/aibridge/internal/integrationtest/mockmcp.go @@ -18,8 +18,8 @@ import ( "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/mcp" ) // mockToolName is the primary mock tool name used in MCP tests. diff --git a/aibridge/internal/integrationtest/mockupstream.go b/aibridge/internal/integrationtest/mockupstream.go index b4b529a8a3b89..2731ed5506815 100644 --- a/aibridge/internal/integrationtest/mockupstream.go +++ b/aibridge/internal/integrationtest/mockupstream.go @@ -21,8 +21,8 @@ import ( "github.com/stretchr/testify/require" "github.com/tidwall/gjson" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/intercept/eventstream" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/intercept/eventstream" ) // upstreamResponse defines a single response that mockUpstream will replay diff --git a/aibridge/internal/integrationtest/responses_test.go b/aibridge/internal/integrationtest/responses_test.go index 1a35f7070ae06..dd333fd3aad97 100644 --- a/aibridge/internal/integrationtest/responses_test.go +++ b/aibridge/internal/integrationtest/responses_test.go @@ -19,13 +19,13 @@ import ( "github.com/stretchr/testify/require" "github.com/tidwall/sjson" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/provider" - "github.com/coder/aibridge/recorder" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/provider" + "github.com/coder/coder/v2/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/utils" ) type keyVal struct { diff --git a/aibridge/internal/integrationtest/setupbridge.go b/aibridge/internal/integrationtest/setupbridge.go index 5bfa01bc67a43..a77ac6f61a602 100644 --- a/aibridge/internal/integrationtest/setupbridge.go +++ b/aibridge/internal/integrationtest/setupbridge.go @@ -14,15 +14,15 @@ import ( "go.opentelemetry.io/otel/trace" "cdr.dev/slog/v3" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" - aibcontext "github.com/coder/aibridge/context" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/metrics" - "github.com/coder/aibridge/provider" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" + aibcontext "github.com/coder/coder/v2/aibridge/context" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/metrics" + "github.com/coder/coder/v2/aibridge/provider" + "github.com/coder/coder/v2/aibridge/recorder" ) const ( diff --git a/aibridge/internal/integrationtest/trace_test.go b/aibridge/internal/integrationtest/trace_test.go index dc86815fa3ae4..f3e835ca8a60b 100644 --- a/aibridge/internal/integrationtest/trace_test.go +++ b/aibridge/internal/integrationtest/trace_test.go @@ -17,10 +17,10 @@ import ( "go.opentelemetry.io/otel/sdk/trace/tracetest" oteltrace "go.opentelemetry.io/otel/trace" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/fixtures" - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/fixtures" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/tracing" ) // expect 'count' amount of traces named 'name' with status 'status' diff --git a/aibridge/internal/testutil/mock_recorder.go b/aibridge/internal/testutil/mock_recorder.go index 9868b67d4bf5d..52a86c847ddce 100644 --- a/aibridge/internal/testutil/mock_recorder.go +++ b/aibridge/internal/testutil/mock_recorder.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/xerrors" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge/recorder" ) // MockRecorder is a test implementation of aibridge.Recorder that diff --git a/aibridge/internal/testutil/mockprovider.go b/aibridge/internal/testutil/mockprovider.go index 8eb69fedf1e33..9bdcb106943d1 100644 --- a/aibridge/internal/testutil/mockprovider.go +++ b/aibridge/internal/testutil/mockprovider.go @@ -6,8 +6,8 @@ import ( "go.opentelemetry.io/otel/trace" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" ) type MockProvider struct { diff --git a/aibridge/mcp/client_info.go b/aibridge/mcp/client_info.go index 7dea5c5320d9d..04a4973a3e52d 100644 --- a/aibridge/mcp/client_info.go +++ b/aibridge/mcp/client_info.go @@ -3,7 +3,7 @@ package mcp import ( "github.com/mark3labs/mcp-go/mcp" - "github.com/coder/aibridge/buildinfo" + "github.com/coder/coder/v2/buildinfo" ) // GetClientInfo returns the MCP client information to use when initializing MCP connections. diff --git a/aibridge/mcp/client_info_test.go b/aibridge/mcp/client_info_test.go index 4dfabc5bcb694..77f4ee7b0e979 100644 --- a/aibridge/mcp/client_info_test.go +++ b/aibridge/mcp/client_info_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/coder/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/mcp" ) func TestGetClientInfo(t *testing.T) { diff --git a/aibridge/mcp/mcp_test.go b/aibridge/mcp/mcp_test.go index b9a14309043bb..aeea86e72d24b 100644 --- a/aibridge/mcp/mcp_test.go +++ b/aibridge/mcp/mcp_test.go @@ -10,19 +10,16 @@ import ( "strings" "testing" + mcplib "github.com/mark3labs/mcp-go/mcp" + "github.com/mark3labs/mcp-go/server" + "github.com/stretchr/testify/require" "go.opentelemetry.io/otel" "go.uber.org/goleak" "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/slogtest" - - "github.com/mark3labs/mcp-go/server" - "github.com/stretchr/testify/require" - - "github.com/coder/aibridge/internal/testutil" - "github.com/coder/aibridge/mcp" - - mcplib "github.com/mark3labs/mcp-go/mcp" + "github.com/coder/coder/v2/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/mcp" ) func TestMain(m *testing.M) { diff --git a/aibridge/mcp/proxy_streamable_http.go b/aibridge/mcp/proxy_streamable_http.go index 0b41283d6375c..132c03965ad99 100644 --- a/aibridge/mcp/proxy_streamable_http.go +++ b/aibridge/mcp/proxy_streamable_http.go @@ -15,7 +15,7 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/tracing" ) var _ ServerProxier = &StreamableHTTPServerProxy{} diff --git a/aibridge/mcp/server_proxy_manager.go b/aibridge/mcp/server_proxy_manager.go index 58e15214d607b..9c9bdb12320f4 100644 --- a/aibridge/mcp/server_proxy_manager.go +++ b/aibridge/mcp/server_proxy_manager.go @@ -10,8 +10,8 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/tracing" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/utils" ) var _ ServerProxier = &ServerProxyManager{} diff --git a/aibridge/mcp/tool.go b/aibridge/mcp/tool.go index b66574334a23e..8fbca9d224df2 100644 --- a/aibridge/mcp/tool.go +++ b/aibridge/mcp/tool.go @@ -13,7 +13,7 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/tracing" ) const ( diff --git a/aibridge/mcpmock/mcpmock.go b/aibridge/mcpmock/mcpmock.go index 21a37c3eca4a2..2678c733529c3 100644 --- a/aibridge/mcpmock/mcpmock.go +++ b/aibridge/mcpmock/mcpmock.go @@ -13,7 +13,7 @@ import ( context "context" reflect "reflect" - mcp "github.com/coder/aibridge/mcp" + mcp "github.com/coder/coder/v2/aibridge/mcp" mcp0 "github.com/mark3labs/mcp-go/mcp" gomock "go.uber.org/mock/gomock" ) diff --git a/aibridge/passthrough.go b/aibridge/passthrough.go index bf7ec7bd03943..3fcb1b34ddb17 100644 --- a/aibridge/passthrough.go +++ b/aibridge/passthrough.go @@ -12,10 +12,10 @@ import ( "go.opentelemetry.io/otel/trace" "cdr.dev/slog/v3" - "github.com/coder/aibridge/intercept/apidump" - "github.com/coder/aibridge/metrics" - "github.com/coder/aibridge/provider" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/intercept/apidump" + "github.com/coder/coder/v2/aibridge/metrics" + "github.com/coder/coder/v2/aibridge/provider" + "github.com/coder/coder/v2/aibridge/tracing" "github.com/coder/quartz" ) diff --git a/aibridge/passthrough_test.go b/aibridge/passthrough_test.go index 702098beb1d1c..33a8c62b6b60d 100644 --- a/aibridge/passthrough_test.go +++ b/aibridge/passthrough_test.go @@ -15,7 +15,7 @@ import ( "go.opentelemetry.io/otel" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/internal/testutil" ) var testTracer = otel.Tracer("bridge_test") diff --git a/aibridge/provider/anthropic.go b/aibridge/provider/anthropic.go index eb8a837101830..88d94a78ca263 100644 --- a/aibridge/provider/anthropic.go +++ b/aibridge/provider/anthropic.go @@ -13,12 +13,12 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/circuitbreaker" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/messages" - "github.com/coder/aibridge/tracing" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/circuitbreaker" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/messages" + "github.com/coder/coder/v2/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/utils" ) // anthropicForwardHeaders lists headers from incoming requests that should be diff --git a/aibridge/provider/anthropic_test.go b/aibridge/provider/anthropic_test.go index bc14296b8ec2b..75eef0e0d01df 100644 --- a/aibridge/provider/anthropic_test.go +++ b/aibridge/provider/anthropic_test.go @@ -10,10 +10,9 @@ import ( "github.com/stretchr/testify/require" "cdr.dev/slog/v3" - - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/internal/testutil" ) func TestAnthropic_TypeAndName(t *testing.T) { diff --git a/aibridge/provider/copilot.go b/aibridge/provider/copilot.go index 7ffaad24f8b6d..153514e979211 100644 --- a/aibridge/provider/copilot.go +++ b/aibridge/provider/copilot.go @@ -14,12 +14,12 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/chatcompletions" - "github.com/coder/aibridge/intercept/responses" - "github.com/coder/aibridge/tracing" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/chatcompletions" + "github.com/coder/coder/v2/aibridge/intercept/responses" + "github.com/coder/coder/v2/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/utils" ) const ( diff --git a/aibridge/provider/copilot_test.go b/aibridge/provider/copilot_test.go index c5d5316ff222b..cd30a833500d8 100644 --- a/aibridge/provider/copilot_test.go +++ b/aibridge/provider/copilot_test.go @@ -11,9 +11,8 @@ import ( "go.opentelemetry.io/otel" "cdr.dev/slog/v3" - - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/internal/testutil" ) var testTracer = otel.Tracer("copilot_test") diff --git a/aibridge/provider/openai.go b/aibridge/provider/openai.go index 827b86db3960c..2e37da5a1b543 100644 --- a/aibridge/provider/openai.go +++ b/aibridge/provider/openai.go @@ -14,12 +14,12 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/intercept/chatcompletions" - "github.com/coder/aibridge/intercept/responses" - "github.com/coder/aibridge/tracing" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/intercept/chatcompletions" + "github.com/coder/coder/v2/aibridge/intercept/responses" + "github.com/coder/coder/v2/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/utils" ) const ( diff --git a/aibridge/provider/openai_test.go b/aibridge/provider/openai_test.go index f53a2830318e2..d739a2dc20082 100644 --- a/aibridge/provider/openai_test.go +++ b/aibridge/provider/openai_test.go @@ -15,9 +15,9 @@ import ( "golang.org/x/sync/errgroup" "cdr.dev/slog/v3" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" - "github.com/coder/aibridge/internal/testutil" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/internal/testutil" ) const ( diff --git a/aibridge/provider/provider.go b/aibridge/provider/provider.go index 55d9590193ba0..cd09b6fc31d21 100644 --- a/aibridge/provider/provider.go +++ b/aibridge/provider/provider.go @@ -6,8 +6,8 @@ import ( "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" - "github.com/coder/aibridge/config" - "github.com/coder/aibridge/intercept" + "github.com/coder/coder/v2/aibridge/config" + "github.com/coder/coder/v2/aibridge/intercept" ) var ErrUnknownRoute = xerrors.New("unknown route") diff --git a/aibridge/recorder/recorder.go b/aibridge/recorder/recorder.go index c1a4b597f8fcf..26a9f24b5d0b8 100644 --- a/aibridge/recorder/recorder.go +++ b/aibridge/recorder/recorder.go @@ -5,14 +5,12 @@ import ( "sync" "time" + "go.opentelemetry.io/otel/trace" "golang.org/x/xerrors" "cdr.dev/slog/v3" - - "go.opentelemetry.io/otel/trace" - - "github.com/coder/aibridge/metrics" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge/metrics" + "github.com/coder/coder/v2/aibridge/tracing" ) var ( diff --git a/aibridge/session.go b/aibridge/session.go index 760ea7cf44b6a..34c45d2158955 100644 --- a/aibridge/session.go +++ b/aibridge/session.go @@ -9,7 +9,7 @@ import ( "github.com/tidwall/gjson" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" ) var claudeCodePattern = regexp.MustCompile(`_session_(.+)$`) // Legacy format: save compilation on each call. diff --git a/aibridge/session_test.go b/aibridge/session_test.go index 244b5cc06de07..7592dc5c5410a 100644 --- a/aibridge/session_test.go +++ b/aibridge/session_test.go @@ -8,8 +8,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/coder/aibridge" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/utils" ) func TestGuessSessionID(t *testing.T) { diff --git a/aibridge/utils/auth_test.go b/aibridge/utils/auth_test.go index eea3cdc55a3a9..00ee9a264fcf4 100644 --- a/aibridge/utils/auth_test.go +++ b/aibridge/utils/auth_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" ) func TestExtractBearerToken(t *testing.T) { diff --git a/aibridge/utils/concurrent_group_test.go b/aibridge/utils/concurrent_group_test.go index 6b5b78883f66c..22b0cb93d755f 100644 --- a/aibridge/utils/concurrent_group_test.go +++ b/aibridge/utils/concurrent_group_test.go @@ -7,7 +7,7 @@ import ( "go.uber.org/goleak" "golang.org/x/xerrors" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" ) func TestMain(m *testing.M) { diff --git a/aibridge/utils/mask_test.go b/aibridge/utils/mask_test.go index 1245f9455734e..7c0333515b720 100644 --- a/aibridge/utils/mask_test.go +++ b/aibridge/utils/mask_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/coder/aibridge/utils" + "github.com/coder/coder/v2/aibridge/utils" ) func TestMaskSecret(t *testing.T) { diff --git a/cli/server.go b/cli/server.go index 7054bd42cbc88..19c4c841abea3 100644 --- a/cli/server.go +++ b/cli/server.go @@ -56,7 +56,7 @@ import ( "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/sloghuman" - "github.com/coder/aibridge" + "github.com/coder/coder/v2/aibridge" "github.com/coder/coder/v2/buildinfo" "github.com/coder/coder/v2/cli/clilog" "github.com/coder/coder/v2/cli/cliui" diff --git a/cli/server_aibridge_internal_test.go b/cli/server_aibridge_internal_test.go index bfa3d2d7651ab..d0833070ef9f4 100644 --- a/cli/server_aibridge_internal_test.go +++ b/cli/server_aibridge_internal_test.go @@ -9,7 +9,7 @@ import ( "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge" + "github.com/coder/coder/v2/aibridge" "github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/testutil" ) diff --git a/enterprise/aibridged/aibridged_integration_test.go b/enterprise/aibridged/aibridged_integration_test.go index a9e423938a743..23579c45303df 100644 --- a/enterprise/aibridged/aibridged_integration_test.go +++ b/enterprise/aibridged/aibridged_integration_test.go @@ -19,9 +19,9 @@ import ( sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/sdk/trace/tracetest" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" - aibtracing "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" + aibtracing "github.com/coder/coder/v2/aibridge/tracing" "github.com/coder/coder/v2/coderd/coderdtest" "github.com/coder/coder/v2/coderd/database" "github.com/coder/coder/v2/coderd/database/dbtestutil" diff --git a/enterprise/aibridged/aibridged_test.go b/enterprise/aibridged/aibridged_test.go index b44c42551d650..b640de415daff 100644 --- a/enterprise/aibridged/aibridged_test.go +++ b/enterprise/aibridged/aibridged_test.go @@ -16,8 +16,8 @@ import ( "storj.io/drpc" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge" - "github.com/coder/aibridge/intercept" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/intercept" agplaibridge "github.com/coder/coder/v2/coderd/aibridge" "github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/enterprise/aibridged" diff --git a/enterprise/aibridged/http.go b/enterprise/aibridged/http.go index 701396040a7eb..3856e7ad75b38 100644 --- a/enterprise/aibridged/http.go +++ b/enterprise/aibridged/http.go @@ -8,8 +8,8 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge" - "github.com/coder/aibridge/recorder" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/recorder" agplaibridge "github.com/coder/coder/v2/coderd/aibridge" "github.com/coder/coder/v2/enterprise/aibridged/proto" ) diff --git a/enterprise/aibridged/mcp.go b/enterprise/aibridged/mcp.go index 800149f727a52..8b9f06810246c 100644 --- a/enterprise/aibridged/mcp.go +++ b/enterprise/aibridged/mcp.go @@ -10,7 +10,7 @@ import ( "golang.org/x/xerrors" "cdr.dev/slog/v3" - "github.com/coder/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/mcp" "github.com/coder/coder/v2/enterprise/aibridged/proto" ) diff --git a/enterprise/aibridged/pool.go b/enterprise/aibridged/pool.go index 978eeffd771bb..0468acb582ea7 100644 --- a/enterprise/aibridged/pool.go +++ b/enterprise/aibridged/pool.go @@ -13,9 +13,9 @@ import ( "tailscale.com/util/singleflight" "cdr.dev/slog/v3" - "github.com/coder/aibridge" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/tracing" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/tracing" ) const ( diff --git a/enterprise/aibridged/pool_test.go b/enterprise/aibridged/pool_test.go index 10ff0667fb56b..78d92a934926e 100644 --- a/enterprise/aibridged/pool_test.go +++ b/enterprise/aibridged/pool_test.go @@ -12,8 +12,8 @@ import ( "go.uber.org/mock/gomock" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge/mcp" - "github.com/coder/aibridge/mcpmock" + "github.com/coder/coder/v2/aibridge/mcp" + "github.com/coder/coder/v2/aibridge/mcpmock" "github.com/coder/coder/v2/enterprise/aibridged" mock "github.com/coder/coder/v2/enterprise/aibridged/aibridgedmock" ) diff --git a/enterprise/aibridged/translator.go b/enterprise/aibridged/translator.go index d55d478a8cd07..27786ec95b93c 100644 --- a/enterprise/aibridged/translator.go +++ b/enterprise/aibridged/translator.go @@ -10,7 +10,7 @@ import ( "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" - "github.com/coder/aibridge" + "github.com/coder/coder/v2/aibridge" "github.com/coder/coder/v2/coderd/util/ptr" "github.com/coder/coder/v2/enterprise/aibridged/proto" ) diff --git a/enterprise/aibridgeproxyd/aibridgeproxyd_test.go b/enterprise/aibridgeproxyd/aibridgeproxyd_test.go index 0f966f3ff05c7..516912df62245 100644 --- a/enterprise/aibridgeproxyd/aibridgeproxyd_test.go +++ b/enterprise/aibridgeproxyd/aibridgeproxyd_test.go @@ -31,7 +31,7 @@ import ( "cdr.dev/slog/v3" "cdr.dev/slog/v3/sloggers/slogtest" - "github.com/coder/aibridge" + "github.com/coder/coder/v2/aibridge" agplaibridge "github.com/coder/coder/v2/coderd/aibridge" "github.com/coder/coder/v2/enterprise/aibridgeproxyd" "github.com/coder/coder/v2/testutil" diff --git a/enterprise/cli/aibridged.go b/enterprise/cli/aibridged.go index 163b3036a8336..4c2d1d0687474 100644 --- a/enterprise/cli/aibridged.go +++ b/enterprise/cli/aibridged.go @@ -8,8 +8,8 @@ import ( "github.com/prometheus/client_golang/prometheus" "golang.org/x/xerrors" - "github.com/coder/aibridge" - "github.com/coder/aibridge/config" + "github.com/coder/coder/v2/aibridge" + "github.com/coder/coder/v2/aibridge/config" "github.com/coder/coder/v2/coderd/tracing" "github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/enterprise/aibridged" diff --git a/enterprise/cli/aibridged_internal_test.go b/enterprise/cli/aibridged_internal_test.go index ec1f2e64fde9d..4f446b661637e 100644 --- a/enterprise/cli/aibridged_internal_test.go +++ b/enterprise/cli/aibridged_internal_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/coder/aibridge" + "github.com/coder/coder/v2/aibridge" agplaibridge "github.com/coder/coder/v2/coderd/aibridge" "github.com/coder/coder/v2/codersdk" "github.com/coder/serpent" diff --git a/enterprise/cli/aibridgeproxyd.go b/enterprise/cli/aibridgeproxyd.go index fb96e541a979f..7f26a68b09dcf 100644 --- a/enterprise/cli/aibridgeproxyd.go +++ b/enterprise/cli/aibridgeproxyd.go @@ -10,7 +10,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "golang.org/x/xerrors" - "github.com/coder/aibridge" + "github.com/coder/coder/v2/aibridge" "github.com/coder/coder/v2/enterprise/aibridgeproxyd" "github.com/coder/coder/v2/enterprise/coderd" ) diff --git a/enterprise/coderd/aibridge_test.go b/enterprise/coderd/aibridge_test.go index b06bc361a4c82..8d52c1d642b10 100644 --- a/enterprise/coderd/aibridge_test.go +++ b/enterprise/coderd/aibridge_test.go @@ -11,7 +11,7 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/require" - aiblib "github.com/coder/aibridge" + aiblib "github.com/coder/coder/v2/aibridge" agplaibridge "github.com/coder/coder/v2/coderd/aibridge" "github.com/coder/coder/v2/coderd/coderdtest" "github.com/coder/coder/v2/coderd/database" diff --git a/go.mod b/go.mod index c31cff7535f44..a00d567c9e49d 100644 --- a/go.mod +++ b/go.mod @@ -281,7 +281,7 @@ require ( github.com/atotto/clipboard v0.1.4 // indirect github.com/aws/aws-sdk-go-v2 v1.41.5 github.com/aws/aws-sdk-go-v2/config v1.32.12 - github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.12 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect github.com/aws/aws-sdk-go-v2/feature/rds/auth v1.6.14 github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect @@ -433,7 +433,7 @@ require ( github.com/tcnksm/go-httpstat v0.2.0 // indirect github.com/tdewolff/parse/v2 v2.8.11 // indirect github.com/tidwall/match v1.2.0 // indirect - github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/pretty v1.2.1 github.com/tinylib/msgp v1.2.5 // indirect github.com/tklauser/go-sysconf v0.3.16 // indirect github.com/tklauser/numcpus v0.11.0 // indirect @@ -499,7 +499,6 @@ require ( github.com/aymanbagabas/go-udiff v0.4.1 github.com/brianvoe/gofakeit/v7 v7.14.0 github.com/coder/agentapi-sdk-go v0.0.0-20250505131810-560d1d88d225 - github.com/coder/aibridge v1.1.3-0.20260420072253-d474d6813420 github.com/coder/aisdk-go v0.0.9 github.com/coder/boundary v0.8.4-0.20260304164748-566aeea939ab github.com/coder/preview v1.0.8 @@ -510,7 +509,10 @@ require ( github.com/go-git/go-git/v5 v5.18.0 github.com/invopop/jsonschema v0.13.0 github.com/mark3labs/mcp-go v0.38.0 + github.com/openai/openai-go/v3 v3.28.0 github.com/shopspring/decimal v1.4.0 + github.com/sony/gobreaker/v2 v2.3.0 + github.com/tidwall/sjson v1.2.5 gonum.org/v1/gonum v0.17.0 ) @@ -605,7 +607,6 @@ require ( github.com/moby/sys/user v0.4.0 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect github.com/openai/openai-go v1.12.0 // indirect - github.com/openai/openai-go/v3 v3.28.0 // indirect github.com/package-url/packageurl-go v0.1.3 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/puzpuzpuz/xsync/v3 v3.5.1 // indirect @@ -615,10 +616,8 @@ require ( github.com/segmentio/asm v1.2.1 // indirect github.com/sergeymakinen/go-bmp v1.0.0 // indirect github.com/sergeymakinen/go-ico v1.0.0-beta.0 // indirect - github.com/sony/gobreaker/v2 v2.3.0 // indirect github.com/spf13/cobra v1.10.2 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect - github.com/tidwall/sjson v1.2.5 // indirect github.com/tmaxmax/go-sse v0.11.0 // indirect github.com/ulikunitz/xz v0.5.15 // indirect github.com/urfave/cli/v2 v2.27.5 // indirect diff --git a/go.sum b/go.sum index c56c47ca2bcca..21c919e00bfdd 100644 --- a/go.sum +++ b/go.sum @@ -312,8 +312,6 @@ github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= github.com/coder/agentapi-sdk-go v0.0.0-20250505131810-560d1d88d225 h1:tRIViZ5JRmzdOEo5wUWngaGEFBG8OaE1o2GIHN5ujJ8= github.com/coder/agentapi-sdk-go v0.0.0-20250505131810-560d1d88d225/go.mod h1:rNLVpYgEVeu1Zk29K64z6Od8RBP9DwqCu9OfCzh8MR4= -github.com/coder/aibridge v1.1.3-0.20260420072253-d474d6813420 h1:vSgHLbHvty3Y9DXAKZimP/GXKI23o52PlTC+EJYh6tM= -github.com/coder/aibridge v1.1.3-0.20260420072253-d474d6813420/go.mod h1:k2/JzBF/jW2h4xKYyXXy9gbD7qaf0kKvfXxwA2JCYxE= github.com/coder/aisdk-go v0.0.9 h1:Vzo/k2qwVGLTR10ESDeP2Ecek1SdPfZlEjtTfMveiVo= github.com/coder/aisdk-go v0.0.9/go.mod h1:KF6/Vkono0FJJOtWtveh5j7yfNrSctVTpwgweYWSp5M= github.com/coder/anthropic-sdk-go v0.0.0-20260415160422-a31d7d0e7067 h1:v1RAkUO21u0QH6UlUueSHMbgFf++BZZW41Rj6LM2eWo= diff --git a/scripts/check_emdash.sh b/scripts/check_emdash.sh index c41bf34111c1a..4001ac24087dd 100755 --- a/scripts/check_emdash.sh +++ b/scripts/check_emdash.sh @@ -20,9 +20,14 @@ emdash=$'\xE2\x80\x94' endash=$'\xE2\x80\x93' pattern="${emdash}|${endash}" +# Git exclude_pathspecs excluded from the check. Used in both ls-files and diff comparison. +exclude_pathspecs=( + ":(exclude)aibridge/fixtures/**/*.txtar" +) + scan_all_files() { local output - output=$(git ls-files -z | xargs -0 grep -IEn "$pattern" 2>/dev/null || true) + output=$(git ls-files -z -- "${exclude_pathspecs[@]}" | xargs -0 grep -IEn "$pattern" 2>/dev/null || true) if [[ -n "$output" ]]; then echo "$output" found=1 @@ -58,7 +63,7 @@ else fi found=0 - if ! diff_output=$(git diff "$base" -U0 -- . 2>&1); then + if ! diff_output=$(git diff "$base" -U0 -- . "${exclude_pathspecs[@]}" 2>&1); then echo "ERROR: git diff against $base failed:" echo "$diff_output" exit 1