|
2 | 2 |
|
3 | 3 | --- |
4 | 4 |
|
| 5 | +## [Unreleased] |
| 6 | + |
| 7 | +### Added |
| 8 | + |
| 9 | +#### Agents — Hierarchy View |
| 10 | +- **Agent Hierarchy view** — interactive graph visualization of agent fleet using ReactFlow + dagre auto-layout; toggle between Cards and Hierarchy views when 2+ agents exist |
| 11 | +- **5 layout modes** — Compact (adaptive columns), Balanced (split columns), Delegation (parent/child clarity), Channel (binding analysis), Workspace (ownership clusters); persisted in localStorage; popover selector with descriptions |
| 12 | +- **Node types** — Gateway hub (agent count), Agent nodes (status dot, model, session/token stats, default badge), Channel nodes (icon + account IDs), Workspace nodes (path + owning agents) |
| 13 | +- **Edge types** — Gateway→Agent (solid), Agent→Agent delegation (animated dashed green), Channel→Agent bindings (blue), implicit default route (dashed muted), Agent→Workspace (amber) |
| 14 | +- **Agent detail dialog** — click any agent node to open a full detail panel with identity, activity stats, configuration (model, tool profile, workspace), channel bindings, and delegation tree (parent + sub-agents) |
| 15 | +- **Layout persistence** — dragged node positions saved to localStorage; Reset button to recompute layout; positions cleared on layout mode switch |
| 16 | +- **Fit-to-view** — auto-fits on mount; ReactFlow controls (zoom, pan) with themed styling |
| 17 | + |
| 18 | +#### Agents — Shared Utilities |
| 19 | +- **`computeAgentSessionStats`** — extracted session stat computation (count, activeCount, tokens, lastActive) to `utils.ts`; used by both cards view and hierarchy view, replacing the inline duplicate in `index.tsx` |
| 20 | +- **`formatTokens`, `formatAgo`, `shortPath`, `channelIcon`** — shared formatting helpers extracted to `utils.ts`; used by hierarchy view and detail dialog |
| 21 | + |
| 22 | +#### Types |
| 23 | +- **`subagents` field** — added `subagents?: string[] | { allowAgents?: string[] }` to `ParsedConfig` agent list entry type; matches OpenClaw `types.agents.ts` schema for delegation configuration |
| 24 | + |
| 25 | +### Changed |
| 26 | + |
| 27 | +#### Dependencies |
| 28 | +- **`@xyflow/react`** (`^12.10.1`), **`dagre`** (`^0.8.5`), **`@types/dagre`** (`^0.7.54`) — added for hierarchy graph rendering and auto-layout |
| 29 | + |
| 30 | +#### Agents Page |
| 31 | +- **View mode toggle** — header toolbar gains a Cards/Hierarchy toggle button (visible when 2+ agents); hierarchy view replaces the cards+tabs layout with the full-height graph |
| 32 | +- **Session stats refactor** — inline `sessionsByAgentId` computation in `index.tsx` replaced with shared `computeAgentSessionStats` call; field names normalized (`all`→`count`, `active`→`activeCount`) |
| 33 | + |
| 34 | +### Fixed |
| 35 | + |
| 36 | +#### Agents — Hierarchy View |
| 37 | +- **Unclickable layout buttons** — Popover trigger and Reset button were independently `absolute`-positioned inside `<ReactFlow>`, which captures pointer events on its internal pane; wrapped both in a single `div` with `z-50 pointer-events-auto` to lift above the event pane |
| 38 | +- **Double dagre layout computation** — `extractPositions()` redundantly called `dagre.layout()` even though every layout function already called it before passing the graph; removed the duplicate call |
| 39 | +- **Misleading `_handleLayoutModeChange` prefix** — renamed to `handleLayoutModeChange`; underscore prefix conventionally signals unused variables but this callback is actively used |
| 40 | + |
| 41 | +--- |
| 42 | + |
5 | 43 | ## [2026.2.26] — 2026.2.26 |
6 | 44 |
|
7 | 45 | ### Added |
|
0 commit comments