From e6d5f87ffe7e6c03816f0e3c416d2f1acf0e3d2b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 21:01:30 +0000 Subject: [PATCH 1/2] chore(release): bump HyperDX app/package versions --- .changeset/adhoc-filter-broadcast.md | 6 - .changeset/adhoc-filter-click-search.md | 6 - .changeset/adhoc-filter-click-table.md | 6 - .changeset/adhoc-filter-click-timechart.md | 5 - .changeset/adhoc-filter-inputs.md | 6 - .changeset/adhoc-filter-schemas.md | 7 - .changeset/adhoc-filter-ui.md | 6 - .changeset/alert-side-panel.md | 5 - .changeset/app-nav-badges-click-ui.md | 6 - .../axis-no-sub-thousand-abbreviation.md | 6 - .../cli-create-dashboards-saved-searches.md | 13 -- .changeset/collector-json-parse-noise.md | 8 - .changeset/column-sort-editors.md | 5 - .changeset/compact-search-layout.md | 7 - .changeset/configurable-content-font-size.md | 11 -- .changeset/date-picker-keep-year.md | 7 - .changeset/db-statement-index-prefilter.md | 5 - .changeset/demo-server-new-host.md | 5 - .changeset/error-span-predicate.md | 5 - .changeset/external-api-promql-source-gate.md | 7 - .../external-api-promql-tile-validation.md | 7 - .changeset/external-api-promql-tiles.md | 7 - .changeset/filter-keys-limit-per-map.md | 7 - .changeset/fix-order-by-sort-state-parser.md | 5 - .changeset/fix-row-details-id-where.md | 5 - .changeset/green-needles-love.md | 5 - .changeset/import-adhoc-filter-sources.md | 5 - .changeset/kubernetes-badges-click-ui.md | 6 - .changeset/line-interpolation.md | 7 - .changeset/llm-badges-click-ui.md | 6 - .changeset/mcp-response-size-telemetry.md | 5 - .changeset/mcp-saved-search-where-language.md | 5 - .changeset/mcp-server-metadata.md | 5 - .changeset/mcp-service-health-tool.md | 7 - .changeset/mcp-sql-interval-params.md | 9 - .changeset/mcp-sql-source-id.md | 8 - .changeset/mcp-sql-table-names.md | 9 - .changeset/mcp-tool-annotations.md | 5 - .changeset/mcp-tool-descriptions.md | 6 - .../metrics-charts-mv-badges-click-ui.md | 7 - .changeset/multi-source-key-values.md | 5 - .changeset/nested-filter-keep-expanded.md | 7 - .changeset/nested-filter-key-search.md | 7 - .changeset/nested-filter-keys-sorted.md | 7 - .changeset/nice-cows-hug.md | 7 - .changeset/otel-semconv-exceptions.md | 12 -- .changeset/otel-semconv-http.md | 5 - .changeset/per-connection-all-fields.md | 5 - .changeset/percentile-aggfn-quantile.md | 11 -- .changeset/promql-histogram-heatmap.md | 6 - .changeset/promql-remote-write-https.md | 12 -- .changeset/promql-source-id.md | 9 - .changeset/proxy-parsed-bodies.md | 7 - .changeset/quick-rum-scope.md | 5 - .changeset/react-query-5-90.md | 6 - .changeset/release-marker-tooltip-wrap.md | 5 - .changeset/remaining-badges-click-ui.md | 8 - .changeset/replay-search-multiline-sql.md | 5 - .changeset/row-lookup-block-offset.md | 8 - .changeset/service-map-sampling-storage.md | 5 - .changeset/source-event-name-expression.md | 10 -- .../source-severity-number-expression.md | 10 -- .changeset/split-value-button.md | 5 - .changeset/stream-filter-values.md | 7 - .changeset/tags-settings-badges-click-ui.md | 7 - .changeset/tidy-tile-menu-groups.md | 5 - .changeset/tile-description-editor.md | 9 - .changeset/tile-description-tooltip.md | 8 - .changeset/time-picker-time-zone.md | 6 - .changeset/time-zone-preference.md | 7 - .changeset/time-zone-select.md | 5 - .../trace-span-follows-opened-result.md | 5 - .../v2-search-subsecond-start-max-results.md | 6 - .../webhook-body-template-api-validation.md | 9 - .../webhook-body-template-validation.md | 8 - .changeset/webhook-group-by-vars.md | 7 - .env | 4 +- packages/api/CHANGELOG.md | 108 ++++++++++++ packages/api/package.json | 4 +- packages/app/CHANGELOG.md | 164 ++++++++++++++++++ packages/app/package.json | 4 +- packages/cli/CHANGELOG.md | 18 ++ packages/cli/package.json | 4 +- packages/common-utils/CHANGELOG.md | 50 ++++++ packages/common-utils/package.json | 2 +- packages/otel-collector/CHANGELOG.md | 16 ++ packages/otel-collector/package.json | 2 +- yarn.lock | 8 +- 88 files changed, 370 insertions(+), 528 deletions(-) delete mode 100644 .changeset/adhoc-filter-broadcast.md delete mode 100644 .changeset/adhoc-filter-click-search.md delete mode 100644 .changeset/adhoc-filter-click-table.md delete mode 100644 .changeset/adhoc-filter-click-timechart.md delete mode 100644 .changeset/adhoc-filter-inputs.md delete mode 100644 .changeset/adhoc-filter-schemas.md delete mode 100644 .changeset/adhoc-filter-ui.md delete mode 100644 .changeset/alert-side-panel.md delete mode 100644 .changeset/app-nav-badges-click-ui.md delete mode 100644 .changeset/axis-no-sub-thousand-abbreviation.md delete mode 100644 .changeset/cli-create-dashboards-saved-searches.md delete mode 100644 .changeset/collector-json-parse-noise.md delete mode 100644 .changeset/column-sort-editors.md delete mode 100644 .changeset/compact-search-layout.md delete mode 100644 .changeset/configurable-content-font-size.md delete mode 100644 .changeset/date-picker-keep-year.md delete mode 100644 .changeset/db-statement-index-prefilter.md delete mode 100644 .changeset/demo-server-new-host.md delete mode 100644 .changeset/error-span-predicate.md delete mode 100644 .changeset/external-api-promql-source-gate.md delete mode 100644 .changeset/external-api-promql-tile-validation.md delete mode 100644 .changeset/external-api-promql-tiles.md delete mode 100644 .changeset/filter-keys-limit-per-map.md delete mode 100644 .changeset/fix-order-by-sort-state-parser.md delete mode 100644 .changeset/fix-row-details-id-where.md delete mode 100644 .changeset/green-needles-love.md delete mode 100644 .changeset/import-adhoc-filter-sources.md delete mode 100644 .changeset/kubernetes-badges-click-ui.md delete mode 100644 .changeset/line-interpolation.md delete mode 100644 .changeset/llm-badges-click-ui.md delete mode 100644 .changeset/mcp-response-size-telemetry.md delete mode 100644 .changeset/mcp-saved-search-where-language.md delete mode 100644 .changeset/mcp-server-metadata.md delete mode 100644 .changeset/mcp-service-health-tool.md delete mode 100644 .changeset/mcp-sql-interval-params.md delete mode 100644 .changeset/mcp-sql-source-id.md delete mode 100644 .changeset/mcp-sql-table-names.md delete mode 100644 .changeset/mcp-tool-annotations.md delete mode 100644 .changeset/mcp-tool-descriptions.md delete mode 100644 .changeset/metrics-charts-mv-badges-click-ui.md delete mode 100644 .changeset/multi-source-key-values.md delete mode 100644 .changeset/nested-filter-keep-expanded.md delete mode 100644 .changeset/nested-filter-key-search.md delete mode 100644 .changeset/nested-filter-keys-sorted.md delete mode 100644 .changeset/nice-cows-hug.md delete mode 100644 .changeset/otel-semconv-exceptions.md delete mode 100644 .changeset/otel-semconv-http.md delete mode 100644 .changeset/per-connection-all-fields.md delete mode 100644 .changeset/percentile-aggfn-quantile.md delete mode 100644 .changeset/promql-histogram-heatmap.md delete mode 100644 .changeset/promql-remote-write-https.md delete mode 100644 .changeset/promql-source-id.md delete mode 100644 .changeset/proxy-parsed-bodies.md delete mode 100644 .changeset/quick-rum-scope.md delete mode 100644 .changeset/react-query-5-90.md delete mode 100644 .changeset/release-marker-tooltip-wrap.md delete mode 100644 .changeset/remaining-badges-click-ui.md delete mode 100644 .changeset/replay-search-multiline-sql.md delete mode 100644 .changeset/row-lookup-block-offset.md delete mode 100644 .changeset/service-map-sampling-storage.md delete mode 100644 .changeset/source-event-name-expression.md delete mode 100644 .changeset/source-severity-number-expression.md delete mode 100644 .changeset/split-value-button.md delete mode 100644 .changeset/stream-filter-values.md delete mode 100644 .changeset/tags-settings-badges-click-ui.md delete mode 100644 .changeset/tidy-tile-menu-groups.md delete mode 100644 .changeset/tile-description-editor.md delete mode 100644 .changeset/tile-description-tooltip.md delete mode 100644 .changeset/time-picker-time-zone.md delete mode 100644 .changeset/time-zone-preference.md delete mode 100644 .changeset/time-zone-select.md delete mode 100644 .changeset/trace-span-follows-opened-result.md delete mode 100644 .changeset/v2-search-subsecond-start-max-results.md delete mode 100644 .changeset/webhook-body-template-api-validation.md delete mode 100644 .changeset/webhook-body-template-validation.md delete mode 100644 .changeset/webhook-group-by-vars.md diff --git a/.changeset/adhoc-filter-broadcast.md b/.changeset/adhoc-filter-broadcast.md deleted file mode 100644 index c4f2cbb576..0000000000 --- a/.changeset/adhoc-filter-broadcast.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -feat: Broadcast adhoc dashboard filter conditions diff --git a/.changeset/adhoc-filter-click-search.md b/.changeset/adhoc-filter-click-search.md deleted file mode 100644 index 0a9e3f635f..0000000000 --- a/.changeset/adhoc-filter-click-search.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -feat: Filter search tile cells into adhoc dashboard filters diff --git a/.changeset/adhoc-filter-click-table.md b/.changeset/adhoc-filter-click-table.md deleted file mode 100644 index 090f5266cf..0000000000 --- a/.changeset/adhoc-filter-click-table.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -feat: Filter table tile group-by cells into adhoc dashboard filters diff --git a/.changeset/adhoc-filter-click-timechart.md b/.changeset/adhoc-filter-click-timechart.md deleted file mode 100644 index 78c2baf334..0000000000 --- a/.changeset/adhoc-filter-click-timechart.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: Filter time chart series into adhoc dashboard filters diff --git a/.changeset/adhoc-filter-inputs.md b/.changeset/adhoc-filter-inputs.md deleted file mode 100644 index 48162bfae0..0000000000 --- a/.changeset/adhoc-filter-inputs.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -feat: Render adhoc dashboard filter inputs diff --git a/.changeset/adhoc-filter-schemas.md b/.changeset/adhoc-filter-schemas.md deleted file mode 100644 index 1a7777dc09..0000000000 --- a/.changeset/adhoc-filter-schemas.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/api': patch -'@hyperdx/app': patch ---- - -feat: Add ad hoc dashboard filter schemas and types diff --git a/.changeset/adhoc-filter-ui.md b/.changeset/adhoc-filter-ui.md deleted file mode 100644 index 0a464f980a..0000000000 --- a/.changeset/adhoc-filter-ui.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -feat: Add UI for configuring adhoc dashboard filters diff --git a/.changeset/alert-side-panel.md b/.changeset/alert-side-panel.md deleted file mode 100644 index f76017b3e8..0000000000 --- a/.changeset/alert-side-panel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': minor ---- - -feat: Edit chart alerts in a side panel docked beside the chart editor, so the preview chart stays in view while the alert is tuned. "Add alert" / "Edit alert" opens the panel; a new alert is kept with "Add alert" and an existing one with "Update alert", while closing the panel discards the changes. The panel fills the editor's visible height and can be resized from its left edge. Save and Cancel move to the chart name row. diff --git a/.changeset/app-nav-badges-click-ui.md b/.changeset/app-nav-badges-click-ui.md deleted file mode 100644 index 67a0fd2e73..0000000000 --- a/.changeset/app-nav-badges-click-ui.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: use the click-ui `Badge` for the sidebar "Beta", "UTC", and instance -label badges, and for the "Latest", "New", and "Breaking" badges in What's new. diff --git a/.changeset/axis-no-sub-thousand-abbreviation.md b/.changeset/axis-no-sub-thousand-abbreviation.md deleted file mode 100644 index 1812158e5c..0000000000 --- a/.changeset/axis-no-sub-thousand-abbreviation.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/app': patch -'@hyperdx/cli': patch ---- - -fix: Stop abbreviating values between 500 and 999 as "0.5k"/"0.8k" on chart axes and in large number format diff --git a/.changeset/cli-create-dashboards-saved-searches.md b/.changeset/cli-create-dashboards-saved-searches.md deleted file mode 100644 index 0a7d280c86..0000000000 --- a/.changeset/cli-create-dashboards-saved-searches.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@hyperdx/cli': minor ---- - -Add dashboard and saved-search authoring commands to the CLI: - -- `hdx dashboards list` (default subcommand) gains `--query` name filtering and `--format table|json|csv` -- `hdx dashboards export --id ` prints a dashboard definition as JSON, round-trip compatible with import -- `hdx dashboards create` accepts either a full definition (`--file `) or inline charts (`--name` + repeatable `--chart` / `--chart-file`, with automatic grid layout), plus `--if-not-exists` -- `hdx dashboards import --file ` recreates an exported dashboard, with `--if-not-exists` and `--name-override` -- `hdx saved-searches` command group: `list` and `create` (`--name/--source/--where/--where-language/--select/--order-by/--tags`) - -Definitions are validated locally against the shared schema before being sent, and missing tile ids are generated automatically. Also fixes `getSavedSearches()` to call the correct `/saved-search` API path (the previous `/saved-searches` path always returned 404). diff --git a/.changeset/collector-json-parse-noise.md b/.changeset/collector-json-parse-noise.md deleted file mode 100644 index 071de98511..0000000000 --- a/.changeset/collector-json-parse-noise.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperdx/otel-collector': patch ---- - -Stop the collector logging a `ParseJSON` syntax error for every log body that -contains braces but isn't JSON (e.g. Go struct or Python dict dumps). JSON -extraction now only matches objects that start with a quoted key, and remaining -parse failures in that statement group are silenced. diff --git a/.changeset/column-sort-editors.md b/.changeset/column-sort-editors.md deleted file mode 100644 index 3e9a1bcd1e..0000000000 --- a/.changeset/column-sort-editors.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -When a removed column is one field in a multi-field sort, drop only that field diff --git a/.changeset/compact-search-layout.md b/.changeset/compact-search-layout.md deleted file mode 100644 index 95f4e21bb3..0000000000 --- a/.changeset/compact-search-layout.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: saved search is usable on a phone. Below 900px the filters open in a -drawer, SELECT and ORDER BY stay behind "Columns", and the log table -keeps the remaining screen. diff --git a/.changeset/configurable-content-font-size.md b/.changeset/configurable-content-font-size.md deleted file mode 100644 index 6e12a975bb..0000000000 --- a/.changeset/configurable-content-font-size.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@hyperdx/app': minor ---- - -feat: add a content font size preference - -Small text in the log/trace table was not adjustable without browser zoom, which -also shrinks the surrounding chrome. User preferences now carry a **Content font -size** setting (small / medium / large) that scales the search results table, -data tables, expanded row JSON, and chart axes, legends, and tooltips. Small is -the default and matches the previous sizes, so nothing changes until you opt in. diff --git a/.changeset/date-picker-keep-year.md b/.changeset/date-picker-keep-year.md deleted file mode 100644 index f29836bc9a..0000000000 --- a/.changeset/date-picker-keep-year.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: the time picker no longer resets a selected date range to the current -year. The range text now includes the year when the range isn't in the current -year (or reaches into the future), so it survives being re-parsed. diff --git a/.changeset/db-statement-index-prefilter.md b/.changeset/db-statement-index-prefilter.md deleted file mode 100644 index 1b89ff782e..0000000000 --- a/.changeset/db-statement-index-prefilter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: Let the Services > Database query drawer use the span attribute skip index instead of scanning the whole trace window diff --git a/.changeset/demo-server-new-host.md b/.changeset/demo-server-new-host.md deleted file mode 100644 index 40d515ed39..0000000000 --- a/.changeset/demo-server-new-host.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: point the "Connect to Demo Server" connection at the new demo ClickHouse diff --git a/.changeset/error-span-predicate.md b/.changeset/error-span-predicate.md deleted file mode 100644 index 6856153a68..0000000000 --- a/.changeset/error-span-predicate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -Count spans recorded with the legacy `STATUS_CODE_ERROR` status as errors on the Services and LLM dashboards. The errored-span definition now lives in one place and matches both that value and the short `Error` form, so those dashboards no longer undercount errors from collectors that emit the long form. diff --git a/.changeset/external-api-promql-source-gate.md b/.changeset/external-api-promql-source-gate.md deleted file mode 100644 index c721f79d70..0000000000 --- a/.changeset/external-api-promql-source-gate.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -fix: Reject creating or updating PromQL sources through the external API when PromQL is not enabled - -`POST` and `PUT /api/v2/sources` now return a 400 for `kind: "promql"` unless `ENABLE_PROMQL` is set, since PromQL sources cannot be queried without it. diff --git a/.changeset/external-api-promql-tile-validation.md b/.changeset/external-api-promql-tile-validation.md deleted file mode 100644 index 031570105c..0000000000 --- a/.changeset/external-api-promql-tile-validation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -fix: Reject external API PromQL tiles that reference a non-PromQL source, and keep PromQL tiles when an MCP agent updates a dashboard - -`/api/v2/dashboards` now returns a 400 when a PromQL tile's `sourceId` is not a PromQL source. MCP `clickstack_save_dashboard` updates no longer delete the PromQL tiles that MCP hides from agents. diff --git a/.changeset/external-api-promql-tiles.md b/.changeset/external-api-promql-tiles.md deleted file mode 100644 index 1ca68d292a..0000000000 --- a/.changeset/external-api-promql-tiles.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': minor ---- - -feat: Support PromQL dashboard tiles in the external API - -`/api/v2/dashboards` now returns PromQL tiles and accepts them on create and update, as `configType: "promql"` with a `sourceId` and a list of `expressions`. Previously PromQL tiles were left out of responses, so saving a dashboard back through the API deleted them. MCP dashboard tools still hide PromQL tiles until they support editing them. diff --git a/.changeset/filter-keys-limit-per-map.md b/.changeset/filter-keys-limit-per-map.md deleted file mode 100644 index 2939bbc6ea..0000000000 --- a/.changeset/filter-keys-limit-per-map.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: the search page filter key limit (Filter Keys Fetch Limit, default 100) -now applies to each Map column, so keys from `LogAttributes` no longer crowd out -`ResourceAttributes` and other Map columns diff --git a/.changeset/fix-order-by-sort-state-parser.md b/.changeset/fix-order-by-sort-state-parser.md deleted file mode 100644 index 7f5d523a85..0000000000 --- a/.changeset/fix-order-by-sort-state-parser.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: Fix table sort state and support order by without asc/desc diff --git a/.changeset/fix-row-details-id-where.md b/.changeset/fix-row-details-id-where.md deleted file mode 100644 index 8d339eb024..0000000000 --- a/.changeset/fix-row-details-id-where.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -Fix expanding a row on tables with a string `id` column: row details now keep the internal WHERE-clause id instead of being overwritten by the raw column value (#3370) diff --git a/.changeset/green-needles-love.md b/.changeset/green-needles-love.md deleted file mode 100644 index b65d1798ff..0000000000 --- a/.changeset/green-needles-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@hyperdx/app": patch ---- - -feat: Add group-by to the search page histogram diff --git a/.changeset/import-adhoc-filter-sources.md b/.changeset/import-adhoc-filter-sources.md deleted file mode 100644 index d7828bcc0c..0000000000 --- a/.changeset/import-adhoc-filter-sources.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: Support source remapping during ad hoc filter import diff --git a/.changeset/kubernetes-badges-click-ui.md b/.changeset/kubernetes-badges-click-ui.md deleted file mode 100644 index af4e3a1d9c..0000000000 --- a/.changeset/kubernetes-badges-click-ui.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: use the click-ui `Badge` for all status badges on the Kubernetes dashboard -and its node, namespace, and pod drawers. diff --git a/.changeset/line-interpolation.md b/.changeset/line-interpolation.md deleted file mode 100644 index 6af6565bff..0000000000 --- a/.changeset/line-interpolation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/api': patch -'@hyperdx/app': patch ---- - -feat: Add a line interpolation display setting (smooth, linear, step) diff --git a/.changeset/llm-badges-click-ui.md b/.changeset/llm-badges-click-ui.md deleted file mode 100644 index 8a7d098518..0000000000 --- a/.changeset/llm-badges-click-ui.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: use the click-ui `Badge` for the model, provider, tool, agent, and chat -role badges in the LLM span panel, session drawer, and dashboard. diff --git a/.changeset/mcp-response-size-telemetry.md b/.changeset/mcp-response-size-telemetry.md deleted file mode 100644 index 433069b657..0000000000 --- a/.changeset/mcp-response-size-telemetry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -feat(mcp): record the response size of each MCP tool call diff --git a/.changeset/mcp-saved-search-where-language.md b/.changeset/mcp-saved-search-where-language.md deleted file mode 100644 index 5e13e20238..0000000000 --- a/.changeset/mcp-saved-search-where-language.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -fix(mcp): store whereLanguage as lucene when clickstack_save_saved_search creates a search without one, so its alerts no longer parse a Lucene filter as SQL diff --git a/.changeset/mcp-server-metadata.md b/.changeset/mcp-server-metadata.md deleted file mode 100644 index 45f2114e8d..0000000000 --- a/.changeset/mcp-server-metadata.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -feat(mcp): advertise a title, description, website URL, and SVG icon in the MCP server's initialize response diff --git a/.changeset/mcp-service-health-tool.md b/.changeset/mcp-service-health-tool.md deleted file mode 100644 index 9df837c658..0000000000 --- a/.changeset/mcp-service-health-tool.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': minor -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -feat(mcp): add `clickstack_service_health`, a one-call per-service health report for a trace source (throughput, error rate, p50/p95/p99, top error groups), compared with yesterday and ranked worst first diff --git a/.changeset/mcp-sql-interval-params.md b/.changeset/mcp-sql-interval-params.md deleted file mode 100644 index 36ee9c4270..0000000000 --- a/.changeset/mcp-sql-interval-params.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -fix(mcp): `clickstack_sql` now binds the bucket-size parameters its description -advertises. `{intervalSeconds:Int64}`, `{intervalMilliseconds:Int64}`, -`$__interval_s`, `$__timeInterval` and `$__timeInterval_ms` used to fail with -"Substitution intervalSeconds is not set", including the tool's own time-series -example. diff --git a/.changeset/mcp-sql-source-id.md b/.changeset/mcp-sql-source-id.md deleted file mode 100644 index 56fb54907a..0000000000 --- a/.changeset/mcp-sql-source-id.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -feat(mcp): `clickstack_sql` accepts an optional `sourceId`, so `$__sourceTable` -expands to that source's table. Unknown sources, other teams' sources, and a -source on a different connection than `connectionId` are rejected, as is -`$__sourceTable` without a `sourceId`. diff --git a/.changeset/mcp-sql-table-names.md b/.changeset/mcp-sql-table-names.md deleted file mode 100644 index 110346f367..0000000000 --- a/.changeset/mcp-sql-table-names.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -fix(mcp): stop `clickstack_sql` callers from guessing table and timestamp column -names. `clickstack_list_sources` now returns each source's database-qualified -`table` (and `database` for metric sources), the `sql` examples use `` -and `` placeholders instead of `otel_logs` and `TimestampTime`, -and unknown-table errors from `clickstack_sql` point at `clickstack_list_sources`. diff --git a/.changeset/mcp-tool-annotations.md b/.changeset/mcp-tool-annotations.md deleted file mode 100644 index 0f5f65f677..0000000000 --- a/.changeset/mcp-tool-annotations.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -feat(mcp): declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint on every MCP tool diff --git a/.changeset/mcp-tool-descriptions.md b/.changeset/mcp-tool-descriptions.md deleted file mode 100644 index 68455c9e4e..0000000000 --- a/.changeset/mcp-tool-descriptions.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/api': patch -'@hyperdx/common-utils': patch ---- - -fix(mcp): describe every MCP tool input, drop descriptions that restate schema constraints, and keep tool descriptions under Claude Code's 2 KB limit diff --git a/.changeset/metrics-charts-mv-badges-click-ui.md b/.changeset/metrics-charts-mv-badges-click-ui.md deleted file mode 100644 index 4cdff1c60f..0000000000 --- a/.changeset/metrics-charts-mv-badges-click-ui.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: use the click-ui `Badge` in the metric explorer, the chart series and -formula editors, the tile alert editor, the materialized view indicator and -modal, and the span kind in the row side panel. diff --git a/.changeset/multi-source-key-values.md b/.changeset/multi-source-key-values.md deleted file mode 100644 index 604469e235..0000000000 --- a/.changeset/multi-source-key-values.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -refactor: Look up every source in useMultipleGetKeyValues and keep partial results when one fails diff --git a/.changeset/nested-filter-keep-expanded.md b/.changeset/nested-filter-keep-expanded.md deleted file mode 100644 index 1c8357408d..0000000000 --- a/.changeset/nested-filter-keep-expanded.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: keys inside Map and JSON filter groups (e.g. `LogAttributes`) in the search -page filter sidebar stay expanded or collapsed after scrolling them out of view -and back. diff --git a/.changeset/nested-filter-key-search.md b/.changeset/nested-filter-key-search.md deleted file mode 100644 index 1a8a304d26..0000000000 --- a/.changeset/nested-filter-key-search.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: add a key search to Map and JSON filter groups (e.g. `ResourceAttributes`, -`LogAttributes`) in the search page filter sidebar, matching the value search on -regular filters. diff --git a/.changeset/nested-filter-keys-sorted.md b/.changeset/nested-filter-keys-sorted.md deleted file mode 100644 index c385a9361f..0000000000 --- a/.changeset/nested-filter-keys-sorted.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: keys inside Map and JSON filter groups (e.g. `LogAttributes`) in the search -page filter sidebar are sorted alphabetically, after keys with a selected value -and pinned keys. diff --git a/.changeset/nice-cows-hug.md b/.changeset/nice-cows-hug.md deleted file mode 100644 index 74f51a6c2f..0000000000 --- a/.changeset/nice-cows-hug.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@hyperdx/common-utils": patch -"@hyperdx/api": patch -"@hyperdx/app": patch ---- - -feat: Support distribution heatmaps calculated from promql data diff --git a/.changeset/otel-semconv-exceptions.md b/.changeset/otel-semconv-exceptions.md deleted file mode 100644 index 6712b348af..0000000000 --- a/.changeset/otel-semconv-exceptions.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: Show the Exception panel for logs and spans that carry `exception.type`, -`exception.message` or `exception.stacktrace` attributes, not only for -`exception` span events; show correlated logs in the trace waterfall even when -their span was never exported, and color error logs and `exception` span events -red there; and set `spanEventsValueExpression` and `spanLinksValueExpression` on -the default trace sources so span exceptions and links load out of the box. The -default sources also gain the summary and exponential histogram metric tables -and drop key rollup tables the schema no longer creates. diff --git a/.changeset/otel-semconv-http.md b/.changeset/otel-semconv-http.md deleted file mode 100644 index 96f7da462f..0000000000 --- a/.changeset/otel-semconv-http.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: Read current OpenTelemetry HTTP and RPC semantic conventions (with deprecated names as fallbacks) in the span side panel and trace waterfall: redesign the HTTP panel around a request line and details, add a gRPC/RPC call panel, and flag correlated log errors and warnings by SeverityNumber or case-insensitive SeverityText diff --git a/.changeset/per-connection-all-fields.md b/.changeset/per-connection-all-fields.md deleted file mode 100644 index 874e4d627e..0000000000 --- a/.changeset/per-connection-all-fields.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -refactor: useMultipleAllFields returns each table connection's fields and columns. diff --git a/.changeset/percentile-aggfn-quantile.md b/.changeset/percentile-aggfn-quantile.md deleted file mode 100644 index 5650a22184..0000000000 --- a/.changeset/percentile-aggfn-quantile.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/api': patch -'@hyperdx/app': patch ---- - -fix: render percentile aggregations (`p50`, `p90`, `p95`, `p99`) as `quantile` -at the matching level. A chart config with `aggFn: 'p95'` rendered as the -nonexistent ClickHouse function `p95If`. The AI assistant now returns -percentiles with a level instead of a bare `quantile` (median), and v1 metric -chart conversion keeps the percentile level. diff --git a/.changeset/promql-histogram-heatmap.md b/.changeset/promql-histogram-heatmap.md deleted file mode 100644 index a86ac25ecf..0000000000 --- a/.changeset/promql-histogram-heatmap.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@hyperdx/common-utils": patch -"@hyperdx/app": patch ---- - -feat: Support histogram heatmaps from PromQL bucket metrics diff --git a/.changeset/promql-remote-write-https.md b/.changeset/promql-remote-write-https.md deleted file mode 100644 index 57e6300f18..0000000000 --- a/.changeset/promql-remote-write-https.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@hyperdx/otel-collector': patch -'@hyperdx/api': patch ---- - -fix: support https for the PromQL remote-write endpoint and ClickHouse scraping - -`CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT` now accepts an `http://` or `https://` URL as well as a bare `host:port`. With `https://`, the collector's `prometheusremotewrite` exporter sends metrics over TLS and verifies the server certificate against the system CAs. Previously the exporter always used plain HTTP, so an HTTPS-only endpoint could not receive metrics. This applies to both standalone and OpAMP-managed collectors. - -A bare `host:port` keeps plain HTTP, so existing setups are unchanged. The value must not include a path (`/write` is still appended automatically); the collector now exits at startup with a clear error if it does, or if the scheme is anything other than `http` or `https`. - -The OpAMP-managed collector scraped the endpoint over plain HTTP regardless of its scheme. ClickHouse is now scraped in its own `clickhouse` job (previously the `otelcol` job) using the endpoint's scheme, with TLS verification on. The collector's own metrics endpoint stays on plain HTTP. A bare `host:port` or `http://` endpoint behaves as before. Scraped ClickHouse metrics now carry `job="clickhouse"` instead of `job="otelcol"`. diff --git a/.changeset/promql-source-id.md b/.changeset/promql-source-id.md deleted file mode 100644 index aa8ded27e6..0000000000 --- a/.changeset/promql-source-id.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/api': patch -'@hyperdx/app': patch ---- - -fix: Resolve PromQL queries through the source instead of a caller-supplied connection and table - -The `/api/v1/prometheus/*` routes now take `sourceId` instead of `connectionId`, and read the connection and TimeSeries table from that PromQL source. Caller-supplied `database`/`table` params are ignored for ClickHouse and no longer forwarded to external Prometheus endpoints. Saved PromQL chart configs now require `source` and no longer persist `connection`, so provisioned dashboards with PromQL tiles must set `source`. diff --git a/.changeset/proxy-parsed-bodies.md b/.changeset/proxy-parsed-bodies.md deleted file mode 100644 index b947b44a10..0000000000 --- a/.changeset/proxy-parsed-bodies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -Forward the bytes consumed by the ClickHouse proxy's body parsers without -changing JSON values, form fields or text encodings. Keep request framing in -sync with inflated bytes and preserve unparsed multipart streams. diff --git a/.changeset/quick-rum-scope.md b/.changeset/quick-rum-scope.md deleted file mode 100644 index 5d949e8dbc..0000000000 --- a/.changeset/quick-rum-scope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -speed up the sessions query by scoping the trace scan to RUM services diff --git a/.changeset/react-query-5-90.md b/.changeset/react-query-5-90.md deleted file mode 100644 index c2829c599d..0000000000 --- a/.changeset/react-query-5-90.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -chore: upgrade @tanstack/react-query to 5.90 and keep a cancelled filter -values stream's partial results out of the cache diff --git a/.changeset/release-marker-tooltip-wrap.md b/.changeset/release-marker-tooltip-wrap.md deleted file mode 100644 index 14da3bc9de..0000000000 --- a/.changeset/release-marker-tooltip-wrap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: Wrap long values in release marker tooltips instead of overflowing diff --git a/.changeset/remaining-badges-click-ui.md b/.changeset/remaining-badges-click-ui.md deleted file mode 100644 index edd6878dbf..0000000000 --- a/.changeset/remaining-badges-click-ui.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: use the click-ui `Badge` for the exception breadcrumb status and level -chips, the AI Assistant "Experimental" label, and the materialized view config -pills. Remove the unused stacktrace, breadcrumb, and source map code from -`LogSidePanelElements`, and the unused `StacktraceFrame` component. diff --git a/.changeset/replay-search-multiline-sql.md b/.changeset/replay-search-multiline-sql.md deleted file mode 100644 index 2eccf15844..0000000000 --- a/.changeset/replay-search-multiline-sql.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: Preserve multi-line SQL in search replay links diff --git a/.changeset/row-lookup-block-offset.md b/.changeset/row-lookup-block-offset.md deleted file mode 100644 index 5328e0257b..0000000000 --- a/.changeset/row-lookup-block-offset.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: resolve row details with the primary key plus whichever of `_block_number` -/ `_block_offset` the table persists, instead of falling back to the slow -full-row lookup when only one of `enable_block_number_column` / -`enable_block_offset_column` is set diff --git a/.changeset/service-map-sampling-storage.md b/.changeset/service-map-sampling-storage.md deleted file mode 100644 index e4dc2adb08..0000000000 --- a/.changeset/service-map-sampling-storage.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: Remember the service map sampling rate in local storage; a `samplingFactor` URL param still takes precedence diff --git a/.changeset/source-event-name-expression.md b/.changeset/source-event-name-expression.md deleted file mode 100644 index 9aabbcf7af..0000000000 --- a/.changeset/source-event-name-expression.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@hyperdx/common-utils': minor -'@hyperdx/app': minor -'@hyperdx/api': minor ---- - -Add an optional `eventNameExpression` to log sources, pointing at the -OpenTelemetry log EventName. Source auto-detection sets it when an OTel log -table has a string `EventName` column. The field is stored and editable only: -nothing reads it yet. HDX-5787 diff --git a/.changeset/source-severity-number-expression.md b/.changeset/source-severity-number-expression.md deleted file mode 100644 index 6ac30b61ca..0000000000 --- a/.changeset/source-severity-number-expression.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@hyperdx/common-utils': minor -'@hyperdx/app': minor -'@hyperdx/api': minor ---- - -Add an optional `severityNumberExpression` to log sources, pointing at the -numeric OpenTelemetry SeverityNumber (1-24). Source auto-detection sets it when -an OTel log table has an integer `SeverityNumber` column. The field is stored -and editable only: log levels still come from the severity text. diff --git a/.changeset/split-value-button.md b/.changeset/split-value-button.md deleted file mode 100644 index 4c6d3339f6..0000000000 --- a/.changeset/split-value-button.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -Show a Group by field count as a number on a narrow screen diff --git a/.changeset/stream-filter-values.md b/.changeset/stream-filter-values.md deleted file mode 100644 index d9d7ab082e..0000000000 --- a/.changeset/stream-filter-values.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch -'@hyperdx/common-utils': patch ---- - -perf: stream filter values into the UI as each query finishes instead of -waiting for all of them diff --git a/.changeset/tags-settings-badges-click-ui.md b/.changeset/tags-settings-badges-click-ui.md deleted file mode 100644 index 62c374df26..0000000000 --- a/.changeset/tags-settings-badges-click-ui.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -feat: use the click-ui `Badge` for dashboard and alert tags, and for the -"Experimental", "Beta", "Disabled", "Dev only", team member, and pending -invite badges in settings. diff --git a/.changeset/tidy-tile-menu-groups.md b/.changeset/tidy-tile-menu-groups.md deleted file mode 100644 index 38e33c387d..0000000000 --- a/.changeset/tidy-tile-menu-groups.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -fix: Keep the dashboard tile menu on screen when a dashboard has many groups, by moving the group list into a scrollable "Move to group" submenu diff --git a/.changeset/tile-description-editor.md b/.changeset/tile-description-editor.md deleted file mode 100644 index 52b6172d58..0000000000 --- a/.changeset/tile-description-editor.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/api': patch -'@hyperdx/app': patch ---- - -Add a description field to the tile editor. The description is now stored on the -tile's chart config next to its name, and is kept for series tiles in the -external Dashboards API. diff --git a/.changeset/tile-description-tooltip.md b/.changeset/tile-description-tooltip.md deleted file mode 100644 index 9a5db5a4df..0000000000 --- a/.changeset/tile-description-tooltip.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/api': patch -'@hyperdx/app': patch ---- - -Add an optional tile description, accepted by the external Dashboards API and -shown as an info tooltip next to the tile name. diff --git a/.changeset/time-picker-time-zone.md b/.changeset/time-picker-time-zone.md deleted file mode 100644 index c4800eb37d..0000000000 --- a/.changeset/time-picker-time-zone.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -fix: Read and show time picker ranges in the display time zone, so applying a range with "Use UTC time" on no longer shifts it for users west of UTC diff --git a/.changeset/time-zone-preference.md b/.changeset/time-zone-preference.md deleted file mode 100644 index 2bfe3a8342..0000000000 --- a/.changeset/time-zone-preference.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch -'@hyperdx/api': patch ---- - -refactor: Store the time display setting as a time zone instead of a UTC switch, converting existing settings, and remove the `isUTC` option from `formatDate` diff --git a/.changeset/time-zone-select.md b/.changeset/time-zone-select.md deleted file mode 100644 index 258d5743f4..0000000000 --- a/.changeset/time-zone-select.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': minor ---- - -feat: Pick any time zone in User Preferences, replacing the "Use UTC time" switch. Local and UTC stay pinned at the top of the list diff --git a/.changeset/trace-span-follows-opened-result.md b/.changeset/trace-span-follows-opened-result.md deleted file mode 100644 index 0e6eb514c1..0000000000 --- a/.changeset/trace-span-follows-opened-result.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperdx/app': patch ---- - -Fix the trace waterfall sticking on the previously opened span when another span of the same trace is opened, including from a session replay. Closing the result clears the selected span. Opening a different result selects that result's span, including when the waterfall stays mounted on cached data. diff --git a/.changeset/v2-search-subsecond-start-max-results.md b/.changeset/v2-search-subsecond-start-max-results.md deleted file mode 100644 index 3378d287d2..0000000000 --- a/.changeset/v2-search-subsecond-start-max-results.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/api': patch ---- - -fix: Floor the time filter start to the precision of a coarse timestamp column (DateTime, DateTime64 below ms) when a finer column also filters the range, so a sub-second start no longer drops the rest of that tick; make the external API v2 search `maxResults` cap configurable via `EXTERNAL_API_SEARCH_MAX_RESULTS` (defaults to 2000, the previous hardcoded value) diff --git a/.changeset/webhook-body-template-api-validation.md b/.changeset/webhook-body-template-api-validation.md deleted file mode 100644 index 11880a9d8e..0000000000 --- a/.changeset/webhook-body-template-api-validation.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -fix: reject generic and incident.io webhook body templates that don't compile, -or that call a helper delivery doesn't register (e.g. a typo for `eq`), with a -400 on create, update, and test (internal API, External API v2, and MCP -`clickstack_save_webhook`). Add `POST /api/v2/webhooks/validate` to check a -webhook config without saving it, e.g. at Terraform plan time. diff --git a/.changeset/webhook-body-template-validation.md b/.changeset/webhook-body-template-validation.md deleted file mode 100644 index e541864458..0000000000 --- a/.changeset/webhook-body-template-validation.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperdx/common-utils': patch -'@hyperdx/app': patch ---- - -fix: the webhook form now compiles the body template as you edit it and shows -the Handlebars error with its line and column. A broken template used to give -no feedback until an alert failed to deliver. diff --git a/.changeset/webhook-group-by-vars.md b/.changeset/webhook-group-by-vars.md deleted file mode 100644 index c6429a60c2..0000000000 --- a/.changeset/webhook-group-by-vars.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': minor -'@hyperdx/app': minor -'@hyperdx/common-utils': minor ---- - -feat: expose group-by values to webhook body templates as `{{var.}}`, and keep them on resolve notifications diff --git a/.env b/.env index 2abe530b1b..631c45ffb1 100644 --- a/.env +++ b/.env @@ -8,8 +8,8 @@ NEXT_ALL_IN_ONE_IMAGE_NAME_DOCKERHUB=clickhouse/clickstack-all-in-one ALL_IN_ONE_IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx-all-in-one NEXT_OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB=clickhouse/clickstack-otel-collector OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx-otel-collector -CODE_VERSION=2.41.0 -IMAGE_VERSION_SUB_TAG=.41.0 +CODE_VERSION=2.42.0 +IMAGE_VERSION_SUB_TAG=.42.0 IMAGE_VERSION=2 IMAGE_NIGHTLY_TAG=2-nightly IMAGE_LATEST_TAG=latest diff --git a/packages/api/CHANGELOG.md b/packages/api/CHANGELOG.md index 9519e5e9f2..fee0b4d08f 100644 --- a/packages/api/CHANGELOG.md +++ b/packages/api/CHANGELOG.md @@ -1,5 +1,113 @@ # @hyperdx/api +## 2.42.0 + +### Minor Changes + +- 9c2c7031: feat: Support PromQL dashboard tiles in the external API + + `/api/v2/dashboards` now returns PromQL tiles and accepts them on create and update, as `configType: "promql"` with a `sourceId` and a list of `expressions`. Previously PromQL tiles were left out of responses, so saving a dashboard back through the API deleted them. MCP dashboard tools still hide PromQL tiles until they support editing them. + +- eb72cfa1: feat(mcp): add `clickstack_service_health`, a one-call per-service health report for a trace source (throughput, error rate, p50/p95/p99, top error groups), compared with yesterday and ranked worst first +- 95aef70f: Add an optional `eventNameExpression` to log sources, pointing at the + OpenTelemetry log EventName. Source auto-detection sets it when an OTel log + table has a string `EventName` column. The field is stored and editable only: + nothing reads it yet. HDX-5787 +- bc47e485: Add an optional `severityNumberExpression` to log sources, pointing at the + numeric OpenTelemetry SeverityNumber (1-24). Source auto-detection sets it when + an OTel log table has an integer `SeverityNumber` column. The field is stored + and editable only: log levels still come from the severity text. +- cfa865bd: feat: expose group-by values to webhook body templates as `{{var.}}`, and keep them on resolve notifications + +### Patch Changes + +- 9891a791: feat: Add ad hoc dashboard filter schemas and types +- 27cccf7a: fix: Reject creating or updating PromQL sources through the external API when PromQL is not enabled + + `POST` and `PUT /api/v2/sources` now return a 400 for `kind: "promql"` unless `ENABLE_PROMQL` is set, since PromQL sources cannot be queried without it. + +- 8d064df4: fix: Reject external API PromQL tiles that reference a non-PromQL source, and keep PromQL tiles when an MCP agent updates a dashboard + + `/api/v2/dashboards` now returns a 400 when a PromQL tile's `sourceId` is not a PromQL source. MCP `clickstack_save_dashboard` updates no longer delete the PromQL tiles that MCP hides from agents. + +- 0000fa4b: feat: Add a line interpolation display setting (smooth, linear, step) +- ee9f84b2: feat(mcp): record the response size of each MCP tool call +- 24d324c2: fix(mcp): store whereLanguage as lucene when clickstack_save_saved_search creates a search without one, so its alerts no longer parse a Lucene filter as SQL +- 748315d7: feat(mcp): advertise a title, description, website URL, and SVG icon in the MCP server's initialize response +- cdfae457: fix(mcp): `clickstack_sql` now binds the bucket-size parameters its description + advertises. `{intervalSeconds:Int64}`, `{intervalMilliseconds:Int64}`, + `$__interval_s`, `$__timeInterval` and `$__timeInterval_ms` used to fail with + "Substitution intervalSeconds is not set", including the tool's own time-series + example. +- b00d4100: feat(mcp): `clickstack_sql` accepts an optional `sourceId`, so `$__sourceTable` + expands to that source's table. Unknown sources, other teams' sources, and a + source on a different connection than `connectionId` are rejected, as is + `$__sourceTable` without a `sourceId`. +- a06b17fb: fix(mcp): stop `clickstack_sql` callers from guessing table and timestamp column + names. `clickstack_list_sources` now returns each source's database-qualified + `table` (and `database` for metric sources), the `sql` examples use `
` + and `` placeholders instead of `otel_logs` and `TimestampTime`, + and unknown-table errors from `clickstack_sql` point at `clickstack_list_sources`. +- e494a46d: feat(mcp): declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint on every MCP tool +- 03f9fd5a: fix(mcp): describe every MCP tool input, drop descriptions that restate schema constraints, and keep tool descriptions under Claude Code's 2 KB limit +- 5cabc115: feat: Support distribution heatmaps calculated from promql data +- a4b63953: fix: render percentile aggregations (`p50`, `p90`, `p95`, `p99`) as `quantile` + at the matching level. A chart config with `aggFn: 'p95'` rendered as the + nonexistent ClickHouse function `p95If`. The AI assistant now returns + percentiles with a level instead of a bare `quantile` (median), and v1 metric + chart conversion keeps the percentile level. +- ca8e3fda: fix: support https for the PromQL remote-write endpoint and ClickHouse scraping + + `CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT` now accepts an `http://` or `https://` URL as well as a bare `host:port`. With `https://`, the collector's `prometheusremotewrite` exporter sends metrics over TLS and verifies the server certificate against the system CAs. Previously the exporter always used plain HTTP, so an HTTPS-only endpoint could not receive metrics. This applies to both standalone and OpAMP-managed collectors. + + A bare `host:port` keeps plain HTTP, so existing setups are unchanged. The value must not include a path (`/write` is still appended automatically); the collector now exits at startup with a clear error if it does, or if the scheme is anything other than `http` or `https`. + + The OpAMP-managed collector scraped the endpoint over plain HTTP regardless of its scheme. ClickHouse is now scraped in its own `clickhouse` job (previously the `otelcol` job) using the endpoint's scheme, with TLS verification on. The collector's own metrics endpoint stays on plain HTTP. A bare `host:port` or `http://` endpoint behaves as before. Scraped ClickHouse metrics now carry `job="clickhouse"` instead of `job="otelcol"`. + +- c94d12c3: fix: Resolve PromQL queries through the source instead of a caller-supplied connection and table + + The `/api/v1/prometheus/*` routes now take `sourceId` instead of `connectionId`, and read the connection and TimeSeries table from that PromQL source. Caller-supplied `database`/`table` params are ignored for ClickHouse and no longer forwarded to external Prometheus endpoints. Saved PromQL chart configs now require `source` and no longer persist `connection`, so provisioned dashboards with PromQL tiles must set `source`. + +- be5304dd: Forward the bytes consumed by the ClickHouse proxy's body parsers without + changing JSON values, form fields or text encodings. Keep request framing in + sync with inflated bytes and preserve unparsed multipart streams. +- af6e7f6b: Add a description field to the tile editor. The description is now stored on the + tile's chart config next to its name, and is kept for series tiles in the + external Dashboards API. +- 02080f20: Add an optional tile description, accepted by the external Dashboards API and + shown as an info tooltip next to the tile name. +- ce6654dd: refactor: Store the time display setting as a time zone instead of a UTC switch, converting existing settings, and remove the `isUTC` option from `formatDate` +- 28168ae6: fix: Floor the time filter start to the precision of a coarse timestamp column (DateTime, DateTime64 below ms) when a finer column also filters the range, so a sub-second start no longer drops the rest of that tick; make the external API v2 search `maxResults` cap configurable via `EXTERNAL_API_SEARCH_MAX_RESULTS` (defaults to 2000, the previous hardcoded value) +- ecddea2a: fix: reject generic and incident.io webhook body templates that don't compile, + or that call a helper delivery doesn't register (e.g. a typo for `eq`), with a + 400 on create, update, and test (internal API, External API v2, and MCP + `clickstack_save_webhook`). Add `POST /api/v2/webhooks/validate` to check a + webhook config without saving it, e.g. at Terraform plan time. +- Updated dependencies [92058236] +- Updated dependencies [3e9185d1] +- Updated dependencies [180a1f1d] +- Updated dependencies [a682ce13] +- Updated dependencies [9891a791] +- Updated dependencies [43b09a7d] +- Updated dependencies [0000fa4b] +- Updated dependencies [eb72cfa1] +- Updated dependencies [03f9fd5a] +- Updated dependencies [5cabc115] +- Updated dependencies [a4b63953] +- Updated dependencies [3bedfab3] +- Updated dependencies [c94d12c3] +- Updated dependencies [95aef70f] +- Updated dependencies [bc47e485] +- Updated dependencies [85675fc8] +- Updated dependencies [af6e7f6b] +- Updated dependencies [02080f20] +- Updated dependencies [dab6eb89] +- Updated dependencies [ce6654dd] +- Updated dependencies [28168ae6] +- Updated dependencies [807cd9a5] +- Updated dependencies [cfa865bd] + - @hyperdx/common-utils@0.32.0 + ## 2.41.0 ### Minor Changes diff --git a/packages/api/package.json b/packages/api/package.json index 08270526ee..e1ca44871e 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@hyperdx/api", - "version": "2.41.0", + "version": "2.42.0", "license": "MIT", "private": true, "engines": { @@ -22,7 +22,7 @@ "@braintree/sanitize-url": "^7.1.1", "@clickhouse/client-common": "1.23.0-head.fae5998.1", "@esm2cjs/p-queue": "^7.3.0", - "@hyperdx/common-utils": "^0.31.0", + "@hyperdx/common-utils": "^0.32.0", "@hyperdx/node-opentelemetry": "^0.9.0", "@hyperdx/passport-local-mongoose": "^9.0.1", "@modelcontextprotocol/sdk": "^1.27.1", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 573b6faac8..1cc24432d4 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,169 @@ # @hyperdx/app +## 2.42.0 + +### Minor Changes + +- fe59feb9: feat: Edit chart alerts in a side panel docked beside the chart editor, so the preview chart stays in view while the alert is tuned. "Add alert" / "Edit alert" opens the panel; a new alert is kept with "Add alert" and an existing one with "Update alert", while closing the panel discards the changes. The panel fills the editor's visible height and can be resized from its left edge. Save and Cancel move to the chart name row. +- 1773c119: feat: add a content font size preference + + Small text in the log/trace table was not adjustable without browser zoom, which + also shrinks the surrounding chrome. User preferences now carry a **Content font + size** setting (small / medium / large) that scales the search results table, + data tables, expanded row JSON, and chart axes, legends, and tooltips. Small is + the default and matches the previous sizes, so nothing changes until you opt in. + +- 95aef70f: Add an optional `eventNameExpression` to log sources, pointing at the + OpenTelemetry log EventName. Source auto-detection sets it when an OTel log + table has a string `EventName` column. The field is stored and editable only: + nothing reads it yet. HDX-5787 +- bc47e485: Add an optional `severityNumberExpression` to log sources, pointing at the + numeric OpenTelemetry SeverityNumber (1-24). Source auto-detection sets it when + an OTel log table has an integer `SeverityNumber` column. The field is stored + and editable only: log levels still come from the severity text. +- 7eea0fd3: feat: Pick any time zone in User Preferences, replacing the "Use UTC time" switch. Local and UTC stay pinned at the top of the list +- cfa865bd: feat: expose group-by values to webhook body templates as `{{var.}}`, and keep them on resolve notifications + +### Patch Changes + +- 92058236: feat: Broadcast adhoc dashboard filter conditions +- 3e9185d1: feat: Filter search tile cells into adhoc dashboard filters +- 180a1f1d: feat: Filter table tile group-by cells into adhoc dashboard filters +- 7db73cff: feat: Filter time chart series into adhoc dashboard filters +- a682ce13: feat: Render adhoc dashboard filter inputs +- 9891a791: feat: Add ad hoc dashboard filter schemas and types +- 43b09a7d: feat: Add UI for configuring adhoc dashboard filters +- f56d760d: feat: use the click-ui `Badge` for the sidebar "Beta", "UTC", and instance + label badges, and for the "Latest", "New", and "Breaking" badges in What's new. +- 5253b861: fix: Stop abbreviating values between 500 and 999 as "0.5k"/"0.8k" on chart axes and in large number format +- 89ad2760: When a removed column is one field in a multi-field sort, drop only that field +- 4d74bd5b: fix: saved search is usable on a phone. Below 900px the filters open in a + drawer, SELECT and ORDER BY stay behind "Columns", and the log table + keeps the remaining screen. +- 72ed4062: fix: the time picker no longer resets a selected date range to the current + year. The range text now includes the year when the range isn't in the current + year (or reaches into the future), so it survives being re-parsed. +- c0af58bc: fix: Let the Services > Database query drawer use the span attribute skip index instead of scanning the whole trace window +- 0444e3ea: fix: point the "Connect to Demo Server" connection at the new demo ClickHouse +- f33fc83c: Count spans recorded with the legacy `STATUS_CODE_ERROR` status as errors on the Services and LLM dashboards. The errored-span definition now lives in one place and matches both that value and the short `Error` form, so those dashboards no longer undercount errors from collectors that emit the long form. +- a89b3241: fix: the search page filter key limit (Filter Keys Fetch Limit, default 100) + now applies to each Map column, so keys from `LogAttributes` no longer crowd out + `ResourceAttributes` and other Map columns +- 7d77d276: fix: Fix table sort state and support order by without asc/desc +- f1bdd8fa: Fix expanding a row on tables with a string `id` column: row details now keep the internal WHERE-clause id instead of being overwritten by the raw column value (#3370) +- f078e6be: feat: Add group-by to the search page histogram +- 0840b8b8: feat: Support source remapping during ad hoc filter import +- 2c2295fd: feat: use the click-ui `Badge` for all status badges on the Kubernetes dashboard + and its node, namespace, and pod drawers. +- 0000fa4b: feat: Add a line interpolation display setting (smooth, linear, step) +- 3db148a0: feat: use the click-ui `Badge` for the model, provider, tool, agent, and chat + role badges in the LLM span panel, session drawer, and dashboard. +- eb72cfa1: feat(mcp): add `clickstack_service_health`, a one-call per-service health report for a trace source (throughput, error rate, p50/p95/p99, top error groups), compared with yesterday and ranked worst first +- 938494d8: feat: use the click-ui `Badge` in the metric explorer, the chart series and + formula editors, the tile alert editor, the materialized view indicator and + modal, and the span kind in the row side panel. +- bc0a1e47: refactor: Look up every source in useMultipleGetKeyValues and keep partial results when one fails +- f21bdb85: fix: keys inside Map and JSON filter groups (e.g. `LogAttributes`) in the search + page filter sidebar stay expanded or collapsed after scrolling them out of view + and back. +- b000bbba: fix: add a key search to Map and JSON filter groups (e.g. `ResourceAttributes`, + `LogAttributes`) in the search page filter sidebar, matching the value search on + regular filters. +- 8b92b7ac: fix: keys inside Map and JSON filter groups (e.g. `LogAttributes`) in the search + page filter sidebar are sorted alphabetically, after keys with a selected value + and pinned keys. +- 5cabc115: feat: Support distribution heatmaps calculated from promql data +- e7b38c2a: fix: Show the Exception panel for logs and spans that carry `exception.type`, + `exception.message` or `exception.stacktrace` attributes, not only for + `exception` span events; show correlated logs in the trace waterfall even when + their span was never exported, and color error logs and `exception` span events + red there; and set `spanEventsValueExpression` and `spanLinksValueExpression` on + the default trace sources so span exceptions and links load out of the box. The + default sources also gain the summary and exponential histogram metric tables + and drop key rollup tables the schema no longer creates. +- 097cb7c0: fix: Read current OpenTelemetry HTTP and RPC semantic conventions (with deprecated names as fallbacks) in the span side panel and trace waterfall: redesign the HTTP panel around a request line and details, add a gRPC/RPC call panel, and flag correlated log errors and warnings by SeverityNumber or case-insensitive SeverityText +- 07de6134: refactor: useMultipleAllFields returns each table connection's fields and columns. +- a4b63953: fix: render percentile aggregations (`p50`, `p90`, `p95`, `p99`) as `quantile` + at the matching level. A chart config with `aggFn: 'p95'` rendered as the + nonexistent ClickHouse function `p95If`. The AI assistant now returns + percentiles with a level instead of a bare `quantile` (median), and v1 metric + chart conversion keeps the percentile level. +- 3bedfab3: feat: Support histogram heatmaps from PromQL bucket metrics +- c94d12c3: fix: Resolve PromQL queries through the source instead of a caller-supplied connection and table + + The `/api/v1/prometheus/*` routes now take `sourceId` instead of `connectionId`, and read the connection and TimeSeries table from that PromQL source. Caller-supplied `database`/`table` params are ignored for ClickHouse and no longer forwarded to external Prometheus endpoints. Saved PromQL chart configs now require `source` and no longer persist `connection`, so provisioned dashboards with PromQL tiles must set `source`. + +- 30debf92: speed up the sessions query by scoping the trace scan to RUM services +- b9f61708: chore: upgrade @tanstack/react-query to 5.90 and keep a cancelled filter + values stream's partial results out of the cache +- 685f4650: fix: Wrap long values in release marker tooltips instead of overflowing +- f41027f2: feat: use the click-ui `Badge` for the exception breadcrumb status and level + chips, the AI Assistant "Experimental" label, and the materialized view config + pills. Remove the unused stacktrace, breadcrumb, and source map code from + `LogSidePanelElements`, and the unused `StacktraceFrame` component. +- e3f24b94: fix: Preserve multi-line SQL in search replay links +- d341ba0f: fix: resolve row details with the primary key plus whichever of `_block_number` + / `_block_offset` the table persists, instead of falling back to the slow + full-row lookup when only one of `enable_block_number_column` / + `enable_block_offset_column` is set +- 3ff761b6: feat: Remember the service map sampling rate in local storage; a `samplingFactor` URL param still takes precedence +- 96a0861f: Show a Group by field count as a number on a narrow screen +- 85675fc8: perf: stream filter values into the UI as each query finishes instead of + waiting for all of them +- d3e6f969: feat: use the click-ui `Badge` for dashboard and alert tags, and for the + "Experimental", "Beta", "Disabled", "Dev only", team member, and pending + invite badges in settings. +- e8f0f948: fix: Keep the dashboard tile menu on screen when a dashboard has many groups, by moving the group list into a scrollable "Move to group" submenu +- af6e7f6b: Add a description field to the tile editor. The description is now stored on the + tile's chart config next to its name, and is kept for series tiles in the + external Dashboards API. +- 02080f20: Add an optional tile description, accepted by the external Dashboards API and + shown as an info tooltip next to the tile name. +- dab6eb89: fix: Read and show time picker ranges in the display time zone, so applying a range with "Use UTC time" on no longer shifts it for users west of UTC +- ce6654dd: refactor: Store the time display setting as a time zone instead of a UTC switch, converting existing settings, and remove the `isUTC` option from `formatDate` +- d1cecf8b: Fix the trace waterfall sticking on the previously opened span when another span of the same trace is opened, including from a session replay. Closing the result clears the selected span. Opening a different result selects that result's span, including when the waterfall stays mounted on cached data. +- 807cd9a5: fix: the webhook form now compiles the body template as you edit it and shows + the Handlebars error with its line and column. A broken template used to give + no feedback until an alert failed to deliver. +- Updated dependencies [92058236] +- Updated dependencies [3e9185d1] +- Updated dependencies [180a1f1d] +- Updated dependencies [a682ce13] +- Updated dependencies [9891a791] +- Updated dependencies [43b09a7d] +- Updated dependencies [27cccf7a] +- Updated dependencies [8d064df4] +- Updated dependencies [9c2c7031] +- Updated dependencies [0000fa4b] +- Updated dependencies [ee9f84b2] +- Updated dependencies [24d324c2] +- Updated dependencies [748315d7] +- Updated dependencies [eb72cfa1] +- Updated dependencies [cdfae457] +- Updated dependencies [b00d4100] +- Updated dependencies [a06b17fb] +- Updated dependencies [e494a46d] +- Updated dependencies [03f9fd5a] +- Updated dependencies [5cabc115] +- Updated dependencies [a4b63953] +- Updated dependencies [3bedfab3] +- Updated dependencies [ca8e3fda] +- Updated dependencies [c94d12c3] +- Updated dependencies [be5304dd] +- Updated dependencies [95aef70f] +- Updated dependencies [bc47e485] +- Updated dependencies [85675fc8] +- Updated dependencies [af6e7f6b] +- Updated dependencies [02080f20] +- Updated dependencies [dab6eb89] +- Updated dependencies [ce6654dd] +- Updated dependencies [28168ae6] +- Updated dependencies [ecddea2a] +- Updated dependencies [807cd9a5] +- Updated dependencies [cfa865bd] + - @hyperdx/common-utils@0.32.0 + - @hyperdx/api@2.42.0 + ## 2.41.0 ### Minor Changes diff --git a/packages/app/package.json b/packages/app/package.json index c6fc18f131..78c88a0eb2 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@hyperdx/app", - "version": "2.41.0", + "version": "2.42.0", "private": true, "license": "MIT", "engines": { @@ -39,7 +39,7 @@ "@hookform/resolvers": "^3.9.0", "@hyperdx/api": "workspace:*", "@hyperdx/browser": "^0.22.1", - "@hyperdx/common-utils": "^0.31.0", + "@hyperdx/common-utils": "^0.32.0", "@hyperdx/node-opentelemetry": "^0.9.0", "@mantine/core": "^9.0.0", "@mantine/dates": "^9.0.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b7b05c0636..270c917d9e 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,23 @@ # @hyperdx/cli +## 0.8.0 + +### Minor Changes + +- 0b1e0784: Add dashboard and saved-search authoring commands to the CLI: + + - `hdx dashboards list` (default subcommand) gains `--query` name filtering and `--format table|json|csv` + - `hdx dashboards export --id ` prints a dashboard definition as JSON, round-trip compatible with import + - `hdx dashboards create` accepts either a full definition (`--file `) or inline charts (`--name` + repeatable `--chart` / `--chart-file`, with automatic grid layout), plus `--if-not-exists` + - `hdx dashboards import --file ` recreates an exported dashboard, with `--if-not-exists` and `--name-override` + - `hdx saved-searches` command group: `list` and `create` (`--name/--source/--where/--where-language/--select/--order-by/--tags`) + + Definitions are validated locally against the shared schema before being sent, and missing tile ids are generated automatically. Also fixes `getSavedSearches()` to call the correct `/saved-search` API path (the previous `/saved-searches` path always returned 404). + +### Patch Changes + +- 5253b861: fix: Stop abbreviating values between 500 and 999 as "0.5k"/"0.8k" on chart axes and in large number format + ## 0.7.0 ### Minor Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 0db54f9063..c2bc3141fd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@hyperdx/cli", - "version": "0.7.0", + "version": "0.8.0", "license": "MIT", "type": "module", "repository": { @@ -41,7 +41,7 @@ }, "devDependencies": { "@clickhouse/client": "1.23.0-head.fae5998.1", - "@hyperdx/common-utils": "^0.31.0", + "@hyperdx/common-utils": "^0.32.0", "@jest/globals": "^30.2.0", "@types/crypto-js": "^4.2.2", "@types/jest": "^29.5.14", diff --git a/packages/common-utils/CHANGELOG.md b/packages/common-utils/CHANGELOG.md index 7558f15659..9b238c8386 100644 --- a/packages/common-utils/CHANGELOG.md +++ b/packages/common-utils/CHANGELOG.md @@ -1,5 +1,55 @@ # @hyperdx/common-utils +## 0.32.0 + +### Minor Changes + +- 95aef70f: Add an optional `eventNameExpression` to log sources, pointing at the + OpenTelemetry log EventName. Source auto-detection sets it when an OTel log + table has a string `EventName` column. The field is stored and editable only: + nothing reads it yet. HDX-5787 +- bc47e485: Add an optional `severityNumberExpression` to log sources, pointing at the + numeric OpenTelemetry SeverityNumber (1-24). Source auto-detection sets it when + an OTel log table has an integer `SeverityNumber` column. The field is stored + and editable only: log levels still come from the severity text. +- cfa865bd: feat: expose group-by values to webhook body templates as `{{var.}}`, and keep them on resolve notifications + +### Patch Changes + +- 92058236: feat: Broadcast adhoc dashboard filter conditions +- 3e9185d1: feat: Filter search tile cells into adhoc dashboard filters +- 180a1f1d: feat: Filter table tile group-by cells into adhoc dashboard filters +- a682ce13: feat: Render adhoc dashboard filter inputs +- 9891a791: feat: Add ad hoc dashboard filter schemas and types +- 43b09a7d: feat: Add UI for configuring adhoc dashboard filters +- 0000fa4b: feat: Add a line interpolation display setting (smooth, linear, step) +- eb72cfa1: feat(mcp): add `clickstack_service_health`, a one-call per-service health report for a trace source (throughput, error rate, p50/p95/p99, top error groups), compared with yesterday and ranked worst first +- 03f9fd5a: fix(mcp): describe every MCP tool input, drop descriptions that restate schema constraints, and keep tool descriptions under Claude Code's 2 KB limit +- 5cabc115: feat: Support distribution heatmaps calculated from promql data +- a4b63953: fix: render percentile aggregations (`p50`, `p90`, `p95`, `p99`) as `quantile` + at the matching level. A chart config with `aggFn: 'p95'` rendered as the + nonexistent ClickHouse function `p95If`. The AI assistant now returns + percentiles with a level instead of a bare `quantile` (median), and v1 metric + chart conversion keeps the percentile level. +- 3bedfab3: feat: Support histogram heatmaps from PromQL bucket metrics +- c94d12c3: fix: Resolve PromQL queries through the source instead of a caller-supplied connection and table + + The `/api/v1/prometheus/*` routes now take `sourceId` instead of `connectionId`, and read the connection and TimeSeries table from that PromQL source. Caller-supplied `database`/`table` params are ignored for ClickHouse and no longer forwarded to external Prometheus endpoints. Saved PromQL chart configs now require `source` and no longer persist `connection`, so provisioned dashboards with PromQL tiles must set `source`. + +- 85675fc8: perf: stream filter values into the UI as each query finishes instead of + waiting for all of them +- af6e7f6b: Add a description field to the tile editor. The description is now stored on the + tile's chart config next to its name, and is kept for series tiles in the + external Dashboards API. +- 02080f20: Add an optional tile description, accepted by the external Dashboards API and + shown as an info tooltip next to the tile name. +- dab6eb89: fix: Read and show time picker ranges in the display time zone, so applying a range with "Use UTC time" on no longer shifts it for users west of UTC +- ce6654dd: refactor: Store the time display setting as a time zone instead of a UTC switch, converting existing settings, and remove the `isUTC` option from `formatDate` +- 28168ae6: fix: Floor the time filter start to the precision of a coarse timestamp column (DateTime, DateTime64 below ms) when a finer column also filters the range, so a sub-second start no longer drops the rest of that tick; make the external API v2 search `maxResults` cap configurable via `EXTERNAL_API_SEARCH_MAX_RESULTS` (defaults to 2000, the previous hardcoded value) +- 807cd9a5: fix: the webhook form now compiles the body template as you edit it and shows + the Handlebars error with its line and column. A broken template used to give + no feedback until an alert failed to deliver. + ## 0.31.0 ### Minor Changes diff --git a/packages/common-utils/package.json b/packages/common-utils/package.json index 1a2aee6743..4731a91a6f 100644 --- a/packages/common-utils/package.json +++ b/packages/common-utils/package.json @@ -1,7 +1,7 @@ { "name": "@hyperdx/common-utils", "description": "Common utilities for HyperDX application", - "version": "0.31.0", + "version": "0.32.0", "license": "MIT", "private": true, "files": [ diff --git a/packages/otel-collector/CHANGELOG.md b/packages/otel-collector/CHANGELOG.md index 19379624e1..bc435b83a7 100644 --- a/packages/otel-collector/CHANGELOG.md +++ b/packages/otel-collector/CHANGELOG.md @@ -1,5 +1,21 @@ # @hyperdx/otel-collector +## 2.42.0 + +### Patch Changes + +- ab563d28: Stop the collector logging a `ParseJSON` syntax error for every log body that + contains braces but isn't JSON (e.g. Go struct or Python dict dumps). JSON + extraction now only matches objects that start with a quoted key, and remaining + parse failures in that statement group are silenced. +- ca8e3fda: fix: support https for the PromQL remote-write endpoint and ClickHouse scraping + + `CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT` now accepts an `http://` or `https://` URL as well as a bare `host:port`. With `https://`, the collector's `prometheusremotewrite` exporter sends metrics over TLS and verifies the server certificate against the system CAs. Previously the exporter always used plain HTTP, so an HTTPS-only endpoint could not receive metrics. This applies to both standalone and OpAMP-managed collectors. + + A bare `host:port` keeps plain HTTP, so existing setups are unchanged. The value must not include a path (`/write` is still appended automatically); the collector now exits at startup with a clear error if it does, or if the scheme is anything other than `http` or `https`. + + The OpAMP-managed collector scraped the endpoint over plain HTTP regardless of its scheme. ClickHouse is now scraped in its own `clickhouse` job (previously the `otelcol` job) using the endpoint's scheme, with TLS verification on. The collector's own metrics endpoint stays on plain HTTP. A bare `host:port` or `http://` endpoint behaves as before. Scraped ClickHouse metrics now carry `job="clickhouse"` instead of `job="otelcol"`. + ## 2.41.0 ## 2.40.0 diff --git a/packages/otel-collector/package.json b/packages/otel-collector/package.json index f132cbbe1d..3962cee567 100644 --- a/packages/otel-collector/package.json +++ b/packages/otel-collector/package.json @@ -1,7 +1,7 @@ { "name": "@hyperdx/otel-collector", "description": "HyperDX OpenTelemetry Collector configuration and Docker image", - "version": "2.41.0", + "version": "2.42.0", "license": "MIT", "private": true } diff --git a/yarn.lock b/yarn.lock index 41c85ee500..3df33950e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4721,7 +4721,7 @@ __metadata: "@braintree/sanitize-url": "npm:^7.1.1" "@clickhouse/client-common": "npm:1.23.0-head.fae5998.1" "@esm2cjs/p-queue": "npm:^7.3.0" - "@hyperdx/common-utils": "npm:^0.31.0" + "@hyperdx/common-utils": "npm:^0.32.0" "@hyperdx/node-opentelemetry": "npm:^0.9.0" "@hyperdx/passport-local-mongoose": "npm:^9.0.1" "@modelcontextprotocol/sdk": "npm:^1.27.1" @@ -4815,7 +4815,7 @@ __metadata: "@hookform/resolvers": "npm:^3.9.0" "@hyperdx/api": "workspace:*" "@hyperdx/browser": "npm:^0.22.1" - "@hyperdx/common-utils": "npm:^0.31.0" + "@hyperdx/common-utils": "npm:^0.32.0" "@hyperdx/node-opentelemetry": "npm:^0.9.0" "@mantine/core": "npm:^9.0.0" "@mantine/dates": "npm:^9.0.0" @@ -4942,7 +4942,7 @@ __metadata: resolution: "@hyperdx/cli@workspace:packages/cli" dependencies: "@clickhouse/client": "npm:1.23.0-head.fae5998.1" - "@hyperdx/common-utils": "npm:^0.31.0" + "@hyperdx/common-utils": "npm:^0.32.0" "@jest/globals": "npm:^30.2.0" "@types/crypto-js": "npm:^4.2.2" "@types/jest": "npm:^29.5.14" @@ -4969,7 +4969,7 @@ __metadata: languageName: unknown linkType: soft -"@hyperdx/common-utils@npm:^0.31.0, @hyperdx/common-utils@workspace:packages/common-utils": +"@hyperdx/common-utils@npm:^0.32.0, @hyperdx/common-utils@workspace:packages/common-utils": version: 0.0.0-use.local resolution: "@hyperdx/common-utils@workspace:packages/common-utils" dependencies: From 59bdfbf89a7ed55466535bf8e9164bdf05e878c3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 23 Oct 2026 21:02:07 +0000 Subject: [PATCH 2/2] chore(release): update root CHANGELOG.md --- CHANGELOG.md | 285 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 136b6cfa00..f168f740de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,291 @@ PR — keep the `hyperdx-release-notes` comment marker intact when editing so yo edits survive regeneration. Per-package detail lives in each `packages/*/CHANGELOG.md`. +## v2.42.0 — 2026-10-23 + + + +**Ad hoc dashboard filters and docked alert editing** + +Dashboards gain ad hoc filters: add filters to a dashboard on the fly, have the +conditions broadcast to every tile, and click a cell in a search or table tile +to filter by that value without opening an editor. Chart alerts now open in a +side panel docked beside the chart editor, so the preview chart stays in view +while you tune the alert, and a new Content font size preference scales the +search results table, data tables and chart labels when the default is too small +to read comfortably. User Preferences also replaces the "Use UTC time" switch +with a picker for any time zone, so timestamps read in the zone you actually work +in. PromQL also moves onto sources — the `/api/v1/prometheus/*` routes now take a +`sourceId`, and provisioned dashboards with PromQL tiles must set `source` before +you upgrade. + +### 💥 Breaking Changes + +- **PromQL queries resolve through their source**: the `/api/v1/prometheus/*` + routes now take `sourceId` in place of `connectionId` and read the connection + and TimeSeries table from that PromQL source, so caller-supplied + `database`/`table` params are ignored for ClickHouse and are no longer + forwarded to external Prometheus endpoints. Saved PromQL chart configs now + require `source` and no longer persist `connection`, so update any provisioned + dashboard carrying PromQL tiles before upgrading (#3372, thanks @karl-power!). +- **ClickHouse is scraped in its own `clickhouse` job**: + `CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT` now accepts an `http://` or + `https://` URL as well as a bare `host:port`, and with `https://` both the + collector's `prometheusremotewrite` exporter and the OpAMP-managed scrape use + TLS and verify the server certificate against the system CAs — previously an + HTTPS-only endpoint could not receive metrics at all. Scraped ClickHouse + metrics now carry `job="clickhouse"` rather than `job="otelcol"`, so repoint + anything keyed on the old label, and note the collector now exits at startup + with a clear error if the endpoint includes a path or a scheme other than + `http` or `https`; a bare `host:port` keeps plain HTTP and is unchanged + (#3330, thanks @karl-power!). + +### ✨ New Features + +- **Ad hoc filters on any dashboard**: a dashboard can now carry filters you + configure once and fill in from the filter bar, with the conditions broadcast + to every tile rather than edited tile by tile. Clicking a cell in a search tile, + a group-by cell in a table tile, or a series on a time chart turns that value + into an ad hoc filter, and importing a dashboard remaps its ad hoc filters onto + your own sources (#3380, #3405, thanks @pulpdrew!). +- **Edit chart alerts in a docked side panel**: "Add alert" / "Edit alert" opens + a panel beside the chart editor that fills its visible height and resizes from + the left edge, so the preview chart stays in view while the alert is tuned. + Keep a new alert with "Add alert" or an existing one with "Update alert" — + closing the panel discards the changes — while the chart's own Save and Cancel + move up to the chart name row (#3222, thanks @teeohhem!). +- **A content font size preference**: the small text in the log and trace tables + could only be adjusted with browser zoom, which shrinks the surrounding chrome + too. User preferences now carry a **Content font size** (small / medium / + large) that scales the search results table, data tables, expanded row JSON, + and chart axes, legends and tooltips; small is the default and matches the + previous sizes, so nothing changes until you opt in (#3166, thanks + @MikeShi42!). +- **Pick any time zone, not just UTC**: User Preferences now offers a time zone + picker in place of the "Use UTC time" switch, with Local and UTC pinned at the + top of the list, so timestamps can be read in whichever zone you work in. The + display setting is stored as a time zone now, and an existing UTC preference is + converted for you (#3447, #3449, thanks @karl-power!). +- **Heatmaps from PromQL metrics**: a PromQL query can now drive a distribution + heatmap calculated from its values, and a histogram heatmap built from bucket + metrics (#3326, #3332, thanks @pulpdrew!). +- **Choose how a line is drawn between points**: time series tiles gain a line + interpolation display setting — smooth, linear or step — so a chart can be + drawn to suit the data behind it (#3393, thanks @pulpdrew!). +- **Group by on the search page histogram**: the histogram above your search + results can now be broken out by a field, so you can see which service, status + or host a spike came from without leaving the search page (#3407, thanks + @pulpdrew!). +- **Tile descriptions**: the tile editor gains a description field, stored on the + tile's chart config next to its name and shown as an info tooltip beside the + tile name. Series tile descriptions are accepted and kept by the external + Dashboards API too (#3352, #3403, thanks @felipe-carvalho12 and @karl-power!). +- **Author dashboards and saved searches from the CLI**: `hdx dashboards` gains + `export --id ` for a round-trip JSON definition, `create` from + either a full `--file` definition or inline `--chart` / `--chart-file` + arguments laid out on a grid automatically, and `import --file ` with + `--if-not-exists` and `--name-override`. The default `list` subcommand picks up + `--query` name filtering and `--format table|json|csv`, and a new + `hdx saved-searches` group can list and create saved searches + (`--name/--source/--where/--where-language/--select/--order-by/--tags`). + Definitions are validated locally against the shared schema before they are + sent, missing tile ids are generated for you, and listing saved searches now + calls the right API path instead of always returning 404 (#2914). +- **PromQL tiles in the external Dashboards API**: `/api/v2/dashboards` now + returns PromQL tiles and accepts them on create and update, as + `configType: "promql"` with a `sourceId` and a list of `expressions`. They were + previously left out of responses, so saving a dashboard back through the API + deleted them. A tile whose `sourceId` is not a PromQL source is now rejected + with a 400, and MCP dashboard tools still hide PromQL tiles until they can edit + them — but a `clickstack_save_dashboard` update no longer deletes the tiles it + hides. Creating or updating a PromQL source through `POST` or + `PUT /api/v2/sources` is likewise rejected with a 400 unless `ENABLE_PROMQL` is + set, since such a source cannot be queried without it (#3379, #3414, #3416, + thanks @karl-power!). +- **Group-by values in webhook body templates**: a webhook body template can now + read the alert's group-by values as `{{var.}}`, so a notification can + name the service or host it fired for, and those values are kept on resolve + notifications as well (#3384, thanks @jordan-simonovski!). +- **`clickstack_sql` can target a source**: the MCP SQL tool now accepts an + optional `sourceId`, so `$__sourceTable` expands to that source's table. + Unknown sources, other teams' sources, and a source on a different connection + than `connectionId` are rejected, as is `$__sourceTable` with no `sourceId` + (#3355, thanks @squaredg!). +- **A per-service health report in one MCP call**: the new + `clickstack_service_health` tool reports throughput, error rate and p50/p95/p99 + latency for each service in a trace source, along with its top error groups, + compared with yesterday and ranked worst first — so an assistant can size up a + fleet without stitching several queries together (#3411). +- **The service map remembers your sampling rate**: the sampling rate you pick on + the service map is kept in local storage so it survives a reload; a + `samplingFactor` URL param still takes precedence (#3388, thanks @pulpdrew!). +- **SeverityNumber and EventName expressions on log sources**: a log source can + now carry an optional `severityNumberExpression` pointing at the numeric + OpenTelemetry SeverityNumber (1-24), and an optional `eventNameExpression` + pointing at the OpenTelemetry log EventName. Source auto-detection sets each + when an OTel log table has an integer `SeverityNumber` or a string `EventName` + column. Both fields are stored and editable only for now — log levels still + come from the severity text, and nothing reads EventName yet (#3425, #3436, + thanks @SpencerTorres!). + +### 🔧 Improvements + +- **The span panel reads current OpenTelemetry HTTP and RPC conventions**: the + span side panel and trace waterfall now read the current OTel HTTP and RPC + semantic conventions, with the deprecated names kept as fallbacks. The HTTP + panel is redesigned around a request line and its details, gRPC and other RPC + calls get a panel of their own, and correlated log errors and warnings are + flagged by `SeverityNumber` or case-insensitive `SeverityText` (#3410, thanks + @SpencerTorres!). +- **Exceptions show wherever they were recorded**: the Exception panel now opens + for logs and spans carrying `exception.type`, `exception.message` or + `exception.stacktrace` attributes, not only for `exception` span events. The + trace waterfall shows correlated logs even when their span was never exported + and colours error logs and `exception` span events red there, and the default + trace sources now set `spanEventsValueExpression` and + `spanLinksValueExpression` so span exceptions and links load out of the box. + The default sources also gain the summary and exponential histogram metric + tables and drop the key rollup tables the schema no longer creates (#3412, + thanks @SpencerTorres!). +- **Finding keys inside Map and JSON filter groups**: groups such as + `LogAttributes` and `ResourceAttributes` in the search filter sidebar now have + a key search matching the value search on regular filters, sort their keys + alphabetically after keys with a selected value and pinned keys, and stay + expanded or collapsed when you scroll them out of view and back. The Filter + Keys Fetch Limit (default 100) also applies to each Map column now, so + `LogAttributes` keys no longer crowd out every other Map column (#3368, #3377, + #3392, #3397, thanks @knudtty!). +- **Filter values appear as they arrive**: filter values stream into the UI as + each query finishes instead of the sidebar waiting for all of them, and a + cancelled stream's partial results are kept out of the cache so the next open + doesn't show a half-filled list (#3348, #3406, thanks @knudtty!). +- **Faster sessions and Database drawer queries**: the sessions query scopes its + trace scan to RUM services, and the Services > Database query drawer uses the + span attribute skip index instead of scanning the whole trace window (#3351, + #3358, thanks @archat-hash and @vinzee!). +- **Row details open without the slow full-row lookup**: row details now resolve + with the primary key plus whichever of `_block_number` / `_block_offset` the + table persists, rather than falling back to a full-row lookup when only one of + `enable_block_number_column` / `enable_block_offset_column` is set (#3364, + thanks @knudtty!). +- **Webhook body templates are checked before an alert fails**: the webhook form + compiles the body template as you edit it and shows the Handlebars error with + its line and column, and the API now rejects a generic or incident.io template + that doesn't compile — or that calls a helper delivery doesn't register, such + as a typo for `eq` — with a 400 on create, update and test. A new + `POST /api/v2/webhooks/validate` checks a webhook config without saving it, at + Terraform plan time for instance (#3350, #3365). +- **The dashboard tile menu stays on screen**: a dashboard with many groups no + longer pushes the tile menu off screen — the group list moved into a scrollable + "Move to group" submenu (#3360, thanks @jordan-simonovski!). +- **Saved search is usable on a phone**: below 900px the filters open in a + drawer and SELECT and ORDER BY stay behind "Columns", so the log table keeps + the remaining screen. A narrow screen also shows the Group by field count as a + number rather than spelling out the fields (#3376, #3430, thanks @elizabetdev!). +- **MCP tools stop leaving you to guess**: `clickstack_list_sources` now returns + each source's database-qualified `table` (and `database` for metric sources), + the `clickstack_sql` examples use `
` and `` + placeholders instead of `otel_logs` and `TimestampTime`, and unknown-table + errors point back at `clickstack_list_sources`. Every tool input is described, + descriptions that only restated schema constraints are gone, tool descriptions + fit under Claude Code's 2 KB limit, every tool declares whether it is + read-only, destructive, idempotent and open-world so a client knows what + calling it will do, and the server advertises a title, description, website URL + and icon in its initialize response and records the response size of each tool + call (#3354, #3394, #3395, #3396, #3408, thanks @squaredg!). +- **More of the UI on ClickHouse's click-ui badges**: the sidebar "Beta", "UTC" + and instance label badges, the "Latest", "New" and "Breaking" badges in What's + new, the Kubernetes dashboard and its node, namespace and pod drawers, the + model, provider, tool, agent and chat role badges in the LLM views, dashboard + and alert tags along with the settings badges, the metric explorer, the chart + series and formula editors, the tile alert editor, the materialised view + indicator, modal and config pills, the span kind in the row side panel, the + exception breadcrumb status and level chips and the AI Assistant + "Experimental" label all now use the click-ui `Badge` (#3363, #3373, #3378, + #3398, #3417, #3420, thanks @hoorayimhelping!). + +### 🐛 Bug Fixes + +- **A sub-second search start no longer drops rows**: the time filter start is + floored to the precision of a coarse timestamp column (DateTime, or DateTime64 + below millisecond) when a finer column also filters the range, so a sub-second + start keeps the rest of that tick. The external API v2 search `maxResults` cap + is configurable now through `EXTERNAL_API_SEARCH_MAX_RESULTS`, defaulting to + the previously hardcoded 2000 (#3381, thanks @vinzee!). +- **Percentile aggregations render as a function ClickHouse has**: a chart config + with `aggFn: 'p95'` compiled to the nonexistent `p95If`, so `p50`, `p90`, `p95` + and `p99` now render as `quantile` at the matching level. The AI assistant + returns percentiles with a level instead of a bare `quantile` (median), and v1 + metric chart conversion keeps the percentile level (#3357, thanks @octo47!). +- **Legacy `STATUS_CODE_ERROR` spans count as errors**: the Services and LLM + dashboards undercounted errors from collectors that emit the long status form. + The errored-span definition now lives in one place and matches both that value + and the short `Error` form (#3181, thanks @alex-fedotyev!). +- **Multi-column ORDER BY without a direction**: ordering by several columns with + no explicit asc/desc caused a query error, and the table's sort state is now + tracked correctly (#3371, thanks @pulpdrew!). +- **Removing a column keeps the rest of a multi-field sort**: when the column you + remove is one field in a multi-field sort, only that field is dropped from the + sort, leaving the other fields in place (#3431, thanks @elizabetdev!). +- **Expanding a row on a table with an `id` column**: row details now keep the + internal WHERE-clause id instead of having it overwritten by the raw value of a + string `id` column (#3386, thanks @wanjinhao1!). +- **The trace waterfall follows the span you opened**: the waterfall stuck on the + previously opened span when another span of the same trace was opened, + including from a session replay. Opening a different result now selects that + result's span — even when the waterfall stays mounted on cached data — and + closing the result clears the selection (#3285, thanks @bahltushar!). +- **The ClickHouse proxy forwards request bodies as it read them**: the bytes + consumed by the proxy's body parsers are passed on without changing JSON + values, form fields or text encodings, request framing is kept in sync with + inflated bytes, and an unparsed multipart stream is preserved as it is (#3383, + thanks @adityareddy-dev!). +- **The time picker keeps the year you chose**: a selected date range no longer + resets to the current year — the range text includes the year when the range + isn't in the current year or reaches into the future, so it survives being + re-parsed (#3356, thanks @karl-power!). +- **Applying a time range no longer shifts it**: time picker ranges are read and + shown in the display time zone, so a range applied while timestamps were shown + in UTC no longer comes back shifted for users west of UTC (#3445, thanks + @karl-power!). +- **Multi-line SQL survives a search replay**: search replay links now preserve + multi-line SQL (#3382, thanks @pulpdrew!). +- **Values under 1,000 are no longer abbreviated**: a value between 500 and 999 + was rounded off to "0.5k" or "0.8k" on chart axes and anywhere the large + number format is used, in the app and in the CLI's terminal charts. Those + values now read in full (#3434). +- **Release marker tooltips wrap long values**: a long value in a release marker + tooltip wraps instead of overflowing the tooltip (#3391, thanks @MikeShi42!). +- **The demo connection points at the new demo ClickHouse**: "Connect to Demo + Server" now opens a connection to the current demo ClickHouse instance (#3419, + thanks @pulpdrew!). +- **`clickstack_sql` binds the bucket-size parameters it advertises**: + `{intervalSeconds:Int64}`, `{intervalMilliseconds:Int64}`, `$__interval_s`, + `$__timeInterval` and `$__timeInterval_ms` used to fail with "Substitution + intervalSeconds is not set" — including in the tool's own time-series example + (#3353, thanks @squaredg!). +- **Alerts on a saved search created over MCP read its filter as Lucene**: when + `clickstack_save_saved_search` created a search without a `whereLanguage`, the + field was left unset and an alert on that search parsed the saved Lucene filter + as SQL. New searches now store `lucene` explicitly (#3404). +- **The collector stops logging `ParseJSON` errors for non-JSON logs**: a log + body containing braces but no JSON — a Go struct or Python dict dump, say — + logged a syntax error for every line. JSON extraction now only matches objects + that start with a quoted key, and remaining parse failures in that statement + group are silenced (#3336). + + + +### 📦 Package changelogs + +- `@hyperdx/api` 2.41.0 → 2.42.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/api/CHANGELOG.md#2420) +- `@hyperdx/app` 2.41.0 → 2.42.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/app/CHANGELOG.md#2420) +- `@hyperdx/cli` 0.7.0 → 0.8.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/cli/CHANGELOG.md#080) +- `@hyperdx/common-utils` 0.31.0 → 0.32.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/common-utils/CHANGELOG.md#0320) +- `@hyperdx/otel-collector` 2.41.0 → 2.42.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/otel-collector/CHANGELOG.md#2420) + + + ## v2.41.0 — 2026-10-09