Release HyperDX#2378
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
905736a to
e55a29b
Compare
e55a29b to
3483c9b
Compare
3483c9b to
61212e6
Compare
61212e6 to
8a6b93d
Compare
8a6b93d to
dae12c6
Compare
dae12c6 to
c6c4bc4
Compare
c6c4bc4 to
78ced46
Compare
78ced46 to
47a828b
Compare
47a828b to
d3f337e
Compare
88dea93 to
b382b22
Compare
b382b22 to
5b2430f
Compare
5b2430f to
3174214
Compare
3174214 to
96b87f1
Compare
96b87f1 to
4c6a220
Compare
4c6a220 to
e45fa2f
Compare
e45fa2f to
904049f
Compare
904049f to
eac40dc
Compare
eac40dc to
49af301
Compare
49af301 to
6f70379
Compare
Greptile SummaryThis is a standard Changesets release PR that bumps all packages from
Confidence Score: 5/5Safe to merge — this is a fully automated Changesets release PR with no source code changes. All changes are version bumps, changelog additions, changeset file deletions, and a lock file update. No logic, configuration secrets, or runtime behavior is modified. The No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Changesets on main branch] --> B[Changesets GitHub Action]
B --> C{Release PR opened}
C --> D[Consume .changeset/*.md files]
D --> E[Bump package versions]
E --> F1[packages/api: 2.28.0 → 2.29.0]
E --> F2[packages/app: 2.28.0 → 2.29.0]
E --> F3[packages/common-utils: 0.20.0 → 0.21.0]
E --> F4[packages/otel-collector: 2.28.0 → 2.29.0]
D --> G[Update CHANGELOGs]
D --> H[Update .env CODE_VERSION]
D --> I[Update yarn.lock]
C --> J{Merge PR}
J --> K[Publish packages to npm]
Reviews (3): Last reviewed commit: "chore(release): bump HyperDX app/package..." | Re-trigger Greptile |
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@hyperdx/api@2.29.0
Minor Changes
Patch Changes
998ea5d: feat: Add option to fit time chart y-axis lower bound
ee90738: fix: Add sourceId to MCP Raw SQL Tile schema
8164492: fix(mcp): improve alias field descriptions and examples for readable chart legends
a19ba54: feat(mcp): add patch_dashboard, get_dashboard_tile, search_dashboards tools
Add three new MCP dashboard tools for granular operations:
hyperdx_get_dashboard_tile— retrieve a single tile by tileIdhyperdx_patch_dashboard— update name/tags and/or replace one tilewithout resubmitting the full dashboard
hyperdx_search_dashboards— search by name and/or tagsFix empty parameter schema on patch/search tools caused by Zod
.refine()wrapping. Document Lucene substring matching limitationsprominently in tool descriptions and query guide prompt.
Breaking (minor): Tile
nameonhyperdx_save_dashboardnow requiresat least 1 character (
.min(1)). Previously empty string""was acceptedand silently persisted as a blank title. Callers sending
name: ""willnow receive a validation error.
f6bda8c: refactor(mcp): simplify ObjectId validation with shared helpers and schema-level checks
Add
mcpError()andvalidateObjectId()utilities to reduce boilerplateacross MCP tool handlers. Move ObjectId validation into Zod input schemas
for always-required ID fields, eliminating inline checks entirely. Remaining
conditional checks use the new one-liner helper.
e03971b: refactor(theme): rename chart palette tokens from chart-1..10 to hue-named
(chart-blue, chart-orange, ...) and unify the categorical palette across HyperDX
and ClickStack
Stored configs from the initial color picker ([HDX-1360] feat(app): number tile static color picker #2265) keep working.
ChartPaletteTokenSchemastays strict (a plainz.enum, so itsz.inputmatches
z.output— wrapping it inz.preprocesswould poisonvalidateRequest'sreq.bodyinference all the way up toDashboard.tiles[i].config.color). Migration of legacychart-1..chart-10happens at five complementary points so no entry or wire-format path can slip
through, all composing over a single shared walker
(
walkRawDashboardTileColorsincommon-utils) so the per-tile traversalstays in lockstep:
normalizeDashboardTileColorsinpackages/app/src/dashboard.tsheals dashboards on read(
useDashboards/fetchLocalDashboards/fetchDashboards) and on write(
useUpdateDashboard/useCreateDashboard). Unresolvable color strings(stale hexes, hand-edited values, forward-rolled future tokens) are
preserved so the user's chosen value survives a render pass — the strict
server-side schema surfaces a clear error on next save instead of the
normalizer quietly dropping the field.
DBDashboardImportPagerunsnormalizeRawDashboardTileColorson the parsed JSON before the strictDashboardTemplateSchema.safeParse, so templates exported from apre-rename deploy import cleanly.
getDashboards/getDashboardinpackages/api/src/controllers/dashboard.tsrewrite legacy tile colors onthe way out. Pre-rename Mongo docs are served on the wire as
hue-named tokens so non-React HTTP clients (CI scripts, stale bundle
tabs during a rolling deploy, the external API) can round-trip
GET → PATCH without ever resurrecting
chart-Nthrough the strictschema.
a request-body preprocessor that rewrites legacy tile colors before
validateRequestrunsChartPaletteTokenSchema. Catches non-ReactHTTP callers (stale-bundle tabs during a rolling deploy, CI scripts,
MCP, the upcoming external-API parity work) for a one-release
deprecation window without weakening the schema's input/output equality.
The dashboard provisioner task applies the same shim before parsing
on-disk template files.
DBNumberChartandColorSwatchInputalso callresolveChartPaletteTokenfor tilesconstructed in memory between fetch and save (
ChartEditorformstate, unit-test fixtures, hand-rolled
Tileliterals).The migration preserves the HyperDX slot ordering from [HDX-1360] feat(app): number tile static color picker #2265 (slot 1 = brand
green, slot 2 = blue, etc.).
ClickStack legacy color caveat: Pre-rename ClickStack used a different slot
ordering than HyperDX (
--color-chart-1was brand blue#437eef, not brandgreen). The migration map uses HyperDX slot ordering, so any ClickStack
dashboard saved via [HDX-1360] feat(app): number tile static color picker #2265 with
color: 'chart-1'will flip from blue toObservable green after migration. We chose this trade-off deliberately over
branching the legacy map by active theme:
LEGACY_CHART_PALETTE_TOKEN_MAPlivesin
common-utils(shared with the API), and migration is one-shot persisted onnext save — theme-branching would couple common-utils to browser DOM state and
still produce wrong results for users whose active theme changed since the
original pick. Affected users can manually re-pick the desired hue via the (now
hue-labeled) color picker.
The categorical palette is based on Observable 10, with
chart-blueswapped to#437eefto match the brand link color(
--click-global-color-text-link-default); all other hues are straight fromObservable 10. The palette resolves identically on both themes — picking
chart-bluealways renders the brand blue. Brand identity for charts movesentirely into the semantic layer:
--color-chart-successand--color-chart-inforesolve to categorical
chart-green(#3ca951) andchart-blue(#437eef) onboth HyperDX and ClickStack, so success fills, info-level logs, and the
matching multi-series slots all read consistently across brands.
Internally, JS (
CATEGORICAL_HEX_BY_TOKENinpackages/app/src/utils.ts) isthe source of truth for categorical hues —
getColorFromCSSVariableandgetColorFromCSSTokenskipgetComputedStylefor categorical tokens since thepalette is unified across themes. The matching
--color-chart-{hue}CSS vars in_tokens.scssremain as a stylesheet-author affordance (inlinevar()use,devtools inspection) and a hook for any future per-brand override. Semantic
tokens still resolve through
getComputedStylebecause they genuinely vary pertheme.
adac913: refactor(mcp): rename all MCP tool prefixes from
hyperdx_toclickstack_Rename the MCP server name from
hyperdxtoclickstackand update all 19tool names (e.g.
hyperdx_search→clickstack_search), along withdescriptions, prompts, error messages, and test references.
Updated dependencies [998ea5d]
Updated dependencies [ee90738]
Updated dependencies [89949b1]
Updated dependencies [747352f]
Updated dependencies [e03971b]
Updated dependencies [adac913]
@hyperdx/app@2.29.0
Minor Changes
e03971b: refactor(theme): rename chart palette tokens from chart-1..10 to hue-named
(chart-blue, chart-orange, ...) and unify the categorical palette across HyperDX
and ClickStack
Stored configs from the initial color picker ([HDX-1360] feat(app): number tile static color picker #2265) keep working.
ChartPaletteTokenSchemastays strict (a plainz.enum, so itsz.inputmatches
z.output— wrapping it inz.preprocesswould poisonvalidateRequest'sreq.bodyinference all the way up toDashboard.tiles[i].config.color). Migration of legacychart-1..chart-10happens at five complementary points so no entry or wire-format path can slip
through, all composing over a single shared walker
(
walkRawDashboardTileColorsincommon-utils) so the per-tile traversalstays in lockstep:
normalizeDashboardTileColorsinpackages/app/src/dashboard.tsheals dashboards on read(
useDashboards/fetchLocalDashboards/fetchDashboards) and on write(
useUpdateDashboard/useCreateDashboard). Unresolvable color strings(stale hexes, hand-edited values, forward-rolled future tokens) are
preserved so the user's chosen value survives a render pass — the strict
server-side schema surfaces a clear error on next save instead of the
normalizer quietly dropping the field.
DBDashboardImportPagerunsnormalizeRawDashboardTileColorson the parsed JSON before the strictDashboardTemplateSchema.safeParse, so templates exported from apre-rename deploy import cleanly.
getDashboards/getDashboardinpackages/api/src/controllers/dashboard.tsrewrite legacy tile colors onthe way out. Pre-rename Mongo docs are served on the wire as
hue-named tokens so non-React HTTP clients (CI scripts, stale bundle
tabs during a rolling deploy, the external API) can round-trip
GET → PATCH without ever resurrecting
chart-Nthrough the strictschema.
a request-body preprocessor that rewrites legacy tile colors before
validateRequestrunsChartPaletteTokenSchema. Catches non-ReactHTTP callers (stale-bundle tabs during a rolling deploy, CI scripts,
MCP, the upcoming external-API parity work) for a one-release
deprecation window without weakening the schema's input/output equality.
The dashboard provisioner task applies the same shim before parsing
on-disk template files.
DBNumberChartandColorSwatchInputalso callresolveChartPaletteTokenfor tilesconstructed in memory between fetch and save (
ChartEditorformstate, unit-test fixtures, hand-rolled
Tileliterals).The migration preserves the HyperDX slot ordering from [HDX-1360] feat(app): number tile static color picker #2265 (slot 1 = brand
green, slot 2 = blue, etc.).
ClickStack legacy color caveat: Pre-rename ClickStack used a different slot
ordering than HyperDX (
--color-chart-1was brand blue#437eef, not brandgreen). The migration map uses HyperDX slot ordering, so any ClickStack
dashboard saved via [HDX-1360] feat(app): number tile static color picker #2265 with
color: 'chart-1'will flip from blue toObservable green after migration. We chose this trade-off deliberately over
branching the legacy map by active theme:
LEGACY_CHART_PALETTE_TOKEN_MAPlivesin
common-utils(shared with the API), and migration is one-shot persisted onnext save — theme-branching would couple common-utils to browser DOM state and
still produce wrong results for users whose active theme changed since the
original pick. Affected users can manually re-pick the desired hue via the (now
hue-labeled) color picker.
The categorical palette is based on Observable 10, with
chart-blueswapped to#437eefto match the brand link color(
--click-global-color-text-link-default); all other hues are straight fromObservable 10. The palette resolves identically on both themes — picking
chart-bluealways renders the brand blue. Brand identity for charts movesentirely into the semantic layer:
--color-chart-successand--color-chart-inforesolve to categorical
chart-green(#3ca951) andchart-blue(#437eef) onboth HyperDX and ClickStack, so success fills, info-level logs, and the
matching multi-series slots all read consistently across brands.
Internally, JS (
CATEGORICAL_HEX_BY_TOKENinpackages/app/src/utils.ts) isthe source of truth for categorical hues —
getColorFromCSSVariableandgetColorFromCSSTokenskipgetComputedStylefor categorical tokens since thepalette is unified across themes. The matching
--color-chart-{hue}CSS vars in_tokens.scssremain as a stylesheet-author affordance (inlinevar()use,devtools inspection) and a hook for any future per-brand override. Semantic
tokens still resolve through
getComputedStylebecause they genuinely vary pertheme.
418567f: feat: trace panel inline split detail
Patch Changes
56c5866: fix(search-filters): prevent nested filter dropdowns from disappearing on reopen
998ea5d: feat: Add option to fit time chart y-axis lower bound
20fabc6: feat: add a "Connect your AI assistant" section to Team Settings
A new section on the Team Settings page (Integrations tab, above the API Keys
card) lets a user install the HyperDX MCP server in Claude Code, Cursor,
VS Code + Copilot, Codex CLI, or any MCP-compatible host without hand-rolling
JSON. Per-host snippets carry the user's personal access key so the install
works against the existing
/api/mcproute without extra setup.8e52cef: feat(dashboard): auto-resize font in number tiles to fit container
Number tiles now automatically scale their font size to fit the available
width, preventing text overflow on narrow tiles and making better use of
space on wide ones. Includes an error boundary so a single broken tile
does not crash the entire dashboard.
9d71399: fix(z-index): keep sticky header below drawers and drawers above the fullscreen tile modal
Two related z-index regressions:
PageHeaderwas pinned atz-index: 100, but app drawers opt into amuch lower stack via
ZIndexContext(contextZIndex + 10, so atop-level drawer renders at
z-index: 10). The sticky header thereforefloated above the drawer overlay. The header now sits at
z-index: 2sodrawer overlays reliably cover the page chrome while the header still
wins against normal scrolling content.
FullscreenPanelModalused Mantine's default modal z-index (200) anddidn't propagate it through
ZIndexContext. Clicking a row in afullscreen search tile opened a
DBRowSidePaneldrawer atz-index: 10that was hidden behind the modal. The modal now follows the existing
contextZIndex + 10pattern and wraps its children in aZIndexContext.Provider, so child drawers stack on top of it.538a1c4: chore: migrate the custom Dashboard page to shared
PageLayout/PageHeader. Breadcrumbs, the editable dashboard name, dashboard actions (Favorite, Tags, Menu), and the "Created by … Updated …" meta now live in a single page header, while the query toolbar (SQL/Lucene WHERE, time range, granularity, Live, refresh, edit filters, Run) is pinned to the top of the scroll container as a dedicated sticky row — the chrome above scrolls away and only the toolbar follows the user. The "Updated …" meta moves to the right side of the breadcrumbs row instead of sitting as a separate body line.PageHeadergains astickyRowslot that any page can use to declare a single row that should be the only pinned element, with the rest of the header treated as scrolling chrome. Other pages are unaffected — aPageHeaderwithoutstickyRowkeeps the existing fully-sticky behavior.d1d91d7: feat(service-map): server-side filtering, latency percentiles, throughput & focus
The Service Map gains server-side filtering (Lucene/SQL
whereplus aservice-name multi-select with inbound/outbound neighbor expansion), latency
percentiles (p50/p95/p99) and request throughput (req/s) in node and edge
tooltips, a "Focus" action to scope the map to a service and its immediate
dependencies, and node sizing by total throughput (incoming + outgoing).
Percentiles are computed server-side via a single GROUPING SETS query.
53e8bd1: fix: Fix height of source select RHS menu
2a68145: feat(source-picker): chip + kebab menu UX
f95687b: Fix the database, table, and connection dropdowns being clipped inside the source setup modal. The dropdowns now render in a portal, so the full list is visible and scrollable when configuring or editing a source.
a6e7dcd: chore: Make error states consistent across chart types
Updated dependencies [9119de5]
Updated dependencies [998ea5d]
Updated dependencies [ee90738]
Updated dependencies [89949b1]
Updated dependencies [747352f]
Updated dependencies [8164492]
Updated dependencies [a19ba54]
Updated dependencies [f6bda8c]
Updated dependencies [e03971b]
Updated dependencies [adac913]
@hyperdx/common-utils@0.21.0
Minor Changes
e03971b: refactor(theme): rename chart palette tokens from chart-1..10 to hue-named
(chart-blue, chart-orange, ...) and unify the categorical palette across HyperDX
and ClickStack
Stored configs from the initial color picker ([HDX-1360] feat(app): number tile static color picker #2265) keep working.
ChartPaletteTokenSchemastays strict (a plainz.enum, so itsz.inputmatches
z.output— wrapping it inz.preprocesswould poisonvalidateRequest'sreq.bodyinference all the way up toDashboard.tiles[i].config.color). Migration of legacychart-1..chart-10happens at five complementary points so no entry or wire-format path can slip
through, all composing over a single shared walker
(
walkRawDashboardTileColorsincommon-utils) so the per-tile traversalstays in lockstep:
normalizeDashboardTileColorsinpackages/app/src/dashboard.tsheals dashboards on read(
useDashboards/fetchLocalDashboards/fetchDashboards) and on write(
useUpdateDashboard/useCreateDashboard). Unresolvable color strings(stale hexes, hand-edited values, forward-rolled future tokens) are
preserved so the user's chosen value survives a render pass — the strict
server-side schema surfaces a clear error on next save instead of the
normalizer quietly dropping the field.
DBDashboardImportPagerunsnormalizeRawDashboardTileColorson the parsed JSON before the strictDashboardTemplateSchema.safeParse, so templates exported from apre-rename deploy import cleanly.
getDashboards/getDashboardinpackages/api/src/controllers/dashboard.tsrewrite legacy tile colors onthe way out. Pre-rename Mongo docs are served on the wire as
hue-named tokens so non-React HTTP clients (CI scripts, stale bundle
tabs during a rolling deploy, the external API) can round-trip
GET → PATCH without ever resurrecting
chart-Nthrough the strictschema.
a request-body preprocessor that rewrites legacy tile colors before
validateRequestrunsChartPaletteTokenSchema. Catches non-ReactHTTP callers (stale-bundle tabs during a rolling deploy, CI scripts,
MCP, the upcoming external-API parity work) for a one-release
deprecation window without weakening the schema's input/output equality.
The dashboard provisioner task applies the same shim before parsing
on-disk template files.
DBNumberChartandColorSwatchInputalso callresolveChartPaletteTokenfor tilesconstructed in memory between fetch and save (
ChartEditorformstate, unit-test fixtures, hand-rolled
Tileliterals).The migration preserves the HyperDX slot ordering from [HDX-1360] feat(app): number tile static color picker #2265 (slot 1 = brand
green, slot 2 = blue, etc.).
ClickStack legacy color caveat: Pre-rename ClickStack used a different slot
ordering than HyperDX (
--color-chart-1was brand blue#437eef, not brandgreen). The migration map uses HyperDX slot ordering, so any ClickStack
dashboard saved via [HDX-1360] feat(app): number tile static color picker #2265 with
color: 'chart-1'will flip from blue toObservable green after migration. We chose this trade-off deliberately over
branching the legacy map by active theme:
LEGACY_CHART_PALETTE_TOKEN_MAPlivesin
common-utils(shared with the API), and migration is one-shot persisted onnext save — theme-branching would couple common-utils to browser DOM state and
still produce wrong results for users whose active theme changed since the
original pick. Affected users can manually re-pick the desired hue via the (now
hue-labeled) color picker.
The categorical palette is based on Observable 10, with
chart-blueswapped to#437eefto match the brand link color(
--click-global-color-text-link-default); all other hues are straight fromObservable 10. The palette resolves identically on both themes — picking
chart-bluealways renders the brand blue. Brand identity for charts movesentirely into the semantic layer:
--color-chart-successand--color-chart-inforesolve to categorical
chart-green(#3ca951) andchart-blue(#437eef) onboth HyperDX and ClickStack, so success fills, info-level logs, and the
matching multi-series slots all read consistently across brands.
Internally, JS (
CATEGORICAL_HEX_BY_TOKENinpackages/app/src/utils.ts) isthe source of truth for categorical hues —
getColorFromCSSVariableandgetColorFromCSSTokenskipgetComputedStylefor categorical tokens since thepalette is unified across themes. The matching
--color-chart-{hue}CSS vars in_tokens.scssremain as a stylesheet-author affordance (inlinevar()use,devtools inspection) and a hook for any future per-brand override. Semantic
tokens still resolve through
getComputedStylebecause they genuinely vary pertheme.
Patch Changes
998ea5d: feat: Add option to fit time chart y-axis lower bound
ee90738: fix: Add sourceId to MCP Raw SQL Tile schema
89949b1: Adding filters to dashboard exports. Implemented validation on dashboard imports to catch potential issues with generated JSON or manually tweaked JSON.
747352f: feat: add direct_read optimization for filters
adac913: refactor(mcp): rename all MCP tool prefixes from
hyperdx_toclickstack_Rename the MCP server name from
hyperdxtoclickstackand update all 19tool names (e.g.
hyperdx_search→clickstack_search), along withdescriptions, prompts, error messages, and test references.
@hyperdx/otel-collector@2.29.0