feat: add clickable links for routing rule, selected key, virtual key, and prompt in log detail views - #4054
Conversation
|
Warning Review limit reached
More reviews will be available in 10 minutes and 35 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthrough
ChangesLog Detail View Navigation Refactor
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 3❌ Failed checks (3 warnings)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
bf03ec6 to
6bc8c5f
Compare
a9dd86a to
32760c5
Compare
6bc8c5f to
75b9000
Compare
32760c5 to
0bcaf0c
Compare
75b9000 to
03716d7
Compare
0bcaf0c to
b8fd252
Compare
b5e111e to
5ac2b1e
Compare
Confidence Score: 5/5Safe to merge — changes are purely additive UI links with no mutations, and all target routes and search param names match existing page implementations. Every new link was verified to use a search param name that the destination page already reads (e.g. No files require special attention. Important Files Changed
Reviews (3): Last reviewed commit: "chore: Make the filterable entity in log..." | Re-trigger Greptile |
3905d3b to
d99a1d8
Compare
5ac2b1e to
45487db
Compare
45487db to
f239b91
Compare
d99a1d8 to
c5c59b3
Compare
c5c59b3 to
ffefed9
Compare
f239b91 to
748d230
Compare
Merge activity
|
…, and prompt in log detail views (#4054) ## Summary Several metadata fields in the log detail views were plain text with no way to navigate to related records. This PR converts those static values into clickable links that filter or navigate to the relevant views, making it faster to investigate related logs without manually applying filters. ## Changes - Routing rule name in the log detail header and details section now links to `/workspace/logs` filtered by that routing rule ID - Selected Key in the log detail header and details section now links to `/workspace/logs` filtered by that key ID - Virtual Key in both the LLM log detail view and MCP log detail sheet now links to `/workspace/governance/virtual-keys` with the key pre-selected - Selected Prompt now links to `/workspace/prompt-repo` - Parent Request ID and User links updated to use consistent `text-blue-600` styling instead of `text-primary` - MCP log detail sheet: Tool Name links to MCP logs filtered by tool name, Server label links to MCP logs filtered by server label, and LLM Request ID links directly to the corresponding log entry - Minor formatting fixes to indentation and empty catch blocks for consistency ## Type of change - [ ] Bug fix - [x] Feature - [ ] Refactor - [ ] Documentation - [ ] Chore/CI ## Affected areas - [ ] Core (Go) - [ ] Transports (HTTP) - [ ] Providers/Integrations - [ ] Plugins - [x] UI (React) - [ ] Docs ## How to test 1. Open a log entry in the log detail sheet that has a routing rule, selected key, virtual key, or selected prompt associated with it. 2. Verify each field renders as a clickable link styled in blue. 3. Click the routing rule link — confirm the logs view opens filtered to that routing rule. 4. Click the selected key link — confirm the logs view opens filtered to that key. 5. Click the virtual key link — confirm navigation to the virtual keys governance page with the key selected. 6. Open an MCP log detail sheet with a tool name, server label, virtual key, and LLM request ID. 7. Verify each field is a clickable link navigating to the appropriate filtered view. ```sh cd ui pnpm i || npm i pnpm build || npm run build ``` ## Screenshots/Recordings Before: Routing rule, key, and other metadata fields displayed as plain text. After: All metadata fields are styled blue links that navigate to filtered or related views on click. ## Breaking changes - [ ] Yes - [x] No ## Related issues ## Security considerations All links use internal TanStack Router navigation with typed search parameters. No external URLs, secrets, or PII are exposed beyond what was already visible in the detail view. ## 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
## ✨ Features - **OpenAI Compaction** — Added OpenAI conversation compaction support across core, framework, logging, and the API surface (#4053) - **Multi-Customer & Org Hierarchy** — Logs and usage tracking now support multiple customers, teams, and business units, including business unit CRUD, team assignment, and governance endpoints in the OpenAPI spec (#4066, #4041, #4082) - **Provider-Level Governance** — Budgets & limits are now scope-aware and can be applied at the virtual-key top level and per provider, wired from the model configs table, with UI filters for scope and providers (#3938, #3937, #3939, #3981, #3962) - **Customer Budgets** — Customers support multiple budgets and `calendar_aligned` budget windows (#3998, #3997) - **Virtual Key Attribution & Controls** — Added a `created_by` user attribution column and a `blacklisted_models` column for virtual key provider configs (#3672, #3653) - **Request Header Capture** — OTel and Maxim observability plugins capture `request_headers` by pattern, with wildcard support (e.g. `x-custom-*`); logging gained the same wildcard header capture (#4012, #3958) - **OTel Content Controls & Collectors** — New `disable_content_logging` option drops message/tool content from exported spans, plus support for multiple OTel collectors (#4064, #3894) - **xAI x_search** — Added xAI `x_search` tool support (#3976) - **URL Validation** — Added fetch URL validation with private-network configuration and link-local blocking (#3947, #3991) - **File Scheme Pricing URLs** — Pricing source URLs now accept the `file://` scheme for air-gapped and self-hosted deployments (#4045) - **Paginated Virtual Keys** — Virtual key fetching is paginated to handle deployments with very large numbers of keys (#3957) - **Client IP Resolution** — Resolve client IP from `X-Forwarded-For`/`X-Real-IP` headers - **SCIM Provisioning** — Added `attributeType`/`attributeValue` SCIM provisioning fields - **Helm/Config Schema** — Added `roles` RBAC governance config and `per_user_oauth` MCP auth to the Helm chart and config schema (#4004, #4009) - **Log Navigation UI** — Added a "View logs" menu item to customer, team, and virtual key tables, clickable links in log detail views, a customer detail sheet, and a reusable `BudgetDisplay` component (#4073, #4054, #4026, #4055) - **Faster First Paint** — Added an inline loading shell to `#root` before React mounts (#4063) - **Materialized View Alias** — Added an `alias` column to the materialized view with filter support (#4078) ## 🐞 Fixed - **Fetch URL IP Checks** — Hardened fetch URL IP checks against SSRF (#4092) - **Mantle Model Matching** — Broadened Mantle model matching to all `gpt` variants (#4091) - **Empty Thinking Blocks** — Strip thinking blocks when the signature is empty (#4079) - **OpenAI Stream Usage** — Removed usage from the `responses.created` event in the OpenAI stream (#4080) - **Prompt Cache Key** — Set the prompt cache key from the Anthropic integration (#4086) - **Upstream Failure Status** — Map upstream connection failures to 502 instead of 400 (#3929) (thanks [@chris-colinsky](https://github.com/chris-colinsky)!) - **Gemini Schema Constraints** — Accept numeric schema integer constraints for Gemini (#3994) (thanks [@yanhao98](https://github.com/yanhao98)!) - **Files Provider Param** — Accept the `?provider=` query param on `GET /v1/files` (#3971) (thanks [@alexef](https://github.com/alexef)!) - **Optional Batch Model** — Made the `model` field optional on `POST /v1/batches` (#3973) (thanks [@alexef](https://github.com/alexef)!) - **Helm Azure Config** — Added missing `azure_key_config` fields to the Helm schema (#3996) (thanks [@axelray-dev](https://github.com/axelray-dev)!) - **Text Completion Chunk Model** — Added the missing `Model` field to `TextCompletionChunkResponse` (#3970) (thanks [@kuishou68](https://github.com/kuishou68)!) - **MCP Inline stdio Env** — MCP stdio server configs accept inline environment variable assignments (#3861) (thanks [@Shushmitaaaa](https://github.com/Shushmitaaaa)!) - **Orphaned Tool Results** — Orphaned tool results in the OpenAI to Anthropic conversion flow are no longer rejected by the Anthropic API (#3919) - **Node Usage Reconciliation** — Added a monotonic `inc_number` log cursor so node usage reconciliation does not skip late async log writes (#3664) - **Bedrock Output Assessments** — Corrected the type of `outputAssessments` in Bedrock responses (#4028) - **Model Pool Pricing Reloads** — Preserve non-pricing model pool entries across pricing reloads (#3999) - **Ghost Node Reconciliation** — Replicate the VK hierarchy flow for ghost node reconciliation (#4088) - **VK Double Usage Counting** — Fixed double usage counting when creating a virtual key (#4070) - **Model Config Lifecycle** — Cascade deletes for model configs and removal of stale in-memory model configs (#4051, #4043) - **FTS Index Cap** — Reduced the FTS index `left()` cap from 800k to 250k chars to stay within the tsvector limit (#4057) - **Sync Worker Drift** — Reduced the sync worker ticker period to 5m to prevent threshold drift (#4023) - **Passthrough** — Fixed passthrough budgets, gated passthrough models per VK, model extraction for Azure passthrough, and restricted fallbacks/provider selection to the VK boundary (#3941, #3988, #3983, #3924) - **Provider Response Headers** — Strip provider response headers and add a content-type filter (#3955, #4024) - **Stream Handling** — Drain non-SSE stream readers and retry stale connections (#3956, #3967) - **Azure Claude** — Strip Azure diagnostic property for Claude models (#3925) - **Compat max_tokens** — Preserve chat `max_tokens` during param filtering (#3992) - **Raw Request Flag** — Removed the raw request flag from providers that don't support it (#4058) - **UI Fixes** — Standardized page container layout, virtual key model configs UI, and dashboard chart tooltips (#4046, #4052, #4044) ## 🔧 Maintenance - **Dependency Upgrades** — Bumped transitive `golang.org/x` dependencies (crypto, net, sys, text) for Docker Scout CVE remediation and `recharts` to 3.8.1; cascaded version bumps across all modules (#3900, #4003)
…, and prompt in log detail views (maximhq#4054) ## Summary Several metadata fields in the log detail views were plain text with no way to navigate to related records. This PR converts those static values into clickable links that filter or navigate to the relevant views, making it faster to investigate related logs without manually applying filters. ## Changes - Routing rule name in the log detail header and details section now links to `/workspace/logs` filtered by that routing rule ID - Selected Key in the log detail header and details section now links to `/workspace/logs` filtered by that key ID - Virtual Key in both the LLM log detail view and MCP log detail sheet now links to `/workspace/governance/virtual-keys` with the key pre-selected - Selected Prompt now links to `/workspace/prompt-repo` - Parent Request ID and User links updated to use consistent `text-blue-600` styling instead of `text-primary` - MCP log detail sheet: Tool Name links to MCP logs filtered by tool name, Server label links to MCP logs filtered by server label, and LLM Request ID links directly to the corresponding log entry - Minor formatting fixes to indentation and empty catch blocks for consistency ## Type of change - [ ] Bug fix - [x] Feature - [ ] Refactor - [ ] Documentation - [ ] Chore/CI ## Affected areas - [ ] Core (Go) - [ ] Transports (HTTP) - [ ] Providers/Integrations - [ ] Plugins - [x] UI (React) - [ ] Docs ## How to test 1. Open a log entry in the log detail sheet that has a routing rule, selected key, virtual key, or selected prompt associated with it. 2. Verify each field renders as a clickable link styled in blue. 3. Click the routing rule link — confirm the logs view opens filtered to that routing rule. 4. Click the selected key link — confirm the logs view opens filtered to that key. 5. Click the virtual key link — confirm navigation to the virtual keys governance page with the key selected. 6. Open an MCP log detail sheet with a tool name, server label, virtual key, and LLM request ID. 7. Verify each field is a clickable link navigating to the appropriate filtered view. ```sh cd ui pnpm i || npm i pnpm build || npm run build ``` ## Screenshots/Recordings Before: Routing rule, key, and other metadata fields displayed as plain text. After: All metadata fields are styled blue links that navigate to filtered or related views on click. ## Breaking changes - [ ] Yes - [x] No ## Related issues ## Security considerations All links use internal TanStack Router navigation with typed search parameters. No external URLs, secrets, or PII are exposed beyond what was already visible in the detail view. ## 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
## ✨ Features - **OpenAI Compaction** — Added OpenAI conversation compaction support across core, framework, logging, and the API surface (maximhq#4053) - **Multi-Customer & Org Hierarchy** — Logs and usage tracking now support multiple customers, teams, and business units, including business unit CRUD, team assignment, and governance endpoints in the OpenAPI spec (maximhq#4066, maximhq#4041, maximhq#4082) - **Provider-Level Governance** — Budgets & limits are now scope-aware and can be applied at the virtual-key top level and per provider, wired from the model configs table, with UI filters for scope and providers (maximhq#3938, maximhq#3937, maximhq#3939, maximhq#3981, maximhq#3962) - **Customer Budgets** — Customers support multiple budgets and `calendar_aligned` budget windows (maximhq#3998, maximhq#3997) - **Virtual Key Attribution & Controls** — Added a `created_by` user attribution column and a `blacklisted_models` column for virtual key provider configs (maximhq#3672, maximhq#3653) - **Request Header Capture** — OTel and Maxim observability plugins capture `request_headers` by pattern, with wildcard support (e.g. `x-custom-*`); logging gained the same wildcard header capture (maximhq#4012, maximhq#3958) - **OTel Content Controls & Collectors** — New `disable_content_logging` option drops message/tool content from exported spans, plus support for multiple OTel collectors (maximhq#4064, maximhq#3894) - **xAI x_search** — Added xAI `x_search` tool support (maximhq#3976) - **URL Validation** — Added fetch URL validation with private-network configuration and link-local blocking (maximhq#3947, maximhq#3991) - **File Scheme Pricing URLs** — Pricing source URLs now accept the `file://` scheme for air-gapped and self-hosted deployments (maximhq#4045) - **Paginated Virtual Keys** — Virtual key fetching is paginated to handle deployments with very large numbers of keys (maximhq#3957) - **Client IP Resolution** — Resolve client IP from `X-Forwarded-For`/`X-Real-IP` headers - **SCIM Provisioning** — Added `attributeType`/`attributeValue` SCIM provisioning fields - **Helm/Config Schema** — Added `roles` RBAC governance config and `per_user_oauth` MCP auth to the Helm chart and config schema (maximhq#4004, maximhq#4009) - **Log Navigation UI** — Added a "View logs" menu item to customer, team, and virtual key tables, clickable links in log detail views, a customer detail sheet, and a reusable `BudgetDisplay` component (maximhq#4073, maximhq#4054, maximhq#4026, maximhq#4055) - **Faster First Paint** — Added an inline loading shell to `#root` before React mounts (maximhq#4063) - **Materialized View Alias** — Added an `alias` column to the materialized view with filter support (maximhq#4078) ## 🐞 Fixed - **Fetch URL IP Checks** — Hardened fetch URL IP checks against SSRF (maximhq#4092) - **Mantle Model Matching** — Broadened Mantle model matching to all `gpt` variants (maximhq#4091) - **Empty Thinking Blocks** — Strip thinking blocks when the signature is empty (maximhq#4079) - **OpenAI Stream Usage** — Removed usage from the `responses.created` event in the OpenAI stream (maximhq#4080) - **Prompt Cache Key** — Set the prompt cache key from the Anthropic integration (maximhq#4086) - **Upstream Failure Status** — Map upstream connection failures to 502 instead of 400 (maximhq#3929) (thanks [@chris-colinsky](https://github.com/chris-colinsky)!) - **Gemini Schema Constraints** — Accept numeric schema integer constraints for Gemini (maximhq#3994) (thanks [@yanhao98](https://github.com/yanhao98)!) - **Files Provider Param** — Accept the `?provider=` query param on `GET /v1/files` (maximhq#3971) (thanks [@alexef](https://github.com/alexef)!) - **Optional Batch Model** — Made the `model` field optional on `POST /v1/batches` (maximhq#3973) (thanks [@alexef](https://github.com/alexef)!) - **Helm Azure Config** — Added missing `azure_key_config` fields to the Helm schema (maximhq#3996) (thanks [@axelray-dev](https://github.com/axelray-dev)!) - **Text Completion Chunk Model** — Added the missing `Model` field to `TextCompletionChunkResponse` (maximhq#3970) (thanks [@kuishou68](https://github.com/kuishou68)!) - **MCP Inline stdio Env** — MCP stdio server configs accept inline environment variable assignments (maximhq#3861) (thanks [@Shushmitaaaa](https://github.com/Shushmitaaaa)!) - **Orphaned Tool Results** — Orphaned tool results in the OpenAI to Anthropic conversion flow are no longer rejected by the Anthropic API (maximhq#3919) - **Node Usage Reconciliation** — Added a monotonic `inc_number` log cursor so node usage reconciliation does not skip late async log writes (maximhq#3664) - **Bedrock Output Assessments** — Corrected the type of `outputAssessments` in Bedrock responses (maximhq#4028) - **Model Pool Pricing Reloads** — Preserve non-pricing model pool entries across pricing reloads (maximhq#3999) - **Ghost Node Reconciliation** — Replicate the VK hierarchy flow for ghost node reconciliation (maximhq#4088) - **VK Double Usage Counting** — Fixed double usage counting when creating a virtual key (maximhq#4070) - **Model Config Lifecycle** — Cascade deletes for model configs and removal of stale in-memory model configs (maximhq#4051, maximhq#4043) - **FTS Index Cap** — Reduced the FTS index `left()` cap from 800k to 250k chars to stay within the tsvector limit (maximhq#4057) - **Sync Worker Drift** — Reduced the sync worker ticker period to 5m to prevent threshold drift (maximhq#4023) - **Passthrough** — Fixed passthrough budgets, gated passthrough models per VK, model extraction for Azure passthrough, and restricted fallbacks/provider selection to the VK boundary (maximhq#3941, maximhq#3988, maximhq#3983, maximhq#3924) - **Provider Response Headers** — Strip provider response headers and add a content-type filter (maximhq#3955, maximhq#4024) - **Stream Handling** — Drain non-SSE stream readers and retry stale connections (maximhq#3956, maximhq#3967) - **Azure Claude** — Strip Azure diagnostic property for Claude models (maximhq#3925) - **Compat max_tokens** — Preserve chat `max_tokens` during param filtering (maximhq#3992) - **Raw Request Flag** — Removed the raw request flag from providers that don't support it (maximhq#4058) - **UI Fixes** — Standardized page container layout, virtual key model configs UI, and dashboard chart tooltips (maximhq#4046, maximhq#4052, maximhq#4044) ## 🔧 Maintenance - **Dependency Upgrades** — Bumped transitive `golang.org/x` dependencies (crypto, net, sys, text) for Docker Scout CVE remediation and `recharts` to 3.8.1; cascaded version bumps across all modules (maximhq#3900, maximhq#4003)
…, and prompt in log detail views (maximhq#4054) ## Summary Several metadata fields in the log detail views were plain text with no way to navigate to related records. This PR converts those static values into clickable links that filter or navigate to the relevant views, making it faster to investigate related logs without manually applying filters. ## Changes - Routing rule name in the log detail header and details section now links to `/workspace/logs` filtered by that routing rule ID - Selected Key in the log detail header and details section now links to `/workspace/logs` filtered by that key ID - Virtual Key in both the LLM log detail view and MCP log detail sheet now links to `/workspace/governance/virtual-keys` with the key pre-selected - Selected Prompt now links to `/workspace/prompt-repo` - Parent Request ID and User links updated to use consistent `text-blue-600` styling instead of `text-primary` - MCP log detail sheet: Tool Name links to MCP logs filtered by tool name, Server label links to MCP logs filtered by server label, and LLM Request ID links directly to the corresponding log entry - Minor formatting fixes to indentation and empty catch blocks for consistency ## Type of change - [ ] Bug fix - [x] Feature - [ ] Refactor - [ ] Documentation - [ ] Chore/CI ## Affected areas - [ ] Core (Go) - [ ] Transports (HTTP) - [ ] Providers/Integrations - [ ] Plugins - [x] UI (React) - [ ] Docs ## How to test 1. Open a log entry in the log detail sheet that has a routing rule, selected key, virtual key, or selected prompt associated with it. 2. Verify each field renders as a clickable link styled in blue. 3. Click the routing rule link — confirm the logs view opens filtered to that routing rule. 4. Click the selected key link — confirm the logs view opens filtered to that key. 5. Click the virtual key link — confirm navigation to the virtual keys governance page with the key selected. 6. Open an MCP log detail sheet with a tool name, server label, virtual key, and LLM request ID. 7. Verify each field is a clickable link navigating to the appropriate filtered view. ```sh cd ui pnpm i || npm i pnpm build || npm run build ``` ## Screenshots/Recordings Before: Routing rule, key, and other metadata fields displayed as plain text. After: All metadata fields are styled blue links that navigate to filtered or related views on click. ## Breaking changes - [ ] Yes - [x] No ## Related issues ## Security considerations All links use internal TanStack Router navigation with typed search parameters. No external URLs, secrets, or PII are exposed beyond what was already visible in the detail view. ## 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
## ✨ Features - **OpenAI Compaction** — Added OpenAI conversation compaction support across core, framework, logging, and the API surface (maximhq#4053) - **Multi-Customer & Org Hierarchy** — Logs and usage tracking now support multiple customers, teams, and business units, including business unit CRUD, team assignment, and governance endpoints in the OpenAPI spec (maximhq#4066, maximhq#4041, maximhq#4082) - **Provider-Level Governance** — Budgets & limits are now scope-aware and can be applied at the virtual-key top level and per provider, wired from the model configs table, with UI filters for scope and providers (maximhq#3938, maximhq#3937, maximhq#3939, maximhq#3981, maximhq#3962) - **Customer Budgets** — Customers support multiple budgets and `calendar_aligned` budget windows (maximhq#3998, maximhq#3997) - **Virtual Key Attribution & Controls** — Added a `created_by` user attribution column and a `blacklisted_models` column for virtual key provider configs (maximhq#3672, maximhq#3653) - **Request Header Capture** — OTel and Maxim observability plugins capture `request_headers` by pattern, with wildcard support (e.g. `x-custom-*`); logging gained the same wildcard header capture (maximhq#4012, maximhq#3958) - **OTel Content Controls & Collectors** — New `disable_content_logging` option drops message/tool content from exported spans, plus support for multiple OTel collectors (maximhq#4064, maximhq#3894) - **xAI x_search** — Added xAI `x_search` tool support (maximhq#3976) - **URL Validation** — Added fetch URL validation with private-network configuration and link-local blocking (maximhq#3947, maximhq#3991) - **File Scheme Pricing URLs** — Pricing source URLs now accept the `file://` scheme for air-gapped and self-hosted deployments (maximhq#4045) - **Paginated Virtual Keys** — Virtual key fetching is paginated to handle deployments with very large numbers of keys (maximhq#3957) - **Client IP Resolution** — Resolve client IP from `X-Forwarded-For`/`X-Real-IP` headers - **SCIM Provisioning** — Added `attributeType`/`attributeValue` SCIM provisioning fields - **Helm/Config Schema** — Added `roles` RBAC governance config and `per_user_oauth` MCP auth to the Helm chart and config schema (maximhq#4004, maximhq#4009) - **Log Navigation UI** — Added a "View logs" menu item to customer, team, and virtual key tables, clickable links in log detail views, a customer detail sheet, and a reusable `BudgetDisplay` component (maximhq#4073, maximhq#4054, maximhq#4026, maximhq#4055) - **Faster First Paint** — Added an inline loading shell to `#root` before React mounts (maximhq#4063) - **Materialized View Alias** — Added an `alias` column to the materialized view with filter support (maximhq#4078) ## 🐞 Fixed - **Fetch URL IP Checks** — Hardened fetch URL IP checks against SSRF (maximhq#4092) - **Mantle Model Matching** — Broadened Mantle model matching to all `gpt` variants (maximhq#4091) - **Empty Thinking Blocks** — Strip thinking blocks when the signature is empty (maximhq#4079) - **OpenAI Stream Usage** — Removed usage from the `responses.created` event in the OpenAI stream (maximhq#4080) - **Prompt Cache Key** — Set the prompt cache key from the Anthropic integration (maximhq#4086) - **Upstream Failure Status** — Map upstream connection failures to 502 instead of 400 (maximhq#3929) (thanks [@chris-colinsky](https://github.com/chris-colinsky)!) - **Gemini Schema Constraints** — Accept numeric schema integer constraints for Gemini (maximhq#3994) (thanks [@yanhao98](https://github.com/yanhao98)!) - **Files Provider Param** — Accept the `?provider=` query param on `GET /v1/files` (maximhq#3971) (thanks [@alexef](https://github.com/alexef)!) - **Optional Batch Model** — Made the `model` field optional on `POST /v1/batches` (maximhq#3973) (thanks [@alexef](https://github.com/alexef)!) - **Helm Azure Config** — Added missing `azure_key_config` fields to the Helm schema (maximhq#3996) (thanks [@axelray-dev](https://github.com/axelray-dev)!) - **Text Completion Chunk Model** — Added the missing `Model` field to `TextCompletionChunkResponse` (maximhq#3970) (thanks [@kuishou68](https://github.com/kuishou68)!) - **MCP Inline stdio Env** — MCP stdio server configs accept inline environment variable assignments (maximhq#3861) (thanks [@Shushmitaaaa](https://github.com/Shushmitaaaa)!) - **Orphaned Tool Results** — Orphaned tool results in the OpenAI to Anthropic conversion flow are no longer rejected by the Anthropic API (maximhq#3919) - **Node Usage Reconciliation** — Added a monotonic `inc_number` log cursor so node usage reconciliation does not skip late async log writes (maximhq#3664) - **Bedrock Output Assessments** — Corrected the type of `outputAssessments` in Bedrock responses (maximhq#4028) - **Model Pool Pricing Reloads** — Preserve non-pricing model pool entries across pricing reloads (maximhq#3999) - **Ghost Node Reconciliation** — Replicate the VK hierarchy flow for ghost node reconciliation (maximhq#4088) - **VK Double Usage Counting** — Fixed double usage counting when creating a virtual key (maximhq#4070) - **Model Config Lifecycle** — Cascade deletes for model configs and removal of stale in-memory model configs (maximhq#4051, maximhq#4043) - **FTS Index Cap** — Reduced the FTS index `left()` cap from 800k to 250k chars to stay within the tsvector limit (maximhq#4057) - **Sync Worker Drift** — Reduced the sync worker ticker period to 5m to prevent threshold drift (maximhq#4023) - **Passthrough** — Fixed passthrough budgets, gated passthrough models per VK, model extraction for Azure passthrough, and restricted fallbacks/provider selection to the VK boundary (maximhq#3941, maximhq#3988, maximhq#3983, maximhq#3924) - **Provider Response Headers** — Strip provider response headers and add a content-type filter (maximhq#3955, maximhq#4024) - **Stream Handling** — Drain non-SSE stream readers and retry stale connections (maximhq#3956, maximhq#3967) - **Azure Claude** — Strip Azure diagnostic property for Claude models (maximhq#3925) - **Compat max_tokens** — Preserve chat `max_tokens` during param filtering (maximhq#3992) - **Raw Request Flag** — Removed the raw request flag from providers that don't support it (maximhq#4058) - **UI Fixes** — Standardized page container layout, virtual key model configs UI, and dashboard chart tooltips (maximhq#4046, maximhq#4052, maximhq#4044) ## 🔧 Maintenance - **Dependency Upgrades** — Bumped transitive `golang.org/x` dependencies (crypto, net, sys, text) for Docker Scout CVE remediation and `recharts` to 3.8.1; cascaded version bumps across all modules (maximhq#3900, maximhq#4003)

Summary
Several metadata fields in the log detail views were plain text with no way to navigate to related records. This PR converts those static values into clickable links that filter or navigate to the relevant views, making it faster to investigate related logs without manually applying filters.
Changes
/workspace/logsfiltered by that routing rule ID/workspace/logsfiltered by that key ID/workspace/governance/virtual-keyswith the key pre-selected/workspace/prompt-repotext-blue-600styling instead oftext-primaryType of change
Affected areas
How to test
Screenshots/Recordings
Before: Routing rule, key, and other metadata fields displayed as plain text.
After: All metadata fields are styled blue links that navigate to filtered or related views on click.
Breaking changes
Related issues
Security considerations
All links use internal TanStack Router navigation with typed search parameters. No external URLs, secrets, or PII are exposed beyond what was already visible in the detail view.
Checklist
docs/contributing/README.mdand followed the guidelines