@sleep2agi/agent-network-dashboard 0.4.6-preview.57 → 0.4.6-preview.59
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 +4 -4
- 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.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/admin.html +1 -1
- package/.next/server/app/admin.rsc +1 -1
- package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +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 +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs.html +1 -1
- package/.next/server/app/logs.rsc +1 -1
- package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages.html +1 -1
- package/.next/server/app/messages.rsc +1 -1
- package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node.html +1 -1
- package/.next/server/app/node.rsc +1 -1
- package/.next/server/app/node.segments/_full.segment.rsc +1 -1
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +1 -1
- package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes.html +1 -1
- package/.next/server/app/nodes.rsc +1 -1
- package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +1 -1
- package/.next/server/app/server-logs.rsc +1 -1
- package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/settings/networks.html +1 -1
- package/.next/server/app/settings/networks.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +1 -1
- package/.next/server/app/settings/tokens.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks.html +1 -1
- package/.next/server/app/tasks.rsc +1 -1
- package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
- 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/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- 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/{06r1pc~cd7xfa.js → 037tjr7sz6f~t.js} +1 -1
- package/.next/static/chunks/{16peqogm-h4p3.js → 0awgcn9goof5n.js} +1 -1
- package/.next/static/chunks/11p1g4_99qt2k.js +2 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/TopoGraph.tsx +41 -5
- package/package.json +1 -1
- package/scripts/topo-hub-click-fit-test.mjs +137 -0
- package/scripts/topo-hub-title-test.mjs +7 -2
- package/scripts/topo-label-lift-test.mjs +5 -1
- package/scripts/topo-node-hover-lift-test.mjs +85 -0
- package/.next/static/chunks/0p_6ksiknegta.js +0 -2
- /package/.next/static/{M01M9zzBqFxO74kap90B1 → yDT7RCISdKIh2yCe1abx2}/_buildManifest.js +0 -0
- /package/.next/static/{M01M9zzBqFxO74kap90B1 → yDT7RCISdKIh2yCe1abx2}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{M01M9zzBqFxO74kap90B1 → yDT7RCISdKIh2yCe1abx2}/_ssgManifest.js +0 -0
package/.next/trace
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":370,"timestamp":24422474299,"id":4,"parentId":1,"tags":{},"startTime":1778832394721,"traceId":"894c9622eb7ef979"},{"name":"load-custom-routes","duration":702,"timestamp":24422474864,"id":5,"parentId":1,"tags":{},"startTime":1778832394721,"traceId":"894c9622eb7ef979"},{"name":"create-dist-dir","duration":956,"timestamp":24422475638,"id":6,"parentId":1,"tags":{},"startTime":1778832394722,"traceId":"894c9622eb7ef979"},{"name":"clean","duration":730,"timestamp":24422477436,"id":7,"parentId":1,"tags":{},"startTime":1778832394724,"traceId":"894c9622eb7ef979"},{"name":"discover-routes","duration":10764,"timestamp":24422564512,"id":8,"parentId":1,"tags":{},"startTime":1778832394811,"traceId":"894c9622eb7ef979"},{"name":"create-root-mapping","duration":136,"timestamp":24422575354,"id":9,"parentId":1,"tags":{},"startTime":1778832394822,"traceId":"894c9622eb7ef979"},{"name":"generate-route-types","duration":34134,"timestamp":24422578237,"id":10,"parentId":1,"tags":{},"startTime":1778832394825,"traceId":"894c9622eb7ef979"},{"name":"public-dir-conflict-check","duration":108,"timestamp":24422612545,"id":11,"parentId":1,"tags":{},"startTime":1778832394859,"traceId":"894c9622eb7ef979"},{"name":"generate-routes-manifest","duration":5115,"timestamp":24422612816,"id":12,"parentId":1,"tags":{},"startTime":1778832394859,"traceId":"894c9622eb7ef979"},{"name":"run-turbopack","duration":6065980,"timestamp":24422623209,"id":14,"parentId":1,"tags":{},"startTime":1778832394869,"traceId":"894c9622eb7ef979"},{"name":"turbopack-build-events","duration":102,"timestamp":24422906206,"id":15,"parentId":1,"tags":{},"startTime":1778832395152,"traceId":"894c9622eb7ef979"},{"name":"run-typescript","duration":8919296,"timestamp":24428701727,"id":16,"parentId":1,"tags":{},"startTime":1778832400948,"traceId":"894c9622eb7ef979"},{"name":"generate-required-server-files","duration":2967,"timestamp":24437622317,"id":18,"parentId":1,"tags":{},"startTime":1778832409869,"traceId":"894c9622eb7ef979"},{"name":"check-static-error-page","duration":15580,"timestamp":24437802408,"id":20,"parentId":19,"tags":{},"startTime":1778832410049,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":525925,"timestamp":24437822421,"id":63,"parentId":22,"tags":{},"startTime":1778832410069,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":542751,"timestamp":24437805786,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778832410052,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":555975,"timestamp":24437823131,"id":67,"parentId":28,"tags":{},"startTime":1778832410069,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":569584,"timestamp":24437809636,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778832410056,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":569762,"timestamp":24437823636,"id":70,"parentId":32,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":583114,"timestamp":24437810373,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778832410057,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":591889,"timestamp":24437823709,"id":71,"parentId":33,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":605175,"timestamp":24437810511,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778832410057,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":598339,"timestamp":24437821986,"id":62,"parentId":21,"tags":{},"startTime":1778832410068,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":616232,"timestamp":24437804164,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778832410050,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":597658,"timestamp":24437823801,"id":72,"parentId":34,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":610871,"timestamp":24437810648,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778832410057,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":604936,"timestamp":24437823306,"id":68,"parentId":29,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":618540,"timestamp":24437809759,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778832410056,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":605905,"timestamp":24437822561,"id":64,"parentId":25,"tags":{},"startTime":1778832410069,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":619290,"timestamp":24437809203,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778832410055,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":619132,"timestamp":24437823978,"id":74,"parentId":36,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":631790,"timestamp":24437811414,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778832410058,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":620115,"timestamp":24437824069,"id":77,"parentId":39,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":632357,"timestamp":24437811885,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778832410058,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":624965,"timestamp":24437824081,"id":78,"parentId":40,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":637092,"timestamp":24437812024,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778832410058,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":629427,"timestamp":24437824097,"id":79,"parentId":41,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":641445,"timestamp":24437812135,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778832410058,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":634518,"timestamp":24437824115,"id":80,"parentId":42,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":646441,"timestamp":24437812250,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778832410059,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":639739,"timestamp":24437824132,"id":81,"parentId":43,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":651588,"timestamp":24437812356,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778832410059,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":644328,"timestamp":24437824145,"id":82,"parentId":44,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":656078,"timestamp":24437812460,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778832410059,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":649220,"timestamp":24437824160,"id":83,"parentId":45,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":660853,"timestamp":24437812575,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778832410059,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":652877,"timestamp":24437824053,"id":76,"parentId":38,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":665217,"timestamp":24437811780,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778832410058,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":654582,"timestamp":24437822704,"id":65,"parentId":26,"tags":{},"startTime":1778832410069,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":667941,"timestamp":24437809386,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778832410056,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":656744,"timestamp":24437824031,"id":75,"parentId":37,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":669200,"timestamp":24437811625,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778832410058,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":656840,"timestamp":24437824175,"id":84,"parentId":46,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":666980,"timestamp":24437814070,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778832410060,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":660924,"timestamp":24437822821,"id":66,"parentId":27,"tags":{},"startTime":1778832410069,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":674277,"timestamp":24437809509,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778832410056,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":659327,"timestamp":24437827634,"id":88,"parentId":24,"tags":{},"startTime":1778832410074,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":680673,"timestamp":24437806354,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778832410053,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":660576,"timestamp":24437828833,"id":89,"parentId":31,"tags":{},"startTime":1778832410075,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":679379,"timestamp":24437810076,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778832410056,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":671009,"timestamp":24437824187,"id":85,"parentId":47,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":681001,"timestamp":24437814239,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778832410061,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":679845,"timestamp":24437824217,"id":87,"parentId":49,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":689665,"timestamp":24437814454,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778832410061,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":684749,"timestamp":24437824201,"id":86,"parentId":48,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":694648,"timestamp":24437814349,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778832410061,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":689382,"timestamp":24437823837,"id":73,"parentId":35,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":702483,"timestamp":24437810788,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778832410057,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":690102,"timestamp":24437831411,"id":95,"parentId":54,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":705885,"timestamp":24437815676,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778832410062,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":700137,"timestamp":24437823443,"id":69,"parentId":30,"tags":{},"startTime":1778832410070,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":713706,"timestamp":24437809926,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778832410056,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":698337,"timestamp":24437831422,"id":96,"parentId":56,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":713270,"timestamp":24437816539,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778832410063,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":710723,"timestamp":24437831453,"id":98,"parentId":59,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":724827,"timestamp":24437817416,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778832410064,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":717047,"timestamp":24437831367,"id":92,"parentId":51,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":733387,"timestamp":24437815072,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778832410061,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":722400,"timestamp":24437831490,"id":100,"parentId":61,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":736252,"timestamp":24437817717,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778832410064,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":723018,"timestamp":24437831473,"id":99,"parentId":60,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":736969,"timestamp":24437817573,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778832410064,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":725795,"timestamp":24437831380,"id":93,"parentId":52,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":741958,"timestamp":24437815258,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778832410062,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":723426,"timestamp":24437837080,"id":101,"parentId":58,"tags":{},"startTime":1778832410083,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":743583,"timestamp":24437816965,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778832410063,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":695331,"timestamp":24437867047,"id":102,"parentId":55,"tags":{},"startTime":1778832410113,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":746481,"timestamp":24437815937,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778832410062,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":731675,"timestamp":24437831318,"id":90,"parentId":23,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":756965,"timestamp":24437806103,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778832410052,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":742795,"timestamp":24437831396,"id":94,"parentId":53,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":758772,"timestamp":24437815467,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778832410062,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":749121,"timestamp":24437831349,"id":91,"parentId":50,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":765652,"timestamp":24437814859,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778832410061,"traceId":"894c9622eb7ef979"},{"name":"is-page-static","duration":749530,"timestamp":24437831438,"id":97,"parentId":57,"tags":{},"startTime":1778832410078,"traceId":"894c9622eb7ef979"},{"name":"check-page","duration":764231,"timestamp":24437816766,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778832410063,"traceId":"894c9622eb7ef979"},{"name":"static-check","duration":779877,"timestamp":24437801197,"id":19,"parentId":1,"tags":{},"startTime":1778832410047,"traceId":"894c9622eb7ef979"},{"name":"write-routes-manifest","duration":403,"timestamp":24438588104,"id":104,"parentId":1,"tags":{},"startTime":1778832410834,"traceId":"894c9622eb7ef979"},{"name":"load-dotenv","duration":61,"timestamp":24438601350,"id":107,"parentId":106,"tags":{},"startTime":1778832410848,"traceId":"894c9622eb7ef979"},{"name":"run-export-path-map","duration":609,"timestamp":24438604341,"id":108,"parentId":106,"tags":{},"startTime":1778832410851,"traceId":"894c9622eb7ef979"},{"name":"next-export","duration":598203,"timestamp":24438599741,"id":106,"parentId":1,"tags":{},"startTime":1778832410846,"traceId":"894c9622eb7ef979"}]
|
|
2
|
-
[{"name":"move-exported-app-not-found-","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":275,"timestamp":25275198344,"id":4,"parentId":1,"tags":{},"startTime":1778833247445,"traceId":"0ffa3f03832411f5"},{"name":"load-custom-routes","duration":678,"timestamp":25275198787,"id":5,"parentId":1,"tags":{},"startTime":1778833247445,"traceId":"0ffa3f03832411f5"},{"name":"create-dist-dir","duration":740,"timestamp":25275199528,"id":6,"parentId":1,"tags":{},"startTime":1778833247446,"traceId":"0ffa3f03832411f5"},{"name":"clean","duration":482,"timestamp":25275200924,"id":7,"parentId":1,"tags":{},"startTime":1778833247447,"traceId":"0ffa3f03832411f5"},{"name":"discover-routes","duration":12076,"timestamp":25275284416,"id":8,"parentId":1,"tags":{},"startTime":1778833247531,"traceId":"0ffa3f03832411f5"},{"name":"create-root-mapping","duration":143,"timestamp":25275296564,"id":9,"parentId":1,"tags":{},"startTime":1778833247543,"traceId":"0ffa3f03832411f5"},{"name":"generate-route-types","duration":39878,"timestamp":25275299687,"id":10,"parentId":1,"tags":{},"startTime":1778833247546,"traceId":"0ffa3f03832411f5"},{"name":"public-dir-conflict-check","duration":153,"timestamp":25275339786,"id":11,"parentId":1,"tags":{},"startTime":1778833247586,"traceId":"0ffa3f03832411f5"},{"name":"generate-routes-manifest","duration":6322,"timestamp":25275340149,"id":12,"parentId":1,"tags":{},"startTime":1778833247586,"traceId":"0ffa3f03832411f5"},{"name":"run-turbopack","duration":5375301,"timestamp":25275353164,"id":14,"parentId":1,"tags":{},"startTime":1778833247599,"traceId":"0ffa3f03832411f5"},{"name":"turbopack-build-events","duration":71,"timestamp":25275631327,"id":15,"parentId":1,"tags":{},"startTime":1778833247878,"traceId":"0ffa3f03832411f5"},{"name":"run-typescript","duration":8151819,"timestamp":25280737699,"id":16,"parentId":1,"tags":{},"startTime":1778833252984,"traceId":"0ffa3f03832411f5"},{"name":"generate-required-server-files","duration":2218,"timestamp":25288890576,"id":18,"parentId":1,"tags":{},"startTime":1778833261137,"traceId":"0ffa3f03832411f5"},{"name":"check-static-error-page","duration":15320,"timestamp":25289071883,"id":20,"parentId":19,"tags":{},"startTime":1778833261318,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":451153,"timestamp":25289090396,"id":63,"parentId":22,"tags":{},"startTime":1778833261337,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":466364,"timestamp":25289075377,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778833261322,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":498890,"timestamp":25289090523,"id":64,"parentId":25,"tags":{},"startTime":1778833261337,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":511049,"timestamp":25289078478,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778833261325,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":521704,"timestamp":25289091690,"id":70,"parentId":32,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":533859,"timestamp":25289079617,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778833261326,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":535478,"timestamp":25289091749,"id":71,"parentId":33,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":547562,"timestamp":25289079745,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778833261326,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":551841,"timestamp":25289091822,"id":72,"parentId":34,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":563895,"timestamp":25289079860,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778833261326,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":556490,"timestamp":25289091851,"id":73,"parentId":35,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":568397,"timestamp":25289080020,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778833261326,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":560717,"timestamp":25289091981,"id":74,"parentId":36,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":572234,"timestamp":25289080531,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778833261327,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":564762,"timestamp":25289092026,"id":75,"parentId":37,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":576134,"timestamp":25289080713,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778833261327,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":566478,"timestamp":25289091400,"id":68,"parentId":29,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":578888,"timestamp":25289079083,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778833261325,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":563452,"timestamp":25289097416,"id":76,"parentId":38,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":580088,"timestamp":25289080856,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778833261327,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":572139,"timestamp":25289090987,"id":66,"parentId":27,"tags":{},"startTime":1778833261337,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":584397,"timestamp":25289078785,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778833261325,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":566040,"timestamp":25289097451,"id":77,"parentId":39,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":582562,"timestamp":25289080977,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778833261327,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":570222,"timestamp":25289097461,"id":78,"parentId":40,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":586639,"timestamp":25289081111,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778833261327,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":578605,"timestamp":25289097496,"id":81,"parentId":43,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":594749,"timestamp":25289081414,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":585116,"timestamp":25289091250,"id":67,"parentId":28,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":597501,"timestamp":25289078899,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778833261325,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":586657,"timestamp":25289089872,"id":62,"parentId":21,"tags":{},"startTime":1778833261336,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":602780,"timestamp":25289073773,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778833261320,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":584996,"timestamp":25289097508,"id":82,"parentId":44,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":601052,"timestamp":25289081515,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":588692,"timestamp":25289097474,"id":79,"parentId":41,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":605008,"timestamp":25289081203,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778833261327,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":588990,"timestamp":25289097519,"id":83,"parentId":45,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":604945,"timestamp":25289081615,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":599786,"timestamp":25289091521,"id":69,"parentId":30,"tags":{},"startTime":1778833261338,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":612155,"timestamp":25289079240,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778833261326,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":595806,"timestamp":25289097540,"id":85,"parentId":47,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":611570,"timestamp":25289081838,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":598031,"timestamp":25289097487,"id":80,"parentId":42,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":614261,"timestamp":25289081302,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":610702,"timestamp":25289097552,"id":86,"parentId":48,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":626359,"timestamp":25289081953,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":605460,"timestamp":25289106795,"id":89,"parentId":31,"tags":{},"startTime":1778833261353,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":632968,"timestamp":25289079353,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778833261326,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":624110,"timestamp":25289090856,"id":65,"parentId":26,"tags":{},"startTime":1778833261337,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":636369,"timestamp":25289078667,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778833261325,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":630721,"timestamp":25289097564,"id":87,"parentId":49,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":646294,"timestamp":25289082074,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":637791,"timestamp":25289105509,"id":88,"parentId":24,"tags":{},"startTime":1778833261352,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":667500,"timestamp":25289075874,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778833261322,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":647031,"timestamp":25289111147,"id":90,"parentId":23,"tags":{},"startTime":1778833261357,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":682612,"timestamp":25289075644,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778833261322,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":654289,"timestamp":25289111190,"id":91,"parentId":50,"tags":{},"startTime":1778833261357,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":681478,"timestamp":25289084074,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778833261330,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":675449,"timestamp":25289097532,"id":84,"parentId":46,"tags":{},"startTime":1778833261344,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":691418,"timestamp":25289081706,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778833261328,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":662064,"timestamp":25289111272,"id":97,"parentId":57,"tags":{},"startTime":1778833261358,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":687378,"timestamp":25289085993,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778833261332,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":668194,"timestamp":25289111206,"id":92,"parentId":51,"tags":{},"startTime":1778833261357,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":695168,"timestamp":25289084297,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778833261331,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":670066,"timestamp":25289111281,"id":98,"parentId":59,"tags":{},"startTime":1778833261358,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":694862,"timestamp":25289086633,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778833261333,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":672668,"timestamp":25289111320,"id":100,"parentId":61,"tags":{},"startTime":1778833261358,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":697125,"timestamp":25289086931,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778833261333,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":676868,"timestamp":25289111302,"id":99,"parentId":60,"tags":{},"startTime":1778833261358,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":701465,"timestamp":25289086773,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778833261333,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":663394,"timestamp":25289125391,"id":101,"parentId":58,"tags":{},"startTime":1778833261372,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":702641,"timestamp":25289086195,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778833261332,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":678305,"timestamp":25289111258,"id":96,"parentId":56,"tags":{},"startTime":1778833261358,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":703832,"timestamp":25289085768,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778833261332,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":628846,"timestamp":25289162039,"id":102,"parentId":55,"tags":{},"startTime":1778833261408,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":705784,"timestamp":25289085146,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778833261331,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":689801,"timestamp":25289111244,"id":95,"parentId":54,"tags":{},"startTime":1778833261358,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":716208,"timestamp":25289084878,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778833261331,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":703279,"timestamp":25289111234,"id":94,"parentId":53,"tags":{},"startTime":1778833261358,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":729899,"timestamp":25289084659,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778833261331,"traceId":"0ffa3f03832411f5"},{"name":"is-page-static","duration":703408,"timestamp":25289111221,"id":93,"parentId":52,"tags":{},"startTime":1778833261357,"traceId":"0ffa3f03832411f5"},{"name":"check-page","duration":730181,"timestamp":25289084463,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778833261331,"traceId":"0ffa3f03832411f5"},{"name":"static-check","duration":743958,"timestamp":25289070717,"id":19,"parentId":1,"tags":{},"startTime":1778833261317,"traceId":"0ffa3f03832411f5"},{"name":"write-routes-manifest","duration":377,"timestamp":25289821405,"id":104,"parentId":1,"tags":{},"startTime":1778833262068,"traceId":"0ffa3f03832411f5"},{"name":"load-dotenv","duration":44,"timestamp":25289833230,"id":107,"parentId":106,"tags":{},"startTime":1778833262080,"traceId":"0ffa3f03832411f5"},{"name":"run-export-path-map","duration":801,"timestamp":25289836467,"id":108,"parentId":106,"tags":{},"startTime":1778833262083,"traceId":"0ffa3f03832411f5"},{"name":"next-export","duration":559089,"timestamp":25289831696,"id":106,"parentId":1,"tags":{},"startTime":1778833262078,"traceId":"0ffa3f03832411f5"}]
|
|
2
|
+
[{"name":"move-exported-app-not-found-","duration":2626,"timestamp":25290393859,"id":109,"parentId":105,"tags":{},"startTime":1778833262640,"traceId":"0ffa3f03832411f5"},{"name":"move-exported-app-global-error-","duration":553,"timestamp":25290396580,"id":110,"parentId":105,"tags":{},"startTime":1778833262643,"traceId":"0ffa3f03832411f5"},{"name":"static-generation","duration":573392,"timestamp":25289825462,"id":105,"parentId":1,"tags":{},"startTime":1778833262072,"traceId":"0ffa3f03832411f5"},{"name":"write-routes-manifest","duration":380,"timestamp":25290399038,"id":111,"parentId":1,"tags":{},"startTime":1778833262645,"traceId":"0ffa3f03832411f5"},{"name":"print-tree-view","duration":5659,"timestamp":25290406540,"id":112,"parentId":1,"tags":{},"startTime":1778833262653,"traceId":"0ffa3f03832411f5"},{"name":"write-route-bundle-stats","duration":17845,"timestamp":25290412236,"id":113,"parentId":1,"tags":{},"startTime":1778833262659,"traceId":"0ffa3f03832411f5"},{"name":"telemetry-flush","duration":19051,"timestamp":25290430115,"id":114,"parentId":1,"tags":{},"startTime":1778833262676,"traceId":"0ffa3f03832411f5"},{"name":"next-build","duration":15304026,"timestamp":25275145176,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778833247391,"traceId":"0ffa3f03832411f5"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":5375301,"timestamp":25275353164,"id":14,"parentId":1,"tags":{},"startTime":1778833247599,"traceId":"0ffa3f03832411f5"},{"name":"turbopack-build-events","duration":71,"timestamp":25275631327,"id":15,"parentId":1,"tags":{},"startTime":1778833247878,"traceId":"0ffa3f03832411f5"},{"name":"run-typescript","duration":8151819,"timestamp":25280737699,"id":16,"parentId":1,"tags":{},"startTime":1778833252984,"traceId":"0ffa3f03832411f5"},{"name":"static-check","duration":743958,"timestamp":25289070717,"id":19,"parentId":1,"tags":{},"startTime":1778833261317,"traceId":"0ffa3f03832411f5"},{"name":"static-generation","duration":573392,"timestamp":25289825462,"id":105,"parentId":1,"tags":{},"startTime":1778833262072,"traceId":"0ffa3f03832411f5"},{"name":"telemetry-flush","duration":19051,"timestamp":25290430115,"id":114,"parentId":1,"tags":{},"startTime":1778833262676,"traceId":"0ffa3f03832411f5"},{"name":"next-build","duration":15304026,"timestamp":25275145176,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778833247391,"traceId":"0ffa3f03832411f5"}]
|
|
@@ -1224,13 +1224,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
1224
1224
|
grid mode drops it so the concentric rings don't sit behind a
|
|
1225
1225
|
rectangular grid. */}
|
|
1226
1226
|
{layout === 'ring' && (<>
|
|
1227
|
-
|
|
1227
|
+
{/* R52: radar bg is pure decoration — drop its pointer events so
|
|
1228
|
+
the hub <g> under it (and any future inner-disk affordances)
|
|
1229
|
+
can receive clicks. Previously the r=330 disc intercepted
|
|
1230
|
+
the hub click outright. */}
|
|
1231
|
+
<circle cx={cx} cy={cy} r="330" fill="url(#topo-radar)" style={{ pointerEvents: 'none' }} />
|
|
1228
1232
|
|
|
1229
1233
|
{/* Round 45: subtle star field — 24 deterministic dots scattered
|
|
1230
1234
|
across the canvas give the radar bg some depth. Skipped on
|
|
1231
1235
|
light theme so the white surface stays clean. */}
|
|
1232
1236
|
{!isLight && (
|
|
1233
|
-
<g opacity="0.5">
|
|
1237
|
+
<g opacity="0.5" style={{ pointerEvents: 'none' }}>
|
|
1234
1238
|
{Array.from({ length: 28 }).map((_, i) => {
|
|
1235
1239
|
// Deterministic pseudo-random scatter so positions are
|
|
1236
1240
|
// stable between renders (no JS hydration mismatch).
|
|
@@ -1252,6 +1256,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
1252
1256
|
style={{
|
|
1253
1257
|
transformOrigin: `${cx}px ${cy}px`,
|
|
1254
1258
|
transformBox: 'view-box',
|
|
1259
|
+
pointerEvents: 'none',
|
|
1255
1260
|
}}
|
|
1256
1261
|
className="anet-topo-sweep"
|
|
1257
1262
|
opacity={isLight ? 0.7 : 1}
|
|
@@ -1511,21 +1516,40 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
1511
1516
|
breath on the static halo (4s, ±15% from base), so the hub
|
|
1512
1517
|
stays alive without throwing kinetic energy outward. The
|
|
1513
1518
|
dual-circle "lit lamp" core is unchanged. */}
|
|
1514
|
-
{layout === 'ring' && (<g
|
|
1519
|
+
{layout === 'ring' && (<g
|
|
1520
|
+
data-topo-hub
|
|
1521
|
+
style={{ cursor: 'pointer' }}
|
|
1522
|
+
// Stop pointerdown from reaching the SVG pan handler — same
|
|
1523
|
+
// reason as the node <g>: a captured pointer makes Chromium
|
|
1524
|
+
// fire the follow-up click on the SVG, not this group.
|
|
1525
|
+
onPointerDown={(e) => e.stopPropagation()}
|
|
1526
|
+
// Round 52 / Loop: hub is the visual anchor but had no click
|
|
1527
|
+
// action — users discovered fit-to-content only via the `f`
|
|
1528
|
+
// key or the chrome button. Wire the hub to fitView() so the
|
|
1529
|
+
// most prominent element in the canvas is also the "re-
|
|
1530
|
+
// center" affordance. A click-ripple keyed by ts confirms
|
|
1531
|
+
// the gesture; the hub <title> now ends with a hint.
|
|
1532
|
+
onClick={() => {
|
|
1533
|
+
fitView();
|
|
1534
|
+
setClickRipple({ ts: Date.now(), x: cx, y: cy, r0: 18, color: isLight ? '#059669' : '#10b981' });
|
|
1535
|
+
setTimeout(() => setClickRipple(prev => prev && prev.x === cx && prev.y === cy ? null : prev), 600);
|
|
1536
|
+
}}
|
|
1537
|
+
>
|
|
1515
1538
|
{/* Round 43 / Loop: hub `<title>` summary — hovering the
|
|
1516
1539
|
central glow now answers "what is this?" with a one-line
|
|
1517
1540
|
fleet snapshot. Duplicates the header chips by design;
|
|
1518
1541
|
hovering the most visually prominent element is the
|
|
1519
1542
|
most natural impulse, so satisfy it where the cursor
|
|
1520
1543
|
already is. Falls clean: omits sub-clauses when their
|
|
1521
|
-
counts are zero.
|
|
1544
|
+
counts are zero. R52 appends a "click to fit view" hint.
|
|
1545
|
+
*/}
|
|
1522
1546
|
<title>{(() => {
|
|
1523
1547
|
const total = sessions.length;
|
|
1524
1548
|
const parts = [`Network hub`, `${total} session${total === 1 ? '' : 's'}`];
|
|
1525
1549
|
if (onlineNodes.length > 0) parts.push(`${onlineNodes.length} online`);
|
|
1526
1550
|
if (workingCount > 0) parts.push(`${workingCount} working`);
|
|
1527
1551
|
if (flowLinks.length > 0) parts.push(`${flowLinks.length} active link${flowLinks.length === 1 ? '' : 's'}`);
|
|
1528
|
-
return parts.join(' · ');
|
|
1552
|
+
return parts.join(' · ') + '\nclick to fit view';
|
|
1529
1553
|
})()}</title>
|
|
1530
1554
|
{/* grounding halo — now breathes in opacity, no expansion */}
|
|
1531
1555
|
<circle
|
|
@@ -1617,6 +1641,18 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
1617
1641
|
// mount (same alias key) don't replay, so status changes
|
|
1618
1642
|
// never trigger the stagger again.
|
|
1619
1643
|
animationDelay: `${Math.min(nodeIdx, 24) * 25}ms`,
|
|
1644
|
+
// Round 51 / Loop: hover micro-lift. The label already
|
|
1645
|
+
// lifts on group-hover (R26). The node body — circle,
|
|
1646
|
+
// avatar, status ring — stays planted, so the gesture
|
|
1647
|
+
// reads "label moves, body doesn't". Now the whole <g>
|
|
1648
|
+
// translates -2px when hovered: avatar + ring + label
|
|
1649
|
+
// move as one unit. 2 px is well inside the inter-row
|
|
1650
|
+
// gap (cellH headroom ≥22), and CSS transform on SVG
|
|
1651
|
+
// <g> never affects the overlap-test geometry (the
|
|
1652
|
+
// test never simulates hover). useReducedMotion drops
|
|
1653
|
+
// the lift to 0 for prefers-reduced-motion users.
|
|
1654
|
+
transform: !reducedMotion && hoveredAlias === session.alias ? 'translateY(-2px)' : undefined,
|
|
1655
|
+
transition: 'transform 180ms cubic-bezier(0.4,0,0.2,1)',
|
|
1620
1656
|
}}
|
|
1621
1657
|
// Stop the pointerdown from reaching the SVG pan handler: the
|
|
1622
1658
|
// SVG calls setPointerCapture, and a captured pointer makes
|
package/package.json
CHANGED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/* Round 52 verification: clicking the central hub triggers fitView() and
|
|
2
|
+
* shows a click-ripple. The hub was previously decoration; now it's the
|
|
3
|
+
* "re-center" affordance for users who don't know the `f` shortcut.
|
|
4
|
+
*
|
|
5
|
+
* Steps:
|
|
6
|
+
* - Zoom + pan the topology to a non-default view (Cmd+= twice + drag).
|
|
7
|
+
* Confirm the zoom group's transform shifted off identity.
|
|
8
|
+
* - Click the hub. Assert:
|
|
9
|
+
* 1. the zoom group's transform returns to a fitted state (zoom and
|
|
10
|
+
* translate change), i.e. the view changed back toward identity-
|
|
11
|
+
* or-fit;
|
|
12
|
+
* 2. a transient ripple <circle> shows up at the hub center, then
|
|
13
|
+
* vanishes within ~800ms.
|
|
14
|
+
* - Confirm the hub's <title> mentions "click to fit view".
|
|
15
|
+
*/
|
|
16
|
+
import { chromium } from 'playwright';
|
|
17
|
+
import { readFileSync } from 'node:fs';
|
|
18
|
+
|
|
19
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
20
|
+
const browser = await chromium.launch({ headless: true });
|
|
21
|
+
|
|
22
|
+
const ctx = await browser.newContext({ viewport: { width: 1280, height: 1500 } });
|
|
23
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
24
|
+
await ctx.addInitScript(() => {
|
|
25
|
+
try {
|
|
26
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
27
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
28
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
29
|
+
} catch {}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
33
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
34
|
+
const r = await route.fetch();
|
|
35
|
+
const b = await r.json();
|
|
36
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
37
|
+
const sessions = ['alpha', 'beta', 'gamma'].map(a => ({
|
|
38
|
+
alias: a, status: 'idle', network_id: nid, project_dir: null,
|
|
39
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
40
|
+
}));
|
|
41
|
+
await route.fulfill({ response: r, json: { ...b, sessions } });
|
|
42
|
+
});
|
|
43
|
+
await ctx.route('**/api/hub/messages*', (route) => route.fulfill({ json: { messages: [] } }));
|
|
44
|
+
await ctx.route('**/api/hub/tasks*', (route) => route.fulfill({ json: { tasks: [] } }));
|
|
45
|
+
const page = await ctx.newPage();
|
|
46
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
|
|
47
|
+
await page.waitForSelector('g[data-topo-hub]', { timeout: 30000 });
|
|
48
|
+
await page.waitForTimeout(500);
|
|
49
|
+
|
|
50
|
+
// Read the hub <title> to verify the hint text.
|
|
51
|
+
const hubTitle = await page.evaluate(() => {
|
|
52
|
+
return document.querySelector('g[data-topo-hub] title')?.textContent || '';
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Find the zoom/pan wrapper <g> (the one whose transform attribute holds
|
|
56
|
+
// the scale + translate string). The TopoGraph wraps all canvas content
|
|
57
|
+
// in a <g> with transform="translate(x, y) scale(zoom)" at the panel root.
|
|
58
|
+
// Grab the first child <g> under the SVG that carries a `transform` with
|
|
59
|
+
// a `scale(` token — that's our zoom group.
|
|
60
|
+
const readTransform = () => page.evaluate(() => {
|
|
61
|
+
const svg = document.querySelector('svg[viewBox="0 0 1000 680"]');
|
|
62
|
+
for (const g of svg.querySelectorAll(':scope > g')) {
|
|
63
|
+
const t = g.getAttribute('transform') || '';
|
|
64
|
+
if (t.includes('scale(')) return t;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const baseTransform = await readTransform();
|
|
70
|
+
|
|
71
|
+
// Nudge zoom by simulating Ctrl+= twice via keyboard shortcut. The
|
|
72
|
+
// keymap maps '+' to zoomBy; press 'Equal' with the right modifier so
|
|
73
|
+
// browsers see '+'.
|
|
74
|
+
await page.keyboard.press('+');
|
|
75
|
+
await page.keyboard.press('+');
|
|
76
|
+
await page.keyboard.press('+');
|
|
77
|
+
await page.waitForTimeout(150);
|
|
78
|
+
const zoomedTransform = await readTransform();
|
|
79
|
+
|
|
80
|
+
// Confirm the zoom transform actually changed.
|
|
81
|
+
const zoomChanged = baseTransform !== zoomedTransform;
|
|
82
|
+
|
|
83
|
+
// Click the hub center. Locator-based click hits the union bbox edge and
|
|
84
|
+
// gets intercepted by the SVG panel rect (which must keep pointer events
|
|
85
|
+
// for canvas pan). Sample the inner core circle (r=10 at viewBox 500,330)
|
|
86
|
+
// via getScreenCTM and click that on-screen point directly.
|
|
87
|
+
const hubCenter = await page.evaluate(() => {
|
|
88
|
+
const svg = document.querySelector('svg[viewBox="0 0 1000 680"]');
|
|
89
|
+
const core = [...svg.querySelectorAll('g[data-topo-hub] circle')].find(
|
|
90
|
+
c => c.getAttribute('r') === '10'
|
|
91
|
+
);
|
|
92
|
+
if (!core) return null;
|
|
93
|
+
const ctm = core.getScreenCTM();
|
|
94
|
+
const cx = +core.getAttribute('cx');
|
|
95
|
+
const cy = +core.getAttribute('cy');
|
|
96
|
+
return { x: cx * ctm.a + cy * ctm.c + ctm.e, y: cx * ctm.b + cy * ctm.d + ctm.f };
|
|
97
|
+
});
|
|
98
|
+
if (!hubCenter) { console.log('❌ hub core circle not found'); process.exit(1); }
|
|
99
|
+
await page.mouse.click(hubCenter.x, hubCenter.y);
|
|
100
|
+
await page.waitForTimeout(150);
|
|
101
|
+
const afterClickTransform = await readTransform();
|
|
102
|
+
const ripplePresent = await page.evaluate(() => {
|
|
103
|
+
const svg = document.querySelector('svg[viewBox="0 0 1000 680"]');
|
|
104
|
+
// The click ripple is a <circle> with stroke-width="2" + an <animate>.
|
|
105
|
+
const ripples = [...svg.querySelectorAll('circle')].filter(c => {
|
|
106
|
+
const sw = c.getAttribute('stroke-width');
|
|
107
|
+
return sw === '2' && c.querySelector('animate[attributeName="r"]');
|
|
108
|
+
});
|
|
109
|
+
return ripples.length > 0;
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
await page.waitForTimeout(800);
|
|
113
|
+
const rippleGone = await page.evaluate(() => {
|
|
114
|
+
const svg = document.querySelector('svg[viewBox="0 0 1000 680"]');
|
|
115
|
+
const ripples = [...svg.querySelectorAll('circle')].filter(c => {
|
|
116
|
+
const sw = c.getAttribute('stroke-width');
|
|
117
|
+
return sw === '2' && c.querySelector('animate[attributeName="r"]');
|
|
118
|
+
});
|
|
119
|
+
return ripples.length === 0;
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
await browser.close();
|
|
123
|
+
|
|
124
|
+
const results = {
|
|
125
|
+
hubTitleHasFitHint: /click to fit view/i.test(hubTitle),
|
|
126
|
+
zoomShifted: zoomChanged,
|
|
127
|
+
hubClickRestoredView: afterClickTransform !== zoomedTransform,
|
|
128
|
+
ripplePresentDuringClick: ripplePresent,
|
|
129
|
+
rippleClearsAfter600ms: rippleGone,
|
|
130
|
+
};
|
|
131
|
+
const ok = Object.values(results).every(Boolean);
|
|
132
|
+
console.log(`${ok ? '✅' : '❌'} hub click fit:`, JSON.stringify(results),
|
|
133
|
+
`\n hubTitle=${JSON.stringify(hubTitle)}`,
|
|
134
|
+
`\n base =${baseTransform}`,
|
|
135
|
+
`\n zoomed =${zoomedTransform}`,
|
|
136
|
+
`\n fitBack =${afterClickTransform}`);
|
|
137
|
+
process.exit(ok ? 0 : 1);
|
|
@@ -74,10 +74,15 @@ const grid = await probe({
|
|
|
74
74
|
});
|
|
75
75
|
|
|
76
76
|
await browser.close();
|
|
77
|
+
// R52 appended "\nclick to fit view" as a second line to the hub
|
|
78
|
+
// <title> so the click-to-fit affordance is discoverable on hover.
|
|
79
|
+
// Compare on the first line only; assert the hint is present too.
|
|
80
|
+
const firstLine = (s) => (s || '').split('\n')[0];
|
|
77
81
|
const results = {
|
|
78
82
|
ringHubPresent: ringFull.hubPresent === true,
|
|
79
|
-
ringFullSummary: ringFull.titleText === 'Network hub · 4 sessions · 3 online · 1 working · 1 active link',
|
|
80
|
-
ringOfflineSummary: ringOfflineOnly.hubPresent === true && ringOfflineOnly.titleText === 'Network hub · 2 sessions',
|
|
83
|
+
ringFullSummary: firstLine(ringFull.titleText) === 'Network hub · 4 sessions · 3 online · 1 working · 1 active link',
|
|
84
|
+
ringOfflineSummary: ringOfflineOnly.hubPresent === true && firstLine(ringOfflineOnly.titleText) === 'Network hub · 2 sessions',
|
|
85
|
+
ringHintsAtFit: /click to fit view/i.test(ringFull.titleText || ''),
|
|
81
86
|
gridHasNoHub: grid.hubPresent === false,
|
|
82
87
|
};
|
|
83
88
|
const ok = Object.values(results).every(Boolean);
|
|
@@ -103,7 +103,11 @@ const denseClassPresent = await (async () => {
|
|
|
103
103
|
|
|
104
104
|
await browser.close();
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
// R26 contributes label-only -1.5px lift; R51 (preview.58) adds -2px on the
|
|
107
|
+
// parent <g data-node> on hover, so the label's total measured movement
|
|
108
|
+
// when the node is hovered is ~3.5px. Widen the upper bound to 4 so the
|
|
109
|
+
// two lifts compose without flagging this as a regression.
|
|
110
|
+
const lifted = (m) => m.beforeY != null && m.afterY != null && m.beforeY - m.afterY >= 1 && m.beforeY - m.afterY <= 4;
|
|
107
111
|
|
|
108
112
|
const results = {
|
|
109
113
|
sparseLabelLifts: lifted(sparse),
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* Round 51 verification: hovered node <g> lifts -2px via CSS transform.
|
|
2
|
+
* - At rest, every node's CSS transform is "none" (or matrix with 0 ty).
|
|
3
|
+
* - On hover, the hovered <g> reports `translateY(-2px)` (matrix(1,0,0,1,0,-2))
|
|
4
|
+
* via getComputedStyle.transform, while siblings stay at identity.
|
|
5
|
+
* - Release: returns to identity.
|
|
6
|
+
* - With prefers-reduced-motion forced, NO lift even on hover.
|
|
7
|
+
*/
|
|
8
|
+
import { chromium } from 'playwright';
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
|
|
11
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
12
|
+
const browser = await chromium.launch({ headless: true });
|
|
13
|
+
|
|
14
|
+
async function probe(reducedMotion) {
|
|
15
|
+
const ctx = await browser.newContext({
|
|
16
|
+
viewport: { width: 1280, height: 900 },
|
|
17
|
+
reducedMotion: reducedMotion ? 'reduce' : 'no-preference',
|
|
18
|
+
});
|
|
19
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
20
|
+
await ctx.addInitScript(() => {
|
|
21
|
+
try {
|
|
22
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
23
|
+
localStorage.setItem('anet-topo-layout', 'ring');
|
|
24
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
25
|
+
} catch {}
|
|
26
|
+
});
|
|
27
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
28
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
29
|
+
const r = await route.fetch();
|
|
30
|
+
const b = await r.json();
|
|
31
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
32
|
+
const sessions = ['alpha', 'beta', 'gamma'].map(a => ({
|
|
33
|
+
alias: a, status: 'idle', network_id: nid, project_dir: null,
|
|
34
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
35
|
+
}));
|
|
36
|
+
await route.fulfill({ response: r, json: { ...b, sessions } });
|
|
37
|
+
});
|
|
38
|
+
await ctx.route('**/api/hub/messages*', (route) => route.fulfill({ json: { messages: [] } }));
|
|
39
|
+
await ctx.route('**/api/hub/tasks*', (route) => route.fulfill({ json: { tasks: [] } }));
|
|
40
|
+
const page = await ctx.newPage();
|
|
41
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
|
|
42
|
+
await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 3, { timeout: 30000 });
|
|
43
|
+
await page.waitForTimeout(500);
|
|
44
|
+
|
|
45
|
+
const readTy = (alias) => page.evaluate(a => {
|
|
46
|
+
const el = document.querySelector(`g[data-node="${a}"]`);
|
|
47
|
+
if (!el) return null;
|
|
48
|
+
const m = getComputedStyle(el).transform;
|
|
49
|
+
if (!m || m === 'none') return 0;
|
|
50
|
+
// matrix(a, b, c, d, tx, ty) — extract ty
|
|
51
|
+
const parts = m.match(/matrix\(([^)]+)\)/);
|
|
52
|
+
if (!parts) return null;
|
|
53
|
+
const arr = parts[1].split(',').map(s => parseFloat(s.trim()));
|
|
54
|
+
return arr[5] ?? null;
|
|
55
|
+
}, alias);
|
|
56
|
+
|
|
57
|
+
const restAlpha = await readTy('alpha');
|
|
58
|
+
const restBeta = await readTy('beta');
|
|
59
|
+
await page.locator('g[data-node="alpha"]').hover({ force: true });
|
|
60
|
+
await page.waitForTimeout(300);
|
|
61
|
+
const hoveredAlpha = await readTy('alpha');
|
|
62
|
+
const hoveredBeta = await readTy('beta');
|
|
63
|
+
await page.mouse.move(10, 10);
|
|
64
|
+
await page.waitForTimeout(300);
|
|
65
|
+
const releasedAlpha = await readTy('alpha');
|
|
66
|
+
|
|
67
|
+
await ctx.close();
|
|
68
|
+
return { restAlpha, restBeta, hoveredAlpha, hoveredBeta, releasedAlpha };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const normal = await probe(false);
|
|
72
|
+
const reduced = await probe(true);
|
|
73
|
+
await browser.close();
|
|
74
|
+
|
|
75
|
+
const results = {
|
|
76
|
+
normal_restAtZero: normal.restAlpha === 0 && normal.restBeta === 0,
|
|
77
|
+
normal_hoveredLifts: normal.hoveredAlpha === -2,
|
|
78
|
+
normal_siblingStays: normal.hoveredBeta === 0,
|
|
79
|
+
normal_released: normal.releasedAlpha === 0,
|
|
80
|
+
reduced_noLift: reduced.hoveredAlpha === 0,
|
|
81
|
+
};
|
|
82
|
+
const ok = Object.values(results).every(Boolean);
|
|
83
|
+
console.log(`${ok ? '✅' : '❌'} node hover lift:`, JSON.stringify(results),
|
|
84
|
+
`\n normal=`, normal, `\n reduced=`, reduced);
|
|
85
|
+
process.exit(ok ? 0 : 1);
|