@sleep2agi/agent-network-dashboard 0.5.7-preview.5 → 0.5.7-preview.66
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/app-path-routes-manifest.json +0 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +65 -65
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/routes-manifest.json +0 -6
- 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/next-font-manifest.json +2 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +4 -4
- package/.next/server/app/_not-found.rsc +16 -16
- package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/admin/page/next-font-manifest.json +2 -1
- package/.next/server/app/admin/page.js +1 -1
- package/.next/server/app/admin/page.js.nft.json +1 -1
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +4 -4
- package/.next/server/app/admin.rsc +20 -19
- package/.next/server/app/admin.segments/_full.segment.rsc +20 -19
- package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
- package/.next/server/app/admin.segments/_index.segment.rsc +9 -9
- package/.next/server/app/admin.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/admin.segments/admin.segment.rsc +3 -3
- package/.next/server/app/index.html +4 -4
- package/.next/server/app/index.rsc +20 -19
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +20 -19
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +9 -9
- package/.next/server/app/index.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/login/page/next-font-manifest.json +2 -1
- package/.next/server/app/login/page.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- 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 +20 -19
- package/.next/server/app/login.segments/_full.segment.rsc +20 -19
- package/.next/server/app/login.segments/_head.segment.rsc +4 -4
- package/.next/server/app/login.segments/_index.segment.rsc +9 -9
- package/.next/server/app/login.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/login.segments/login.segment.rsc +3 -3
- package/.next/server/app/logs/page/next-font-manifest.json +2 -1
- package/.next/server/app/logs/page.js +1 -1
- package/.next/server/app/logs/page.js.nft.json +1 -1
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +4 -4
- package/.next/server/app/logs.rsc +20 -19
- package/.next/server/app/logs.segments/_full.segment.rsc +20 -19
- package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/logs.segments/_index.segment.rsc +9 -9
- package/.next/server/app/logs.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/logs.segments/logs.segment.rsc +3 -3
- package/.next/server/app/manifest.webmanifest.body +1 -1
- package/.next/server/app/messages/page/next-font-manifest.json +2 -1
- package/.next/server/app/messages/page.js +1 -1
- package/.next/server/app/messages/page.js.nft.json +1 -1
- package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +4 -4
- package/.next/server/app/messages.rsc +20 -19
- package/.next/server/app/messages.segments/_full.segment.rsc +20 -19
- package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
- package/.next/server/app/messages.segments/_index.segment.rsc +9 -9
- package/.next/server/app/messages.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/messages.segments/messages.segment.rsc +3 -3
- package/.next/server/app/node/page/next-font-manifest.json +2 -1
- package/.next/server/app/node/page.js +1 -1
- package/.next/server/app/node/page.js.nft.json +1 -1
- package/.next/server/app/node/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +4 -4
- package/.next/server/app/node.rsc +20 -19
- package/.next/server/app/node.segments/_full.segment.rsc +20 -19
- package/.next/server/app/node.segments/_head.segment.rsc +4 -4
- package/.next/server/app/node.segments/_index.segment.rsc +9 -9
- package/.next/server/app/node.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/node.segments/node.segment.rsc +3 -3
- package/.next/server/app/nodes/page/next-font-manifest.json +2 -1
- package/.next/server/app/nodes/page.js +1 -1
- package/.next/server/app/nodes/page.js.nft.json +1 -1
- package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +4 -4
- package/.next/server/app/nodes.rsc +20 -19
- package/.next/server/app/nodes.segments/_full.segment.rsc +20 -19
- package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/_index.segment.rsc +9 -9
- package/.next/server/app/nodes.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/nodes.segment.rsc +3 -3
- package/.next/server/app/page/next-font-manifest.json +2 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs/page/next-font-manifest.json +2 -1
- package/.next/server/app/server-logs/page.js +1 -1
- package/.next/server/app/server-logs/page.js.nft.json +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +4 -4
- package/.next/server/app/server-logs.rsc +20 -19
- package/.next/server/app/server-logs.segments/_full.segment.rsc +20 -19
- package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/_index.segment.rsc +9 -9
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +3 -3
- package/.next/server/app/servers/page/next-font-manifest.json +2 -1
- package/.next/server/app/servers/page.js +1 -1
- package/.next/server/app/servers/page.js.nft.json +1 -1
- package/.next/server/app/servers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/servers.html +4 -4
- package/.next/server/app/servers.rsc +20 -19
- package/.next/server/app/servers.segments/_full.segment.rsc +20 -19
- package/.next/server/app/servers.segments/_head.segment.rsc +4 -4
- package/.next/server/app/servers.segments/_index.segment.rsc +9 -9
- package/.next/server/app/servers.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/servers.segments/servers/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/servers.segments/servers.segment.rsc +3 -3
- package/.next/server/app/settings/networks/page/next-font-manifest.json +2 -1
- package/.next/server/app/settings/networks/page.js +1 -1
- package/.next/server/app/settings/networks/page.js.nft.json +1 -1
- package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +4 -4
- package/.next/server/app/settings/networks.rsc +20 -19
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +20 -19
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +3 -3
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings/page/next-font-manifest.json +2 -1
- package/.next/server/app/settings/page.js +1 -1
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page/next-font-manifest.json +2 -1
- package/.next/server/app/settings/tokens/page.js +1 -1
- package/.next/server/app/settings/tokens/page.js.nft.json +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +4 -4
- package/.next/server/app/settings/tokens.rsc +20 -19
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +20 -19
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +3 -3
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings.html +4 -4
- package/.next/server/app/settings.rsc +20 -19
- package/.next/server/app/settings.segments/_full.segment.rsc +20 -19
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/tasks/[id]/page/next-font-manifest.json +2 -1
- package/.next/server/app/tasks/[id]/page.js +1 -1
- package/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page/next-font-manifest.json +2 -1
- package/.next/server/app/tasks/page.js +1 -1
- package/.next/server/app/tasks/page.js.nft.json +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +4 -4
- package/.next/server/app/tasks.rsc +20 -19
- package/.next/server/app/tasks.segments/_full.segment.rsc +20 -19
- package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/_index.segment.rsc +9 -9
- package/.next/server/app/tasks.segments/_tree.segment.rsc +5 -4
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/tasks.segment.rsc +3 -3
- package/.next/server/app-paths-manifest.json +0 -1
- package/.next/server/chunks/00jm_next_dist_0ju_ux9._.js +1 -1
- package/.next/server/chunks/00jm_next_dist_0ju_ux9._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__04gz75y._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__04gz75y._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__05kf31s._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__05kf31s._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__096ytyk._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__096ytyk._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0u4-66w._.js +8 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0u4-66w._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0_870i8._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0_870i8._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0_d45-d._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0_d45-d._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0fjlnh~._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0fjlnh~._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0gd.4pc._.js +9 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0gd.4pc._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0wn4jc5._.js +3 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0wn4jc5._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0xgney8._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0xgney8._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_10hjgv4._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_10hjgv4._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_12l4oto._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_12l4oto._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0r7kb.o._.js +9 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0r7kb.o._.js.map +1 -0
- package/.next/server/chunks/ssr/agent-network-dashboard_app_servers_page_tsx_0jib5qm._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_servers_page_tsx_0jib5qm._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +30 -15
- package/.next/server/pages/404.html +4 -4
- 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/{0jp~cs9-zkmqa.js → 00b4y77vxfabl.js} +1 -1
- package/.next/static/chunks/00y0qgigxb62-.js +1 -0
- package/.next/static/chunks/049vx3qljs1tt.js +1 -0
- package/.next/static/chunks/04cf.98_cyxen.js +1 -0
- package/.next/static/chunks/066jf0nk75nic.css +2 -0
- package/.next/static/chunks/07sj5zwg46-5~.css +1 -0
- package/.next/static/chunks/0_bn~gcrgo.4n.js +1 -0
- package/.next/static/chunks/0g4d-_fi-d9hg.js +1 -0
- package/.next/static/chunks/0t4lpxu4ny9-3.js +1 -0
- package/.next/static/chunks/0vgrwqsgja19l.js +1 -0
- package/.next/static/chunks/0wz0122ym_gr3.js +1 -0
- package/.next/static/chunks/0xxx7yeapw~2a.js +1 -0
- package/.next/static/chunks/0y5gol09tlu63.js +1 -0
- package/.next/static/chunks/143g3n8za083f.js +7 -0
- package/.next/static/chunks/149a4l50_3vw-.js +7 -0
- package/.next/static/chunks/14lac~_cpjlh..js +1 -0
- package/.next/static/chunks/152_p6jt7txp6.js +1 -0
- package/.next/static/chunks/165v74i3j-wk0.js +1 -0
- package/.next/static/chunks/16glr1c4nc85n.js +4 -0
- package/.next/static/chunks/17-7ama~oijou.js +1 -0
- package/.next/static/media/4fa387ec64143e14-s.0wkzw~je483f-.woff2 +0 -0
- package/.next/static/media/53b9e256198e5412-s.0-wfv7uh4i7h9.woff2 +0 -0
- package/.next/static/media/5ce348bf30bf5439-s.0zgw-jeven.3w.woff2 +0 -0
- package/.next/static/media/6306c77e7c8268e4-s.0rhz0arwfsn~5.woff2 +0 -0
- package/.next/static/media/7178b3e590c64307-s.0nx0ww8fni_q3.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2 +0 -0
- package/.next/static/media/7d817b4c03b0c5f1-s.0l76wvqk9d84w.woff2 +0 -0
- package/.next/static/media/8a480f0b521d4e75-s.0jzbimsg8vl84.woff2 +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.0k4k9394f2q-k.woff2 +0 -0
- package/.next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2 +0 -0
- package/.next/static/media/fef07dbb0973bf53-s.12tyk43_3sh9u.woff2 +0 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/.next/types/routes.d.ts +1 -2
- package/.next/types/validator.ts +0 -9
- package/app/admin/page.tsx +53 -38
- package/app/components/AgentCard.tsx +38 -17
- package/app/components/AppShell.tsx +7 -1
- package/app/components/ChatPopover.tsx +1 -1
- package/app/components/CollapsibleSearch.tsx +127 -0
- package/app/components/CommandCenter.tsx +14 -4
- package/app/components/CommandPalette.tsx +6 -6
- package/app/components/DispatchPanel.tsx +13 -10
- package/app/components/EmptyState.tsx +11 -4
- package/app/components/HealthBanner.tsx +28 -4
- package/app/components/HelpOverlay.tsx +4 -7
- package/app/components/LoadingSkeleton.tsx +31 -21
- package/app/components/MobileNav.tsx +28 -21
- package/app/components/Sidebar.tsx +30 -23
- package/app/components/StatsBar.tsx +40 -42
- package/app/components/TaskChatPanel.tsx +19 -5
- package/app/components/TaskDrawer.tsx +9 -7
- package/app/components/ThemeSwitcher.tsx +15 -79
- package/app/components/TopoGraph.tsx +31 -21
- package/app/components/UserBar.tsx +5 -5
- package/app/globals.css +1757 -1776
- package/app/layout.tsx +37 -4
- package/app/lib/hooks.ts +0 -5
- package/app/lib/status.ts +24 -17
- package/app/login/page.tsx +7 -7
- package/app/logs/page.tsx +12 -6
- package/app/manifest.ts +2 -2
- package/app/messages/page.tsx +84 -57
- package/app/node/page.tsx +27 -17
- package/app/nodes/page.tsx +62 -49
- package/app/page.tsx +40 -269
- package/app/server-logs/page.tsx +40 -14
- package/app/servers/page.tsx +33 -12
- package/app/settings/networks/page.tsx +17 -15
- package/app/settings/page.tsx +90 -95
- package/app/settings/tokens/page.tsx +5 -5
- package/app/tasks/[id]/page.tsx +10 -10
- package/app/tasks/page.tsx +58 -34
- package/bin/start.js +0 -0
- package/package.json +1 -1
- package/public/favicon.svg +1 -1
- package/public/manifest.webmanifest +24 -0
- package/public/robots.txt +7 -0
- package/.next/server/app/api/hub/license/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/hub/license/route/build-manifest.json +0 -9
- package/.next/server/app/api/hub/license/route/server-reference-manifest.json +0 -4
- package/.next/server/app/api/hub/license/route.js +0 -7
- package/.next/server/app/api/hub/license/route.js.map +0 -5
- package/.next/server/app/api/hub/license/route.js.nft.json +0 -1
- package/.next/server/app/api/hub/license/route_client-reference-manifest.js +0 -3
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js +0 -3
- package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0lu1wok._.js +0 -8
- package/.next/server/chunks/ssr/[root-of-the-server]__0lu1wok._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__11fu-5m._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__11fu-5m._.js.map +0 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_057q.ne._.js +0 -3
- package/.next/server/chunks/ssr/agent-network-dashboard_app_057q.ne._.js.map +0 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js +0 -3
- package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js.map +0 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_1153xeb._.js +0 -9
- package/.next/server/chunks/ssr/agent-network-dashboard_app_1153xeb._.js.map +0 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0s5uqlp._.js +0 -9
- package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0s5uqlp._.js.map +0 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js +0 -3
- package/.next/server/chunks/ssr/agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js.map +0 -1
- package/.next/static/chunks/0-mpa_947ipeq.js +0 -1
- package/.next/static/chunks/0.t1evm65itbw.js +0 -1
- package/.next/static/chunks/03~5pxwbxxw-b.js +0 -1
- package/.next/static/chunks/04~fkia6-79k3.js +0 -1
- package/.next/static/chunks/0561vp5-q5.zp.js +0 -1
- package/.next/static/chunks/05uk96gc~9mni.js +0 -1
- package/.next/static/chunks/0a.9~-nf0gpec.js +0 -1
- package/.next/static/chunks/0az0wa3gxme68.js +0 -1
- package/.next/static/chunks/0dq6wv-e0vk_o.css +0 -1
- package/.next/static/chunks/0gi_03g-uxj0r.js +0 -1
- package/.next/static/chunks/0im751o4n61c7.js +0 -1
- package/.next/static/chunks/0inql3s9ldyx5.js +0 -1
- package/.next/static/chunks/0ku0fjqlm9mca.js +0 -1
- package/.next/static/chunks/0nqm.7w9_inwd.js +0 -7
- package/.next/static/chunks/13yktdzuatx3d.js +0 -1
- package/.next/static/chunks/15-ltfhot3b4n.js +0 -7
- package/.next/static/chunks/15qxef.ilfysw.js +0 -4
- package/.next/static/chunks/17sxlwlx5fhrp.css +0 -1
- package/.next/static/chunks/181u38qblp8lz.js +0 -1
- package/.next/static/media/4fa387ec64143e14-s.0.qu-9752pffj.woff2 +0 -0
- package/.next/static/media/5ce348bf30bf5439-s.0ee55_hj9qcer.woff2 +0 -0
- package/.next/static/media/6306c77e7c8268e4-s.0mao5jbfbduzp.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.09zddjkbdep5a.woff2 +0 -0
- package/.next/static/media/7d817b4c03b0c5f1-s.0uzt.a6d44yda.woff2 +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.0mvwgmnhv29no.woff2 +0 -0
- package/app/api/hub/license/route.ts +0 -33
- package/app/components/BroadcastBar.tsx +0 -84
- package/app/components/InboxPanel.tsx +0 -36
- /package/.next/static/{e-lUTefNl8edrYCV4yWtG → 2dHfsg3G4Q4tXXzlz3hFv}/_buildManifest.js +0 -0
- /package/.next/static/{e-lUTefNl8edrYCV4yWtG → 2dHfsg3G4Q4tXXzlz3hFv}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{e-lUTefNl8edrYCV4yWtG → 2dHfsg3G4Q4tXXzlz3hFv}/_ssgManifest.js +0 -0
|
@@ -96,24 +96,24 @@ export default function NetworksPage() {
|
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
return (
|
|
99
|
-
<div className="min-h-screen bg-[#
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
<div className="min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6">
|
|
100
|
+
{/* #217 D9: back link stacks above the title instead of sitting
|
|
101
|
+
beside it — the old single row read as an off-balance
|
|
102
|
+
"← Settings Networks" pair on phones. */}
|
|
103
|
+
<div className="mb-6">
|
|
104
|
+
<Link href="/settings" className="inline-block text-gray-500 hover:text-gray-300 text-sm lg:ml-0 ml-10 mb-1">← Settings</Link>
|
|
102
105
|
<h1 className="text-2xl font-bold text-white">Networks</h1>
|
|
103
|
-
{/* Round 93: dropped {networks.length} header chip — the
|
|
104
|
-
My Networks panel below already carries `<N> total` in its
|
|
105
|
-
own subhead. Matches r86/r87 pattern. */}
|
|
106
106
|
</div>
|
|
107
107
|
|
|
108
108
|
<div className="max-w-2xl space-y-6">
|
|
109
109
|
{/* Create */}
|
|
110
|
-
<section className="bg-[#
|
|
110
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
111
111
|
<h2 className="text-sm font-semibold text-gray-300 mb-3">Create Network</h2>
|
|
112
112
|
<div className="space-y-3">
|
|
113
113
|
<input type="text" value={newName} onChange={e => setNewName(e.target.value)} placeholder="Network name"
|
|
114
|
-
className="w-full bg-[#
|
|
114
|
+
className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-base sm:text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none" />
|
|
115
115
|
<input type="text" value={newDesc} onChange={e => setNewDesc(e.target.value)} placeholder="Description (optional)"
|
|
116
|
-
className="w-full bg-[#
|
|
116
|
+
className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-base sm:text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none" />
|
|
117
117
|
<button onClick={createNetwork} disabled={!newName.trim()}
|
|
118
118
|
className="px-4 py-2 bg-green-600 hover:bg-green-500 disabled:bg-gray-800 text-white text-sm rounded-lg transition-colors">
|
|
119
119
|
Create
|
|
@@ -123,10 +123,12 @@ export default function NetworksPage() {
|
|
|
123
123
|
</section>
|
|
124
124
|
|
|
125
125
|
{/* List */}
|
|
126
|
-
<section className="bg-[#
|
|
126
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
127
127
|
<div className="flex items-center justify-between mb-3">
|
|
128
128
|
<h2 className="text-sm font-semibold text-gray-300">My Networks</h2>
|
|
129
|
-
{
|
|
129
|
+
{/* #217 D9: "N TOTAL" counter dropped below 4 rows — counting
|
|
130
|
+
a visibly one-item list is noise (D6 conditional rule). */}
|
|
131
|
+
{networks.length > 3 && (
|
|
130
132
|
<span className="text-[10px] text-gray-600 uppercase tracking-wide">{networks.length} total</span>
|
|
131
133
|
)}
|
|
132
134
|
</div>
|
|
@@ -141,7 +143,7 @@ export default function NetworksPage() {
|
|
|
141
143
|
) : (
|
|
142
144
|
<div className="space-y-3">
|
|
143
145
|
{networks.map(n => (
|
|
144
|
-
<div key={n.network_id} className="bg-[#
|
|
146
|
+
<div key={n.network_id} className="bg-[#0e0e10] rounded-lg px-4 py-3 border border-[#1c1c1f]">
|
|
145
147
|
<div className="flex items-start justify-between gap-3">
|
|
146
148
|
<div className="flex items-start gap-3 min-w-0">
|
|
147
149
|
<AliasAvatar alias={n.network_name} size={28} />
|
|
@@ -173,7 +175,7 @@ export default function NetworksPage() {
|
|
|
173
175
|
</div>
|
|
174
176
|
|
|
175
177
|
{expandedNetwork === n.network_id && (
|
|
176
|
-
<div className="mt-3 pt-3 border-t border-[#
|
|
178
|
+
<div className="mt-3 pt-3 border-t border-[#1c1c1f]">
|
|
177
179
|
<div className="text-xs text-gray-500 mb-2">Members ({(members[n.network_id] || []).length})</div>
|
|
178
180
|
{(members[n.network_id] || []).length === 0 ? (
|
|
179
181
|
<div className="text-[10px] text-gray-600">No members or V3 auth required</div>
|
|
@@ -195,11 +197,11 @@ export default function NetworksPage() {
|
|
|
195
197
|
)}
|
|
196
198
|
|
|
197
199
|
{/* Invite */}
|
|
198
|
-
<div className="mt-3 pt-3 border-t border-[#
|
|
200
|
+
<div className="mt-3 pt-3 border-t border-[#1c1c1f]">
|
|
199
201
|
<div className="text-xs text-gray-500 mb-2">Invite</div>
|
|
200
202
|
<div className="flex gap-2">
|
|
201
203
|
<select value={inviteRole} onChange={e => setInviteRole(e.target.value)}
|
|
202
|
-
className="bg-[#
|
|
204
|
+
className="bg-[#0e0e10] border border-[#26262b] rounded px-2 py-1 text-base sm:text-xs text-white focus:outline-none">
|
|
203
205
|
<option value="member">member</option>
|
|
204
206
|
<option value="admin">admin</option>
|
|
205
207
|
<option value="viewer">viewer</option>
|
package/app/settings/page.tsx
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import Link from 'next/link';
|
|
5
|
-
import { useAnetConfig, useHealth
|
|
5
|
+
import { useAnetConfig, useHealth } from '../lib/hooks';
|
|
6
6
|
import { DASHBOARD_VERSION } from '../lib/version';
|
|
7
7
|
|
|
8
8
|
export default function SettingsPage() {
|
|
9
9
|
const { config } = useAnetConfig();
|
|
10
10
|
const { health } = useHealth();
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
const [theme, setTheme] = useState<string>(() => {
|
|
12
|
+
if (typeof window === 'undefined') return 'cyber';
|
|
13
|
+
try { return localStorage.getItem('anet-theme') || 'cyber'; } catch { return 'cyber'; }
|
|
14
|
+
});
|
|
14
15
|
const [oldPwd, setOldPwd] = useState('');
|
|
15
16
|
const [newPwd, setNewPwd] = useState('');
|
|
16
17
|
const [pwdResult, setPwdResult] = useState('');
|
|
@@ -18,7 +19,7 @@ export default function SettingsPage() {
|
|
|
18
19
|
const valueClass = 'break-all sm:max-w-[320px] sm:text-right';
|
|
19
20
|
|
|
20
21
|
return (
|
|
21
|
-
<div className="min-h-screen bg-[#
|
|
22
|
+
<div className="min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6">
|
|
22
23
|
<h1 className="text-2xl font-bold text-white mb-3 lg:ml-0 ml-10">Settings</h1>
|
|
23
24
|
|
|
24
25
|
{/* Section anchor nav (round 28) — jump to a group instead of scrolling
|
|
@@ -27,29 +28,75 @@ export default function SettingsPage() {
|
|
|
27
28
|
R3 of #190 mobile polish: matches the /admin chip treatment
|
|
28
29
|
(preview.3) — 44px tap-target + visible border so the chips read
|
|
29
30
|
as tappable rather than as inert headings on 375–390px. */}
|
|
30
|
-
|
|
31
|
+
{/* #209 R36: mb-8 → mb-4 sm:mb-8 — same pattern R31 applied to
|
|
32
|
+
/admin's identical jump-nav. Saves 16 px on phones. */}
|
|
33
|
+
<nav className="mb-4 sm:mb-8 flex flex-wrap gap-2 text-xs">
|
|
31
34
|
{[
|
|
35
|
+
{ href: '#appearance', label: 'Appearance' },
|
|
32
36
|
{ href: '#connection', label: 'Connection' },
|
|
33
37
|
{ href: '#account', label: 'Account' },
|
|
34
38
|
{ href: '#resources', label: 'Resources' },
|
|
35
39
|
].map(a => (
|
|
36
40
|
<a key={a.href} href={a.href}
|
|
37
|
-
className="inline-flex min-h-[44px] items-center rounded-md border border-[#
|
|
41
|
+
className="inline-flex min-h-[44px] items-center rounded-md border border-[#26262b] bg-[#0e0e10]/60 px-3 py-2 text-gray-400 hover:border-cyan-500/50 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors">
|
|
38
42
|
{a.label}
|
|
39
43
|
</a>
|
|
40
44
|
))}
|
|
41
45
|
</nav>
|
|
42
46
|
|
|
43
47
|
<div className="max-w-2xl space-y-10">
|
|
48
|
+
{/* ── Group: Appearance (#217 S6 — Vincent: "设置里面再来一个
|
|
49
|
+
优化白色的主题"). The light theme tokens were restored from
|
|
50
|
+
pre-R8 history; this card is the visible owner of the toggle
|
|
51
|
+
(previously theme switching hid inside Cmd+K only). */}
|
|
52
|
+
<div id="appearance" className="space-y-4 scroll-mt-6">
|
|
53
|
+
<div className="flex items-center gap-2 px-1">
|
|
54
|
+
<div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Appearance</div>
|
|
55
|
+
<div className="flex-1 h-px bg-[#26262b]" />
|
|
56
|
+
</div>
|
|
57
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
58
|
+
<h2 className="text-sm font-semibold text-gray-300 mb-4">Theme</h2>
|
|
59
|
+
<div className="grid grid-cols-2 gap-3">
|
|
60
|
+
{([
|
|
61
|
+
{ id: 'cyber', label: 'Dark', swatch: '#0b0b0d', ring: '#22d3ee' },
|
|
62
|
+
{ id: 'light', label: 'Light', swatch: '#f6f7f9', ring: '#009e7e' },
|
|
63
|
+
] as const).map(t => (
|
|
64
|
+
<button
|
|
65
|
+
key={t.id}
|
|
66
|
+
onClick={() => {
|
|
67
|
+
try { localStorage.setItem('anet-theme', t.id); } catch {}
|
|
68
|
+
document.documentElement.setAttribute('data-theme', t.id);
|
|
69
|
+
setTheme(t.id);
|
|
70
|
+
}}
|
|
71
|
+
aria-pressed={theme === t.id}
|
|
72
|
+
className={`flex items-center gap-3 rounded-lg border px-4 py-3 text-sm transition-colors ${
|
|
73
|
+
theme === t.id
|
|
74
|
+
? 'border-cyan-500/60 bg-cyan-500/10 text-gray-100'
|
|
75
|
+
: 'border-[#26262b] text-gray-400 hover:border-[#3a3a41]'
|
|
76
|
+
}`}
|
|
77
|
+
>
|
|
78
|
+
<span
|
|
79
|
+
aria-hidden
|
|
80
|
+
className="inline-block w-5 h-5 rounded-full border border-black/20 shrink-0"
|
|
81
|
+
style={{ backgroundColor: t.swatch }}
|
|
82
|
+
/>
|
|
83
|
+
{t.label}
|
|
84
|
+
{theme === t.id && <span className="ml-auto text-cyan-400">✓</span>}
|
|
85
|
+
</button>
|
|
86
|
+
))}
|
|
87
|
+
</div>
|
|
88
|
+
</section>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
44
91
|
{/* ── Group: Connection ─────────────────────────────────── */}
|
|
45
92
|
<div id="connection" className="space-y-4 scroll-mt-6">
|
|
46
93
|
<div className="flex items-center gap-2 px-1">
|
|
47
94
|
<div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Connection</div>
|
|
48
|
-
<div className="flex-1 h-px bg-[#
|
|
95
|
+
<div className="flex-1 h-px bg-[#26262b]" />
|
|
49
96
|
</div>
|
|
50
97
|
|
|
51
98
|
{/* CommHub Connection */}
|
|
52
|
-
<section className="bg-[#
|
|
99
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
53
100
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">CommHub Connection</h2>
|
|
54
101
|
<div className="space-y-3 text-sm">
|
|
55
102
|
<div className={rowClass}>
|
|
@@ -75,7 +122,7 @@ export default function SettingsPage() {
|
|
|
75
122
|
</span>
|
|
76
123
|
</div>
|
|
77
124
|
{config?.error && (
|
|
78
|
-
<div className="border-t border-[#
|
|
125
|
+
<div className="border-t border-[#26262b] pt-3 text-xs text-gray-600">
|
|
79
126
|
{config.error}
|
|
80
127
|
</div>
|
|
81
128
|
)}
|
|
@@ -83,7 +130,7 @@ export default function SettingsPage() {
|
|
|
83
130
|
</section>
|
|
84
131
|
|
|
85
132
|
{/* Server Info */}
|
|
86
|
-
<section className="bg-[#
|
|
133
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
87
134
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Server Info</h2>
|
|
88
135
|
<div className="space-y-3 text-sm">
|
|
89
136
|
<div className={rowClass}>
|
|
@@ -106,7 +153,7 @@ export default function SettingsPage() {
|
|
|
106
153
|
</section>
|
|
107
154
|
|
|
108
155
|
{/* Dashboard Info */}
|
|
109
|
-
<section className="bg-[#
|
|
156
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
110
157
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Dashboard</h2>
|
|
111
158
|
<div className="space-y-3 text-sm">
|
|
112
159
|
<div className={rowClass}>
|
|
@@ -131,90 +178,17 @@ export default function SettingsPage() {
|
|
|
131
178
|
<div id="account" className="space-y-4 scroll-mt-6">
|
|
132
179
|
<div className="flex items-center gap-2 px-1">
|
|
133
180
|
<div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Account</div>
|
|
134
|
-
<div className="flex-1 h-px bg-[#
|
|
181
|
+
<div className="flex-1 h-px bg-[#26262b]" />
|
|
135
182
|
</div>
|
|
136
183
|
|
|
137
|
-
{/* License */}
|
|
138
|
-
<section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
|
|
139
|
-
<h2 className="text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2">
|
|
140
|
-
License
|
|
141
|
-
{licData?.license && (
|
|
142
|
-
<span
|
|
143
|
-
className={`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${
|
|
144
|
-
licData.license.type === 'pro'
|
|
145
|
-
? 'text-green-300 bg-green-500/10 border-green-500/30'
|
|
146
|
-
: licData.license.days_left <= 7
|
|
147
|
-
? 'text-red-300 bg-red-500/10 border-red-500/30'
|
|
148
|
-
: 'text-amber-300 bg-amber-500/10 border-amber-500/30'
|
|
149
|
-
}`}
|
|
150
|
-
>
|
|
151
|
-
<span aria-hidden className="w-1.5 h-1.5 rounded-full bg-current" />
|
|
152
|
-
{licData.license.type}{licData.license.days_left ? ` · ${licData.license.days_left}d left` : ''}
|
|
153
|
-
</span>
|
|
154
|
-
)}
|
|
155
|
-
</h2>
|
|
156
|
-
{licData?.license ? (
|
|
157
|
-
<div className="space-y-3 text-sm">
|
|
158
|
-
{/* Type + Days Left are summarized in the inline chip in the
|
|
159
|
-
header. Surface "expiring soon" only when relevant. */}
|
|
160
|
-
{licData.license.days_left <= 7 && (
|
|
161
|
-
<div className={rowClass}>
|
|
162
|
-
<span className="text-red-400 font-medium">⚠ Expiring soon</span>
|
|
163
|
-
<span className="text-red-400">{licData.license.days_left} days left</span>
|
|
164
|
-
</div>
|
|
165
|
-
)}
|
|
166
|
-
<div className={rowClass}>
|
|
167
|
-
<span className="text-gray-500">Expires</span>
|
|
168
|
-
<span className={`text-gray-300 ${valueClass}`}>{licData.license.expires_at}</span>
|
|
169
|
-
</div>
|
|
170
|
-
{licData.limits && (
|
|
171
|
-
<>
|
|
172
|
-
<div className={rowClass}>
|
|
173
|
-
<span className="text-gray-500">Max Agents</span>
|
|
174
|
-
<span className={`text-gray-300 ${valueClass}`}>{licData.limits.max_agents}</span>
|
|
175
|
-
</div>
|
|
176
|
-
<div className={rowClass}>
|
|
177
|
-
<span className="text-gray-500">Max Networks</span>
|
|
178
|
-
<span className={`text-gray-300 ${valueClass}`}>{licData.limits.max_networks}</span>
|
|
179
|
-
</div>
|
|
180
|
-
<div className={rowClass}>
|
|
181
|
-
<span className="text-gray-500">Tasks/Day</span>
|
|
182
|
-
<span className={`text-gray-300 ${valueClass}`}>{licData.limits.max_tasks_day}</span>
|
|
183
|
-
</div>
|
|
184
|
-
</>
|
|
185
|
-
)}
|
|
186
|
-
<div className="pt-3 border-t border-[#2a2a4a]">
|
|
187
|
-
<div className="flex gap-2">
|
|
188
|
-
<input type="text" value={licKey} onChange={e => setLicKey(e.target.value)}
|
|
189
|
-
placeholder="anet-XXXX-XXXX-XXXX-XXXX"
|
|
190
|
-
className="flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none" />
|
|
191
|
-
<button onClick={async () => {
|
|
192
|
-
if (!licKey.trim()) return;
|
|
193
|
-
const res = await fetch('/api/hub/license', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ key: licKey }) });
|
|
194
|
-
const data = await res.json();
|
|
195
|
-
setLicResult(data.ok ? `Activated: ${data.type}` : `Failed: ${data.error}`);
|
|
196
|
-
if (data.ok) setLicKey('');
|
|
197
|
-
setTimeout(() => setLicResult(''), 5000);
|
|
198
|
-
}} className="px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors">
|
|
199
|
-
Activate
|
|
200
|
-
</button>
|
|
201
|
-
</div>
|
|
202
|
-
{licResult && <div className={`mt-2 text-xs ${licResult.startsWith('Failed') ? 'text-red-400' : 'text-green-400'}`}>{licResult}</div>}
|
|
203
|
-
</div>
|
|
204
|
-
</div>
|
|
205
|
-
) : (
|
|
206
|
-
<div className="text-xs text-gray-600">License info not available</div>
|
|
207
|
-
)}
|
|
208
|
-
</section>
|
|
209
|
-
|
|
210
184
|
{/* Change Password */}
|
|
211
|
-
<section className="bg-[#
|
|
185
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
212
186
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Change Password</h2>
|
|
213
187
|
<div className="space-y-3">
|
|
214
188
|
<input type="password" value={oldPwd} onChange={e => setOldPwd(e.target.value)} placeholder="Current password"
|
|
215
|
-
className="w-full bg-[#
|
|
189
|
+
className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-base sm:text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none" />
|
|
216
190
|
<input type="password" value={newPwd} onChange={e => setNewPwd(e.target.value)} placeholder="New password"
|
|
217
|
-
className="w-full bg-[#
|
|
191
|
+
className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-base sm:text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none" />
|
|
218
192
|
<button onClick={async () => {
|
|
219
193
|
if (!oldPwd || !newPwd) return;
|
|
220
194
|
const saved = sessionStorage.getItem('anet_v3_auth');
|
|
@@ -244,7 +218,7 @@ export default function SettingsPage() {
|
|
|
244
218
|
</section>
|
|
245
219
|
|
|
246
220
|
{/* Session — tone-neutral, no longer "danger zone" red */}
|
|
247
|
-
<section className="bg-[#
|
|
221
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
248
222
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Sign out</h2>
|
|
249
223
|
<p className="text-xs text-gray-500 mb-3">Signing out clears your dashboard session cookie. You'll return to the login page.</p>
|
|
250
224
|
<button
|
|
@@ -252,7 +226,7 @@ export default function SettingsPage() {
|
|
|
252
226
|
await fetch('/api/auth/logout', { method: 'POST' }).catch(() => {});
|
|
253
227
|
window.location.assign('/login');
|
|
254
228
|
}}
|
|
255
|
-
className="px-4 py-2 bg-transparent hover:bg-[#
|
|
229
|
+
className="px-4 py-2 bg-transparent hover:bg-[#1c1c1f] text-gray-300 text-sm rounded-lg border border-[#26262b] hover:border-[#3a3a41] transition-colors"
|
|
256
230
|
>
|
|
257
231
|
Sign out
|
|
258
232
|
</button>
|
|
@@ -263,21 +237,42 @@ export default function SettingsPage() {
|
|
|
263
237
|
<div id="resources" className="space-y-4 scroll-mt-6">
|
|
264
238
|
<div className="flex items-center gap-2 px-1">
|
|
265
239
|
<div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Resources</div>
|
|
266
|
-
<div className="flex-1 h-px bg-[#
|
|
240
|
+
<div className="flex-1 h-px bg-[#26262b]" />
|
|
267
241
|
</div>
|
|
268
242
|
|
|
269
|
-
{/*
|
|
243
|
+
{/* #209 (per Vincent 521/522): the low-frequency pages 通信龙
|
|
244
|
+
moved out of the sidebar (Messages, Audit Log, Server Logs)
|
|
245
|
+
need a discovery surface that isn't the primary nav — folded
|
|
246
|
+
into the Settings/Resources grid alongside Tokens + Networks
|
|
247
|
+
so the page tree stays the same (pages NOT deleted), the
|
|
248
|
+
sidebar stays at 6, and users still have a one-tap way to
|
|
249
|
+
reach them without remembering URLs or opening Cmd+K. */}
|
|
270
250
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
|
271
|
-
<Link href="/settings/tokens" className="bg-[#
|
|
251
|
+
<Link href="/settings/tokens" className="bg-[#161618] border border-[#26262b] rounded-xl p-5 hover:border-cyan-500/30 transition-colors">
|
|
272
252
|
<h2 className="text-sm font-semibold text-gray-300">API Tokens</h2>
|
|
273
253
|
<p className="text-xs text-gray-500 mt-2">Create and manage tokens for CLI access.</p>
|
|
274
254
|
<span className="text-xs text-cyan-400 mt-3 inline-block">Manage →</span>
|
|
275
255
|
</Link>
|
|
276
|
-
<Link href="/settings/networks" className="bg-[#
|
|
256
|
+
<Link href="/settings/networks" className="bg-[#161618] border border-[#26262b] rounded-xl p-5 hover:border-cyan-500/30 transition-colors">
|
|
277
257
|
<h2 className="text-sm font-semibold text-gray-300">Networks</h2>
|
|
278
258
|
<p className="text-xs text-gray-500 mt-2">Create, manage, and delete agent networks.</p>
|
|
279
259
|
<span className="text-xs text-cyan-400 mt-3 inline-block">Manage →</span>
|
|
280
260
|
</Link>
|
|
261
|
+
<Link href="/messages" className="bg-[#161618] border border-[#26262b] rounded-xl p-5 hover:border-cyan-500/30 transition-colors">
|
|
262
|
+
<h2 className="text-sm font-semibold text-gray-300">Messages</h2>
|
|
263
|
+
<p className="text-xs text-gray-500 mt-2">Global timeline of CommHub messages across all agents.</p>
|
|
264
|
+
<span className="text-xs text-cyan-400 mt-3 inline-block">Open →</span>
|
|
265
|
+
</Link>
|
|
266
|
+
<Link href="/logs" className="bg-[#161618] border border-[#26262b] rounded-xl p-5 hover:border-cyan-500/30 transition-colors">
|
|
267
|
+
<h2 className="text-sm font-semibold text-gray-300">Audit Log</h2>
|
|
268
|
+
<p className="text-xs text-gray-500 mt-2">Authentication, token rotations, and admin actions.</p>
|
|
269
|
+
<span className="text-xs text-cyan-400 mt-3 inline-block">Open →</span>
|
|
270
|
+
</Link>
|
|
271
|
+
<Link href="/server-logs" className="bg-[#161618] border border-[#26262b] rounded-xl p-5 hover:border-cyan-500/30 transition-colors">
|
|
272
|
+
<h2 className="text-sm font-semibold text-gray-300">Server Logs</h2>
|
|
273
|
+
<p className="text-xs text-gray-500 mt-2">Live stdout / stderr from the CommHub server.</p>
|
|
274
|
+
<span className="text-xs text-cyan-400 mt-3 inline-block">Open →</span>
|
|
275
|
+
</Link>
|
|
281
276
|
</div>
|
|
282
277
|
</div>
|
|
283
278
|
|
|
@@ -67,7 +67,7 @@ export default function TokensPage() {
|
|
|
67
67
|
};
|
|
68
68
|
|
|
69
69
|
return (
|
|
70
|
-
<div className="min-h-screen bg-[#
|
|
70
|
+
<div className="min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6">
|
|
71
71
|
<div className="flex items-center gap-4 mb-6">
|
|
72
72
|
<Link href="/settings" className="text-gray-500 hover:text-gray-300 text-sm lg:ml-0 ml-10">← Settings</Link>
|
|
73
73
|
<h1 className="text-2xl font-bold text-white">API Tokens</h1>
|
|
@@ -75,12 +75,12 @@ export default function TokensPage() {
|
|
|
75
75
|
|
|
76
76
|
<div className="max-w-2xl space-y-6">
|
|
77
77
|
{/* Create token */}
|
|
78
|
-
<section className="bg-[#
|
|
78
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
79
79
|
<h2 className="text-sm font-semibold text-gray-300 mb-3">Create Token</h2>
|
|
80
80
|
<div className="flex gap-2">
|
|
81
81
|
<input type="text" value={newName} onChange={e => setNewName(e.target.value)}
|
|
82
82
|
placeholder="Token name (e.g. my-cli)"
|
|
83
|
-
className="flex-1 bg-[#
|
|
83
|
+
className="flex-1 bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-base sm:text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none" />
|
|
84
84
|
<button onClick={createToken} disabled={!newName.trim()}
|
|
85
85
|
className="px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 text-white text-sm rounded-lg transition-colors">
|
|
86
86
|
Create
|
|
@@ -96,7 +96,7 @@ export default function TokensPage() {
|
|
|
96
96
|
</section>
|
|
97
97
|
|
|
98
98
|
{/* Token list */}
|
|
99
|
-
<section className="bg-[#
|
|
99
|
+
<section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
|
|
100
100
|
<h2 className="text-sm font-semibold text-gray-300 mb-3">Active Tokens ({tokens.length})</h2>
|
|
101
101
|
{loading ? (
|
|
102
102
|
<div className="animate-pulse space-y-2">{[1,2].map(i => <div key={i} className="h-12 bg-gray-800/20 rounded" />)}</div>
|
|
@@ -109,7 +109,7 @@ export default function TokensPage() {
|
|
|
109
109
|
) : (
|
|
110
110
|
<div className="space-y-2">
|
|
111
111
|
{tokens.map(t => (
|
|
112
|
-
<div key={t.token_id} className="flex items-center justify-between bg-[#
|
|
112
|
+
<div key={t.token_id} className="flex items-center justify-between bg-[#0e0e10] rounded-lg px-3 py-2 border border-[#1c1c1f]">
|
|
113
113
|
<div>
|
|
114
114
|
<div className="flex items-center gap-2">
|
|
115
115
|
<span className="text-sm text-white font-medium">{t.name}</span>
|
package/app/tasks/[id]/page.tsx
CHANGED
|
@@ -73,7 +73,7 @@ export default function TaskDetailPage({ params }: { params: Promise<{ id: strin
|
|
|
73
73
|
|
|
74
74
|
if (isLoading) {
|
|
75
75
|
return (
|
|
76
|
-
<div className="min-h-screen bg-[#
|
|
76
|
+
<div className="min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6">
|
|
77
77
|
<div className="animate-pulse space-y-4">
|
|
78
78
|
<div className="h-8 w-48 bg-gray-800 rounded" />
|
|
79
79
|
<div className="h-64 bg-gray-800/20 rounded-lg" />
|
|
@@ -84,7 +84,7 @@ export default function TaskDetailPage({ params }: { params: Promise<{ id: strin
|
|
|
84
84
|
|
|
85
85
|
if (!task) {
|
|
86
86
|
return (
|
|
87
|
-
<div className="min-h-screen bg-[#
|
|
87
|
+
<div className="min-h-screen bg-[#0b0b0d] text-gray-100 p-6 flex items-center justify-center">
|
|
88
88
|
<div className="text-center">
|
|
89
89
|
<div className="text-gray-600 text-4xl mb-4">--</div>
|
|
90
90
|
<p className="text-gray-400">Task not found</p>
|
|
@@ -103,7 +103,7 @@ export default function TaskDetailPage({ params }: { params: Promise<{ id: strin
|
|
|
103
103
|
];
|
|
104
104
|
|
|
105
105
|
return (
|
|
106
|
-
<div className="min-h-screen bg-[#
|
|
106
|
+
<div className="min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6">
|
|
107
107
|
<div className="flex items-center gap-4 mb-6">
|
|
108
108
|
<Link href="/tasks" className="text-gray-500 hover:text-gray-300 text-sm lg:ml-0 ml-10">← Tasks</Link>
|
|
109
109
|
<h1 className="text-xl font-bold text-white truncate">Task Detail</h1>
|
|
@@ -113,12 +113,12 @@ export default function TaskDetailPage({ params }: { params: Promise<{ id: strin
|
|
|
113
113
|
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
114
114
|
{/* Left: Timeline + Info */}
|
|
115
115
|
<div className="space-y-4">
|
|
116
|
-
<div className="bg-[#
|
|
116
|
+
<div className="bg-[#161618] border border-[#26262b] rounded-xl p-4">
|
|
117
117
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Timeline</h2>
|
|
118
118
|
<Timeline steps={steps} />
|
|
119
119
|
</div>
|
|
120
120
|
|
|
121
|
-
<div className="bg-[#
|
|
121
|
+
<div className="bg-[#161618] border border-[#26262b] rounded-xl p-4">
|
|
122
122
|
<h2 className="text-sm font-semibold text-gray-300 mb-3">Info</h2>
|
|
123
123
|
<div className="space-y-2 text-xs">
|
|
124
124
|
{[
|
|
@@ -140,17 +140,17 @@ export default function TaskDetailPage({ params }: { params: Promise<{ id: strin
|
|
|
140
140
|
|
|
141
141
|
{/* Right: Content + Result */}
|
|
142
142
|
<div className="lg:col-span-2 space-y-4">
|
|
143
|
-
<div className="bg-[#
|
|
143
|
+
<div className="bg-[#161618] border border-[#26262b] rounded-xl p-4">
|
|
144
144
|
<h2 className="text-sm font-semibold text-gray-300 mb-2">Content</h2>
|
|
145
|
-
<div className="text-sm text-gray-300 whitespace-pre-wrap bg-[#
|
|
145
|
+
<div className="text-sm text-gray-300 whitespace-pre-wrap bg-[#0e0e10] rounded-lg px-4 py-3 border border-[#1c1c1f]">
|
|
146
146
|
{task.content || '--'}
|
|
147
147
|
</div>
|
|
148
148
|
</div>
|
|
149
149
|
|
|
150
150
|
{task.result && (
|
|
151
|
-
<div className="bg-[#
|
|
151
|
+
<div className="bg-[#161618] border border-[#26262b] rounded-xl p-4">
|
|
152
152
|
<h2 className="text-sm font-semibold text-gray-300 mb-2">Result</h2>
|
|
153
|
-
<div className="text-sm text-gray-300 whitespace-pre-wrap bg-[#
|
|
153
|
+
<div className="text-sm text-gray-300 whitespace-pre-wrap bg-[#0e0e10] rounded-lg px-4 py-3 border border-[#1c1c1f] max-h-96 overflow-y-auto">
|
|
154
154
|
{task.result}
|
|
155
155
|
</div>
|
|
156
156
|
</div>
|
|
@@ -158,7 +158,7 @@ export default function TaskDetailPage({ params }: { params: Promise<{ id: strin
|
|
|
158
158
|
|
|
159
159
|
{/* Task Events */}
|
|
160
160
|
{eventsData?.events && eventsData.events.length > 0 && (
|
|
161
|
-
<div className="bg-[#
|
|
161
|
+
<div className="bg-[#161618] border border-[#26262b] rounded-xl p-4">
|
|
162
162
|
<h2 className="text-sm font-semibold text-gray-300 mb-3">Events ({eventsData.events.length})</h2>
|
|
163
163
|
<div className="space-y-2 max-h-64 overflow-y-auto">
|
|
164
164
|
{eventsData.events.map((e: { id: number; event_type: string; from_status: string; to_status: string; detail: string; created_at: string }, i: number) => (
|