@sleep2agi/agent-network-dashboard 0.4.3-preview.0 → 0.4.4-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +6 -6
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +2 -2
- package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +3 -3
- package/.next/server/app/logs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +2 -2
- package/.next/server/app/messages.rsc +2 -2
- package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +2 -2
- package/.next/server/app/node.rsc +2 -2
- package/.next/server/app/node.segments/_full.segment.rsc +2 -2
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +2 -2
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +2 -2
- package/.next/server/app/nodes.rsc +2 -2
- package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +3 -3
- package/.next/server/app/server-logs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +2 -2
- package/.next/server/app/settings/networks.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +2 -2
- package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/ssr/app_0pljk5o._.js +1 -1
- package/.next/server/chunks/ssr/app_0pljk5o._.js.map +1 -1
- package/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js +1 -1
- package/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js.map +1 -1
- package/.next/server/chunks/ssr/app_server-logs_page_tsx_0_kpp1p._.js +1 -1
- package/.next/server/chunks/ssr/app_server-logs_page_tsx_0_kpp1p._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/0u~_.32f.midj.css +2 -0
- package/.next/static/chunks/10njj7kn9ylkf.js +1 -0
- package/.next/static/chunks/14sm.ta0zylsj.js +1 -0
- package/.next/static/chunks/18ac93ii3mjlj.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/StatsBar.tsx +7 -1
- package/app/components/TopoGraph.tsx +20 -13
- package/app/globals.css +73 -8
- package/app/logs/page.tsx +22 -6
- package/app/server-logs/page.tsx +22 -11
- package/package.json +3 -2
- package/.mcp.json +0 -11
- package/.next/static/chunks/0agna31q2fjq1.css +0 -2
- package/.next/static/chunks/0~93h~zb55yh9.js +0 -1
- package/.next/static/chunks/140l7~i5q9wrv.js +0 -1
- package/.next/static/chunks/15zvpw79~w1am.js +0 -1
- package/.vercel/README.txt +0 -11
- package/.vercel/project.json +0 -16
- package/AGENTS.md +0 -5
- package/DASHBOARD_OPTIMIZATION_PLAN.md +0 -414
- package/docs/iteration-plan.md +0 -62
- package/docs/light-theme-audit-v0.4.2.md +0 -229
- package/docs/v4-plan.md +0 -38
- package/sleep2agi-agent-network-dashboard-0.1.0-preview.2.tgz +0 -0
- package/test-results/.last-run.json +0 -4
- package/tsconfig.tsbuildinfo +0 -1
- /package/.next/static/{PjaeJDylF_V_Owoar118p → jTh5m77FIfQccc0gftvik}/_buildManifest.js +0 -0
- /package/.next/static/{PjaeJDylF_V_Owoar118p → jTh5m77FIfQccc0gftvik}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{PjaeJDylF_V_Owoar118p → jTh5m77FIfQccc0gftvik}/_ssgManifest.js +0 -0
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
# Light Theme Audit & Polish Proposal · v0.4.2 → v0.4.3-preview.0
|
|
2
|
-
|
|
3
|
-
**Author**: N站马 (Dashboard owner)
|
|
4
|
-
**Reviewers**: 通信龙 (gate), Vincent (final)
|
|
5
|
-
**Status**: 🟡 design-review — DO NOT implement until 通信龙 OKs direction
|
|
6
|
-
|
|
7
|
-
## TL;DR
|
|
8
|
-
|
|
9
|
-
Light theme is **functionally correct** (Issue #4 fix shipped in 0.3.4 made all themed surfaces light), but the visual story is unfinished. The 0.4.x line plugged bug-leaks; 0.4.3 should make light feel **deliberate**, not "Cyber-minus-the-dark".
|
|
10
|
-
|
|
11
|
-
I propose direction = **cool-professional, breathable** (Stripe Dashboard / Vercel / Linear). Three high-impact moves:
|
|
12
|
-
|
|
13
|
-
1. Sidebar gets **white** (`bg-secondary`) — currently same color as page bg, so it doesn't visually separate.
|
|
14
|
-
2. Active-nav state simplifies from **4 emerald cues** to **1**: thin left border + slight bg tint, NO emerald text.
|
|
15
|
-
3. Empty / disabled / error states stop showing **raw `[{"error":...}]`** and double-dash `--` — replace with iconified empathy states.
|
|
16
|
-
|
|
17
|
-
The big optional swing is a Command Mesh **light SVG variant** (currently a dark radar canvas inside an otherwise light page). High polish, ~150 lines SVG rewrite. Recommend: do it, gated on 通信龙's call.
|
|
18
|
-
|
|
19
|
-
If those land, the rest is per-component cleanup (~10 small commits). Target release: `@sleep2agi/agent-network-dashboard@0.4.3-preview.0`, preview tag only.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 1. Audit method
|
|
24
|
-
|
|
25
|
-
- Local `next dev` on port 3030
|
|
26
|
-
- Playwright (chromium headless 1440×1100, fullPage)
|
|
27
|
-
- 11 pages screenshotted: login, overview, nodes, tasks, messages, networks, logs, server-logs, admin, settings, settings/tokens
|
|
28
|
-
- For each page also collected: dark-residual elements (computed bg with R<80, RGB sum <220) and low-contrast text pairs (luminance delta < 120)
|
|
29
|
-
- Empty-state coverage (no real agents in local network) — known limitation; need to re-audit with seeded data once we have a staging hub
|
|
30
|
-
|
|
31
|
-
Screenshots and `findings.json` archived at `/tmp/audit-light/` (12 files).
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## 2. Direction call — needs 通信龙 sign-off
|
|
36
|
-
|
|
37
|
-
### Proposal: **cool-professional, breathable**
|
|
38
|
-
|
|
39
|
-
| dimension | direction |
|
|
40
|
-
|---|---|
|
|
41
|
-
| feel | crisp, technical, ops-oriented — like Stripe Dashboard / Vercel / Linear |
|
|
42
|
-
| temperature | cool (zinc + emerald), NOT warm (amber/orange/peach) |
|
|
43
|
-
| density | breathable — same info density as Cyber but card padding +1 step, vertical gaps +30% |
|
|
44
|
-
| accent usage | minimal — emerald only on (1) CTA buttons, (2) current-page nav, (3) key status numbers |
|
|
45
|
-
| typography | keep `font-mono` for code/IDs/timestamps; consider sans-serif for body labels (deferred — separate decision) |
|
|
46
|
-
| elevation | real soft shadows (2 levels: rest + hover), NOT border-only |
|
|
47
|
-
| illustration | none — no icons-with-faces, no doodles, no curved arrows |
|
|
48
|
-
|
|
49
|
-
### Why not "warm/friendly"
|
|
50
|
-
|
|
51
|
-
This is an **ops tool** for managing AI agent armies (Vincent's framing). Warm undermines the "monitoring console" feel. Cyber dark and Light cool are the same designer-brain — two surfaces of one product.
|
|
52
|
-
|
|
53
|
-
### Why not "minimalist/flat"
|
|
54
|
-
|
|
55
|
-
Minimal would mean stripping the gradient accents and shadows; we'd lose the data-density signaling that makes the Cyber theme legible. Keep the structure, polish the surfaces.
|
|
56
|
-
|
|
57
|
-
### Alternatives if 通信龙 wants different
|
|
58
|
-
|
|
59
|
-
- **warm/friendly**: switch emerald → coral or amber, add soft illustrations, larger padding, friendlier copy
|
|
60
|
-
- **brutalist**: kill all gradients, kill all rounded corners >6px, monochrome with one hot accent
|
|
61
|
-
- **glass-morphism**: backdrop-blur on cards, layered translucent panels — feels modern but heavy on perf and visually busy
|
|
62
|
-
|
|
63
|
-
Pick one before I touch code.
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## 3. Per-page findings
|
|
68
|
-
|
|
69
|
-
### 3.1 Sidebar (global — affects every page)
|
|
70
|
-
|
|
71
|
-
**Issues:**
|
|
72
|
-
- **P0** Sidebar bg currently = `var(--bg)` (#f6f7f9) = page bg → sidebar reads as part of the page, only the thin right border separates it. Cards on the right (white) look "in front of" the page; sidebar looks like negative space.
|
|
73
|
-
- **P1** Header "Agent Network / Dashboard" is plain text with no logo/mark. No visual anchor.
|
|
74
|
-
- **P0** Active nav state stacks 4 emerald cues: `bg-cyan-500/10` + `border border-cyan-500/20` + `text-cyan-300 (→ var(--accent))`. Muddy.
|
|
75
|
-
- **P2** Network list inside sidebar (collapsed by default in screenshots, but exists) — when present, role icons (⭐/🔧/👤/👁) feel out of register with otherwise sober typography.
|
|
76
|
-
- **P2** Bottom theme switcher button + collapse arrow are tight together — easy to misclick on mobile.
|
|
77
|
-
|
|
78
|
-
**Proposed fixes:**
|
|
79
|
-
|
|
80
|
-
```diff
|
|
81
|
-
- bg-[#0d0d1a] // resolves to var(--bg) in light
|
|
82
|
-
+ bg-[var(--bg-secondary)] // white, sits as its own surface
|
|
83
|
-
|
|
84
|
-
- /* active nav: bg-cyan-500/10 + border + text-cyan */
|
|
85
|
-
+ /* active nav: 4px left border emerald + text-fg, NO bg tint */
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### 3.2 Login
|
|
89
|
-
|
|
90
|
-
**Issues:**
|
|
91
|
-
- **P2** Logo area: 64×64 emerald rounded square is OK; could carry product mark (svg from `/favicon.svg`?) instead of being a flat square. Low priority.
|
|
92
|
-
- **P3** Big empty space above logo (~250px) — could center tighter on small screens.
|
|
93
|
-
- ✅ Sign in button (solid emerald) and field focus rings work in light.
|
|
94
|
-
|
|
95
|
-
### 3.3 Overview
|
|
96
|
-
|
|
97
|
-
**Issues:**
|
|
98
|
-
- **P0** KPI cards (Online/Working/Offline/Total) — the radial gradient tint (`from-green-500/20 to-green-500/0`) on white reads as a pale wash; **add a 2px colored top-strip** instead of/in addition to the wash. Clearer color coding without the muddy gradient.
|
|
99
|
-
- **P1** "fake / Edit / Sign out" user bar — Edit + Sign out links are right-aligned text-only; very low affordance for "click here to do action". Convert to ghost buttons.
|
|
100
|
-
- **P1** Config bar is a one-line collapsible section taking full row width. Visually thin; should either merge into a header strip or get more presence.
|
|
101
|
-
- **P0** Quick Actions row mixes data ("0/0", "0", "—") and placeholders ("→"). The arrows feel like "go to" affordances but the same row also acts as a stat dashboard. Two competing intents. Pick: either it's a stat strip or it's a nav strip, not both.
|
|
102
|
-
- **P1** Empty state "— / No agents in this network" — the "—" double-dash is visually loud (24pt+) for what is essentially an "empty" message. Use an icon, smaller text.
|
|
103
|
-
- **P1** "Hide Topology" toggle is a tiny outlined button mid-page. Should be a small icon-toggle in the topology section header.
|
|
104
|
-
|
|
105
|
-
### 3.4 Nodes
|
|
106
|
-
|
|
107
|
-
**Issues:**
|
|
108
|
-
- **P2** Header "Nodes 0 online 0 total" — chip alignment OK, but "0 online" emerald chip vs "0 total" grey chip have different vertical alignment with the H1 (looks off-by-a-pixel).
|
|
109
|
-
- **P2** Search nodes input + "All" dropdown — `<select>` element is **native browser styled**, doesn't match our themed inputs (you can see it visually clashes — a chunky arrow, default font weight). Need to replace with custom dropdown OR style the native select.
|
|
110
|
-
- **P3** List/Grid toggle top-right — fine.
|
|
111
|
-
|
|
112
|
-
### 3.5 Tasks
|
|
113
|
-
|
|
114
|
-
**Issues:**
|
|
115
|
-
- **P1** Tab strip has 10 tabs (All + 9 statuses). On 1440px desktop it fits; on narrower viewports it wraps. **Pills should color-code by status** to match the chip system used elsewhere (running=green, failed=red, etc.) — currently they're all neutral except active.
|
|
116
|
-
- **P2** From/To node filters are bare inputs with no labels — fine for power users, opaque for new users.
|
|
117
|
-
|
|
118
|
-
### 3.6 Messages
|
|
119
|
-
|
|
120
|
-
**Issues:**
|
|
121
|
-
- **P2** "All types" select again native-styled, same issue as Nodes.
|
|
122
|
-
- **P2** "Debug" toggle button looks identical to "Timeline/Grouped" view toggle — should visually differentiate (debug = dev affordance, view = display mode).
|
|
123
|
-
|
|
124
|
-
### 3.7 Networks (Settings → Networks)
|
|
125
|
-
|
|
126
|
-
**Issues:**
|
|
127
|
-
- **P2** Create form button "Create" is muted (disabled-looking) when fields empty — by design. But the "Create" button when active is solid emerald, when disabled it's the muted grey we shipped in 0.3.4. Works correctly but the **transition between disabled→enabled feels abrupt** (no animation).
|
|
128
|
-
- ✅ My Networks empty state ("No networks found. Create one or sign in with V3 auth.") is well-written.
|
|
129
|
-
|
|
130
|
-
### 3.8 Logs (Audit Log)
|
|
131
|
-
|
|
132
|
-
**Issues:**
|
|
133
|
-
- **P0** Error state shows **raw JSON**: `[{"error":"unauthorized"}] (Audit log may require V3 auth token)` in a yellow chip. Two problems:
|
|
134
|
-
1. JSON should never leak to users — pretty-print or replace with human message
|
|
135
|
-
2. The "(Audit log may require V3 auth token)" parenthetical is helpful but undersold — should be the primary message with a "Sign in" CTA
|
|
136
|
-
- **P3** "All actions" select native styled.
|
|
137
|
-
|
|
138
|
-
### 3.9 Server Logs
|
|
139
|
-
|
|
140
|
-
**Issues:**
|
|
141
|
-
- **P0** Error chip: `X hub 401 (admin 角色才能看 server logs)` — exposes HTTP status to user. Should be "You need admin role to view server logs."
|
|
142
|
-
- **P1** "加载失败" (Chinese for "loading failed") shown plain-text on white card — should be styled error state with icon + retry CTA.
|
|
143
|
-
- **P2** Top controls (Pause / auto-refresh / Reload) jammed together — Pause is a chip-style button, auto-refresh is a checkbox-label, Reload is an outlined button. Visually heterogeneous; should be one button group.
|
|
144
|
-
- **P2** Tab filter (all/log/info/warn/error) — same as Tasks tab strip, should color-code.
|
|
145
|
-
|
|
146
|
-
### 3.10 Admin
|
|
147
|
-
|
|
148
|
-
**Issues:**
|
|
149
|
-
- **P0** "Server Overview" mini-stats (`0 Online / 0 Offline / 6 SSE Connections / -- Total Tasks`) — the "6" for SSE Connections lights up emerald with no context. New users won't know what SSE Connections means. Add tooltip or sub-label.
|
|
150
|
-
- **P1** "Register User (V3)" button is full-width muted grey (disabled when empty). Visually weak — looks like a placeholder. When enabled it'll be full-width emerald, which is a lot of emerald.
|
|
151
|
-
- **P2** Two-column layout works but left column is denser than right — could rebalance.
|
|
152
|
-
|
|
153
|
-
### 3.11 Settings
|
|
154
|
-
|
|
155
|
-
**Issues:**
|
|
156
|
-
- **P1** Long card list with no section grouping → feels like a list, not an org. Add section headings: "Connection", "Account", "Resources", "Advanced".
|
|
157
|
-
- **P1** License "type · trial" shown as orange text — should be a chip.
|
|
158
|
-
- **P2** "anet-XXXX-XXXX-XXXX-XXXX" license code input is empty-styled (light grey bg with placeholder); enter key UX unclear.
|
|
159
|
-
- **P3** Session card at bottom — red "Session" label is a slight misdirection (looks like an error). Should probably read "Sign out" with a less alarming color.
|
|
160
|
-
|
|
161
|
-
### 3.12 Settings → Tokens
|
|
162
|
-
|
|
163
|
-
**Issues:**
|
|
164
|
-
- **P2** Same disabled-button pattern as Networks. Works correctly, just the abrupt enable transition.
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## 4. Cross-cutting issues (apply globally)
|
|
169
|
-
|
|
170
|
-
1. **CSS hex-class shim is fragile** — every theme bug fix so far has been "add `bg-[#xxxxxx]` to the override list in globals.css". Real fix: migrate components from `bg-[#0a0a1a]` → `bg-[var(--bg)]` or themed Tailwind tokens. Scope: ~30 files, ~150 instances. Not urgent for 0.4.3 but the right long-term play.
|
|
171
|
-
2. **Native `<select>` not themed** — 4 occurrences across pages (Nodes filter, Messages filter, Logs filter, Settings password change). Either style them or replace with custom dropdown.
|
|
172
|
-
3. **Empty states inconsistent** — sometimes "--" + text, sometimes only text. Standardize: icon + headline + sub-text + optional CTA.
|
|
173
|
-
4. **Error states inconsistent** — sometimes raw JSON, sometimes plain text, sometimes styled chip. Standardize: red chip + human message + recovery CTA.
|
|
174
|
-
5. **Disabled button confusion** — disabled + enabled muted-grey-vs-emerald is too binary. Add an outline or subtle text-decoration to disabled state to make affordance clearer.
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## 5. Command Mesh — decide separately
|
|
179
|
-
|
|
180
|
-
**Current state:** Cyber radar SVG (linear gradient `#0b1220→#080814→#101018`, cyan rings, neon edges, animated flow particles) rendered as-is in light theme. Looks great in Cyber, looks like a black hole inside a white page in light.
|
|
181
|
-
|
|
182
|
-
**Option A (recommend):** Build a light variant.
|
|
183
|
-
- White SVG bg with very subtle grid lines (`#e3e6eb` 1px every 80px)
|
|
184
|
-
- Emerald node circles (no glow)
|
|
185
|
-
- Soft grey edges (no animated particles, or slowed-down + lower contrast)
|
|
186
|
-
- Cost: ~150 LOC new SVG block, conditional on `data-theme="light"` (detect via `matchMedia` or pass theme prop)
|
|
187
|
-
|
|
188
|
-
**Option B:** Hide topology in light theme.
|
|
189
|
-
- Cheaper. Add "(hidden in light theme)" message + show-anyway button. Cost: 5 LOC.
|
|
190
|
-
- Worse UX — users lose a feature in light mode.
|
|
191
|
-
|
|
192
|
-
**Option C:** Keep dark canvas in light page.
|
|
193
|
-
- Free. Status quo. Visually disruptive but functional.
|
|
194
|
-
|
|
195
|
-
**My recommendation: A.** It's the highest-perceived-polish change in this whole proposal.
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## 6. Implementation plan (after 通信龙 OK)
|
|
200
|
-
|
|
201
|
-
Sequence (10 small commits, each independently shippable):
|
|
202
|
-
|
|
203
|
-
1. **Sidebar surface** — change bg to `bg-secondary`, simplify active nav state, add right divider shadow. Touches `app/components/Sidebar.tsx` + globals.css.
|
|
204
|
-
2. **KPI card accent** — replace gradient wash with 2px top strip; touches `app/components/StatsBar.tsx`.
|
|
205
|
-
3. **Empty states standardization** — extract `<EmptyState>` component with icon prop; touches `app/components/LoadingSkeleton.tsx` (already exports EmptyState) + 6 page files.
|
|
206
|
-
4. **Error states standardization** — same pattern, `<ErrorBanner>` component. Touches logs page, server-logs page.
|
|
207
|
-
5. **Native select theming** — apply `appearance-none` + custom chevron SVG bg. globals.css.
|
|
208
|
-
6. **Tab strip color coding** — Tasks + Server Logs tabs get color tints matching status. Touches `app/tasks/page.tsx`, `app/server-logs/page.tsx`.
|
|
209
|
-
7. **Disabled button outline** — globals.css; add dashed border to `disabled:bg-gray-800` in light/mint.
|
|
210
|
-
8. **Settings section grouping** — wrap cards in `<section>` groups with H3 headings. Touches `app/settings/page.tsx`.
|
|
211
|
-
9. **Quick Actions disambiguation** — split into pure-stat-row + pure-nav-row, OR make all 6 carry data. Touches `app/page.tsx`.
|
|
212
|
-
10. **Command Mesh light variant** (if Option A) — new SVG block conditional on theme. Touches `app/components/TopoGraph.tsx`.
|
|
213
|
-
|
|
214
|
-
Each commit builds + Playwright-screenshots + diffs against the audit screenshots stored in `/tmp/audit-light/`.
|
|
215
|
-
|
|
216
|
-
Bump to `0.4.3-preview.0`, `npm publish --tag preview`. **Do NOT** touch CLI `PINNED_DASHBOARD_VERSION` (stays 0.4.2 stable). **Do NOT** `vercel deploy --prod` (preview testing via `npx ...@preview` only).
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## 7. Questions for 通信龙
|
|
221
|
-
|
|
222
|
-
1. **Direction** — cool-professional confirmed? Or pick alternative (warm / brutalist / glass).
|
|
223
|
-
2. **Command Mesh light variant** — Option A (build it) / B (hide) / C (keep dark canvas in light page).
|
|
224
|
-
3. **CTA color** — keep emerald `#009e7e` or swap brand?
|
|
225
|
-
4. **Sans-serif body** — defer to a separate decision (typography is a multi-week call)?
|
|
226
|
-
5. **Mobile audit** — do this in 0.4.3 or defer to 0.4.4?
|
|
227
|
-
6. **Native `<select>` replacement** — style them (cheap) or build custom dropdown (right)?
|
|
228
|
-
|
|
229
|
-
Awaiting your call on 1–6. Phase 3 implementation starts when you OK direction.
|
package/docs/v4-plan.md
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Dashboard V4 优化方案
|
|
2
|
-
|
|
3
|
-
## 上一阶段成果
|
|
4
|
-
- 51 commits,8+ 页面,preview.8→27 全对接
|
|
5
|
-
- V3 Auth 完整:登录/注册/token管理/网络管理/成员查看
|
|
6
|
-
- SSE 实时 + SWR 数据层 + network_id 隔离
|
|
7
|
-
- Docker 测试环境自动化
|
|
8
|
-
|
|
9
|
-
## preview.27 新发现
|
|
10
|
-
- 注册返回 `utok_`(用户 token)+ `ntok_`(网络 token)
|
|
11
|
-
- 首个注册用户自动成为 `admin` 角色
|
|
12
|
-
- `/api/task_events` 端点可用
|
|
13
|
-
- `/api/auth/tokens` 返回多种 token
|
|
14
|
-
|
|
15
|
-
## V4 优化清单
|
|
16
|
-
|
|
17
|
-
### 产品
|
|
18
|
-
1. 注册流程:展示 utok_ 和 ntok_ 双 token(用户 token + 网络 token)
|
|
19
|
-
2. Network 多租户:完整的网络→成员→邀请→角色 流程
|
|
20
|
-
3. 任务事件时间线:/api/task_events 接入 Task 详情页
|
|
21
|
-
|
|
22
|
-
### 设计
|
|
23
|
-
4. 统一色彩系统:定义 design tokens(primary/success/warning/error)
|
|
24
|
-
5. 首页信息层次优化:减少视觉噪音
|
|
25
|
-
6. 空状态设计统一
|
|
26
|
-
|
|
27
|
-
### 前端
|
|
28
|
-
7. 注册响应支持 utok_/ntok_ 双 token
|
|
29
|
-
8. 新增 /api/hub/task-events 代理
|
|
30
|
-
9. Task 详情页接入 task_events 时间线
|
|
31
|
-
|
|
32
|
-
### 运维
|
|
33
|
-
10. Docker 测试自动化脚本
|
|
34
|
-
11. 健康检查监控
|
|
35
|
-
|
|
36
|
-
### 运营
|
|
37
|
-
12. Demo 数据丰富化
|
|
38
|
-
13. Onboarding 引导
|
|
Binary file
|