Open
Conversation
* feat(sdks-go): add sigil probe for grpc/http path checks Add a new sdks/go/cmd/sigil-probe CLI that exercises Sigil connectivity with basic auth.\n\nThe probe now runs grpc push, http push, and optional http read checks in one run, then renders a result table with per-step status and errors.\n\nThis makes it easy to distinguish write-path success from read-scope failures when validating dev clusters. * fix(sdks-go): only verify http read for http push id Remove the http_get(grpc_id) probe row since Sigil has no gRPC read API.\n\nDefault read verification now checks only the HTTP-pushed generation id via the HTTP query endpoint, which keeps the table aligned with actual API capabilities. * fix(sdks-go): apply bugbot probe robustness fixes Validate timeout inputs, use a single run-scoped timeout context across probe steps, and derive HTTP base URL scheme from endpoint scheme when provided.\n\nAdd regression tests for timeout validation and endpoint scheme resolution. * fix(plugin): resolve storybook lint and datasource test typings Fix duplicate story imports and add explicit React imports for JSX scope rules.\n\nUpdate mocked ConversationsDataSource typing and jest mock signatures in page tests to align with optional listConversations and strict function parameter typing.\n\nAdjust test rating summary fixtures to include required good_count/bad_count fields. * fix: stabilize sigil-probe CI and honor SDK insecure override Fix plugin CI regressions by updating ConversationsListPage tests for memory-router URL state, keeping Request polyfill compatible with react-router Request usage, and applying prettier formatting expected by format checks. Address the Bugbot SDK report by allowing GenerationExportConfig.Insecure to override both true/false values during merge and by honoring explicit endpoint schemes in the HTTP exporter. Add regression tests for insecure merge behavior and HTTP endpoint scheme handling. * fix: resolve remaining sigil-probe CI lint and typecheck issues Address follow-up CI failures by removing an unused test variable in ConversationsListPage tests and fixing sigil-probe golangci-lint findings. The probe now checks write errors when printing output and uses staticcheck-preferred TrimSuffix calls.
Add ExportAuthModeBasic for environments that authenticate via HTTP Basic Auth (e.g. Grafana Cloud). When BasicUser is empty the TenantID is used as the username. Explicit Authorization / tenant headers still take precedence. Includes regression tests for basic-mode happy path, explicit user override, explicit-header-wins, and invalid-config rejection. Made-with: Cursor
This reverts commit d85042d.
* remove span filling for now * improved trace/span UX * style(ConversationDetailPage): enhance layout and button styling * fix layout * lint and type fixes * refactor(ConversationsListPage): simplify search parameter updates by removing replace option * refactor(ConversationsListPage.test): enhance request mock and streamline renderPage function for improved test clarity * fix(ConversationDetailPage): update query parameter from 'expandTraceID' to 'trace' for consistency in URL handling --------- Co-authored-by: Mat Ryer <mat@hey.com>
| datasource | package | from | to | | ---------- | ----------------------- | ------- | ------- | | go | google.golang.org/genai | v1.47.0 | v1.48.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | -------------------------------------- | ------ | ------ | | nuget | Google.Protobuf | 3.33.5 | 3.34.0 | | maven | com.google.protobuf:protoc | 4.33.5 | 4.34.0 | | maven | com.google.protobuf:protobuf-java-util | 4.33.5 | 4.34.0 | | maven | com.google.protobuf:protobuf-java | 4.33.5 | 4.34.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ---------------------- | ------ | ------ | | maven | com.openai:openai-java | 4.22.0 | 4.23.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
… (#172) | datasource | package | from | to | | ---------- | ----------------------------- | ------ | ------ | | maven | com.google.genai:google-genai | 1.40.0 | 1.41.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ----------- | ----- | ----- | | npm | @google/adk | 0.3.0 | 0.4.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
* feat: add conversations list and detail pages
- Introduced new routes for Conversations (old) and Conversation detail.
- Created ConversationsListPage and ConversationDetailPage components.
- Updated routing in App component to accommodate new pages.
- Added constants for new routes and page titles.
- Implemented data fetching logic for conversation details and list.
- Added stories for both new pages to facilitate testing and documentation.
* refactor(sigil): remove dead runtime helper wrappers (#164)
Drop unreachable serverModule wrapper methods and orphaned block-store placeholder helper left behind by runtime role split.
Retarget tests to cover reachable package-level builders and remove tests for dead-only code.
* fix(deps): repair broken pnpm lockfile graph (#165)
Regenerate pnpm-lock.yaml with --fix-lockfile to restore package/snapshot consistency for @langchain/langgraph entries.
This resolves the install crash: Cannot use in operator to search for directory in undefined during mise run deps and pnpm install.
* style(ConversationsListPage): enhance title styling and conditional rendering
- Added a title container with padding for better layout.
- Updated the rendering logic to conditionally display the conversation list based on error state or available conversations.
* feat: implement conversation listing functionality
- Added `listConversations` method to the `ConversationsDataSource` for fetching a list of conversations.
- Defined new types `ConversationListItem` and `ConversationListResponse` to structure the conversation data.
- Updated `ConversationsListPage` to utilize the new `listConversations` method, simplifying the loading logic and removing unused state variables.
- Enhanced the story for `ConversationsListPage` to include mock data for the new listing feature.
* feat(ConversationsListPage): enhance conversation listing with activity buckets
- Removed the `truncateId` function and updated the conversation ID display for better readability.
- Renamed the "Gen" column to "LLM calls" for clarity.
- Introduced activity buckets to categorize conversations based on generation counts, improving data visualization.
- Added new styles for chart components to enhance the user interface and interaction experience.
* feat(ConversationsListPage): add time-based bucket functionality for conversation analysis
- Introduced new types for chart view modes and time bucket units to enhance data categorization.
- Implemented functions to build time buckets based on conversation timestamps, improving data visualization.
- Updated the state management to include a view mode for selecting between LLM calls and time-based views.
- Enhanced styles for chart components to improve user interface and interaction experience.
* feat(ConversationsListPage): integrate URL search parameters for conversation filtering
- Added functionality to manage selected conversation buckets using URL query parameters, enhancing user experience.
- Updated state management to handle selected bucket keys and synchronize with URL changes.
- Improved loading and error handling logic for better user feedback during data fetching.
- Enhanced the rendering logic to conditionally display conversation details based on selected filters.
* feat(ConversationsListPage): update URL parameter handling for bucket and view modes
- Refactored URL query parameter management to use 'bucket' instead of 'selection' for selected conversation buckets.
- Enhanced view mode handling by introducing a new 'view' parameter, allowing persistence of chart view selection.
- Updated tests to reflect changes in URL parameter naming and behavior, ensuring accurate functionality.
* refactor(ConversationDetailPage): simplify component structure and remove unused logic
- Streamlined the ConversationDetailPage component by removing unnecessary imports and state management.
- Updated the dataSource type to 'unknown' for better flexibility.
- Simplified the component to render a placeholder instead of detailed conversation information.
- Improved code readability and maintainability by reducing complexity.
* feat: show changes
* feat(ConversationsListPage): enhance time bucket functionality and LLM call categorization
- Updated TimeBucketUnit to include 'day' and introduced TimeBucketSpec for better time bucket management.
- Implemented functions to dynamically determine LLM call bucket steps and build activity buckets based on conversation generation counts.
- Refactored startOfBucketUTC to accept TimeBucketSpec, improving flexibility in time-based calculations.
- Enhanced the overall logic for categorizing conversations, improving data visualization and analysis capabilities.
* feat(ConversationsListPage): implement dynamic time range handling and improve state management
- Introduced default time range functionality and enhanced time range parsing from URL query parameters.
- Refactored state management to synchronize time range with URL changes, improving user experience.
- Added utility functions for time parameter parsing and trend value formatting, enhancing data presentation.
- Updated time range picker to utilize new state management logic for better interaction.
* style(ConversationsListPage): improve trend label formatting and update chart styles
- Modified trend label formatting to display percentage changes more clearly.
- Enhanced chart styles by removing borders and adjusting padding for better visual consistency.
- Updated chart bar styles to improve layout and interaction, including changes to height and background properties.
* style(ConversationsListPage): enhance error alert styling and clean up error handling
- Updated the error alert component to use a custom style for improved visual consistency.
- Removed unnecessary state resets on error, streamlining error handling logic.
- Cleaned up the rendering of the error message for better readability.
* docs: add semantic conventions reference and deduplicate attribute tables (#166)
* fix(sdks-js): avoid deprecated langgraph-sdk resolution (#167)
Pin @langchain/langgraph to ^1.2.0 so dependency resolution uses @langchain/langgraph-sdk@1.6.5 instead of deprecated 2.0.0.
This keeps lockfile installs stable and removes the deprecated SDK path introduced by the lockfile repair.
* feat(compose): passthrough eval worker and judge provider env vars (#173)
The sigil service in docker-compose had no SIGIL_EVAL_* environment
variables, so .env settings for the eval worker and judge providers
were silently ignored. Add all eval worker config and judge provider
credential vars using ${VAR:-default} substitution, and document them
in .env.example.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(ConversationDetailPage): add conversation detail page and tests
- Implemented the ConversationDetailPage component to display conversation details, including loading states and error handling.
- Added unit tests for the ConversationDetailPage to ensure proper rendering and functionality.
- Introduced a new command in check.md to streamline running format, lint, and test commands in one go.
* feat(ConversationDetailPage): enhance conversation detail functionality and tests
- Added functionality to set selected spans in URL query parameters, improving user navigation.
- Implemented logic to fill spans to the next trace start when generation created and completed times are equal.
- Updated tests to cover new features, ensuring accurate rendering and behavior of the ConversationDetailPage.
- Refactored imports and added a new component for location search probing to facilitate testing.
* more details
* style: enhance styling and structure across conversation-related components
- Added CSS labels to various styles in ConversationListPanel, ConversationDetailPage, and ConversationsListPage for improved debugging and maintainability.
- Updated layout and styling properties to enhance visual consistency and responsiveness across conversation-related pages.
- Introduced new styles for elements such as loading containers, trace timelines, and conversation statistics to improve user experience.
* feat(ConversationDetailPage): enhance span selection and tooltip functionality
- Introduced logic to find and display hovered spans, improving user interaction with trace timelines.
- Added new styles for hovered span tooltips, enhancing visual feedback and information accessibility.
- Implemented bounded width and position calculations for span bars to ensure consistent rendering across varying data.
- Updated state management to track hovered span selection, facilitating better user experience during navigation.
* feat(ConversationDetailPage): implement tooltip for hovered spans
- Added functionality to display a tooltip with span details when hovering over span buttons, enhancing user interaction.
- Updated state management to track the position of the tooltip based on hovered span, improving visual feedback.
- Enhanced styles for the tooltip to ensure proper positioning and appearance, contributing to a better user experience.
* feat(ConversationDetailPage): refine tooltip positioning and remove unused elements
- Updated the tooltip positioning logic for hovered spans to enhance accuracy and responsiveness.
- Removed the display of 'Conversation ID' and 'Generation count' from the details section to streamline the UI.
- Eliminated the 'Trace timeline' header and adjusted related styles for improved layout consistency.
- Enhanced tests to verify the absence of removed elements and the functionality of the tooltip on hover events.
* feat(ConversationDetailPage): enhance hover effects and state management
- Updated styles for span bars to improve hover effects, including background and border color changes for better visual feedback.
- Introduced new state management for hovered trace IDs to enhance user interaction with trace timelines.
- Added logic to apply hover styles conditionally based on the hovered trace, improving the overall user experience.
* feat(ConversationDetailPage): improve span rendering with timeline scaling
- Added timeline scaling logic to adjust the position and width of span bars based on the overall timeline, enhancing visual accuracy.
- Updated the `getHoveredSpanAnchor` function to incorporate the new timeline scale percentage for better hover effects.
- Refactored related calculations to ensure consistent rendering of spans across varying data scenarios, improving user interaction with trace timelines.
* feat(ConversationDetailPage): refactor trace loading and improve test coverage
- Updated the trace loading logic to build the timeline incrementally as traces load, enhancing user experience.
- Removed the progress bar and related state management for trace loading, simplifying the component's state.
- Enhanced tests to verify the new loading behavior and ensure accurate rendering of trace rows.
- Improved the clarity of test descriptions for better understanding of functionality.
* feat: add Babysit CI command for monitoring PR checks
- Introduced a new command to assist in monitoring CI checks for the current branch PR until all checks pass.
- Provided a detailed workflow for using GitHub CLI to manage PRs, check statuses, and handle failures.
- Established rules for commit practices during the CI monitoring process to ensure clarity and focus in changes.
* better padding
* feat: implement synthetic lifecycle span emission and testing
- Added functionality to emit synthetic lifecycle spans with randomized attributes for testing purposes.
- Introduced a new test to validate the correct production of synthetic spans, ensuring they meet expected criteria.
- Enhanced the main application logic to integrate synthetic span emission within the telemetry framework, improving observability.
- Defined minimum and maximum span counts to control the synthetic span generation process.
* fix(anthropic): accumulate content_block_delta events in stream mapper (#175)
* feat: add moq and Go testing skill (#183)
Add moq as a project tool for generating interface mocks, along with
mise tasks for code generation and a Claude skill documenting Go
testing conventions (table-driven tests, moq usage, testcontainers,
httptest patterns).
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Adding intro analytics dashboard (#182)
* feat(plugin): add dashboard URL state sync, label filters, and UI polish
Sync dashboard filters, time range, and breakdown with URL search
params so views are bookmarkable and browser navigation works.
Replace single label key/value filter with multi-row label filters
(key=value with add/remove). Move latency percentile and cost mode
dropdowns into section headers. Remove panel borders for cleaner look.
Made-with: Cursor
* feat(plugin): polish dashboard UI and sync panel controls with URL
- Flatten filter bar into single inline toolbar with toggle
- Replace TimeRangePicker with simpler TimeRangeInput
- Move latency percentile and cost mode dropdowns to section headers
and sync both with URL search params
- Remove panel borders, increase panel height to 350px
- Use palette-classic-by-name for consistent colors across panels
- Stabilize MetricPanel prop references to preserve legend interactions
- Default breakdown to provider
- Modernize section header styling with icon badges and larger type
Made-with: Cursor
* feat(plugin): add AI assistant insight panel to dashboard
Add an inline AI insight panel using @grafana/assistant's useInlineAssistant
hook that streams LLM-generated analysis of dashboard metrics. The panel:
- Spans both section rows as a sidebar next to metric panels
- Auto-generates once when all panel data has loaded (with actual metric
values passed as context, not generic prompts)
- Preserves existing insight when filters change (no re-trigger)
- Supports manual re-run via icon button
- Renders markdown-formatted output (bold, bullets, code) with sanitized HTML
- Waits for non-empty query results before firing the LLM call
Also fixes pre-existing lint issues: removes unused costDescription variable,
uses ThresholdsMode enum for proper typing, and updates tests for the
TimeRangeInput component and default piechart breakdown.
Made-with: Cursor
* feat(plugin): add TTFT panel, stacked token bars, and polish dashboard UX
- Add Time to First Token timeseries panel in the latency row with
breakdown support, using histogram_quantile query.
- Add stacked bar segments in the consumption BreakdownStatPanel when
token drilldown (input/output or cache) is active with a breakdown
dimension, showing per-type ratio within each breakdown item.
- Add tokensByBreakdownAndTypeQuery for grouping tokens by both
breakdown and token type.
- Polish InsightPanel: match custom panel styling, render findings as
card-like bullet items with arrow prefixes and cleaner formatting.
- Move InsightPanel to start alongside panel rows instead of the top
stats bar.
- Default costMode to tokens instead of USD.
- Use 1-hour lookback for comparison badges (dev data availability).
- Rename top stat from "Avg Cost" to "Total Cost" for accuracy.
Made-with: Cursor
* chore(plugin): clean up dead code, fix formatting, and update tests
- Remove unused exports: vectorToTableDataFrame, vectorToBarGaugeFrames
from transforms.ts and tokenDrilldownLabel from types.ts.
- Remove double blank lines in DashboardGrid.tsx.
- Fix DashboardPage test: update timeseries panel count from 4 to 5
(added TTFT panel) and remove piechart assertion (replaced by custom
BreakdownStatPanel).
- Apply prettier formatting across all changed files.
Made-with: Cursor
* fix: regenerate pnpm-lock.yaml after merge with main
The lockfile had a broken entry for react-router-dom@7.13.0 after
merging main, causing CI to fail with ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY.
Regenerated with pnpm install --no-frozen-lockfile.
Made-with: Cursor
* fix tooltip
* style(plugin): apply prettier formatting to DashboardGrid
Made-with: Cursor
* chore(plugin): remove unused TokenBreakdownPanel and fix DashboardGrid
Remove TokenBreakdownPanel component and its Storybook story — the
component was never imported by any production code (only by its story).
Include pending DashboardGrid fixes: correct costByBreakdownData for the
no-breakdown case, improve TopStat change badges for zero-to-nonzero
transitions, and drop unused panelRow style.
Made-with: Cursor
* feat(plugin): add Generate Insight button and remove dangerouslySetInnerHTML
Replace HTML string rendering with React elements for insight panel
content, eliminating dangerouslySetInnerHTML and the need for DOMPurify.
In dev mode, show a manual "Generate Insight" button instead of
auto-generating; in production, insights still auto-generate on data load.
Made-with: Cursor
* fix(plugin): include token data in insight context for "all" drilldown
When costMode was "tokens" and tokenDrilldown was "all", the insight
context read from tokensByTypeStat/tokensByTypeTimeseries which are
only populated when tokenDrilldown !== "all". Feed the correct data
sources (tokensTotalStat, tokensTotalByBreakdown, tokensTotalTimeseries)
so the AI assistant receives actual token data for analysis.
Made-with: Cursor
* fix(plugin): correct stat panel data for token drilldown and cost loading
Fix BreakdownStatPanel to use tokensByTypeStat when isTokenByType
without breakdown, instead of falling through to tokensTotalByBreakdown
which aggregates all token types.
Fix Total Cost TopStat loading prop to always track its actual data
sources (costTokens + resolvedPricing) instead of costLoading which
incorrectly varied with costMode.
Made-with: Cursor
* style(plugin): add global page padding in App wrapper (#185)
Move padding from individual pages into a shared wrapper in App.tsx
so all routes get consistent spacing without per-page duplication.
Made-with: Cursor
* fix(storage): skip stale blocks in fanout reader instead of failing (#186)
* feat: add datasource proxy, tenant settings, and Tempo query support (#187)
* refactor(ConversationDetailPage): update timestamp handling to use bigint
- Changed timestamp fields in the ConversationDetailPage component and tests from number to bigint for improved precision.
- Updated parsing functions to handle bigint values, ensuring compatibility with the new data type.
- Adjusted layout and formatting functions to accommodate bigint calculations, enhancing performance and accuracy in trace span rendering.
- Modified test cases to reflect the updated timestamp values and ensure consistent behavior across the application.
* feat(eval): add evaluator template system (#188)
* feat(eval): add evaluator template system with versioning, forking, and bootstrap
Adds a template abstraction layer for evaluator configurations. Templates
are versioned, globally scoped definitions that can be forked into
tenant-specific evaluators with optional config/output key overrides.
Key changes:
- TemplateStore interface with CRUD, versioning, and atomic publish
- MySQL implementation with transactional PublishTemplateVersion
- TemplateService for create, fork, publish, and version management
- HTTP endpoints under /api/v1/eval/templates
- Bootstrap predefined templates (sigil.*) as global-scope on startup
- Predefined templates now carry descriptions
- Forked evaluators track source_template_id/version lineage
- Request body size limit (1MB) on JSON decode
- Fix: infrastructure errors in template store no longer silently fall back
- Fix: store respects caller-provided timestamps
- Fix: deduplicate type assertions, shared validateKind, slices.Contains
- Comprehensive test coverage for control, templates, and MySQL store
- Package doc.go for eval/control and storage/mysql
- Add test:coverage:go mise task
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* update default timestamp for predefined templates
* fix(sigil): tighten control request validation
Reject negative template version suffixes by parsing the optional YYYY-MM-DD.N revision as an unsigned integer.
Restore whitespace-only request bodies to return 'request body is required' and add regression tests for both behaviors.
* format
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cursor[bot] <206951365+cursor[bot]@users.noreply.github.com>
* fix(plugin): relax datasource proxy auth precheck (#192)
* feat(devex): run assistant locally without compose collisions (#191)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cursor[bot] <206951365+cursor[bot]@users.noreply.github.com>
* added: mise run nuke (#189)
Co-authored-by: Mat Ryer <mat@hey.com>
* feat(sdks-go): add sigil probe for grpc/http path checks (#193)
* feat(sdks-go): add sigil probe for grpc/http path checks
Add a new sdks/go/cmd/sigil-probe CLI that exercises Sigil connectivity with basic auth.\n\nThe probe now runs grpc push, http push, and optional http read checks in one run, then renders a result table with per-step status and errors.\n\nThis makes it easy to distinguish write-path success from read-scope failures when validating dev clusters.
* fix(sdks-go): only verify http read for http push id
Remove the http_get(grpc_id) probe row since Sigil has no gRPC read API.\n\nDefault read verification now checks only the HTTP-pushed generation id via the HTTP query endpoint, which keeps the table aligned with actual API capabilities.
* fix(sdks-go): apply bugbot probe robustness fixes
Validate timeout inputs, use a single run-scoped timeout context across probe steps, and derive HTTP base URL scheme from endpoint scheme when provided.\n\nAdd regression tests for timeout validation and endpoint scheme resolution.
* fix(plugin): resolve storybook lint and datasource test typings
Fix duplicate story imports and add explicit React imports for JSX scope rules.\n\nUpdate mocked ConversationsDataSource typing and jest mock signatures in page tests to align with optional listConversations and strict function parameter typing.\n\nAdjust test rating summary fixtures to include required good_count/bad_count fields.
* fix: stabilize sigil-probe CI and honor SDK insecure override
Fix plugin CI regressions by updating ConversationsListPage tests for memory-router URL state, keeping Request polyfill compatible with react-router Request usage, and applying prettier formatting expected by format checks.
Address the Bugbot SDK report by allowing GenerationExportConfig.Insecure to override both true/false values during merge and by honoring explicit endpoint schemes in the HTTP exporter. Add regression tests for insecure merge behavior and HTTP endpoint scheme handling.
* fix: resolve remaining sigil-probe CI lint and typecheck issues
Address follow-up CI failures by removing an unused test variable in ConversationsListPage tests and fixing sigil-probe golangci-lint findings.
The probe now checks write errors when printing output and uses staticcheck-preferred TrimSuffix calls.
* feat(sdks-go): add basic auth mode to exporter
Add ExportAuthModeBasic for environments that authenticate via
HTTP Basic Auth (e.g. Grafana Cloud). When BasicUser is empty the
TenantID is used as the username. Explicit Authorization / tenant
headers still take precedence.
Includes regression tests for basic-mode happy path, explicit user
override, explicit-header-wins, and invalid-config rejection.
Made-with: Cursor
* feat(query): associate eval scores with conversations (#195)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Revert "feat(sdks-go): add basic auth mode to exporter"
This reverts commit d85042d.
* feat(sdks-go): add basic auth mode to exporter (#197)
* fix(sdks-go): merge BasicUser and BasicPassword in auth config (#198)
* drilldown from traces into spans (#194)
* remove span filling for now
* improved trace/span UX
* style(ConversationDetailPage): enhance layout and button styling
* fix layout
* lint and type fixes
* refactor(ConversationsListPage): simplify search parameter updates by removing replace option
* refactor(ConversationsListPage.test): enhance request mock and streamline renderPage function for improved test clarity
* fix(ConversationDetailPage): update query parameter from 'expandTraceID' to 'trace' for consistency in URL handling
---------
Co-authored-by: Mat Ryer <mat@hey.com>
* chore(deps): update grafana/plugin-ci-workflows/ci-cd-workflows action to v6.1.0 (#180)
| datasource | package | from | to |
| ----------- | --------------------------- | ---------------------- | ---------------------- |
| github-tags | grafana/plugin-ci-workflows | ci-cd-workflows/v5.1.0 | ci-cd-workflows/v6.1.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* fix(deps): update module github.com/grafana/grafana-plugin-sdk-go to v0.290.0 (#177)
* fix(deps): update module github.com/grafana/grafana-plugin-sdk-go to v0.290.0
| datasource | package | from | to |
| ---------- | ---------------------------------------- | -------- | -------- |
| go | github.com/grafana/grafana-plugin-sdk-go | v0.289.0 | v0.290.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* fix(ci): align go.work version with plugin module
* fix(ci): keep sdk bump on go1.25.6 toolchain
* fix(ci): align plugin go toolchain with sdk requirement
---------
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
* chore(deps): update dependency eslint-webpack-plugin to ^5.0.2 (#184)
| datasource | package | from | to |
| ---------- | --------------------- | ----- | ----- |
| npm | eslint-webpack-plugin | 5.0.2 | 5.0.3 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* fix(deps): update module google.golang.org/genai to v1.48.0 (#178)
| datasource | package | from | to |
| ---------- | ----------------------- | ------- | ------- |
| go | google.golang.org/genai | v1.47.0 | v1.48.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* chore(deps): update prom/prometheus docker tag to v3.10.0 (#170)
| datasource | package | from | to |
| ---------- | --------------- | ------ | ------- |
| docker | prom/prometheus | v3.9.1 | v3.10.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* chore(deps): update grafana monorepo to v12.4.0 (#169)
| datasource | package | from | to |
| ---------- | ---------------- | ------ | ------ |
| npm | @grafana/data | 12.3.3 | 12.4.0 |
| npm | @grafana/i18n | 12.3.3 | 12.4.0 |
| npm | @grafana/runtime | 12.3.3 | 12.4.0 |
| npm | @grafana/schema | 12.3.3 | 12.4.0 |
| npm | @grafana/ui | 12.3.3 | 12.4.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* feat(plugin): support auth token for remote Sigil upstream (#199)
* fix(deps): update protobuf monorepo (#179)
| datasource | package | from | to |
| ---------- | -------------------------------------- | ------ | ------ |
| nuget | Google.Protobuf | 3.33.5 | 3.34.0 |
| maven | com.google.protobuf:protoc | 4.33.5 | 4.34.0 |
| maven | com.google.protobuf:protobuf-java-util | 4.33.5 | 4.34.0 |
| maven | com.google.protobuf:protobuf-java | 4.33.5 | 4.34.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* fix(deps): update dependency com.openai:openai-java to v4.23.0 (#176)
| datasource | package | from | to |
| ---------- | ---------------------- | ------ | ------ |
| maven | com.openai:openai-java | 4.22.0 | 4.23.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* fix(deps): update dependency com.google.genai:google-genai to v1.41.0 (#172)
| datasource | package | from | to |
| ---------- | ----------------------------- | ------ | ------ |
| maven | com.google.genai:google-genai | 1.40.0 | 1.41.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* fix(deps): update dependency @google/adk to ^0.4.0 (#171)
| datasource | package | from | to |
| ---------- | ----------- | ----- | ----- |
| npm | @google/adk | 0.3.0 | 0.4.0 |
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
* feat(plugin): add online evaluation UI (#181)
* feat(plugin): add online evaluation UI
Add a complete "Evaluation" section to the Grafana plugin with three
sub-pages (Overview, Evaluators, Rules) behind a tab-bar navigation.
Backend:
- Plugin proxy routes for all eval control-plane endpoints (/eval/*)
- New POST /api/v1/eval/rules:preview endpoint for dry-run matching
against recent generations (configurable window via
SIGIL_EVAL_PREVIEW_WINDOW_HOURS, default 6h)
Frontend:
- TypeScript types and EvaluationDataSource API client
- 18 evaluation components: pipeline visualization (PipelineNode,
PipelineCard), evaluator management (TemplateCard, TemplateGrid,
EvaluatorTable, EvaluatorDetail, EvaluatorForm, ForkForm), rule
form primitives (SelectorPicker, MatchCriteriaEditor, SampleRateInput,
EvaluatorPicker), dry-run preview (DryRunPreview, DryRunGenerationRow),
and composites (RuleForm, EvalTabBar, SummaryCards, RuleEnableToggle)
- 5 pages: EvaluationPage wrapper, Overview (pipeline/summary toggle),
Evaluators (template library + tenant CRUD), Rules (pipeline card
list), RuleDetail (create/edit with live dry-run preview)
- Storybook stories for every component and page
- Navigation wired via constants.ts, App.tsx, plugin.json
Docs:
- FRONTEND.md updated with eval proxy routes and page responsibilities
- Design doc at docs/plans/2026-03-02-online-evaluation-ui-design.md
Made-with: Cursor
* fix(plugin): disable non-enabled fields in rule edit mode and deduplicate getKindBadgeColor
Bug 1: In edit mode, RuleDetailPage rendered a fully editable RuleForm but
handleSave only sent { enabled } via UpdateRuleRequest, silently discarding
any user changes to selector, match criteria, sample rate, and evaluators.
Fix: propagate a disabled prop through RuleForm to all sub-components
(SelectorPicker, MatchCriteriaEditor, SampleRateInput, EvaluatorPicker)
when editing an existing rule (!isNew), preventing misleading interactivity.
Bug 2: getKindBadgeColor was copy-pasted identically across EvaluatorDetail,
EvaluatorPicker, EvaluatorTable, and EvaluatorTemplateCard. Extracted the
function into evaluation/types.ts alongside EVALUATOR_KIND_LABELS and
replaced all four copies with imports from the shared location.
Applied via @cursor push command
* fix: address three bugs across Go backend and plugin frontend
- Fix byte-level truncation in truncateWithEllipsis and inputPreviewFromGeneration
to use rune-aware operations (utf8.RuneCountInString + []rune slicing), preventing
invalid UTF-8 when multi-byte characters (CJK, emoji) are split mid-character.
- Add missing strings.Contains(id, "/") check to handleEvalPredefinedFork for
defense-in-depth parity with handleEvalEvaluatorByID and handleEvalRuleByID.
- Extract duplicate formatEvaluatorId function from EvaluatorPicker.tsx and
EvaluatorTemplateCard.tsx into shared evaluation/types.ts module.
Applied via @cursor push command
* fix: prevent accidental rule deletion and enforce required evaluator ID
Bug 1 (PipelineCard): The ellipsis-v icon implied a dropdown menu but
directly triggered deletion with no confirmation. Changed icon to
trash-alt (matching EvaluatorTable pattern) and added window.confirm
before calling onDelete.
Bug 2 (ForkEvaluatorForm): The Evaluator ID field was labeled required
but handleSubmit silently fell back to templateID when empty. Added
validation that blocks submission and shows an error when the field is
blank.
Applied via @cursor push command
* fix(plugin): format evaluator components
Apply Prettier formatting to evaluator components so the CI 'Lint and Format Checks' job passes on PR #181.
* fix: resolve race condition, data loss, and missing separator bugs
- RuleDetailPage: add previewVersion ref to guard against stale
out-of-order API responses in the debounced preview effect, matching
the existing requestVersion pattern used by other effects in the file.
- MatchCriteriaEditor: disable 'Add criteria' button when all match key
options are already in use, preventing duplicate key rows that cause
silent data loss when fromRows overwrites earlier entries.
- service.go inputPreviewFromGeneration: insert newline separator between
consecutive text parts so multi-message input previews remain readable
instead of being concatenated into an unreadable blob.
Applied via @cursor push command
* fix: address four bugs in evaluation rule UI and preview backend
- Stabilize preview useEffect dependency by serializing match object to
JSON string, preventing spurious preview API calls on every keystroke
when the actual match criteria haven't changed.
- Use rule_id from preview request for sampling hash instead of hardcoded
'preview' string, so dry-run preview samples the same conversations
that production would sample for the given rule.
- Add missing .catch() handler to evaluator detail fetch fallback path
in EvaluatorsPage, preventing unhandled promise rejections on network
errors.
- Disable already-used match keys in per-row Select dropdowns in
MatchCriteriaEditor, preventing silent data loss when two rows share
the same key and fromRows overwrites one.
Applied via @cursor push command
* fix(plugin): skip preview on default values during rule load and clarify edit-mode save button
Bug 1: The preview useEffect fired immediately on mount with default state
values before the rule data loaded in edit mode, causing an unnecessary API
call with incorrect parameters. Added a loading guard to skip the preview
until rule data is available.
Bug 2: The Save button in edit mode implied full form save but only updated
the enabled field via UpdateRuleRequest. Changed the button label to
'Update Enabled Status' in edit mode to clearly communicate the constraint.
Applied via @cursor push command
* fix(plugin): handle evaluator loading errors for new rules and remove redundant wrapper
- Add proper error handling in the new-rule evaluator loading effect
instead of silently swallowing errors with .catch(() => {}). Users now
see an error message when the evaluators API call fails.
- Remove the unnecessary RuleDetailRoute wrapper component from
EvaluationPage since RuleDetailPage already reads ruleID from
useParams internally.
Applied via @cursor push command
* fix: deduplicate eval rules data fetching and fix quadratic preview loop
Extract shared useEvalRulesData hook from RulesPage and
EvaluationOverviewPage to eliminate duplicated data fetching, toggle,
and delete logic. Both pages now consume the same hook, ensuring
future fixes apply consistently.
Replace O(n²) b.String() + utf8.RuneCountInString calls in
inputPreviewFromGeneration with an incremental runeCount variable
that tracks accumulated runes without rescanning the full builder
contents on each iteration. Add table-driven regression tests
covering nil input, multi-part joining, truncation boundaries,
multibyte runes, and whitespace-only parts.
Applied via @cursor push command
* fix(plugin): use dynamic judge providers API and align default sample rate
- Replace hardcoded PROVIDER_OPTIONS in ForkEvaluatorForm with dynamic
fetching from listJudgeProviders/listJudgeModels APIs. The provider
dropdown now loads options from the backend, and the model field
becomes a Select with allowCustomValue that loads suggestions when
a provider is selected.
- Align frontend default sampleRate (0.01) with backend
defaultRuleSampleRate (0.01). Previously the frontend used 0.1 (10%),
which silently overrode the backend's 1% default, leading to
unexpectedly high evaluation costs for users accepting form defaults.
Applied via @cursor push command
* fix(plugin): add client-side validation to EvaluatorForm before submission
EvaluatorForm.handleSubmit called onSubmit without validating that
evaluatorId is non-empty or that output_keys has at least one entry.
The backend requires both fields (returning 400 errors), but the user
saw no inline validation feedback.
Add touched state, isIdEmpty/isOutputKeyEmpty checks, and inline error
messages consistent with ForkEvaluatorForm's existing validation pattern.
handleSubmit now guards against empty fields and returns early, showing
field-level errors instead of letting invalid requests reach the backend.
Applied via @cursor push command
* fix(plugin): reset model on provider change and use codepoint-safe truncation
- ForkEvaluatorForm: clear model state when provider changes so a stale
model from a previous provider is not submitted with a mismatched provider.
- DryRunGenerationRow: use Array.from() to split by Unicode codepoints
instead of UTF-16 code units, preventing surrogate pair corruption
when truncating strings with emoji or non-BMP characters.
Applied via @cursor push command
* fix(plugin): resolve lint regressions in fork form updates
Avoid synchronous setState inside effects and remove duplicate imports introduced by recent Bugbot autofix commits.
* refactor(conversations): put trace view in own component (#204)
* refactor(conversations): put trace view in own component
* fmt
* refactor(conversation-detail): remove unused trace styles and constants
* chore: add dev-tempo/cortex (#203)
* move components (#206)
* chore: add OTEL_ENDPOINT overwrite (#208)
* chore: add dev-tempo/cortex
* chore: set OTEL_EXPORTER to sigil
* feat(plugin): add ConversationTraces storybook and fix trace parser (#209)
* feat(plugin): add ConversationTraces storybook and fix trace parser
Add a comprehensive Storybook for the ConversationTraces component with
realistic multi-trace mock data modeled on real production traces. This
enables fast iteration on the trace timeline visualization.
Stories: Default (collapsed overview), ExpandedTrace, WithSelectedSpan,
Loading, PartialFailure, SingleTrace.
Mock data covers 4 trace patterns: Grafana Assistant interaction with
full service chain (21 spans, 8 services), RAG pipeline, multi-tool
agent, and streaming generation -- all with matching ConversationDetail
generations for detail card rendering.
Also fixes a parser gap in buildTraceSpans: adds batches and
instrumentationLibrarySpans fallbacks so the older OTLP format used
by real Tempo exports is handled correctly.
Sets dark background as default for all Storybook stories.
Made-with: Cursor
* fix(plugin): format conversation traces files
* feat(plugin): add Sigil RBAC enforcement and roles (#205)
* feat(plugin): add Sigil RBAC enforcement and roles
Add plugin-level RBAC actions/roles for Sigil read, feedback write, and settings write access.
Enforce permissions on resource routes via Grafana authz checks, tighten proxy method handling, and add regression tests for authz + proxy edge cases.
Also update plugin IAM to allow permission lookups and document RBAC contracts in architecture/frontend docs.
* test(plugin): align basic-auth proxy test with RBAC
Set mock authz client and use authenticated CallResource helper in the Sigil basic-auth proxy test so it exercises the intended proxy behavior under RBAC enforcement.
* chore(plugin): tidy Go module metadata for authlib
Promote authlib to a direct dependency and refresh go.sum/go.mod transitive entries so CI typecheck can resolve github.com/grafana/authlib/types.
* fix(plugin): reject non-PUT methods on settings/datasources before proxy
handleSettingsRoutes unconditionally called handleProxy with
http.MethodPut for the /query/settings/datasources path regardless of
the incoming HTTP method. While handleProxy itself rejects method
mismatches with 405, the RBAC guard in requiredPermissionAction only
matched PUT, so any other method (e.g. GET) fell through to the default
branch returning ("", false), causing authorizeRequest to return nil
and skip all permission enforcement.
Add an explicit method check in handleSettingsRoutes so non-PUT requests
are rejected with 405 before reaching the proxy, ensuring the
PermissionSettingsWrite RBAC guard cannot be bypassed.
Includes a regression test that verifies GET /query/settings/datasources
returns 405 even with all permissions granted.
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cursor[bot] <206951365+cursor[bot]@users.noreply.github.com>
* chore: missing service account config (#210)
* feat(conversations): added new view
* refactor(conversations): update styles and layout for Conversation components
- Adjusted padding and margin styles in ConversationColumn for improved layout.
- Removed unused bodyPlaceholder style from ConversationColumn.
- Added new styles for table auto-width and cell truncation in ConversationListPanel.
- Updated grid layout in ConversationsBrowserPage for better responsiveness and added detail panel for conversation details.
- Changed default time range in ConversationsBrowserPage to 1 hour.
* feat(conversations): integrate ConversationGenerations component and enhance ConversationColumn
- Added ConversationGenerations component to display generation details within the ConversationColumn.
- Updated ConversationColumn to accept generations, loading state, and error message props.
- Enhanced ConversationsBrowserPage to fetch and manage conversation details, including generations.
- Updated tests to verify the presence of generation information in the ConversationsBrowserPage.
- Added stories for the new ConversationGenerations component to showcase different states.
* test(conversations): add unit tests for ConversationGenerations component
- Introduced a new test file for the ConversationGenerations component to validate token usage parsing.
- Implemented tests to ensure correct rendering of total tokens and input/output tokens when provided as strings.
* test(conversations): enhance tests for ConversationGenerations component
- Added tests to verify the loading of spans when a generation row is expanded.
- Mocked backend service calls to ensure accurate testing of span retrieval.
- Updated existing tests to check for correct rendering of token usage with regex matching.
* feat(app): enhance layout and styling for routing in App component
- Added a new routes container to improve layout management.
- Introduced a dedicated container for the Conversations route to ensure proper styling and overflow handling.
- Updated styles for ConversationsBrowserPage to utilize grid layout and improve responsiveness.
- Adjusted overflow properties to prevent content overflow in various components.
* fmt
* refactor(stories): remove unused React imports from conversation story files
- Eliminated unnecessary React imports in ConversationColumn and ConversationGenerations story files to streamline code and improve readability.
* remove conversations once selected
* nice top bar layout
* refactor(ConversationsBrowserPage): update layout styles for improved responsiveness
* refactor(ConversationsBrowserPage): adjust alignment and text styles for improved layout
- Changed alignment from center to flex-start for better content organization.
- Updated text alignment from center to left to enhance readability.
- Modified justification in stat value row for consistent layout.
* feat(conversations): integrate Sigil span functionality into conversation components
* fix(App): update regex for Conversations route to support additional view paths
* refactor(devex-emitter): adjust synthetic span limits for improved performance
- Reduced minimum synthetic spans from 15 to 6 and maximum from 30 to 12 to optimize resource usage.
* feat(conversations): enhance Sigil span tree component and tests
* fix(traceSpans.test): update expected span IDs in tests to reflect correct output
* refactor(ConversationGenerations.test): update test descriptions and assertions for clarity and accuracy
* feat(SigilSpanTree): ensure parent-child hierarchy handling in span tree and enhance tests for accurate rendering
* feat(plugin): add typed data layer packages for modelcard, generation, and conversation
Extract a three-package data layer that decouples data plumbing from UI
components, enabling clean consumption of conversation/generation/trace
data without raw attribute string handling.
modelcard/ — standalone model catalog types (full ModelCard matching
backend Card struct) and API client with resolve (batch normalized
matching) + lookup (exact model_key retrieval) methods.
generation/ — properly typed GenerationDetail with Message[],
ToolDefinition[], full GenerationUsage (cache + reasoning tokens),
and lazy per-generation cost calculation via ModelCard resolve/lookup
fallback strategy.
conversation/ — ConversationSpan with parent-child hierarchy built from
OTLP traces, 54 exhaustive span attribute constants with known-value
enums and typed structured readers, span classifiers (generation, tool,
embedding, framework, SDK), conversation-level aggregate helpers (token
summary, cost summary, model usage breakdown, error/span stats), and a
loadConversation() orchestrator that fetches detail + traces in parallel.
Existing conversation/types.ts re-exports generation types for backward
compatibility — no existing imports break.
86 tests across 6 test suites.
Made-with: Cursor
* feat(ConversationGenerations): add free-text search and type filtering for spans
* chore: remove ConversationsListPage component and its associated tests
* fmt
* refactor(ConnectionSettings): streamline imports and clean up code formatting
- Consolidated import statements for better readability.
- Removed unnecessary line breaks and improved formatting in the ConnectionSettings component.
- Updated error handling in async functions for consistency.
* feat(search): add plugin-owned conversation search pipeline (#211)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Made-with: Cursor
# Conflicts:
# go.work.sum
---------
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: Mat Ryer <mat@hey.com>
Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
Co-authored-by: Alexander Sniffin <alexsniffin@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Sven Grossmann <Svennergr@gmail.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cursor[bot] <206951365+cursor[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* feat(plugin): add Errors, Consumption, and Cache dashboard tabs Add tabbed navigation to the dashboard page with dedicated views for error analysis, token consumption breakdown, and cache utilization. - Errors tab: error rate timeseries, errors by code breakdown, error rate by breakdown dimension, conversations with errors table - Consumption tab: tokens by type, total tokens over time, estimated cost panels with breakdown support - Cache tab: cache hit rate, read/write timeseries, stacked cache_read/cache_write breakdown, savings by model table - Overview: fix error rate panel to show percentages, move legend to bottom - Transforms: add error_type to preferred label keys so error code shows alongside breakdown dimension in legends - URL state: persist active tab in search params Each tab includes a Storybook story with mock data. Made-with: Cursor * fix(plugin): show item name in breakdown panels with single result When a BreakdownStatPanel has exactly one item, display the item name below the value so users can identify the source (e.g., "bedrock") instead of seeing only a number. Made-with: Cursor * fix(plugin): hide 'unknown' label in single-item breakdown panels Skip rendering the item name when it resolves to 'unknown', showing only the aggregate value instead. Made-with: Cursor * style(plugin): format dashboard files with prettier Made-with: Cursor * fix(plugin): keep conversations visible when load-more pagination fails When load-more fails in ErrorConversationsTable, the same error state was used for both initial load and pagination. The early if (error) return replaced the entire table with an error message, hiding already-fetched conversations. Only show full-page error for initial load failure (no conversations). For load-more failures, keep the table visible with inline error and Retry button. Made-with: Cursor * fix(plugin): add background color to SavingsTable bar fills SavingsTable bar fills had no background, making them invisible against the track. Export stringHash and getBarPalette from dashboardShared, assign per-item colors from the theme palette (matching BreakdownStatPanel), and pass background in the inline style. Made-with: Cursor * fix(plugin): show global error rate in Error rate by model panel BreakdownStatPanel with aggregation=avg was averaging per-model error rates (e.g. (79.6 + 0) / 2 = 39.8%), which is wrong when models have different request volumes. Add aggregateOverride prop and pass the global error rate (68.6%) from the top stats when breakdown is active. Made-with: Cursor
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | nuget | OpenAI | 2.8.0 | 2.9.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* feat(plugin): port conversation span tree to jaeger-style view Replace the conversation details span tree with a Jaeger/Grafana-style implementation, including copied list virtualization behavior, collapse controls, and service-colored tree connectors/icons. Keep a plugin-owned customization hook (renderNode) so node rendering can be extended later without rewriting tree internals. * feat(traceview): enhance span tree with timing data and draggable features - Introduced timing fields (startTimeUnixNano, endTimeUnixNano, durationNano) to SigilSpanTreeRow for better trace visualization. - Implemented a DraggableManager for mouse-based interactions, allowing users to resize columns in the trace view. - Added utility functions for formatting duration and managing ticks in the timeline. - Updated tests to validate new timing features and draggable functionality. This update improves the usability and functionality of the trace view, aligning it with user expectations for performance monitoring. * feat(conversations): enhance conversation components and add resource attributes - Introduced a new ConversationSummaryHeader component for improved conversation details display. - Updated ConversationGenerations and SigilSpanTree components to support resource attributes. - Refactored App component to include a new ConversationPage route. - Removed unused ConversationColumn component to streamline the codebase. - Enhanced tests to cover new features and ensure stability. This update improves the user experience in the conversations section and aligns with the overall architecture enhancements. * feat(conversations): add support for orphan generation spans in SpanDetailPanel - Enhanced SpanDetailPanel to handle orphan generations by matching via the sigil.generation.id attribute when span_id is absent. - Updated resolveGeneration function to include logic for finding orphan generations based on attributes. - Added a new test case to verify the display of generation information for orphan spans. This update improves the handling of generation data in conversation spans, ensuring accurate representation even when span_id is not provided.
| datasource | package | from | to | | ---------- | ----------- | -------- | ------- | | npm | @types/node | 22.19.13 | 24.11.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…g (#243) * feat(go): track deferred tools across sdk ingest and agent catalog Propagate tool deferred semantics end-to-end in the Go SDK stack. - add ToolDefinition.deferred to generation ingest proto and regenerate Go stubs - map deferred fields in core SDK/proto mapping and provider mappers (anthropic/openai/gemini) - update validation/exporter and transport fixtures/tests for deferred tool definitions - include deferred in agent metadata tool projection and effective-version hashing - document deferred tool semantics in architecture and ingest contract docs This ensures deferred tool configuration is preserved in payloads and treated as a real agent configuration change when computing effective agent versions. * fix(sigil): restore strings import in agentmeta deferred-hash test Keep the deferred effective-version regression assertion and restore the missing strings import introduced during conflict resolution. * fix(go-providers): preserve empty client text segments Stop dropping empty system/developer segments in OpenAI request mapping by removing appendNonEmpty filtering in both chat-completions and responses mappers. Add regression tests for OpenAI/Anthropic/Gemini helper behavior to ensure empty text segments remain part of joined prompts/tool content as sent by clients.
…(#253) * feat: add conversation title span attribute across SDK and query Introduce a new span attribute and SDK support so callers can name conversations without changing the generation ingest schema. Propagate the title through Go provider wrappers, expose it in conversation search results, and surface it in the Grafana plugin conversation list/header with fallback behavior. Update tests and reference docs to cover mapping, query aggregation, and frontend rendering semantics. * fix(plugin): reset font-family on idCellPrimary to prevent monospace titles In extended columns mode, the idCell container sets fontFamily to monospace, which was inherited by idCellPrimary. This caused human-readable conversation titles to render in monospace font. Override with the default fontFamily on idCellPrimary so titles display correctly while the secondary ID line retains monospace. Applied via @cursor push command * fix(plugin): use "Conversation" label when title is shown instead of ID The header label was hardcoded as "Conversation ID" but the value conditionally displayed a human-readable title, creating a semantic mismatch. Now the label reads "Conversation" when a title is present and "Conversation ID" when showing the raw ID. Adds regression tests for both label states. * fix(plugin): correct test assertion for conversation label when title is present The test asserted 'Conversation ID' as the label text after navigating to a conversation that has a title. However, ConversationSummaryHeader renders the label as 'Conversation' (not 'Conversation ID') when a title is present. Updated the assertion to match the actual component behavior. Applied via @cursor push command * fix(plugin): use JSX line break in compact-mode tooltip content A literal \n in a string passed to Grafana's Tooltip content prop renders as collapsed whitespace in HTML, not a visible line break. Replace the template literal with a JSX fragment containing a <br /> element so the conversation title and ID display on separate lines. Applied via @cursor push command --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: cursor[bot] <206951365+cursor[bot]@users.noreply.github.com>
…(#262) * feat(conversations): add user name to conversation search and detail Expose end-user names across Sigil generation ingest, conversation search, and conversation detail so the UI can render a human label directly. Propagate UserName through the Go SDK (context fallback, span attribute, metadata mirror), aggregate latest sigil.user.name from Tempo spans, and include user_name in query/plugin API responses and plugin list/detail views. Also include span.sigil.user.name in the default TraceQL select projection so standard searches populate the field, and normalize nil generation contexts before context lookups to prevent runtime panics. * refactor(conversations): use user.id and user_id across pipeline Replace user-name semantics with user-id semantics end-to-end: SDK fields/context fallbacks, span attribute extraction, default TraceQL projection, query/plugin response fields, frontend list/detail rendering, tests, and docs. Also apply Prettier formatting for plugin files flagged by CI format checks after merging main. * fix(conversations): split user id keys for span and metadata Use for span attributes and for generation metadata mirrors. Keep backward fallback reads for legacy metadata during detail aggregation. Update tests and docs to reflect the finalized contract.
Map Anthropic tool search variant blocks to explicit provider types in both request/response and streaming mappers. This preserves tool_search_tool_regex and tool_search_tool_bm25 semantics (and their *_tool_result variants) in Generation.Output metadata instead of collapsing everything to generic server/tool result types. Add regression tests for response and stream paths to prevent future regressions.
* feat(plugin): show sigil conversation titles in explore header Resolve conversation header text from telemetry by checking sigil.conversation.title in generation metadata and span/resource attributes, then pass that title into the explore metrics bar instead of always showing the raw conversation ID. Keep the tooltip behavior with the full resolved title and add a mount-time typewriter reveal for title display so the text writes in on page load. Add regression coverage for telemetry title resolution and MetricsBar typewriter rendering/tooltip content, and update Storybook with conversation-title scenarios. * chore(plugin): fix prettier drift for CI * test(plugin): use stable matchMedia spy in MetricsBar tests Use jest.spyOn(window, 'matchMedia') instead of redefining the property so the test suite remains stable after rebasing onto main where matchMedia is non-redefinable in this environment. * fix(query): prioritize latest generation title over span title Prefer non-empty conversation title from the latest conversation generation metadata during conversation search, then fall back to the latest span title. Also mirror ConversationTitle into generation metadata at SDK normalization time so explore views can resolve titles before trace trees finish loading. * fix(titles): align latest-title selection across sdk, backend, and ui Normalize whitespace-only conversation titles in SDK generation normalization and fallback to metadata title when available. Update frontend telemetry title resolver to pick the latest generation title by timestamp (then latest span title), matching backend search behavior and avoiding stale titles. * fix(query,plugin): align frontend legacy title key and batch search title resolution Bug 1: The frontend titleFromMetadata only checked sigil.conversation.title while the backend generationConversationTitle also falls back to the legacy conversation_title key. This caused titles stored under the legacy key to appear in search results but not in the explore page header. Added the legacy key fallback to the TypeScript titleFromMetadata function, matching the Go backend's four-key lookup order, with regression tests. Bug 2: The search loop called resolveLatestConversationTitleFromGenerations sequentially for each result conversation, adding N database round-trips to the search hot path. Refactored to collect qualifying candidates first, then resolve generation titles concurrently via goroutines. Each goroutine uses a local title cache; results are merged back into the shared cache after all goroutines complete. This turns N sequential round-trips into N parallel ones. Applied via @cursor push command * fix(sigil): pre-populate goroutine local cache from shared generation title cache Each goroutine in batchResolveGenerationTitles was creating a fresh empty localCache without reading from the shared cache parameter. This meant cached generation title lookups from previous search iterations were never reused, causing redundant storage reads. Pre-populate each goroutine's localCache from the shared cache before launching. Concurrent reads from the shared cache are safe because no goroutine writes to it — the merge-back into the shared cache only happens after all goroutines complete. Applied via @cursor push command * fix(query): resolve concurrent map read/write race in batchResolveGenerationTitles Goroutines spawned in batchResolveGenerationTitles read from the shared cache map (for k, v := range cache) while the main goroutine concurrently writes to the same map (cache[k] = v) when merging results. This is a data race that causes Go's 'fatal error: concurrent map read and map write'. Fix: snapshot the cache once before spawning goroutines so all goroutines read from the immutable snapshot, while the main goroutine only writes to the original cache after receiving results on the channel. Includes a regression test that exercises the race with 20 concurrent candidates under -race. Applied via @cursor push command --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Return conversation_title through the search stream and batch metadata contract, remove output-payload title parsing from storage and client fallback paths, and make the Go devex emitter send sigil.conversation.title through the SDK so new traffic stores real titles.
| datasource | package | from | to | | ---------- | ----------------------------------------------------------------- | ------- | ------- | | go | go.opentelemetry.io/otel | v1.40.0 | v1.41.0 | | go | go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc | v1.40.0 | v1.41.0 | | go | go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc | v1.40.0 | v1.41.0 | | go | go.opentelemetry.io/otel/metric | v1.40.0 | v1.41.0 | | go | go.opentelemetry.io/otel/sdk | v1.40.0 | v1.41.0 | | go | go.opentelemetry.io/otel/sdk/metric | v1.40.0 | v1.41.0 | | go | go.opentelemetry.io/otel/trace | v1.40.0 | v1.41.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | nuget | OpenAI | 2.9.0 | 2.9.1 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ----------------------------------------- | ------- | ------- | | npm | @opentelemetry/exporter-metrics-otlp-grpc | 0.212.0 | 0.213.0 | | npm | @opentelemetry/exporter-metrics-otlp-http | 0.212.0 | 0.213.0 | | npm | @opentelemetry/exporter-trace-otlp-grpc | 0.212.0 | 0.213.0 | | npm | @opentelemetry/exporter-trace-otlp-http | 0.212.0 | 0.213.0 | | npm | @opentelemetry/sdk-metrics | 2.5.1 | 2.6.0 | | npm | @opentelemetry/sdk-trace-base | 2.5.1 | 2.6.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
* feat(eval): refresh llm judge prompt context Replace the old llm_judge input/output template surface with the agreed typed prompt variables for user messages, assistant output, tools, stop reasons, and call errors. Align predefined templates, frontend prompt rendering, tests, and docs with the new variable contract while leaving unrelated dependency changes out of the commit. * chore(repo): fix go module state for format and lint Run go mod tidy in the plugin and Go SDK/provider modules so the repo-wide format and lint tasks complete cleanly, and apply the resulting gofmt change in the llm judge tests. * fix(eval): escape user history prompt content Escape user_history message text before wrapping it in tagged blocks so code-like input cannot break llm_judge prompt structure. Add a regression test covering angle brackets and ampersands in user history. * chore(ui): simplify llm judge variable help Remove the input and output compatibility aliases from the frontend help copy so authors see only the primary llm judge variables in the editor.
… (#364) | datasource | package | from | to | | ---------- | ----------------------------- | ------ | ------ | | maven | com.google.genai:google-genai | 1.41.0 | 1.42.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ------------ | ----- | ----- | | nuget | Google.GenAI | 1.2.0 | 1.3.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ----------------------- | ------- | ------- | | go | google.golang.org/genai | v1.48.0 | v1.49.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ----------------------- | ------- | ------- | | go | google.golang.org/genai | v1.50.0 | v1.51.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…647) | datasource | package | from | to | | ---------- | ------------------------------ | ------- | ------- | | go | github.com/openai/openai-go/v3 | v3.28.0 | v3.29.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…emini to v0.1.1 (#646) | datasource | package | from | to | | ---------- | ------------------------------------------------- | ------ | ------ | | go | github.com/grafana/sigil/sdks/go-providers/gemini | v0.0.0 | v0.1.1 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…#644) | datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | go | github.com/grafana/sigil/sdks/go | v0.0.0 | v0.1.1 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…nthropic to v0.1.1 (#645) | datasource | package | from | to | | ---------- | ---------------------------------------------------- | ------ | ------ | | go | github.com/grafana/sigil/sdks/go-providers/anthropic | v0.0.0 | v0.1.1 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
| datasource | package | from | to | | ---------- | -------------------------------------- | ------ | ------ | | nuget | Google.Protobuf | 3.34.0 | 3.34.1 | | maven | com.google.protobuf:protoc | 4.34.0 | 4.34.1 | | maven | com.google.protobuf:protobuf-java-util | 4.34.0 | 4.34.1 | | maven | com.google.protobuf:protobuf-java | 4.34.0 | 4.34.1 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…emini to v0.1.2 (#657) | datasource | package | from | to | | ---------- | ------------------------------------------------- | ------ | ------ | | go | github.com/grafana/sigil/sdks/go-providers/gemini | v0.1.1 | v0.1.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ------------------- | ------ | ----- | | npm | @opencode-ai/plugin | 1.2.24 | 1.3.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…penai to v0.1.2 (#659) | datasource | package | from | to | | ---------- | ------------------------------------------------- | ------ | ------ | | go | github.com/grafana/sigil/sdks/go-providers/openai | v0.1.1 | v0.1.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…nthropic to v0.1.2 (#656) | datasource | package | from | to | | ---------- | ---------------------------------------------------- | ------ | ------ | | go | github.com/grafana/sigil/sdks/go-providers/anthropic | v0.1.1 | v0.1.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ------------------------------------------------------ | ------ | ------ | | maven | com.fasterxml.jackson.datatype:jackson-datatype-jsr310 | 2.21.1 | 2.21.2 | | maven | com.fasterxml.jackson.core:jackson-databind | 2.21.1 | 2.21.2 | | maven | com.fasterxml.jackson.core:jackson-core | 2.21.1 | 2.21.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
…#655) | datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | go | github.com/grafana/sigil/sdks/go | v0.1.1 | v0.1.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
| datasource | package | from | to | | ---------- | ---------------- | ------ | ----- | | npm | @opencode-ai/sdk | 1.2.24 | 1.3.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ---------------------- | ------ | ------ | | maven | com.openai:openai-java | 4.29.0 | 4.29.1 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | vitest | 4.1.0 | 4.1.1 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | -------------- | ----- | ----- | | npm | @openai/agents | 0.7.2 | 0.8.0 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
| datasource | package | from | to | | ---------- | ---------- | ----- | ----- | | npm | typescript | 5.9.3 | 6.0.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com> Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
This comment has been minimized.
This comment has been minimized.
fix(ci): resolve build failures in TS, Java, and .NET jobs
Contributor
Author
|
Rebase requested. Renovate is processing this repository now. |
| datasource | package | from | to | | ---------- | ---------------------------------- | ------- | ------- | | npm | @opencode-ai/plugin | 1.3.13 | 1.3.13 | | npm | @opencode-ai/sdk | 1.3.13 | 1.3.13 | | npm | @opentelemetry/context-async-hooks | 2.6.1 | 2.6.1 | | npm | @types/node | 24.12.0 | 24.12.0 | | npm | esbuild | 0.27.4 | 0.27.4 | | npm | typescript | 6.0.2 | 6.0.2 | | npm | vitest | 4.1.2 | 4.1.2 | Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
72aba4d to
8f40e1b
Compare
Contributor
Author
Edited/Blocked NotificationRenovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR. You can manually request rebase by checking the rebase/retry box above. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^1.3.0→1.3.13^1.3.2→1.3.13^2.6.0→2.6.1^24.0.0→24.12.0^24.11.0→24.12.0^0.27.3→0.27.4^6.0.0→6.0.2^4.1.0→4.1.2Add the preset
:preserveSemverRangesto your config if you don't want to pin your dependencies.Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
Need help?
You can ask for more help in the following Slack channel: #proj-renovate-self-hosted. In that channel you can also find ADR and FAQ docs in the Resources section.