Minor Changes
-
8723d7a: Alerts can be configured with multiple notification channels (up to 10 webhooks) via the new
channelsfield on the v2 external API, internal API, and the MCPclickstack_save_alerttool. The legacy singularchannelfield is still accepted on input and mirrored in responses, so existing integrations keep working unchanged.Note that alert updates are a full replace, not a merge. A client that sends only the legacy
channelfield when updating an alert that has several channels will reduce it to that one channel — fetch the alert and resend the completechannelsarray to preserve them. -
a4b2ad0: The API now recovers from a MongoDB that is unreachable at startup, and exposes a Mongo-aware readiness endpoint. Previously a failed initial connect was never retried: the process kept listening while every Mongo-backed request timed out,
/healthreported 200, and Kubernetes kept the pod Ready indefinitely — cascading into OpAMP 500s and crash-looping collectors. The initial connection is now retried with capped exponential backoff until it succeeds, and both the API and OpAMP servers exposeGET /ready, which returns 503 unless MongoDB is connected (point Kubernetes readiness probes at it;/healthremains a pure liveness check). -
dc29d57: Chart formulas are now supported across every API surface that persists or accepts chart configs. The external dashboards API v2 and the MCP
save_dashboard/patch_dashboardtools acceptformulas(letter-ref arithmetic over the tile's select items, e.g.A / (A + B) * 100) andshowOperandSerieson line, stacked bar, table and number builder tiles, round-trip them through GET/PUT, and validate the expressions on write — unknown series refs, malformed syntax, combining formulas withasRatio, multiple formulas on a number tile, and formulas on formula-incapable source kinds (anything other than metric, log, or trace) are all rejected with actionable errors. MCPquery_tilecomputes formula columns for both metric and log/trace event tiles, the query-guide prompt documents the feature, and the OpenAPI spec includes the newFormulaschema. The CLI's dashboard tile pipeline now delegates its number/table config transforms to the shared common-utils implementations, so formula tiles render with operand-hiding behavior identical to the web.
Patch Changes
-
d205a77: Allow the ClickHouse exporter request timeout to be configured with
HYPERDX_OTEL_EXPORTER_TIMEOUTin both OpAMP-managed and standalone collector
modes. The default remains 5 seconds. -
90da409: Disable mongoose autoIndex in check-alerts worker to prevent MongoExpiredSessionError
-
43f6856: Allow editing and deleting alerts directly from the alert details page. An
"Edit alert" action opens a modal for changing the alert's threshold,
evaluation interval, schedule, group-by (saved-search alerts), notification
webhook, and note, and a Delete action (with confirmation) removes the alert
and returns to the alerts list. Alert API responses now include the
notification channel's webhook id and the alert's name/message template so
edits round-trip these fields. -
40ec085: feat: Add dashboard variable properties to external dashboards API
-
b0b1380: Align alert firing/recovery chart markers with the evaluated data: markers are now drawn at the start of the newest evaluated bucket (matching the evaluation history table and the plotted data point) instead of at the evaluation time, which sat one bucket to the right.
-
c592207: Fix MCP tool schemas being rejected by strict JSON Schema draft 2020-12 clients. The number-tile
colorRulesbetweenrule declared itsvalueas a Zod tuple, whichzod-to-json-schemarenders in the draft-07 tuple form (items: [ ... ]). Draft 2020-12 requiresitemsto be a schema rather than an array, soclickstack_save_dashboardandclickstack_patch_dashboardfailed validation — and clients that forward MCP tool schemas straight to an LLM provider (e.g. the Anthropic API) rejected the entire tool list withtools.N.custom.input_schema: JSON schema is invalid, making the MCP server unusable.valueis now a fixed-length array, which validates identically and serializes to the same[min, max]wire format. A new test validates every MCP tool's input schema against the 2020-12 metaschema so this cannot regress. -
e153f46: Tile alerts on metric charts with formulas now evaluate the formula value instead of the last raw operand series: the alert task previously dropped
formulas/showOperandSerieswhen rebuilding the tile's chart config, so an alert on a formula tile compared the threshold against a raw operand (e.g. bytes) rather than the derived value. Grouped ratio tile alerts also now honorratioMode(share_of_totalpreviously evaluated asper_group). -
7294944: fix: route per-query SQL debug logging through an injectable logger (#2416)
BaseClickhouseClientdumped raw SQL to the console on every ClickHouse query,
unconditionally and outside the pino logger, flooding API logs with query spam.Query logging now goes through an optional per-client
customLoggeron
ClickhouseClientOptions, logged atdebug, and is silent when no logger is
passed. The API injects a pino-backed logger, so query logging follows the
existingHYPERDX_LOG_LEVELsetting instead of writing toconsole.debug. The
browser client defaults to a console logger that pretty-prints the SQL as a
single multi-line block, so query SQL stays visible and readable in devtools in
all builds instead of wrapping into one long line.The API's log level now defaults to
info(wasdebug), so SQL logging is
silent in production unlessHYPERDX_LOG_LEVEL=debugis set. Dev and CI env
files already pin their levels explicitly and are unaffected. The default also
now applies whenHYPERDX_LOG_LEVELis set but empty — which is what Compose
passes when the variable is unset in the environment, and which previously made
pino throw at startup. -
e60a7d3: fix: populate the span StatusMessage on failed MCP tool calls so the error text is visible in the trace
-
9f640a6: Add a Rotate action for the personal API access key in Team Settings → API & Agents. Previously the personal access key — the bearer token for the external API v2 and the MCP server — was generated once at account creation and could never be changed, so a leaked key could only be remediated by deleting the user. Rotating immediately revokes the previous key, so MCP / AI agent configs, external API v2 clients, Terraform / IaC providers, and CI scripts using the old key must be updated with the new one. Browser sessions are unaffected.
-
08e5b62: Stop the external dashboards API returning aggregation parameters the aggregation cannot carry: a
levelleft over from a quantile agg, or avalueExpressionleft over on a count. Both are ignored when rendering, but the input schema rejects them, so a GET body could not be PUT back and importing a dashboard into Terraform failed with "Level can only be used with quantile aggregation function". -
Updated dependencies [be26530]
-
Updated dependencies [c349a5d]
-
Updated dependencies [68d2ed2]
-
Updated dependencies [2eedfb2]
-
Updated dependencies [1ce61c0]
-
Updated dependencies [43f6856]
-
Updated dependencies [b1d8dc1]
-
Updated dependencies [40ec085]
-
Updated dependencies [b0b1380]
-
Updated dependencies [a94d6da]
-
Updated dependencies [8be6810]
-
Updated dependencies [c592207]
-
Updated dependencies [9c7742f]
-
Updated dependencies [dc29d57]
-
Updated dependencies [7294944]
-
Updated dependencies [3ecf73c]
-
Updated dependencies [3ecf73c]
-
Updated dependencies [e153f46]
-
Updated dependencies [9f640a6]
-
Updated dependencies [ea12707]
- @hyperdx/common-utils@0.27.0