Skip to content

Main backmerge#2402

Merged
akshaydeo merged 29 commits intov1.5.0from
main
Mar 30, 2026
Merged

Main backmerge#2402
akshaydeo merged 29 commits intov1.5.0from
main

Conversation

@akshaydeo
Copy link
Copy Markdown
Contributor

No description provided.

akshaydeo and others added 29 commits March 29, 2026 19:01
## Summary

Remove Bullfrog security monitoring from GitHub Actions workflows and update Helm chart schema validation requirements.

## Changes

- Removed `bullfrogsec/bullfrog@7bc9b6e13e2dd9cbe5861f33bc26dc6bdb9d9ed2` action with `egress-policy: audit` from all GitHub Actions workflows
- Updated Helm chart values schema to only require `dimension` field instead of `dimension`, `keys`, and `provider` for config objects

## Type of change

- [ ] Bug fix
- [ ] Feature
- [x] Refactor
- [ ] Documentation
- [x] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (Next.js)
- [ ] Docs

## How to test

Verify that GitHub Actions workflows execute successfully without the Bullfrog security step:

```sh
# Trigger any workflow to ensure it runs without errors
# Check that Helm chart validation accepts configs with only dimension field
helm lint helm-charts/bifrost/
```

## Screenshots/Recordings

N/A

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

This change removes network egress monitoring from CI/CD pipelines. Ensure alternative security measures are in place if network monitoring is still required.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
## Summary

Adds support for testing streaming multiple tool calls functionality across LLM providers. This addresses the need to differentiate between providers that support multiple tool calls in streaming mode versus those that only return one tool call at a time during streaming.

## Changes

- Added `MultipleToolCallsStreaming` field to `TestScenarios` struct to track streaming multiple tool calls capability
- Updated all provider test configurations to enable the new streaming multiple tool calls feature
- Added conditional test skipping in multiple tool calls streaming tests when providers don't support this functionality
- Refined streaming response validation expectations to handle consolidated responses from chunks more accurately
- Updated provider-specific validation expectations for Cohere and Parasail to reflect their actual response formats

## Type of change

- [x] Feature
- [x] Refactor

## Affected areas

- [x] Core (Go)
- [x] Providers/Integrations

## How to test

Run the LLM provider tests to validate streaming multiple tool calls functionality:

```sh
# Core/Transports
go version
go test ./...

# Test specific provider streaming multiple tool calls
go test ./core/providers/openai -v -run TestOpenAI
go test ./core/providers/anthropic -v -run TestAnthropic
```

The tests will automatically skip streaming multiple tool calls scenarios for providers that don't support this feature.

## Screenshots/Recordings

N/A - Backend testing enhancement only.

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

No security implications - this is a testing infrastructure enhancement.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
* [StepSecurity] Apply security best practices

Signed-off-by: StepSecurity Bot <bot@stepsecurity.io>

* Update .github/workflows/codeql.yml

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* cr fixes

* fixed cr comments 2

---------

Signed-off-by: StepSecurity Bot <bot@stepsecurity.io>
Co-authored-by: Akshay Deo <akshay@akshaydeo.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
## Summary

Removes the CodeQL security analysis workflow from the GitHub Actions configuration. This eliminates automated static code analysis for Go, JavaScript, and Python languages that was previously running on pushes, pull requests, and weekly schedules.

## Changes

- Deleted `.github/workflows/codeql.yml` which contained the complete CodeQL workflow configuration
- Removed automated security scanning for Go, JavaScript, and Python codebases
- Eliminated the scheduled weekly security analysis runs

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [x] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (Next.js)
- [ ] Docs

## How to test

Verify that CodeQL workflow is no longer present in the repository:

```sh
# Confirm the workflow file has been removed
ls -la .github/workflows/
# Should not show codeql.yml

# Check GitHub Actions tab to ensure CodeQL runs are no longer scheduled
# Navigate to repository Actions tab and verify no CodeQL workflows appear
```

## Screenshots/Recordings

N/A

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

## Security considerations

This change removes automated security analysis from the CI/CD pipeline. The repository will no longer benefit from CodeQL's static analysis capabilities for detecting security vulnerabilities, code quality issues, and potential bugs in Go, JavaScript, and Python code. Consider alternative security scanning solutions if this workflow was providing valuable security insights.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [ ] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
## Summary

Updates the transports Docker configuration to use a FIPS-compliant base image and removes the built-in health check mechanism.

## Changes

- Replaced `alpine:3.23.3` base image with `dhi.io/alpine-base:3.23-alpine3.23-fips` for FIPS compliance
- Removed the Docker HEALTHCHECK directive that was monitoring the `/health` endpoint

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [x] Chore/CI

## Affected areas

- [ ] Core (Go)
- [x] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (Next.js)
- [ ] Docs

## How to test

Verify the Docker image builds successfully with the new base image and that the application starts correctly without the health check.

```sh
# Build the Docker image
docker build -t transports-test ./transports

# Run the container
docker run -p 8080:8080 transports-test

# Verify the application is running
curl http://localhost:8080/health
```

## Screenshots/Recordings

N/A

## Breaking changes

- [x] Yes
- [ ] No

The removal of the Docker HEALTHCHECK may affect container orchestration systems that rely on Docker's built-in health checking. External health monitoring will need to be configured if required.

## Related issues

N/A

## Security considerations

This change enhances security by adopting a FIPS-compliant base image, which provides cryptographic modules that meet Federal Information Processing Standards.

## Checklist

- [ ] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [ ] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable
## Summary

Enhances the model catalog to extract and cache max output tokens from pricing data, improves Snyk workflow reliability by checking for SARIF file existence before upload, and updates security documentation to reflect full SHA pinning for the enterprise repository.

## Changes

- Added `MaxOutputTokens` field to `PricingEntry` struct to capture model parameter limits from pricing datasheet
- Implemented `populateModelParamsFromPricing()` function to extract max output tokens and populate the model params cache
- Refactored model name extraction logic into reusable `extractModelName()` utility function
- Enhanced Snyk workflow conditions to only upload SARIF files when they exist, preventing upload failures
- Updated security documentation to reflect that bifrost-enterprise now uses full SHA pinning (100% coverage)

## Type of change

- [x] Feature
- [x] Chore/CI
- [x] Documentation

## Affected areas

- [x] Core (Go)
- [x] Docs

## How to test

Verify model catalog functionality and pricing data processing:

```sh
# Core functionality
go version
go test ./framework/modelcatalog/...

# Test pricing sync with max_output_tokens
go test -v ./framework/modelcatalog/ -run TestSyncPricing

# Verify Snyk workflow changes in CI
# Check that SARIF upload steps only run when files exist
```

## Screenshots/Recordings

N/A

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

- Improves CI security by preventing potential failures in SARIF upload steps
- Documents enhanced security posture with full SHA pinning in enterprise repository

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
## Summary

Improves Docker container security and reliability by migrating from custom base image to standard Alpine, adding health checks, and enhancing Snyk security scanning.

## Changes

- **Docker base image migration**: Replaced `bifrosthq/dhi-alpine-base:3.22-fips_bifrost-v27032026` with standard `alpine:3.23.3` for better security and maintainability
- **Added health checks**: Implemented HTTP health check endpoint monitoring with 30s intervals and proper retry logic
- **Enhanced user management**: Consolidated user creation and permission setup into single RUN command for better layer optimization
- **Improved Snyk scanning**: Added build step before security scanning and excluded `examples` and `tests/scripts` directories from vulnerability analysis
- **Runtime dependencies**: Explicitly installed required CGO runtime libraries (musl, libgcc, ca-certificates, wget)

## Type of change

- [x] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [x] Chore/CI

## Affected areas

- [ ] Core (Go)
- [x] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (Next.js)
- [ ] Docs

## How to test

Validate Docker builds and container health:

```sh
# Build and test standard Dockerfile
docker build -f transports/Dockerfile -t bifrost:test .
docker run -d --name bifrost-test -p 8080:8080 bifrost:test
docker ps  # Should show healthy status after ~35s
curl http://localhost:8080/health  # Should return 200 OK

# Build and test local development Dockerfile
docker build -f transports/Dockerfile.local -t bifrost:local .
docker run -d --name bifrost-local -p 8081:8080 bifrost:local
docker ps  # Should show healthy status after ~35s

# Test Snyk workflow
make build  # Verify build step works
# Run Snyk scan (requires SNYK_TOKEN)
```

## Screenshots/Recordings

N/A

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

- Migrated from custom base image to well-maintained Alpine Linux for better security patching
- Enhanced Snyk scanning excludes test directories to focus on production code vulnerabilities
- Health check endpoint provides better container monitoring capabilities
- Explicit runtime dependency management reduces attack surface

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
## Summary

Added explicit `type="button"` attributes to Button components in log detail sheets and plugin sequence forms to prevent unintended form submissions when these buttons are clicked.

## Changes

- Added `type="button"` to navigation buttons (Previous/Next) in log detail sheets
- Added `type="button"` to dropdown menu trigger buttons in log detail sheets  
- Added `type="button"` to the Save Sequence button in plugin sequence sheet
- Added `type="button"` to the Copy button in CEL rule builder

This prevents these buttons from accidentally triggering form submissions when used within forms, ensuring they only perform their intended click actions.

## Type of change

- [x] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [x] UI (Next.js)
- [ ] Docs

## How to test

Verify that buttons in log detail sheets and plugin forms work correctly without triggering form submissions:

1. Open log detail sheets and test navigation buttons
2. Test dropdown menu triggers in log sheets
3. Test plugin sequence save functionality
4. Test CEL rule builder copy button

```sh
# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

## Screenshots/Recordings

N/A - This is a behavioral fix without visual changes.

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

None - this change only affects button behavior to prevent unintended form submissions.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
…in message views (#2377)

## Summary

Prevents edit mode from being triggered when clicking on interactive elements (buttons, links, or elements with button role) within message views. This fixes the issue where clicking on buttons or links inside messages would unintentionally activate edit mode.

## Changes

- Added event target checking in onClick handlers for assistant, system, and user message views
- Modified click handlers to check if the clicked element is within a button, link, or element with button role using `closest()` method
- Restructured conditional logic for better readability and early returns

## Type of change

- [x] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [x] UI (Next.js)
- [ ] Docs

## How to test

1. Navigate to a message view with interactive elements (buttons, links)
2. Click on buttons or links within the message content
3. Verify that edit mode is not triggered when clicking interactive elements
4. Click on non-interactive areas of the message to confirm edit mode still works
5. Test across all message types (assistant, system, user)

```sh
# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

## Screenshots/Recordings

N/A

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

No security implications - this is a UI interaction improvement.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
## Summary

Refactored clipboard copy functionality across the UI by creating a reusable `useCopyToClipboard` hook to replace duplicate clipboard handling code.

## Changes

- Created a new `useCopyToClipboard` hook that provides consistent clipboard functionality with customizable success/error messages and automatic reset of copied state
- Replaced inline clipboard handling code across 11 components with the new hook
- Removed direct `navigator.clipboard.writeText()` calls and manual toast notifications
- Added support for customizable messages and reset delays in the hook

## Type of change

- [ ] Bug fix
- [ ] Feature
- [x] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [x] UI (Next.js)
- [ ] Docs

## How to test

Test clipboard functionality across the affected components:

```sh
# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

1. Navigate to API Keys page and test copying curl examples
2. Open log details and test copying request IDs and request bodies
3. Test copy functionality in routing rules CEL builder
4. Test copy functionality in virtual keys table
5. Test copy functionality in Prometheus configuration
6. Verify all copy actions show appropriate toast messages

## Screenshots/Recordings

No visual changes - functionality remains the same with improved code organization.

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

No security implications - maintains existing clipboard functionality without changes to security model.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
…og details sheet (#2381)

## Summary

Improves log detail sheet reliability by switching from lazy loading to automatic polling for failed log fetches and fixes UI overflow issues in the sheet header.

## Changes

- Replaced `useLazyGetLogByIdQuery` with `useGetLogByIdQuery` for automatic data fetching when the sheet opens
- Added polling mechanism that retries every 2 seconds when log fetch fails, stopping when successful
- Fixed horizontal overflow issues in the sheet header by adding `overflow-x-hidden` classes
- Exported `useGetLogByIdQuery` hook from the logs API

## Type of change

- [x] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [x] UI (Next.js)
- [ ] Docs

## How to test

1. Open the logs page and click on a log entry to view details
2. Verify the log details load automatically without manual triggering
3. Test with network issues or slow responses to confirm polling retry behavior
4. Check that long request IDs don't cause horizontal overflow in the sheet header

```sh
# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

## Screenshots/Recordings

N/A

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

None - this change only affects UI data fetching patterns and styling.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
## Summary

Updates Claude Code documentation to clarify that API keys are always required when using custom base URLs like Bifrost, even for OAuth-based authentication methods. Adds new images for Google Workspace user provisioning setup.

## Changes

- Clarified that `ANTHROPIC_API_KEY` is required when routing through custom base URLs, even for Pro/Max/Teams accounts using OAuth
- Added `ANTHROPIC_AUTH_TOKEN` environment variable setup alongside `ANTHROPIC_API_KEY` in configuration examples
- Updated authentication precedence documentation to note that `ANTHROPIC_API_KEY` is always required with custom base URLs
- Added five new PNG images for Google Workspace user provisioning documentation

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [x] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (Next.js)
- [x] Docs

## How to test

Verify the documentation renders correctly and the new environment variable examples work as expected:

```sh
# Test the updated configuration
export ANTHROPIC_API_KEY=your-bifrost-virtual-key
export ANTHROPIC_AUTH_TOKEN=your-bifrost-virtual-key
export ANTHROPIC_BASE_URL=http://localhost:8080/anthropic

# Verify Claude Code can authenticate with these settings
claude-code --help
```

The new environment variables `ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` are now documented as required when using custom base URLs, even for OAuth authentication flows.

## Screenshots/Recordings

Added new images for Google Workspace setup:
- `gws-auth-client-creation.png`
- `gws-connection-status.png` 
- `gws-domain-wide-delegation.png`
- `gws-service-account-id.png`
- `gws-service-key-creation.png`

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

## Security considerations

The documentation now properly emphasizes that API keys are required for custom base URL configurations, ensuring users understand the authentication requirements for secure Bifrost integration.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
## Summary

Adds CORS configuration instructions for Claude for Office integration with Bifrost, enabling requests from the `pivot.claude.ai` domain.

## Changes

- Added step 6 to the Bifrost configuration guide for enabling CORS
- Included instructions to add `https://pivot.claude.ai` to the Allowed Origins list
- Added a note indicating users can skip this step if their Allowed Origins are already set to `*`
- Added new image asset for Google Workspace OAuth client scope configuration

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [x] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (Next.js)
- [x] Docs

## How to test

Verify the documentation renders correctly and the CORS configuration step is clear:

1. Navigate to the Claude for Office documentation page
2. Confirm step 6 appears after the headers configuration
3. Verify the origin URL `https://pivot.claude.ai` is correctly formatted
4. Test that the note about skipping when origins are set to `*` displays properly

## Screenshots/Recordings

N/A - Documentation update only

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

This change documents CORS configuration which affects cross-origin request security. Users should understand the implications of adding specific origins to their allowed list versus using wildcard origins.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [ ] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [ ] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable
## Summary

Relaxes header filter validation to allow wildcard patterns that match security headers while maintaining strict validation for exact security header names. This change recognizes that security headers are unconditionally stripped at runtime regardless of configuration.

## Changes

- Modified `validateHeaderFilterConfig` to only reject exact security header names in allowlist/denylist
- Removed validation logic that prevented wildcard patterns from matching security headers
- Updated function comments to clarify that wildcard patterns are allowed because security headers are always stripped at runtime
- Fixed error message in UI to correctly reference "client config" instead of "core config"

## Type of change

- [x] Bug fix
- [ ] Feature
- [ ] Refactor
- [ ] Documentation
- [ ] Chore/CI

## Affected areas

- [x] Core (Go)
- [x] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [x] UI (Next.js)
- [ ] Docs

## How to test

Validate that wildcard patterns in header filter configuration are now accepted:

```sh
# Core/Transports
go version
go test ./transports/bifrost-http/handlers/...

# Test specific scenarios:
# - Wildcard patterns like "authorization*" should be accepted
# - Exact security header names like "authorization" should still be rejected
# - Invalid wildcard syntax should still be rejected

# UI
cd ui
pnpm i || npm i
pnpm test || npm test
pnpm build || npm run build
```

## Screenshots/Recordings

N/A - Backend validation changes only

## Breaking changes

- [ ] Yes
- [x] No

## Related issues

N/A

## Security considerations

This change maintains security by ensuring security headers are always stripped at runtime in `ctx.go`, regardless of allowlist/denylist configuration. The validation change only affects configuration acceptance, not runtime behavior.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [ ] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
@akshaydeo akshaydeo requested a review from a team as a code owner March 30, 2026 15:40
@CLAassistant
Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 4 committers have signed the CLA.

✅ impoiler
❌ github-actions[bot]
❌ akshaydeo
❌ step-security-bot
You have signed the CLA already but the status is still pending? Let us recheck it.

@github-advanced-security
Copy link
Copy Markdown

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 30, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: aa844bfd-f960-45e6-a22a-3230f693707a

📥 Commits

Reviewing files that changed from the base of the PR and between 3f1ac35 and 7e3e1d2.

⛔ Files ignored due to path filters (25)
  • .next/trace is excluded by !**/.next/**
  • docs/media/security/codeowners.png is excluded by !**/*.png
  • docs/media/security/codeql.png is excluded by !**/*.png
  • docs/media/security/dep-pinning.png is excluded by !**/*.png
  • docs/media/security/hardned-base-image.png is excluded by !**/*.png
  • docs/media/security/scout-image-score.png is excluded by !**/*.png
  • docs/media/security/step-security.png is excluded by !**/*.png
  • docs/media/user-provisioning/gws-auth-client-creation.png is excluded by !**/*.png
  • docs/media/user-provisioning/gws-connection-status.png is excluded by !**/*.png
  • docs/media/user-provisioning/gws-domain-wide-delegation.png is excluded by !**/*.png
  • docs/media/user-provisioning/gws-scope-for-oauth-client.png is excluded by !**/*.png
  • docs/media/user-provisioning/gws-service-account-id.png is excluded by !**/*.png
  • docs/media/user-provisioning/gws-service-key-creation.png is excluded by !**/*.png
  • examples/plugins/hello-world/go.sum is excluded by !**/*.sum
  • framework/go.sum is excluded by !**/*.sum
  • plugins/governance/go.sum is excluded by !**/*.sum
  • plugins/jsonparser/go.sum is excluded by !**/*.sum
  • plugins/litellmcompat/go.sum is excluded by !**/*.sum
  • plugins/logging/go.sum is excluded by !**/*.sum
  • plugins/maxim/go.sum is excluded by !**/*.sum
  • plugins/mocker/go.sum is excluded by !**/*.sum
  • plugins/otel/go.sum is excluded by !**/*.sum
  • plugins/semanticcache/go.sum is excluded by !**/*.sum
  • plugins/telemetry/go.sum is excluded by !**/*.sum
  • transports/go.sum is excluded by !**/*.sum
📒 Files selected for processing (92)
  • .github/dependabot.yml
  • .github/workflows/dependabot-alerts.yml
  • .github/workflows/dependency-review.yml
  • .github/workflows/docs-validation.yml
  • .github/workflows/e2e-tests.yml
  • .github/workflows/helm-release.yml
  • .github/workflows/npx-publish.yml
  • .github/workflows/openapi-bundle.yml
  • .github/workflows/pr-test-notifier.yml
  • .github/workflows/pr-tests.yml
  • .github/workflows/release-cli.yml
  • .github/workflows/release-pipeline.yml
  • .github/workflows/scorecards.yml
  • .github/workflows/scripts/run-migration-tests.sh
  • .github/workflows/snyk.yml
  • .pre-commit-config.yaml
  • Makefile
  • config.json
  • core/internal/llmtests/account.go
  • core/internal/llmtests/multiple_tool_calls.go
  • core/internal/llmtests/validation_presets.go
  • core/providers/anthropic/anthropic_test.go
  • core/providers/azure/azure_test.go
  • core/providers/bedrock/bedrock_test.go
  • core/providers/cohere/cohere_test.go
  • core/providers/gemini/gemini_test.go
  • core/providers/groq/groq_test.go
  • core/providers/nebius/nebius_test.go
  • core/providers/ollama/ollama_test.go
  • core/providers/openai/openai_test.go
  • core/providers/openrouter/openrouter_test.go
  • core/providers/sgl/sgl_test.go
  • core/providers/vertex/vertex_test.go
  • core/providers/vllm/vllm_test.go
  • core/providers/xai/xai_test.go
  • core/version
  • docs/changelogs/v1.4.18.mdx
  • docs/cli-agents/claude-code.mdx
  • docs/cli-agents/claude-for-office.mdx
  • docs/docs.json
  • docs/security.mdx
  • examples/plugins/hello-world/go.mod
  • framework/changelog.md
  • framework/go.mod
  • framework/modelcatalog/main.go
  • framework/modelcatalog/sync.go
  • framework/modelcatalog/utils.go
  • framework/version
  • helm-charts/bifrost/values.schema.json
  • plugins/governance/changelog.md
  • plugins/governance/go.mod
  • plugins/governance/version
  • plugins/jsonparser/go.mod
  • plugins/jsonparser/version
  • plugins/litellmcompat/go.mod
  • plugins/litellmcompat/version
  • plugins/logging/go.mod
  • plugins/logging/version
  • plugins/maxim/go.mod
  • plugins/maxim/version
  • plugins/mocker/go.mod
  • plugins/mocker/version
  • plugins/otel/go.mod
  • plugins/otel/version
  • plugins/semanticcache/go.mod
  • plugins/semanticcache/version
  • plugins/telemetry/go.mod
  • plugins/telemetry/version
  • transports/Dockerfile
  • transports/Dockerfile.local
  • transports/bifrost-http/handlers/config.go
  • transports/bifrost-http/handlers/config_headerfilter_test.go
  • transports/config.schema.json
  • transports/go.mod
  • transports/version
  • ui/app/_fallbacks/enterprise/components/api-keys/apiKeysIndexView.tsx
  • ui/app/workspace/config/views/clientSettingsView.tsx
  • ui/app/workspace/logs/sheets/logDetailsSheet.tsx
  • ui/app/workspace/logs/views/collapsibleBox.tsx
  • ui/app/workspace/logs/views/emptyState.tsx
  • ui/app/workspace/mcp-logs/views/emptyState.tsx
  • ui/app/workspace/mcp-logs/views/mcpLogDetailsSheet.tsx
  • ui/app/workspace/observability/fragments/prometheusFormFragment.tsx
  • ui/app/workspace/plugins/sheets/pluginSequenceSheet.tsx
  • ui/app/workspace/routing-rules/components/celBuilder/celRuleBuilder.tsx
  • ui/app/workspace/virtual-keys/views/virtualKeysTable.tsx
  • ui/components/prompts/components/messagesView/assistantMessageView.tsx
  • ui/components/prompts/components/messagesView/systemMessageView.tsx
  • ui/components/prompts/components/messagesView/userMessageView.tsx
  • ui/components/ui/input.tsx
  • ui/hooks/useCopyToClipboard.ts
  • ui/lib/store/apis/logsApi.ts

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added security documentation and enhanced CI/CD security scanning.
    • Added calendar-aligned budget snapshots and max output tokens support.
    • Added streaming multiple tool calls test scenarios.
  • Bug Fixes

    • Fixed wildcard header filter validation to properly allow runtime security headers.
    • Improved log polling and automatic refetching for processing states.
    • Enhanced click event handling to prevent accidental edit mode activation.
  • Chores

    • Updated dependencies and pinned Docker base images to specific digest hashes.
    • Enhanced workflow security with runner hardening and proper permissions.
  • Documentation

    • Updated authentication guides and added CORS setup instructions.

Walkthrough

This pull request updates core library versions (core v1.4.14→v1.4.15, framework v1.2.33→v1.2.34) across the repository, adds security hardening to CI/CD workflows, introduces streaming-based test scenarios for multiple tool calls, refactors clipboard logic into a reusable hook, and updates documentation with new security and configuration guidance.

Changes

Cohort / File(s) Summary
Security & Dependency Management
.github/dependabot.yml, .github/workflows/dependabot-alerts.yml, .github/workflows/dependency-review.yml, .github/workflows/scorecards.yml, .pre-commit-config.yaml
Expanded Dependabot coverage with explicit per-directory entries and daily scan frequency; added Dependency Review and Scorecard workflows; introduced pre-commit hooks for gitleaks, golangci-lint, shellcheck, and eslint.
Workflow Hardening
.github/workflows/docs-validation.yml, .github/workflows/e2e-tests.yml, .github/workflows/helm-release.yml, .github/workflows/npx-publish.yml, .github/workflows/openapi-bundle.yml, .github/workflows/pr-test-notifier.yml, .github/workflows/pr-tests.yml, .github/workflows/release-cli.yml, .github/workflows/release-pipeline.yml, .github/workflows/snyk.yml
Systematically added step-security/harden-runner steps with egress auditing across all workflows; introduced top-level permission declarations; migrated Python setup to astral-sh/setup-uv; updated Snyk SARIF upload conditions.
Version Bumps & Module Dependencies
core/version, framework/version, framework/go.mod, plugins/*/version, plugins/*/go.mod, transports/version, transports/go.mod, examples/plugins/hello-world/go.mod
Bumped core from v1.4.14→v1.4.15 and framework from v1.2.33→v1.2.34; propagated versions across all plugins (governance, jsonparser, litellmcompat, logging, maxim, mocker, otel, semanticcache, telemetry) and dependent modules.
LLM Test Infrastructure
core/internal/llmtests/account.go, core/internal/llmtests/multiple_tool_calls.go, core/internal/llmtests/validation_presets.go
Added MultipleToolCallsStreaming scenario flag; gated streaming subtests on flag enablement; adjusted provider-specific expectations for timestamps/model fields in streaming validation.
Provider Test Configuration
core/providers/anthropic/anthropic_test.go, core/providers/azure/azure_test.go, core/providers/bedrock/bedrock_test.go, core/providers/cohere/cohere_test.go, core/providers/gemini/gemini_test.go, core/providers/groq/groq_test.go, core/providers/nebius/nebius_test.go, core/providers/ollama/ollama_test.go, core/providers/openai/openai_test.go, core/providers/openrouter/openrouter_test.go, core/providers/sgl/sgl_test.go, core/providers/vertex/vertex_test.go, core/providers/vllm/vllm_test.go, core/providers/xai/xai_test.go
Enabled MultipleToolCallsStreaming: true across all provider test configurations alongside existing MultipleToolCalls flag.
Model Catalog & Pricing
framework/modelcatalog/main.go, framework/modelcatalog/sync.go, framework/modelcatalog/utils.go
Added MaxOutputTokens field to PricingEntry; introduced populateModelParamsFromPricing helper to extract max output tokens into provider cache; refactored model name extraction into extractModelName utility.
HTTP Transport Config & Validation
transports/bifrost-http/handlers/config.go, transports/bifrost-http/handlers/config_headerfilter_test.go, transports/config.schema.json
Relaxed wildcard security header validation to allow runtime matches; added calendar_aligned budget schema property; updated test expectations accordingly.
Database Migration Tests
.github/workflows/scripts/run-migration-tests.sh
Updated seed data and schema coverage for v1.4.17: added open_ai_config_json and blacklisted_models_json columns with provider-specific values; added conditional dynamic column population for both PostgreSQL and SQLite.
Clipboard Hook Extraction
ui/hooks/useCopyToClipboard.ts, ui/app/_fallbacks/enterprise/components/api-keys/apiKeysIndexView.tsx, ui/app/workspace/config/views/clientSettingsView.tsx, ui/app/workspace/logs/sheets/logDetailsSheet.tsx, ui/app/workspace/logs/views/collapsibleBox.tsx, ui/app/workspace/logs/views/emptyState.tsx, ui/app/workspace/mcp-logs/views/emptyState.tsx, ui/app/workspace/observability/fragments/prometheusFormFragment.tsx, ui/app/workspace/plugins/sheets/pluginSequenceSheet.tsx, ui/app/workspace/routing-rules/components/celBuilder/celRuleBuilder.tsx, ui/app/workspace/virtual-keys/views/virtualKeysTable.tsx, ui/components/ui/input.tsx
Created new useCopyToClipboard hook with configurable toast messages and reset delay; refactored 11 UI components to use hook instead of direct navigator.clipboard.writeText and local toast logic.
Log Details & Display Improvements
ui/app/workspace/logs/sheets/logDetailsSheet.tsx, ui/lib/store/apis/logsApi.ts, ui/components/prompts/components/messagesView/assistantMessageView.tsx, ui/components/prompts/components/messagesView/systemMessageView.tsx, ui/components/prompts/components/messagesView/userMessageView.tsx, ui/app/workspace/mcp-logs/views/mcpLogDetailsSheet.tsx
Switched log fetching to polling query with dynamic pollingInterval for error/processing states; added event-aware click handlers to message views to ignore clicks on interactive elements; added explicit type="button" attributes; exported useGetLogByIdQuery hook.
Documentation
docs/changelogs/v1.4.18.mdx, docs/cli-agents/claude-code.mdx, docs/cli-agents/claude-for-office.mdx, docs/security.mdx, docs/docs.json
Added v1.4.18 changelog with feature/fix inventory; clarified Anthropic API key requirements for custom base URLs; added CORS setup step for Claude for Office; published comprehensive security documentation covering CI/CD, supply chain, and runtime hardening practices.
Build & Deployment
Makefile, transports/Dockerfile, transports/Dockerfile.local, helm-charts/bifrost/values.schema.json
Made Docker image selection dynamic based on LOCAL flag in Makefile; pinned Dockerfile base images to immutable SHA-256 digests; reformatted Dockerfile.local indentation; reduced semantic cache schema required fields to dimension only.
Changelog Cleanup
framework/changelog.md, plugins/governance/changelog.md
Removed individual changelog entries already captured in release notes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~90 minutes

The PR spans heterogeneous changes across security workflows, test infrastructure, UI refactoring, version management, and documentation. While many changes follow repetitive patterns (version bumps, workflow hardening steps, provider test config updates), the variety of domains and several logic-dense areas—including header filter validation relaxation, clipboard hook design, log polling state management, and database migration schema—require careful review across multiple distinct contexts.

Possibly related PRs

  • [StepSecurity] Apply security best practices #2372: Implements overlapping repository-wide security hardening changes including updated .github/dependabot.yml, expanded GitHub Actions workflow runner hardening, and Dockerfile digest pinning across the same CI/CD and build infrastructure.
  • go upgrade to 1.26.1 #2060: Shares Go toolchain and Docker base image updates (golang 1.26.1 and alpine base image versions) affecting transports Dockerfile and build-related dependencies.

Poem

🐰 A rabbit hops through hardened gates,
With clipboards shared and streams that update,
From core to ui, versions align,
Security woven throughout the design!
No more wild wildcards, just calm, steady flow—
What a delightful patch—watch it grow!

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch main

Comment @coderabbitai help to get the list of available commands and usage tips.

@akshaydeo akshaydeo merged commit a221382 into v1.5.0 Mar 30, 2026
39 of 41 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Apr 6, 2026
16 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants