Skip to content

v1.5.0-prerelease4 cut#2874

Merged
akshaydeo merged 2 commits intomainfrom
04-21-v1.5.0-prerelease4_cut
Apr 20, 2026
Merged

v1.5.0-prerelease4 cut#2874
akshaydeo merged 2 commits intomainfrom
04-21-v1.5.0-prerelease4_cut

Conversation

@akshaydeo
Copy link
Copy Markdown
Contributor

@akshaydeo akshaydeo commented Apr 20, 2026

Summary

Fixes field name mismatches between the UI and the API contract for access profile budget and rate limit fields. The UI was referencing budgets and rate_limit on managing profiles, which did not match the correct field names budget_lines and rate_limits.

Changes

  • Replaced managingProfile.budgets with managingProfile.budget_lines in both the usage hook and the details sheet view to correctly read budget data from access profiles.
  • Replaced managingProfile.rate_limit with managingProfile.rate_limits in the usage hook to correctly read rate limit data from access profiles.
  • Changed the inert attribute on the fieldset from a string "" / undefined to a boolean true / false for correctness.

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Chore/CI

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (React)
  • Docs

How to test

Navigate to a virtual key that is managed by an access profile with budgets and/or rate limits configured. Verify that:

  • Budget information is displayed correctly and the "(from {profile name})" label appears.
  • Rate limit information is displayed correctly when the profile has rate limits set.
  • The budget/rate limit fields are properly disabled (inert) when the key is managed by a profile.
cd ui
pnpm i || npm i
pnpm build || npm run build

Breaking changes

  • Yes
  • No

Related issues

Security considerations

None.

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

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 20, 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: bda0ac69-ea95-4296-bdea-b7a7e6a5c592

📥 Commits

Reviewing files that changed from the base of the PR and between 45cbed9 and 8f144bf.

📒 Files selected for processing (2)
  • docs/cli-agents/claude-code.mdx
  • transports/bifrost-http/integrations/anthropic.go

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Governance Teams page now shows teams in an interactive table with search, debounced queries, pagination, and live refresh.
  • Bug Fixes / Improvements

    • Virtual Key details now correctly show profile-managed budget and rate-limit information when managed by a profile.
    • Form fieldsets correctly use inert for disabled states to improve accessibility.
    • Streaming responses handling adjusted to avoid incorrect passthrough of certain content events.
  • Documentation

    • Added VS Code setup guide for Claude Code.
    • Removed outdated Okta role-mapping note.

Walkthrough

Update virtual-key UI/hooks to read renamed API fields (budget_lines, rate_limits), fix inert prop usage, remove an Okta role‑mapping note, add VS Code Claude Code setup docs, and refactor the governance teams page to a table-driven UI with RBAC gating, debounced search, pagination, polling, and combined loading/error handling.

Changes

Cohort / File(s) Summary
Virtual Key API Field Updates
ui/app/workspace/virtual-keys/hooks/useVirtualKeyUsage.ts, ui/app/workspace/virtual-keys/views/virtualKeyDetailsSheet.tsx, ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
Hook/Views now read profile-managed budgets from budget_lines and rate limits from rate_limits (instead of budgets/rate_limit); inert prop changed from empty string to boolean when isManagedByProfile. Review impacts on display logic and HTML accessibility.
Governance Teams Page Refactor
ui/app/workspace/governance/teams/page.tsx
Replaced TeamsView with TeamsTable; added RBAC-gated queries (skip when unauthorized), debounced search (300ms), local pagination (PAGE_SIZE = 25), polling (5s), combined loading state, toast error deduplication, and offset snap-back when totals shrink. Review data-fetch gating, state resets, and polling implications.
Docs — Okta & VS Code
docs/enterprise/setting-up-okta.mdx, docs/cli-agents/claude-code.mdx
Removed Okta role-mapping behavior note from evaluation rules; added a “Setup with the VS Code extension” section for Claude Code with Bifrost environment variable examples and API key guidance.
Anthropic streaming tweak
transports/bifrost-http/integrations/anthropic.go
Streaming response converter now skips passthrough for ContentPartAdded events, falling back to standard conversion; passthrough logic preserved for other event types. Check streaming behavior and downstream consumers.

Sequence Diagram(s)

sequenceDiagram
  participant UI as Client UI
  participant RBAC as RBAC check
  participant API as GraphQL/API
  participant DS as DataSource (teams/customers/virtual_keys)

  UI->>RBAC: request access for queries
  RBAC-->>UI: allowed/denied flags
  alt allowed
    UI->>API: fetch teams(customers, vks) with search, offset, limit
    API->>DS: query datasets
    DS-->>API: results + total
    API-->>UI: datasets + total
    UI->>UI: debounce search (300ms), update offset, poll every 5s
  else denied
    UI-->>UI: skip corresponding queries (no request)
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I nibbled through budgets, found new lines to see,
Rate limits hopped over, now tracked properly,
Tables sprouted columns, RBAC guards at the gate,
Search hums softly, pagination keeps the date,
VS Code waves hello — a rabbit’s tidy spree!

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title 'v1.5.0-prerelease4 cut' describes a release cut but does not clearly summarize the actual changes in the PR, which are specific bug fixes to field name mismatches in the UI. Revise the title to reflect the main change, such as 'Fix field name mismatches for access profile budget and rate limit fields' or 'Fix API field references in virtual key management UI'.
Docstring Coverage ⚠️ Warning Docstring coverage is 11.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Description check ✅ Passed The PR description covers all major template sections with clear explanations of the bug fixes, changes made, type of change, affected areas, testing instructions, and security considerations.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 04-21-v1.5.0-prerelease4_cut

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.11.4)

level=error msg="[linters_context] typechecking error: pattern ./...: directory prefix . does not contain main module or its selected dependencies"


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

Copy link
Copy Markdown
Contributor Author

akshaydeo commented Apr 20, 2026

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

@akshaydeo akshaydeo marked this pull request as ready for review April 20, 2026 19:30
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Suite Available

This PR can be tested by a repository admin.

Run tests for PR #2874

@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Apr 20, 2026

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 2 committers have signed the CLA.

✅ BearTS
❌ akshaydeo
You have signed the CLA already but the status is still pending? Let us recheck it.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 20, 2026

Confidence Score: 5/5

Safe to merge — all core fixes are correct and the only remaining finding is a minor pre-existing style issue.

The field name fixes are verified against the UserAccessProfile type (budget_lines and rate_limits match exactly). The inert boolean change is correct. The single P2 comment is about a pre-existing local isExhausted recomputation that does not affect correctness of this PR's changes.

virtualKeyDetailsSheet.tsx — minor pre-existing isExhausted duplication, not introduced by this PR.

Important Files Changed

Filename Overview
ui/app/workspace/virtual-keys/hooks/useVirtualKeyUsage.ts Core bug fix: correctly accesses budget_lines and rate_limits on UserAccessProfile instead of the old wrong field names.
ui/app/workspace/virtual-keys/views/virtualKeyDetailsSheet.tsx Uses corrected budget_lines field name; local isExhausted duplicates hook logic with a minor falsy-zero inconsistency for rate-limit checks.
ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx Changed inert attribute from string "" / undefined to boolean true / undefined for correctness; rest of the file unchanged.
ui/components/ui/MultiBudgetLines.tsx Clean reusable budget-line component; no issues found.
docs/cli-agents/claude-code.mdx New documentation page for Claude Code VS Code extension integration; content looks accurate.
ui/app/workspace/governance/teams/page.tsx Minor supporting change; no issues found.
transports/bifrost-http/integrations/anthropic.go Go integration file included in the prerelease cut; no concerning changes visible.
docs/enterprise/setting-up-okta.mdx Okta SSO setup documentation; no issues found.

Reviews (7): Last reviewed commit: "docs: add docs for claude code vscode pl..." | Re-trigger Greptile

coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 20, 2026
danpiths
danpiths previously approved these changes Apr 20, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 20, 2026
@danpiths danpiths dismissed stale reviews from coderabbitai[bot] and themself via e0cf66f April 20, 2026 20:05
@danpiths danpiths force-pushed the 04-21-v1.5.0-prerelease4_cut branch from eecdb93 to e0cf66f Compare April 20, 2026 20:05
@danpiths danpiths self-requested a review April 20, 2026 20:05
coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 20, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
ui/app/workspace/governance/teams/page.tsx (2)

61-64: Add teamsData to dependency array for completeness.

The effect reads teamsData in the condition but it's not in the dependency array. While this works in practice because teamsTotal is derived from it, adding teamsData would satisfy the exhaustive-deps rule and make the dependencies explicit.

💡 Proposed fix
 useEffect(() => {
   if (!teamsData || offset < teamsTotal) return;
   setOffset(teamsTotal === 0 ? 0 : Math.floor((teamsTotal - 1) / PAGE_SIZE) * PAGE_SIZE);
-}, [teamsTotal, offset]);
+}, [teamsData, teamsTotal, offset]);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ui/app/workspace/governance/teams/page.tsx` around lines 61 - 64, The
useEffect that adjusts pagination reads teamsData but omits it from the
dependency array; update the dependency array of the useEffect (the one calling
setOffset and referencing teamsTotal, offset, PAGE_SIZE) to include teamsData
alongside teamsTotal and offset so the effect re-runs when teamsData changes and
satisfies exhaustive-deps.

18-20: Consider using nuqs for search state persistence.

Per coding guidelines, persistent or shareable state (like search filters) should use nuqs for URL query params. This allows users to bookmark or share filtered views.

💡 Example refactor using nuqs
-import { useEffect, useRef, useState } from "react";
+import { useEffect, useRef } from "react";
+import { useQueryState, parseAsString } from "nuqs";

// ...

-const [search, setSearch] = useState("");
+const [search, setSearch] = useQueryState("search", parseAsString.withDefault(""));
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ui/app/workspace/governance/teams/page.tsx` around lines 18 - 20, The search
state currently uses local React state (search, setSearch) with
useDebouncedValue to debounce input, which prevents sharing/bookmarking filters;
replace this with a nuqs-backed query param so the search persists in the URL:
remove or replace the useState for search and setSearch with the nuqs hook (the
project’s query-param hook) to read/write the query key (e.g., "q" or "search")
and keep debouncedSearch produced from that value (retain useDebouncedValue on
the nuqs value), updating any handlers that reference search/setSearch to use
the nuqs getter/setter so filtered views are shareable.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@ui/app/workspace/governance/teams/page.tsx`:
- Around line 61-64: The useEffect that adjusts pagination reads teamsData but
omits it from the dependency array; update the dependency array of the useEffect
(the one calling setOffset and referencing teamsTotal, offset, PAGE_SIZE) to
include teamsData alongside teamsTotal and offset so the effect re-runs when
teamsData changes and satisfies exhaustive-deps.
- Around line 18-20: The search state currently uses local React state (search,
setSearch) with useDebouncedValue to debounce input, which prevents
sharing/bookmarking filters; replace this with a nuqs-backed query param so the
search persists in the URL: remove or replace the useState for search and
setSearch with the nuqs hook (the project’s query-param hook) to read/write the
query key (e.g., "q" or "search") and keep debouncedSearch produced from that
value (retain useDebouncedValue on the nuqs value), updating any handlers that
reference search/setSearch to use the nuqs getter/setter so filtered views are
shareable.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fbce1533-c92d-477f-9ae3-7ac3bef19c1d

📥 Commits

Reviewing files that changed from the base of the PR and between e0cf66f and 4fdd841.

📒 Files selected for processing (6)
  • docs/enterprise/setting-up-okta.mdx
  • ui/app/workspace/governance/teams/page.tsx
  • ui/app/workspace/virtual-keys/hooks/useVirtualKeyUsage.ts
  • ui/app/workspace/virtual-keys/views/virtualKeyDetailsSheet.tsx
  • ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
  • ui/components/ui/MultiBudgetLines.tsx
💤 Files with no reviewable changes (1)
  • docs/enterprise/setting-up-okta.mdx
✅ Files skipped from review due to trivial changes (2)
  • ui/app/workspace/virtual-keys/views/virtualKeyDetailsSheet.tsx
  • ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • ui/app/workspace/virtual-keys/hooks/useVirtualKeyUsage.ts

coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 20, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
helm-charts/bifrost/templates/deployment.yaml (1)

91-97: ⚠️ Potential issue | 🟠 Major

Ensure optional encryption-key behavior is consistent across Deployment and StatefulSet

Line 91 correctly gates on encryptionKeySecret.name, but helm-charts/bifrost/templates/stateful.yaml (context snippet Lines 91-97) still uses the old object-truthy guard. This leaves sqlite+persistence installs on StatefulSet with different behavior and can still render secretKeyRef.name as empty.

Suggested parity fix
--- a/helm-charts/bifrost/templates/stateful.yaml
+++ b/helm-charts/bifrost/templates/stateful.yaml
@@
-{{- if .Values.bifrost.encryptionKeySecret }}
+{{- if .Values.bifrost.encryptionKeySecret.name }}
             - name: BIFROST_ENCRYPTION_KEY
               valueFrom:
                 secretKeyRef:
                   name: {{ .Values.bifrost.encryptionKeySecret.name }}
                   key: {{ .Values.bifrost.encryptionKeySecret.key }}
             {{- end }}

As per coding guidelines "**: always check the stack if there is one for the current PR. do not give localized reviews for the PR, always see all changes in the light of the whole stack of PRs (if there is a stack, if there is no stack you can continue to make localized suggestions/reviews)`.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@helm-charts/bifrost/templates/deployment.yaml` around lines 91 - 97, The
StatefulSet template's conditional for the BIFROST_ENCRYPTION_KEY env var must
match the Deployment guard: replace the current object-truthy check with an
explicit check for .Values.bifrost.encryptionKeySecret.name so the
BIFROST_ENCRYPTION_KEY env var is only rendered when a name is provided; update
the conditional around the BIFROST_ENCRYPTION_KEY env var in the stateful
template to use the same guard (.Values.bifrost.encryptionKeySecret.name) and
ensure secretKeyRef.name and key are only emitted when that value is present to
avoid rendering an empty secret name.
🧹 Nitpick comments (2)
ui/app/workspace/governance/teams/page.tsx (1)

18-20: Consider using nuqs for shareable search state.

The search state is currently local, which means it won't persist across page refreshes or be shareable via URL. For better UX, consider using nuqs to sync the search query parameter with the URL. This is optional for this PR.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ui/app/workspace/governance/teams/page.tsx` around lines 18 - 20, Replace the
local search useState with a nuqs-backed query state so the query is persisted
and shareable: swap the const [search, setSearch] = useState("") to use nuqs'
query-state hook (e.g., useQueryState or equivalent) keyed as "search" with
default "" and keep setSearch to update that query param; continue to feed
debouncedSearch = useDebouncedValue(search, 300) from the nuqs-backed search
value so debouncing works the same; optionally apply the same pattern for
offset/ setOffset if you want pagination to be shareable.
ui/app/workspace/logs/views/logChatMessageView.tsx (1)

188-188: Use a stable key for each tool call.

Line 188 still keys the mapped tool_calls by index, even though the log types expose toolCall.id. Reordering or inserting calls will remount these panels unnecessarily. Prefer toolCall.id with a deterministic fallback only when it is actually absent.

As per coding guidelines, "Always use stable, unique keys in lists; never use array index as key unless unavoidable".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ui/app/workspace/logs/views/logChatMessageView.tsx` at line 188, The mapped
CollapsibleBox currently uses the array index as its React key, causing
unnecessary remounts; change the key to use the tool call's stable id
(toolCall.id) and only fall back to a deterministic fallback when id is truly
absent (e.g., `toolCall.id ?? \`toolcall-${index}\``). Update the key prop on
the CollapsibleBox created in the tool_calls mapping (the element with title
`Tool Call: ${toolCall.function?.name || \`#${index + 1}\`}` and onCopy
returning jsonContent) to use toolCall.id first to ensure stable, unique keys.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@transports/changelog.md`:
- Line 7: Update the changelog line describing OCR Request Support to use a
hyphenated compound modifier: replace "full body accumulation" with "full-body
accumulation" in the string that begins with "**OCR Request Support** — Added
OCR request type with stream terminal detection, full body accumulation for
passthrough streams, input logging with detail view, and per-request pricing
support" so the wording reads "...full-body accumulation for passthrough
streams..." for improved readability.

In `@ui/app/workspace/governance/teams/page.tsx`:
- Around line 60-64: The useEffect that snaps offset when items shrink
references teamsData in its condition but doesn't include it in the dependency
array; update the effect's dependencies to include teamsData alongside
teamsTotal and offset so React's exhaustive-deps rule is satisfied (locate the
useEffect block that checks "if (!teamsData || offset < teamsTotal) ..." and add
teamsData to the array used by useEffect that calls setOffset(... PAGE_SIZE
...)).

In `@ui/app/workspace/logs/sheets/logDetailView.tsx`:
- Around line 1495-1499: The current summary drops unnamed tool calls because it
maps tool_calls to tc.function?.name and filters falsy values; update the
rendering logic in logDetailView.tsx so that for each item you either use a
per-item fallback (e.g., map to tc.function?.name ?? "unnamed" and join) or
detect whether every tool call has a name and only use the joined names in that
case, otherwise show the count-based label; specifically modify the expression
using message.tool_calls (and the inline map/filter/join) to implement one of
these two behaviors so unnamed calls are not lost.

In `@ui/app/workspace/logs/views/logResponsesMessageView.tsx`:
- Around line 347-384: The current output rendering always stringifies
non-string message.output values, which breaks structured block outputs
(ResponsesMessageContentBlock[]); update the conditional in the message.output
branch to detect when message.output is an array of content blocks
(Array.isArray(message.output) and elements match the block shape) and render
those using the existing ContentBlockView (or the component used elsewhere for
block rendering) inside the CollapsibleBox (mapping each block to a
ContentBlockView with a stable key) before falling back to the JSON CodeEditor;
keep existing handling for string outputs (isJson/cleanJson) and for other
non-block objects to preserve current behavior.

---

Outside diff comments:
In `@helm-charts/bifrost/templates/deployment.yaml`:
- Around line 91-97: The StatefulSet template's conditional for the
BIFROST_ENCRYPTION_KEY env var must match the Deployment guard: replace the
current object-truthy check with an explicit check for
.Values.bifrost.encryptionKeySecret.name so the BIFROST_ENCRYPTION_KEY env var
is only rendered when a name is provided; update the conditional around the
BIFROST_ENCRYPTION_KEY env var in the stateful template to use the same guard
(.Values.bifrost.encryptionKeySecret.name) and ensure secretKeyRef.name and key
are only emitted when that value is present to avoid rendering an empty secret
name.

---

Nitpick comments:
In `@ui/app/workspace/governance/teams/page.tsx`:
- Around line 18-20: Replace the local search useState with a nuqs-backed query
state so the query is persisted and shareable: swap the const [search,
setSearch] = useState("") to use nuqs' query-state hook (e.g., useQueryState or
equivalent) keyed as "search" with default "" and keep setSearch to update that
query param; continue to feed debouncedSearch = useDebouncedValue(search, 300)
from the nuqs-backed search value so debouncing works the same; optionally apply
the same pattern for offset/ setOffset if you want pagination to be shareable.

In `@ui/app/workspace/logs/views/logChatMessageView.tsx`:
- Line 188: The mapped CollapsibleBox currently uses the array index as its
React key, causing unnecessary remounts; change the key to use the tool call's
stable id (toolCall.id) and only fall back to a deterministic fallback when id
is truly absent (e.g., `toolCall.id ?? \`toolcall-${index}\``). Update the key
prop on the CollapsibleBox created in the tool_calls mapping (the element with
title `Tool Call: ${toolCall.function?.name || \`#${index + 1}\`}` and onCopy
returning jsonContent) to use toolCall.id first to ensure stable, unique keys.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1119399c-b2e2-421f-9887-521c96b0c9e9

📥 Commits

Reviewing files that changed from the base of the PR and between 4fdd841 and 958d965.

📒 Files selected for processing (59)
  • .github/workflows/helm-release.yml
  • .github/workflows/scripts/schemasync/go.mod
  • core/changelog.md
  • core/schemas/useragents.go
  • core/version
  • docs/enterprise/setting-up-okta.mdx
  • examples/plugins/hello-world/go.mod
  • framework/changelog.md
  • framework/go.mod
  • framework/version
  • helm-charts/bifrost/Chart.yaml
  • helm-charts/bifrost/README.md
  • helm-charts/bifrost/templates/deployment.yaml
  • helm-charts/index.yaml
  • plugins/compat/changelog.md
  • plugins/compat/go.mod
  • plugins/compat/version
  • plugins/governance/changelog.md
  • plugins/governance/go.mod
  • plugins/governance/version
  • plugins/jsonparser/changelog.md
  • plugins/jsonparser/go.mod
  • plugins/jsonparser/version
  • plugins/logging/changelog.md
  • plugins/logging/go.mod
  • plugins/logging/operations.go
  • plugins/logging/version
  • plugins/maxim/changelog.md
  • plugins/maxim/go.mod
  • plugins/maxim/version
  • plugins/mocker/changelog.md
  • plugins/mocker/go.mod
  • plugins/mocker/version
  • plugins/otel/changelog.md
  • plugins/otel/go.mod
  • plugins/otel/version
  • plugins/prompts/changelog.md
  • plugins/prompts/go.mod
  • plugins/prompts/version
  • plugins/semanticcache/changelog.md
  • plugins/semanticcache/go.mod
  • plugins/semanticcache/version
  • plugins/telemetry/changelog.md
  • plugins/telemetry/go.mod
  • plugins/telemetry/version
  • tests/async/go.mod
  • transports/changelog.md
  • transports/go.mod
  • transports/version
  • ui/app/workspace/governance/teams/page.tsx
  • ui/app/workspace/logs/sheets/logDetailView.tsx
  • ui/app/workspace/logs/views/columns.tsx
  • ui/app/workspace/logs/views/logChatMessageView.tsx
  • ui/app/workspace/logs/views/logResponsesMessageView.tsx
  • ui/app/workspace/model-catalog/views/modelCatalogView.tsx
  • ui/app/workspace/virtual-keys/hooks/useVirtualKeyUsage.ts
  • ui/app/workspace/virtual-keys/views/virtualKeyDetailsSheet.tsx
  • ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
  • ui/components/ui/MultiBudgetLines.tsx
💤 Files with no reviewable changes (2)
  • docs/enterprise/setting-up-okta.mdx
  • plugins/logging/operations.go
✅ Files skipped from review due to trivial changes (45)
  • plugins/governance/version
  • plugins/jsonparser/changelog.md
  • framework/version
  • core/version
  • plugins/mocker/changelog.md
  • .github/workflows/helm-release.yml
  • plugins/maxim/changelog.md
  • plugins/logging/changelog.md
  • plugins/telemetry/changelog.md
  • helm-charts/bifrost/README.md
  • plugins/telemetry/version
  • plugins/prompts/version
  • plugins/mocker/version
  • plugins/logging/version
  • plugins/jsonparser/version
  • .github/workflows/scripts/schemasync/go.mod
  • plugins/otel/version
  • plugins/compat/version
  • examples/plugins/hello-world/go.mod
  • plugins/compat/changelog.md
  • plugins/jsonparser/go.mod
  • plugins/semanticcache/version
  • framework/go.mod
  • ui/app/workspace/virtual-keys/views/virtualKeySheet.tsx
  • transports/version
  • helm-charts/bifrost/Chart.yaml
  • plugins/governance/changelog.md
  • plugins/governance/go.mod
  • plugins/prompts/go.mod
  • plugins/compat/go.mod
  • helm-charts/index.yaml
  • ui/app/workspace/virtual-keys/views/virtualKeyDetailsSheet.tsx
  • core/schemas/useragents.go
  • plugins/logging/go.mod
  • plugins/semanticcache/go.mod
  • plugins/telemetry/go.mod
  • tests/async/go.mod
  • framework/changelog.md
  • plugins/maxim/go.mod
  • plugins/semanticcache/changelog.md
  • plugins/otel/changelog.md
  • plugins/maxim/version
  • plugins/mocker/go.mod
  • plugins/prompts/changelog.md
  • transports/go.mod
🚧 Files skipped from review as they are similar to previous changes (1)
  • ui/app/workspace/virtual-keys/hooks/useVirtualKeyUsage.ts

Comment thread transports/changelog.md Outdated
- **Anthropic Structured Outputs** — Added `response_format` and structured output support for Anthropic models across chat completions and Responses API, with order-preserving merge of additional model request fields (thanks [@emirhanmutlu-natuvion](https://github.com/emirhanmutlu-natuvion)!)
- **MCP Tool Annotations** — Preserve MCP tool annotations (`title`, `readOnly`, `destructive`, `idempotent`, `openWorld`) in bidirectional conversion so agents can reason about tool behavior
- **Anthropic Server Tools** — Expanded Anthropic chat schema and Responses converters to surface server-side tools (web search, code execution, computer use containers) end-to-end
- **OCR Request Support** — Added OCR request type with stream terminal detection, full body accumulation for passthrough streams, input logging with detail view, and per-request pricing support
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.

⚠️ Potential issue | 🟡 Minor

Use a hyphen in the compound modifier for readability.

“full body accumulation” reads cleaner as “full-body accumulation” in this context.

✍️ Suggested wording tweak
-- **OCR Request Support** — Added OCR request type with stream terminal detection, full body accumulation for passthrough streams, input logging with detail view, and per-request pricing support
+- **OCR Request Support** — Added OCR request type with stream terminal detection, full-body accumulation for passthrough streams, input logging with detail view, and per-request pricing support
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **OCR Request Support** — Added OCR request type with stream terminal detection, full body accumulation for passthrough streams, input logging with detail view, and per-request pricing support
- **OCR Request Support** — Added OCR request type with stream terminal detection, full-body accumulation for passthrough streams, input logging with detail view, and per-request pricing support
🧰 Tools
🪛 LanguageTool

[uncategorized] ~7-~7: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...st type with stream terminal detection, full body accumulation for passthrough streams, i...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@transports/changelog.md` at line 7, Update the changelog line describing OCR
Request Support to use a hyphenated compound modifier: replace "full body
accumulation" with "full-body accumulation" in the string that begins with
"**OCR Request Support** — Added OCR request type with stream terminal
detection, full body accumulation for passthrough streams, input logging with
detail view, and per-request pricing support" so the wording reads "...full-body
accumulation for passthrough streams..." for improved readability.

Comment thread ui/app/workspace/governance/teams/page.tsx
Comment thread ui/app/workspace/logs/sheets/logDetailView.tsx Outdated
Comment thread ui/app/workspace/logs/views/logResponsesMessageView.tsx Outdated
@akshaydeo akshaydeo force-pushed the 04-21-v1.5.0-prerelease4_cut branch from 44bb06e to 45cbed9 Compare April 20, 2026 23:21
coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 20, 2026
Copy link
Copy Markdown
Contributor Author

Merge activity

  • Apr 20, 11:35 PM UTC: A user started a stack merge that includes this pull request via Graphite.

@akshaydeo akshaydeo merged commit 3a313c3 into main Apr 20, 2026
10 of 17 checks passed
@akshaydeo akshaydeo deleted the 04-21-v1.5.0-prerelease4_cut branch April 20, 2026 23:35
dominictayloruk pushed a commit to dominictayloruk/bifrost that referenced this pull request Apr 21, 2026
* v1.5.0-prerelease4 cut

* docs: add docs for claude code vscode plugin

---------

Co-authored-by: Anuj Parihar <anujparihar@yahoo.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.

4 participants