What's new

Changelog

Release notes for chmonitor. Full history on GitHub Releases.

v0.2.11 Jun 23, 2026

v0.2.11

> We're thrilled to announce the release of chmonitor v0.2.11, which showcases the incredible work of 4 contributors over 5 days, resulting in 133 commits and a brisk daily pace of 26.6 changes! Nighttime contributions outpaced daytime efforts, with 75 commits made while most of us were dreaming. A big shoutout to our most active AI agent, who made 75 contributions through comments—proof that collaboration powers our dashboard's evolution!
  • Add an AI insights panel on the /insights page, merging plans into documentation for enhanced usability.
  • Introduce browser notifications on by default, providing real-time updates without additional setup.
  • Implement total-time sort, metric bars, and a cluster-load summary for expensive queries, improving monitoring visibility.
  • Redesign insights settings with search capabilities and a live example to enhance user experience.
  • Offer configurable AI insights generation options, including model selection and prompt style customization.
  • 📦 133 commits across 126 pull requests
  • 🗓️ Shipped over 5 days — pace ~26.6 commits/day
  • 🌞 58 daytime · 🌙 75 night-time commits
  • 👥 4 contributors
  • 💬 201 comments back and forth across reviews
  • 🤖 5 AI agents involved
  • 🏆 Shoutout to @github-actions[bot] — 75 comments, 0 code reviews, 0 approvals
  • This release is published to the GitHub Container Registry as ghcr.io/duyet/clickhouse-monitoring:0.2.11. ```bash docker pull ghcr.io/duyet/clickhouse-monitoring:0.2.11 docker pull ghcr.io/duyet/chmonitor:0.2.11 ``` Pin it in your own Dockerfile: ```dockerfile FROM ghcr.io/duyet/clickhouse-monitoring:0.2.11 ``` Compare: helm-chmonitor-0.2.10...v0.2.11 > Built from commit 446ceb0 on 2026-06-23T17:36:30.424Z · summary by anyrouter. > **v0.3 switches the runtime app from the legacy Next.js dashboard to > dashboard-tsr (TanStack Start).** The ClickHouse connection vars are > unchanged, but **client-side (NEXT_PUBLIC_*) vars are renamed to VITE_*** > and server auth moves to CHM_*. The Docker entrypoint changed too. | Concern | v0.2 (Next.js) | v0.3 (TanStack Start) | |---|---|---| | Client env prefix | NEXT_PUBLIC_* | VITE_* (build-time inlined) | | Auth provider (client) | NEXT_PUBLIC_AUTH_PROVIDER | VITE_AUTH_PROVIDER | | Clerk key (client) | NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | VITE_CLERK_PUBLISHABLE_KEY | | Conversation DB flag | NEXT_PUBLIC_FEATURE_CONVERSATION_DB | VITE_FEATURE_CONVERSATION_DB | | Auth provider (server) | derived from NEXT_PUBLIC_AUTH_PROVIDER | CHM_AUTH_PROVIDER (none\|clerk\|proxy, wins on server) | | Docker entrypoint | node server.js (OpenNext standalone) | node server/index.mjs (Nitro node-server) | | ClickHouse vars | CLICKHOUSE_HOST/USER/PASSWORD/NAME | unchanged | | Secrets | CLERK_SECRET_KEY, etc. | unchanged (still server secrets) | The old NEXT_PUBLIC_* names still work as a compatibility fallback — the rename is recommended but not required, nothing breaks if you skip it. Client VITE_* vars are build-time inlined — set them when building the image / Worker, not only at runtime. Server vars (CLICKHOUSE_*, CHM_*, *_API_KEY) are read at runtime as before and are unchanged. Full per-platform steps: see [Migrate to v0.3](/docs/migrating/v0-3). ```text You are migrating a chmonitor deployment from v0.2 (Next.js) to v0.3 (TanStack Start). Here is my current environment (.env / docker-compose / wrangler / k8s manifest): Rewrite it for v0.3 applying EXACTLY these rules, and output the migrated config plus a short list of what you changed: 1. Rename every client var prefix NEXT_PUBLIC_ -> VITE_. Specifically: NEXT_PUBLIC_AUTH_PROVIDER -> VITE_AUTH_PROVIDER NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY -> VITE_CLERK_PUBLISHABLE_KEY NEXT_PUBLIC_FEATURE_CONVERSATION_DB-> VITE_FEATURE_CONVERSATION_DB (any other NEXT_PUBLIC_X -> VITE_X) 2. Add server-side auth var CHM_AUTH_PROVIDER (none|clerk|proxy) mirroring the client provider. It is authoritative on the server; keep VITE_AUTH_PROVIDER too so the browser bundle agrees. 3. Do NOT rename server vars: CLICKHOUSE_HOST, CLICKHOUSE_USER, CLICKHOUSE_PASSWORD, CLICKHOUSE_NAME, CLICKHOUSE_MAX_EXECUTION_TIME, CLERK_SECRET_KEY, *_API_KEY — keep as-is. 4. VITE_* vars are build-time inlined: ensure they are present at image/Worker BUILD time (Docker build-args or CI build env), not only at container runtime. 5. If this is a Docker deployment, change the container start command from node server.js to node server/index.mjs. Port 3000 and the /api/healthz healthcheck are unchanged. 6. Flag anything that has no v0.3 equivalent instead of silently dropping it. ``` ---
  • agent: persist MCP server config to localStorage (#1833) (723f7b3)
  • ai-insights: redesign panel + persist & auto-load insights + settings link (#1819) (bc9d633)
  • alerts: browser notifications on by default (out-of-box, opt-out) (#1858) (6a21a28)
  • auth: add 'trusted' reverse-proxy auth mode with forwarded identity (#1755) (094391a)
  • auth: show "via trusted proxy" source label in sidebar user menu (#1824) (3193f89)
  • expensive-queries: total-time sort, metric bars, and cluster-load summary (#1827) (f7d3830)
  • explain: syntax highlighting, FORMAT/semicolon tolerance, multi-query tabs (#1826) (41e8e8b)
  • insights-settings: redesign page — searchable model picker w/ provider icons + docs links (#1820) (8be8555)
  • insights: add AI insights panel to /insights page, merge plans into docs (2ba9fe4)
  • insights: AI Insights settings page + panel link, wired into generation (#1782) (6bfd0aa)
  • insights: configurable AI insight generation (model, prompt style, enrichment) (#1767) (8ef2977)
  • insights: global AI Insights header popover on every page (#1783) (c04f2fa)
  • insights: pluggable AI Insights storage backends (#1797) (7cdd146)
  • insights: preview generation with current settings on the settings page (#1786) (039a5d2)
  • insights: redesign settings — templates, icon grid, side-by-side live example (#1790) (5f2e3dc)
  • insights: surface enrichment availability + default model in settings (#1787) (463c825)
  • seo: complete docs icon set + add robots.txt to docs & dashboard (#1837) (0062a09)
  • seo: keyword-rich descriptions + schema.org structured data (#1838) (e4f832f)
  • sql-console: multi-query results, database picker, tree sidebar, buttons below editor (#1822) (e5de0a8)
  • ui: overview design pass — palette, cards, chart colors, heatmap (#1836) (b148009)
  • a11y: add aria-labels to icon-only buttons (#1874) (cf930ab)
  • agent-api: gate unconditional debug logs behind AGENT_DEBUG_LOGS (#1791) (e15cd7a)
  • agent: explain_query use EXPLAIN PLAN indexes=1 for indexes mode (#1781) (25795e5)
  • agent: explore_table_schema query valid system.parts columns (#1780) (e8d6f6c)
  • agents: wire MCP panel status to real /api/v1/mcp/info data (#1831) (03ca2d8)
  • api: gate /api/health metadata on genuine auth, not public-read (#1834) (a61dfc6)
  • api: harden actions/explain/explorer input & output handling (#1785) (4f1b4ea)
  • api: hide deployment metadata from anonymous /api/health callers (#1829) (f0905ee)
  • api: reject negative and fractional hostId at route boundary (#1760) (214389c)
  • api: return 503/504 for unreachable ClickHouse upstream, not 500 (#1840) (2064493)
  • api: return 503/504 for unreachable ClickHouse upstream, not 500 (#1841) (1412df1)
  • auth: gate sidebar identity on runtime auth provider, not build-time (#1812) (ee77b94)
  • ci: label apps/dashboard as 'app: dashboard', not legacy (#1886) (3949b3a)
  • ci: retry transient Cloudflare 10215 conflict when setting worker secrets (#1896) (d7d2872)
  • ci: skip dashboard deploy steps for dependabot PRs (#1835) (bcc1fc8), closes #1809
  • clickhouse-client: default to web client on all runtimes (Docker fix) (#1752) (a1970ed)
  • clickhouse-client: honor versioned queryConfig.sql[] in fetchJsonEachRowAsNormalizedJson (#1806) (b1fb977)
  • dashboard-storage: remove dead @ts-expect-error directives (7f420ae)
  • dashboard: repair dev-mode crashes + UI/UX audit a11y/error fixes (#1814) (fc2e66d)
  • insights: render generated insights immediately, independent of persistence (#1792) (6855eb8)
  • lint: apply biome auto-fixes to test files (9efa76f)
  • mcp: secure-by-default — deny anonymous access unless CHM_MCP_PUBLIC=true (#1830) (5109f56)
  • mutations: redesign sparse summary cards with denser hierarchy + empty state (#1817) (1e612f1)
  • query-config: query-metric-log 500 on modern ClickHouse (aggregate alias in WHERE) (#1815) (32d2d34)
  • query-config: query-metric-log 500 on modern ClickHouse (aggregate alias in WHERE) (#1816) (72544d0)
  • security: constant-time CRON_SECRET comparison in health-sweep (#1893) (72f93b2)
  • security: redact ClickHouse error details from action API responses (#1894) (6f20ae9)
  • seo: inject JSON-LD via effect to avoid hydration mismatch (#1839) (f0da6bc)
  • sql-builder: add splitSqlStatements source for orphaned test on main (#1821) (c4355ba)
  • sql-builder: only strip trailing FORMAT for known ClickHouse formats (#1828) (a5fded5)
  • sql-validator: stop rejecting legitimate read-only queries (#1758) (ee4894b)
  • ui: align chart skeleton min-height to loaded chart to cut CLS (#1865) (8adc563)
  • ui: prevent mobile horizontal overflow on toolbar + explain tabs (#1864) (9eb5216)
  • ui: tabular-nums on live/columnar numeric displays (#1875) (9713041)
  • charts: lazy-load chart-error diagnostics dialog (react-markdown) (#1877) (1a5fb4a)
  • charts: use REFRESH_INTERVAL presets for refresh intervals (#1772) (#1811) (4192e50)
  • data-table: memoize render-path allocations (#1771) (#1810) (72c6273)
  • keeper: memoize cluster grouping + React.memo NodeCard (#1876) (332252d)
  • overview: memoize OverviewChart and tab chart filters (#1895) (5be08c4)
  • running-queries: memoize chart transforms with useMemo (#1857) (1595ed1)
  • charts: collapse charts to compact row instead of hiding (#1818) (3547aa1)
  • charts: use REFRESH_INTERVAL constant in data-freshness (#1799) (#1801) (359c450)
  • clickhouse-client: remove dead query() helper (Workers trap) (#1789) (bb02046)
  • dedup formatDuration + tighten data-table types (review-ready, supersedes #1823) (#1825) (5f14b25)
  • docs: replace custom theme with native Astro Starlight (#1757) (32b2841)
  • insights: redesign insight card with tinted icon box (978e011)
  • remove deprecated variants property from QueryConfig type schema (#1765) (14a5ff4)
  • Full release notes
    helm-chmonitor-0.2.11 Jun 23, 2026

    helm-chmonitor-0.2.11

    A Helm chart for the chmonitor dashboard
    Full release notes
    v0.2.10 Jun 18, 2026

    v0.2.10

    > We're excited to announce the release of chmonitor v0.2.10! In just one day, our team delivered 8 impactful commits and 34 review comments. With contributions from 2 dedicated developers, including our star contributor, @github-actions[bot], who led the way with insightful feedback, this release is a testament to our commitment to enhancing your ClickHouse monitoring experience. Get ready for improved functionality and a more seamless installation process!
  • Serve the chart repository via Cloudflare Pages at charts.chmonitor.dev for easier access and reliability.
  • Ensure the /api/healthz endpoint is properly bounded and includes parameterized chart probes with dual-runtime guard.
  • Make the chart-releaser idempotent by skipping existing releases during deployment.
  • Fix the bootstrap process for the gh-pages branch on the first chart release to ensure successful initial deployments.
  • Remove the unnecessary Pages-enable step that consistently caused
  • 📦 8 commits across 8 pull requests
  • 🗓️ Shipped over 1 day — pace ~8.0 commits/day
  • 🌞 8 daytime · 🌙 0 night-time commits
  • 👥 2 contributors
  • 💬 34 comments back and forth across reviews
  • 🤖 5 AI agents involved
  • 🏆 Shoutout to @github-actions[bot] — 12 comments, 0 code reviews, 0 approvals
  • This release is published to the GitHub Container Registry as ghcr.io/duyet/clickhouse-monitoring:0.2.10. ```bash docker pull ghcr.io/duyet/clickhouse-monitoring:0.2.10 docker pull ghcr.io/duyet/chmonitor:0.2.10 ``` Pin it in your own Dockerfile: ```dockerfile FROM ghcr.io/duyet/clickhouse-monitoring:0.2.10 ``` Compare: helm-chmonitor-0.2.9...v0.2.10 > Built from commit e18c955 on 2026-06-18T16:12:22.397Z · summary by anyrouter. > **v0.3 switches the runtime app from the legacy Next.js dashboard to > dashboard-tsr (TanStack Start).** The ClickHouse connection vars are > unchanged, but **client-side (NEXT_PUBLIC_*) vars are renamed to VITE_*** > and server auth moves to CHM_*. The Docker entrypoint changed too. | Concern | v0.2 (Next.js) | v0.3 (TanStack Start) | |---|---|---| | Client env prefix | NEXT_PUBLIC_* | VITE_* (build-time inlined) | | Auth provider (client) | NEXT_PUBLIC_AUTH_PROVIDER | VITE_AUTH_PROVIDER | | Clerk key (client) | NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | VITE_CLERK_PUBLISHABLE_KEY | | Conversation DB flag | NEXT_PUBLIC_FEATURE_CONVERSATION_DB | VITE_FEATURE_CONVERSATION_DB | | Auth provider (server) | derived from NEXT_PUBLIC_AUTH_PROVIDER | CHM_AUTH_PROVIDER (none\|clerk\|proxy, wins on server) | | Docker entrypoint | node server.js (OpenNext standalone) | node server/index.mjs (Nitro node-server) | | ClickHouse vars | CLICKHOUSE_HOST/USER/PASSWORD/NAME | unchanged | | Secrets | CLERK_SECRET_KEY, etc. | unchanged (still server secrets) | The old NEXT_PUBLIC_* names still work as a compatibility fallback — the rename is recommended but not required, nothing breaks if you skip it. Client VITE_* vars are build-time inlined — set them when building the image / Worker, not only at runtime. Server vars (CLICKHOUSE_*, CHM_*, *_API_KEY) are read at runtime as before and are unchanged. Full per-platform steps: see [Migrate to v0.3](/docs/migrating/v0-3). ```text You are migrating a chmonitor deployment from v0.2 (Next.js) to v0.3 (TanStack Start). Here is my current environment (.env / docker-compose / wrangler / k8s manifest): Rewrite it for v0.3 applying EXACTLY these rules, and output the migrated config plus a short list of what you changed: 1. Rename every client var prefix NEXT_PUBLIC_ -> VITE_. Specifically: NEXT_PUBLIC_AUTH_PROVIDER -> VITE_AUTH_PROVIDER NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY -> VITE_CLERK_PUBLISHABLE_KEY NEXT_PUBLIC_FEATURE_CONVERSATION_DB-> VITE_FEATURE_CONVERSATION_DB (any other NEXT_PUBLIC_X -> VITE_X) 2. Add server-side auth var CHM_AUTH_PROVIDER (none|clerk|proxy) mirroring the client provider. It is authoritative on the server; keep VITE_AUTH_PROVIDER too so the browser bundle agrees. 3. Do NOT rename server vars: CLICKHOUSE_HOST, CLICKHOUSE_USER, CLICKHOUSE_PASSWORD, CLICKHOUSE_NAME, CLICKHOUSE_MAX_EXECUTION_TIME, CLERK_SECRET_KEY, *_API_KEY — keep as-is. 4. VITE_* vars are build-time inlined: ensure they are present at image/Worker BUILD time (Docker build-args or CI build env), not only at container runtime. 5. If this is a Docker deployment, change the container start command from node server.js to node server/index.mjs. Port 3000 and the /api/healthz healthcheck are unchanged. 6. Flag anything that has no v0.3 equivalent instead of silently dropping it. ``` ---
  • agent: add AgentState as a conversation-history backend option (#1673) (9080602)
  • agent: add scatter/radial/bar-list chart types to chat visualization (#1658) (a9b8a3f)
  • agent: expand skill library with 9 new skills (#1655) (3accc86)
  • agent: route AnyRouter upstream through @anyr/ai-sdk-provider (#1682) (eec305e)
  • agent: route prod conversations to AgentState backend (#1731) (cf15bbb)
  • auth: add SSO/SAML scaffold (enterprise-gated, community inert) (#1700) (c948e3f)
  • brand: flatten chmonitor mark across landing, docs & dashboard (#1661) (5277eec)
  • brand: use chmonitor mark in host switcher (#1662) (7873e44)
  • ch-capabilities: add capability-diff report formatter (Plan 10c offline) (#1724) (ff6f7da)
  • ch-compat: add capability discovery + diff harness (#1703) (e7b279d)
  • charts: redesign query activity heatmap as github-style year calendar (5f9f137)
  • ci: add Claude Code GitHub Workflow (#1664) (08f4ea4)
  • deploy: add Railway/Render/Fly one-click templates (#1708) (e61d41c)
  • docs: generate ClickHouse platform support matrix (#1702) (a7d1deb)
  • docs: redirect /docs to docs.chmonitor.dev, remove in-app reader (#1663) (6eea45b)
  • edition: add open-core edition module (default community, fail-open) (#1690) (cc78c22)
  • health: redesign Health Summary with severity banner, filters & sparklines (#1680) (24d6765)
  • helm: publish chart to OCI and GitHub Pages on release (8636352)
  • helm: serve chart repo via Cloudflare Pages at charts.chmonitor.dev (#1747) (a5c5d1e)
  • landing: add chmonitor logo system + /brand page (#1660) (77d15d3)
  • menu: surface 5 orphaned pages in navigation (#1735) (762d915)
  • overview: add multi-disk Disk Usage breakdown card (#1674) (f1fafa1)
  • overview: break Query Activity Heatmap into compact per-month blocks (#1725) (d491024)
  • overview: icons on heatmap metric pills, compact KPI cards, hidden scrollbar (#1727) (93eae72)
  • overview: move query activity heatmap to top, full width (#1668) (d6d4876)
  • overview: redesign Query Activity Heatmap as multi-metric full-width banner (#1681) (0dc0a36)
  • overview: restyle backup size card empty state (#1677) (fea30f7)
  • overview: restyle disk size card to match storage redesign (#1675) (a30082c)
  • overview: restyle storage tab — partition health stat-triad, RankBars, grid (#1678) (b48dfb6)
  • query-config: add clickhouseSettings to declarative schema; migrate tables-overview + stack-traces (#1717) (c940031)
  • query-config: add declarative config loader behind CHM_CONFIG_SOURCE (default ts) (#1689) (43c1d31)
  • query-config: add declarative config schema + validator (#1685) (91f3837)
  • query-config: declarative docs as plain string + migrate query-cache/merge-performance (#1718) (c875dc7)
  • query-config: declarative expandable spec, migrate settings/users (#1728) (d119b03)
  • query-config: declarative permission field + migrate query-detail/mergetree-settings/metrics (#1721) (640ea18)
  • query-config: declarative rowStyle (compiles to rowClassName) + migrate kafka-consumers (#1719) (e3d82e5)
  • query-config: migrate explorer/ domain to declarative catalog (behind flag) (#1693) (63595e5)
  • query-config: migrate keeper/ domain to declarative catalog (behind flag) (#1694) (2e555d0)
  • query-config: migrate logs/security/anomaly/merges domains to declarative (behind flag) (#1697) (dbe6de1)
  • query-config: migrate more/ domain to declarative catalog (behind flag) (#1695) (3d86388)
  • query-config: migrate part-info/projections/user-processes to declarative catalog (#1716) (a6c133e)
  • query-config: migrate part-log + mutations to declarative rowStyle (#1720) (26dd40c)
  • query-config: migrate queries/ domain to declarative (behind flag) (#1696) (2996fca)
  • query-config: migrate system/ domain to declarative catalog (behind flag) (#1691) (4507be8)
  • query-config: migrate tables/ domain to declarative catalog (behind flag) (#1692) (ba5ea86)
  • query-config: resolve declarative catalog in registry behind CHM_CONFIG_SOURCE (default ts) (#1699) (9a545ae)
  • rbac: add RBAC scaffold (community all-access, fail-open) (#1698) (1d54595)
  • telemetry: add opt-in daily instance ping (dark by default) (#1688) (964f6b3)
  • telemetry: add opt-in telemetry core (off by default) (#1683) (87b6de0)
  • telemetry: capture deploy target + ClickHouse version/flavor dimensions (#1686) (6ac19ce)
  • telemetry: wire activation events + define activation metric (#1684) (9a3137e)
  • agent: separate reasoning & tool blocks, local grouping, auto-collapse (#1657) (e20b996)
  • charts: degrade optional chart with missing table to empty 200 (#1733) (ef5161c)
  • charts: mount charts eagerly to stop scroll-triggered skeleton flashing (dd398dc)
  • charts: stop disks-usage query OOM by pre-filtering metrics (#1736) (8c2e920)
  • ci: publish chmonitor multi-arch manifest on push to main (#1751) (36ffe49)
  • conversation-store: widen AgentState list scan to keep older history (#1737) (69ec855)
  • dashboard: responsive audit — min-w-0 on about FeatureCard (#1666) (65fc2e6)
  • data-table: contain horizontal scroll within table on mobile (#1670) (e58ca6e)
  • healthz: add /healthz route and fix k8s probe crash loop (e3886b6)
  • healthz: add /heathz typo alias sharing the same handler (47cbed4)
  • healthz: bound /api/healthz ping + parameterize chart probes + dual-runtime guard (#1749) (67b49c8)
  • helm: bootstrap gh-pages branch on first chart release (#1745) (b676241)
  • helm: drop dead Pages-enable step that 403s every run (#1746) (c4ff1d6)
  • helm: skip existing releases so chart-releaser is idempotent (#1748) (b05072c)
  • insights: add auto-rows to charts grid to prevent blank space (#1671) (047648a)
  • insights: align card title padding between skeleton and loaded states (#1667) (35c8a3c)
  • insights: give charts-section grid definite row height (7e70f1d)
  • landing: correct stale OpenNext deploy copy on the marketing page (#1714) (5ba0eb9)
  • overview: remove stray tab strip scrollbar (#1665) (b4e8d7c)
  • shell: resolve app-shell Lighthouse a11y failures (aria, label, skip-link) (#1734) (200cdc7)
  • ui: explorer tree a11y — name toggle buttons, fix list nesting (#1740) (f09751d)
  • ui: give data-table Select triggers accessible names (#1741) (405e9bf)
  • ui: give Progress bars accessible names (aria-progressbar-name) (#1743) (bfe4e1e)
  • ui: host switcher accessible name matches visible label (WCAG 2.5.3) (#1742) (ea9ae2f)
  • ui: name the icon-only query-row action links (a11y link-name) (#1739) (786f2e0)
  • ui: raise contrast of data-table "N records" count (WCAG AA) (#1744) (492ca08)
  • ui: raise contrast on muted labels and the "New" badge (WCAG AA) (#1738) (8f64428)
  • health: batch health checks into one request + show cached values instantly (#1669) (9be95d8)
  • agent: trim tools to lean primitives (63 to ~18) (#1656) (6879bf1)
  • Full release notes
    helm-chmonitor-0.2.9 Jun 18, 2026

    helm-chmonitor-0.2.9

    A Helm chart for the chmonitor dashboard
    Full release notes
    helm-chmonitor-0.2.10 Jun 18, 2026

    helm-chmonitor-0.2.10

    A Helm chart for the chmonitor dashboard
    Full release notes
    v0.2.9 Jun 17, 2026

    v0.2.9

    > We're excited to announce the release of chmonitor v0.2.9, packed with 51 commits and 43 pull requests over just 3 days, averaging 17 updates per day! Our contributors worked diligently, with a remarkable 44 commits during the day and 7 at night. A big shoutout to our most active AI assistant, which generated 76 comments and conducted 33 reviews.
  • Add an AI insights panel to the overview with cached, dismissible suggestions.
  • Collapse root redirect to improve response times and avoid TTFB regression.
  • Introduce a host switcher feature allowing secure storage for added hosts.
  • Implement per-page social cards for dashboard query pages.
  • Redesign the marketing site and align the documentation theme with updated aesthetics.
  • Add static Open Graph images for landing, docs, and dashboard pages.
  • Fix connection pool leak in ClickHouse by properly releasing the client.
  • Stabilise
  • 📦 51 commits across 43 pull requests
  • 🗓️ Shipped over 3 days — pace ~17.0 commits/day
  • 🌞 44 daytime · 🌙 7 night-time commits
  • 👥 3 contributors
  • 💬 222 comments back and forth across reviews
  • 🤖 6 AI agents involved
  • 🏆 Shoutout to @gemini-code-assist[bot] — 76 comments, 33 code reviews, 0 approvals
  • This release is published to the GitHub Container Registry as ghcr.io/duyet/clickhouse-monitoring:0.2.9. ```bash docker pull ghcr.io/duyet/clickhouse-monitoring:0.2.9 docker pull ghcr.io/duyet/chmonitor:0.2.9 ``` Pin it in your own Dockerfile: ```dockerfile FROM ghcr.io/duyet/clickhouse-monitoring:0.2.9 ``` Compare: v0.2.8...v0.2.9 > Built from commit aa8b987 on 2026-06-17T06:37:07.719Z · summary by anyrouter. > **v0.3 switches the runtime app from the legacy Next.js dashboard to > dashboard-tsr (TanStack Start).** The ClickHouse connection vars are > unchanged, but **client-side (NEXT_PUBLIC_*) vars are renamed to VITE_*** > and server auth moves to CHM_*. The Docker entrypoint changed too. | Concern | v0.2 (Next.js) | v0.3 (TanStack Start) | |---|---|---| | Client env prefix | NEXT_PUBLIC_* | VITE_* (build-time inlined) | | Auth provider (client) | NEXT_PUBLIC_AUTH_PROVIDER | VITE_AUTH_PROVIDER | | Clerk key (client) | NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | VITE_CLERK_PUBLISHABLE_KEY | | Conversation DB flag | NEXT_PUBLIC_FEATURE_CONVERSATION_DB | VITE_FEATURE_CONVERSATION_DB | | Auth provider (server) | derived from NEXT_PUBLIC_AUTH_PROVIDER | CHM_AUTH_PROVIDER (none\|clerk\|proxy, wins on server) | | Docker entrypoint | node server.js (OpenNext standalone) | node server/index.mjs (Nitro node-server) | | ClickHouse vars | CLICKHOUSE_HOST/USER/PASSWORD/NAME | unchanged | | Secrets | CLERK_SECRET_KEY, etc. | unchanged (still server secrets) | The old NEXT_PUBLIC_* names still work as a compatibility fallback — the rename is recommended but not required, nothing breaks if you skip it. Client VITE_* vars are build-time inlined — set them when building the image / Worker, not only at runtime. Server vars (CLICKHOUSE_*, CHM_*, *_API_KEY) are read at runtime as before and are unchanged. Full per-platform steps: see [Migrate to v0.3](/docs/migrating/v0-3). ```text You are migrating a chmonitor deployment from v0.2 (Next.js) to v0.3 (TanStack Start). Here is my current environment (.env / docker-compose / wrangler / k8s manifest): Rewrite it for v0.3 applying EXACTLY these rules, and output the migrated config plus a short list of what you changed: 1. Rename every client var prefix NEXT_PUBLIC_ -> VITE_. Specifically: NEXT_PUBLIC_AUTH_PROVIDER -> VITE_AUTH_PROVIDER NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY -> VITE_CLERK_PUBLISHABLE_KEY NEXT_PUBLIC_FEATURE_CONVERSATION_DB-> VITE_FEATURE_CONVERSATION_DB (any other NEXT_PUBLIC_X -> VITE_X) 2. Add server-side auth var CHM_AUTH_PROVIDER (none|clerk|proxy) mirroring the client provider. It is authoritative on the server; keep VITE_AUTH_PROVIDER too so the browser bundle agrees. 3. Do NOT rename server vars: CLICKHOUSE_HOST, CLICKHOUSE_USER, CLICKHOUSE_PASSWORD, CLICKHOUSE_NAME, CLICKHOUSE_MAX_EXECUTION_TIME, CLERK_SECRET_KEY, *_API_KEY — keep as-is. 4. VITE_* vars are build-time inlined: ensure they are present at image/Worker BUILD time (Docker build-args or CI build env), not only at container runtime. 5. If this is a Docker deployment, change the container start command from node server.js to node server/index.mjs. Port 3000 and the /api/healthz healthcheck are unchanged. 6. Flag anything that has no v0.3 equivalent instead of silently dropping it. ``` ---
  • ci: align release docker cache scope + diagnosable container health checks (#1610) (ae78ad9)
  • ci: pass -R to gh workflow run in release-please (#1608) (da18863)
  • Full release notes
    v0.2.8 Jun 14, 2026

    v0.2.8

    > We're excited to announce the release of chmonitor v0.2.8, delivering a stellar performance with 48 commits across one high-output day! Our dedicated team of three contributors kept an impressive pace, making 38 of those contributions during daylight hours and tackling additional challenges at night. A special shoutout goes to our most active agent, whose feedback shaped our development with 83 insightful comments. Let's dive into the highlights of this release!
  • Add tiered LLM notes system to enhance the dashboard's intelligence.
  • Implement "Running Queries" and "Clusters" as top-level sidebar items for easier navigation.
  • Fix type checks for the menu-counts test to avoid disruption in CI workflows.
  • Enforce authentication on key API endpoints and sanitize error responses for improved security.
  • Resolve accessibility violations within health, dashboard, and menu components.
  • Prevent normalization of numeric strings with leading zeros in data processing.
  • 📦 48 commits across 36 pull requests
  • 🗓️ Shipped over 1 day — pace ~48.0 commits/day
  • 🌞 38 daytime · 🌙 10 night-time commits
  • 👥 3 contributors
  • 💬 251 comments back and forth across reviews
  • 🤖 6 AI agents involved
  • 🏆 Shoutout to @github-actions[bot] — 83 comments, 0 code reviews, 0 approvals
  • This release is published to the GitHub Container Registry as ghcr.io/duyet/clickhouse-monitoring:0.2.8. ```bash docker pull ghcr.io/duyet/clickhouse-monitoring:0.2.8 docker pull ghcr.io/duyet/chmonitor:0.2.8 ``` Pin it in your own Dockerfile: ```dockerfile FROM ghcr.io/duyet/clickhouse-monitoring:0.2.8 ``` Compare: v0.2.7...v0.2.8 > Built from commit ae78ad9 on 2026-06-14T08:08:57.882Z · summary by anyrouter. ---
  • release: tiered LLM notes (Copilot→Models→AnyRouter), recap stats, docker pin (#1582) (3009f99)
  • add Running Queries and Clusters as top-level sidebar items (#1569) (74fc5eb)
  • api: enforce auth on clean/init/pageview endpoints and sanitize error responses (#1602) (9b9d239)
  • clickhouse-client: harden http status code regex in clickhouse-fetch (#1578) (0d27e33)
  • clickhouse-client: redact inline credentials from host config debug logs (#1581) (6d0609b)
  • dashboard-tsr: bridge CLICKHOUSE_DATABASE and EVENTS_TABLE_NAME on workers (#1576) (8096672)
  • dashboard-tsr: fix a11y violations in health, dashboard, and menu (#1588) (5340ce8)
  • dashboard-tsr: listen for swr:revalidate event to refresh TanStack Query cache (#1579) (7927f18)
  • dashboard-tsr: skip hash-anchor URLs in prerender crawl to unblock Docker build (#1583) (f001263)
  • dashboard-tsr: type menu-counts test to unblock type-check:test (#1605) (850162e)
  • e2e: expand collapsible menu sections before checking sidebar links (#1568) (cc6cdbd)
  • logger: safely guard process.env access for browser and serverless runtimes (#1589) (36f3b1d)
  • rust/ch-json: prevent normalization of numeric strings with leading zeros (#1590) (eb9a091)
  • validate-docker: bundle @clickhouse/client-common + follow root redirect (#1604) (6d280d9)
  • dashboard-tsr: optimize menu counts endpoint to use single batched query (#1591) (dff6ed4)
  • dashboard-tsr: unmount collapsed chart rows to stop background polling (#1580) (1400632)
  • Full release notes
    v0.2.7 Jun 13, 2026

    v0.2.7

  • add perf-compare script for Win Metrics (#1392) (#1514) (faa6972)
  • agent: add conversation storage adapters (#1517) (34ac9d4)
  • auth: activate CHM_CLERK_PUBLIC_READ on dash + dash-tsr (#1536) (e9b7e45)
  • auth: read/write permission model + CHM_CLERK_PUBLIC_READ (#1535) (1112238)
  • dashboard-tsr: BI-style SQL Console + fix explorer tab-switch freeze (#1531) (b42ebb9)
  • dashboard-tsr: pluggable auth providers (none|clerk|proxy) + CF Access/proxy + auth docs + v0.3 changelog (#1392) (#1440) (4c2a50c)
  • docs: astro-design-system theme + per-release versioning (#1529) (2552de4)
  • add missing WASM artifact upload step in CI workflow (#1553) (13fcd92)
  • agent: send AnyRouter category in X-AnyRouter-Categories, not the source header (#1516) (20cb0a3)
  • change regex to /\bunion\s+(all\s+)?select\b/i. (0f15879)
  • classify unknown table errors as table_not_found (#1546) (b0618af)
  • dashboard-tsr: accept Clerk session in /api/v1 guard (#1392) (#1437) (6b894e7)
  • dashboard-tsr: add a11y attributes to KpiCard loading skeleton (#1473) (6ff8d63)
  • dashboard-tsr: add a11y loading announcement to LazyChartWrapper placeholder (#1485) (d4b56b9)
  • dashboard-tsr: add focus-visible ring to explorer tree expand button (#1458) (88bfda7)
  • dashboard-tsr: add keyboard a11y to ChartEmpty clickable card (#1478) (1789061)
  • dashboard-tsr: add keyboard a11y to explorer database cards (#1481) (0c91dc2)
  • dashboard-tsr: add security headers to static pages via _headers (#1491) (bc516dc)
  • dashboard-tsr: add security response headers (#1487) (0035c84)
  • dashboard-tsr: add SheetTitle to ExplorerSidebar for screen-reader a11y (#1457) (bc9f76d)
  • dashboard-tsr: add SQL validation to browser-connections proxy endpoint (#1471) (cd9b309)
  • dashboard-tsr: add SQL validation to POST /api/v1/data with queryConfigName (#1483) (f54fa04)
  • dashboard-tsr: add underline variant to TabsSkeleton to prevent CLS on overview load (#1460) (7d17fe3)
  • dashboard-tsr: auth=none opens everything; frontend renders, backend enforces (#1533) (497d474)
  • dashboard-tsr: auto-reload on stale dynamic-import after deploy (#1538) (2ee1f31)
  • dashboard-tsr: collapse root redirect to one edge hop + unblock e2e CI (#1392) (763184e)
  • dashboard-tsr: collapse root redirect to single edge hop + unblock e2e CI (#1392) (2674450)
  • dashboard-tsr: convention fixes, stable keys, ai-agent docs sync, regression tests (#1555) (9c5944d)
  • dashboard-tsr: correct explorer page height to account for shell padding (#1479) (2fd5802)
  • dashboard-tsr: deploy CHM_CLERK_PUBLIC_READ var (CI patch script) (#1537) (90d1378)
  • dashboard-tsr: deterministic cache-bust in clerk-client test (#1503) (121184f)
  • dashboard-tsr: drop hardcoded clerk key default, sync env docs (#1561) (3bb9df9)
  • dashboard-tsr: enforce chart feature perms + port deprecated chart variants (#1392) (#1445) (07dc70c)
  • dashboard-tsr: enforce ClickHouse readonly mode in /api/v1/data (#1476) (54f3af1)
  • dashboard-tsr: keep agent menu visible when signed in (#1453) (5853abc)
  • dashboard-tsr: lint cleanup, flaky test, and query-config SQL fixes (#1554) (5ae1c49)
  • dashboard-tsr: make SSR stub constructable so prerender stops throwing (#1499) (a220610)
  • dashboard-tsr: match overview fallback skeleton to KpiCard layout (#1480) (60af83d)
  • dashboard-tsr: populate client chart-component registry (71 charts) (#1392) (#1443) (7fcf623)
  • dashboard-tsr: query detail button + collapse charts instead of hiding (#1497) (15a43d5)
  • dashboard-tsr: re-export shape-matched TableSkeleton to prevent CLS (#1474) (80a163b)
  • dashboard-tsr: register all chart modules so charts resolve (#1392) (#1441) (c42ed90)
  • dashboard-tsr: register clerkMiddleware + missing explorer configs (#1496) (6bf699e)
  • dashboard-tsr: remove aria-hidden that suppresses skeleton loading announcements (#1482) (a1d2af8)
  • dashboard-tsr: replace require() Clerk gating with ESM imports (#1532) (764f8fb)
  • dashboard-tsr: replace running-queries Suspense fallback with full-page skeleton (#1467) (f0c3a30)
  • dashboard-tsr: restore focus-visible ring on overview tab triggers (#1461) (5a0639c)
  • dashboard-tsr: shrink OverviewPageFallback status strip skeleton h-10→h-5 (#1456) (4781009)
  • dashboard-tsr: skip prerender for e2e build so the gate actually runs (#1392) (cfa550c)
  • dashboard-tsr: stabilize table/chart renders (memoize context + columns, keepPreviousData) (#1543) (c90b03c)
  • dashboard-tsr: stop full-page skeleton flash on overview tab switch (#1454) (02d5292)
  • dashboard-tsr: surface D1 persist failures + bound repoCache + guard conversation routes (#1511) (305341b)
  • dashboard-tsr: unblock main — chainable SSR stub + readonly string type (#1488) (4b84603)
  • dashboard-tsr: unmount collapsed query charts (#1498) (9584c68)
  • dashboard-tsr: update readonly structural test for string value (#1490) (941d4e9)
  • dashboard-tsr: use 100dvh in explorer to match agents page (#1463) (9527ef1)
  • dashboard-tsr: use grid skeleton for dashboard page loading state (#1468) (af05aa8)
  • dashboard-tsr: use h-96 instead of h-screen for table redirect skeleton (#1486) (c767498)
  • dashboard-tsr: use port 8443 for Tailscale funnel (#1539) (49a9250)
  • dashboard-tsr: use shared ChartSkeleton/TableSkeleton in page skeletons (#1470) (bf592c4)
  • dashboard-tsr: use Skeleton shimmer in KpiCard loading state (#1459) (f44a9df)
  • dashboard-tsr: wire table filterSchema + restore actions feature-auth (#1392) (#1444) (8d3ca79)
  • dashboard: keep view state local so toggle clicks work in Cypress (#1557) (a216552)
  • docker: copy tsconfig.base.json into builder stage (#1556) (e74c70a)
  • e2e: green e2e-test and e2e-test-tsr on main (#1558) (bc6e451)
  • enable rust build in docker jobs after WASM build removal (#1552) (6783aab)
  • explorer: resolve dependency graph hydration mismatch and infinite loop (#1510) (e2d9618)
  • green main — prerender crawl crashes and root Dockerfile tsconfig (#1563) (053fd62)
  • release: remove duplicated Git changes and Docker tags from release notes (#1442) (4810b40)
  • resolve TSR cutover blockers (hydration, layout, zoom dialog) (#1527) (fd187ce)
  • sql-validator: catch UNION ALL SELECT injection bypass (#1475) (0f15879)
  • switch root Dockerfile and docker-compose to dashboard-tsr (#1548) (03a3c44)
  • verify-deploy: degrade ClickHouse-upstream timeouts to warnings (8b5b16f)
  • dashboard-tsr: cache content-hashed assets immutably for lower TTFB (#1507) (8c26970)
  • dashboard-tsr: combine SSR stubs for xyflow/streamdown/highlight.js/assistant-ui (#1472) (f7dfc4c)
  • dashboard-tsr: fix loading CLS drift + cut hidden-tab polling and re-renders (#1515) (1818e80)
  • dashboard-tsr: hover-prefetch, lazy-init providers, visibility-guard pollers (#1544) (ac3baeb)
  • dashboard-tsr: make loading skeletons static for faster first paint (#1506) (d627154)
  • dashboard-tsr: memoize data-table filter context and handlers (#1524) (12248d1)
  • dashboard-tsr: persist query cache + host list to localStorage for instant warm loads (#1508) (2d31e38)
  • dashboard-tsr: persist query cache to localStorage for instant repeat loads (#1505) (ae5b31f)
  • dashboard-tsr: set query gcTime to 30m for instant back-nav (#1489) (3413444)
  • dashboard-tsr: stop background polling on hidden tabs and inactive chart tabs (#1523) (0591e7d)
  • dashboard-tsr: stub @json-render/shadcn + @json-render/react from SSR bundle (#1477) (76a6cfe)
  • dashboard-tsr: stub assistant-stream out of CF Worker bundle (#1484) (2f34d4f)
  • dashboard-tsr: stub recharts in SSR worker bundle (~1 MiB reduction) (#1462) (e719f7e)
  • api: cache headers, parallel queries, and shared validators in dashboard-tsr (#1526) (208c645)
  • dashboard-tsr: adopt activateOnEnterOrSpace in chart-empty + expandable-text (#1495) (3aa6bec)
  • dashboard-tsr: dedup components and fix false keeper-leader layout (#1525) (866a874)
  • dashboard-tsr: docs route hygiene, dead hooks, lazy sql-formatter (#1564) (7cbed3d)
  • dashboard-tsr: extract activateOnEnterOrSpace a11y helper (#1494) (9b01572)
  • dashboard-tsr: import zod directly instead of the zod/v3 compat shim (#1521) (6e55851)
  • dashboard-tsr: replace last swr usage with tanstack query, drop swr dep (#1562) (6ccb7f5)
  • dashboard-tsr: split + dedup large components for reuse (#1392) (#1449) (966d96e)
  • Full release notes
    v0.2.6 Jun 4, 2026

    v0.2.6

    Built from commit eb64ac5 on 2026-06-04T03:40:58.673Z.
  • ghcr.io/duyet/clickhouse-monitoring:0.2.6
  • Stable aliases: ghcr.io/duyet/clickhouse-monitoring:0.2, ghcr.io/duyet/clickhouse-monitoring:0, and ghcr.io/duyet/clickhouse-monitoring:latest.
  • Commit tag: ghcr.io/duyet/clickhouse-monitoring:sha-eb64ac5
  • Agent Workflows: Implemented an AI agent workflow harness using dynamic templates.
  • Context & Memory: Added persistent agent findings tools (record_finding, list_recent_findings) and auto-generated chat titles.
  • Clerk Auth for MCP: Wired up Clerk OAuth login, consent flows, and REST verification tokens for the Model Context Protocol (MCP) worker.
  • image
  • Cluster Topology: Rebuilt the /cluster page into a data-driven Cluster Topology node visualization.
  • New System Views: Added dedicated monitoring pages for:
  • - system.dropped_tables - system.moves - system.warnings - system.replicated_fetches - system.replicated_merge_tree_settings - system.user_processes
  • Queues & Timelines: Introduced a Kafka consumer lag view, a part lifecycle timeline (system.part_log), and an explain plan tree visualizer.
  • PeerDB monitoring.
  • Data Table Engine: Redesigned table.
  • Declarative Mobile Cards: Added a responsive card grid fallback view across all system entity and diagnostic pages.
  • UX Upgrades: Added global time-range and auto-refresh persistence to localStorage, direct CSV exports from chart cards, and a first-run onboarding flow.
  • Test Suite Hardening: Fixed cross-file mock pollution across 34 files, driving failures to 0 and boosting unit coverage (90%+ on core library modules).
  • CI Optimization: Accelerated Docker validation by reusing pre-built images and quarantined flaky headless table-polling tests.
  • Kubernetes: Vendored a production Helm chart and Kustomize base directly in-repo, backed by kubeconform and helm-lint CI gates.
  • ---
  • chore: add screenshots by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1206
  • ci: optimize docker build in release workflow by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1207
  • feat(charts): render correct units in compact chart row mode by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1208
  • feat(peerdb): PeerDB monitoring by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1209
  • perf(peerdb): memoize smoothPath in sparkline/area charts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1213
  • fix(peerdb): normalize log-level casing in mirror logs panel by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1211
  • fix(maintenance): guard PeerDB cache envs and release reruns by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1215
  • chore: address react-doctor mechanical findings (safe, behavior-preserving) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1210
  • feat(keeper): Keeper monitoring by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1214
  • chore(dead-code): remove 36 unused files flagged by react-doctor by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1217
  • refactor(monorepo): add tsconfig.base.json + Turbo pipeline (Phase 0) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1219
  • refactor(monorepo): extract Tier-1 packages + break HostInfo cycle (Phase 1) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1221
  • chore(peerdb): apply react-doctor mechanical fixes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1218
  • perf(react-compiler): enable React Compiler and strip redundant manual memoization by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1216
  • chore(deps): upgrade dependencies to latest and fix breaking changes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1220
  • refactor(monorepo): move web app into apps/web/ (Phase 2) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1222
  • fix(cf): resolve nested standalone path in stub script for monorepo by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1223
  • refactor(rust): unify tools/ into the rust/ Cargo workspace by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1224
  • style(rust): format ch-pivot for unified workspace cargo fmt by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1226
  • refactor(monorepo): move mcp worker into apps/mcp-worker (Phase 3) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1225
  • chore(docs): remove dead Nextra site, recover doc screenshots by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1227
  • refactor(monorepo): extract @chm/logger package (Phase 4a) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1228
  • docs(knowledge): monorepo refactor handoff note by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1231
  • refactor(monorepo): extract @chm/clickhouse-client + @chm/mcp-server (Phase 4) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1230
  • chore(monorepo): add depcruise boundaries, changesets, MCP worker CI (Phase 5) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1232
  • docs: update monorepo refactor status + add depcruise to CLAUDE.md by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1233
  • fix(peerdb): correctness fixes + code review P1 fixes (#1212) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1234
  • fix(agents): gate useUser behind isClerkEnabled + fail-fast query-config test by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1235
  • fix(test): abort query-config version probe instead of request_timeout by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1236
  • fix(test): bound query-config probe with a wall-clock race by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1237
  • feat(agents): show chat UI for everyone, gate sending on sign-in by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1238
  • feat(agents): polish agents page — dialogs, scrollable popovers, header cleanup by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1239
  • fix(agents): don't auto-scroll the welcome screen on open by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1240
  • feat(ui): keeper cards + connections expand, health cards, security charts, menu by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1241
  • fix(agents): break mcp-panel↔dialog import cycle by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1242
  • chore(scripts): consistent test: prefixes + relocate promptfoo config by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1243
  • feat(health): SQL in detail dialog + audit-prompt toggles & token count by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1244
  • perf(ci): validate-docker reuses prebuilt amd64 image by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1245
  • fix(ci): stop component-test 30-min hang by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1247
  • fix(ci): make component-test green (Recharts mount size + quarantine headless flakes) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1250
  • fix(ci): quarantine flaky table-client polling test by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1251
  • feat(tables): expandable "more info" rows for config tables by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1248
  • fix(charts): stabilize scroll while lazy charts render by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1246
  • feat(tables): card view for low-cardinality tables by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1249
  • test(sql-builder): add comprehensive unit tests for 90%+ coverage by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1252
  • test(clickhouse-client): add unit tests for client, config, pool, and fetch by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1255
  • test(charts): add structural validation tests for chart query configs by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1253
  • test(logger,mcp,utils): add unit tests for logger, MCP auth, and utility modules by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1256
  • feat(keeper): render /keeper/info with KeeperNodeCards by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1257
  • fix(charts): add missing dictionary-count client chart by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1258
  • fix(data-table): replace pill bars with clean full-height background bars by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1259
  • test(swr): add unit tests for SWR data-fetching hooks by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1254
  • fix(explorer): dedup @codemirror/state to fix SQL editor crash by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1260
  • feat(readonly-tables): expandable diagnostics row + AI fix prompt action by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1261
  • fix(explorer): reseed query tab SQL when selected table changes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1262
  • fix(readonly-tables): render is_readonly in red (readonly = problem state) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1263
  • fix(charts): convert query-duration and query-memory to area charts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1264
  • fix(ui): unify chart-grid and stack spacing rhythm by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1265
  • feat(charts): extract ProportionList primitive from 3 duplicated progress-bar charts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1266
  • feat(charts): route status colors through shared tokens by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1267
  • fix(ui): remove redundant padding from insights page by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1268
  • fix(clusters): remove redundant breadcrumb and add Suspense to table by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1269
  • feat(ui): shared PageHeader primitive — kills H1 fragmentation across health/cluster/running-queries by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1270
  • test(lib): add tests for engine-icons, peerdb-config, permissions, hooks, API utils by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1271
  • test(api): add unit tests for charts, cluster-counts, dashboard API routes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1272
  • test(agent-tools): unit tests for batch 1 tools (6 modules) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1273
  • test(agent-tools): add batch 2 unit tests for 12 tool modules by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1274
  • fix(data-table): re-render memoized body on row expansion by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1275
  • fix(charts): stop dictionary-count 500 + resilient chart route by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1276
  • feat(data-table): SQL-hero mobile cards + table/card toggle on mobile by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1278
  • feat(running-queries): SQL-first card view + table/card toggle by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1280
  • fix(test): stop global mock.module pollution in the unit suite by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1281
  • chore(deps): update actions/ai-inference action to v2 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1277
  • test: fix mock contamination across 34 files (80→0 failures, +207 tests) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1283
  • feat(agent): workflow harness with dynamic workflow templates by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1279
  • test(agent): fix context-tools mock contamination from #1279 by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1285
  • ci: include package tests in coverage report by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1284
  • test: harden unit suite against cross-file bun mock pollution by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1287
  • fix(ui): overview scroll-jump, agent menu gating, host badge truncation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1289
  • feat(monitoring): add system.dropped_tables view at /dropped-tables by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1290
  • feat(monitoring): add system.moves view at /moves by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1291
  • feat(monitoring): add system.warnings view at /warnings by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1292
  • feat(monitoring): add system.replicated_fetches view at /replicated-fetches by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1294
  • feat(monitoring): add system.replicated_merge_tree_settings view at /replicated-merge-tree-settings by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1295
  • feat(monitoring): add system.user_processes view at /user-processes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1293
  • feat(peerdb): enhance peers table with logos + mirror stats, center topology expand button by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1297
  • feat(agent): multi-provider config + chat UI redesign by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1296
  • perf(build): optimizePackageImports for webpack production build by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1298
  • fix(docker): healthcheck hits /api/healthz instead of root by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1299
  • feat(tracking): persist global time range to localStorage + URL by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1300
  • feat(docs): surface AI Agent, Env Reference, PeerDB in sidebar nav by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1301
  • fix(ui): error-page hero icon, redirect skeletons, root 404 by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1302
  • feat(monitoring): part lifecycle timeline from system.part_log by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1303
  • feat(alerting): autonomous scheduled health-sweep cron by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1305
  • feat(deploy): vendor production Helm chart in-repo by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1306
  • feat(monitoring): Kafka consumer lag view from system.kafka_consumers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1304
  • feat(tracking): persist auto-refresh interval across reloads by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1307
  • perf(sidebar): batch menu-count requests into a single endpoint by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1308
  • feat(monitoring): per-query resource timeline from system.query_metric_log by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1309
  • feat(tracking): direct CSV export from any chart card by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1311
  • docs(content): add MCP server page + configuration hub, reconcile .env.example by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1310
  • feat(agent): persist agent findings + record_finding/list_recent_findings tools by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1312
  • feat(ux): first-run onboarding, explorer skeleton, explain empty state by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1313
  • feat(deploy): kustomize base + kubeconform/helm-lint CI gate + k8s guide by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1314
  • chore(brand): rename product to chmonitor by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1315
  • fix(overview): keep page scrollable to bottom during loading by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1316
  • feat(failed-queries): add filters + fix truncated action-column header by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1317
  • feat(ui): premium redesign of Request Info (SQL) dialog by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1318
  • feat(agent): auto-generate conversation titles from first message by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1319
  • feat(expensive-queries): redesigned responsive table with expand, filters, highlight by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1320
  • feat(running-queries): split into running + recently-completed tables with live transition by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1321
  • feat(slow-queries): redesigned responsive table with expand, filters, highlight by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1322
  • feat(part-log): redesign page with lifecycle charts, KPIs, and rich events table by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1323
  • perf(query-metric-log): optimize query for Worker limits + surface server errors by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1324
  • feat(explain): render query plan as a tree visualization by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1325
  • feat(user-processes): format columns (user badge, memory bars, readable values) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1326
  • feat(disks): redesign disks page with bento grid cards by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1327
  • feat(cluster): upgrade /cluster into Cluster Topology visualization by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1328
  • test: fix unit-tests CI — add getClient to agent-tool mocks by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1329
  • fix(cluster): address Cluster Topology review feedback by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1331
  • feat(running-queries): cap completed list to 10, add Done badge per row by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1330
  • feat(cluster): real-data topology API for all cluster shapes (Keeper-optional, all nodes) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1332
  • feat(seo): add sitemap.xml and robots.txt by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1333
  • feat(cluster): robust offset-hull cluster overlays for all topology shapes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1334
  • refactor(cluster): merge topology into /clusters page by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1335
  • fix(query-tables): deduplicate shared components and fix filter/sort bugs by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1336
  • fix(refactor): extract shared query-table components, deduplicate 15 code smells by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1337
  • fix(topology): fix node overlap, dark-mode visibility, and text readability by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1338
  • feat(data-table): declarative card layout via QueryConfig.card by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1339
  • feat(data-table): declarative rich expand panels via createExpandedPanel by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1340
  • feat(query-config): card + rich expand for query-log query lists by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1341
  • feat(query-config): card view for all table/replication pages by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1342
  • feat(query-config): card view for merges + system entity pages by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1343
  • feat(query-config): card view for more/ + keeper/ pages by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1344
  • feat(query-config): card view for remaining query diagnostic pages by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1345
  • feat(data-table): responsive card grid for entity pages by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1346
  • fix(data-table): card review follow-ups (empty-state, hit area, zone dedup) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1347
  • fix(a11y): BackgroundBar progressbar semantics + GPU-composited fill by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1348
  • feat(menu): sidebar table-availability muting + version-mismatch/permission UX by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1349
  • feat(topology): redesign cluster topo — distinct node shapes, CH logo, fix black fills by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1350
  • fix(data-table): pass view='table' in component tests by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1351
  • fix(overview): swap tabs without re-flashing the KPI cards by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1352
  • fix(topology): stop label overlap, enclose keeper labels, move cluster pills to bottom by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1353
  • feat(topology): label & toggle physical clusters, data-driven height, Claude palette by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1354
  • feat(web): enhance data table with search, filters, and sleek headers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1355
  • fix(clerk): handle signOut error gracefully by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1356
  • fix(data-table): unify query-page toolbar + exclude action column from filters by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1357
  • fix(data-table): address Gemini review on filterable columns by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1358
  • fix(filters): hide filter bar when empty, keep display options open, normal button sizes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1359
  • fix(data-table): stop Presets full-page re-render + redesign column headers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1360
  • fix(data-table): redesign column headers (Cloudflare-style) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1361
  • fix(data-table): content-aware column widths, stop header truncation, square table corners by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1362
  • fix(data-table): move card Sort into toolbar, add density support to cards by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1363
  • feat(filters): add per-page quick filters with segmented control by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1365
  • fix(data-table): render filter chip label as single text node by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1366
  • docs(deploy): add self-host quick start for cloudflare, docker, k8s by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1367
  • chore(mcp): rename apps/mcp-worker → apps/mcp by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1368
  • chore(dashboard): rename apps/web → apps/dashboard by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1369
  • feat(landing): add Astro marketing scaffold (chmonitor.dev) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1370
  • feat(landing): add remaining marketing sections by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1371
  • feat(docs): add standalone Astro Starlight docs scaffold by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1373
  • feat(docs): sync dashboard docs into Starlight site by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1374
  • fix(docker): build dashboard only, exclude standalone astro apps by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1375
  • feat(workers): rename workers and wire chmonitor.dev subdomains by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1376
  • ci(cloudflare): deploy landing and docs workers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1377
  • docs: update domains and stale paths for the 4-app topology by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1378
  • fix(dashboard): unblock production deploy (cron over account limit) + shiki type by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1380
  • ci: add manual decommission workflow for old workers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1381
  • fix(dashboard): restore health-sweep cron after decommission by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1382
  • fix(dashboard): improve mobile layout for page header and table cards by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1384
  • docs: revamp docs site theme, fix sidebar, add app READMEs by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1387
  • fix(charts): stop lazy charts reloading on scroll-back by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1383
  • refactor(mcp): unify MCP HTTP handler across worker + in-process route by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1386
  • feat(cloudflare): cloud→dash 301 via edge Redirect Rule + track MCP secret by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1385
  • ci(cloudflare): per-app preview subdomains mirroring prod topology by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1389
  • fix(deps): update dependency astro to v6 [security] by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1372
  • feat(mcp): Clerk OAuth for MCP — login/consent flow + REST verify by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1388
  • fix(docs): add remark-gfm for markdown table rendering in MDX by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1390
  • fix(mcp): wire CLERK_SECRET_KEY to MCP worker deploys + bound Clerk verify by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1391
  • feat(dashboard-tsr): TanStack Start substrate spike by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1406
  • feat(dashboard-tsr): shared config + env bridge + @chm/* seam by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1407
  • feat(dashboard-tsr): @chm/clickhouse-client on workerd + 3 API routes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1408
  • feat(dashboard-tsr): dual-target build — Cloudflare Workers + Docker/Node by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1410
  • feat(dashboard-tsr): routing + TanStack Query + static prerender by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1411
  • feat(dashboard-tsr): 4 more API routes (timezone, host-status, notifications, health) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1412
  • feat(dashboard-tsr): Clerk auth provider gating (@clerk/tanstack-react-start) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1413
  • refactor(dashboard-tsr): address CodeRabbit review findings by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1414
  • feat(dashboard-tsr): query-config + chart/table registry foundation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1415
  • feat(dashboard-tsr): shadcn UI primitives + skeletons foundation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1416
  • docs(knowledge): TanStack Start migration roadmap to 100% by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1417
  • feat(dashboard-tsr): data-table system + chart base + shared components (#1393) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1418
  • feat(dashboard-tsr): chart components + API routes + query-config bulk port (#1394) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1419
  • feat(dashboard-tsr): port 75 dashboard pages → TanStack Start (Phase 4, #1402) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1420
  • feat(dashboard-tsr): port ~22 Next API routes to TanStack Start (Phase 5, #1396) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1422
  • feat(dashboard-tsr): in-process MCP route + fix logs/ gitignore drop (#1398) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1421
  • fix(dashboard-tsr): P1 runtime fixes from Codex review (#1421) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1423
  • feat(ci): add preview deployment for TanStack Start dashboard by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1424
  • feat(dashboard-tsr): port logs/peerdb/docs pages + simple/infra API routes + lint-clean (#1396 #1402) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1425
  • feat(dashboard-tsr): port AI agent subsystem to TanStack Start (#1401) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1426
  • fix(dashboard-tsr): stub browser-only libs in SSR to fit 3 MiB worker limit by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1427
  • feat(dashboard-tsr): port cluster-topology API + fix explorer 400 validation (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1429
  • feat(dashboard-tsr): port middleware.ts to TanStack auth guards (#1397) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1428
  • fix(dashboard-tsr): perf + dual-target build fixes (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1430
  • test(dashboard-tsr): fix stale clerk test + add test script (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1431
  • fix(dashboard-tsr): drop trailing-slash redirect (~55ms/page) (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1432
  • feat(dashboard-tsr): wire app chrome + port shadcn theme (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1433
  • refactor(dashboard-tsr): split the 4 largest faithful-port components (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1434
  • fix(dashboard-tsr): migrate client env NEXT_PUBLIC_* → VITE_* (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1435
  • feat(dashboard-tsr): post-deploy verify skill + env normalization (#1392) by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1436
  • Full Changelog: https://github.com/duyet/clickhouse-monitoring/compare/v0.2.5...v0.2.6
    Full release notes
    v0.2.5 May 28, 2026

    v0.2.5

    This release introduces significant UI/UX overhauls, major enhancements to AI agent capabilities, improved performance, and critical security hardening. AI Agent Enhancements:
  • Redesigned Agent page featuring a welcome screen, settings sidebar, and collapsible rail.
  • Advanced features: Chain-of-thought processing, ghost reasoning, real-time stats/timing, and theme-aware mermaid diagram rendering.
  • Improved diagnostic tools and streamlined chat UI.
  • Screenshot 2026-05-28 at 10 46 10 UI/Design System Overhaul:
  • Unified design across Overview, Running Queries, and Query detail pages.
  • Enhanced Data Table components: added row expansion, per-column filters, filter bars, and virtualized scrolling for large datasets.
  • Refined styling: removed residual shadows for a cleaner look and improved mobile responsiveness.
  • Screenshot 2026-05-28 at 10 46 40 Query & Monitoring:
  • Redesigned Query Activity Heatmap with KPI summaries and direct click-through to history.
  • Added Query Views Log page and improved diagnostic capabilities.
  • Performance & Infrastructure:
  • Significant performance gains in table rendering and chart loading.
  • Optimized Cloudflare worker deployment (reduced bundle size).
  • Enforced stricter authz boundaries and SQL validation.
  • Hardened MCP and Agent API endpoints with mandatory API key/bearer auth.
  • Removed browser-exposed API key flows and improved DNS pinning for browser fetches.
  • Patched critical CVE dependencies.
  • CI/CD: Optimized Docker workflows, updated build dependencies (Node 24, pnpm v11), and stabilized test environments.
  • Code Quality: Pruned dead code, refined automation scripts, and improved documentation accessibility via prerendered pages.
  • Bug Fixes: Resolved various UI alignment issues, TypeErrors, memory handling bugs in tables, and improved query-id identity handling.
  • --- *For the full list of changes and detailed commit history, view the [Full Changelog](https://github.com/duyet/clickhouse-monitoring/compare/v0.2.4...v0.2.5).*
  • fix(history-queries): apply URL filter params by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1011
  • fix(history-queries): parse empty numeric filters by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1012
  • refactor(history-queries): share filter predicates by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1014
  • docs(claude): note code-smell maintenance workflow by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1015
  • fix(history-queries): preserve zero filter params by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1016
  • feat(ui): upgrade shadcn chart config by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1013
  • refactor(agents): split chat area components by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1017
  • feat(wasm): add Rust WASM benchmark pilot by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1018
  • chore(maintenance): remove dead chat prop by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1022
  • docs(claude): add direct script workflow commands by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1023
  • test(wasm): fix monitor core mock exports by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1024
  • feat(query): add Query Views Log page and legacy query_log fallbacks by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1020
  • fix(explorer): prevent SQL editor change feedback loop by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1019
  • feat: query views monitoring, chart refactoring, CI coverage by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1025
  • test(clickhouse): remove empty cleanup hook by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1026
  • docs(claude): add missing workflow script commands by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1027
  • Add Rust CLI tools, API key auth, CI/release workflows, and benchmarks by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1021
  • Use timing-safe API key check and reduce agent production logging; add security scan report by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1029
  • fix(query): use query views peak memory column by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1028
  • fix(charts): guard chart render callbacks by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1030
  • chore(code-quality): prune dead shared mapper helpers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1031
  • chore(code-quality): add 2026-05-07 smell scan report by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1032
  • feat: add AI agent query insights, mermaid rendering, and insights page by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1033
  • feat(insights): add date range support, busy day stats, and auto-hide empty charts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1034
  • feat(docs): split dashboard and docs layouts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1035
  • ci(docker): extend arm64 build timeout by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1036
  • fix(cli): update ratatui for lru advisory by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1037
  • refactor(skills): rewrite query-optimization SKILL.md by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1042
  • refactor(skills): deduplicate troubleshooting SKILL.md by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1043
  • refactor(skills): rewrite clickhouse-best-practices SKILL.md by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1047
  • fix(skills): standardize format for 3 remaining skills by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1048
  • fix(skills): add missing export and strip quotes from descriptions in skills registry by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1049
  • feat(skills): enrich migration-patterns SKILL.md by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1050
  • feat(skills): enrich cluster-operations SKILL.md by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1045
  • chore(skills): regenerate skills registry after optimization by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1051
  • chore(deps): update dependency @hono/node-server to v2 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1053
  • chore(deps): update nextjs monorepo to v16.2.6 - autoclosed by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1038
  • feat: add more insight KPI metric cards and Context7 integration by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1054
  • feat: add SVG favicon by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1056
  • chore(deps): update pnpm to v11 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1057
  • chore(deps): update dependency lint-staged to v17 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1055
  • chore(deps): update actions/checkout action to v6 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1039
  • chore(deps): update commitlint monorepo to v21 (major) by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1046
  • chore(deps): update dependency @cypress/request to v4 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1052
  • chore(deps): update actions/upload-artifact action to v7 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1041
  • chore(deps): update codecov/codecov-action action to v6 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1044
  • chore(deps): update actions/github-script action to v9 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1040
  • fix(deps): update dependency @opennextjs/aws to v4 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1059
  • chore(deps): update softprops/action-gh-release action to v3 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1058
  • feat: add SVG favicon and clean up AI agent artifacts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1060
  • chore: replace transition-all with specific transition properties by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1063
  • feat: add navigation link to /docs in sidebar and README by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1064
  • fix(deps): update rust crate toml to v1 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1062
  • fix(deps): update rust crate dirs to v6 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1061
  • fix(ui): card shadows, badge hover, zoom dialog, add chart insights by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1065
  • fix(agent): require bearer auth for agent API by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1066
  • fix(ci): disable automatic PR preview deploy trigger by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1069
  • fix(agent): sanitize client message history roles by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1083
  • fix(agents): disable runtime skill registration endpoint by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1082
  • fix(agent): disable destructive control tools by default by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1080
  • fix(auth): fail closed for conversation db user resolution by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1079
  • fix(mcp): require api key auth for mcp endpoint by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1078
  • fix(agents): remove query-param auto-submit flow by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1077
  • fix(security): pin init events table to system database by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1076
  • fix(agents): disable runtime skill registration endpoint by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1075
  • fix(agents): sanitize chart config keys in style vars by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1074
  • fix(ci): restrict PR Docker workflow publish permissions by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1073
  • fix(ci): validate and sanitize release tag handling by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1072
  • fix(auth): remove browser-exposed api key flow by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1071
  • fix(api): enforce query allowlist for GET /api/v1/data by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1070
  • fix(ci): disable PR-triggered cloudflare deploy workflow by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1068
  • fix(auth): enforce Clerk auth on actions API by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1067
  • fix(ci): avoid running repo secret script in preview by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1081
  • feat(auth): add ClerkAuthProvider and fix lint issues by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1084
  • fix(ci): add explicit release types to fix startup_failure by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1086
  • fix(ci): remove invalid job-level permissions escalation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1088
  • fix(security): harden mcp auth and trim dead code by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1090
  • fix(agents): resolve chat memo dependency warning by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1091
  • refactor(docs): read docs content from source files by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1092
  • chore(security): add bun package age gate by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1093
  • chore(docs): add core automation memory by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1094
  • refactor(docs): consolidate docs into linked knowledge graph by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1095
  • fix(api): dashboard settings reduce on non-array by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1096
  • fix(automation): harden settings route and sync core memory by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1097
  • feat(auth): add sparse feature permissions by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1098
  • chore(security): harden dependencies and docs by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1099
  • fix(ci): use Node 22 for Cloudflare deploy by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1100
  • fix(ci): keep Cloudflare deploy on Wrangler by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1101
  • fix(deploy): reduce Cloudflare worker size by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1102
  • chore(automation): remove dead exports from recent changes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1103
  • fix(security): harden browser connection fetch by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1104
  • fix(deploy): avoid bundling undici in worker by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1105
  • fix(security): harden browser fetch DNS pinning by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1106
  • fix(auth): inline NEXT_PUBLIC_AUTH_PROVIDER at build time by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1107
  • feat(agents): user tracking for OpenRouter analytics by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1108
  • fix(overview): stabilize card heights and add chart variety by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1109
  • feat(agents): unify app attribution headers across providers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1110
  • fix(ci): stabilize docker install and agent tests by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1111
  • fix(ci): avoid bun prepare during docker install by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1112
  • fix(ci): restore docker deps for cloudflare build import by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1113
  • docs(workflow): document worktree fallback for PR operations by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1116
  • chore(deps): update cloudflare/wrangler-action action to v4 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1114
  • chore(deps): update dependency node to v24 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1115
  • feat(agents): add ClickHouse diagnostics tools by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1119
  • chore(automation): record empty-window scan fallback by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1120
  • fix(auth): default agent and actions features to authenticated by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1117
  • fix(ai): prevent provider key fallback leakage by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1118
  • feat(agents): improve AnyRouter errors and metadata UI by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1121
  • fix(agents): simplify followup UI state by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1122
  • chore(automation): remove dead export and refine scan commands by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1123
  • fix(ui): improve agent errors and overview charts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1124
  • fix(deps): patch critical CVE advisories by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1125
  • fix(api): prevent client queryConfig SQL override by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1126
  • fix(api): prevent client queryConfig SQL override by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1129
  • fix(security): enforce authz boundaries and harden SQL validation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1128
  • fix(security): enforce authz boundaries and harden SQL validation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1127
  • chore(automation): remove unused overview helpers by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1131
  • fix(api): address conversation migration and agent UX bugs by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1130
  • feat(running-queries): add syntax highlighting and beautify to query dialog by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1132
  • feat(docs): prerender documentation pages by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1133
  • fix(table): allow standard cells to wrap by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1134
  • fix(table): stop default polling by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1135
  • perf(table): avoid row key scans by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1136
  • fix(table): keep paginated rows standard by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1137
  • perf(table): commit resize on drag end by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1138
  • fix(table): cap API result rows by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1139
  • feat(table): show capped result state by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1140
  • refactor(table): use alert for missing tables by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1141
  • fix(table): stack footer controls on small screens by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1142
  • refactor(table): use button for clear filters by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1143
  • refactor(table): use button for column options by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1144
  • refactor(table): use button for expandable cells by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1145
  • fix(running-queries): improve mobile query UI by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1148
  • refactor(data-table): use checkbox component for row selection by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1149
  • fix(data-table): virtualize large table pages by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1150
  • refactor(table): use button for drag handles by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1146
  • refactor(data-table): use shadcn empty state by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1151
  • fix: resolve correctness bugs from repository bug scan by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1147
  • feat(charts): optimize card loading, rendering performance, and error presentation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1154
  • feat(running-queries): improve process table layout by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1153
  • fix(layout): improve mobile query header by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1152
  • feat(history-queries): schema-driven dynamic filter system by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1155
  • feat(running-queries): redesign as compact card list by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1156
  • feat: apply new design to Overview & Running Queries by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1157
  • fix(running-queries): harden query-id identity handling by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1159
  • feat(agents): migrate /agents UI to assistant-ui by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1158
  • fix(e2e): remove hardcoded visit timeouts by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1160
  • chore(deps): update dorny/paths-filter action to v4 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1162
  • fix(query): guest visibility for /query + history-queries column overflow by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1164
  • feat(agent): collapsible left rail, per-tool toggles, instant model switch by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1168
  • feat(agent): redesign AI Agent page with welcome screen + settings sidebar by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1167
  • feat(query): redesign /query detail page with CHM design system by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1163
  • chore(deps): update pnpm to v11 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1166
  • chore(deps): update github artifact actions (major) by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1165
  • chore(deps): update docker/metadata-action action to v6 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1161
  • fix(cf-deploy): prerender pages to ASSETS, split MCP worker, fit 3 MiB cap by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1169
  • fix: running-queries TypeError and history-queries alignment by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1171
  • fix(query-detail): remove non-existent query_finish_time column by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1172
  • fix(data-table): fix header alignment and font consistency by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1173
  • fix(data-table): vertically center cell content by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1174
  • feat(agent): use @preset/chmonitor as default model by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1175
  • fix(agents): polish chat UI and add thread title generation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1176
  • fix(agents): apply web interface guidelines by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1177
  • feat(ui): adopt transitions by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1178
  • feat(charts): redesign Query Activity Heatmap with KPIs, click-through to history queries by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1179
  • fix(data-table): sort/resize hit areas + dense BackgroundBar by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1180
  • fix: table resize + agent UI cleanup + longer agent step budget by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1181
  • fix(agent): change default model away from broken preset by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1182
  • fix(agents): tighten SQL/code block vertical spacing by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1184
  • feat(agents): MCP config panel in right sidebar by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1185
  • feat(agents): theme-aware mermaid diagrams in chat by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1186
  • feat(agents): Streamdown audit + theme-aware syntax highlighting by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1187
  • fix(data-table): scale heading in compact/dense density modes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1183
  • feat(agents): chain-of-thought, error, stats, timing, ghost reasoning by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1188
  • fix(tests): green up unit-tests on main by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1189
  • fix(agents): mobile-responsive settings via shadcn Drawer by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1190
  • fix(tables): broken data tab query, large column OOM, and table re-render performance by @levivannoort in https://github.com/duyet/clickhouse-monitoring/pull/1191
  • fix(explorer): share truncateLargeValues across query and preview routes by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1192
  • fix(feedback): render table guidance instructions as markdown by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1194
  • feat(charts): smart compact chart row with KPI summaries while hidden by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1195
  • fix(data-table): restore column resize, sort, and header layout by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1196
  • fix(agents): hide Thinking on error, surface CF 1027 cleanly by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1197
  • feat(host): show version and uptime in host switcher popover by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1199
  • feat(data-table): row expansion, per-column filters, filter bar by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1193
  • feat(health): expand checks, drop shadows, add threshold + alert config by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1198
  • style(ui): remove box-shadow from cards and buttons by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1200
  • perf(tables): make the query pane be able to be rendered by @levivannoort in https://github.com/duyet/clickhouse-monitoring/pull/1201
  • style(ui): drop residual shadow utilities from cards and buttons by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1202
  • fix(explorer): render deep-linked tab and stop 500 on missing ddl queue by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1203
  • fix(explorer): preserve selected tab when switching tables in tree by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1204
  • fix(agent): coerce string hostId in tool calls and add system-tables skill by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1205
  • @levivannoort made their first contribution in https://github.com/duyet/clickhouse-monitoring/pull/1191
  • Full Changelog: https://github.com/duyet/clickhouse-monitoring/compare/v0.2.4...v0.2.5
    Full release notes
    v0.2.4 Apr 29, 2026

    v0.2.4

  • Update default agent model and add MiniMax free tier option by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/986
  • docs: update agent workflows by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/987
  • fix(agents): default to openrouter/free + simplify sidebar borders by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/993
  • fix(agents): require tool-capable endpoints on OpenRouter by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/994
  • chore(deps): update actions/github-script action to v9 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/990
  • chore(deps): update nextjs monorepo to v16.2.4 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/984
  • chore(deps): update dependency @codecov/webpack-plugin to v2 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/991
  • fix(deps): update dependency diff to v9 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/992
  • fix(deps): update dependency lucide-react to v1 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/972
  • chore(deps): update dependency typescript to v6 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/971
  • fix(agent): harden OpenRouter free-model tool routing by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/995
  • docs(agents): sync command workflows in CLAUDE by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/998
  • docs(agents): remove non-existent migrate commands by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1000
  • fix(agent): isolate model metadata from client hooks by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1001
  • chore(deps): bump postcss from 8.5.6 to 8.5.10 in /docs by @dependabot[bot] in https://github.com/duyet/clickhouse-monitoring/pull/1002
  • docs(agents): align commit and PR title convention by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1003
  • fix(deps): bump root postcss by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1004
  • Update agent docs and model capability UI by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/996
  • fix: improve host-status validation and menu/theme responsiveness by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/997
  • chore: clean recent maintenance smells by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1005
  • docs(agents): sync Next.js version in AGENTS and CLAUDE by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1006
  • fix(agents): preserve unknown model capabilities by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1007
  • refactor(nav): share settings shortcut handler by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1008
  • docs(maintenance): record code smell scan by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1009
  • docs(claude): add local CI parity command by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/1010
  • Full Changelog: https://github.com/duyet/clickhouse-monitoring/compare/v0.2.3...v0.2.4
    Full release notes
    v0.2.3 Mar 30, 2026

    v0.2.3

    image
  • Interactive clarification: Agents can now ask users follow-up questions via ask_user tool (#938)
  • New analysis tools: Detect anomalies (#939), generate health reports (#940), optimize queries (#941), analyze performance (#942), capacity planning forecasts (#943), investigate incidents (#945), schema migration assistant (#946)
  • Period & host comparison tools for cross-cluster analysis (#937)
  • @mentions, /slash commands, and resource tagging in agent chat (#951)
  • Prompt caching for Anthropic models via OpenRouter (#960), later simplified to provider-native caching (#965)
  • Dynamic skill loading at runtime (#962)
  • Structured error classification with rich error display (#963)
  • Analytics tracking for token usage and cost estimation (#964)
  • Compact model dropdown with pricing info and custom model input (#966)
  • Data discovery panel (AgentDataSources) for browsing available data (#967)
  • query_and_visualize and discover_data_sources tools (#968)
  • Refreshed sidebar and empty state UI (#927)
  • Improved tool result tables and sidebar readability (#930)
  • "Analyze with AI" action on tables with updated kill query icon (#949)
  • - Dynamic resource templates for schema browsing (#944)
  • analyze_performance tool (#942)
  • Pre-built prompt templates for DBA monitoring workflows (#936)
  • Turbopack enabled for local development (#935)
  • Deferred Vercel Analytics loading (#933)
  • EXPLAIN AST/SYNTAX rendered as plain text (#932)
  • Centralized app table name configuration (#950)
  • Graceful handling of missing settings table (#952)
  • Missing chart hook dependencies (#929)
  • Vulnerable dependency updates (#953, #955)
  • Removed unused dependencies, dead scripts, Tremor/headlessui config, dead Jest config (#974, #978–#982)
  • Moved test-only packages to devDependencies (#977)
  • Deduplicated SWR error retry logic, added barrel exports (#973, #975, #976)
  • Decoupled business logic from Next.js framework (#983)
  • Next.js security updates (#926, #947, #948, #956)
  • @dagrejs/dagre v3 (#959), fast-xml-parser ^5.3.4 (#955), start-server-and-test v3 (#957)
  • docs: update agent instructions by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/928
  • feat(agents): refresh sidebar and empty state by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/927
  • fix: add missing chart hook dependencies by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/929
  • fix(agents): improve tool result table and sidebar readability by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/930
  • feat(agents): add ask_user tool for interactive clarification by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/938
  • feat(mcp): add dynamic resource templates for schema browsing by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/944
  • feat(mcp): add analyze_performance tool by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/942
  • Enable Turbopack for local development, optimize OG image generation by @vinzee in https://github.com/duyet/clickhouse-monitoring/pull/935
  • chore(deps): update dependency next [security] by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/926
  • chore(deps): update nextjs monorepo to v16.2.1 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/934
  • feat(agents): add detect_anomalies tool by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/939
  • feat(agents): add generate_health_report tool by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/940
  • feat(agents): add query optimizer tool by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/941
  • feat(mcp): add pre-built prompt templates for DBA monitoring by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/936
  • chore(deps): update dependency next [security] by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/947
  • feat(agents): add capacity planning forecast tool by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/943
  • feat(agents): add investigate_incident tool for root cause analysis by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/945
  • feat(agents): add schema migration assistant tools by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/946
  • Defer Vercel Analytics loading for improved performance by @vinzee in https://github.com/duyet/clickhouse-monitoring/pull/933
  • chore(deps): update dependency next to v15.5.14 [security] by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/948
  • Handle EXPLAIN AST/SYNTAX as plain text by @vinzee in https://github.com/duyet/clickhouse-monitoring/pull/932
  • feat(agents): add period & host comparison tools by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/937
  • feat(actions): add analyze with AI action and update kill query icon by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/949
  • Refactor app table names for centralized configuration by @vinzee in https://github.com/duyet/clickhouse-monitoring/pull/950
  • feat(agents): add @mentions, /slash commands, and resource tagging by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/951
  • fix(deps): update vulnerable dependencies by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/953
  • Handle missing settings table gracefully by @vinzee in https://github.com/duyet/clickhouse-monitoring/pull/952
  • chore(deps): update dependency start-server-and-test to v3 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/957
  • chore(deps): update nextjs monorepo by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/956
  • fix(deps): update dependency @dagrejs/dagre to v3 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/959
  • fix(deps): update dependency fast-xml-parser to ^5.3.4 [security] by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/955
  • feat(agents): add prompt caching for Anthropic models via OpenRouter by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/960
  • feat(agents): dynamic skill loading at runtime by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/962
  • feat(agents): structured error classification with rich error display by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/963
  • fix(agents): remove cache_control, rely on provider-native caching by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/965
  • feat(agents): add analytics tracking for token usage and cost estimation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/964
  • feat(agents): compact model dropdown with pricing and custom model input by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/966
  • feat(agents): add AgentDataSources collapsible data discovery panel by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/967
  • feat(agents): add query_and_visualize and discover_data_sources tools by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/968
  • chore(deps): update dependency typescript to v6 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/958
  • fix(deps): update dependency lucide-react to v1 by @renovate[bot] in https://github.com/duyet/clickhouse-monitoring/pull/961
  • chore: remove unused Tremor/headlessui config from tailwind by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/982
  • chore: remove unused dependencies by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/974
  • refactor(hooks): add missing barrel exports by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/973
  • refactor(swr): deduplicate onErrorRetry implementation by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/975
  • refactor(swr): extract shared fetch error handler by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/976
  • chore: remove unused page-view query config by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/978
  • refactor: remove unused MetricCard component system by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/979
  • chore: remove dead scripts and unused metric-card component by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/980
  • chore: remove dead Jest configuration by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/981
  • chore: move test-only packages to devDependencies by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/977
  • refactor: decouple business logic from Next.js framework by @duyet in https://github.com/duyet/clickhouse-monitoring/pull/983
  • Full Changelog: https://github.com/duyet/clickhouse-monitoring/compare/v0.2.2...v0.2.3
    Full release notes