Changelog
1.0.11
- Plugin archive size: demo videos are no longer bundled into the plugin — the
archive dropped from ~108 MB to ~21 MB. The LockedPageView clips are now served from
a CDN (jsDelivr, from the public repo's
docs/videos/en) instead of shipping ~95 MB of MP4s on every install/upgrade; they can also be updated without a new release. Fixed the video filenames (-ensuffix) so the URLs resolve.
1.0.10
Grafana plugin review follow-up (React 19 + light theme):
- React 19 / Grafana 13: externalize
react/jsx-runtimeandreact/jsx-dev-runtimeso the plugin uses Grafana's React at runtime instead of bundling react/jsx-runtime built against React 18 internals — fixes theReactCurrentOwnercrash that blanked pages (Overview, Service Map, Services, Traces, …) on Grafana 13.grafanaDependencyis now>=12.3.0. - Light theme: the plugin now follows Grafana's active theme (removed the independent light/dark toggle that left @grafana/ui components mismatched), and hardcoded neutral text/background/border colors were replaced with theme-token CSS variables so the UI is readable in both light and dark.
1.0.9
Grafana plugin review follow-up — remove all remaining global CSS leakage and tidy metadata:
- CSS scoping: every injected stylesheet is now scoped under the plugin root
.iyzitrace-app, including the agent-manager Tailwind layer (preflight,:rootdesign tokens, and utility classes). Plugin styles no longer leak into Grafana core or other plugins. - Theme tokens: plugin color variables are derived from
useTheme2()/createThemedesign tokens instead of hardcoded hex; the former global utility classes moved to component-scoped@emotion/cssviauseStyles2. - Portals: agent-manager Radix/vaul portals (dialog, dropdown, tooltip, drawer, select) now mount into the plugin root so their scoped styles apply.
- Namespacing: the redux-persist key and the sidebar cookie are prefixed with the plugin id, consistent with the localStorage helper.
- Cleanup: removed dead
.cssduplicates, the unusedaxios/expressdependencies, dead helpers, and sample data that referenced external CDN image URLs. - Metadata: added
info.links, meaningful keywords, correctedgrafanaDependency, and fixed the author name.
1.0.8
Grafana review requirement: Ant Design fully removed.
- UI: all antd components replaced with a thin compatibility kit (
src/ui) rendering@grafana/uiprimitives themed by the active Grafana theme; antd icons replaced with lucide-react equivalents.antdand@ant-design/iconsare no longer dependencies (also clears the React 19rc-utilcompatibility warning; largest bundle chunk shrank from ~8 MB to ~0.6 MB). - Fixes after the migration: sidebar pinning below the Grafana chrome, filters panel
(compact operator/value rows, Duration row, field filters now keyed by column
dataIndex), custom date-range picker rebuilt on GrafanaDateTimePicker, service-map styles restored, icon-only buttons, toasts as native Grafana notifications. - AI Investigations: a stream that never emits now fails fast with a helpful error instead of showing "planning…" forever.
- Tooling: jest and Playwright configs restored (
pnpm test:ciandpnpm e2ework); scaffold e2e specs replaced with real smoke tests. - Removed the "View Services Map" bottom drawer from the service map detail panel.
1.0.7
- License key entry moved fully server-side: the OpenRouter key is stored encrypted on the platform and never persisted in Grafana or the browser.
- Plugin CSS and theme scoped to the plugin root; external font injection removed.
1.0.6
- Dependency security updates: all osv-scanner HIGH/CRITICAL findings resolved via
direct bumps and
pnpm.overrides. - README media links fixed to point at the published video paths.
1.0.5
Security and isolation fixes from the Grafana plugin review:
- XSS: sanitize all
dangerouslySetInnerHTMLoutput (AI responses, Prism YAML) with DOMPurify. - Secrets: the OpenRouter API key is no longer stored in plugin
jsonData/the browser. It is sent to the platform and proxied server-side (/api/v1/platform/ai/*); only non-secret model settings remain in plugin config. - localStorage: all keys are namespaced with the plugin id via a central helper to avoid collisions with Grafana core and other plugins.
- Global CSS: scoped styles to the plugin root and removed overrides that leaked into Grafana's own UI (global font,
*, navbar/main-view/page-header chrome). - AI model list auto-populated from OpenRouter with a searchable in-page model picker.
1.0.0
Initial release.