v2.5.0
v2.5.0 — Dashboard layout overhaul (ELK + lazy containers)
Added
- Source code viewer with syntax highlighting accessible via slide-up code panel and file double-click
- Path-allowlisted file content access gated by access token via `/file-content.json` endpoint
Changed
- Dashboard graph layout uses ELK instead of dagre for structural-style views
- Layer-detail view groups nodes into folder/community containers that lazy-expand on demand
- Two-stage lazy layout renders container atoms first (~125ms at 500 nodes) then expands per-container on click, zoom, or search hit
- Cross-container edges aggregate into single weighted edges that inflate when containers expand
- Visual containers show search hit counts, diff impact via red border, and focus/selection via gold border
- Containers implement keyboard accessibility as disclosure buttons with ARIA attributes
- File double-click navigates the graph while preserving sidebar composition
- DomainGraphView migrated to ELK with LR direction preserved
- WarningBanner distinguishes graph data errors from dashboard rendering bugs
Fixed
- Horizontal sprawl problem where layers with 50+ nodes rendered as single ~14000px row
- Plugin root resolution hardened across install modes
- Use printf instead of echo to pipe TOOL_INPUT into grep
- Log skipped invalid gitignore patterns to stderr
- Hero image extension in Astro homepage
- File permissions on extract-domain-context.py
Deprecated
- applyDagreLayout function slated for removal in next release
Highlights
Source code viewer (#108) — by @arkaigrowth
Slide-up code panel with syntax highlighting; double-click a file node to open. Path-allowlisted via the dev server's /file-content.json endpoint, gated by an access token. Thanks @arkaigrowth for designing and shipping this!
Dashboard graph layout overhaul (#111)
Replaces dagre with ELK across all structural-style views and reshapes the layer-detail view around folder/community containers that lazy-expand on demand. Fixes the long-standing horizontal-sprawl problem where layers with 50+ nodes rendered as a single ~14000px row.
- Containers: layer-detail nodes are grouped by folder (Louvain community detection as fallback when folders are too flat). Each container renders as a translucent gold-bordered atom with the folder name and child count.
- Two-stage lazy layout: Stage 1 lays out container atoms only (~125ms even at 500 nodes). Stage 2 runs ELK per container on demand — when you click, when you zoom past 1.0, or when search/focus/tour lands a hit inside.
- Edge aggregation: cross-container edges collapse into a single weighted edge with count. Expanding a container inflates them back to file→file. Edges anchored to collapsed containers stay anchored to the container atom so nothing silently disappears.
- Visual overlays: containers light up for search hits (count badge), diff impact (red border), and focus/selection (gold border).
- Keyboard accessible: containers are real disclosure buttons (
role="button",aria-expanded, Enter/Space). - Performance: dashboard main bundle stays at ~62KB gzipped (ELK split into a parallel-loaded chunk).
Other contributions since v2.3.1
Huge thanks to everyone who improved the project this cycle:
- #95 — @0xnayuta: harden plugin root resolution across install modes.
- #97 — @xiaolai: use
printfinstead ofechoto pipeTOOL_INPUTinto grep. - #98 — @xiaolai: log skipped invalid gitignore patterns to stderr.
- #103 — @ZebangCheng: fix hero image extension in the Astro homepage.
- #105 — @gustn99: README link refresh (Claude Code plugin).
- #110 — @LukasWana: file permissions on
extract-domain-context.py.
Other improvements
- File double-click also navigates the graph; sidebar composition preserved when reopening the slide-up code viewer.
- DomainGraphView migrated to ELK with LR direction preserved.
- WarningBanner now distinguishes graph data errors (asks your agent to fix the JSON) from dashboard rendering bugs (links to the issue tracker).
Compat
- No graph schema changes. Existing
.understand-anything/knowledge-graph.jsonfiles load unchanged. applyDagreLayoutis@deprecatedand slated for removal next release.
Full changelog
v2.3.1...v2.5.0