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

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/{0bja1amnrg3li.js → 08fc_cz1nk7b9.js} +1 -1
  130. package/.next/static/chunks/{0wtq_6dnzems6.js → 0e0okm.affulg.js} +1 -1
  131. package/.next/static/chunks/0s3vtwfo26_t6.js +4 -0
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +36 -3
  135. package/package.json +1 -1
  136. package/scripts/topo-panel-rect-opacity-hover-test.mjs +109 -0
  137. package/scripts/topo-zoom-level-hover-letterspacing-test.mjs +91 -0
  138. package/.next/static/chunks/0k~uc0~~19hyy.js +0 -4
  139. /package/.next/static/{x9zCCrMkHsIYlXNY791KF → egukPz1ctU--4WnT2FpEU}/_buildManifest.js +0 -0
  140. /package/.next/static/{x9zCCrMkHsIYlXNY791KF → egukPz1ctU--4WnT2FpEU}/_clientMiddlewareManifest.js +0 -0
  141. /package/.next/static/{x9zCCrMkHsIYlXNY791KF → egukPz1ctU--4WnT2FpEU}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
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"}]
1
+ [{"name":"generate-buildid","duration":447,"timestamp":132518900811,"id":4,"parentId":1,"tags":{},"startTime":1778940491147,"traceId":"184891eafdae4ee7"},{"name":"load-custom-routes","duration":743,"timestamp":132518901468,"id":5,"parentId":1,"tags":{},"startTime":1778940491148,"traceId":"184891eafdae4ee7"},{"name":"create-dist-dir","duration":776,"timestamp":132518902270,"id":6,"parentId":1,"tags":{},"startTime":1778940491149,"traceId":"184891eafdae4ee7"},{"name":"clean","duration":35801,"timestamp":132518903799,"id":7,"parentId":1,"tags":{},"startTime":1778940491150,"traceId":"184891eafdae4ee7"},{"name":"discover-routes","duration":9905,"timestamp":132519027970,"id":8,"parentId":1,"tags":{},"startTime":1778940491274,"traceId":"184891eafdae4ee7"},{"name":"create-root-mapping","duration":173,"timestamp":132519037947,"id":9,"parentId":1,"tags":{},"startTime":1778940491284,"traceId":"184891eafdae4ee7"},{"name":"generate-route-types","duration":36560,"timestamp":132519041090,"id":10,"parentId":1,"tags":{},"startTime":1778940491287,"traceId":"184891eafdae4ee7"},{"name":"public-dir-conflict-check","duration":107,"timestamp":132519077752,"id":11,"parentId":1,"tags":{},"startTime":1778940491324,"traceId":"184891eafdae4ee7"},{"name":"generate-routes-manifest","duration":4531,"timestamp":132519077972,"id":12,"parentId":1,"tags":{},"startTime":1778940491324,"traceId":"184891eafdae4ee7"},{"name":"run-turbopack","duration":5793226,"timestamp":132519093453,"id":14,"parentId":1,"tags":{},"startTime":1778940491340,"traceId":"184891eafdae4ee7"},{"name":"turbopack-build-events","duration":76,"timestamp":132519373081,"id":15,"parentId":1,"tags":{},"startTime":1778940491619,"traceId":"184891eafdae4ee7"},{"name":"run-typescript","duration":9575462,"timestamp":132524899403,"id":16,"parentId":1,"tags":{},"startTime":1778940497146,"traceId":"184891eafdae4ee7"},{"name":"generate-required-server-files","duration":2844,"timestamp":132534476090,"id":18,"parentId":1,"tags":{},"startTime":1778940506722,"traceId":"184891eafdae4ee7"},{"name":"check-static-error-page","duration":16230,"timestamp":132534678249,"id":20,"parentId":19,"tags":{},"startTime":1778940506925,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":475465,"timestamp":132534698731,"id":65,"parentId":22,"tags":{},"startTime":1778940506945,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":492611,"timestamp":132534681759,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778940506928,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":600745,"timestamp":132534699795,"id":71,"parentId":30,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":615247,"timestamp":132534685396,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778940506932,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":607573,"timestamp":132534699867,"id":72,"parentId":32,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":621446,"timestamp":132534686071,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778940506932,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":609482,"timestamp":132534699305,"id":69,"parentId":28,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":623642,"timestamp":132534685205,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778940506931,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":616116,"timestamp":132534700154,"id":74,"parentId":34,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":629941,"timestamp":132534686386,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778940506933,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":625965,"timestamp":132534699176,"id":68,"parentId":27,"tags":{},"startTime":1778940506945,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":640092,"timestamp":132534685115,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778940506931,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":626066,"timestamp":132534699614,"id":70,"parentId":29,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":640447,"timestamp":132534685286,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778940506932,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":628834,"timestamp":132534700072,"id":73,"parentId":33,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":642729,"timestamp":132534686243,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778940506933,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":630735,"timestamp":132534700216,"id":76,"parentId":36,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":643988,"timestamp":132534687037,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778940506933,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":631573,"timestamp":132534700246,"id":77,"parentId":37,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":644681,"timestamp":132534687191,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778940506933,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":645062,"timestamp":132534700188,"id":75,"parentId":35,"tags":{},"startTime":1778940506946,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":658741,"timestamp":132534686573,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778940506933,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":645337,"timestamp":132534700267,"id":78,"parentId":38,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":658356,"timestamp":132534687292,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778940506934,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":663598,"timestamp":132534700331,"id":82,"parentId":44,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":675883,"timestamp":132534688135,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778940506934,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":668550,"timestamp":132534700346,"id":83,"parentId":45,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":680687,"timestamp":132534688278,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778940506935,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":671581,"timestamp":132534698416,"id":64,"parentId":21,"tags":{},"startTime":1778940506945,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":689923,"timestamp":132534680136,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778940506926,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":675176,"timestamp":132534700302,"id":80,"parentId":40,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":688096,"timestamp":132534687434,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778940506934,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":675805,"timestamp":132534700359,"id":84,"parentId":46,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":687823,"timestamp":132534688394,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778940506935,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":676117,"timestamp":132534700285,"id":79,"parentId":39,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":689076,"timestamp":132534687360,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778940506934,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":682564,"timestamp":132534700315,"id":81,"parentId":42,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":695223,"timestamp":132534687730,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778940506934,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":688113,"timestamp":132534700419,"id":88,"parentId":50,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":697042,"timestamp":132534691534,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778940506938,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":688315,"timestamp":132534700407,"id":87,"parentId":49,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":697296,"timestamp":132534691457,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778940506938,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":677728,"timestamp":132534717018,"id":91,"parentId":31,"tags":{},"startTime":1778940506963,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":709131,"timestamp":132534685673,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778940506932,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":687225,"timestamp":132534707941,"id":90,"parentId":24,"tags":{},"startTime":1778940506954,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":712884,"timestamp":132534682330,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778940506929,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":699095,"timestamp":132534699042,"id":67,"parentId":26,"tags":{},"startTime":1778940506945,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":713190,"timestamp":132534684992,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778940506931,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":673775,"timestamp":132534729298,"id":93,"parentId":43,"tags":{},"startTime":1778940506976,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":715239,"timestamp":132534687876,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778940506934,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":702880,"timestamp":132534700392,"id":86,"parentId":48,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":712016,"timestamp":132534691290,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778940506938,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":703011,"timestamp":132534700434,"id":89,"parentId":51,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":711882,"timestamp":132534691596,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778940506938,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":688144,"timestamp":132534717886,"id":92,"parentId":41,"tags":{},"startTime":1778940506964,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":718560,"timestamp":132534687521,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778940506934,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":723626,"timestamp":132534698905,"id":66,"parentId":25,"tags":{},"startTime":1778940506945,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":737779,"timestamp":132534684809,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778940506931,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":738604,"timestamp":132534700376,"id":85,"parentId":47,"tags":{},"startTime":1778940506947,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":750550,"timestamp":132534688510,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778940506935,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":689398,"timestamp":132534759312,"id":100,"parentId":58,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":755512,"timestamp":132534693269,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778940506940,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":705907,"timestamp":132534759237,"id":95,"parentId":52,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":773285,"timestamp":132534691928,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778940506938,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":712779,"timestamp":132534759284,"id":98,"parentId":55,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":779759,"timestamp":132534692385,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778940506939,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":719417,"timestamp":132534759269,"id":97,"parentId":54,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":786495,"timestamp":132534692239,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778940506939,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":719779,"timestamp":132534759477,"id":102,"parentId":61,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":785445,"timestamp":132534693873,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778940506940,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":721241,"timestamp":132534759449,"id":101,"parentId":59,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":787299,"timestamp":132534693434,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778940506940,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":727848,"timestamp":132534759505,"id":104,"parentId":63,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":793179,"timestamp":132534694219,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778940506940,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":731232,"timestamp":132534759489,"id":103,"parentId":62,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":796707,"timestamp":132534694056,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778940506940,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":731793,"timestamp":132534759521,"id":105,"parentId":60,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":797801,"timestamp":132534693560,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778940506940,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":733303,"timestamp":132534759253,"id":96,"parentId":53,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":800529,"timestamp":132534692097,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778940506938,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":699305,"timestamp":132534794349,"id":106,"parentId":57,"tags":{},"startTime":1778940507041,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":800942,"timestamp":132534692747,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778940506939,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":739461,"timestamp":132534759186,"id":94,"parentId":23,"tags":{},"startTime":1778940507005,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":816625,"timestamp":132534682080,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778940506928,"traceId":"184891eafdae4ee7"},{"name":"is-page-static","duration":755936,"timestamp":132534759297,"id":99,"parentId":56,"tags":{},"startTime":1778940507006,"traceId":"184891eafdae4ee7"},{"name":"check-page","duration":822761,"timestamp":132534692542,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778940506939,"traceId":"184891eafdae4ee7"},{"name":"static-check","duration":838486,"timestamp":132534676869,"id":19,"parentId":1,"tags":{},"startTime":1778940506923,"traceId":"184891eafdae4ee7"}]
2
+ [{"name":"write-routes-manifest","duration":500,"timestamp":132535526735,"id":108,"parentId":1,"tags":{},"startTime":1778940507773,"traceId":"184891eafdae4ee7"},{"name":"load-dotenv","duration":44,"timestamp":132535537125,"id":111,"parentId":110,"tags":{},"startTime":1778940507783,"traceId":"184891eafdae4ee7"},{"name":"run-export-path-map","duration":788,"timestamp":132535539955,"id":112,"parentId":110,"tags":{},"startTime":1778940507786,"traceId":"184891eafdae4ee7"},{"name":"next-export","duration":601950,"timestamp":132535535886,"id":110,"parentId":1,"tags":{},"startTime":1778940507782,"traceId":"184891eafdae4ee7"},{"name":"move-exported-app-not-found-","duration":636,"timestamp":132536141559,"id":113,"parentId":109,"tags":{},"startTime":1778940508388,"traceId":"184891eafdae4ee7"},{"name":"move-exported-app-global-error-","duration":583,"timestamp":132536142304,"id":114,"parentId":109,"tags":{},"startTime":1778940508389,"traceId":"184891eafdae4ee7"},{"name":"static-generation","duration":614540,"timestamp":132535530601,"id":109,"parentId":1,"tags":{},"startTime":1778940507777,"traceId":"184891eafdae4ee7"},{"name":"write-routes-manifest","duration":399,"timestamp":132536145411,"id":115,"parentId":1,"tags":{},"startTime":1778940508392,"traceId":"184891eafdae4ee7"},{"name":"print-tree-view","duration":4302,"timestamp":132536163843,"id":116,"parentId":1,"tags":{},"startTime":1778940508410,"traceId":"184891eafdae4ee7"},{"name":"write-route-bundle-stats","duration":12966,"timestamp":132536168186,"id":117,"parentId":1,"tags":{},"startTime":1778940508414,"traceId":"184891eafdae4ee7"},{"name":"telemetry-flush","duration":25160,"timestamp":132536181185,"id":118,"parentId":1,"tags":{},"startTime":1778940508427,"traceId":"184891eafdae4ee7"},{"name":"next-build","duration":17360224,"timestamp":132518846156,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940491092,"traceId":"184891eafdae4ee7"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
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"}]
1
+ [{"name":"run-turbopack","duration":5793226,"timestamp":132519093453,"id":14,"parentId":1,"tags":{},"startTime":1778940491340,"traceId":"184891eafdae4ee7"},{"name":"turbopack-build-events","duration":76,"timestamp":132519373081,"id":15,"parentId":1,"tags":{},"startTime":1778940491619,"traceId":"184891eafdae4ee7"},{"name":"run-typescript","duration":9575462,"timestamp":132524899403,"id":16,"parentId":1,"tags":{},"startTime":1778940497146,"traceId":"184891eafdae4ee7"},{"name":"static-check","duration":838486,"timestamp":132534676869,"id":19,"parentId":1,"tags":{},"startTime":1778940506923,"traceId":"184891eafdae4ee7"},{"name":"static-generation","duration":614540,"timestamp":132535530601,"id":109,"parentId":1,"tags":{},"startTime":1778940507777,"traceId":"184891eafdae4ee7"},{"name":"telemetry-flush","duration":25160,"timestamp":132536181185,"id":118,"parentId":1,"tags":{},"startTime":1778940508427,"traceId":"184891eafdae4ee7"},{"name":"next-build","duration":17360224,"timestamp":132518846156,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940491092,"traceId":"184891eafdae4ee7"}]
@@ -1038,6 +1038,18 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1038
1038
  // 280ms ease-out transition list matches R199 smoothView vocabulary
1039
1039
  // so the visual joins the existing rhythm on the same rect.
1040
1040
  const [hoveredMinimap, setHoveredMinimap] = useState(false);
1041
+ // Round 347 / Loop: zoom-level readout hover-state letter-spacing
1042
+ // tween (0 → 0.5 px). The readout sandwiched between zoom-out /
1043
+ // zoom-in is a passive percent display — pre-R347 it had no hover
1044
+ // feedback at all (only a `title` tooltip). R347 extends the R344
1045
+ // (`+N more flows` footer) + R345 (panel titles) hover-letter-
1046
+ // spacing family from panel/footer surfaces into the HTML chrome
1047
+ // strip. Hovering the readout spreads its digits 0.5 px, signalling
1048
+ // "this is alive". tabular-nums + minWidth: 46 from R225 still lock
1049
+ // the column so the tween doesn't shove neighbouring controls.
1050
+ // 200ms ease-out joins the existing R264 color/border transition
1051
+ // list on the same span.
1052
+ const [hoveredZoomLevel, setHoveredZoomLevel] = useState(false);
1041
1053
  // R135: panel-wide hover-elevation. The recent-signal + legend
1042
1054
  // panels both already host clickable rows (R56/R116 recent rows,
1043
1055
  // R55/R61 legend rows) and a clickable footer (R133), so the
@@ -6236,7 +6248,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6236
6248
  x="0" y="0" width="230" height="88" rx="10"
6237
6249
  fill={pal.legendBox.fill}
6238
6250
  stroke={pal.legendBox.stroke}
6239
- opacity={isLight ? 0.97 : 0.92}
6251
+ // Round 348 / Loop: recent-signal panel rect opacity hover-
6252
+ // state bump — joins the panel-hover cue stack (R135 drop-
6253
+ // shadow boost + R345 title letter-spacing tween 0.3 → 0.4
6254
+ // + R266 fill theme-flip). Cyber 0.92 → 0.97, light 0.97 →
6255
+ // 1.0 on hoveredPanel === 'recent'. The panel "solidifies"
6256
+ // on hover — pure paint-level change, geometry-safe (bbox
6257
+ // unchanged so topo-overlap-test invariants hold). The
6258
+ // R247 transition list already includes `opacity 200ms
6259
+ // ease-out` so the value tween is automatic. Sibling
6260
+ // change at legend panel rect below (~line 7222).
6261
+ opacity={hoveredPanel === 'recent' ? (isLight ? 1 : 0.97) : (isLight ? 0.97 : 0.92)}
6240
6262
  style={{
6241
6263
  /* R135: drop-shadow intensifies on panel hover. Base
6242
6264
  shadow (2px / 6px blur) signals card elevation
@@ -7208,7 +7230,12 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7208
7230
  x="0" y="0" width="224" height="88" rx="10"
7209
7231
  fill={pal.legendBox.fill}
7210
7232
  stroke={pal.legendBox.stroke}
7211
- opacity={isLight ? 0.97 : 0.92}
7233
+ // R348 sibling legend panel rect opacity hover-state
7234
+ // bump 0.92 → 0.97 (cyber) / 0.97 → 1 (light) on
7235
+ // hoveredPanel === 'legend'. Pairs with the recent-signal
7236
+ // panel rect above so the two corner panels' hover cues
7237
+ // stay symmetric. Geometry-safe (paint-only).
7238
+ opacity={hoveredPanel === 'legend' ? (isLight ? 1 : 0.97) : (isLight ? 0.97 : 0.92)}
7212
7239
  style={{
7213
7240
  filter: hoveredPanel === 'legend'
7214
7241
  ? (isLight ? 'drop-shadow(0 4px 12px rgba(15,23,42,0.14))'
@@ -8145,11 +8172,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8145
8172
  chromePopping === 'zoom-in' || chromePopping === 'zoom-out'
8146
8173
  ? 'true' : 'false'
8147
8174
  }
8175
+ data-topo-chrome-zoom-level-hover={hoveredZoomLevel ? 'true' : 'false'}
8176
+ onMouseEnter={() => setHoveredZoomLevel(true)}
8177
+ onMouseLeave={() => setHoveredZoomLevel(false)}
8148
8178
  style={{
8149
8179
  color: pal.legendText,
8150
8180
  borderColor: pal.containerBorder,
8151
8181
  minWidth: 46,
8152
8182
  display: 'inline-block',
8183
+ // R347: letter-spacing hover tween — extends R344/R345
8184
+ // hover-letter-spacing family into the chrome strip.
8185
+ letterSpacing: hoveredZoomLevel ? '0.5px' : '0',
8153
8186
  /* Round 264 / Loop: zoom level readout gains theme-toggle
8154
8187
  transition. The span has theme-driven color (pal.
8155
8188
  legendText) + border-x (pal.containerBorder via the
@@ -8158,7 +8191,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8158
8191
  on theme flip while siblings eased. Sibling treatment
8159
8192
  to the nodeSize + zoom wrapper transitions added this
8160
8193
  round. */
8161
- transition: 'color 200ms ease-out, border-color 200ms ease-out',
8194
+ transition: 'color 200ms ease-out, border-color 200ms ease-out, letter-spacing 200ms ease-out',
8162
8195
  }}
8163
8196
  title="Current zoom level"
8164
8197
  >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.7",
3
+ "version": "0.5.1-preview.9",
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 348 verification: panel rect opacity hover-state bump.
2
+ * Recent-signal + legend panels both lift their fill opacity when
3
+ * hoveredPanel === <self>. Cyber: 0.92 → 0.97. Light: 0.97 → 1.0.
4
+ * Joins the panel-hover cue stack:
5
+ * - R135 drop-shadow boost
6
+ * - R345 panel title letter-spacing tween 0.3 → 0.4
7
+ * - R266 fill theme-flip
8
+ * - R348 rect opacity bump (this round)
9
+ * Pure paint-level change — geometry-safe, bbox unchanged, so
10
+ * topo-overlap-test invariants hold. The R247 transition list already
11
+ * includes `opacity 200ms ease-out` so the value tween is automatic.
12
+ *
13
+ * Contract (cyber theme):
14
+ * - Rest: both panel rects opacity=0.92.
15
+ * - Hover recent: recent-panel rect opacity=0.97.
16
+ * - Hover legend: legend-panel rect opacity=0.97.
17
+ * - data-topo-panel-elevation selectors locate the rects (existing).
18
+ * - data-topo-panel-hovered toggles on parent <g> (existing R135).
19
+ * - Pre-R348 invariants: R331 rx=10 + R247 transition list intact.
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: [ mk('alpha'), mk('beta'), mk('gamma') ] } });
42
+ });
43
+ // One message so the recent-signal panel mounts.
44
+ const now = Date.now();
45
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
46
+ { id: 'm1', from_alias: 'alpha', to_alias: 'beta', content: 'ping',
47
+ network_id: 'default', created_at: new Date(now - 5000).toISOString() },
48
+ ] } }));
49
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
50
+
51
+ const page = await ctx.newPage();
52
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
53
+ await page.waitForSelector('[data-topo-panel-elevation="recent"]', { timeout: 15000 });
54
+ await page.waitForSelector('[data-topo-panel-elevation="legend"]', { timeout: 5000 });
55
+ await page.waitForTimeout(400);
56
+
57
+ // Rest probe (cyber theme).
58
+ const restProbe = await page.evaluate(() => {
59
+ const r = document.querySelector('[data-topo-panel-elevation="recent"]');
60
+ const l = document.querySelector('[data-topo-panel-elevation="legend"]');
61
+ return {
62
+ recentOpacity: r?.getAttribute('opacity') ?? null,
63
+ legendOpacity: l?.getAttribute('opacity') ?? null,
64
+ recentRx: r?.getAttribute('rx') ?? null,
65
+ legendRx: l?.getAttribute('rx') ?? null,
66
+ recentTrans: r ? getComputedStyle(r).transition : null,
67
+ legendTrans: l ? getComputedStyle(l).transition : null,
68
+ };
69
+ });
70
+
71
+ // Hover recent panel.
72
+ await page.hover('[data-topo-panel="recent"]');
73
+ await page.waitForTimeout(300);
74
+ const recentHoverProbe = await page.evaluate(() => {
75
+ const r = document.querySelector('[data-topo-panel-elevation="recent"]');
76
+ return { opacity: r?.getAttribute('opacity') ?? null };
77
+ });
78
+
79
+ // Hover legend panel.
80
+ await page.hover('[data-topo-panel="legend"]');
81
+ await page.waitForTimeout(300);
82
+ const legendHoverProbe = await page.evaluate(() => {
83
+ const l = document.querySelector('[data-topo-panel-elevation="legend"]');
84
+ return { opacity: l?.getAttribute('opacity') ?? null };
85
+ });
86
+
87
+ await browser.close();
88
+
89
+ const hasTrans = (s, prop) =>
90
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
91
+
92
+ const results = {
93
+ rest_recent_0_92: restProbe.recentOpacity === '0.92',
94
+ rest_legend_0_92: restProbe.legendOpacity === '0.92',
95
+ rest_recent_rx_10: restProbe.recentRx === '10',
96
+ rest_legend_rx_10: restProbe.legendRx === '10',
97
+ trans_recent_op: hasTrans(restProbe.recentTrans, 'opacity'),
98
+ trans_legend_op: hasTrans(restProbe.legendTrans, 'opacity'),
99
+ trans_recent_filter: hasTrans(restProbe.recentTrans, 'filter'),
100
+ trans_legend_filter: hasTrans(restProbe.legendTrans, 'filter'),
101
+ hover_recent_0_97: recentHoverProbe.opacity === '0.97',
102
+ hover_legend_0_97: legendHoverProbe.opacity === '0.97',
103
+ };
104
+ const ok = Object.values(results).every(Boolean);
105
+ console.log(`${ok ? '✅' : '❌'} panel rect opacity hover bump:`, JSON.stringify(results),
106
+ '\n rest: ', restProbe,
107
+ '\n hover recent:', recentHoverProbe,
108
+ '\n hover legend:', legendHoverProbe);
109
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,91 @@
1
+ /* Round 347 verification: zoom-level readout in the chrome strip
2
+ * gains a hover-state letter-spacing tween 0 → 0.5 px. Extends the
3
+ * R344/R345 hover-letter-spacing family from panel/footer surfaces
4
+ * into the HTML chrome strip. The readout is sandwiched between
5
+ * zoom-out / zoom-in buttons; hovering it spreads digits 0.5 px,
6
+ * signalling "this is alive". tabular-nums + minWidth: 46 from R225
7
+ * lock the column so the tween doesn't shove neighbouring controls.
8
+ *
9
+ * Contract:
10
+ * - Rest: zoom-level letter-spacing 0 (or 'normal' / '0px').
11
+ * - Hover: letter-spacing 0.5px.
12
+ * - data-topo-chrome-zoom-level-hover toggles false → true.
13
+ * - transition list contains 'letter-spacing'.
14
+ * - Pre-R347 invariants intact: R264 color + border-color transitions
15
+ * preserved; tabular-nums + minWidth=46 still applied.
16
+ */
17
+ import { chromium } from 'playwright';
18
+ import { readFileSync } from 'node:fs';
19
+
20
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
21
+ const browser = await chromium.launch({ headless: true });
22
+ const ctx = await browser.newContext({ viewport: { width: 1500, 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 { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } 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 mk = (alias) => ({
33
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
34
+ network_id: nid, project_dir: null,
35
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
36
+ });
37
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('a'), mk('b'), mk('c') ] } });
38
+ });
39
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
40
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
41
+
42
+ const page = await ctx.newPage();
43
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
44
+ await page.waitForSelector('[data-topo-chrome-zoom-level]', { timeout: 15000 });
45
+ await page.waitForTimeout(400);
46
+
47
+ const restProbe = await page.evaluate(() => {
48
+ const el = document.querySelector('[data-topo-chrome-zoom-level]');
49
+ const cs = el ? getComputedStyle(el) : null;
50
+ return {
51
+ ls: cs?.letterSpacing ?? null,
52
+ transition: cs?.transition ?? null,
53
+ hoverAttr: el?.getAttribute('data-topo-chrome-zoom-level-hover') ?? null,
54
+ minWidth: cs?.minWidth ?? null,
55
+ fontVariant: cs?.fontVariantNumeric ?? null,
56
+ };
57
+ });
58
+
59
+ await page.hover('[data-topo-chrome-zoom-level]');
60
+ await page.waitForTimeout(250);
61
+ const hoverProbe = await page.evaluate(() => {
62
+ const el = document.querySelector('[data-topo-chrome-zoom-level]');
63
+ const cs = el ? getComputedStyle(el) : null;
64
+ return {
65
+ ls: cs?.letterSpacing ?? null,
66
+ hoverAttr: el?.getAttribute('data-topo-chrome-zoom-level-hover') ?? null,
67
+ };
68
+ });
69
+
70
+ await browser.close();
71
+
72
+ const hasTrans = (s, prop) =>
73
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
74
+ const isRestLs = (v) => v === 'normal' || v === '0px' || v === '0' || v === null;
75
+
76
+ const results = {
77
+ rest_ls_zero: isRestLs(restProbe.ls),
78
+ rest_hover_attr_false: restProbe.hoverAttr === 'false',
79
+ trans_has_letterspacing: hasTrans(restProbe.transition, 'letter-spacing'),
80
+ trans_has_color: hasTrans(restProbe.transition, 'color'), // R264 preserved
81
+ trans_has_border: hasTrans(restProbe.transition, 'border-color'),
82
+ min_width_46: restProbe.minWidth === '46px',
83
+ tabular_nums: /tabular-nums/.test(restProbe.fontVariant || ''),
84
+ hover_ls_0_5: hoverProbe.ls === '0.5px',
85
+ hover_attr_true: hoverProbe.hoverAttr === 'true',
86
+ };
87
+ const ok = Object.values(results).every(Boolean);
88
+ console.log(`${ok ? '✅' : '❌'} zoom level hover letter-spacing:`, JSON.stringify(results),
89
+ '\n rest: ', restProbe,
90
+ '\n hover:', hoverProbe);
91
+ process.exit(ok ? 0 : 1);