- Routes tree nodes now have starrable: true at both app and route levels
- Add starred Routes group to the starred section
- Fix missing starred collection for top-level agent application nodes
- Fix agent starred path from /agents/:id to /agents/:appId/:id
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rename Metrics to Routes with /routes, /routes/:appId, /routes/:appId/:routeId
- Sidebar: Routes is now a collapsible tree (apps > routes) like Applications/Agents
- KPI header matching mock-v3-metrics-dashboard: throughput with sparkline, error rate,
latency percentiles (P50/P95/P99), active routes with mini donut, in-flight exchanges
- Same KPI header used consistently across all 3 levels with scoped data
- Route detail level shows per-processor performance table and RouteFlow diagram
- Added appId to RouteMetricRow and filled missing route entries in mock data
- Fix sidebar section toggle indentation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rewrite ExchangeDetail with split Message IN/OUT panels that update
on processor click, error panel for failed processors, and
Timeline/Flow toggle for the processor visualization
- Add correlation chain in header with status-colored clickable nodes
sorted by start time, labeled "Correlated Exchanges"
- Add Exchange ID column and inspect button (↗) to Dashboard table
- Add "Open full details" link in the exchange slide-in panel
- Add selectedIndex prop to ProcessorTimeline and RouteFlow for
highlighting the active processor
- Add onNodeClick + selectedIndex to RouteFlow for interactive use
- Add correlationGroup field to exchange mock data
- Fix sidebar section toggle indentation alignment
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Table columns: Status, Route, Application, Started (yyyy-mm-dd hh:mm:ss),
Duration, Agent (removed Order ID and Customer)
- /apps shows all exchanges, /apps/:id filters by application,
/apps/:id/:routeId filters by application and route
- Route paths changed from /routes/:id to /apps/:appId/:routeId across
sidebar, search, breadcrumbs, metrics, and exchange detail
- Added buildRouteToAppMap utility for route→application lookup
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the 4-tab DetailPanel (Overview/Processors/Exchange/Error) with a
single scrollable view: overview, errors (limited to 1 with +N indicator),
route flow diagram, and processor timeline. DetailPanel now supports
children as an alternative to tabs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New components:
- SegmentedTabs — pill-style tabs with sliding animated indicator,
trailing slot for custom content, MutationObserver for dynamic resizing
- Custom DateTimePicker — replaces native datetime-local with calendar
grid, hour/minute inputs, Now/Apply buttons, portal dropdown
Time range selector redesign:
- Uses SegmentedTabs with inline from/to DateTimePicker triggers
- "now" shown as clickable placeholder when to-date is not explicitly set
- Preset selection keeps to-date as "now" until user sets it
- No more "Custom" button — last tab is the live date range
Other improvements:
- FilterPill gains activeColor prop for status-colored active states
- TopBar and EventFeed status pills now use colored dots + activeColor
- Inventory nav expanded to full component-level table of contents
- COMPONENT_GUIDE.md updated with new components
- DateRangePicker test updated for custom DateTimePicker
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
FilterPill gains activeColor prop — when active, border/text/background
tint match the status color instead of generic amber. Inactive dots
are muted at 40% opacity for clear active/inactive contrast.
Applied to TopBar status pills and EventFeed severity pills.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New /agents/:appId/:instanceId page with process info, 3x2 charts
grid (CPU, memory, throughput, errors, threads, GC), application
log viewer with level filtering, and instance-scoped timeline
- AgentHealth now uses slide-in DetailPanel for quick instance preview
- Stat strip enhanced: colored StatusDot breakdowns, route ratio with
state-colored values, Groups renamed to Applications
- Unified page structure: stat strip → scope trail with inline badges
(removed duplicate section headers from both pages)
- StatCard value/detail props now accept ReactNode
- Log and timeline displayed side by side
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Instance detail now opens in a DetailPanel (slide-in from right)
with Overview and Performance tabs instead of navigating away
- Stat strip matches mock design: 5 cards with colored StatusDot
breakdowns, labeled states (live/stale/dead, healthy/degraded/critical)
- Active Routes shows colored ratio (green/yellow/red) based on state
- Groups renamed to Applications
- StatCard value/detail props now accept ReactNode for rich content
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
11-task plan covering token fix, Tabs migration, DataTable migration,
title cleanup, user creation rework with provider selection, password
management, toast feedback, accessibility, and cascading confirmations.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Based on 3-expert UX/UI review: fixes critical --bg-base bug,
migrates AuditLog to DataTable, replaces admin nav with Tabs,
reworks user creation with provider-aware flow, adds password
management, toast feedback, and accessibility improvements.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Move MultiSelect to composites (depends on portal, not a primitive)
- MultiSelect manages own positioning instead of wrapping Popover
- Add loading prop and info variant to ConfirmDialog
- Drop forwardRef from InlineEdit (input conditionally exists)
- Change InlineEdit blur to cancel (not save)
- Add router integration, barrel export, and accessibility details
- Add sidebar integration strategy (admin sub-nav, not sidebar clutter)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers MultiSelect, ConfirmDialog, InlineEdit components and
AuditLog, OidcConfig, UserManagement admin example pages.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The DataTable wrapper's border-radius created visible gaps when nested
inside a parent container (e.g. tableSection) that already provides its
own border and radius. The new flush prop strips border, radius, and
shadow so the table sits flush against its container.
Applied in Dashboard and RouteDetail "Recent Exchanges" tables.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the TimeRangeDropdown popover with inline FilterPills inside a
new ButtonGroup component. The ButtonGroup merges adjacent children into
a single visual strip with shared borders and rounded end-caps.
The time readout is now an integrated inset display cell at the right end
of the group. Preset ranges show "HH:MM – now"; custom ranges show both
timestamps. Default changed from 3h to 1h.
TopBar reordered to: Breadcrumb | Search | Status pills | Time pills | Right.
FilterPill upgraded to forwardRef with data-active attribute.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
vite-plugin-dts runs tsc to generate declarations and needs explicit
type definitions for .module.css, .css, and .svg imports. Without
these, the DTS step fails with TS2307 for every CSS module import.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The runner is registered as ubuntu-latest, not linux-arm64.
The underlying hardware is ARM64 but the label must match.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Separate vite.lib.config.ts for library mode builds:
- ES module output (index.es.js) with react/react-dom externalized
- Consolidated type declarations via rollupTypes (index.es.d.ts)
- CSS Modules with debuggable scoped names (cameleer_ prefix)
- Deterministic output filenames (style.css, index.es.js)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add tokens.css/reset.css imports to entry point (critical: CSS tokens would be missing)
- Add font loading docs for consumers (DM Sans, JetBrains Mono)
- Add publishConfig for Gitea registry (npm publish would target npmjs.org)
- Fix exports map: types condition first
- Add scoped registry line to CI .npmrc
- Note vite-plugin-dts as required devDependency
- Add repository field to package.json spec
- Note tsconfig.node.json update needed
- CSS Module scoping strategy for debuggable class names
- Note CI auth requirements for consuming apps
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace per-page filtering with a single GlobalFilterProvider (time range +
status) consumed by a redesigned TopBar across all pages. Lift CommandPalette
to App level so Cmd-K works globally with filtered results that navigate to
exchanges, routes, agents, and applications. Sidebar auto-reveals and selects
the target entry on Cmd-K navigation via location state.
- Extract shared time preset utilities (computePresetRange, DEFAULT_PRESETS)
- Add GlobalFilterProvider (time range + status) and CommandPaletteProvider
- Add TimeRangeDropdown primitive with Popover preset list
- Redesign TopBar: breadcrumb | time dropdown | status pills | search | env
- Add application category to Cmd-K search
- Remove FilterBar and local DateRangePicker from Dashboard/Metrics pages
- Filter AgentHealth EventFeed by global time range
- Remove shift/onSearchClick props from TopBar
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Route / redirects to /apps, Dashboard serves both /apps and /apps/:id
- When appId is present, exchanges/routes/agents/search are scoped to that app
- Remove Dashboards sidebar link, add Metrics link
- Sidebar section labels (Applications, Agents) are now clickable nav links
with separate chevron for collapse toggle
- Update all breadcrumbs from Dashboard/href:'/' to Applications/href:'/apps'
- Remove AppDetail page (replaced by scoped Dashboard)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- EventFeed: 28px icon circles with severity colors, stacked message/timestamp,
search input with clear button, ReactNode message support with searchText field
- Agent Health: timeline wrapped in card panel, instance listing as proper table,
colored Badge pills for live counts, removed shift pill
- Input primitive: onClear prop with × button for all search fields
- Sidebar: Agents section collapsible like Applications, collapse state persisted
to localStorage
- FilterBar/Sidebar: clear buttons on all search inputs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add URL-driven Agent Health page (/agents, /agents/:appId,
/agents/:appId/:instanceId) that progressively narrows from all
applications to a single instance with trend charts. Create
generic GroupCard composite for grouping instances by application.
Expand mock data to 8 instances across 4 apps with varied states.
Split sidebar Agents header into navigable link + collapse chevron.
Update agent tree paths to /agents/:appId/:instanceId. Add EventFeed
with lifecycle events. Change SidebarAgent.tps from string to number.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>