feat(dashboard): merge Analytics into Dashboard, remove Kanban Board

Closes issue #5 (Dashboard | Update menu & page):
- Analytics content (heatmap, sparkline, token/cost/workflow/productivity
  charts) moves into a new "Analytics" tab on the Dashboard page, alongside
  the existing Monitor/Health tabs. The standalone Analytics page, its
  /analytics route, and its sidebar menu entry are removed.
- The Kanban Board page, its /kanban route, and its sidebar menu entry are
  removed entirely (page content deleted, not just hidden).
- Updated ARCHITECTURE.md, README.md, client/README.md, docs/API.md, and
  the affected client tests/snapshots to match.
This commit is contained in:
2026-08-25 11:45:39 +07:00
parent 8c026d4cc7
commit 8ce20e8163
13 changed files with 1445 additions and 4564 deletions
-4
View File
@@ -24,12 +24,8 @@ export function DocumentTitle() {
title = `${t("sessions")} · ${sessionId.slice(0, 8)}`;
} else if (path.startsWith("/sessions")) {
title = t("sessions");
} else if (path.startsWith("/kanban")) {
title = t("agentBoard");
} else if (path.startsWith("/activity")) {
title = t("activityFeed");
} else if (path.startsWith("/analytics")) {
title = t("analytics");
} else if (path.startsWith("/workflows")) {
title = t("workflows");
} else if (path.startsWith("/cc-config")) {
-3
View File
@@ -54,7 +54,6 @@ import { NavLink } from "react-router-dom";
import { useTranslation } from "react-i18next";
import {
LayoutDashboard,
Columns3,
FolderOpen,
Activity,
BarChart3,
@@ -89,10 +88,8 @@ function isUpdatePayload(x: unknown): x is UpdateStatusPayload {
const NAV_KEYS = [
{ to: "/", icon: LayoutDashboard, key: "nav:dashboard" },
{ to: "/kanban", icon: Columns3, key: "nav:agentBoard" },
{ to: "/sessions", icon: FolderOpen, key: "nav:sessions" },
{ to: "/activity", icon: Activity, key: "nav:activityFeed" },
{ to: "/analytics", icon: BarChart3, key: "nav:analytics" },
{ to: "/workflows", icon: Workflow, key: "nav:workflows" },
{ to: "/cc-config", icon: Boxes, key: "nav:ccConfig" },
{ to: "/run", icon: Play, key: "nav:workspace" },
@@ -32,7 +32,6 @@ describe("Sidebar", () => {
it("should render all navigation links", () => {
renderSidebar(true);
expect(screen.getByText("Dashboard")).toBeInTheDocument();
expect(screen.getByText("Kanban Board")).toBeInTheDocument();
expect(screen.getByText("Sessions")).toBeInTheDocument();
expect(screen.getByText("Activity Feed")).toBeInTheDocument();
});
@@ -60,7 +59,6 @@ describe("Sidebar", () => {
const links = screen.getAllByRole("link");
const hrefs = links.map((link) => link.getAttribute("href"));
expect(hrefs).toContain("/");
expect(hrefs).toContain("/kanban");
expect(hrefs).toContain("/sessions");
expect(hrefs).toContain("/activity");
});
@@ -82,7 +80,6 @@ describe("Sidebar", () => {
await waitFor(() => {
expect(screen.getByText("Tổng quan")).toBeInTheDocument();
expect(screen.getByText("Bảng Kanban")).toBeInTheDocument();
});
});