Skip to content

fips base image#2310

Merged
akshaydeo merged 1 commit intomainfrom
03-26-fips_base_image
Mar 30, 2026
Merged

fips base image#2310
akshaydeo merged 1 commit intomainfrom
03-26-fips_base_image

Conversation

@akshaydeo
Copy link
Copy Markdown
Contributor

@akshaydeo akshaydeo commented Mar 26, 2026

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
  • Chore/CI

Affected areas

  • Core (Go)
  • 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.

# 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

  • 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

@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 sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 26, 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: 37750d9d-fdf8-461b-862e-aec4049dca13

📥 Commits

Reviewing files that changed from the base of the PR and between 6ab490e and 77b533a.

⛔ Files ignored due to path filters (6)
  • 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
📒 Files selected for processing (6)
  • Makefile
  • config.json
  • docs/docs.json
  • docs/security.mdx
  • transports/Dockerfile
  • transports/Dockerfile.local

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added Security documentation covering defense-in-depth practices including vulnerability scanning, container hardening, supply-chain controls, and deployment security.
    • Added optional configuration file support for local deployments.
  • Documentation

    • New Security page now accessible in main navigation with detailed best practices and security controls overview.
  • Chores

    • Updated container base image for enhanced security compliance.
    • Removed container health check endpoint.

Walkthrough

The PR updates the Makefile to conditionally select between standard and local Dockerfiles and accept optional configuration parameters, introduces a new Security documentation tab, and adds a comprehensive security guide covering defense-in-depth practices including CI/CD, container hardening, supply-chain controls, and deployment security. Both Dockerfiles migrate to a custom FIPS-compliant base image and remove health checks.

Changes

Cohort / File(s) Summary
Build Configuration
Makefile
Updated docker-image target to conditionally use either transports/Dockerfile or transports/Dockerfile.local based on LOCAL variable; added optional CONFIG parameter to docker-run with dynamic path resolution and conditional mount binding.
Documentation Structure
docs/docs.json
Added new "Security" navigation tab with shield icon, routed to security page, positioned before "Benchmarks".
Security Documentation
docs/security.mdx
New comprehensive security guide describing defense-in-depth approach covering CI/CD vulnerability scanning (Snyk/SARIF), container hardening (FIPS-compliant base, non-root execution, multi-stage builds), supply-chain controls (GitHub Actions pinning, npm provenance, dependency management), CodeQL analysis, and deployment security (least-privilege permissions, Tailscale VPN, StepSecurity hardening, CODEOWNERS gates).
Container Images
transports/Dockerfile, transports/Dockerfile.local
Migrated runtime stage from pinned Alpine base with explicit package installation to custom bifrosthq/dhi-alpine-base:3.22-fips_bifrost-v27032026 image; removed container HEALTHCHECK directive; simplified user/permission setup; added explicit entrypoint permissions in build stage.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🛡️ A fortress of security now stands tall,
With documentation guiding through it all,
From FIPS compliance to scanning deep,
Defense-in-depth, the promises we keep,
Configuration flows and Docker's gentle dance,
Bifrost's walls strengthen with each advance! 🐰

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 03-26-fips_base_image

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

Copy link
Copy Markdown
Contributor Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Suite Available

This PR can be tested by a repository admin.

Run tests for PR #2310

@akshaydeo akshaydeo force-pushed the 03-26-fips_base_image branch 2 times, most recently from 774d081 to e7fef83 Compare March 30, 2026 07:03
@akshaydeo akshaydeo force-pushed the 03-26-fips_base_image branch from e7fef83 to 77b533a Compare March 30, 2026 07:33
@akshaydeo akshaydeo marked this pull request as ready for review March 30, 2026 07:35
@akshaydeo akshaydeo requested a review from a team as a code owner March 30, 2026 07:35
Copy link
Copy Markdown
Contributor Author

akshaydeo commented Mar 30, 2026

Merge activity

  • Mar 30, 7:35 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Mar 30, 7:35 AM UTC: @akshaydeo merged this pull request with Graphite.

@akshaydeo akshaydeo merged commit b06cd9a into main Mar 30, 2026
12 of 18 checks passed
@akshaydeo akshaydeo deleted the 03-26-fips_base_image branch March 30, 2026 07:35
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 30, 2026

Confidence Score: 2/5

Not safe to merge — the main Dockerfile has a path error that will break the Docker build, and missing chown will cause runtime permission failures.

There is a P0 issue (wrong chmod path causes build failure) and a P1 issue (missing chown causes appuser to lack write access to /app) in the primary deliverable of this PR. Both must be resolved before the image can be successfully built and run.

transports/Dockerfile requires the most attention: the wrong chmod path on line 49 and the missing chown on line 84. transports/Dockerfile.local also needs the chown fix.

Important Files Changed

Filename Overview
transports/Dockerfile Switches runtime base to FIPS-compliant image and removes HEALTHCHECK; has two blocking issues: wrong chmod path in builder stage (build will fail) and missing chown leaving /app root-owned when running as appuser.
transports/Dockerfile.local Same FIPS base image switch and HEALTHCHECK removal as Dockerfile; chmod path is correct here (WORKDIR is /build), but the same missing chown issue applies.
Makefile Adds LOCAL=1 flag to select Dockerfile.local and improves docker-run to support an optional CONFIG path mount — looks correct.
config.json An empty file added to the repository root — likely an accidental artifact from local testing of the new docker-run CONFIG flag.
docs/security.mdx New security documentation page covering FIPS hardening, SHA pinning, Snyk/CodeQL scanning, Dependabot, and GitHub Actions permissions — content is accurate and well-structured.
docs/docs.json Adds the new Security tab/page to the documentation navigation — straightforward and correct.

Comments Outside Diff (1)

  1. config.json, line 1 (link)

    P2 Empty config.json committed to repository root

    An empty config.json file has been added to the repository root. This appears unintentional — it has no content and may be a leftover artifact from local testing (e.g. related to the updated docker-run target in the Makefile). If this file is not meant to be tracked, it should be removed and added to .gitignore.

Reviews (1): Last reviewed commit: "fips base image" | Re-trigger Greptile

Comment thread transports/Dockerfile
# Verify build succeeded
# Verify build succeeded and prepare entrypoint
RUN test -f /app/main || (echo "Build failed" && exit 1)
RUN chmod +x /build/transports/docker-entrypoint.sh
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P0 Wrong path for chmod in builder stage

The builder's WORKDIR is /app and the transports directory is copied there with COPY transports/ ./, so docker-entrypoint.sh lands at /app/docker-entrypoint.sh. The path /build/transports/docker-entrypoint.sh does not exist in this build stage — chmod will fail with a non-zero exit code, causing the Docker build to fail entirely.

This path is correct for Dockerfile.local (where WORKDIR is /build), but it was incorrectly copied verbatim here.

Suggested change
RUN chmod +x /build/transports/docker-entrypoint.sh
RUN chmod +x /app/docker-entrypoint.sh

Comment thread transports/Dockerfile
Comment on lines +84 to 85
RUN mkdir -p $APP_DIR/logs
USER appuser
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Missing chown for appuser after removing user-creation block

The previous Dockerfile included chown -R appuser:appuser /app alongside the adduser call. Both were removed here, meaning /app (including /app/data/logs and the copied binaries/scripts) is now owned by root. Since the container switches to appuser immediately after, the application may fail at runtime when attempting to write logs or any other data into /app/data/logs.

The FIPS base image is expected to provide appuser, but without chown, that user will not have write access to directories created as root in this stage. The same issue exists in Dockerfile.local (line 94–95).

Consider adding the missing ownership fix:

RUN mkdir -p $APP_DIR/logs && chown -R appuser:appuser /app
USER appuser

Comment thread transports/Dockerfile

# --- Runtime Stage: Minimal runtime image ---
FROM alpine:3.23.3@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659
FROM bifrosthq/dhi-alpine-base:3.22-fips_bifrost-v27032026
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 New base image not pinned to a digest

The original base image was digest-pinned (alpine:3.23.3@sha256:25109...), which the project's own security documentation highlights as a best practice to prevent supply-chain attacks via mutable tags. The new FIPS base image uses only a mutable version tag (bifrosthq/dhi-alpine-base:3.22-fips_bifrost-v27032026) with no @sha256:... digest.

Consider pinning to the image digest for reproducible and tamper-resistant builds:

FROM bifrosthq/dhi-alpine-base:3.22-fips_bifrost-v27032026@sha256:<digest>

The same applies to Dockerfile.local line 72.

akshaydeo added a commit that referenced this pull request Mar 30, 2026
* v1.4.17-release-cut (#2368)

* fixed helm schema fix (#2369)

## 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

* fix migration tests (#2371)

* framework: bump core to v1.4.15 --skip-pipeline

* plugins/governance: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/jsonparser: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/litellmcompat: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/logging: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/maxim: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/mocker: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/otel: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/semanticcache: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* plugins/telemetry: bump core to v1.4.15 and framework to v1.2.34 --skip-pipeline

* test fixes (#2374)

## 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

* transports: update dependencies --skip-pipeline

* Adds changelog for v1.4.18 --skip-pipeline

* [StepSecurity] Apply security best practices (#2372)

* [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>

* removed codeql to fallback on default setup (#2376)

## 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

* Update snyk.yml (#2380)

* fips base image (#2310)

## 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

* fixed snyk failure and enterprise update (#2382)

## 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

* fix snyk failures (#2385)

## 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

* fix: add explicit type="button" to navigation and action buttons (#2353)

## 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

* fix: prevent edit mode activation when clicking interactive elements 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

* refactor: extract copy-to-clipboard logic into reusable hook (#2379)

## 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

* refactor: replace lazy query with polling query and fix overflow in log 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

* merge-branch-main-into-v-1-5-0 resolve

* merge-branch-main-into-v-1-5-0 resolve

---------

Signed-off-by: StepSecurity Bot <bot@stepsecurity.io>
Co-authored-by: Akshay Deo <akshay@akshaydeo.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: StepSecurity Bot <bot@stepsecurity.io>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
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.

2 participants