@sleep2agi/agent-network-dashboard 0.5.1-preview.5 → 0.5.1-preview.7

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.
Files changed (141) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +1 -1
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/admin.html +1 -1
  21. package/.next/server/app/admin.rsc +1 -1
  22. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  23. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  28. package/.next/server/app/index.html +2 -2
  29. package/.next/server/app/index.rsc +2 -2
  30. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/login.html +2 -2
  37. package/.next/server/app/login.rsc +2 -2
  38. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  39. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  40. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  44. package/.next/server/app/logs.html +1 -1
  45. package/.next/server/app/logs.rsc +1 -1
  46. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  52. package/.next/server/app/messages.html +1 -1
  53. package/.next/server/app/messages.rsc +1 -1
  54. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  60. package/.next/server/app/node.html +1 -1
  61. package/.next/server/app/node.rsc +1 -1
  62. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  63. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  68. package/.next/server/app/nodes.html +1 -1
  69. package/.next/server/app/nodes.rsc +1 -1
  70. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  76. package/.next/server/app/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/server-logs.html +1 -1
  78. package/.next/server/app/server-logs.rsc +1 -1
  79. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  85. package/.next/server/app/settings/networks.html +1 -1
  86. package/.next/server/app/settings/networks.rsc +1 -1
  87. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  94. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/settings/tokens.html +1 -1
  96. package/.next/server/app/settings/tokens.rsc +1 -1
  97. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  104. package/.next/server/app/settings.html +2 -2
  105. package/.next/server/app/settings.rsc +2 -2
  106. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  111. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  112. package/.next/server/app/tasks.html +1 -1
  113. package/.next/server/app/tasks.rsc +1 -1
  114. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  120. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  121. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  126. package/.next/server/middleware-build-manifest.js +3 -3
  127. package/.next/server/pages/404.html +1 -1
  128. package/.next/server/pages/500.html +1 -1
  129. package/.next/static/chunks/{0txa4xkx0-7v-.js → 0bja1amnrg3li.js} +1 -1
  130. package/.next/static/chunks/0k~uc0~~19hyy.js +4 -0
  131. package/.next/static/chunks/{020yd2d3i1yew.js → 0wtq_6dnzems6.js} +1 -1
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +39 -5
  135. package/package.json +1 -1
  136. package/scripts/topo-minimap-viewport-hover-test.mjs +109 -0
  137. package/scripts/topo-panel-title-hover-letterspacing-test.mjs +97 -0
  138. package/.next/static/chunks/0xvj-x25qdu55.js +0 -4
  139. /package/.next/static/{s_gujwHXFfXWh2_yQC6Gk → x9zCCrMkHsIYlXNY791KF}/_buildManifest.js +0 -0
  140. /package/.next/static/{s_gujwHXFfXWh2_yQC6Gk → x9zCCrMkHsIYlXNY791KF}/_clientMiddlewareManifest.js +0 -0
  141. /package/.next/static/{s_gujwHXFfXWh2_yQC6Gk → x9zCCrMkHsIYlXNY791KF}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":286,"timestamp":131156399756,"id":4,"parentId":1,"tags":{},"startTime":1778939128646,"traceId":"45607791fce15510"},{"name":"load-custom-routes","duration":491,"timestamp":131156400211,"id":5,"parentId":1,"tags":{},"startTime":1778939128646,"traceId":"45607791fce15510"},{"name":"create-dist-dir","duration":728,"timestamp":131156400748,"id":6,"parentId":1,"tags":{},"startTime":1778939128647,"traceId":"45607791fce15510"},{"name":"clean","duration":30286,"timestamp":131156402174,"id":7,"parentId":1,"tags":{},"startTime":1778939128648,"traceId":"45607791fce15510"},{"name":"discover-routes","duration":14754,"timestamp":131156515149,"id":8,"parentId":1,"tags":{},"startTime":1778939128761,"traceId":"45607791fce15510"},{"name":"create-root-mapping","duration":190,"timestamp":131156529978,"id":9,"parentId":1,"tags":{},"startTime":1778939128776,"traceId":"45607791fce15510"},{"name":"generate-route-types","duration":43619,"timestamp":131156533424,"id":10,"parentId":1,"tags":{},"startTime":1778939128780,"traceId":"45607791fce15510"},{"name":"public-dir-conflict-check","duration":103,"timestamp":131156577140,"id":11,"parentId":1,"tags":{},"startTime":1778939128823,"traceId":"45607791fce15510"},{"name":"generate-routes-manifest","duration":5214,"timestamp":131156577359,"id":12,"parentId":1,"tags":{},"startTime":1778939128824,"traceId":"45607791fce15510"},{"name":"run-turbopack","duration":6283510,"timestamp":131156588724,"id":14,"parentId":1,"tags":{},"startTime":1778939128835,"traceId":"45607791fce15510"},{"name":"turbopack-build-events","duration":102,"timestamp":131156892092,"id":15,"parentId":1,"tags":{},"startTime":1778939129138,"traceId":"45607791fce15510"},{"name":"run-typescript","duration":9636823,"timestamp":131162880746,"id":16,"parentId":1,"tags":{},"startTime":1778939135127,"traceId":"45607791fce15510"},{"name":"generate-required-server-files","duration":2514,"timestamp":131172518810,"id":18,"parentId":1,"tags":{},"startTime":1778939144765,"traceId":"45607791fce15510"},{"name":"check-static-error-page","duration":12299,"timestamp":131172682316,"id":20,"parentId":19,"tags":{},"startTime":1778939144929,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":466548,"timestamp":131172699079,"id":65,"parentId":22,"tags":{},"startTime":1778939144945,"traceId":"45607791fce15510"},{"name":"check-page","duration":481241,"timestamp":131172684561,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778939144931,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":575054,"timestamp":131172699449,"id":68,"parentId":27,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":587642,"timestamp":131172687149,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778939144933,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":579250,"timestamp":131172699548,"id":69,"parentId":28,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":591629,"timestamp":131172687237,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":580411,"timestamp":131172698670,"id":64,"parentId":21,"tags":{},"startTime":1778939144945,"traceId":"45607791fce15510"},{"name":"check-page","duration":595675,"timestamp":131172683444,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778939144930,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":580944,"timestamp":131172699968,"id":71,"parentId":30,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":593525,"timestamp":131172687444,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":586165,"timestamp":131172700049,"id":72,"parentId":32,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":598639,"timestamp":131172687730,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":593869,"timestamp":131172700339,"id":76,"parentId":36,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":605641,"timestamp":131172688623,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778939144935,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":599356,"timestamp":131172699346,"id":67,"parentId":26,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":611701,"timestamp":131172687057,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778939144933,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":601062,"timestamp":131172700367,"id":77,"parentId":37,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":612709,"timestamp":131172688774,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778939144935,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":603768,"timestamp":131172700388,"id":78,"parentId":38,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":615330,"timestamp":131172688874,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778939144935,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":611298,"timestamp":131172700322,"id":75,"parentId":35,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":623551,"timestamp":131172688134,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":621112,"timestamp":131172700212,"id":73,"parentId":33,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":633506,"timestamp":131172687866,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":633503,"timestamp":131172700404,"id":79,"parentId":39,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":645026,"timestamp":131172688937,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778939144935,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":642915,"timestamp":131172700414,"id":80,"parentId":40,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":654364,"timestamp":131172689018,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778939144935,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":643255,"timestamp":131172700442,"id":82,"parentId":44,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":654020,"timestamp":131172689723,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778939144936,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":643824,"timestamp":131172700428,"id":81,"parentId":42,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":655023,"timestamp":131172689298,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778939144936,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":644053,"timestamp":131172700451,"id":83,"parentId":45,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":654700,"timestamp":131172689861,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778939144936,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":647971,"timestamp":131172699229,"id":66,"parentId":25,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":660363,"timestamp":131172686882,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778939144933,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":648202,"timestamp":131172700478,"id":85,"parentId":47,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":657493,"timestamp":131172691232,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":653484,"timestamp":131172700513,"id":88,"parentId":50,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":662597,"timestamp":131172691457,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":653725,"timestamp":131172700500,"id":87,"parentId":49,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":662855,"timestamp":131172691399,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":659992,"timestamp":131172699824,"id":70,"parentId":29,"tags":{},"startTime":1778939144946,"traceId":"45607791fce15510"},{"name":"check-page","duration":672519,"timestamp":131172687340,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":663830,"timestamp":131172700291,"id":74,"parentId":34,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":676189,"timestamp":131172687983,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":661527,"timestamp":131172706715,"id":91,"parentId":31,"tags":{},"startTime":1778939144953,"traceId":"45607791fce15510"},{"name":"check-page","duration":680767,"timestamp":131172687525,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778939144934,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":667988,"timestamp":131172700465,"id":84,"parentId":46,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":677456,"timestamp":131172691031,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778939144937,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":668324,"timestamp":131172700491,"id":86,"parentId":48,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":677530,"timestamp":131172691321,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":671222,"timestamp":131172707574,"id":92,"parentId":41,"tags":{},"startTime":1778939144954,"traceId":"45607791fce15510"},{"name":"check-page","duration":689785,"timestamp":131172689109,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778939144935,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":678583,"timestamp":131172700526,"id":89,"parentId":51,"tags":{},"startTime":1778939144947,"traceId":"45607791fce15510"},{"name":"check-page","duration":687645,"timestamp":131172691506,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":670344,"timestamp":131172708944,"id":93,"parentId":43,"tags":{},"startTime":1778939144955,"traceId":"45607791fce15510"},{"name":"check-page","duration":689891,"timestamp":131172689429,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778939144936,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":674128,"timestamp":131172705313,"id":90,"parentId":24,"tags":{},"startTime":1778939144952,"traceId":"45607791fce15510"},{"name":"check-page","duration":694497,"timestamp":131172684970,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778939144931,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":673544,"timestamp":131172720170,"id":99,"parentId":56,"tags":{},"startTime":1778939144966,"traceId":"45607791fce15510"},{"name":"check-page","duration":701243,"timestamp":131172692525,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778939144939,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":701250,"timestamp":131172720320,"id":101,"parentId":59,"tags":{},"startTime":1778939144967,"traceId":"45607791fce15510"},{"name":"check-page","duration":728234,"timestamp":131172693417,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778939144940,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":709965,"timestamp":131172720345,"id":102,"parentId":61,"tags":{},"startTime":1778939144967,"traceId":"45607791fce15510"},{"name":"check-page","duration":736355,"timestamp":131172694052,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778939144940,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":723738,"timestamp":131172720124,"id":96,"parentId":53,"tags":{},"startTime":1778939144966,"traceId":"45607791fce15510"},{"name":"check-page","duration":751997,"timestamp":131172691941,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":725033,"timestamp":131172720361,"id":103,"parentId":62,"tags":{},"startTime":1778939144967,"traceId":"45607791fce15510"},{"name":"check-page","duration":751253,"timestamp":131172694205,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778939144940,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":731869,"timestamp":131172720105,"id":95,"parentId":52,"tags":{},"startTime":1778939144966,"traceId":"45607791fce15510"},{"name":"check-page","duration":760282,"timestamp":131172691794,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":732125,"timestamp":131172720373,"id":104,"parentId":63,"tags":{},"startTime":1778939144967,"traceId":"45607791fce15510"},{"name":"check-page","duration":758186,"timestamp":131172694361,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778939144941,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":732927,"timestamp":131172720389,"id":105,"parentId":60,"tags":{},"startTime":1778939144967,"traceId":"45607791fce15510"},{"name":"check-page","duration":759754,"timestamp":131172693606,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778939144940,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":738834,"timestamp":131172720186,"id":100,"parentId":58,"tags":{},"startTime":1778939144966,"traceId":"45607791fce15510"},{"name":"check-page","duration":765857,"timestamp":131172693215,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778939144939,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":739434,"timestamp":131172720151,"id":98,"parentId":55,"tags":{},"startTime":1778939144966,"traceId":"45607791fce15510"},{"name":"check-page","duration":767345,"timestamp":131172692308,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778939144939,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":726410,"timestamp":131172733729,"id":106,"parentId":57,"tags":{},"startTime":1778939144980,"traceId":"45607791fce15510"},{"name":"check-page","duration":767390,"timestamp":131172692781,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778939144939,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":764822,"timestamp":131172720068,"id":94,"parentId":23,"tags":{},"startTime":1778939144966,"traceId":"45607791fce15510"},{"name":"check-page","duration":800166,"timestamp":131172684791,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778939144931,"traceId":"45607791fce15510"},{"name":"is-page-static","duration":766847,"timestamp":131172720136,"id":97,"parentId":54,"tags":{},"startTime":1778939144966,"traceId":"45607791fce15510"},{"name":"check-page","duration":794942,"timestamp":131172692115,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778939144938,"traceId":"45607791fce15510"},{"name":"static-check","duration":805636,"timestamp":131172681464,"id":19,"parentId":1,"tags":{},"startTime":1778939144928,"traceId":"45607791fce15510"}]
2
- [{"name":"write-routes-manifest","duration":720,"timestamp":131173499378,"id":108,"parentId":1,"tags":{},"startTime":1778939145746,"traceId":"45607791fce15510"},{"name":"load-dotenv","duration":50,"timestamp":131173513223,"id":111,"parentId":110,"tags":{},"startTime":1778939145759,"traceId":"45607791fce15510"},{"name":"run-export-path-map","duration":632,"timestamp":131173516156,"id":112,"parentId":110,"tags":{},"startTime":1778939145762,"traceId":"45607791fce15510"},{"name":"next-export","duration":679486,"timestamp":131173511988,"id":110,"parentId":1,"tags":{},"startTime":1778939145758,"traceId":"45607791fce15510"},{"name":"move-exported-app-not-found-","duration":552,"timestamp":131174194553,"id":113,"parentId":109,"tags":{},"startTime":1778939146441,"traceId":"45607791fce15510"},{"name":"move-exported-app-global-error-","duration":380,"timestamp":131174195192,"id":114,"parentId":109,"tags":{},"startTime":1778939146441,"traceId":"45607791fce15510"},{"name":"static-generation","duration":693405,"timestamp":131173504483,"id":109,"parentId":1,"tags":{},"startTime":1778939145751,"traceId":"45607791fce15510"},{"name":"write-routes-manifest","duration":582,"timestamp":131174198239,"id":115,"parentId":1,"tags":{},"startTime":1778939146445,"traceId":"45607791fce15510"},{"name":"print-tree-view","duration":4255,"timestamp":131174206204,"id":116,"parentId":1,"tags":{},"startTime":1778939146452,"traceId":"45607791fce15510"},{"name":"write-route-bundle-stats","duration":15878,"timestamp":131174210483,"id":117,"parentId":1,"tags":{},"startTime":1778939146457,"traceId":"45607791fce15510"},{"name":"telemetry-flush","duration":26224,"timestamp":131174226385,"id":118,"parentId":1,"tags":{},"startTime":1778939146473,"traceId":"45607791fce15510"},{"name":"next-build","duration":17907473,"timestamp":131156345177,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778939128591,"traceId":"45607791fce15510"}]
1
+ [{"name":"generate-buildid","duration":289,"timestamp":131859220990,"id":4,"parentId":1,"tags":{},"startTime":1778939831467,"traceId":"2c89ced662eff440"},{"name":"load-custom-routes","duration":457,"timestamp":131859221415,"id":5,"parentId":1,"tags":{},"startTime":1778939831468,"traceId":"2c89ced662eff440"},{"name":"create-dist-dir","duration":660,"timestamp":131859221913,"id":6,"parentId":1,"tags":{},"startTime":1778939831468,"traceId":"2c89ced662eff440"},{"name":"clean","duration":31729,"timestamp":131859223259,"id":7,"parentId":1,"tags":{},"startTime":1778939831470,"traceId":"2c89ced662eff440"},{"name":"discover-routes","duration":23601,"timestamp":131859339277,"id":8,"parentId":1,"tags":{},"startTime":1778939831586,"traceId":"2c89ced662eff440"},{"name":"create-root-mapping","duration":141,"timestamp":131859362939,"id":9,"parentId":1,"tags":{},"startTime":1778939831609,"traceId":"2c89ced662eff440"},{"name":"generate-route-types","duration":18967,"timestamp":131859365447,"id":10,"parentId":1,"tags":{},"startTime":1778939831612,"traceId":"2c89ced662eff440"},{"name":"public-dir-conflict-check","duration":99,"timestamp":131859384490,"id":11,"parentId":1,"tags":{},"startTime":1778939831631,"traceId":"2c89ced662eff440"},{"name":"generate-routes-manifest","duration":4708,"timestamp":131859384700,"id":12,"parentId":1,"tags":{},"startTime":1778939831631,"traceId":"2c89ced662eff440"},{"name":"run-turbopack","duration":6439608,"timestamp":131859395194,"id":14,"parentId":1,"tags":{},"startTime":1778939831641,"traceId":"2c89ced662eff440"},{"name":"turbopack-build-events","duration":95,"timestamp":131859691202,"id":15,"parentId":1,"tags":{},"startTime":1778939831937,"traceId":"2c89ced662eff440"},{"name":"run-typescript","duration":10262708,"timestamp":131865851445,"id":16,"parentId":1,"tags":{},"startTime":1778939838098,"traceId":"2c89ced662eff440"},{"name":"generate-required-server-files","duration":3283,"timestamp":131876115165,"id":18,"parentId":1,"tags":{},"startTime":1778939848361,"traceId":"2c89ced662eff440"},{"name":"check-static-error-page","duration":16032,"timestamp":131876325265,"id":20,"parentId":19,"tags":{},"startTime":1778939848572,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":624279,"timestamp":131876345837,"id":65,"parentId":22,"tags":{},"startTime":1778939848592,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":641093,"timestamp":131876329180,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778939848575,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":761884,"timestamp":131876346741,"id":71,"parentId":30,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":775860,"timestamp":131876332865,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778939848579,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":765034,"timestamp":131876346595,"id":70,"parentId":29,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":779199,"timestamp":131876332511,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778939848579,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":766479,"timestamp":131876345440,"id":64,"parentId":21,"tags":{},"startTime":1778939848592,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":784438,"timestamp":131876327516,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778939848574,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":770715,"timestamp":131876346802,"id":72,"parentId":32,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":784245,"timestamp":131876333322,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778939848580,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":774217,"timestamp":131876346013,"id":66,"parentId":25,"tags":{},"startTime":1778939848592,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":788258,"timestamp":131876332020,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778939848578,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":798725,"timestamp":131876346231,"id":68,"parentId":27,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":817605,"timestamp":131876332292,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778939848579,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":803370,"timestamp":131876346976,"id":73,"parentId":33,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":816932,"timestamp":131876333465,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778939848580,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":814998,"timestamp":131876347111,"id":76,"parentId":36,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":827835,"timestamp":131876334349,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778939848581,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":822902,"timestamp":131876347090,"id":75,"parentId":35,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":836283,"timestamp":131876333788,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778939848580,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":823087,"timestamp":131876347163,"id":79,"parentId":39,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":835505,"timestamp":131876334786,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778939848581,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":828839,"timestamp":131876347137,"id":77,"parentId":37,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":841509,"timestamp":131876334530,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778939848581,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":829147,"timestamp":131876347180,"id":80,"parentId":40,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":841465,"timestamp":131876334901,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778939848581,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":834604,"timestamp":131876347150,"id":78,"parentId":38,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":847144,"timestamp":131876334654,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778939848581,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":834743,"timestamp":131876347216,"id":83,"parentId":45,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":844469,"timestamp":131876337524,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778939848584,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":834930,"timestamp":131876347203,"id":82,"parentId":44,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":846654,"timestamp":131876335513,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778939848582,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":839360,"timestamp":131876347238,"id":85,"parentId":47,"tags":{},"startTime":1778939848594,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":848966,"timestamp":131876337691,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778939848584,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":844512,"timestamp":131876347066,"id":74,"parentId":34,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":858032,"timestamp":131876333591,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778939848580,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":844485,"timestamp":131876347261,"id":87,"parentId":49,"tags":{},"startTime":1778939848594,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":853942,"timestamp":131876337832,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778939848584,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":848525,"timestamp":131876347193,"id":81,"parentId":42,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":860560,"timestamp":131876335221,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778939848581,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":853152,"timestamp":131876347274,"id":88,"parentId":50,"tags":{},"startTime":1778939848594,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":862577,"timestamp":131876337897,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778939848584,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":853848,"timestamp":131876347229,"id":84,"parentId":46,"tags":{},"startTime":1778939848594,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":863500,"timestamp":131876337620,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778939848584,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":849296,"timestamp":131876354307,"id":90,"parentId":24,"tags":{},"startTime":1778939848601,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":874008,"timestamp":131876329640,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778939848576,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":849230,"timestamp":131876358887,"id":91,"parentId":31,"tags":{},"startTime":1778939848605,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":875143,"timestamp":131876333029,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778939848579,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":861900,"timestamp":131876347250,"id":86,"parentId":48,"tags":{},"startTime":1778939848594,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":871447,"timestamp":131876337748,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778939848584,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":848825,"timestamp":131876361056,"id":93,"parentId":43,"tags":{},"startTime":1778939848607,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":874608,"timestamp":131876335315,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778939848582,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":864045,"timestamp":131876347285,"id":89,"parentId":51,"tags":{},"startTime":1778939848594,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":873432,"timestamp":131876337949,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778939848584,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":844476,"timestamp":131876369265,"id":94,"parentId":23,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":884334,"timestamp":131876329452,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778939848576,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":855823,"timestamp":131876359779,"id":92,"parentId":41,"tags":{},"startTime":1778939848606,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":880677,"timestamp":131876334972,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778939848581,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":851736,"timestamp":131876369339,"id":98,"parentId":55,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":882304,"timestamp":131876338813,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778939848585,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":859777,"timestamp":131876369363,"id":100,"parentId":58,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":889377,"timestamp":131876339807,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778939848586,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":884860,"timestamp":131876346339,"id":69,"parentId":28,"tags":{},"startTime":1778939848593,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":898843,"timestamp":131876332406,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778939848579,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":870578,"timestamp":131876369488,"id":101,"parentId":59,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":900090,"timestamp":131876340054,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778939848586,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":881921,"timestamp":131876369521,"id":103,"parentId":62,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":910645,"timestamp":131876340845,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778939848587,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":889900,"timestamp":131876369531,"id":104,"parentId":63,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":918448,"timestamp":131876341031,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778939848587,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":914302,"timestamp":131876346126,"id":67,"parentId":26,"tags":{},"startTime":1778939848592,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":928304,"timestamp":131876332181,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778939848578,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":878151,"timestamp":131876388546,"id":105,"parentId":60,"tags":{},"startTime":1778939848635,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":926493,"timestamp":131876340246,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778939848587,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":899076,"timestamp":131876369315,"id":96,"parentId":53,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":929995,"timestamp":131876338440,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778939848585,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":908554,"timestamp":131876369353,"id":99,"parentId":56,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":938888,"timestamp":131876339065,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778939848585,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":917427,"timestamp":131876369299,"id":95,"parentId":52,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":948512,"timestamp":131876338264,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778939848585,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":917996,"timestamp":131876369325,"id":97,"parentId":54,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":948768,"timestamp":131876338601,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778939848585,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":943030,"timestamp":131876369508,"id":102,"parentId":61,"tags":{},"startTime":1778939848616,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":971906,"timestamp":131876340688,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778939848587,"traceId":"2c89ced662eff440"},{"name":"is-page-static","duration":898731,"timestamp":131876418997,"id":106,"parentId":57,"tags":{},"startTime":1778939848665,"traceId":"2c89ced662eff440"},{"name":"check-page","duration":978470,"timestamp":131876339305,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778939848586,"traceId":"2c89ced662eff440"},{"name":"static-check","duration":993753,"timestamp":131876324056,"id":19,"parentId":1,"tags":{},"startTime":1778939848570,"traceId":"2c89ced662eff440"}]
2
+ [{"name":"write-routes-manifest","duration":491,"timestamp":131877328266,"id":108,"parentId":1,"tags":{},"startTime":1778939849575,"traceId":"2c89ced662eff440"},{"name":"load-dotenv","duration":54,"timestamp":131877340310,"id":111,"parentId":110,"tags":{},"startTime":1778939849587,"traceId":"2c89ced662eff440"},{"name":"run-export-path-map","duration":619,"timestamp":131877342772,"id":112,"parentId":110,"tags":{},"startTime":1778939849589,"traceId":"2c89ced662eff440"},{"name":"next-export","duration":650230,"timestamp":131877339072,"id":110,"parentId":1,"tags":{},"startTime":1778939849585,"traceId":"2c89ced662eff440"},{"name":"move-exported-app-not-found-","duration":758,"timestamp":131877993632,"id":113,"parentId":109,"tags":{},"startTime":1778939850240,"traceId":"2c89ced662eff440"},{"name":"move-exported-app-global-error-","duration":691,"timestamp":131877994528,"id":114,"parentId":109,"tags":{},"startTime":1778939850241,"traceId":"2c89ced662eff440"},{"name":"static-generation","duration":664066,"timestamp":131877333322,"id":109,"parentId":1,"tags":{},"startTime":1778939849580,"traceId":"2c89ced662eff440"},{"name":"write-routes-manifest","duration":411,"timestamp":131877997619,"id":115,"parentId":1,"tags":{},"startTime":1778939850244,"traceId":"2c89ced662eff440"},{"name":"print-tree-view","duration":5496,"timestamp":131878016830,"id":116,"parentId":1,"tags":{},"startTime":1778939850263,"traceId":"2c89ced662eff440"},{"name":"write-route-bundle-stats","duration":15861,"timestamp":131878022371,"id":117,"parentId":1,"tags":{},"startTime":1778939850269,"traceId":"2c89ced662eff440"},{"name":"telemetry-flush","duration":19802,"timestamp":131878038278,"id":118,"parentId":1,"tags":{},"startTime":1778939850285,"traceId":"2c89ced662eff440"},{"name":"next-build","duration":18888752,"timestamp":131859169363,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778939831416,"traceId":"2c89ced662eff440"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6283510,"timestamp":131156588724,"id":14,"parentId":1,"tags":{},"startTime":1778939128835,"traceId":"45607791fce15510"},{"name":"turbopack-build-events","duration":102,"timestamp":131156892092,"id":15,"parentId":1,"tags":{},"startTime":1778939129138,"traceId":"45607791fce15510"},{"name":"run-typescript","duration":9636823,"timestamp":131162880746,"id":16,"parentId":1,"tags":{},"startTime":1778939135127,"traceId":"45607791fce15510"},{"name":"static-check","duration":805636,"timestamp":131172681464,"id":19,"parentId":1,"tags":{},"startTime":1778939144928,"traceId":"45607791fce15510"},{"name":"static-generation","duration":693405,"timestamp":131173504483,"id":109,"parentId":1,"tags":{},"startTime":1778939145751,"traceId":"45607791fce15510"},{"name":"telemetry-flush","duration":26224,"timestamp":131174226385,"id":118,"parentId":1,"tags":{},"startTime":1778939146473,"traceId":"45607791fce15510"},{"name":"next-build","duration":17907473,"timestamp":131156345177,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778939128591,"traceId":"45607791fce15510"}]
1
+ [{"name":"run-turbopack","duration":6439608,"timestamp":131859395194,"id":14,"parentId":1,"tags":{},"startTime":1778939831641,"traceId":"2c89ced662eff440"},{"name":"turbopack-build-events","duration":95,"timestamp":131859691202,"id":15,"parentId":1,"tags":{},"startTime":1778939831937,"traceId":"2c89ced662eff440"},{"name":"run-typescript","duration":10262708,"timestamp":131865851445,"id":16,"parentId":1,"tags":{},"startTime":1778939838098,"traceId":"2c89ced662eff440"},{"name":"static-check","duration":993753,"timestamp":131876324056,"id":19,"parentId":1,"tags":{},"startTime":1778939848570,"traceId":"2c89ced662eff440"},{"name":"static-generation","duration":664066,"timestamp":131877333322,"id":109,"parentId":1,"tags":{},"startTime":1778939849580,"traceId":"2c89ced662eff440"},{"name":"telemetry-flush","duration":19802,"timestamp":131878038278,"id":118,"parentId":1,"tags":{},"startTime":1778939850285,"traceId":"2c89ced662eff440"},{"name":"next-build","duration":18888752,"timestamp":131859169363,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778939831416,"traceId":"2c89ced662eff440"}]
@@ -1026,6 +1026,18 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1026
1026
  // navigation footer. Drives the on-hover opacity boost + underline
1027
1027
  // that signals interactivity, mirroring the hoveredHub idiom above.
1028
1028
  const [hoveredRecentMore, setHoveredRecentMore] = useState(false);
1029
+ // Round 346 / Loop: minimap-container hover affordance. The minimap
1030
+ // is a click-target (role=button at line ~7810, recenter-on-click +
1031
+ // Enter→resetView) but pre-R346 nothing visually changed on hover —
1032
+ // the only hint was the `cursor: crosshair` style. R346 lifts the
1033
+ // viewport rect (strokeWidth 1.5 → 1.75 + opacity 0.9 → 1.0) when
1034
+ // the user enters the minimap, marking "this is the recenter target
1035
+ // and it's alive". Sibling polish to the R332 minimap rounded-md →
1036
+ // rounded-lg corner family — that round refined geometry, this one
1037
+ // gives the viewport indicator inside the geometry a hover state.
1038
+ // 280ms ease-out transition list matches R199 smoothView vocabulary
1039
+ // so the visual joins the existing rhythm on the same rect.
1040
+ const [hoveredMinimap, setHoveredMinimap] = useState(false);
1029
1041
  // R135: panel-wide hover-elevation. The recent-signal + legend
1030
1042
  // panels both already host clickable rows (R56/R116 recent rows,
1031
1043
  // R55/R61 legend rows) and a clickable footer (R133), so the
@@ -6276,7 +6288,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6276
6288
  title (line ~6556) — both panels share the same
6277
6289
  editorial-text-spacing convention. data-recent-panel-
6278
6290
  title handle unchanged so R266 test still resolves. */}
6279
- <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing="0.3" style={{ transition: 'fill 200ms ease-out' }} data-recent-panel-title>recent signal</text>
6291
+ {/* Round 345 / Loop: recent-signal panel title gains
6292
+ letter-spacing tween 0.3 → 0.4 on panel hover.
6293
+ hoveredPanel === 'recent' is set by the panel <g>
6294
+ wrapper's onMouseEnter (line ~6263 area). Sibling to
6295
+ R344 hover-letter-spacing applied to the +N more
6296
+ flows footer — same gesture vocabulary at a panel-
6297
+ title scope: hovering the panel chrome spreads the
6298
+ title 0.1 px, signalling "this is a coherent unit
6299
+ you're entering". transition list extends letter-
6300
+ spacing 200ms ease-out alongside existing fill 200ms. */}
6301
+ <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing={hoveredPanel === 'recent' ? '0.4' : '0.3'} style={{ transition: 'fill 200ms ease-out, letter-spacing 200ms ease-out' }} data-recent-panel-title>recent signal</text>
6280
6302
  {/* R96: header count now matches what the rows show. Pre-R96
6281
6303
  this read "X msgs" off the raw messages array, but the
6282
6304
  rows below render DEDUPED flowLinks — so a fleet with 10
@@ -7209,7 +7231,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7209
7231
  surrounding chrome eased; R266 closes both at once. */}
7210
7232
  {/* R301: sibling to recent-signal panel title above —
7211
7233
  same letterSpacing 0.3 for editorial parity. */}
7212
- <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing="0.3" style={{ transition: 'fill 200ms ease-out' }} data-legend-panel-title>legend</text>
7234
+ {/* R345 sibling legend panel title same hover letter-
7235
+ spacing tween 0.3 → 0.4 on panel hover. */}
7236
+ <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing={hoveredPanel === 'legend' ? '0.4' : '0.3'} style={{ transition: 'fill 200ms ease-out, letter-spacing 200ms ease-out' }} data-legend-panel-title>legend</text>
7213
7237
  {/* Round 257 / Loop: legend panel header count picks up the
7214
7238
  symmetric 13L/13R inner-padding pattern from the recent-
7215
7239
  signal panel. Pre-R257 the legend header was 13px from
@@ -7815,7 +7839,13 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7815
7839
  resetView();
7816
7840
  }
7817
7841
  }}
7842
+ // R346: viewport rect hover affordance driven by parent.
7843
+ onMouseEnter={() => setHoveredMinimap(true)}
7844
+ onMouseLeave={() => setHoveredMinimap(false)}
7845
+ onFocus={() => setHoveredMinimap(true)}
7846
+ onBlur={() => setHoveredMinimap(false)}
7818
7847
  data-topo-minimap
7848
+ data-topo-minimap-hovered={hoveredMinimap ? 'true' : 'false'}
7819
7849
  >
7820
7850
  <svg width={MW} height={MH} viewBox={`0 0 ${MW} ${MH}`} style={{ display: 'block' }}>
7821
7851
  {/* Round 198 / Loop: minimap dots gain smooth status
@@ -7894,13 +7924,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7894
7924
  x={Math.max(0, rectX)} y={Math.max(0, rectY)}
7895
7925
  width={Math.max(0, Math.min(MW - Math.max(0, rectX), rectW))}
7896
7926
  height={Math.max(0, Math.min(MH - Math.max(0, rectY), rectH))}
7897
- fill="none" stroke={pal.legendAccent} strokeWidth="1.5" opacity="0.9"
7927
+ fill="none" stroke={pal.legendAccent}
7928
+ // R346: strokeWidth + opacity tween on container hover.
7929
+ strokeWidth={hoveredMinimap ? '1.75' : '1.5'}
7930
+ opacity={hoveredMinimap ? '1' : '0.9'}
7898
7931
  data-topo-minimap-viewport
7899
7932
  data-topo-minimap-viewport-smooth={smoothView ? 'true' : 'false'}
7933
+ data-topo-minimap-viewport-hover={hoveredMinimap ? 'true' : 'false'}
7900
7934
  style={{
7901
7935
  transition: smoothView
7902
- ? 'x 280ms ease-out, y 280ms ease-out, width 280ms ease-out, height 280ms ease-out'
7903
- : 'none',
7936
+ ? 'x 280ms ease-out, y 280ms ease-out, width 280ms ease-out, height 280ms ease-out, stroke-width 200ms ease-out, opacity 200ms ease-out'
7937
+ : 'stroke-width 200ms ease-out, opacity 200ms ease-out',
7904
7938
  } as React.CSSProperties}
7905
7939
  />
7906
7940
  </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.5",
3
+ "version": "0.5.1-preview.7",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,109 @@
1
+ /* Round 346 verification: minimap viewport rect gains a hover-state
2
+ * affordance — strokeWidth 1.5 → 1.75 + opacity 0.9 → 1.0 when the
3
+ * user enters the minimap container. The minimap is a recenter click-
4
+ * target (role=button at line ~7810), but pre-R346 the only hover hint
5
+ * was `cursor: crosshair`. R346 lifts the viewport rect to mark "this
6
+ * is the recenter target and it's alive". Sibling polish to R332
7
+ * minimap rounded-md → rounded-lg corner family — that round refined
8
+ * geometry, this one gives the viewport indicator inside the geometry
9
+ * a hover state.
10
+ *
11
+ * Contract:
12
+ * - Rest: viewport rect stroke-width=1.5, opacity=0.9.
13
+ * - Hover container: stroke-width=1.75, opacity=1.
14
+ * - Inline transition list contains 'stroke-width' AND 'opacity'.
15
+ * - data-topo-minimap-hovered toggles 'false' → 'true' on enter.
16
+ * - data-topo-minimap-viewport-hover mirrors hover state on the rect.
17
+ * - Pre-R346 invariants intact: rect still data-topo-minimap-viewport,
18
+ * R287 stroke=1.5 rest value, R199 smoothView transition list
19
+ * extended (not replaced).
20
+ */
21
+ import { chromium } from 'playwright';
22
+ import { readFileSync } from 'node:fs';
23
+
24
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
25
+ const browser = await chromium.launch({ headless: true });
26
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
27
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
28
+ await ctx.addInitScript(() => {
29
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
30
+ });
31
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
32
+ await ctx.route('**/api/hub/status*', async (route) => {
33
+ const r = await route.fetch();
34
+ const b = await r.json();
35
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
36
+ const mk = (alias) => ({
37
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
38
+ 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
+ mk('alpha-1'), mk('alpha-2'), mk('alpha-3'),
43
+ mk('beta-1'), mk('beta-2'), mk('beta-3'),
44
+ mk('gamma-1'), mk('gamma-2'), mk('gamma-3'),
45
+ ] } });
46
+ });
47
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
48
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
49
+
50
+ const page = await ctx.newPage();
51
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
52
+ // Minimap only mounts when view is non-default (zoom !== 1 or pan).
53
+ // Click zoom-in to trigger mount.
54
+ await page.waitForSelector('[data-topo-chrome-zoom-in]', { timeout: 15000 });
55
+ await page.click('[data-topo-chrome-zoom-in]');
56
+ await page.waitForTimeout(200);
57
+ await page.click('[data-topo-chrome-zoom-in]');
58
+ await page.waitForSelector('[data-topo-minimap-viewport]', { timeout: 5000 });
59
+ await page.waitForTimeout(400);
60
+
61
+ // Rest probe.
62
+ const restProbe = await page.evaluate(() => {
63
+ const rect = document.querySelector('[data-topo-minimap-viewport]');
64
+ const container = document.querySelector('[data-topo-minimap]');
65
+ return {
66
+ strokeWidth: rect?.getAttribute('stroke-width') ?? null,
67
+ opacity: rect?.getAttribute('opacity') ?? null,
68
+ transition: rect ? getComputedStyle(rect).transition : null,
69
+ rectHoverAttr: rect?.getAttribute('data-topo-minimap-viewport-hover') ?? null,
70
+ contHoverAttr: container?.getAttribute('data-topo-minimap-hovered') ?? null,
71
+ };
72
+ });
73
+
74
+ // Hover the minimap container.
75
+ await page.hover('[data-topo-minimap]');
76
+ await page.waitForTimeout(250);
77
+ const hoverProbe = await page.evaluate(() => {
78
+ const rect = document.querySelector('[data-topo-minimap-viewport]');
79
+ const container = document.querySelector('[data-topo-minimap]');
80
+ return {
81
+ strokeWidth: rect?.getAttribute('stroke-width') ?? null,
82
+ opacity: rect?.getAttribute('opacity') ?? null,
83
+ rectHoverAttr: rect?.getAttribute('data-topo-minimap-viewport-hover') ?? null,
84
+ contHoverAttr: container?.getAttribute('data-topo-minimap-hovered') ?? null,
85
+ };
86
+ });
87
+
88
+ await browser.close();
89
+
90
+ const hasTrans = (s, prop) =>
91
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
92
+
93
+ const results = {
94
+ rest_sw_1_5: restProbe.strokeWidth === '1.5',
95
+ rest_op_0_9: restProbe.opacity === '0.9',
96
+ rest_cont_false: restProbe.contHoverAttr === 'false',
97
+ rest_rect_false: restProbe.rectHoverAttr === 'false',
98
+ trans_has_strokew: hasTrans(restProbe.transition, 'stroke-width'),
99
+ trans_has_opacity: hasTrans(restProbe.transition, 'opacity'),
100
+ hover_sw_1_75: hoverProbe.strokeWidth === '1.75',
101
+ hover_op_1: hoverProbe.opacity === '1',
102
+ hover_cont_true: hoverProbe.contHoverAttr === 'true',
103
+ hover_rect_true: hoverProbe.rectHoverAttr === 'true',
104
+ };
105
+ const ok = Object.values(results).every(Boolean);
106
+ console.log(`${ok ? '✅' : '❌'} minimap viewport hover affordance:`, JSON.stringify(results),
107
+ '\n rest: ', restProbe,
108
+ '\n hover:', hoverProbe);
109
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,97 @@
1
+ /* Round 345 verification: panel titles ("recent signal" + "legend")
2
+ * gain letter-spacing tween 0.3 → 0.4 on panel hover. Sibling to
3
+ * R344 hover-letter-spacing applied to the +N more flows footer —
4
+ * same gesture vocabulary at panel-title scope.
5
+ *
6
+ * Contract:
7
+ * - Rest: both titles letterSpacing 0.3.
8
+ * - Hover recent panel: recent-panel-title letterSpacing 0.4.
9
+ * - Hover legend panel: legend-panel-title letterSpacing 0.4
10
+ * (separately).
11
+ * - Inline transition list contains 'letter-spacing' on both.
12
+ * - R344 footer hover regression intact (when flowLinks > 3).
13
+ * - R317/R318/R294 chrome + pulse regressions intact.
14
+ */
15
+ import { chromium } from 'playwright';
16
+ import { readFileSync } from 'node:fs';
17
+
18
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
19
+ const browser = await chromium.launch({ headless: true });
20
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
21
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
22
+ await ctx.addInitScript(() => {
23
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
24
+ });
25
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
26
+ await ctx.route('**/api/hub/status*', async (route) => {
27
+ const r = await route.fetch();
28
+ const b = await r.json();
29
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
30
+ const mk = (alias) => ({
31
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
32
+ network_id: nid, project_dir: null,
33
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
34
+ });
35
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('alpha'), mk('beta'), mk('gamma') ] } });
36
+ });
37
+ // One message → recent-signal panel mounts so its title is testable.
38
+ const now = Date.now();
39
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
40
+ { id: 'm1', from_alias: 'alpha', to_alias: 'beta', content: 'ping',
41
+ network_id: 'default', created_at: new Date(now - 5000).toISOString() },
42
+ ] } }));
43
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
44
+
45
+ const page = await ctx.newPage();
46
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
47
+ await page.waitForSelector('[data-recent-panel-title]', { timeout: 15000 });
48
+ await page.waitForSelector('[data-legend-panel-title]', { timeout: 5000 });
49
+ await page.waitForTimeout(300);
50
+
51
+ // Rest probe.
52
+ const restProbe = await page.evaluate(() => {
53
+ const r = document.querySelector('[data-recent-panel-title]');
54
+ const l = document.querySelector('[data-legend-panel-title]');
55
+ return {
56
+ recentLetterSp: r?.getAttribute('letter-spacing') ?? null,
57
+ recentTrans: r ? getComputedStyle(r).transition : null,
58
+ legendLetterSp: l?.getAttribute('letter-spacing') ?? null,
59
+ legendTrans: l ? getComputedStyle(l).transition : null,
60
+ };
61
+ });
62
+
63
+ // Hover the recent panel via its data attribute.
64
+ await page.hover('[data-topo-panel="recent"]');
65
+ await page.waitForTimeout(300);
66
+ const recentHoverProbe = await page.evaluate(() => {
67
+ const r = document.querySelector('[data-recent-panel-title]');
68
+ return { letterSp: r?.getAttribute('letter-spacing') ?? null };
69
+ });
70
+
71
+ // Move to legend panel.
72
+ await page.hover('[data-topo-panel="legend"]');
73
+ await page.waitForTimeout(300);
74
+ const legendHoverProbe = await page.evaluate(() => {
75
+ const l = document.querySelector('[data-legend-panel-title]');
76
+ return { letterSp: l?.getAttribute('letter-spacing') ?? null };
77
+ });
78
+
79
+ await browser.close();
80
+
81
+ const hasLetterSpacingTrans = (s) =>
82
+ /letter-spacing\s+\d*\.?\d*s|letter-spacing\s+\d+ms/i.test(s || '');
83
+
84
+ const results = {
85
+ rest_recent_0_3: restProbe.recentLetterSp === '0.3',
86
+ rest_legend_0_3: restProbe.legendLetterSp === '0.3',
87
+ recent_transition_has_ls: hasLetterSpacingTrans(restProbe.recentTrans),
88
+ legend_transition_has_ls: hasLetterSpacingTrans(restProbe.legendTrans),
89
+ hover_recent_0_4: recentHoverProbe.letterSp === '0.4',
90
+ hover_legend_0_4: legendHoverProbe.letterSp === '0.4',
91
+ };
92
+ const ok = Object.values(results).every(Boolean);
93
+ console.log(`${ok ? '✅' : '❌'} panel title hover letter-spacing:`, JSON.stringify(results),
94
+ '\n rest: ', restProbe,
95
+ '\n hover recent:', recentHoverProbe,
96
+ '\n hover legend:', legendHoverProbe);
97
+ process.exit(ok ? 0 : 1);