@sleep2agi/agent-network-dashboard 0.4.5-preview.4 → 0.4.5-preview.41
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 +50 -50
- 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 +4 -4
- package/.next/server/app/_not-found.rsc +12 -12
- package/.next/server/app/_not-found.segments/_full.segment.rsc +12 -12
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +7 -7
- 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 +2 -2
- 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 +14 -14
- package/.next/server/app/admin.segments/_full.segment.rsc +14 -14
- package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
- package/.next/server/app/admin.segments/_index.segment.rsc +7 -7
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- 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 +14 -14
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +14 -14
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +7 -7
- 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 +14 -14
- package/.next/server/app/login.segments/_full.segment.rsc +14 -14
- package/.next/server/app/login.segments/_head.segment.rsc +4 -4
- package/.next/server/app/login.segments/_index.segment.rsc +7 -7
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- 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.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 +14 -14
- package/.next/server/app/logs.segments/_full.segment.rsc +14 -14
- package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/logs.segments/_index.segment.rsc +7 -7
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- 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/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 +14 -14
- package/.next/server/app/messages.segments/_full.segment.rsc +14 -14
- package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
- package/.next/server/app/messages.segments/_index.segment.rsc +7 -7
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- 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.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 +14 -14
- package/.next/server/app/node.segments/_full.segment.rsc +14 -14
- package/.next/server/app/node.segments/_head.segment.rsc +4 -4
- package/.next/server/app/node.segments/_index.segment.rsc +7 -7
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- 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.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 +14 -14
- package/.next/server/app/nodes.segments/_full.segment.rsc +14 -14
- package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/_index.segment.rsc +7 -7
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- 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.js.nft.json +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 +4 -4
- package/.next/server/app/server-logs.rsc +14 -14
- package/.next/server/app/server-logs.segments/_full.segment.rsc +14 -14
- package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/server-logs.segments/_index.segment.rsc +7 -7
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- 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/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 +14 -14
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- 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_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 +4 -4
- package/.next/server/app/settings/tokens.rsc +14 -14
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- 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 +14 -14
- package/.next/server/app/settings.segments/_full.segment.rsc +14 -14
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +7 -7
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- 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_client-reference-manifest.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 +14 -14
- package/.next/server/app/tasks.segments/_full.segment.rsc +14 -14
- package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/_index.segment.rsc +7 -7
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- 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/chunks/ssr/[root-of-the-server]__02ee4km._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__02ee4km._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jjqrcf._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jjqrcf._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0o8yj3c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0o8yj3c._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js.map +1 -1
- package/.next/server/chunks/ssr/_0nne7mz._.js +3 -0
- package/.next/server/chunks/ssr/_0nne7mz._.js.map +1 -0
- package/.next/server/chunks/ssr/app_0.zbtn5._.js +9 -0
- package/.next/server/chunks/ssr/app_0.zbtn5._.js.map +1 -0
- package/.next/server/chunks/ssr/app_04n78pr._.js +3 -0
- package/.next/server/chunks/ssr/app_04n78pr._.js.map +1 -0
- package/.next/server/chunks/ssr/app_0_agk0r._.js +3 -0
- package/.next/server/chunks/ssr/app_0_agk0r._.js.map +1 -0
- package/.next/server/chunks/ssr/app_0dk5wao._.js +1 -1
- package/.next/server/chunks/ssr/app_0dk5wao._.js.map +1 -1
- package/.next/server/chunks/ssr/app_0izi28j._.js +1 -1
- package/.next/server/chunks/ssr/app_0izi28j._.js.map +1 -1
- package/.next/server/chunks/ssr/app_0tncr1_._.js +3 -0
- package/.next/server/chunks/ssr/app_0tncr1_._.js.map +1 -0
- package/.next/server/chunks/ssr/app_components_08ys5y3._.js +5 -5
- package/.next/server/chunks/ssr/app_components_08ys5y3._.js.map +1 -1
- package/.next/server/chunks/ssr/app_components_0lhp_k.._.js +3 -0
- package/.next/server/chunks/ssr/app_components_0lhp_k.._.js.map +1 -0
- package/.next/server/chunks/ssr/app_login_page_tsx_0z71ad3._.js +1 -1
- package/.next/server/chunks/ssr/app_login_page_tsx_0z71ad3._.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/chunks/ssr/app_tasks_page_tsx_0z-d6mp._.js +1 -1
- package/.next/server/chunks/ssr/app_tasks_page_tsx_0z-d6mp._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- 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/02oje7pf-g1v5.js +1 -0
- package/.next/static/chunks/06x7w8nwggx~~.js +1 -0
- package/.next/static/chunks/0943n0t.9c-o2.js +1 -0
- package/.next/static/chunks/{07okhs5561y5y.js → 0c1bp~g7.8ru..js} +1 -1
- package/.next/static/chunks/0csmku~3y472t.js +1 -0
- package/.next/static/chunks/0df0py1glk9xm.js +1 -0
- package/.next/static/chunks/0edt_z0rlxgfk.js +1 -0
- package/.next/static/chunks/0g394kqz_d5.x.js +1 -0
- package/.next/static/chunks/0irkayokwc1fm.js +1 -0
- package/.next/static/chunks/0j8ee64jv6zb7.js +7 -0
- package/.next/static/chunks/0qe_pfeioih-5.css +2 -0
- package/.next/static/chunks/0qnpc7rbxn12u.js +1 -0
- package/.next/static/chunks/0xdl435t_mf1c.js +1 -0
- package/.next/static/chunks/0~n.cadw9_e8s.js +7 -0
- package/.next/static/chunks/11_n-vjzf735y.js +1 -0
- package/.next/static/chunks/15c9pv6gxir.5.js +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/admin/page.tsx +77 -25
- package/app/components/AgentCard.tsx +19 -5
- package/app/components/AliasAvatar.tsx +51 -0
- package/app/components/BroadcastBar.tsx +22 -4
- package/app/components/DispatchPanel.tsx +9 -5
- package/app/components/EmptyState.tsx +77 -4
- package/app/components/HealthBanner.tsx +1 -1
- package/app/components/HelpOverlay.tsx +50 -10
- package/app/components/InboxPanel.tsx +6 -3
- package/app/components/Sidebar.tsx +49 -41
- package/app/components/TaskChatPanel.tsx +8 -10
- package/app/components/TaskDrawer.tsx +72 -28
- package/app/components/TopoGraph.tsx +118 -24
- package/app/globals.css +90 -0
- package/app/lib/version.ts +7 -0
- package/app/login/page.tsx +37 -7
- package/app/logs/page.tsx +72 -21
- package/app/messages/page.tsx +85 -51
- package/app/node/page.tsx +32 -15
- package/app/nodes/page.tsx +21 -23
- package/app/page.tsx +71 -13
- package/app/server-logs/page.tsx +37 -3
- package/app/settings/networks/page.tsx +37 -13
- package/app/settings/page.tsx +38 -10
- package/app/tasks/page.tsx +77 -41
- package/package.json +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0_jnflc._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0_jnflc._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0nrckjd._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0nrckjd._.js.map +0 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__12mpoig._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__12mpoig._.js.map +0 -1
- package/.next/server/chunks/ssr/_0d-fuox._.js +0 -3
- package/.next/server/chunks/ssr/_0d-fuox._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0.0wpa~._.js +0 -3
- package/.next/server/chunks/ssr/app_0.0wpa~._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0ap_oiq._.js +0 -3
- package/.next/server/chunks/ssr/app_0ap_oiq._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0et5yua._.js +0 -3
- package/.next/server/chunks/ssr/app_0et5yua._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0ff~kjj._.js +0 -9
- package/.next/server/chunks/ssr/app_0ff~kjj._.js.map +0 -1
- package/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js +0 -3
- package/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js.map +0 -1
- package/.next/static/chunks/02flrewxlf_m_.js +0 -1
- package/.next/static/chunks/03sm_xa792mxv.css +0 -2
- package/.next/static/chunks/051gslfjka1kj.js +0 -1
- package/.next/static/chunks/06t_vzei8s9_h.js +0 -1
- package/.next/static/chunks/07oobuohrpigy.js +0 -1
- package/.next/static/chunks/0e7c40p~wq665.js +0 -1
- package/.next/static/chunks/0g7m7zk.v7g6h.js +0 -1
- package/.next/static/chunks/0khpyxpdrp~ty.js +0 -1
- package/.next/static/chunks/0lo_g.q1fm-hr.js +0 -7
- package/.next/static/chunks/0m328uz90rp81.js +0 -1
- package/.next/static/chunks/0ogeals5ufhho.js +0 -1
- package/.next/static/chunks/1031v6nw33ud3.js +0 -1
- package/.next/static/chunks/10ir.g.n~hre0.js +0 -7
- package/.next/static/chunks/10njj7kn9ylkf.js +0 -1
- package/.next/static/chunks/13.dst7liziwo.js +0 -1
- /package/.next/static/{dvKGMaUCm52sSTROKhYVL → t8ckUU0UVyOpv2ymrRHll}/_buildManifest.js +0 -0
- /package/.next/static/{dvKGMaUCm52sSTROKhYVL → t8ckUU0UVyOpv2ymrRHll}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dvKGMaUCm52sSTROKhYVL → t8ckUU0UVyOpv2ymrRHll}/_ssgManifest.js +0 -0
package/.next/trace
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":298,"timestamp":187131880243,"id":4,"parentId":1,"tags":{},"startTime":1778558617705,"traceId":"17e78f818ae875ee"},{"name":"load-custom-routes","duration":515,"timestamp":187131880695,"id":5,"parentId":1,"tags":{},"startTime":1778558617705,"traceId":"17e78f818ae875ee"},{"name":"create-dist-dir","duration":416,"timestamp":187131881257,"id":6,"parentId":1,"tags":{},"startTime":1778558617706,"traceId":"17e78f818ae875ee"},{"name":"clean","duration":587,"timestamp":187131882629,"id":7,"parentId":1,"tags":{},"startTime":1778558617707,"traceId":"17e78f818ae875ee"},{"name":"discover-routes","duration":8389,"timestamp":187131981307,"id":8,"parentId":1,"tags":{},"startTime":1778558617806,"traceId":"17e78f818ae875ee"},{"name":"create-root-mapping","duration":136,"timestamp":187131989770,"id":9,"parentId":1,"tags":{},"startTime":1778558617814,"traceId":"17e78f818ae875ee"},{"name":"generate-route-types","duration":26101,"timestamp":187131992328,"id":10,"parentId":1,"tags":{},"startTime":1778558617817,"traceId":"17e78f818ae875ee"},{"name":"public-dir-conflict-check","duration":144,"timestamp":187132018593,"id":11,"parentId":1,"tags":{},"startTime":1778558617843,"traceId":"17e78f818ae875ee"},{"name":"generate-routes-manifest","duration":6108,"timestamp":187132018929,"id":12,"parentId":1,"tags":{},"startTime":1778558617844,"traceId":"17e78f818ae875ee"},{"name":"run-turbopack","duration":7019275,"timestamp":187132047712,"id":14,"parentId":1,"tags":{},"startTime":1778558617872,"traceId":"17e78f818ae875ee"},{"name":"turbopack-build-events","duration":83,"timestamp":187132329286,"id":15,"parentId":1,"tags":{},"startTime":1778558618154,"traceId":"17e78f818ae875ee"},{"name":"run-typescript","duration":7463711,"timestamp":187139074373,"id":16,"parentId":1,"tags":{},"startTime":1778558624899,"traceId":"17e78f818ae875ee"},{"name":"generate-required-server-files","duration":2243,"timestamp":187146539027,"id":18,"parentId":1,"tags":{},"startTime":1778558632364,"traceId":"17e78f818ae875ee"},{"name":"check-static-error-page","duration":16361,"timestamp":187146606893,"id":20,"parentId":19,"tags":{},"startTime":1778558632432,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":422638,"timestamp":187146626583,"id":62,"parentId":22,"tags":{},"startTime":1778558632451,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":440302,"timestamp":187146609051,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778558632434,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":458974,"timestamp":187146626174,"id":61,"parentId":21,"tags":{},"startTime":1778558632451,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":477330,"timestamp":187146607894,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778558632433,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":509605,"timestamp":187146626721,"id":63,"parentId":25,"tags":{},"startTime":1778558632451,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":524967,"timestamp":187146611423,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778558632436,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":512497,"timestamp":187146626928,"id":64,"parentId":26,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":527768,"timestamp":187146611720,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778558632436,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":526368,"timestamp":187146627090,"id":66,"parentId":28,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":540315,"timestamp":187146613207,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":526644,"timestamp":187146627028,"id":65,"parentId":27,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":541881,"timestamp":187146611823,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778558632437,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":530340,"timestamp":187146627268,"id":69,"parentId":32,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":543785,"timestamp":187146613909,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":534422,"timestamp":187146627422,"id":70,"parentId":33,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":547717,"timestamp":187146614197,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":537028,"timestamp":187146627160,"id":67,"parentId":29,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":550880,"timestamp":187146613366,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":538734,"timestamp":187146627508,"id":71,"parentId":34,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":551972,"timestamp":187146614315,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":542045,"timestamp":187146627216,"id":68,"parentId":30,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":555736,"timestamp":187146613578,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":542403,"timestamp":187146627625,"id":73,"parentId":36,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":555322,"timestamp":187146614767,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":546949,"timestamp":187146627535,"id":72,"parentId":35,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":560135,"timestamp":187146614414,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778558632439,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":549057,"timestamp":187146627667,"id":75,"parentId":38,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":561759,"timestamp":187146615018,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":550496,"timestamp":187146627676,"id":76,"parentId":39,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":563120,"timestamp":187146615094,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":553957,"timestamp":187146627694,"id":78,"parentId":41,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":566473,"timestamp":187146615221,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":556444,"timestamp":187146627685,"id":77,"parentId":40,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":569028,"timestamp":187146615158,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":558494,"timestamp":187146627654,"id":74,"parentId":37,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":571299,"timestamp":187146614898,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":558673,"timestamp":187146627703,"id":79,"parentId":42,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":571119,"timestamp":187146615287,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":560713,"timestamp":187146627720,"id":81,"parentId":44,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":573068,"timestamp":187146615417,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":562385,"timestamp":187146627728,"id":82,"parentId":45,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":574674,"timestamp":187146615483,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":565339,"timestamp":187146627748,"id":84,"parentId":47,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":577457,"timestamp":187146615672,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":567465,"timestamp":187146627711,"id":80,"parentId":43,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":579874,"timestamp":187146615351,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":568362,"timestamp":187146627736,"id":83,"parentId":46,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":580551,"timestamp":187146615588,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":568631,"timestamp":187146627758,"id":85,"parentId":48,"tags":{},"startTime":1778558632452,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":580671,"timestamp":187146615752,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778558632440,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":562103,"timestamp":187146637198,"id":87,"parentId":31,"tags":{},"startTime":1778558632462,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":585666,"timestamp":187146613678,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778558632438,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":563427,"timestamp":187146636063,"id":86,"parentId":24,"tags":{},"startTime":1778558632461,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":590099,"timestamp":187146609427,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778558632434,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":548996,"timestamp":187146656604,"id":90,"parentId":50,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":589400,"timestamp":187146616241,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":557425,"timestamp":187146656614,"id":91,"parentId":51,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":597766,"timestamp":187146616347,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":560243,"timestamp":187146656619,"id":92,"parentId":52,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":600416,"timestamp":187146616498,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":565908,"timestamp":187146656628,"id":93,"parentId":53,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":605935,"timestamp":187146616651,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":572511,"timestamp":187146656638,"id":94,"parentId":55,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":611670,"timestamp":187146617535,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778558632442,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":580012,"timestamp":187146656557,"id":88,"parentId":23,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":627372,"timestamp":187146609276,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778558632434,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":580220,"timestamp":187146656593,"id":89,"parentId":49,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":620724,"timestamp":187146616113,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778558632441,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":580291,"timestamp":187146656643,"id":95,"parentId":56,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":619255,"timestamp":187146617698,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778558632442,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":586040,"timestamp":187146656652,"id":96,"parentId":58,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":624591,"timestamp":187146618167,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778558632443,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":586270,"timestamp":187146656667,"id":98,"parentId":60,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":620116,"timestamp":187146622852,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778558632448,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":590014,"timestamp":187146656660,"id":97,"parentId":59,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":628446,"timestamp":187146618279,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778558632443,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":591263,"timestamp":187146656678,"id":99,"parentId":54,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":630966,"timestamp":187146617114,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778558632442,"traceId":"17e78f818ae875ee"},{"name":"is-page-static","duration":592038,"timestamp":187146656686,"id":100,"parentId":57,"tags":{},"startTime":1778558632481,"traceId":"17e78f818ae875ee"},{"name":"check-page","duration":630916,"timestamp":187146617845,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778558632443,"traceId":"17e78f818ae875ee"},{"name":"static-check","duration":642740,"timestamp":187146606075,"id":19,"parentId":1,"tags":{},"startTime":1778558632431,"traceId":"17e78f818ae875ee"},{"name":"write-routes-manifest","duration":407,"timestamp":187147255446,"id":102,"parentId":1,"tags":{},"startTime":1778558633080,"traceId":"17e78f818ae875ee"},{"name":"load-dotenv","duration":85,"timestamp":187147267947,"id":105,"parentId":104,"tags":{},"startTime":1778558633093,"traceId":"17e78f818ae875ee"},{"name":"run-export-path-map","duration":697,"timestamp":187147270676,"id":106,"parentId":104,"tags":{},"startTime":1778558633095,"traceId":"17e78f818ae875ee"},{"name":"next-export","duration":538786,"timestamp":187147266599,"id":104,"parentId":1,"tags":{},"startTime":1778558633091,"traceId":"17e78f818ae875ee"},{"name":"move-exported-app-not-found-","duration":1333,"timestamp":187147808533,"id":107,"parentId":103,"tags":{},"startTime":1778558633633,"traceId":"17e78f818ae875ee"},{"name":"move-exported-app-global-error-","duration":439,"timestamp":187147809970,"id":108,"parentId":103,"tags":{},"startTime":1778558633635,"traceId":"17e78f818ae875ee"}]
|
|
2
|
-
[{"name":"static-generation","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":385,"timestamp":211425236680,"id":4,"parentId":1,"tags":{},"startTime":1778582911061,"traceId":"a1f913eac733e916"},{"name":"load-custom-routes","duration":553,"timestamp":211425237270,"id":5,"parentId":1,"tags":{},"startTime":1778582911062,"traceId":"a1f913eac733e916"},{"name":"create-dist-dir","duration":348,"timestamp":211425237904,"id":6,"parentId":1,"tags":{},"startTime":1778582911063,"traceId":"a1f913eac733e916"},{"name":"clean","duration":587,"timestamp":211425238969,"id":7,"parentId":1,"tags":{},"startTime":1778582911064,"traceId":"a1f913eac733e916"},{"name":"discover-routes","duration":9282,"timestamp":211425335029,"id":8,"parentId":1,"tags":{},"startTime":1778582911160,"traceId":"a1f913eac733e916"},{"name":"create-root-mapping","duration":116,"timestamp":211425344378,"id":9,"parentId":1,"tags":{},"startTime":1778582911169,"traceId":"a1f913eac733e916"},{"name":"generate-route-types","duration":31508,"timestamp":211425346733,"id":10,"parentId":1,"tags":{},"startTime":1778582911171,"traceId":"a1f913eac733e916"},{"name":"public-dir-conflict-check","duration":110,"timestamp":211425378498,"id":11,"parentId":1,"tags":{},"startTime":1778582911203,"traceId":"a1f913eac733e916"},{"name":"generate-routes-manifest","duration":4170,"timestamp":211425378742,"id":12,"parentId":1,"tags":{},"startTime":1778582911203,"traceId":"a1f913eac733e916"},{"name":"run-turbopack","duration":12693236,"timestamp":211425388281,"id":14,"parentId":1,"tags":{},"startTime":1778582911213,"traceId":"a1f913eac733e916"},{"name":"turbopack-build-events","duration":79,"timestamp":211425711288,"id":15,"parentId":1,"tags":{},"startTime":1778582911536,"traceId":"a1f913eac733e916"},{"name":"run-typescript","duration":11782619,"timestamp":211438122997,"id":16,"parentId":1,"tags":{},"startTime":1778582923948,"traceId":"a1f913eac733e916"},{"name":"generate-required-server-files","duration":6401,"timestamp":211449907405,"id":18,"parentId":1,"tags":{},"startTime":1778582935732,"traceId":"a1f913eac733e916"},{"name":"check-static-error-page","duration":32810,"timestamp":211449997409,"id":20,"parentId":19,"tags":{},"startTime":1778582935822,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":653803,"timestamp":211450034383,"id":62,"parentId":22,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":684179,"timestamp":211450004140,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778582935829,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":831448,"timestamp":211450034456,"id":63,"parentId":25,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":852448,"timestamp":211450013530,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778582935838,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":843332,"timestamp":211450034084,"id":61,"parentId":21,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":876388,"timestamp":211450001087,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778582935826,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":859962,"timestamp":211450034642,"id":65,"parentId":27,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":880785,"timestamp":211450013883,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778582935839,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":866907,"timestamp":211450034602,"id":64,"parentId":26,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":887810,"timestamp":211450013762,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778582935838,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":894622,"timestamp":211450034761,"id":68,"parentId":30,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":913131,"timestamp":211450016317,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778582935841,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":906792,"timestamp":211450034728,"id":67,"parentId":29,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":927476,"timestamp":211450014134,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778582935839,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":924411,"timestamp":211450034793,"id":69,"parentId":32,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":942344,"timestamp":211450016925,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778582935842,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":932949,"timestamp":211450034941,"id":71,"parentId":34,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":950746,"timestamp":211450017224,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778582935842,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":934695,"timestamp":211450034897,"id":70,"parentId":33,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":952533,"timestamp":211450017102,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778582935842,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":937633,"timestamp":211450034958,"id":72,"parentId":35,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":955286,"timestamp":211450017349,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778582935842,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":939377,"timestamp":211450035029,"id":73,"parentId":36,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":953719,"timestamp":211450020728,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778582935845,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":940427,"timestamp":211450035048,"id":74,"parentId":37,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":954554,"timestamp":211450020955,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778582935846,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":944131,"timestamp":211450035056,"id":75,"parentId":38,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":958113,"timestamp":211450021114,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778582935846,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":944290,"timestamp":211450035062,"id":76,"parentId":39,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":958156,"timestamp":211450021217,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778582935846,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":945996,"timestamp":211450035068,"id":77,"parentId":40,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":959786,"timestamp":211450021316,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778582935846,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":948482,"timestamp":211450034690,"id":66,"parentId":28,"tags":{},"startTime":1778582935859,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":969227,"timestamp":211450013997,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778582935839,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":949365,"timestamp":211450035074,"id":78,"parentId":41,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":963058,"timestamp":211450021414,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778582935846,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":951108,"timestamp":211450035080,"id":79,"parentId":42,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":964710,"timestamp":211450021515,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778582935846,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":952734,"timestamp":211450035085,"id":80,"parentId":43,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":966246,"timestamp":211450021609,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778582935846,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":954691,"timestamp":211450035091,"id":81,"parentId":44,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":967513,"timestamp":211450022303,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778582935847,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":956014,"timestamp":211450035101,"id":83,"parentId":46,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":968507,"timestamp":211450022643,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778582935847,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":958339,"timestamp":211450035096,"id":82,"parentId":45,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":971002,"timestamp":211450022467,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778582935847,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":960631,"timestamp":211450035106,"id":84,"parentId":47,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":972982,"timestamp":211450022790,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778582935847,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":964430,"timestamp":211450038437,"id":86,"parentId":31,"tags":{},"startTime":1778582935863,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":986388,"timestamp":211450016527,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778582935841,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":970082,"timestamp":211450035111,"id":85,"parentId":48,"tags":{},"startTime":1778582935860,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":982332,"timestamp":211450022911,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778582935848,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":965317,"timestamp":211450040030,"id":87,"parentId":24,"tags":{},"startTime":1778582935865,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":998016,"timestamp":211450007362,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778582935832,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":949646,"timestamp":211450063077,"id":89,"parentId":49,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":986398,"timestamp":211450026384,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778582935851,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":956882,"timestamp":211450063095,"id":91,"parentId":51,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":993203,"timestamp":211450026845,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778582935852,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":963037,"timestamp":211450063103,"id":92,"parentId":52,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":999099,"timestamp":211450027097,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778582935852,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":970431,"timestamp":211450063109,"id":93,"parentId":53,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1006686,"timestamp":211450027351,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778582935852,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":977270,"timestamp":211450063119,"id":94,"parentId":55,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1012350,"timestamp":211450028095,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778582935853,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":986064,"timestamp":211450063038,"id":88,"parentId":23,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1042079,"timestamp":211450007105,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778582935832,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":986216,"timestamp":211450063128,"id":95,"parentId":56,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1021103,"timestamp":211450028266,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778582935853,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":990443,"timestamp":211450063134,"id":96,"parentId":58,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1023852,"timestamp":211450029778,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778582935854,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":996395,"timestamp":211450063154,"id":98,"parentId":60,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1029570,"timestamp":211450030033,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778582935855,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":1002254,"timestamp":211450063163,"id":99,"parentId":57,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1037033,"timestamp":211450028436,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778582935853,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":1007955,"timestamp":211450063172,"id":100,"parentId":54,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1043601,"timestamp":211450027576,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778582935852,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":1009669,"timestamp":211450063142,"id":97,"parentId":59,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1042957,"timestamp":211450029907,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778582935855,"traceId":"a1f913eac733e916"},{"name":"is-page-static","duration":1032109,"timestamp":211450063088,"id":90,"parentId":50,"tags":{},"startTime":1778582935888,"traceId":"a1f913eac733e916"},{"name":"check-page","duration":1068629,"timestamp":211450026635,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778582935851,"traceId":"a1f913eac733e916"},{"name":"static-check","duration":1099479,"timestamp":211449995830,"id":19,"parentId":1,"tags":{},"startTime":1778582935821,"traceId":"a1f913eac733e916"},{"name":"write-routes-manifest","duration":468,"timestamp":211451103147,"id":102,"parentId":1,"tags":{},"startTime":1778582936928,"traceId":"a1f913eac733e916"},{"name":"load-dotenv","duration":81,"timestamp":211451124080,"id":105,"parentId":104,"tags":{},"startTime":1778582936949,"traceId":"a1f913eac733e916"},{"name":"run-export-path-map","duration":725,"timestamp":211451127893,"id":106,"parentId":104,"tags":{},"startTime":1778582936953,"traceId":"a1f913eac733e916"},{"name":"next-export","duration":651132,"timestamp":211451121923,"id":104,"parentId":1,"tags":{},"startTime":1778582936947,"traceId":"a1f913eac733e916"},{"name":"move-exported-app-not-found-","duration":781,"timestamp":211451776453,"id":107,"parentId":103,"tags":{},"startTime":1778582937601,"traceId":"a1f913eac733e916"},{"name":"move-exported-app-global-error-","duration":491,"timestamp":211451777341,"id":108,"parentId":103,"tags":{},"startTime":1778582937602,"traceId":"a1f913eac733e916"}]
|
|
2
|
+
[{"name":"static-generation","duration":674706,"timestamp":211451108886,"id":103,"parentId":1,"tags":{},"startTime":1778582936934,"traceId":"a1f913eac733e916"},{"name":"write-routes-manifest","duration":497,"timestamp":211451783836,"id":109,"parentId":1,"tags":{},"startTime":1778582937609,"traceId":"a1f913eac733e916"},{"name":"print-tree-view","duration":5558,"timestamp":211451804853,"id":110,"parentId":1,"tags":{},"startTime":1778582937630,"traceId":"a1f913eac733e916"},{"name":"write-route-bundle-stats","duration":13705,"timestamp":211451810473,"id":111,"parentId":1,"tags":{},"startTime":1778582937635,"traceId":"a1f913eac733e916"},{"name":"telemetry-flush","duration":18808,"timestamp":211451824216,"id":112,"parentId":1,"tags":{},"startTime":1778582937649,"traceId":"a1f913eac733e916"},{"name":"next-build","duration":26666678,"timestamp":211425176388,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778582911001,"traceId":"a1f913eac733e916"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":12693236,"timestamp":211425388281,"id":14,"parentId":1,"tags":{},"startTime":1778582911213,"traceId":"a1f913eac733e916"},{"name":"turbopack-build-events","duration":79,"timestamp":211425711288,"id":15,"parentId":1,"tags":{},"startTime":1778582911536,"traceId":"a1f913eac733e916"},{"name":"run-typescript","duration":11782619,"timestamp":211438122997,"id":16,"parentId":1,"tags":{},"startTime":1778582923948,"traceId":"a1f913eac733e916"},{"name":"static-check","duration":1099479,"timestamp":211449995830,"id":19,"parentId":1,"tags":{},"startTime":1778582935821,"traceId":"a1f913eac733e916"},{"name":"static-generation","duration":674706,"timestamp":211451108886,"id":103,"parentId":1,"tags":{},"startTime":1778582936934,"traceId":"a1f913eac733e916"},{"name":"telemetry-flush","duration":18808,"timestamp":211451824216,"id":112,"parentId":1,"tags":{},"startTime":1778582937649,"traceId":"a1f913eac733e916"},{"name":"next-build","duration":26666678,"timestamp":211425176388,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778582911001,"traceId":"a1f913eac733e916"}]
|
package/app/admin/page.tsx
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { useSessions, useHealth, useStats } from '../lib/hooks';
|
|
5
5
|
import { timeAgo } from '../components/utils';
|
|
6
|
+
import { AliasAvatar } from '../components/AliasAvatar';
|
|
6
7
|
|
|
7
8
|
export default function AdminPage() {
|
|
8
9
|
const { sessions } = useSessions();
|
|
@@ -72,9 +73,32 @@ export default function AdminPage() {
|
|
|
72
73
|
|
|
73
74
|
return (
|
|
74
75
|
<div className="min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono">
|
|
75
|
-
<h1 className="text-2xl font-bold text-white mb-
|
|
76
|
+
<h1 className="text-2xl font-bold text-white mb-3 lg:ml-0 ml-10">Admin</h1>
|
|
77
|
+
|
|
78
|
+
{/* Section anchor nav — same pattern as Settings r28. */}
|
|
79
|
+
<nav className="mb-8 flex flex-wrap gap-1 text-xs">
|
|
80
|
+
{[
|
|
81
|
+
{ href: '#status', label: 'Status' },
|
|
82
|
+
{ href: '#actions', label: 'Actions' },
|
|
83
|
+
{ href: '#users', label: 'Users' },
|
|
84
|
+
].map(a => (
|
|
85
|
+
<a key={a.href} href={a.href}
|
|
86
|
+
className="rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors">
|
|
87
|
+
{a.label}
|
|
88
|
+
</a>
|
|
89
|
+
))}
|
|
90
|
+
</nav>
|
|
91
|
+
|
|
92
|
+
<div className="max-w-6xl space-y-10">
|
|
93
|
+
|
|
94
|
+
{/* ── Group: Status ─────────────────────────────────────── */}
|
|
95
|
+
<div id="status" className="space-y-4 scroll-mt-6">
|
|
96
|
+
<div className="flex items-center gap-2 px-1">
|
|
97
|
+
<div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Status</div>
|
|
98
|
+
<div className="flex-1 h-px bg-[#2a2a4a]" />
|
|
99
|
+
</div>
|
|
100
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
|
|
76
101
|
|
|
77
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6 max-w-6xl">
|
|
78
102
|
{/* Server Overview */}
|
|
79
103
|
<section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
|
|
80
104
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Server Overview</h2>
|
|
@@ -107,6 +131,43 @@ export default function AdminPage() {
|
|
|
107
131
|
)}
|
|
108
132
|
</section>
|
|
109
133
|
|
|
134
|
+
{/* Online Sessions — pulled into Status group (was below Send Task) */}
|
|
135
|
+
<section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
|
|
136
|
+
<h2 className="text-sm font-semibold text-gray-300 mb-4">
|
|
137
|
+
Online Sessions <span className="text-gray-600">({onlineNodes.length})</span>
|
|
138
|
+
</h2>
|
|
139
|
+
<div className="space-y-2 max-h-80 overflow-y-auto">
|
|
140
|
+
{onlineNodes.length === 0 ? (
|
|
141
|
+
<div className="text-xs text-gray-600 text-center py-4">No online sessions</div>
|
|
142
|
+
) : onlineNodes.map(s => (
|
|
143
|
+
<div key={s.alias} className="flex items-center gap-3 bg-[#0a0a15] rounded-lg px-3 py-2 border border-[#1a1a2a]">
|
|
144
|
+
<AliasAvatar alias={s.alias} size={20} />
|
|
145
|
+
<div className="min-w-0 flex-1">
|
|
146
|
+
<div className="text-sm text-white font-medium truncate">{s.alias}</div>
|
|
147
|
+
<div className="text-xs text-gray-500 truncate">{s.agent || '--'} · {s.task || 'idle'}</div>
|
|
148
|
+
</div>
|
|
149
|
+
<div className="flex items-center gap-2 shrink-0">
|
|
150
|
+
<span className={`text-xs px-2 py-0.5 rounded border ${
|
|
151
|
+
s.status === 'working' ? 'bg-green-900/30 text-green-300 border-green-800/30' : 'bg-blue-900/30 text-blue-300 border-blue-800/30'
|
|
152
|
+
}`}>{s.status}</span>
|
|
153
|
+
<span className="text-[10px] text-gray-600">{timeAgo(s.updated_at)}</span>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
))}
|
|
157
|
+
</div>
|
|
158
|
+
</section>
|
|
159
|
+
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
{/* ── Group: Actions ────────────────────────────────────── */}
|
|
164
|
+
<div id="actions" className="space-y-4 scroll-mt-6">
|
|
165
|
+
<div className="flex items-center gap-2 px-1">
|
|
166
|
+
<div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Actions</div>
|
|
167
|
+
<div className="flex-1 h-px bg-[#2a2a4a]" />
|
|
168
|
+
</div>
|
|
169
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
|
|
170
|
+
|
|
110
171
|
{/* Broadcast */}
|
|
111
172
|
<section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
|
|
112
173
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Broadcast</h2>
|
|
@@ -167,30 +228,17 @@ export default function AdminPage() {
|
|
|
167
228
|
{taskResult && <div className={`mt-2 text-xs ${taskResult.startsWith('Failed') ? 'text-red-400' : 'text-green-400'}`}>{taskResult}</div>}
|
|
168
229
|
</section>
|
|
169
230
|
|
|
170
|
-
{/* Online Sessions */}
|
|
171
|
-
<section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
|
|
172
|
-
<h2 className="text-sm font-semibold text-gray-300 mb-4">
|
|
173
|
-
Online Sessions <span className="text-gray-600">({onlineNodes.length})</span>
|
|
174
|
-
</h2>
|
|
175
|
-
<div className="space-y-2 max-h-80 overflow-y-auto">
|
|
176
|
-
{onlineNodes.length === 0 ? (
|
|
177
|
-
<div className="text-xs text-gray-600 text-center py-4">No online sessions</div>
|
|
178
|
-
) : onlineNodes.map(s => (
|
|
179
|
-
<div key={s.alias} className="flex items-center justify-between bg-[#0a0a15] rounded-lg px-3 py-2 border border-[#1a1a2a]">
|
|
180
|
-
<div className="min-w-0">
|
|
181
|
-
<div className="text-sm text-white font-medium truncate">{s.alias}</div>
|
|
182
|
-
<div className="text-xs text-gray-500 truncate">{s.agent || '--'} · {s.task || 'idle'}</div>
|
|
183
|
-
</div>
|
|
184
|
-
<div className="flex items-center gap-2 shrink-0">
|
|
185
|
-
<span className={`text-xs px-2 py-0.5 rounded border ${
|
|
186
|
-
s.status === 'working' ? 'bg-green-900/30 text-green-300 border-green-800/30' : 'bg-blue-900/30 text-blue-300 border-blue-800/30'
|
|
187
|
-
}`}>{s.status}</span>
|
|
188
|
-
<span className="text-[10px] text-gray-600">{timeAgo(s.updated_at)}</span>
|
|
189
|
-
</div>
|
|
190
|
-
</div>
|
|
191
|
-
))}
|
|
192
231
|
</div>
|
|
193
|
-
</
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
{/* ── Group: Users ──────────────────────────────────────── */}
|
|
235
|
+
<div id="users" className="space-y-4 scroll-mt-6">
|
|
236
|
+
<div className="flex items-center gap-2 px-1">
|
|
237
|
+
<div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Users</div>
|
|
238
|
+
<div className="flex-1 h-px bg-[#2a2a4a]" />
|
|
239
|
+
</div>
|
|
240
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
|
|
241
|
+
|
|
194
242
|
{/* User Management (V3 Auth) */}
|
|
195
243
|
<section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
|
|
196
244
|
<h2 className="text-sm font-semibold text-gray-300 mb-4">Register User (V3)</h2>
|
|
@@ -219,6 +267,10 @@ export default function AdminPage() {
|
|
|
219
267
|
</div>
|
|
220
268
|
{regResult && <div className={`mt-2 text-xs ${regResult.startsWith('Failed') ? 'text-red-400' : 'text-green-400'}`}>{regResult}</div>}
|
|
221
269
|
</section>
|
|
270
|
+
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
|
|
222
274
|
</div>
|
|
223
275
|
</div>
|
|
224
276
|
);
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import Link from 'next/link';
|
|
4
4
|
import { Session } from './types';
|
|
5
5
|
import { timeAgo } from './utils';
|
|
6
|
+
import { AliasAvatar } from './AliasAvatar';
|
|
6
7
|
|
|
7
8
|
interface AgentCardProps {
|
|
8
9
|
session: Session;
|
|
@@ -27,17 +28,20 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
|
|
|
27
28
|
<Link
|
|
28
29
|
href={`/node?alias=${encodeURIComponent(s.alias)}`}
|
|
29
30
|
prefetch={false}
|
|
30
|
-
className={`block rounded-xl border p-4 transition-all duration-300 cursor-pointer ${
|
|
31
|
+
className={`anet-agent-card group relative block rounded-xl border p-4 transition-all duration-300 cursor-pointer hover:-translate-y-0.5 ${
|
|
31
32
|
hasSse
|
|
32
33
|
? `bg-[#111128] border-[#2a2a4a] hover:border-cyan-500/30 hover:shadow-lg ${cfg.glow}`
|
|
33
34
|
: 'bg-[#0d0d1a] border-[#1a1a2a] opacity-40'
|
|
34
35
|
}`}
|
|
35
36
|
>
|
|
36
|
-
{/* Header: name + status
|
|
37
|
+
{/* Header: avatar + name + status. Avatar carries the alias→hue map
|
|
38
|
+
shared with Messages/Nodes/Tasks/Overview; the live status dot
|
|
39
|
+
stays as a small pulse-capable indicator. */}
|
|
37
40
|
<div className="flex items-center justify-between mb-3">
|
|
38
41
|
<div className="flex items-center gap-2 min-w-0">
|
|
39
|
-
<
|
|
42
|
+
<AliasAvatar alias={s.alias} size={22} />
|
|
40
43
|
<span className="font-semibold text-white truncate text-sm" title={s.alias}>{s.alias}</span>
|
|
44
|
+
<span className={`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${cfg.dot} ${hasSse && s.status === 'working' ? 'animate-pulse' : ''}`} />
|
|
41
45
|
</div>
|
|
42
46
|
<span className={`text-[11px] px-2 py-0.5 rounded-md border shrink-0 ${cfg.bg} ${cfg.text}`}>
|
|
43
47
|
{hasSse ? s.status : 'offline'}
|
|
@@ -79,9 +83,12 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
|
|
|
79
83
|
</div>
|
|
80
84
|
)}
|
|
81
85
|
|
|
82
|
-
{/* Footer: time + chat
|
|
86
|
+
{/* Footer: time + chat + hover chevron affordance (round 44).
|
|
87
|
+
The card is a <Link> so it's clickable everywhere, but with no
|
|
88
|
+
visible cue users may not realise. Chevron appears on hover and
|
|
89
|
+
slides right ~2px for a "drill in" hint. */}
|
|
83
90
|
<div className="mt-3 flex justify-between items-center text-[10px] text-gray-600">
|
|
84
|
-
<span>{s.server || '--'}</span>
|
|
91
|
+
<span className="truncate" title={s.server || ''}>{s.server || '--'}</span>
|
|
85
92
|
<div className="flex items-center gap-2">
|
|
86
93
|
{onChat && hasSse && (
|
|
87
94
|
<button
|
|
@@ -92,6 +99,13 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
|
|
|
92
99
|
</button>
|
|
93
100
|
)}
|
|
94
101
|
<span>{timeAgo(s.updated_at)}</span>
|
|
102
|
+
<svg
|
|
103
|
+
aria-hidden
|
|
104
|
+
className="w-3 h-3 text-gray-700 opacity-0 -translate-x-1 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-200"
|
|
105
|
+
fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"
|
|
106
|
+
>
|
|
107
|
+
<path d="M9 18l6-6-6-6" />
|
|
108
|
+
</svg>
|
|
95
109
|
</div>
|
|
96
110
|
</div>
|
|
97
111
|
</Link>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Hue-hashed avatar pill for agent aliases. Same alias → same color across
|
|
2
|
+
* every page (Messages, Nodes, TopoGraph). Use the `size` prop for inline
|
|
3
|
+
* pills (16/20) vs card headers (28). Round 21 introduced the palette;
|
|
4
|
+
* round 22 promotes it from app/messages to a shared component. */
|
|
5
|
+
|
|
6
|
+
const AVATAR_HUES = [180, 200, 220, 270, 300, 330, 30, 90];
|
|
7
|
+
|
|
8
|
+
export function aliasAvatarColors(alias: string): { bg: string; ring: string; text: string } {
|
|
9
|
+
let h = 0;
|
|
10
|
+
for (let i = 0; i < alias.length; i++) h = (h * 31 + alias.charCodeAt(i)) >>> 0;
|
|
11
|
+
const hue = AVATAR_HUES[h % AVATAR_HUES.length];
|
|
12
|
+
return {
|
|
13
|
+
bg: `hsl(${hue} 55% 22%)`,
|
|
14
|
+
ring: `hsl(${hue} 60% 45%)`,
|
|
15
|
+
text: `hsl(${hue} 80% 78%)`,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function aliasInitial(alias?: string): string {
|
|
20
|
+
if (!alias) return '·';
|
|
21
|
+
const ch = alias.trim().match(/[\p{L}\p{N}]/u)?.[0] || alias.trim()[0] || '·';
|
|
22
|
+
return ch.toUpperCase();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface AliasAvatarProps {
|
|
26
|
+
alias: string;
|
|
27
|
+
size?: number;
|
|
28
|
+
className?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function AliasAvatar({ alias, size = 28, className = '' }: AliasAvatarProps) {
|
|
32
|
+
const c = aliasAvatarColors(alias);
|
|
33
|
+
const fs = Math.max(9, Math.round(size * 0.42));
|
|
34
|
+
return (
|
|
35
|
+
<span
|
|
36
|
+
className={`anet-alias-avatar inline-flex items-center justify-center rounded-full border shrink-0 font-semibold ${className}`}
|
|
37
|
+
style={{
|
|
38
|
+
width: size,
|
|
39
|
+
height: size,
|
|
40
|
+
fontSize: fs,
|
|
41
|
+
backgroundColor: c.bg,
|
|
42
|
+
borderColor: c.ring,
|
|
43
|
+
color: c.text,
|
|
44
|
+
}}
|
|
45
|
+
title={alias}
|
|
46
|
+
aria-hidden
|
|
47
|
+
>
|
|
48
|
+
{aliasInitial(alias)}
|
|
49
|
+
</span>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
@@ -48,16 +48,34 @@ export function BroadcastBar() {
|
|
|
48
48
|
onClick={sendBroadcast}
|
|
49
49
|
disabled={broadcasting || !broadcastMsg.trim()}
|
|
50
50
|
aria-label="Send broadcast"
|
|
51
|
-
className="px-5 py-2.5 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-all font-medium cursor-pointer disabled:cursor-not-allowed"
|
|
51
|
+
className="flex items-center gap-2 px-5 py-2.5 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-all font-medium cursor-pointer disabled:cursor-not-allowed"
|
|
52
52
|
>
|
|
53
|
-
{broadcasting ?
|
|
53
|
+
{broadcasting ? (
|
|
54
|
+
<>
|
|
55
|
+
<svg aria-hidden className="w-4 h-4 animate-spin" viewBox="0 0 24 24" fill="none">
|
|
56
|
+
<circle cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="3" opacity="0.25" />
|
|
57
|
+
<path d="M4 12a8 8 0 018-8" stroke="currentColor" strokeWidth="3" strokeLinecap="round" />
|
|
58
|
+
</svg>
|
|
59
|
+
<span>Sending…</span>
|
|
60
|
+
</>
|
|
61
|
+
) : (
|
|
62
|
+
<>
|
|
63
|
+
{/* Megaphone icon — "broadcast to all" affordance */}
|
|
64
|
+
<svg aria-hidden className="w-4 h-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
|
|
65
|
+
<path d="M3 11v3a1 1 0 0 0 1 1h2l3.29 3.29a1 1 0 0 0 1.71-.71V7.42a1 1 0 0 0-1.71-.71L6 10H4a1 1 0 0 0-1 1Z" />
|
|
66
|
+
<path d="M16 8a5 5 0 0 1 0 6" opacity="0.7" />
|
|
67
|
+
<path d="M19 5a9 9 0 0 1 0 12" opacity="0.45" />
|
|
68
|
+
</svg>
|
|
69
|
+
<span>Broadcast</span>
|
|
70
|
+
</>
|
|
71
|
+
)}
|
|
54
72
|
</button>
|
|
55
73
|
</div>
|
|
56
74
|
{broadcastMsg.length > 0 && (
|
|
57
|
-
<div className="text-right text-xs text-gray-600 mt-1">{broadcastMsg.length}/500</div>
|
|
75
|
+
<div className="text-right text-xs text-gray-600 mt-1 tabular-nums">{broadcastMsg.length}/500</div>
|
|
58
76
|
)}
|
|
59
77
|
{broadcastResult && (
|
|
60
|
-
<div className={`mt-3 text-sm text-center ${broadcastResult.startsWith('Failed') ? 'text-red-400' : 'text-green-400/80'}
|
|
78
|
+
<div className={`mt-3 text-sm text-center anet-fade-in ${broadcastResult.startsWith('Failed') ? 'text-red-400' : 'text-green-400/80'}`}>
|
|
61
79
|
{broadcastResult}
|
|
62
80
|
</div>
|
|
63
81
|
)}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import type { Session } from './types';
|
|
5
|
+
import { AliasAvatar } from './AliasAvatar';
|
|
5
6
|
|
|
6
7
|
interface DispatchPanelProps {
|
|
7
8
|
sessions: Session[];
|
|
@@ -71,8 +72,8 @@ export function DispatchPanel({ sessions, onClose }: DispatchPanelProps) {
|
|
|
71
72
|
|
|
72
73
|
return (
|
|
73
74
|
<>
|
|
74
|
-
<div className="fixed inset-0 bg-black/50 z-40" onClick={onClose} />
|
|
75
|
-
<div className="fixed inset-4 lg:inset-x-[15%] lg:inset-y-[5%] bg-[#0a0a1a] border border-[#2a2a4a] rounded-2xl z-50 flex flex-col shadow-2xl shadow-black/70 overflow-hidden">
|
|
75
|
+
<div className="fixed inset-0 bg-black/50 z-40 anet-fade-in" onClick={onClose} />
|
|
76
|
+
<div className="fixed inset-4 lg:inset-x-[15%] lg:inset-y-[5%] bg-[#0a0a1a] border border-[#2a2a4a] rounded-2xl z-50 flex flex-col shadow-2xl shadow-black/70 overflow-hidden anet-fade-in">
|
|
76
77
|
{/* Header */}
|
|
77
78
|
<div className="flex items-center justify-between px-6 py-4 border-b border-[#2a2a4a] bg-[#0d0d1a]">
|
|
78
79
|
<div>
|
|
@@ -108,7 +109,8 @@ export function DispatchPanel({ sessions, onClose }: DispatchPanelProps) {
|
|
|
108
109
|
className={`w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs text-left transition-colors ${
|
|
109
110
|
selected.has(s.alias) ? 'bg-cyan-500/10 text-cyan-300 border border-cyan-500/20' : 'text-gray-400 hover:bg-[#1a1a2a]'
|
|
110
111
|
}`}>
|
|
111
|
-
<
|
|
112
|
+
<AliasAvatar alias={s.alias} size={16} />
|
|
113
|
+
<div className={`w-1.5 h-1.5 rounded-full shrink-0 ${s.status === 'working' ? 'bg-green-400' : s.status === 'idle' ? 'bg-cyan-400' : 'bg-gray-500'}`} />
|
|
112
114
|
<span className="truncate flex-1">{s.alias}</span>
|
|
113
115
|
<span className="text-[9px] text-gray-600">{s.agent || '--'}</span>
|
|
114
116
|
</button>
|
|
@@ -159,10 +161,12 @@ export function DispatchPanel({ sessions, onClose }: DispatchPanelProps) {
|
|
|
159
161
|
</div>
|
|
160
162
|
<div className="flex flex-wrap gap-1.5">
|
|
161
163
|
{results.map(r => (
|
|
162
|
-
<span key={r.alias} className={`text-[10px]
|
|
164
|
+
<span key={r.alias} className={`flex items-center gap-1.5 text-[10px] pl-1 pr-2 py-0.5 rounded-full border ${
|
|
163
165
|
r.ok ? 'text-green-300 border-green-500/20 bg-green-500/5' : 'text-red-300 border-red-500/20 bg-red-500/5'
|
|
164
166
|
}`}>
|
|
165
|
-
{r.alias}
|
|
167
|
+
<AliasAvatar alias={r.alias} size={14} />
|
|
168
|
+
<span>{r.alias}</span>
|
|
169
|
+
<span aria-hidden>{r.ok ? '✓' : r.error || '✗'}</span>
|
|
166
170
|
</span>
|
|
167
171
|
))}
|
|
168
172
|
</div>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import { useState } from 'react';
|
|
3
4
|
import Link from 'next/link';
|
|
4
5
|
|
|
5
6
|
export type EmptyVariant = 'nodes' | 'tasks' | 'messages' | 'logs' | 'tokens' | 'networks' | 'generic';
|
|
@@ -180,10 +181,82 @@ export function NodesEmptyState({ hint }: { hint?: { global_count?: number; filt
|
|
|
180
181
|
/>
|
|
181
182
|
);
|
|
182
183
|
}
|
|
184
|
+
// Round 52: true empty state (zero agents anywhere) — show the
|
|
185
|
+
// quickstart command inline so users don't have to leave the dashboard
|
|
186
|
+
// to figure out how to spin up their first agent.
|
|
183
187
|
return (
|
|
184
|
-
<
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
+
<div className="text-center py-16 px-4" role="status">
|
|
189
|
+
<div className="anet-empty-glyph inline-flex items-center justify-center mb-4 text-gray-500" aria-hidden>
|
|
190
|
+
<svg viewBox="0 0 64 64" width={56} height={56}>
|
|
191
|
+
<g stroke="currentColor" strokeWidth="1.5" fill="none">
|
|
192
|
+
<rect x="10" y="20" width="44" height="28" rx="2" />
|
|
193
|
+
<rect x="20" y="32" width="6" height="8" opacity="0.5" />
|
|
194
|
+
<rect x="32" y="32" width="6" height="8" opacity="0.5" />
|
|
195
|
+
<rect x="44" y="32" width="4" height="8" opacity="0.5" />
|
|
196
|
+
<line x1="10" y1="26" x2="54" y2="26" opacity="0.4" />
|
|
197
|
+
<circle cx="14" cy="23" r="0.8" fill="currentColor" />
|
|
198
|
+
</g>
|
|
199
|
+
</svg>
|
|
200
|
+
</div>
|
|
201
|
+
<h3 className="font-medium text-gray-300 text-base">Spin up your first agent</h3>
|
|
202
|
+
<p className="text-gray-500 text-sm mt-2 max-w-md mx-auto leading-relaxed">
|
|
203
|
+
Run this in a fresh terminal to register an agent with this CommHub:
|
|
204
|
+
</p>
|
|
205
|
+
<div className="mt-4 inline-block">
|
|
206
|
+
<QuickstartCommand cmd="npx --yes @sleep2agi/agent-network init" />
|
|
207
|
+
</div>
|
|
208
|
+
<div className="mt-3">
|
|
209
|
+
<a
|
|
210
|
+
href="https://anet.sh"
|
|
211
|
+
target="_blank"
|
|
212
|
+
rel="noopener noreferrer"
|
|
213
|
+
className="inline-flex items-center gap-1.5 text-xs font-medium text-gray-500 hover:text-cyan-300"
|
|
214
|
+
>
|
|
215
|
+
Full quickstart guide
|
|
216
|
+
<span aria-hidden>→</span>
|
|
217
|
+
</a>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** Code block + inline copy button used by the empty-Overview first-run
|
|
224
|
+
* CTA. State lives here so the parent stays stateless. */
|
|
225
|
+
function QuickstartCommand({ cmd }: { cmd: string }) {
|
|
226
|
+
const [copied, setCopied] = useState(false);
|
|
227
|
+
const onCopy = async () => {
|
|
228
|
+
try {
|
|
229
|
+
await navigator.clipboard.writeText(cmd);
|
|
230
|
+
setCopied(true);
|
|
231
|
+
setTimeout(() => setCopied(false), 1800);
|
|
232
|
+
} catch {}
|
|
233
|
+
};
|
|
234
|
+
return (
|
|
235
|
+
<div className="anet-empty-cmd flex items-center gap-2 bg-[#0a0a15] border border-[#2a2a4a] rounded-lg pl-4 pr-1.5 py-1.5 text-xs sm:text-sm">
|
|
236
|
+
<code className="text-cyan-300 font-mono select-all">{cmd}</code>
|
|
237
|
+
<button
|
|
238
|
+
type="button"
|
|
239
|
+
onClick={onCopy}
|
|
240
|
+
aria-label={copied ? 'Copied' : 'Copy command'}
|
|
241
|
+
className="shrink-0 rounded-md px-2 py-1.5 text-[11px] text-gray-500 hover:text-gray-200 hover:bg-[#1a1a2a] transition-colors"
|
|
242
|
+
>
|
|
243
|
+
{copied ? (
|
|
244
|
+
<span className="flex items-center gap-1 text-green-400">
|
|
245
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
|
246
|
+
<path d="M20 6 9 17l-5-5" />
|
|
247
|
+
</svg>
|
|
248
|
+
Copied
|
|
249
|
+
</span>
|
|
250
|
+
) : (
|
|
251
|
+
<span className="flex items-center gap-1">
|
|
252
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
|
|
253
|
+
<rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
|
|
254
|
+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
|
|
255
|
+
</svg>
|
|
256
|
+
Copy
|
|
257
|
+
</span>
|
|
258
|
+
)}
|
|
259
|
+
</button>
|
|
260
|
+
</div>
|
|
188
261
|
);
|
|
189
262
|
}
|
|
@@ -92,7 +92,7 @@ export function HealthBanner() {
|
|
|
92
92
|
return (
|
|
93
93
|
<div
|
|
94
94
|
role="status"
|
|
95
|
-
className={`anet-health-banner border-b ${styles} pl-14 pr-3 sm:px-6 py-1.5 text-[12px] flex items-center justify-between gap-3`}
|
|
95
|
+
className={`anet-health-banner sticky top-0 z-30 border-b ${styles} pl-14 pr-3 sm:px-6 py-1.5 text-[12px] flex items-center justify-between gap-3 backdrop-blur-sm`}
|
|
96
96
|
>
|
|
97
97
|
<div className="flex items-center gap-2 min-w-0">
|
|
98
98
|
<span className={`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${dot}`} aria-hidden />
|